@strapi/content-manager 0.0.0-next.2a1c7a281f8080296033541146ea489dcd441daa → 0.0.0-next.2cc011c888f93c1bfab276c5f709a40fb3fc9aac

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 (92) hide show
  1. package/dist/admin/chunks/{ComponentConfigurationPage-C5H-5L1u.js → ComponentConfigurationPage-BBCYsnnE.js} +3 -3
  2. package/dist/admin/chunks/{ComponentConfigurationPage-C5H-5L1u.js.map → ComponentConfigurationPage-BBCYsnnE.js.map} +1 -1
  3. package/dist/admin/chunks/{ComponentConfigurationPage-BN2kOtDm.mjs → ComponentConfigurationPage-DNBN8tI3.mjs} +3 -3
  4. package/dist/admin/chunks/{ComponentConfigurationPage-BN2kOtDm.mjs.map → ComponentConfigurationPage-DNBN8tI3.mjs.map} +1 -1
  5. package/dist/admin/chunks/{EditConfigurationPage-tMgOELQG.mjs → EditConfigurationPage-CoivzF-x.mjs} +3 -3
  6. package/dist/admin/chunks/{EditConfigurationPage-tMgOELQG.mjs.map → EditConfigurationPage-CoivzF-x.mjs.map} +1 -1
  7. package/dist/admin/chunks/{EditConfigurationPage-BExtZuB7.js → EditConfigurationPage-Cu0Vt-uc.js} +3 -3
  8. package/dist/admin/chunks/{EditConfigurationPage-BExtZuB7.js.map → EditConfigurationPage-Cu0Vt-uc.js.map} +1 -1
  9. package/dist/admin/chunks/{EditViewPage-DFkloeMZ.js → EditViewPage-B48r4DLX.js} +6 -9
  10. package/dist/admin/chunks/EditViewPage-B48r4DLX.js.map +1 -0
  11. package/dist/admin/chunks/{EditViewPage-CYe7wAXF.mjs → EditViewPage-BpGtaOKG.mjs} +6 -9
  12. package/dist/admin/chunks/EditViewPage-BpGtaOKG.mjs.map +1 -0
  13. package/dist/admin/chunks/{Form-DGUP3zQO.js → Form-DD49gSWW.js} +2 -2
  14. package/dist/admin/chunks/{Form-DGUP3zQO.js.map → Form-DD49gSWW.js.map} +1 -1
  15. package/dist/admin/chunks/{Form-DTO0ZIaB.mjs → Form-rQQtxfmF.mjs} +2 -2
  16. package/dist/admin/chunks/{Form-DTO0ZIaB.mjs.map → Form-rQQtxfmF.mjs.map} +1 -1
  17. package/dist/admin/chunks/{History-C333pgXF.mjs → History-BdsTgpW-.mjs} +5 -5
  18. package/dist/admin/chunks/{History-C333pgXF.mjs.map → History-BdsTgpW-.mjs.map} +1 -1
  19. package/dist/admin/chunks/{History-CQznK1pG.js → History-RLJ9Svg6.js} +5 -5
  20. package/dist/admin/chunks/{History-CQznK1pG.js.map → History-RLJ9Svg6.js.map} +1 -1
  21. package/dist/admin/chunks/{Input-DLJZHw9Y.js → Input-BUVu6H9n.js} +4 -4
  22. package/dist/admin/chunks/{Input-DLJZHw9Y.js.map → Input-BUVu6H9n.js.map} +1 -1
  23. package/dist/admin/chunks/{Input-BexkC_pp.mjs → Input-CtIJ2J0c.mjs} +4 -4
  24. package/dist/admin/chunks/{Input-BexkC_pp.mjs.map → Input-CtIJ2J0c.mjs.map} +1 -1
  25. package/dist/admin/chunks/{ListConfigurationPage-BX2WR7MI.mjs → ListConfigurationPage-38s4e-VJ.mjs} +2 -2
  26. package/dist/admin/chunks/{ListConfigurationPage-BX2WR7MI.mjs.map → ListConfigurationPage-38s4e-VJ.mjs.map} +1 -1
  27. package/dist/admin/chunks/{ListConfigurationPage-71I_stAM.js → ListConfigurationPage-DfnrA3dw.js} +2 -2
  28. package/dist/admin/chunks/{ListConfigurationPage-71I_stAM.js.map → ListConfigurationPage-DfnrA3dw.js.map} +1 -1
  29. package/dist/admin/chunks/{ListViewPage-BDeT3Dkk.mjs → ListViewPage-BTmlktgT.mjs} +3 -3
  30. package/dist/admin/chunks/{ListViewPage-BDeT3Dkk.mjs.map → ListViewPage-BTmlktgT.mjs.map} +1 -1
  31. package/dist/admin/chunks/{ListViewPage-DV3heO4F.js → ListViewPage-D9-LGPq_.js} +3 -3
  32. package/dist/admin/chunks/{ListViewPage-DV3heO4F.js.map → ListViewPage-D9-LGPq_.js.map} +1 -1
  33. package/dist/admin/chunks/{NoContentTypePage-9JHYpYVX.mjs → NoContentTypePage-CcyR2i1K.mjs} +2 -2
  34. package/dist/admin/chunks/{NoContentTypePage-9JHYpYVX.mjs.map → NoContentTypePage-CcyR2i1K.mjs.map} +1 -1
  35. package/dist/admin/chunks/{NoContentTypePage-COih9y2J.js → NoContentTypePage-owzdv-pl.js} +2 -2
  36. package/dist/admin/chunks/{NoContentTypePage-COih9y2J.js.map → NoContentTypePage-owzdv-pl.js.map} +1 -1
  37. package/dist/admin/chunks/{NoPermissionsPage-DGAwRIlN.js → NoPermissionsPage-CM_r8w5u.js} +2 -2
  38. package/dist/admin/chunks/{NoPermissionsPage-DGAwRIlN.js.map → NoPermissionsPage-CM_r8w5u.js.map} +1 -1
  39. package/dist/admin/chunks/{NoPermissionsPage-DTe9I47q.mjs → NoPermissionsPage-lBonAXej.mjs} +2 -2
  40. package/dist/admin/chunks/{NoPermissionsPage-DTe9I47q.mjs.map → NoPermissionsPage-lBonAXej.mjs.map} +1 -1
  41. package/dist/admin/chunks/{Preview-CXtc9yEV.js → Preview-Bv3GKyWZ.js} +209 -86
  42. package/dist/admin/chunks/Preview-Bv3GKyWZ.js.map +1 -0
  43. package/dist/admin/chunks/{Preview-BEq0FXda.mjs → Preview-Dh5Z7aGp.mjs} +213 -90
  44. package/dist/admin/chunks/Preview-Dh5Z7aGp.mjs.map +1 -0
  45. package/dist/admin/chunks/{Relations-qeZyLDgQ.mjs → Relations-DP5krCGC.mjs} +3 -3
  46. package/dist/admin/chunks/{Relations-qeZyLDgQ.mjs.map → Relations-DP5krCGC.mjs.map} +1 -1
  47. package/dist/admin/chunks/{Relations-o7_hVGyK.js → Relations-T8Cr0N9M.js} +3 -3
  48. package/dist/admin/chunks/{Relations-o7_hVGyK.js.map → Relations-T8Cr0N9M.js.map} +1 -1
  49. package/dist/admin/chunks/{en-LfhocNG2.mjs → en-CImiNxXE.mjs} +3 -1
  50. package/dist/admin/chunks/{en-LfhocNG2.mjs.map → en-CImiNxXE.mjs.map} +1 -1
  51. package/dist/admin/chunks/{en-C1CjdAtC.js → en-CLf4SuMQ.js} +3 -1
  52. package/dist/admin/chunks/{en-C1CjdAtC.js.map → en-CLf4SuMQ.js.map} +1 -1
  53. package/dist/admin/chunks/{index-Cs6qwFQu.mjs → index-BkM_Z7pU.mjs} +78 -40
  54. package/dist/admin/chunks/index-BkM_Z7pU.mjs.map +1 -0
  55. package/dist/admin/chunks/{index-BHimg6jW.js → index-CGBB9Dho.js} +78 -39
  56. package/dist/admin/chunks/index-CGBB9Dho.js.map +1 -0
  57. package/dist/admin/chunks/{layout-DStNia_P.mjs → layout-D8ji6QNJ.mjs} +4 -4
  58. package/dist/admin/chunks/{layout-DStNia_P.mjs.map → layout-D8ji6QNJ.mjs.map} +1 -1
  59. package/dist/admin/chunks/{layout-Dtahn4Ue.js → layout-Dbmjk7mC.js} +4 -4
  60. package/dist/admin/chunks/{layout-Dtahn4Ue.js.map → layout-Dbmjk7mC.js.map} +1 -1
  61. package/dist/admin/chunks/{relations-Cq8NRUto.mjs → relations-Dv0FHoBS.mjs} +2 -2
  62. package/dist/admin/chunks/{relations-Cq8NRUto.mjs.map → relations-Dv0FHoBS.mjs.map} +1 -1
  63. package/dist/admin/chunks/{relations-XOYEEqMz.js → relations-jNJK8ESO.js} +2 -2
  64. package/dist/admin/chunks/{relations-XOYEEqMz.js.map → relations-jNJK8ESO.js.map} +1 -1
  65. package/dist/admin/chunks/uk-BtM6WnaE.mjs +313 -0
  66. package/dist/admin/chunks/uk-BtM6WnaE.mjs.map +1 -0
  67. package/dist/admin/chunks/uk-DB6OgySY.js +318 -0
  68. package/dist/admin/chunks/uk-DB6OgySY.js.map +1 -0
  69. package/dist/admin/index.js +1 -1
  70. package/dist/admin/index.mjs +1 -1
  71. package/dist/admin/src/components/InjectionZone.d.ts +7 -1
  72. package/dist/admin/src/content-manager.d.ts +4 -0
  73. package/dist/admin/src/hooks/useDocument.d.ts +2 -0
  74. package/dist/admin/src/hooks/useDocumentActions.d.ts +1 -0
  75. package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +2 -1
  76. package/dist/admin/src/preview/components/PreviewContent.d.ts +1 -2
  77. package/dist/admin/src/preview/pages/Preview.d.ts +2 -0
  78. package/dist/server/index.js +1 -1
  79. package/dist/server/index.js.map +1 -1
  80. package/dist/server/index.mjs +1 -1
  81. package/dist/server/index.mjs.map +1 -1
  82. package/package.json +8 -8
  83. package/dist/admin/chunks/EditViewPage-CYe7wAXF.mjs.map +0 -1
  84. package/dist/admin/chunks/EditViewPage-DFkloeMZ.js.map +0 -1
  85. package/dist/admin/chunks/Preview-BEq0FXda.mjs.map +0 -1
  86. package/dist/admin/chunks/Preview-CXtc9yEV.js.map +0 -1
  87. package/dist/admin/chunks/index-BHimg6jW.js.map +0 -1
  88. package/dist/admin/chunks/index-Cs6qwFQu.mjs.map +0 -1
  89. package/dist/admin/chunks/uk-B24MoTVg.js +0 -145
  90. package/dist/admin/chunks/uk-B24MoTVg.js.map +0 -1
  91. package/dist/admin/chunks/uk-Cpgmm7gE.mjs +0 -140
  92. package/dist/admin/chunks/uk-Cpgmm7gE.mjs.map +0 -1
