@strapi/content-manager 5.23.0 → 5.23.2

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 (74) hide show
  1. package/dist/admin/components/LeftMenu.js +13 -15
  2. package/dist/admin/components/LeftMenu.js.map +1 -1
  3. package/dist/admin/components/LeftMenu.mjs +14 -16
  4. package/dist/admin/components/LeftMenu.mjs.map +1 -1
  5. package/dist/admin/components/Widgets.js +4 -2
  6. package/dist/admin/components/Widgets.js.map +1 -1
  7. package/dist/admin/components/Widgets.mjs +4 -2
  8. package/dist/admin/components/Widgets.mjs.map +1 -1
  9. package/dist/admin/pages/EditView/EditViewPage.js +3 -11
  10. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  11. package/dist/admin/pages/EditView/EditViewPage.mjs +4 -12
  12. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  13. package/dist/admin/pages/EditView/components/Blocker.js +18 -0
  14. package/dist/admin/pages/EditView/components/Blocker.js.map +1 -0
  15. package/dist/admin/pages/EditView/components/Blocker.mjs +16 -0
  16. package/dist/admin/pages/EditView/components/Blocker.mjs.map +1 -0
  17. package/dist/admin/pages/EditView/components/InputRenderer.js +15 -5
  18. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  19. package/dist/admin/pages/EditView/components/InputRenderer.mjs +15 -5
  20. package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
  21. package/dist/admin/pages/EditView/utils/data.js +26 -7
  22. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  23. package/dist/admin/pages/EditView/utils/data.mjs +26 -7
  24. package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
  25. package/dist/admin/preview/components/InputPopover.js +73 -0
  26. package/dist/admin/preview/components/InputPopover.js.map +1 -0
  27. package/dist/admin/preview/components/InputPopover.mjs +70 -0
  28. package/dist/admin/preview/components/InputPopover.mjs.map +1 -0
  29. package/dist/admin/preview/hooks/usePreviewInputManager.js +67 -0
  30. package/dist/admin/preview/hooks/usePreviewInputManager.js.map +1 -0
  31. package/dist/admin/preview/hooks/usePreviewInputManager.mjs +46 -0
  32. package/dist/admin/preview/hooks/usePreviewInputManager.mjs.map +1 -0
  33. package/dist/admin/preview/pages/Preview.js +119 -118
  34. package/dist/admin/preview/pages/Preview.js.map +1 -1
  35. package/dist/admin/preview/pages/Preview.mjs +120 -119
  36. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  37. package/dist/admin/preview/utils/constants.js +2 -1
  38. package/dist/admin/preview/utils/constants.js.map +1 -1
  39. package/dist/admin/preview/utils/constants.mjs +2 -2
  40. package/dist/admin/preview/utils/constants.mjs.map +1 -1
  41. package/dist/admin/preview/utils/getSendMessage.js +22 -0
  42. package/dist/admin/preview/utils/getSendMessage.js.map +1 -0
  43. package/dist/admin/preview/utils/getSendMessage.mjs +20 -0
  44. package/dist/admin/preview/utils/getSendMessage.mjs.map +1 -0
  45. package/dist/admin/preview/utils/previewScript.js +339 -92
  46. package/dist/admin/preview/utils/previewScript.js.map +1 -1
  47. package/dist/admin/preview/utils/previewScript.mjs +339 -92
  48. package/dist/admin/preview/utils/previewScript.mjs.map +1 -1
  49. package/dist/admin/src/pages/EditView/components/Blocker.d.ts +5 -0
  50. package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +1 -1
  51. package/dist/admin/src/preview/components/InputPopover.d.ts +6 -0
  52. package/dist/admin/src/preview/hooks/usePreviewInputManager.d.ts +4 -0
  53. package/dist/admin/src/preview/pages/Preview.d.ts +8 -0
  54. package/dist/admin/src/preview/utils/constants.d.ts +4 -1
  55. package/dist/admin/src/preview/utils/getSendMessage.d.ts +11 -0
  56. package/dist/admin/src/preview/utils/previewScript.d.ts +6 -1
  57. package/dist/admin/translations/en.json.js +1 -0
  58. package/dist/admin/translations/en.json.js.map +1 -1
  59. package/dist/admin/translations/en.json.mjs +1 -0
  60. package/dist/admin/translations/en.json.mjs.map +1 -1
  61. package/dist/admin/translations/es.json.js +1 -0
  62. package/dist/admin/translations/es.json.js.map +1 -1
  63. package/dist/admin/translations/es.json.mjs +1 -0
  64. package/dist/admin/translations/es.json.mjs.map +1 -1
  65. package/dist/admin/translations/fr.json.js +1 -0
  66. package/dist/admin/translations/fr.json.js.map +1 -1
  67. package/dist/admin/translations/fr.json.mjs +1 -0
  68. package/dist/admin/translations/fr.json.mjs.map +1 -1
  69. package/dist/server/homepage/services/homepage.js +1 -1
  70. package/dist/server/homepage/services/homepage.js.map +1 -1
  71. package/dist/server/homepage/services/homepage.mjs +1 -1
  72. package/dist/server/homepage/services/homepage.mjs.map +1 -1
  73. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
  74. package/package.json +5 -5
@@ -1,6 +1,6 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
- import { createContext, useRBAC, Page, useQueryParams, Form, Blocker } from '@strapi/admin/strapi-admin';
3
+ import { createContext, useRBAC, Page, useQueryParams, Form } from '@strapi/admin/strapi-admin';
4
4
  import { Portal, FocusTrap, Box, Flex, IconButton, SingleSelect, SingleSelectOption } from '@strapi/design-system';
5
5
  import { ArrowLineLeft } from '@strapi/icons';
6
6
  import { useIntl } from 'react-intl';
@@ -10,13 +10,16 @@ import { COLLECTION_TYPES } from '../../constants/collections.mjs';
10
10
  import { DocumentRBAC } from '../../features/DocumentRBAC.mjs';
11
11
  import { useDocument } from '../../hooks/useDocument.mjs';
12
12
  import { useDocumentLayout } from '../../hooks/useDocumentLayout.mjs';
13
+ import { Blocker } from '../../pages/EditView/components/Blocker.mjs';
13
14
  import { FormLayout } from '../../pages/EditView/components/FormLayout.mjs';
14
15
  import { handleInvisibleAttributes } from '../../pages/EditView/utils/data.mjs';
15
16
  import { buildValidParams } from '../../utils/api.mjs';
16
17
  import { createYupSchema } from '../../utils/validation.mjs';
18
+ import { InputPopover } from '../components/InputPopover.mjs';
17
19
  import { PreviewHeader } from '../components/PreviewHeader.mjs';
18
20
  import { useGetPreviewUrlQuery } from '../services/preview.mjs';
19
- import { PUBLIC_EVENTS } from '../utils/constants.mjs';
21
+ import { PUBLIC_EVENTS, INTERNAL_EVENTS } from '../utils/constants.mjs';
22
+ import { getSendMessage } from '../utils/getSendMessage.mjs';
20
23
  import { previewScript } from '../utils/previewScript.mjs';
21
24
 