@@ -4,14 +4,14 @@ var jsxRuntime = require('react/jsx-runtime');
4
4
  var React = require('react');
5
5
  var strapiAdmin = require('@strapi/admin/strapi-admin');
6
6
  var designSystem = require('@strapi/design-system');
7
+ var Icons = require('@strapi/icons');
7
8
  var reactIntl = require('react-intl');
8
9
  var reactRouterDom = require('react-router-dom');
9
- var index = require('./index-BHimg6jW.js');
10
- var Input = require('./Input-DLJZHw9Y.js');
11
- var Icons = require('@strapi/icons');
12
- var qs = require('qs');
13
10
  var styledComponents = require('styled-components');
14
- var EditViewPage = require('./EditViewPage-DFkloeMZ.js');
11
+ var index = require('./index-CGBB9Dho.js');
12
+ var Input = require('./Input-BUVu6H9n.js');
13
+ var qs = require('qs');
14
+ var EditViewPage = require('./EditViewPage-B48r4DLX.js');
15
15
  require('lodash/fp/mapValues');
16
16
  require('yup');
17
17
  require('fractional-indexing');
@@ -80,9 +80,9 @@ require('react-dnd-html5-backend');
80
80
  require('./objects-C3EebVVe.js');
81
81
  require('lodash/clone');
82
82
  require('lodash/toPath');
83
- require('./Relations-o7_hVGyK.js');
83
+ require('./Relations-T8Cr0N9M.js');
84
84
  require('react-window');
85
- require('./relations-XOYEEqMz.js');
85
+ require('./relations-jNJK8ESO.js');
86
86
  require('./ComponentIcon-C-EjOUPA.js');
87
87
  require('@strapi/icons/symbols');
88
88
  require('codemirror5');
@@ -120,40 +120,6 @@ function _interopNamespaceDefault(e) {
120
120
 
121
121
  var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
122
122
 
123
- const UnstablePreviewContent = ()=>{
124
- const previewUrl = usePreviewContext('PreviewContent', (state)=>state.url);
125
- const layout = usePreviewContext('PreviewContent', (state)=>state.layout);
126
- const { formatMessage } = reactIntl.useIntl();
127
- return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
128
- flex: 1,
129
- overflow: "auto",
130
- alignItems: "stretch",
131
- children: [
132
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
133
- overflow: "auto",
134
- flex: 1,
135
- borderWidth: "0 1px 0 0",
136
- borderColor: "neutral150",
137
- padding: 6,
138
- children: /*#__PURE__*/ jsxRuntime.jsx(Input.FormLayout, {
139
- layout: layout.layout,
140
- hasBackground: true
141
- })
142
- }),
143
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
144
- src: previewUrl,
145
- title: formatMessage({
146
- id: 'content-manager.preview.panel.title',
147
- defaultMessage: 'Preview'
148
- }),
149
- flex: 1,
150
- height: "100%",
151
- borderWidth: 0,
152
- tag: "iframe"
153
- }, previewUrl)
154
- ]
155
- });
156
- };
157
123
  const PreviewContent = ()=>{
158
124
  const previewUrl = usePreviewContext('PreviewContent', (state)=>state.url);
159
125
  const { formatMessage } = reactIntl.useIntl();
@@ -250,42 +216,45 @@ const PreviewTabs = ()=>{
250
216
  if (!hasDraftAndPublish) {
251
217
  return null;
252
218
  }
253
- return /*#__PURE__*/ jsxRuntime.jsx(jsxRuntime.Fragment, {
254
- children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tabs.Root, {
255
- variant: "simple",
256
- value: query.status || 'draft',
257
- onValueChange: handleTabChange,
258
- children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Tabs.List, {
259
- "aria-label": formatMessage({
260
- id: 'preview.tabs.label',
261
- defaultMessage: 'Document status'
219
+ return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tabs.Root, {
220
+ variant: "simple",
221
+ value: query.status || 'draft',
222
+ onValueChange: handleTabChange,
223
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Tabs.List, {
224
+ "aria-label": formatMessage({
225
+ id: 'preview.tabs.label',
226
+ defaultMessage: 'Document status'
227
+ }),
228
+ children: [
229
+ /*#__PURE__*/ jsxRuntime.jsx(StatusTab, {
230
+ value: "draft",
231
+ children: formatMessage({
232
+ id: 'content-manager.containers.List.draft',
233
+ defaultMessage: 'draft'
234
+ })
262
235
  }),
263
- children: [
264
- /*#__PURE__*/ jsxRuntime.jsx(StatusTab, {
265
- value: "draft",
266
- children: formatMessage({
267
- id: 'content-manager.containers.List.draft',
268
- defaultMessage: 'draft'
269
- })
270
- }),
271
- /*#__PURE__*/ jsxRuntime.jsx(StatusTab, {
272
- value: "published",
273
- disabled: documentStatus === 'draft',
274
- children: formatMessage({
275
- id: 'content-manager.containers.List.published',
276
- defaultMessage: 'published'
277
- })
236
+ /*#__PURE__*/ jsxRuntime.jsx(StatusTab, {
237
+ value: "published",
238
+ disabled: documentStatus === 'draft',
239
+ children: formatMessage({
240
+ id: 'content-manager.containers.List.published',
241
+ defaultMessage: 'published'
278
242
  })
279
- ]
280
- })
243
+ })
244
+ ]
281
245
  })
282
246
  });
283
247
  };
284
248
  /* -------------------------------------------------------------------------------------------------
285
249
  * PreviewHeader
286
250
  * -----------------------------------------------------------------------------------------------*/ const UnstablePreviewHeader = ()=>{
287
- // Get the document title
288
251
  const title = usePreviewContext('PreviewHeader', (state)=>state.title);
252
+ const document = usePreviewContext('PreviewHeader', (state)=>state.document);
253
+ const schema = usePreviewContext('PreviewHeader', (state)=>state.schema);
254
+ const meta = usePreviewContext('PreviewHeader', (state)=>state.meta);
255
+ const plugins = strapiAdmin.useStrapiApp('PreviewHeader', (state)=>state.plugins);
256
+ const iframeRef = usePreviewContext('PreviewHeader', (state)=>state.iframeRef);
257
+ const [{ query }] = strapiAdmin.useQueryParams();
289
258
  const { formatMessage } = reactIntl.useIntl();
290
259
  const { toggleNotification } = strapiAdmin.useNotification();
291
260
  const { copy } = strapiAdmin.useClipboard();
@@ -299,7 +268,22 @@ const PreviewTabs = ()=>{
299
268
  type: 'success'
300
269
  });
301
270
  };
271
+ const hasDraftAndPublish = schema.options?.draftAndPublish ?? false;
272
+ const documentActionProps = {
273
+ activeTab: query.status ?? null,
274
+ collectionType: schema.kind === 'collectionType' ? 'collection-types' : 'single-types',
275
+ model: schema.uid,
276
+ documentId: document.documentId,
277
+ document,
278
+ meta,
279
+ onPreview: ()=>{
280
+ iframeRef?.current?.contentWindow?.postMessage({
281
+ type: 'strapiUpdate'
282
+ });
283
+ }
284
+ };
302
285
  return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
286
+ height: "48px",
303
287
  gap: 4,
304
288
  background: "neutral0",
305
289
  borderColor: "neutral150",
@@ -327,17 +311,60 @@ const PreviewTabs = ()=>{
327
311
  /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
328
312
  flex: 1,
329
313
  paddingRight: 2,
330
- justifyContent: "space-between",
314
+ gap: 2,
315
+ justifyContent: hasDraftAndPublish ? 'space-between' : 'flex-end',
331
316
  children: [
332
- /*#__PURE__*/ jsxRuntime.jsx(PreviewTabs, {}),
333
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
334
- type: "button",
335
- label: formatMessage({
336
- id: 'preview.copy.label',
337
- defaultMessage: 'Copy preview link'
338
- }),
339
- onClick: handleCopyLink,
340
- children: /*#__PURE__*/ jsxRuntime.jsx(Icons.Link, {})
317
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
318
+ flex: "1 1 70%",
319
+ children: /*#__PURE__*/ jsxRuntime.jsx(PreviewTabs, {})
320
+ }),
321
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
322
+ gap: 2,
323
+ children: [
324
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
325
+ type: "button",
326
+ label: formatMessage({
327
+ id: 'preview.copy.label',
328
+ defaultMessage: 'Copy preview link'
329
+ }),
330
+ onClick: handleCopyLink,
331
+ children: /*#__PURE__*/ jsxRuntime.jsx(Icons.Link, {})
332
+ }),
333
+ /*#__PURE__*/ jsxRuntime.jsx(index.InjectionZone, {
334
+ area: "preview.actions"
335
+ }),
336
+ /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.DescriptionComponentRenderer, {
337
+ props: documentActionProps,
338
+ descriptions: plugins['content-manager'].apis.getDocumentActions('preview'),
339
+ children: (actions)=>{
340
+ const filteredActions = actions.filter((action)=>[
341
+ action.position
342
+ ].flat().includes('preview'));
343
+ const [primaryAction, secondaryAction] = filteredActions;
344
+ if (!primaryAction && !secondaryAction) return null;
345
+ // Both actions are available when draft and publish enabled
346
+ if (primaryAction && secondaryAction) {
347
+ return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
348
+ children: [
349
+ /*#__PURE__*/ jsxRuntime.jsx(index.DocumentActionButton, {
350
+ ...secondaryAction,
351
+ variant: secondaryAction.variant || 'secondary'
352
+ }),
353
+ /*#__PURE__*/ jsxRuntime.jsx(index.DocumentActionButton, {
354
+ ...primaryAction,
355
+ variant: primaryAction.variant || 'default'
356
+ })
357
+ ]
358
+ });
359
+ }
360
+ // Otherwise we just have the save action
361
+ return /*#__PURE__*/ jsxRuntime.jsx(index.DocumentActionButton, {
362
+ ...primaryAction,
363
+ variant: primaryAction.variant || 'secondary'
364
+ });
365
+ }
366
+ })
367
+ ]
341
368
  })