22
25
  /* -------------------------------------------------------------------------------------------------
@@ -49,28 +52,12 @@ const [PreviewProvider, usePreviewContext] = createContext('PreviewPage');
49
52
  rotate: ${(props)=>props.$isSideEditorOpen ? '0deg' : '180deg'};
50
53
  transition: rotate 0.2s ease-in-out;
51
54
  `;
52
- /**
53
- * A function factory so we can generate a new sendMessage everytime we need one.
54
- * We can't store and reuse a single sendMessage because it needs to have a stable identity
55
- * as it used in a useEffect function. And we can't rely on useCallback because we need the
56
- * up-to-date iframe ref, and this would make it stale (refs don't trigger callback reevaluations).
57
- */ function getSendMessage(iframe) {
58
- return (type, payload)=>{
59
- if (!iframe.current) return;
60
- const { origin } = new URL(iframe.current.src);
61
- iframe.current.contentWindow?.postMessage({
62
- type,
63
- ...payload !== undefined && {
64
- payload
65
- }
66
- }, origin);
67
- };
68
- }
69
55
  const PreviewPage = ()=>{
70
56
  const location = useLocation();
71
57
  const { formatMessage } = useIntl();
72
58
  const iframeRef = React.useRef(null);
73
59
  const [isSideEditorOpen, setIsSideEditorOpen] = React.useState(true);
60
+ const [popoverField, setPopoverField] = React.useState(null);
74
61
  // Read all the necessary data from the URL to find the right preview URL
75
62
  const { slug: model, id: documentId, collectionType } = useParams();
76
63
  const [{ query }] = useQueryParams();
@@ -82,6 +69,13 @@ const PreviewPage = ()=>{
82
69
  // Listen for ready message from iframe before injecting script
83
70
  React.useEffect(()=>{
84
71
  const handleMessage = (event)=>{
72
+ // Only listen to events from the preview iframe
73
+ if (iframeRef.current) {
74
+ const previewOrigin = new URL(iframeRef.current?.src).origin;
75
+ if (event.origin !== previewOrigin) {
76
+ return;
77
+ }
78
+ }
85
79
  if (event.data?.type === PUBLIC_EVENTS.PREVIEW_READY) {
86
80
  const script = `(${previewScript.toString()})()`;
87
81
  const sendMessage = getSendMessage(iframeRef);
@@ -89,6 +83,9 @@ const PreviewPage = ()=>{
89
83
  script
90
84
  });
91
85
  }
86
+ if (event.data?.type === INTERNAL_EVENTS.STRAPI_FIELD_FOCUS_INTENT) {
87
+ setPopoverField?.(event.data.payload);
88
+ }
92
89
  };
93
90
  window.addEventListener('message', handleMessage);
94
91
  return ()=>{
@@ -175,6 +172,9 @@ const PreviewPage = ()=>{
175
172
  schema: documentResponse.schema,
176
173
  layout: documentLayoutResponse.edit,
177
174
  onPreview: onPreview,
175
+ iframeRef: iframeRef,
176
+ popoverField: popoverField,
177
+ setPopoverField: setPopoverField,
178
178
  children: /*#__PURE__*/ jsx(Form, {
179
179
  method: "PUT",
180
180
  disabled: query.status === 'published' && documentResponse && documentResponse.document.status !== 'draft',
@@ -196,108 +196,109 @@ const PreviewPage = ()=>{
196
196
  abortEarly: false
197
197
  });
198
198
  },
199
- children: ({ resetForm })=>/*#__PURE__*/ jsxs(Flex, {
200
- direction: "column",
201
- height: "100%",
202
- alignItems: "stretch",
203
- children: [
204
- /*#__PURE__*/ jsx(Blocker, {
205
- onProceed: resetForm
206
- }),
207
- /*#__PURE__*/ jsx(PreviewHeader, {}),
208
- /*#__PURE__*/ jsxs(Flex, {
209
- flex: 1,
210
- overflow: "auto",
211
- alignItems: "stretch",
212
- children: [
213
- hasAdvancedPreview && /*#__PURE__*/ jsx(Box, {
214
- overflow: "auto",
215
- width: isSideEditorOpen ? '50%' : 0,
216
- borderWidth: "0 1px 0 0",
217
- borderColor: "neutral150",
218
- paddingTop: 6,
219
- paddingBottom: 6,
220
- // Remove horizontal padding when the editor is closed or it won't fully disappear
221
- paddingLeft: isSideEditorOpen ? 6 : 0,
222
- paddingRight: isSideEditorOpen ? 6 : 0,
223
- transition: "all 0.2s ease-in-out",
224
- children: /*#__PURE__*/ jsx(FormLayout, {
225
- layout: documentLayoutResponse.edit.layout,
226
- document: documentResponse,
227
- hasBackground: false
228
- })
229
- }),
230
- /*#__PURE__*/ jsxs(Flex, {
231
- direction: "column",
232
- alignItems: "stretch",
233
- flex: 1,
234
- height: "100%",
235
- overflow: "hidden",
236
- children: [
237
- /*#__PURE__*/ jsxs(Flex, {
238
- direction: "row",
239
- background: "neutral0",
240
- padding: 2,
241
- borderWidth: "0 0 1px 0",
242
- borderColor: "neutral150",
243
- children: [
244
- hasAdvancedPreview && /*#__PURE__*/ jsx(IconButton, {
245
- variant: "ghost",
246
- label: formatMessage(isSideEditorOpen ? {
247
- id: 'content-manager.preview.content.close-editor',
248
- defaultMessage: 'Close editor'
249
- } : {
250
- id: 'content-manager.preview.content.open-editor',
251
- defaultMessage: 'Open editor'
252
- }),
253
- onClick: ()=>setIsSideEditorOpen((prev)=>!prev),
254
- children: /*#__PURE__*/ jsx(AnimatedArrow, {
255
- $isSideEditorOpen: isSideEditorOpen
256
- })
199
+ children: /*#__PURE__*/ jsxs(Flex, {
200
+ direction: "column",
201
+ height: "100%",
202
+ alignItems: "stretch",
203
+ children: [
204
+ /*#__PURE__*/ jsx(Blocker, {}),
205
+ /*#__PURE__*/ jsx(PreviewHeader, {}),
206
+ /*#__PURE__*/ jsx(InputPopover, {
207
+ documentResponse: documentResponse
208
+ }),
209
+ /*#__PURE__*/ jsxs(Flex, {
210
+ flex: 1,
211
+ overflow: "auto",
212
+ alignItems: "stretch",
213
+ children: [
214
+ hasAdvancedPreview && /*#__PURE__*/ jsx(Box, {
215
+ overflow: "auto",
216
+ width: isSideEditorOpen ? '50%' : 0,
217
+ borderWidth: "0 1px 0 0",
218
+ borderColor: "neutral150",
219
+ paddingTop: 6,
220
+ paddingBottom: 6,
221
+ // Remove horizontal padding when the editor is closed or it won't fully disappear
222
+ paddingLeft: isSideEditorOpen ? 6 : 0,
223
+ paddingRight: isSideEditorOpen ? 6 : 0,
224
+ transition: "all 0.2s ease-in-out",
225
+ children: /*#__PURE__*/ jsx(FormLayout, {
226
+ layout: documentLayoutResponse.edit.layout,
227
+ document: documentResponse,
228
+ hasBackground: false
229
+ })
230
+ }),
231
+ /*#__PURE__*/ jsxs(Flex, {
232
+ direction: "column",
233
+ alignItems: "stretch",
234
+ flex: 1,
235
+ height: "100%",
236
+ overflow: "hidden",
237
+ children: [
238
+ /*#__PURE__*/ jsxs(Flex, {
239
+ direction: "row",
240
+ background: "neutral0",
241
+ padding: 2,
242
+ borderWidth: "0 0 1px 0",
243
+ borderColor: "neutral150",
244
+ children: [
245
+ hasAdvancedPreview && /*#__PURE__*/ jsx(IconButton, {
246
+ variant: "ghost",
247
+ label: formatMessage(isSideEditorOpen ? {
248
+ id: 'content-manager.preview.content.close-editor',
249
+ defaultMessage: 'Close editor'
250
+ } : {
251
+ id: 'content-manager.preview.content.open-editor',
252
+ defaultMessage: 'Open editor'
257
253
  }),
258
- /*#__PURE__*/ jsx(Flex, {
259
- justifyContent: "center",
260
- flex: 1,
261
- children: /*#__PURE__*/ jsx(SingleSelect, {
262
- value: deviceName,
263
- onChange: (name)=>setDeviceName(name.toString()),
264
- "aria-label": formatMessage({
265
- id: 'content-manager.preview.device.select',
266
- defaultMessage: 'Select device type'
267
- }),
268
- children: DEVICES.map((deviceOption)=>/*#__PURE__*/ jsx(SingleSelectOption, {
269
- value: deviceOption.name,
270
- children: formatMessage(deviceOption.label)
271
- }, deviceOption.name))
272
- })
254
+ onClick: ()=>setIsSideEditorOpen((prev)=>!prev),
255
+ children: /*#__PURE__*/ jsx(AnimatedArrow, {
256
+ $isSideEditorOpen: isSideEditorOpen
273
257
  })
274
- ]
275
- }),
276
- /*#__PURE__*/ jsx(Flex, {
277
- direction: "column",
278
- justifyContent: "center",
279
- background: "neutral0",
280
- flex: 1,
281
- children: /*#__PURE__*/ jsx(Box, {
282
- "data-testid": "preview-iframe",
283
- ref: iframeRef,
284
- src: previewUrl,
285
- title: formatMessage({
286
- id: 'content-manager.preview.panel.title',
287
- defaultMessage: 'Preview'
288
- }),
289
- width: device.width,
290
- height: device.height,
291
- borderWidth: 0,
292
- tag: "iframe"
293
- }, previewUrl)
294
- })
295
- ]
296
- })
297
- ]
298
- })
299
- ]
300
- })
258
+ }),
259
+ /*#__PURE__*/ jsx(Flex, {
260
+ justifyContent: "center",
261
+ flex: 1,
262
+ children: /*#__PURE__*/ jsx(SingleSelect, {
263
+ value: deviceName,
264
+ onChange: (name)=>setDeviceName(name.toString()),
265
+ "aria-label": formatMessage({
266
+ id: 'content-manager.preview.device.select',
267
+ defaultMessage: 'Select device type'
268
+ }),
269
+ children: DEVICES.map((deviceOption)=>/*#__PURE__*/ jsx(SingleSelectOption, {
270
+ value: deviceOption.name,
271
+ children: formatMessage(deviceOption.label)
272
+ }, deviceOption.name))
273
+ })
274
+ })
275
+ ]
276
+ }),
277
+ /*#__PURE__*/ jsx(Flex, {
278
+ direction: "column",
279
+ justifyContent: "center",
280
+ background: "neutral0",
281
+ flex: 1,
282
+ children: /*#__PURE__*/ jsx(Box, {
283
+ "data-testid": "preview-iframe",
284
+ ref: iframeRef,
285
+ src: previewUrl,
286
+ title: formatMessage({
287
+ id: 'content-manager.preview.panel.title',
288
+ defaultMessage: 'Preview'
289
+ }),
290
+ width: device.width,
291
+ height: device.height,
292
+ borderWidth: 0,
293
+ tag: "iframe"
294
+ }, previewUrl)
295
+ })
296
+ ]
297
+ })
298
+ ]
299
+ })
300
+ ]
301
+ })
301
302
  })
302
303
  })
303
304
  ]
@@ -1 +1 @@
1
- {"version":3,"file":"Preview.mjs","sources":["../../../../admin/src/preview/pages/Preview.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Page,\n useQueryParams,\n useRBAC,\n createContext,\n Form as FormContext,\n Blocker,\n} from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n FocusTrap,\n IconButton,\n Portal,\n SingleSelect,\n SingleSelectOption,\n} from '@strapi/design-system';\nimport { ArrowLineLeft } 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 { handleInvisibleAttributes } from '../../pages/EditView/utils/data';\nimport { buildValidParams } from '../../utils/api';\nimport { createYupSchema } from '../../utils/validation';\nimport { PreviewHeader } from '../components/PreviewHeader';\nimport { useGetPreviewUrlQuery } from '../services/preview';\nimport { INTERNAL_EVENTS, PUBLIC_EVENTS } from '../utils/constants';\nimport { previewScript } from '../utils/previewScript';\n\nimport type { UID } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * Constants\n * -----------------------------------------------------------------------------------------------*/\n\nconst DEVICES = [\n {\n name: 'desktop',\n label: {\n id: 'content-manager.preview.device.desktop',\n defaultMessage: 'Desktop',\n },\n width: '100%',\n height: '100%',\n },\n {\n name: 'mobile',\n label: {\n id: 'content-manager.preview.device.mobile',\n defaultMessage: 'Mobile',\n },\n width: '375px',\n height: '667px',\n },\n];\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 onPreview: () => void;\n}\n\nconst [PreviewProvider, usePreviewContext] = createContext<PreviewContextValue>('PreviewPage');\n\n/* -------------------------------------------------------------------------------------------------\n * PreviewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst AnimatedArrow = styled(ArrowLineLeft)<{ $isSideEditorOpen: boolean }>`\n will-change: transform;\n rotate: ${(props) => (props.$isSideEditorOpen ? '0deg' : '180deg')};\n transition: rotate 0.2s ease-in-out;\n`;\n\ntype MessageType =\n | (typeof INTERNAL_EVENTS)[keyof typeof INTERNAL_EVENTS]\n | (typeof PUBLIC_EVENTS)[keyof typeof PUBLIC_EVENTS];\n\n/**\n * A function factory so we can generate a new sendMessage everytime we need one.\n * We can't store and reuse a single sendMessage because it needs to have a stable identity\n * as it used in a useEffect function. And we can't rely on useCallback because we need the\n * up-to-date iframe ref, and this would make it stale (refs don't trigger callback reevaluations).\n */\nfunction getSendMessage(iframe: React.RefObject<HTMLIFrameElement>) {\n return (type: MessageType, payload?: unknown) => {\n if (!iframe.current) return;\n\n const { origin } = new URL(iframe.current.src);\n\n iframe.current.contentWindow?.postMessage(\n {\n type,\n ...(payload !== undefined && { payload }),\n },\n origin\n );\n };\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 const [deviceName, setDeviceName] = React.useState<(typeof DEVICES)[number]['name']>(\n DEVICES[0].name\n );\n const device = DEVICES.find((d) => d.name === deviceName) ?? DEVICES[0];\n\n // Listen for ready message from iframe before injecting script\n React.useEffect(() => {\n const handleMessage = (event: MessageEvent) => {\n if (event.data?.type === PUBLIC_EVENTS.PREVIEW_READY) {\n const script = `(${previewScript.toString()})()`;\n const sendMessage = getSendMessage(iframeRef);\n sendMessage(PUBLIC_EVENTS.STRAPI_SCRIPT, { script });\n }\n };\n\n window.addEventListener('message', handleMessage);\n\n return () => {\n window.removeEventListener('message', handleMessage);\n };\n }, []);\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 || previewUrlResponse.isLoading)) {\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 { data: cleanedValues, removedAttributes } = handleInvisibleAttributes(values, {\n schema: documentResponse.schema,\n initialValues,\n components: documentResponse.components,\n });\n\n const yupSchema = createYupSchema(\n documentResponse.schema?.attributes,\n documentResponse.components,\n {\n status: documentResponse.document?.status,\n removedAttributes,\n ...options,\n }\n );\n\n return yupSchema.validateSync(cleanedValues, { abortEarly: false });\n };\n\n const previewUrl = previewUrlResponse.data.data.url;\n\n const onPreview = () => {\n iframeRef?.current?.contentWindow?.postMessage(\n { type: 'strapiUpdate' },\n // The iframe origin is safe to use since it must be provided through the allowedOrigins config\n new URL(iframeRef.current.src).origin\n );\n };\n\n const hasAdvancedPreview = window.strapi.features.isEnabled('cms-advanced-preview');\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 onPreview={onPreview}\n >\n <FormContext\n method=\"PUT\"\n disabled={\n query.status === 'published' &&\n documentResponse &&\n documentResponse.document.status !== 'draft'\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 { data: cleanedValues, removedAttributes } = handleInvisibleAttributes(values, {\n schema: documentResponse.schema,\n initialValues,\n components: documentResponse.components,\n });\n\n const yupSchema = createYupSchema(\n documentResponse.schema?.attributes,\n documentResponse.components,\n {\n status: documentResponse.document?.status,\n removedAttributes,\n ...options,\n }\n );\n\n return yupSchema.validate(cleanedValues, { abortEarly: false });\n }}\n >\n {({ resetForm }) => (\n <Flex direction=\"column\" height=\"100%\" alignItems=\"stretch\">\n <Blocker onProceed={resetForm} />\n <PreviewHeader />\n <Flex flex={1} overflow=\"auto\" alignItems=\"stretch\">\n {hasAdvancedPreview && (\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\n layout={documentLayoutResponse.edit.layout}\n document={documentResponse}\n hasBackground={false}\n />\n </Box>\n )}\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n flex={1}\n height=\"100%\"\n overflow=\"hidden\"\n >\n <Flex\n direction=\"row\"\n background=\"neutral0\"\n padding={2}\n borderWidth=\"0 0 1px 0\"\n borderColor=\"neutral150\"\n >\n {hasAdvancedPreview && (\n <IconButton\n variant=\"ghost\"\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 >\n <AnimatedArrow $isSideEditorOpen={isSideEditorOpen} />\n </IconButton>\n )}\n <Flex justifyContent=\"center\" flex={1}>\n <SingleSelect\n value={deviceName}\n onChange={(name) => setDeviceName(name.toString())}\n aria-label={formatMessage({\n id: 'content-manager.preview.device.select',\n defaultMessage: 'Select device type',\n })}\n >\n {DEVICES.map((deviceOption) => (\n <SingleSelectOption key={deviceOption.name} value={deviceOption.name}>\n {formatMessage(deviceOption.label)}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </Flex>\n </Flex>\n <Flex direction=\"column\" justifyContent=\"center\" background=\"neutral0\" flex={1}>\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={device.width}\n height={device.height}\n borderWidth={0}\n tag=\"iframe\"\n />\n </Flex>\n </Flex>\n </Flex>\n </Flex>\n )}\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":["DEVICES","name","label","id","defaultMessage","width","height","PreviewProvider","usePreviewContext","createContext","AnimatedArrow","styled","ArrowLineLeft","props","$isSideEditorOpen","getSendMessage","iframe","type","payload","current","origin","URL","src","contentWindow","postMessage","undefined","PreviewPage","location","useLocation","formatMessage","useIntl","iframeRef","React","useRef","isSideEditorOpen","setIsSideEditorOpen","useState","slug","model","documentId","collectionType","useParams","query","useQueryParams","params","useMemo","buildValidParams","deviceName","setDeviceName","device","find","d","useEffect","handleMessage","event","data","PUBLIC_EVENTS","PREVIEW_READY","script","previewScript","toString","sendMessage","STRAPI_SCRIPT","window","addEventListener","removeEventListener","Error","COLLECTION_TYPES","previewUrlResponse","useGetPreviewUrlQuery","contentType","locale","status","documentResponse","useDocument","documentLayoutResponse","useDocumentLayout","isLoading","document","_jsx","Page","Loading","initialValues","getInitialFormValues","error","meta","schema","url","NoData","documentTitle","getTitle","edit","settings","mainField","validateSync","values","options","cleanedValues","removedAttributes","handleInvisibleAttributes","components","yupSchema","createYupSchema","attributes","abortEarly","previewUrl","onPreview","hasAdvancedPreview","strapi","features","isEnabled","_jsxs","_Fragment","Title","title","layout","FormContext","method","disabled","initialErrors","state","forceValidation","validate","resetForm","Flex","direction","alignItems","Blocker","onProceed","PreviewHeader","flex","overflow","Box","borderWidth","borderColor","paddingTop","paddingBottom","paddingLeft","paddingRight","transition","FormLayout","hasBackground","background","padding","IconButton","variant","onClick","prev","justifyContent","SingleSelect","value","onChange","aria-label","map","deviceOption","SingleSelectOption","data-testid","ref","tag","ProtectedPreviewPageImpl","permissions","useRBAC","action","subject","position","top","left","zIndex","Protect","filter","permission","includes","DocumentRBAC","ProtectedPreviewPage","Portal","FocusTrap"],"mappings":"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"}
1
+ {"version":3,"file":"Preview.mjs","sources":["../../../../admin/src/preview/pages/Preview.tsx"],"sourcesContent":["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 {\n Box,\n Flex,\n FocusTrap,\n IconButton,\n Portal,\n SingleSelect,\n SingleSelectOption,\n} from '@strapi/design-system';\nimport { ArrowLineLeft } 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 { Blocker } from '../../pages/EditView/components/Blocker';\nimport { FormLayout } from '../../pages/EditView/components/FormLayout';\nimport { handleInvisibleAttributes } from '../../pages/EditView/utils/data';\nimport { buildValidParams } from '../../utils/api';\nimport { createYupSchema } from '../../utils/validation';\nimport { InputPopover } from '../components/InputPopover';\nimport { PreviewHeader } from '../components/PreviewHeader';\nimport { useGetPreviewUrlQuery } from '../services/preview';\nimport { PUBLIC_EVENTS, INTERNAL_EVENTS } from '../utils/constants';\nimport { getSendMessage } from '../utils/getSendMessage';\nimport { previewScript } from '../utils/previewScript';\n\nimport type { UID } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * Constants\n * -----------------------------------------------------------------------------------------------*/\n\nconst DEVICES = [\n {\n name: 'desktop',\n label: {\n id: 'content-manager.preview.device.desktop',\n defaultMessage: 'Desktop',\n },\n width: '100%',\n height: '100%',\n },\n {\n name: 'mobile',\n label: {\n id: 'content-manager.preview.device.mobile',\n defaultMessage: 'Mobile',\n },\n width: '375px',\n height: '667px',\n },\n];\n\n/* -------------------------------------------------------------------------------------------------\n * PreviewProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PopoverField {\n path: string;\n position: DOMRect;\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 onPreview: () => void;\n iframeRef: React.RefObject<HTMLIFrameElement>;\n popoverField: PopoverField | null;\n setPopoverField: (value: PopoverField | null) => void;\n}\n\nconst [PreviewProvider, usePreviewContext] = createContext<PreviewContextValue>('PreviewPage');\n\n/* -------------------------------------------------------------------------------------------------\n * PreviewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst AnimatedArrow = styled(ArrowLineLeft)<{ $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 const [popoverField, setPopoverField] = React.useState<PopoverField | null>(null);\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 const [deviceName, setDeviceName] = React.useState<(typeof DEVICES)[number]['name']>(\n DEVICES[0].name\n );\n const device = DEVICES.find((d) => d.name === deviceName) ?? DEVICES[0];\n\n // Listen for ready message from iframe before injecting script\n React.useEffect(() => {\n const handleMessage = (event: MessageEvent) => {\n // Only listen to events from the preview iframe\n if (iframeRef.current) {\n const previewOrigin = new URL(iframeRef.current?.src).origin;\n if (event.origin !== previewOrigin) {\n return;\n }\n }\n\n if (event.data?.type === PUBLIC_EVENTS.PREVIEW_READY) {\n const script = `(${previewScript.toString()})()`;\n const sendMessage = getSendMessage(iframeRef);\n sendMessage(PUBLIC_EVENTS.STRAPI_SCRIPT, { script });\n }\n\n if (event.data?.type === INTERNAL_EVENTS.STRAPI_FIELD_FOCUS_INTENT) {\n setPopoverField?.(event.data.payload);\n }\n };\n\n window.addEventListener('message', handleMessage);\n\n return () => {\n window.removeEventListener('message', handleMessage);\n };\n }, []);\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 || previewUrlResponse.isLoading)) {\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 { data: cleanedValues, removedAttributes } = handleInvisibleAttributes(values, {\n schema: documentResponse.schema,\n initialValues,\n components: documentResponse.components,\n });\n\n const yupSchema = createYupSchema(\n documentResponse.schema?.attributes,\n documentResponse.components,\n {\n status: documentResponse.document?.status,\n removedAttributes,\n ...options,\n }\n );\n\n return yupSchema.validateSync(cleanedValues, { abortEarly: false });\n };\n\n const previewUrl = previewUrlResponse.data.data.url;\n\n const onPreview = () => {\n iframeRef?.current?.contentWindow?.postMessage(\n { type: 'strapiUpdate' },\n // The iframe origin is safe to use since it must be provided through the allowedOrigins config\n new URL(iframeRef.current.src).origin\n );\n };\n\n const hasAdvancedPreview = window.strapi.features.isEnabled('cms-advanced-preview');\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 onPreview={onPreview}\n iframeRef={iframeRef}\n popoverField={popoverField}\n setPopoverField={setPopoverField}\n >\n <FormContext\n method=\"PUT\"\n disabled={\n query.status === 'published' &&\n documentResponse &&\n documentResponse.document.status !== 'draft'\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 { data: cleanedValues, removedAttributes } = handleInvisibleAttributes(values, {\n schema: documentResponse.schema,\n initialValues,\n components: documentResponse.components,\n });\n\n const yupSchema = createYupSchema(\n documentResponse.schema?.attributes,\n documentResponse.components,\n {\n status: documentResponse.document?.status,\n removedAttributes,\n ...options,\n }\n );\n\n return yupSchema.validate(cleanedValues, { abortEarly: false });\n }}\n >\n <Flex direction=\"column\" height=\"100%\" alignItems=\"stretch\">\n <Blocker />\n <PreviewHeader />\n <InputPopover documentResponse={documentResponse} />\n <Flex flex={1} overflow=\"auto\" alignItems=\"stretch\">\n {hasAdvancedPreview && (\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\n layout={documentLayoutResponse.edit.layout}\n document={documentResponse}\n hasBackground={false}\n />\n </Box>\n )}\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n flex={1}\n height=\"100%\"\n overflow=\"hidden\"\n >\n <Flex\n direction=\"row\"\n background=\"neutral0\"\n padding={2}\n borderWidth=\"0 0 1px 0\"\n borderColor=\"neutral150\"\n >\n {hasAdvancedPreview && (\n <IconButton\n variant=\"ghost\"\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 >\n <AnimatedArrow $isSideEditorOpen={isSideEditorOpen} />\n </IconButton>\n )}\n <Flex justifyContent=\"center\" flex={1}>\n <SingleSelect\n value={deviceName}\n onChange={(name) => setDeviceName(name.toString())}\n aria-label={formatMessage({\n id: 'content-manager.preview.device.select',\n defaultMessage: 'Select device type',\n })}\n >\n {DEVICES.map((deviceOption) => (\n <SingleSelectOption key={deviceOption.name} value={deviceOption.name}>\n {formatMessage(deviceOption.label)}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </Flex>\n </Flex>\n <Flex direction=\"column\" justifyContent=\"center\" background=\"neutral0\" flex={1}>\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={device.width}\n height={device.height}\n borderWidth={0}\n tag=\"iframe\"\n />\n </Flex>\n </Flex>\n </Flex>\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":["DEVICES","name","label","id","defaultMessage","width","height","PreviewProvider","usePreviewContext","createContext","AnimatedArrow","styled","ArrowLineLeft","props","$isSideEditorOpen","PreviewPage","location","useLocation","formatMessage","useIntl","iframeRef","React","useRef","isSideEditorOpen","setIsSideEditorOpen","useState","popoverField","setPopoverField","slug","model","documentId","collectionType","useParams","query","useQueryParams","params","useMemo","buildValidParams","deviceName","setDeviceName","device","find","d","useEffect","handleMessage","event","current","previewOrigin","URL","src","origin","data","type","PUBLIC_EVENTS","PREVIEW_READY","script","previewScript","toString","sendMessage","getSendMessage","STRAPI_SCRIPT","INTERNAL_EVENTS","STRAPI_FIELD_FOCUS_INTENT","payload","window","addEventListener","removeEventListener","Error","COLLECTION_TYPES","previewUrlResponse","useGetPreviewUrlQuery","contentType","locale","status","documentResponse","useDocument","documentLayoutResponse","useDocumentLayout","isLoading","document","_jsx","Page","Loading","initialValues","getInitialFormValues","error","meta","schema","url","NoData","documentTitle","getTitle","edit","settings","mainField","validateSync","values","options","cleanedValues","removedAttributes","handleInvisibleAttributes","components","yupSchema","createYupSchema","attributes","abortEarly","previewUrl","onPreview","contentWindow","postMessage","hasAdvancedPreview","strapi","features","isEnabled","_jsxs","_Fragment","Title","title","layout","FormContext","method","disabled","initialErrors","state","forceValidation","validate","Flex","direction","alignItems","Blocker","PreviewHeader","InputPopover","flex","overflow","Box","borderWidth","borderColor","paddingTop","paddingBottom","paddingLeft","paddingRight","transition","FormLayout","hasBackground","background","padding","IconButton","variant","onClick","prev","justifyContent","SingleSelect","value","onChange","aria-label","map","deviceOption","SingleSelectOption","data-testid","ref","tag","ProtectedPreviewPageImpl","permissions","useRBAC","action","subject","position","top","left","zIndex","Protect","filter","permission","includes","DocumentRBAC","ProtectedPreviewPage","Portal","FocusTrap"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AA0CA;;AAEkG,qGAElG,MAAMA,OAAU,GAAA;AACd,IAAA;QACEC,IAAM,EAAA,SAAA;QACNC,KAAO,EAAA;YACLC,EAAI,EAAA,wCAAA;YACJC,cAAgB,EAAA;AAClB,SAAA;QACAC,KAAO,EAAA,MAAA;QACPC,MAAQ,EAAA;AACV,KAAA;AACA,IAAA;QACEL,IAAM,EAAA,QAAA;QACNC,KAAO,EAAA;YACLC,EAAI,EAAA,uCAAA;YACJC,cAAgB,EAAA;AAClB,SAAA;QACAC,KAAO,EAAA,OAAA;QACPC,MAAQ,EAAA;AACV;AACD,CAAA;AAwBD,MAAM,CAACC,eAAAA,EAAiBC,iBAAkB,CAAA,GAAGC,aAAmC,CAAA,aAAA;AAEhF;;AAEkG,qGAElG,MAAMC,aAAAA,GAAgBC,MAAOC,CAAAA,aAAAA,CAA8C;;AAEjE,UAAA,EAAE,CAACC,KAAWA,GAAAA,KAAAA,CAAMC,iBAAiB,GAAG,SAAS,QAAU,CAAA;;AAErE,CAAC;AAED,MAAMC,WAAc,GAAA,IAAA;AAClB,IAAA,MAAMC,QAAWC,GAAAA,WAAAA,EAAAA;IACjB,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAE1B,MAAMC,SAAAA,GAAYC,KAAMC,CAAAA,MAAM,CAAoB,IAAA,CAAA;AAClD,IAAA,MAAM,CAACC,gBAAkBC,EAAAA,mBAAAA,CAAoB,GAAGH,KAAAA,CAAMI,QAAQ,CAAC,IAAA,CAAA;AAC/D,IAAA,MAAM,CAACC,YAAcC,EAAAA,eAAAA,CAAgB,GAAGN,KAAAA,CAAMI,QAAQ,CAAsB,IAAA,CAAA;;IAG5E,MAAM,EACJG,MAAMC,KAAK,EACX1B,IAAI2B,UAAU,EACdC,cAAc,EACf,GAAGC,SAAAA,EAAAA;AAKJ,IAAA,MAAM,CAAC,EAAEC,KAAK,EAAE,CAAC,GAAGC,cAAAA,EAAAA;AAKpB,IAAA,MAAMC,SAASd,KAAMe,CAAAA,OAAO,CAAC,IAAMC,iBAAiBJ,KAAQ,CAAA,EAAA;AAACA,QAAAA;AAAM,KAAA,CAAA;IAEnE,MAAM,CAACK,UAAYC,EAAAA,aAAAA,CAAc,GAAGlB,KAAAA,CAAMI,QAAQ,CAChDzB,OAAO,CAAC,CAAE,CAAA,CAACC,IAAI,CAAA;AAEjB,IAAA,MAAMuC,MAASxC,GAAAA,OAAAA,CAAQyC,IAAI,CAAC,CAACC,CAAAA,GAAMA,CAAEzC,CAAAA,IAAI,KAAKqC,UAAAA,CAAAA,IAAetC,OAAO,CAAC,CAAE,CAAA;;AAGvEqB,IAAAA,KAAAA,CAAMsB,SAAS,CAAC,IAAA;AACd,QAAA,MAAMC,gBAAgB,CAACC,KAAAA,GAAAA;;YAErB,IAAIzB,SAAAA,CAAU0B,OAAO,EAAE;AACrB,gBAAA,MAAMC,gBAAgB,IAAIC,GAAAA,CAAI5B,UAAU0B,OAAO,EAAEG,KAAKC,MAAM;gBAC5D,IAAIL,KAAAA,CAAMK,MAAM,KAAKH,aAAe,EAAA;AAClC,oBAAA;AACF;AACF;AAEA,YAAA,IAAIF,MAAMM,IAAI,EAAEC,IAASC,KAAAA,aAAAA,CAAcC,aAAa,EAAE;gBACpD,MAAMC,MAAAA,GAAS,CAAC,CAAC,EAAEC,cAAcC,QAAQ,EAAA,CAAG,GAAG,CAAC;AAChD,gBAAA,MAAMC,cAAcC,cAAevC,CAAAA,SAAAA,CAAAA;gBACnCsC,WAAYL,CAAAA,aAAAA,CAAcO,aAAa,EAAE;AAAEL,oBAAAA;AAAO,iBAAA,CAAA;AACpD;AAEA,YAAA,IAAIV,MAAMM,IAAI,EAAEC,IAASS,KAAAA,eAAAA,CAAgBC,yBAAyB,EAAE;gBAClEnC,eAAkBkB,GAAAA,KAAAA,CAAMM,IAAI,CAACY,OAAO,CAAA;AACtC;AACF,SAAA;QAEAC,MAAOC,CAAAA,gBAAgB,CAAC,SAAWrB,EAAAA,aAAAA,CAAAA;QAEnC,OAAO,IAAA;YACLoB,MAAOE,CAAAA,mBAAmB,CAAC,SAAWtB,EAAAA,aAAAA,CAAAA;AACxC,SAAA;AACF,KAAA,EAAG,EAAE,CAAA;AAEL,IAAA,IAAI,CAACb,cAAgB,EAAA;AACnB,QAAA,MAAM,IAAIoC,KAAM,CAAA,6CAAA,CAAA;AAClB;AAEA,IAAA,IAAI,CAACtC,KAAO,EAAA;AACV,QAAA,MAAM,IAAIsC,KAAM,CAAA,oCAAA,CAAA;AAClB;;IAGA,IAAIpC,cAAAA,KAAmBqC,gBAAoB,IAAA,CAACtC,UAAY,EAAA;AACtD,QAAA,MAAM,IAAIqC,KAAM,CAAA,yCAAA,CAAA;AAClB;AAEA,IAAA,MAAME,qBAAqBC,qBAAsB,CAAA;QAC/CnC,MAAQ,EAAA;YACNoC,WAAa1C,EAAAA;AACf,SAAA;QACAI,KAAO,EAAA;AACLH,YAAAA,UAAAA;AACA0C,YAAAA,MAAAA,EAAQrC,OAAOqC,MAAM;AACrBC,YAAAA,MAAAA,EAAQtC,OAAOsC;AACjB;AACF,KAAA,CAAA;AACA,IAAA,MAAMC,mBAAmBC,WAAY,CAAA;AACnC9C,QAAAA,KAAAA;AACAE,QAAAA,cAAAA;AACAD,QAAAA,UAAAA;AACAK,QAAAA;AACF,KAAA,CAAA;AACA,IAAA,MAAMyC,yBAAyBC,iBAAkBhD,CAAAA,KAAAA,CAAAA;IAEjD,MAAMiD,SAAAA,GACJT,mBAAmBS,SAAS,IAAIF,uBAAuBE,SAAS,IAAIJ,iBAAiBI,SAAS;IAChG,IAAIA,SAAAA,KAAc,CAACJ,gBAAiBK,CAAAA,QAAQ,EAAEjD,UAAcuC,IAAAA,kBAAAA,CAAmBS,SAAQ,CAAI,EAAA;QACzF,qBAAOE,GAAA,CAACC,KAAKC,OAAO,EAAA,EAAA,CAAA;AACtB;IAEA,MAAMC,aAAAA,GAAgBT,iBAAiBU,oBAAoB,EAAA;AAE3D,IAAA,IACEf,mBAAmBgB,KAAK,IACxBT,uBAAuBS,KAAK,IAC5B,CAACX,gBAAiBK,CAAAA,QAAQ,IAC1B,CAACL,gBAAAA,CAAiBY,IAAI,IACtB,CAACZ,iBAAiBa,MAAM,IACxB,CAACJ,aACD,EAAA;QACA,qBAAOH,GAAA,CAACC,KAAKd,KAAK,EAAA,EAAA,CAAA;AACpB;AAEA,IAAA,IAAI,CAACE,kBAAAA,CAAmBlB,IAAI,EAAEA,MAAMqC,GAAK,EAAA;QACvC,qBAAOR,GAAA,CAACC,KAAKQ,MAAM,EAAA,EAAA,CAAA;AACrB;IAEA,MAAMC,aAAAA,GAAgBhB,iBAAiBiB,QAAQ,CAACf,uBAAuBgB,IAAI,CAACC,QAAQ,CAACC,SAAS,CAAA;IAE9F,MAAMC,YAAAA,GAAe,CAACC,MAAiCC,EAAAA,OAAAA,GAAAA;QACrD,MAAM,EAAE9C,MAAM+C,aAAa,EAAEC,iBAAiB,EAAE,GAAGC,0BAA0BJ,MAAQ,EAAA;AACnFT,YAAAA,MAAAA,EAAQb,iBAAiBa,MAAM;AAC/BJ,YAAAA,aAAAA;AACAkB,YAAAA,UAAAA,EAAY3B,iBAAiB2B;AAC/B,SAAA,CAAA;QAEA,MAAMC,SAAAA,GAAYC,gBAChB7B,gBAAiBa,CAAAA,MAAM,EAAEiB,UACzB9B,EAAAA,gBAAAA,CAAiB2B,UAAU,EAC3B;YACE5B,MAAQC,EAAAA,gBAAAA,CAAiBK,QAAQ,EAAEN,MAAAA;AACnC0B,YAAAA,iBAAAA;AACA,YAAA,GAAGF;AACL,SAAA,CAAA;QAGF,OAAOK,SAAAA,CAAUP,YAAY,CAACG,aAAe,EAAA;YAAEO,UAAY,EAAA;AAAM,SAAA,CAAA;AACnE,KAAA;AAEA,IAAA,MAAMC,aAAarC,kBAAmBlB,CAAAA,IAAI,CAACA,IAAI,CAACqC,GAAG;AAEnD,IAAA,MAAMmB,SAAY,GAAA,IAAA;QAChBvF,SAAW0B,EAAAA,OAAAA,EAAS8D,eAAeC,WACjC,CAAA;YAAEzD,IAAM,EAAA;AAAe,SAAA;AAEvB,QAAA,IAAIJ,IAAI5B,SAAU0B,CAAAA,OAAO,CAACG,GAAG,EAAEC,MAAM,CAAA;AAEzC,KAAA;AAEA,IAAA,MAAM4D,qBAAqB9C,MAAO+C,CAAAA,MAAM,CAACC,QAAQ,CAACC,SAAS,CAAC,sBAAA,CAAA;IAE5D,qBACEC,IAAA,CAAAC,QAAA,EAAA;;AACE,0BAAAnC,GAAA,CAACC,KAAKmC,KAAK,EAAA;0BACRlG,aACC,CAAA;oBACEf,EAAI,EAAA,oCAAA;oBACJC,cAAgB,EAAA;iBAElB,EAAA;oBACEmE,WAAamB,EAAAA;AACf,iBAAA;;0BAGJV,GAACzE,CAAAA,eAAAA,EAAAA;gBACCiF,GAAKkB,EAAAA,UAAAA;AACL3B,gBAAAA,QAAAA,EAAUL,iBAAiBK,QAAQ;gBACnCsC,KAAO3B,EAAAA,aAAAA;AACPJ,gBAAAA,IAAAA,EAAMZ,iBAAiBY,IAAI;AAC3BC,gBAAAA,MAAAA,EAAQb,iBAAiBa,MAAM;AAC/B+B,gBAAAA,MAAAA,EAAQ1C,uBAAuBgB,IAAI;gBACnCe,SAAWA,EAAAA,SAAAA;gBACXvF,SAAWA,EAAAA,SAAAA;gBACXM,YAAcA,EAAAA,YAAAA;gBACdC,eAAiBA,EAAAA,eAAAA;AAEjB,gBAAA,QAAA,gBAAAqD,GAACuC,CAAAA,IAAAA,EAAAA;oBACCC,MAAO,EAAA,KAAA;oBACPC,QACExF,EAAAA,KAAAA,CAAMwC,MAAM,KAAK,WAAA,IACjBC,oBACAA,gBAAiBK,CAAAA,QAAQ,CAACN,MAAM,KAAK,OAAA;AAEvCU,oBAAAA,aAAAA,EAAeT,iBAAiBU,oBAAoB,EAAA;AACpDsC,oBAAAA,aAAAA,EAAe1G,UAAU2G,KAAOC,EAAAA,eAAAA,GAAkB7B,aAAaZ,aAAe,EAAA,MAAM,EAAC;oBACrF7E,MAAO,EAAA,MAAA;AACPuH,oBAAAA,QAAAA,EAAU,CAAC7B,MAAiCC,EAAAA,OAAAA,GAAAA;wBAC1C,MAAM,EAAE9C,MAAM+C,aAAa,EAAEC,iBAAiB,EAAE,GAAGC,0BAA0BJ,MAAQ,EAAA;AACnFT,4BAAAA,MAAAA,EAAQb,iBAAiBa,MAAM;AAC/BJ,4BAAAA,aAAAA;AACAkB,4BAAAA,UAAAA,EAAY3B,iBAAiB2B;AAC/B,yBAAA,CAAA;wBAEA,MAAMC,SAAAA,GAAYC,gBAChB7B,gBAAiBa,CAAAA,MAAM,EAAEiB,UACzB9B,EAAAA,gBAAAA,CAAiB2B,UAAU,EAC3B;4BACE5B,MAAQC,EAAAA,gBAAAA,CAAiBK,QAAQ,EAAEN,MAAAA;AACnC0B,4BAAAA,iBAAAA;AACA,4BAAA,GAAGF;AACL,yBAAA,CAAA;wBAGF,OAAOK,SAAAA,CAAUuB,QAAQ,CAAC3B,aAAe,EAAA;4BAAEO,UAAY,EAAA;AAAM,yBAAA,CAAA;AAC/D,qBAAA;AAEA,oBAAA,QAAA,gBAAAS,IAACY,CAAAA,IAAAA,EAAAA;wBAAKC,SAAU,EAAA,QAAA;wBAASzH,MAAO,EAAA,MAAA;wBAAO0H,UAAW,EAAA,SAAA;;0CAChDhD,GAACiD,CAAAA,OAAAA,EAAAA,EAAAA,CAAAA;0CACDjD,GAACkD,CAAAA,aAAAA,EAAAA,EAAAA,CAAAA;0CACDlD,GAACmD,CAAAA,YAAAA,EAAAA;gCAAazD,gBAAkBA,EAAAA;;0CAChCwC,IAACY,CAAAA,IAAAA,EAAAA;gCAAKM,IAAM,EAAA,CAAA;gCAAGC,QAAS,EAAA,MAAA;gCAAOL,UAAW,EAAA,SAAA;;AACvClB,oCAAAA,kBAAAA,kBACC9B,GAACsD,CAAAA,GAAAA,EAAAA;wCACCD,QAAS,EAAA,MAAA;AACThI,wCAAAA,KAAAA,EAAOkB,mBAAmB,KAAQ,GAAA,CAAA;wCAClCgH,WAAY,EAAA,WAAA;wCACZC,WAAY,EAAA,YAAA;wCACZC,UAAY,EAAA,CAAA;wCACZC,aAAe,EAAA,CAAA;;AAEfC,wCAAAA,WAAAA,EAAapH,mBAAmB,CAAI,GAAA,CAAA;AACpCqH,wCAAAA,YAAAA,EAAcrH,mBAAmB,CAAI,GAAA,CAAA;wCACrCsH,UAAW,EAAA,sBAAA;AAEX,wCAAA,QAAA,gBAAA7D,GAAC8D,CAAAA,UAAAA,EAAAA;4CACCxB,MAAQ1C,EAAAA,sBAAAA,CAAuBgB,IAAI,CAAC0B,MAAM;4CAC1CvC,QAAUL,EAAAA,gBAAAA;4CACVqE,aAAe,EAAA;;;kDAIrB7B,IAACY,CAAAA,IAAAA,EAAAA;wCACCC,SAAU,EAAA,QAAA;wCACVC,UAAW,EAAA,SAAA;wCACXI,IAAM,EAAA,CAAA;wCACN9H,MAAO,EAAA,MAAA;wCACP+H,QAAS,EAAA,QAAA;;0DAETnB,IAACY,CAAAA,IAAAA,EAAAA;gDACCC,SAAU,EAAA,KAAA;gDACViB,UAAW,EAAA,UAAA;gDACXC,OAAS,EAAA,CAAA;gDACTV,WAAY,EAAA,WAAA;gDACZC,WAAY,EAAA,YAAA;;AAEX1B,oDAAAA,kBAAAA,kBACC9B,GAACkE,CAAAA,UAAAA,EAAAA;wDACCC,OAAQ,EAAA,OAAA;AACRjJ,wDAAAA,KAAAA,EAAOgB,cACLK,gBACI,GAAA;4DACEpB,EAAI,EAAA,8CAAA;4DACJC,cAAgB,EAAA;yDAElB,GAAA;4DACED,EAAI,EAAA,6CAAA;4DACJC,cAAgB,EAAA;AAClB,yDAAA,CAAA;AAENgJ,wDAAAA,OAAAA,EAAS,IAAM5H,mBAAAA,CAAoB,CAAC6H,IAAAA,GAAS,CAACA,IAAAA,CAAAA;AAE9C,wDAAA,QAAA,gBAAArE,GAACtE,CAAAA,aAAAA,EAAAA;4DAAcI,iBAAmBS,EAAAA;;;kEAGtCyD,GAAC8C,CAAAA,IAAAA,EAAAA;wDAAKwB,cAAe,EAAA,QAAA;wDAASlB,IAAM,EAAA,CAAA;AAClC,wDAAA,QAAA,gBAAApD,GAACuE,CAAAA,YAAAA,EAAAA;4DACCC,KAAOlH,EAAAA,UAAAA;AACPmH,4DAAAA,QAAAA,EAAU,CAACxJ,IAAAA,GAASsC,aAActC,CAAAA,IAAAA,CAAKwD,QAAQ,EAAA,CAAA;AAC/CiG,4DAAAA,YAAAA,EAAYxI,aAAc,CAAA;gEACxBf,EAAI,EAAA,uCAAA;gEACJC,cAAgB,EAAA;AAClB,6DAAA,CAAA;AAECJ,4DAAAA,QAAAA,EAAAA,OAAAA,CAAQ2J,GAAG,CAAC,CAACC,YAAAA,iBACZ5E,GAAC6E,CAAAA,kBAAAA,EAAAA;AAA2CL,oEAAAA,KAAAA,EAAOI,aAAa3J,IAAI;AACjEiB,oEAAAA,QAAAA,EAAAA,aAAAA,CAAc0I,aAAa1J,KAAK;AADV0J,iEAAAA,EAAAA,YAAAA,CAAa3J,IAAI,CAAA;;;;;0DAOlD+E,GAAC8C,CAAAA,IAAAA,EAAAA;gDAAKC,SAAU,EAAA,QAAA;gDAASuB,cAAe,EAAA,QAAA;gDAASN,UAAW,EAAA,UAAA;gDAAWZ,IAAM,EAAA,CAAA;AAC3E,gDAAA,QAAA,gBAAApD,GAACsD,CAAAA,GAAAA,EAAAA;oDACCwB,aAAY,EAAA,gBAAA;oDACZC,GAAK3I,EAAAA,SAAAA;oDACL6B,GAAKyD,EAAAA,UAAAA;AASLW,oDAAAA,KAAAA,EAAOnG,aAAc,CAAA;wDACnBf,EAAI,EAAA,qCAAA;wDACJC,cAAgB,EAAA;AAClB,qDAAA,CAAA;AACAC,oDAAAA,KAAAA,EAAOmC,OAAOnC,KAAK;AACnBC,oDAAAA,MAAAA,EAAQkC,OAAOlC,MAAM;oDACrBiI,WAAa,EAAA,CAAA;oDACbyB,GAAI,EAAA;AARCtD,iDAAAA,EAAAA,UAAAA;;;;;;;;;;;;AAkBzB,CAAA;AAEA;;AAEkG,qGAElG,MAAMuD,wBAA2B,GAAA,IAAA;AAC/B,IAAA,MAAM,EAAErI,IAAAA,EAAMC,KAAK,EAAE,GAAGG,SAAAA,EAAAA;IAGxB,MAAM,EACJkI,cAAc,EAAE,EAChBpF,SAAS,EACTO,KAAK,EACN,GAAG8E,OAAQ,CAAA;AACV,QAAA;YAAEC,MAAQ,EAAA,uCAAA;YAAyCC,OAASxI,EAAAA;AAAM,SAAA;AAClE,QAAA;YAAEuI,MAAQ,EAAA,yCAAA;YAA2CC,OAASxI,EAAAA;AAAM,SAAA;AACpE,QAAA;YAAEuI,MAAQ,EAAA,0CAAA;YAA4CC,OAASxI,EAAAA;AAAM;AACtE,KAAA,CAAA;AAED,IAAA,IAAIiD,SAAW,EAAA;QACb,qBAAOE,GAAA,CAACC,KAAKC,OAAO,EAAA,EAAA,CAAA;AACtB;IAEA,IAAIG,KAAAA,IAAS,CAACxD,KAAO,EAAA;AACnB,QAAA,qBACEmD,GAACsD,CAAAA,GAAAA,EAAAA;YACChI,MAAO,EAAA,OAAA;YACPD,KAAM,EAAA,OAAA;YACNiK,QAAS,EAAA,OAAA;YACTC,GAAK,EAAA,CAAA;YACLC,IAAM,EAAA,CAAA;YACNC,MAAQ,EAAA,CAAA;YACRzB,UAAW,EAAA,UAAA;oCAEXhE,GAAA,CAACC,KAAKd,KAAK,EAAA,EAAA;;AAGjB;AAEA,IAAA,qBACEa,GAACsD,CAAAA,GAAAA,EAAAA;QACChI,MAAO,EAAA,OAAA;QACPD,KAAM,EAAA,OAAA;QACNiK,QAAS,EAAA,OAAA;QACTC,GAAK,EAAA,CAAA;QACLC,IAAM,EAAA,CAAA;QACNC,MAAQ,EAAA,CAAA;QACRzB,UAAW,EAAA,UAAA;gCAEXhE,GAAA,CAACC,KAAKyF,OAAO,EAAA;YACXR,WAAaA,EAAAA,WAAAA,CAAYS,MAAM,CAAC,CAACC,aAC/BA,UAAWR,CAAAA,MAAM,CAACS,QAAQ,CAAC,eAAA,CAAA,CAAA;AAG7B,YAAA,QAAA,gBAAA7F,GAAC8F,CAAAA,YAAAA,EAAAA;gBAAaZ,WAAaA,EAAAA,WAAAA;AACzB,gBAAA,QAAA,gBAAAlF,GAACjE,CAAAA,WAAAA,EAAAA,EAAAA;;;;AAKX,CAAA;AAEA,MAAMgK,oBAAuB,GAAA,IAAA;AAC3B,IAAA,qBACE/F,GAACgG,CAAAA,MAAAA,EAAAA;AACC,QAAA,QAAA,gBAAAhG,GAACiG,CAAAA,SAAAA,EAAAA;AACC,YAAA,QAAA,gBAAAjG,GAACiF,CAAAA,wBAAAA,EAAAA,EAAAA;;;AAIT;;;;"}
@@ -7,7 +7,7 @@ const scriptResponse = previewScript.previewScript(false);
7
7
  * These events can be changed safely. They're used by the content manager admin on one side, and by
8
8
  * the preview script on the other. We own both ends, and they're not documented to users, so we can
9
9
  * do what we want with them.
10
- */ scriptResponse.INTERNAL_EVENTS;
10
+ */ const INTERNAL_EVENTS = scriptResponse.INTERNAL_EVENTS;
11
11
  /**
12
12
  * These events are documented to users, and will be hardcoded in their frontends.
13
13
  * Changing any of these would be a breaking change.
@@ -17,5 +17,6 @@ const scriptResponse = previewScript.previewScript(false);
17
17
  STRAPI_SCRIPT: 'strapiScript'
18
18
  };
19
19
 
20
+ exports.INTERNAL_EVENTS = INTERNAL_EVENTS;
20
21
  exports.PUBLIC_EVENTS = PUBLIC_EVENTS;
21
22
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sources":["../../../../admin/src/preview/utils/constants.ts"],"sourcesContent":["import { previewScript } from './previewScript';\n\nconst scriptResponse = previewScript(false);\n\n/**\n * These events can be changed safely. They're used by the content manager admin on one side, and by\n * the preview script on the other. We own both ends, and they're not documented to users, so we can\n * do what we want with them.\n */\nexport const INTERNAL_EVENTS = scriptResponse!.INTERNAL_EVENTS;\n\n/**\n * These events are documented to users, and will be hardcoded in their frontends.\n * Changing any of these would be a breaking change.\n */\nexport const PUBLIC_EVENTS = {\n PREVIEW_READY: 'previewReady',\n STRAPI_UPDATE: 'strapiUpdate',\n STRAPI_SCRIPT: 'strapiScript',\n} as const;\n"],"names":["scriptResponse","previewScript","INTERNAL_EVENTS","PUBLIC_EVENTS","PREVIEW_READY","STRAPI_UPDATE","STRAPI_SCRIPT"],"mappings":";;;;AAEA,MAAMA,iBAAiBC,2BAAc,CAAA,KAAA,CAAA;AAErC;;;;AAIC,IAC8BD,cAAAA,CAAgBE;AAE/C;;;UAIaC,aAAgB,GAAA;IAC3BC,aAAe,EAAA,cAAA;IACfC,aAAe,EAAA,cAAA;IACfC,aAAe,EAAA;AACjB;;;;"}
1
+ {"version":3,"file":"constants.js","sources":["../../../../admin/src/preview/utils/constants.ts"],"sourcesContent":["import { previewScript } from './previewScript';\n\nconst scriptResponse = previewScript(false);\n\n/**\n * These events can be changed safely. They're used by the content manager admin on one side, and by\n * the preview script on the other. We own both ends, and they're not documented to users, so we can\n * do what we want with them.\n */\nexport const INTERNAL_EVENTS = scriptResponse!.INTERNAL_EVENTS;\n\n/**\n * These events are documented to users, and will be hardcoded in their frontends.\n * Changing any of these would be a breaking change.\n */\nexport const PUBLIC_EVENTS = {\n PREVIEW_READY: 'previewReady',\n STRAPI_UPDATE: 'strapiUpdate',\n STRAPI_SCRIPT: 'strapiScript',\n} as const;\n"],"names":["scriptResponse","previewScript","INTERNAL_EVENTS","PUBLIC_EVENTS","PREVIEW_READY","STRAPI_UPDATE","STRAPI_SCRIPT"],"mappings":";;;;AAEA,MAAMA,iBAAiBC,2BAAc,CAAA,KAAA,CAAA;AAErC;;;;AAIC,IACM,MAAMC,eAAkBF,GAAAA,cAAAA,CAAgBE;AAE/C;;;UAIaC,aAAgB,GAAA;IAC3BC,aAAe,EAAA,cAAA;IACfC,aAAe,EAAA,cAAA;IACfC,aAAe,EAAA;AACjB;;;;;"}
@@ -5,7 +5,7 @@ const scriptResponse = previewScript(false);
5
5
  * These events can be changed safely. They're used by the content manager admin on one side, and by
6
6
  * the preview script on the other. We own both ends, and they're not documented to users, so we can
7
7
  * do what we want with them.
8
- */ scriptResponse.INTERNAL_EVENTS;
8
+ */ const INTERNAL_EVENTS = scriptResponse.INTERNAL_EVENTS;
9
9
  /**
10
10
  * These events are documented to users, and will be hardcoded in their frontends.
11
11
  * Changing any of these would be a breaking change.
@@ -15,5 +15,5 @@ const scriptResponse = previewScript(false);
15
15
  STRAPI_SCRIPT: 'strapiScript'
16
16
  };
17
17
 
18
- export { PUBLIC_EVENTS };
18
+ export { INTERNAL_EVENTS, PUBLIC_EVENTS };
19
19
  //# sourceMappingURL=constants.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.mjs","sources":["../../../../admin/src/preview/utils/constants.ts"],"sourcesContent":["import { previewScript } from './previewScript';\n\nconst scriptResponse = previewScript(false);\n\n/**\n * These events can be changed safely. They're used by the content manager admin on one side, and by\n * the preview script on the other. We own both ends, and they're not documented to users, so we can\n * do what we want with them.\n */\nexport const INTERNAL_EVENTS = scriptResponse!.INTERNAL_EVENTS;\n\n/**\n * These events are documented to users, and will be hardcoded in their frontends.\n * Changing any of these would be a breaking change.\n */\nexport const PUBLIC_EVENTS = {\n PREVIEW_READY: 'previewReady',\n STRAPI_UPDATE: 'strapiUpdate',\n STRAPI_SCRIPT: 'strapiScript',\n} as const;\n"],"names":["scriptResponse","previewScript","INTERNAL_EVENTS","PUBLIC_EVENTS","PREVIEW_READY","STRAPI_UPDATE","STRAPI_SCRIPT"],"mappings":";;AAEA,MAAMA,iBAAiBC,aAAc,CAAA,KAAA,CAAA;AAErC;;;;AAIC,IAC8BD,cAAAA,CAAgBE;AAE/C;;;UAIaC,aAAgB,GAAA;IAC3BC,aAAe,EAAA,cAAA;IACfC,aAAe,EAAA,cAAA;IACfC,aAAe,EAAA;AACjB;;;;"}
1
+ {"version":3,"file":"constants.mjs","sources":["../../../../admin/src/preview/utils/constants.ts"],"sourcesContent":["import { previewScript } from './previewScript';\n\nconst scriptResponse = previewScript(false);\n\n/**\n * These events can be changed safely. They're used by the content manager admin on one side, and by\n * the preview script on the other. We own both ends, and they're not documented to users, so we can\n * do what we want with them.\n */\nexport const INTERNAL_EVENTS = scriptResponse!.INTERNAL_EVENTS;\n\n/**\n * These events are documented to users, and will be hardcoded in their frontends.\n * Changing any of these would be a breaking change.\n */\nexport const PUBLIC_EVENTS = {\n PREVIEW_READY: 'previewReady',\n STRAPI_UPDATE: 'strapiUpdate',\n STRAPI_SCRIPT: 'strapiScript',\n} as const;\n"],"names":["scriptResponse","previewScript","INTERNAL_EVENTS","PUBLIC_EVENTS","PREVIEW_READY","STRAPI_UPDATE","STRAPI_SCRIPT"],"mappings":";;AAEA,MAAMA,iBAAiBC,aAAc,CAAA,KAAA,CAAA;AAErC;;;;AAIC,IACM,MAAMC,eAAkBF,GAAAA,cAAAA,CAAgBE;AAE/C;;;UAIaC,aAAgB,GAAA;IAC3BC,aAAe,EAAA,cAAA;IACfC,aAAe,EAAA,cAAA;IACfC,aAAe,EAAA;AACjB;;;;"}
@@ -0,0 +1,22 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * A function factory so we can generate a new sendMessage everytime we need one.
5
+ * We can't store and reuse a single sendMessage because it needs to have a stable identity
6
+ * as it used in a useEffect function. And we can't rely on useCallback because we need the
7
+ * up-to-date iframe ref, and this would make it stale (refs don't trigger callback reevaluations).
8
+ */ function getSendMessage(iframe) {
9
+ return (type, payload)=>{
10
+ if (!iframe?.current) return;
11
+ const { origin } = new URL(iframe.current.src);
12
+ iframe.current.contentWindow?.postMessage({
13
+ type,
14
+ ...payload !== undefined && {
15
+ payload
16
+ }
17
+ }, origin);
18
+ };
19
+ }
20
+
21
+ exports.getSendMessage = getSendMessage;
22
+ //# sourceMappingURL=getSendMessage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSendMessage.js","sources":["../../../../admin/src/preview/utils/getSendMessage.ts"],"sourcesContent":["import type { INTERNAL_EVENTS, PUBLIC_EVENTS } from './constants';\n\ntype MessageType =\n | (typeof INTERNAL_EVENTS)[keyof typeof INTERNAL_EVENTS]\n | (typeof PUBLIC_EVENTS)[keyof typeof PUBLIC_EVENTS];\n\n/**\n * A function factory so we can generate a new sendMessage everytime we need one.\n * We can't store and reuse a single sendMessage because it needs to have a stable identity\n * as it used in a useEffect function. And we can't rely on useCallback because we need the\n * up-to-date iframe ref, and this would make it stale (refs don't trigger callback reevaluations).\n */\nexport function getSendMessage(iframe: React.RefObject<HTMLIFrameElement> | undefined) {\n return (type: MessageType, payload?: unknown) => {\n if (!iframe?.current) return;\n\n const { origin } = new URL(iframe.current.src);\n\n iframe.current.contentWindow?.postMessage(\n {\n type,\n ...(payload !== undefined && { payload }),\n },\n origin\n );\n };\n}\n"],"names":["getSendMessage","iframe","type","payload","current","origin","URL","src","contentWindow","postMessage","undefined"],"mappings":";;AAMA;;;;;IAMO,SAASA,cAAAA,CAAeC,MAAsD,EAAA;AACnF,IAAA,OAAO,CAACC,IAAmBC,EAAAA,OAAAA,GAAAA;QACzB,IAAI,CAACF,QAAQG,OAAS,EAAA;QAEtB,MAAM,EAAEC,MAAM,EAAE,GAAG,IAAIC,GAAIL,CAAAA,MAAAA,CAAOG,OAAO,CAACG,GAAG,CAAA;AAE7CN,QAAAA,MAAAA,CAAOG,OAAO,CAACI,aAAa,EAAEC,WAC5B,CAAA;AACEP,YAAAA,IAAAA;AACA,YAAA,GAAIC,YAAYO,SAAa,IAAA;AAAEP,gBAAAA;;SAEjCE,EAAAA,MAAAA,CAAAA;AAEJ,KAAA;AACF;;;;"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * A function factory so we can generate a new sendMessage everytime we need one.
3
+ * We can't store and reuse a single sendMessage because it needs to have a stable identity
4
+ * as it used in a useEffect function. And we can't rely on useCallback because we need the
5
+ * up-to-date iframe ref, and this would make it stale (refs don't trigger callback reevaluations).
6
+ */ function getSendMessage(iframe) {
7
+ return (type, payload)=>{
8
+ if (!iframe?.current) return;
9
+ const { origin } = new URL(iframe.current.src);
10
+ iframe.current.contentWindow?.postMessage({
11
+ type,
12
+ ...payload !== undefined && {
13
+ payload
14
+ }
15
+ }, origin);
16
+ };
17
+ }
18
+
19
+ export { getSendMessage };
20
+ //# sourceMappingURL=getSendMessage.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSendMessage.mjs","sources":["../../../../admin/src/preview/utils/getSendMessage.ts"],"sourcesContent":["import type { INTERNAL_EVENTS, PUBLIC_EVENTS } from './constants';\n\ntype MessageType =\n | (typeof INTERNAL_EVENTS)[keyof typeof INTERNAL_EVENTS]\n | (typeof PUBLIC_EVENTS)[keyof typeof PUBLIC_EVENTS];\n\n/**\n * A function factory so we can generate a new sendMessage everytime we need one.\n * We can't store and reuse a single sendMessage because it needs to have a stable identity\n * as it used in a useEffect function. And we can't rely on useCallback because we need the\n * up-to-date iframe ref, and this would make it stale (refs don't trigger callback reevaluations).\n */\nexport function getSendMessage(iframe: React.RefObject<HTMLIFrameElement> | undefined) {\n return (type: MessageType, payload?: unknown) => {\n if (!iframe?.current) return;\n\n const { origin } = new URL(iframe.current.src);\n\n iframe.current.contentWindow?.postMessage(\n {\n type,\n ...(payload !== undefined && { payload }),\n },\n origin\n );\n };\n}\n"],"names":["getSendMessage","iframe","type","payload","current","origin","URL","src","contentWindow","postMessage","undefined"],"mappings":"AAMA;;;;;IAMO,SAASA,cAAAA,CAAeC,MAAsD,EAAA;AACnF,IAAA,OAAO,CAACC,IAAmBC,EAAAA,OAAAA,GAAAA;QACzB,IAAI,CAACF,QAAQG,OAAS,EAAA;QAEtB,MAAM,EAAEC,MAAM,EAAE,GAAG,IAAIC,GAAIL,CAAAA,MAAAA,CAAOG,OAAO,CAACG,GAAG,CAAA;AAE7CN,QAAAA,MAAAA,CAAOG,OAAO,CAACI,aAAa,EAAEC,WAC5B,CAAA;AACEP,YAAAA,IAAAA;AACA,YAAA,GAAIC,YAAYO,SAAa,IAAA;AAAEP,gBAAAA;;SAEjCE,EAAAA,MAAAA,CAAAA;AAEJ,KAAA;AACF;;;;"}