342
369
  ]
343
370
  })
@@ -427,8 +454,16 @@ const TitleContainer = styledComponents.styled(designSystem.Flex)`
427
454
  const [PreviewProvider, usePreviewContext] = strapiAdmin.createContext('PreviewPage');
428
455
  /* -------------------------------------------------------------------------------------------------
429
456
  * PreviewPage
430
- * -----------------------------------------------------------------------------------------------*/ const PreviewPage = ()=>{
457
+ * -----------------------------------------------------------------------------------------------*/ const AnimatedArrow = styledComponents.styled(Icons.ArrowLeft)`
458
+ will-change: transform;
459
+ rotate: ${(props)=>props.isSideEditorOpen ? '0deg' : '180deg'};
460
+ transition: rotate 0.2s ease-in-out;
461
+ `;
462
+ const PreviewPage = ()=>{
463
+ const location = reactRouterDom.useLocation();
431
464
  const { formatMessage } = reactIntl.useIntl();
465
+ const iframeRef = React__namespace.useRef(null);
466
+ const [isSideEditorOpen, setIsSideEditorOpen] = React__namespace.useState(true);
432
467
  // Read all the necessary data from the URL to find the right preview URL
433
468
  const { slug: model, id: documentId, collectionType } = reactRouterDom.useParams();
434
469
  const [{ query }] = strapiAdmin.useQueryParams();
@@ -462,16 +497,28 @@ const [PreviewProvider, usePreviewContext] = strapiAdmin.createContext('PreviewP
462
497
  params
463
498
  });
464
499
  const documentLayoutResponse = index.useDocumentLayout(model);
465
- if (documentResponse.isLoading || previewUrlResponse.isLoading || documentLayoutResponse.isLoading) {
500
+ const isLoading = previewUrlResponse.isLoading || documentLayoutResponse.isLoading || documentResponse.isLoading;
501
+ if (isLoading && !documentResponse.document?.documentId) {
466
502
  return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.Loading, {});
467
503
  }
468
- if (previewUrlResponse.error || documentLayoutResponse.error || !documentResponse.document || !documentResponse.meta || !documentResponse.schema) {
504
+ const initialValues = documentResponse.getInitialFormValues();
505
+ if (previewUrlResponse.error || documentLayoutResponse.error || !documentResponse.document || !documentResponse.meta || !documentResponse.schema || !initialValues) {
469
506
  return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.Error, {});
470
507
  }
471
508
  if (!previewUrlResponse.data?.data?.url) {
472
509
  return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.NoData, {});
473
510
  }
474
511
  const documentTitle = documentResponse.getTitle(documentLayoutResponse.edit.settings.mainField);
512
+ const validateSync = (values, options)=>{
513
+ const yupSchema = index.createYupSchema(documentResponse.schema?.attributes, documentResponse.components, {
514
+ status: documentResponse.document?.status,
515
+ ...options
516
+ });
517
+ return yupSchema.validateSync(values, {
518
+ abortEarly: false
519
+ });
520
+ };
521
+ const previewUrl = previewUrlResponse.data.data.url;
475
522
  return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
476
523
  children: [
477
524
  /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.Title, {
@@ -483,16 +530,28 @@ const [PreviewProvider, usePreviewContext] = strapiAdmin.createContext('PreviewP
483
530
  })
484
531
  }),
485
532
  /*#__PURE__*/ jsxRuntime.jsx(PreviewProvider, {
486
- url: previewUrlResponse.data.data.url,
533
+ url: previewUrl,
487
534
  document: documentResponse.document,
488
535
  title: documentTitle,
489
536
  meta: documentResponse.meta,
490
537
  schema: documentResponse.schema,
491
538
  layout: documentLayoutResponse.edit,
539
+ iframeRef: iframeRef,
492
540
  children: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Form, {
493
- method: "POST",
494
- initialValues: documentResponse.document,
541
+ method: "PUT",
542
+ disabled: query.status === 'published' && documentResponse && documentResponse.document.status === 'published',
543
+ initialValues: documentResponse.getInitialFormValues(),
544
+ initialErrors: location?.state?.forceValidation ? validateSync(initialValues, {}) : {},
495
545
  height: "100%",
546
+ validate: (values, options)=>{
547
+ const yupSchema = index.createYupSchema(documentResponse.schema?.attributes, documentResponse.components, {
548
+ status: documentResponse.document?.status,
549
+ ...options
550
+ });
551
+ return yupSchema.validate(values, {
552
+ abortEarly: false
553
+ });
554
+ },
496
555
  children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
497
556
  direction: "column",
498
557
  height: "100%",
@@ -500,7 +559,67 @@ const [PreviewProvider, usePreviewContext] = strapiAdmin.createContext('PreviewP
500
559
  children: window.strapi.future.isEnabled('unstablePreviewSideEditor') ? /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
501
560
  children: [
502
561
  /*#__PURE__*/ jsxRuntime.jsx(UnstablePreviewHeader, {}),
503
- /*#__PURE__*/ jsxRuntime.jsx(UnstablePreviewContent, {})
562
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
563
+ flex: 1,
564
+ overflow: "auto",
565
+ alignItems: "stretch",
566
+ children: [
567
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
568
+ overflow: "auto",
569
+ width: isSideEditorOpen ? '50%' : 0,
570
+ borderWidth: "0 1px 0 0",
571
+ borderColor: "neutral150",
572
+ paddingTop: 6,
573
+ paddingBottom: 6,
574
+ // Remove horizontal padding when the editor is closed or it won't fully disappear
575
+ paddingLeft: isSideEditorOpen ? 6 : 0,
576
+ paddingRight: isSideEditorOpen ? 6 : 0,
577
+ transition: "all 0.2s ease-in-out",
578
+ children: /*#__PURE__*/ jsxRuntime.jsx(Input.FormLayout, {
579
+ layout: documentLayoutResponse.edit.layout,
580
+ hasBackground: true
581
+ })
582
+ }),
583
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Box, {
584
+ position: "relative",
585
+ flex: 1,
586
+ height: "100%",
587
+ overflow: "hidden",
588
+ children: [
589
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
590
+ "data-testid": "preview-iframe",
591
+ ref: iframeRef,
592
+ src: previewUrl,
593
+ title: formatMessage({
594
+ id: 'content-manager.preview.panel.title',
595
+ defaultMessage: 'Preview'
596
+ }),
597
+ width: "100%",
598
+ height: "100%",
599
+ borderWidth: 0,
600
+ tag: "iframe"
601
+ }, previewUrl),
602
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
603
+ variant: "tertiary",
604
+ label: formatMessage(isSideEditorOpen ? {
605
+ id: 'content-manager.preview.content.close-editor',
606
+ defaultMessage: 'Close editor'
607
+ } : {
608
+ id: 'content-manager.preview.content.open-editor',
609
+ defaultMessage: 'Open editor'
610
+ }),
611
+ onClick: ()=>setIsSideEditorOpen((prev)=>!prev),
612
+ position: "absolute",
613
+ top: 2,
614
+ left: 2,
615
+ children: /*#__PURE__*/ jsxRuntime.jsx(AnimatedArrow, {
616
+ isSideEditorOpen: isSideEditorOpen
617
+ })
618
+ })
619
+ ]
620
+ })
621
+ ]
622
+ })
504
623
  ]
505
624
  }) : /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
506
625
  children: [
@@ -526,6 +645,10 @@ const [PreviewProvider, usePreviewContext] = strapiAdmin.createContext('PreviewP
526
645
  {
527
646
  action: 'plugin::content-manager.explorer.update',
528
647
  subject: model
648
+ },
649
+ {
650
+ action: 'plugin::content-manager.explorer.publish',
651
+ subject: model
529
652
  }
530
653
  ]);
531
654
  if (isLoading) {
@@ -570,4 +693,4 @@ const ProtectedPreviewPage = ()=>{
570
693
 
571
694
  exports.ProtectedPreviewPage = ProtectedPreviewPage;
572
695
  exports.usePreviewContext = usePreviewContext;
573
- //# sourceMappingURL=Preview-CXtc9yEV.js.map
696
+ //# sourceMappingURL=Preview-Bv3GKyWZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Preview-Bv3GKyWZ.js","sources":["../../../admin/src/preview/components/PreviewContent.tsx","../../../admin/src/preview/components/PreviewHeader.tsx","../../../admin/src/preview/pages/Preview.tsx"],"sourcesContent":["import { Box } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { usePreviewContext } from '../pages/Preview';\n\nconst PreviewContent = () => {\n const previewUrl = usePreviewContext('PreviewContent', (state) => state.url);\n\n const { formatMessage } = useIntl();\n\n return (\n <Box\n src={previewUrl}\n /**\n * For some reason, changing an iframe's src tag causes the browser to add a new item in the\n * history stack. This is an issue for us as it means clicking the back button will not let us\n * go back to the edit view. To fix it, we need to trick the browser into thinking this is a\n * different iframe when the preview URL changes. So we set a key prop to force React\n * to mount a different node when the src changes.\n */\n key={previewUrl}\n title={formatMessage({\n id: 'content-manager.preview.panel.title',\n defaultMessage: 'Preview',\n })}\n width=\"100%\"\n height=\"100%\"\n borderWidth={0}\n tag=\"iframe\"\n />\n );\n};\n\nexport { PreviewContent };\n","import * as React from 'react';\n\nimport {\n DescriptionComponentRenderer,\n useClipboard,\n useHistory,\n useNotification,\n useQueryParams,\n useStrapiApp,\n} from '@strapi/admin/strapi-admin';\nimport { IconButton, Tabs, Typography, Grid, Flex } from '@strapi/design-system';\nimport { Cross, Link as LinkIcon } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link, type To } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { InjectionZone } from '../../components/InjectionZone';\nimport { DocumentActionButton } from '../../pages/EditView/components/DocumentActions';\nimport { DocumentStatus } from '../../pages/EditView/components/DocumentStatus';\nimport { getDocumentStatus } from '../../pages/EditView/EditViewPage';\nimport { usePreviewContext } from '../pages/Preview';\n\nimport type { ContentManagerPlugin, DocumentActionProps } from '../../content-manager';\n\n/* -------------------------------------------------------------------------------------------------\n * ClosePreviewButton\n * -----------------------------------------------------------------------------------------------*/\n\nconst ClosePreviewButton = () => {\n const [{ query }] = useQueryParams<{\n plugins?: Record<string, unknown>;\n }>();\n const { formatMessage } = useIntl();\n\n const canGoBack = useHistory('BackButton', (state) => state.canGoBack);\n const goBack = useHistory('BackButton', (state) => state.goBack);\n const history = useHistory('BackButton', (state) => state.history);\n const locationIndex = useHistory('BackButton', (state) => state.currentLocationIndex);\n\n /**\n * Get the link destination from the history.\n * Rely on a fallback (the parent edit view page) if there's no page to go back .\n */\n const historyTo = canGoBack ? history.at(locationIndex - 2) : undefined;\n const fallback = {\n pathname: '..',\n search: stringify(query, { encode: false }),\n } satisfies To;\n const toWithFallback = historyTo ?? fallback;\n\n const handleClick = (e: React.MouseEvent) => {\n if (canGoBack) {\n // Prevent normal link behavior, go back in the history stack instead\n e.preventDefault();\n goBack();\n return;\n }\n\n // Otherwise rely on native link behavior to go back to the edit view. We don't use navigate()\n // here in order to get the relative=\"path\" functionality from the Link component.\n };\n\n return (\n <IconButton\n variant=\"ghost\"\n tag={Link}\n relative=\"path\"\n to={toWithFallback}\n onClick={handleClick}\n label={formatMessage({\n id: 'content-manager.preview.header.close',\n defaultMessage: 'Close preview',\n })}\n >\n <Cross />\n </IconButton>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Status\n * -----------------------------------------------------------------------------------------------*/\n\nconst Status = () => {\n // Get status\n const document = usePreviewContext('PreviewHeader', (state) => state.document);\n const schema = usePreviewContext('PreviewHeader', (state) => state.schema);\n const meta = usePreviewContext('PreviewHeader', (state) => state.meta);\n const hasDraftAndPublished = schema?.options?.draftAndPublish ?? false;\n\n if (!hasDraftAndPublished) {\n return null;\n }\n\n const status = getDocumentStatus(document, meta);\n\n return <DocumentStatus status={status} size=\"XS\" />;\n};\n\nconst PreviewTabs = () => {\n const { formatMessage } = useIntl();\n\n // URL query params\n const [{ query }, setQuery] = useQueryParams<{ status: 'draft' | 'published' }>();\n\n // Get status\n const document = usePreviewContext('PreviewHeader', (state) => state.document);\n const schema = usePreviewContext('PreviewHeader', (state) => state.schema);\n const meta = usePreviewContext('PreviewHeader', (state) => state.meta);\n const hasDraftAndPublish = schema?.options?.draftAndPublish ?? false;\n const documentStatus = getDocumentStatus(document, meta);\n\n const handleTabChange = (status: string) => {\n if (status === 'published' || status === 'draft') {\n setQuery({ status }, 'push', true);\n }\n };\n\n if (!hasDraftAndPublish) {\n return null;\n }\n\n return (\n <Tabs.Root variant=\"simple\" value={query.status || 'draft'} onValueChange={handleTabChange}>\n <Tabs.List\n aria-label={formatMessage({\n id: 'preview.tabs.label',\n defaultMessage: 'Document status',\n })}\n >\n <StatusTab value=\"draft\">\n {formatMessage({\n id: 'content-manager.containers.List.draft',\n defaultMessage: 'draft',\n })}\n </StatusTab>\n <StatusTab value=\"published\" disabled={documentStatus === 'draft'}>\n {formatMessage({\n id: 'content-manager.containers.List.published',\n defaultMessage: 'published',\n })}\n </StatusTab>\n </Tabs.List>\n </Tabs.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PreviewHeader\n * -----------------------------------------------------------------------------------------------*/\n\nconst UnstablePreviewHeader = () => {\n const title = usePreviewContext('PreviewHeader', (state) => state.title);\n const document = usePreviewContext('PreviewHeader', (state) => state.document);\n const schema = usePreviewContext('PreviewHeader', (state) => state.schema);\n const meta = usePreviewContext('PreviewHeader', (state) => state.meta);\n const plugins = useStrapiApp('PreviewHeader', (state) => state.plugins);\n const iframeRef = usePreviewContext('PreviewHeader', (state) => state.iframeRef);\n\n const [{ query }] = useQueryParams<{\n status?: 'draft' | 'published';\n }>();\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { copy } = useClipboard();\n\n const handleCopyLink = () => {\n copy(window.location.href);\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.preview.copy.success',\n defaultMessage: 'Copied preview link',\n }),\n type: 'success',\n });\n };\n\n const hasDraftAndPublish = schema.options?.draftAndPublish ?? false;\n const documentActionProps = {\n activeTab: query.status ?? null,\n collectionType: schema.kind === 'collectionType' ? 'collection-types' : 'single-types',\n model: schema.uid,\n documentId: document.documentId,\n document,\n meta,\n onPreview: () => {\n iframeRef?.current?.contentWindow?.postMessage({ type: 'strapiUpdate' });\n },\n } satisfies DocumentActionProps;\n\n return (\n <Flex height=\"48px\" gap={4} background=\"neutral0\" borderColor=\"neutral150\" tag=\"header\">\n {/* Title and status */}\n <TitleContainer height=\"100%\" paddingLeft={2} paddingRight={4}>\n <ClosePreviewButton />\n <PreviewTitle\n tag=\"h1\"\n title={title}\n maxWidth=\"200px\"\n fontSize={2}\n paddingLeft={2}\n paddingRight={3}\n fontWeight={600}\n >\n {title}\n </PreviewTitle>\n <Status />\n </TitleContainer>\n\n {/* Tabs and actions */}\n <Flex\n flex={1}\n paddingRight={2}\n gap={2}\n justifyContent={hasDraftAndPublish ? 'space-between' : 'flex-end'}\n >\n <Flex flex=\"1 1 70%\">\n <PreviewTabs />\n </Flex>\n <Flex gap={2}>\n <IconButton\n type=\"button\"\n label={formatMessage({\n id: 'preview.copy.label',\n defaultMessage: 'Copy preview link',\n })}\n onClick={handleCopyLink}\n >\n <LinkIcon />\n </IconButton>\n <InjectionZone area=\"preview.actions\" />\n <DescriptionComponentRenderer\n props={documentActionProps}\n descriptions={(\n plugins['content-manager'].apis as ContentManagerPlugin['config']['apis']\n ).getDocumentActions('preview')}\n >\n {(actions) => {\n const filteredActions = actions.filter((action) =>\n [action.position].flat().includes('preview')\n );\n const [primaryAction, secondaryAction] = filteredActions;\n\n if (!primaryAction && !secondaryAction) return null;\n\n // Both actions are available when draft and publish enabled\n if (primaryAction && secondaryAction) {\n return (\n <>\n {/* Save */}\n <DocumentActionButton\n {...secondaryAction}\n variant={secondaryAction.variant || 'secondary'}\n />\n {/* Publish */}\n <DocumentActionButton\n {...primaryAction}\n variant={primaryAction.variant || 'default'}\n />\n </>\n );\n }\n\n // Otherwise we just have the save action\n return (\n <DocumentActionButton\n {...primaryAction}\n variant={primaryAction.variant || 'secondary'}\n />\n );\n }}\n </DescriptionComponentRenderer>\n </Flex>\n </Flex>\n </Flex>\n );\n};\n\nconst PreviewHeader = () => {\n // Get the document title\n const title = usePreviewContext('PreviewHeader', (state) => state.title);\n\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { copy } = useClipboard();\n\n const handleCopyLink = () => {\n copy(window.location.href);\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.preview.copy.success',\n defaultMessage: 'Copied preview link',\n }),\n type: 'success',\n });\n };\n\n return (\n <Grid.Root\n gap={3}\n gridCols={3}\n paddingLeft={2}\n paddingRight={2}\n background=\"neutral0\"\n borderColor=\"neutral150\"\n tag=\"header\"\n >\n {/* Title and status */}\n <Grid.Item xs={1} paddingTop={2} paddingBottom={2} gap={3}>\n <ClosePreviewButton />\n <PreviewTitle tag=\"h1\" fontWeight={600} fontSize={2} maxWidth=\"200px\" title={title}>\n {title}\n </PreviewTitle>\n <Status />\n </Grid.Item>\n {/* Tabs */}\n <Grid.Item xs={1} marginBottom=\"-1px\" alignItems=\"end\" margin=\"auto\">\n <PreviewTabs />\n </Grid.Item>\n {/* Copy link */}\n <Grid.Item xs={1} justifyContent=\"end\" paddingTop={2} paddingBottom={2}>\n <IconButton\n type=\"button\"\n label={formatMessage({\n id: 'preview.copy.label',\n defaultMessage: 'Copy preview link',\n })}\n onClick={handleCopyLink}\n >\n <LinkIcon />\n </IconButton>\n </Grid.Item>\n </Grid.Root>\n );\n};\n\nconst PreviewTitle = styled(Typography)`\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nconst StatusTab = styled(Tabs.Trigger)`\n text-transform: uppercase;\n`;\n\nconst TitleContainer = styled(Flex)`\n border-right: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\nexport { PreviewHeader, UnstablePreviewHeader };\n","import * as React from 'react';\n\nimport {\n Page,\n useQueryParams,\n useRBAC,\n createContext,\n Form as FormContext,\n} from '@strapi/admin/strapi-admin';\nimport { Box, Flex, FocusTrap, IconButton, Portal } from '@strapi/design-system';\nimport { ArrowLeft } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useParams } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { GetPreviewUrl } from '../../../../shared/contracts/preview';\nimport { COLLECTION_TYPES } from '../../constants/collections';\nimport { DocumentRBAC } from '../../features/DocumentRBAC';\nimport { type UseDocument, useDocument } from '../../hooks/useDocument';\nimport { type EditLayout, useDocumentLayout } from '../../hooks/useDocumentLayout';\nimport { FormLayout } from '../../pages/EditView/components/FormLayout';\nimport { buildValidParams } from '../../utils/api';\nimport { createYupSchema } from '../../utils/validation';\nimport { PreviewContent } from '../components/PreviewContent';\nimport { PreviewHeader, UnstablePreviewHeader } from '../components/PreviewHeader';\nimport { useGetPreviewUrlQuery } from '../services/preview';\n\nimport type { UID } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * PreviewProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PreviewContextValue {\n url: string;\n title: string;\n document: NonNullable<ReturnType<UseDocument>['document']>;\n meta: NonNullable<ReturnType<UseDocument>['meta']>;\n schema: NonNullable<ReturnType<UseDocument>['schema']>;\n layout: EditLayout;\n iframeRef?: React.RefObject<HTMLIFrameElement>;\n}\n\nconst [PreviewProvider, usePreviewContext] = createContext<PreviewContextValue>('PreviewPage');\n\n/* -------------------------------------------------------------------------------------------------\n * PreviewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst AnimatedArrow = styled(ArrowLeft)<{ isSideEditorOpen: boolean }>`\n will-change: transform;\n rotate: ${(props) => (props.isSideEditorOpen ? '0deg' : '180deg')};\n transition: rotate 0.2s ease-in-out;\n`;\n\nconst PreviewPage = () => {\n const location = useLocation();\n const { formatMessage } = useIntl();\n\n const iframeRef = React.useRef<HTMLIFrameElement>(null);\n const [isSideEditorOpen, setIsSideEditorOpen] = React.useState(true);\n\n // Read all the necessary data from the URL to find the right preview URL\n const {\n slug: model,\n id: documentId,\n collectionType,\n } = useParams<{\n slug: UID.ContentType;\n id: string;\n collectionType: string;\n }>();\n const [{ query }] = useQueryParams<{\n plugins?: Record<string, unknown>;\n status?: string;\n }>();\n\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n if (!collectionType) {\n throw new Error('Could not find collectionType in url params');\n }\n\n if (!model) {\n throw new Error('Could not find model in url params');\n }\n\n // Only collection types must have a documentId\n if (collectionType === COLLECTION_TYPES && !documentId) {\n throw new Error('Could not find documentId in url params');\n }\n\n const previewUrlResponse = useGetPreviewUrlQuery({\n params: {\n contentType: model,\n },\n query: {\n documentId,\n locale: params.locale,\n status: params.status as GetPreviewUrl.Request['query']['status'],\n },\n });\n const documentResponse = useDocument({\n model,\n collectionType,\n documentId,\n params,\n });\n const documentLayoutResponse = useDocumentLayout(model);\n\n const isLoading =\n previewUrlResponse.isLoading || documentLayoutResponse.isLoading || documentResponse.isLoading;\n if (isLoading && !documentResponse.document?.documentId) {\n return <Page.Loading />;\n }\n\n const initialValues = documentResponse.getInitialFormValues();\n\n if (\n previewUrlResponse.error ||\n documentLayoutResponse.error ||\n !documentResponse.document ||\n !documentResponse.meta ||\n !documentResponse.schema ||\n !initialValues\n ) {\n return <Page.Error />;\n }\n\n if (!previewUrlResponse.data?.data?.url) {\n return <Page.NoData />;\n }\n\n const documentTitle = documentResponse.getTitle(documentLayoutResponse.edit.settings.mainField);\n\n const validateSync = (values: Record<string, unknown>, options: Record<string, string>) => {\n const yupSchema = createYupSchema(\n documentResponse.schema?.attributes,\n documentResponse.components,\n {\n status: documentResponse.document?.status,\n ...options,\n }\n );\n\n return yupSchema.validateSync(values, { abortEarly: false });\n };\n\n const previewUrl = previewUrlResponse.data.data.url;\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n {\n id: 'content-manager.preview.page-title',\n defaultMessage: '{contentType} preview',\n },\n {\n contentType: documentTitle,\n }\n )}\n </Page.Title>\n <PreviewProvider\n url={previewUrl}\n document={documentResponse.document}\n title={documentTitle}\n meta={documentResponse.meta}\n schema={documentResponse.schema}\n layout={documentLayoutResponse.edit}\n iframeRef={iframeRef}\n >\n <FormContext\n method=\"PUT\"\n disabled={\n query.status === 'published' &&\n documentResponse &&\n documentResponse.document.status === 'published'\n }\n initialValues={documentResponse.getInitialFormValues()}\n initialErrors={location?.state?.forceValidation ? validateSync(initialValues, {}) : {}}\n height=\"100%\"\n validate={(values: Record<string, unknown>, options: Record<string, string>) => {\n const yupSchema = createYupSchema(\n documentResponse.schema?.attributes,\n documentResponse.components,\n {\n status: documentResponse.document?.status,\n ...options,\n }\n );\n\n return yupSchema.validate(values, { abortEarly: false });\n }}\n >\n <Flex direction=\"column\" height=\"100%\" alignItems=\"stretch\">\n {window.strapi.future.isEnabled('unstablePreviewSideEditor') ? (\n <>\n <UnstablePreviewHeader />\n <Flex flex={1} overflow=\"auto\" alignItems=\"stretch\">\n <Box\n overflow=\"auto\"\n width={isSideEditorOpen ? '50%' : 0}\n borderWidth=\"0 1px 0 0\"\n borderColor=\"neutral150\"\n paddingTop={6}\n paddingBottom={6}\n // Remove horizontal padding when the editor is closed or it won't fully disappear\n paddingLeft={isSideEditorOpen ? 6 : 0}\n paddingRight={isSideEditorOpen ? 6 : 0}\n transition=\"all 0.2s ease-in-out\"\n >\n <FormLayout layout={documentLayoutResponse.edit.layout} hasBackground />\n </Box>\n <Box position=\"relative\" flex={1} height=\"100%\" overflow=\"hidden\">\n <Box\n data-testid=\"preview-iframe\"\n ref={iframeRef}\n src={previewUrl}\n /**\n * For some reason, changing an iframe's src tag causes the browser to add a new item in the\n * history stack. This is an issue for us as it means clicking the back button will not let us\n * go back to the edit view. To fix it, we need to trick the browser into thinking this is a\n * different iframe when the preview URL changes. So we set a key prop to force React\n * to mount a different node when the src changes.\n */\n key={previewUrl}\n title={formatMessage({\n id: 'content-manager.preview.panel.title',\n defaultMessage: 'Preview',\n })}\n width=\"100%\"\n height=\"100%\"\n borderWidth={0}\n tag=\"iframe\"\n />\n <IconButton\n variant=\"tertiary\"\n label={formatMessage(\n isSideEditorOpen\n ? {\n id: 'content-manager.preview.content.close-editor',\n defaultMessage: 'Close editor',\n }\n : {\n id: 'content-manager.preview.content.open-editor',\n defaultMessage: 'Open editor',\n }\n )}\n onClick={() => setIsSideEditorOpen((prev) => !prev)}\n position=\"absolute\"\n top={2}\n left={2}\n >\n <AnimatedArrow isSideEditorOpen={isSideEditorOpen} />\n </IconButton>\n </Box>\n </Flex>\n </>\n ) : (\n <>\n <PreviewHeader />\n <PreviewContent />\n </>\n )}\n </Flex>\n </FormContext>\n </PreviewProvider>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedPreviewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedPreviewPageImpl = () => {\n const { slug: model } = useParams<{\n slug: string;\n }>();\n const {\n permissions = [],\n isLoading,\n error,\n } = useRBAC([\n { action: 'plugin::content-manager.explorer.read', subject: model },\n { action: 'plugin::content-manager.explorer.update', subject: model },\n { action: 'plugin::content-manager.explorer.publish', subject: model },\n ]);\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (error || !model) {\n return (\n <Box\n height=\"100vh\"\n width=\"100vw\"\n position=\"fixed\"\n top={0}\n left={0}\n zIndex={2}\n background=\"neutral0\"\n >\n <Page.Error />\n </Box>\n );\n }\n\n return (\n <Box\n height=\"100vh\"\n width=\"100vw\"\n position=\"fixed\"\n top={0}\n left={0}\n zIndex={2}\n background=\"neutral0\"\n >\n <Page.Protect\n permissions={permissions.filter((permission) =>\n permission.action.includes('explorer.read')\n )}\n >\n <DocumentRBAC permissions={permissions}>\n <PreviewPage />\n </DocumentRBAC>\n </Page.Protect>\n </Box>\n );\n};\n\nconst ProtectedPreviewPage = () => {\n return (\n <Portal>\n <FocusTrap>\n <ProtectedPreviewPageImpl />\n </FocusTrap>\n </Portal>\n );\n};\n\nexport { ProtectedPreviewPage, usePreviewContext };\n"],"names":["PreviewContent","previewUrl","usePreviewContext","state","url","formatMessage","useIntl","_jsx","Box","src","title","id","defaultMessage","width","height","borderWidth","tag","ClosePreviewButton","query","useQueryParams","canGoBack","useHistory","goBack","history","locationIndex","currentLocationIndex","historyTo","at","undefined","fallback","pathname","search","stringify","encode","toWithFallback","handleClick","e","preventDefault","IconButton","variant","Link","relative","to","onClick","label","Cross","Status","document","schema","meta","hasDraftAndPublished","options","draftAndPublish","status","getDocumentStatus","DocumentStatus","size","PreviewTabs","setQuery","hasDraftAndPublish","documentStatus","handleTabChange","Tabs","Root","value","onValueChange","_jsxs","List","aria-label","StatusTab","disabled","UnstablePreviewHeader","plugins","useStrapiApp","iframeRef","toggleNotification","useNotification","copy","useClipboard","handleCopyLink","window","location","href","message","type","documentActionProps","activeTab","collectionType","kind","model","uid","documentId","onPreview","current","contentWindow","postMessage","Flex","gap","background","borderColor","TitleContainer","paddingLeft","paddingRight","PreviewTitle","maxWidth","fontSize","fontWeight","flex","justifyContent","LinkIcon","InjectionZone","area","DescriptionComponentRenderer","props","descriptions","apis","getDocumentActions","actions","filteredActions","filter","action","position","flat","includes","primaryAction","secondaryAction","_Fragment","DocumentActionButton","PreviewHeader","Grid","gridCols","Item","xs","paddingTop","paddingBottom","marginBottom","alignItems","margin","styled","Typography","Trigger","theme","colors","neutral150","PreviewProvider","createContext","AnimatedArrow","ArrowLeft","isSideEditorOpen","PreviewPage","useLocation","React","useRef","setIsSideEditorOpen","useState","slug","useParams","params","useMemo","buildValidParams","Error","COLLECTION_TYPES","previewUrlResponse","useGetPreviewUrlQuery","contentType","locale","documentResponse","useDocument","documentLayoutResponse","useDocumentLayout","isLoading","Page","Loading","initialValues","getInitialFormValues","error","data","NoData","documentTitle","getTitle","edit","settings","mainField","validateSync","values","yupSchema","createYupSchema","attributes","components","abortEarly","Title","layout","FormContext","method","initialErrors","forceValidation","validate","direction","strapi","future","isEnabled","overflow","transition","FormLayout","hasBackground","data-testid","ref","prev","top","left","ProtectedPreviewPageImpl","permissions","useRBAC","subject","zIndex","Protect","permission","DocumentRBAC","ProtectedPreviewPage","Portal","FocusTrap"],"mappings":"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"}