@strapi/content-manager 5.49.0 → 5.50.0

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 (228) hide show
  1. package/dist/admin/layout.js +3 -1
  2. package/dist/admin/layout.js.map +1 -1
  3. package/dist/admin/layout.mjs +5 -3
  4. package/dist/admin/layout.mjs.map +1 -1
  5. package/dist/admin/pages/EditView/components/DocumentActions.js +161 -72
  6. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  7. package/dist/admin/pages/EditView/components/DocumentActions.mjs +161 -73
  8. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  9. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js +6 -1
  10. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
  11. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +2 -1
  12. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
  13. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +6 -2
  14. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  15. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +3 -2
  16. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  17. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +6 -1
  18. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
  19. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +6 -1
  20. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
  21. package/dist/admin/pages/EditView/utils/draftRelationCounts.js +117 -0
  22. package/dist/admin/pages/EditView/utils/draftRelationCounts.js.map +1 -0
  23. package/dist/admin/pages/EditView/utils/draftRelationCounts.mjs +109 -0
  24. package/dist/admin/pages/EditView/utils/draftRelationCounts.mjs.map +1 -0
  25. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +1 -1
  26. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
  27. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +1 -1
  28. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -1
  29. package/dist/admin/pages/ListView/components/TableCells/CellContent.js +2 -2
  30. package/dist/admin/pages/ListView/components/TableCells/CellContent.js.map +1 -1
  31. package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs +2 -2
  32. package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs.map +1 -1
  33. package/dist/admin/pages/ListView/components/TableCells/Relations.js +1 -1
  34. package/dist/admin/pages/ListView/components/TableCells/Relations.js.map +1 -1
  35. package/dist/admin/pages/ListView/components/TableCells/Relations.mjs +1 -1
  36. package/dist/admin/pages/ListView/components/TableCells/Relations.mjs.map +1 -1
  37. package/dist/admin/preview/pages/Preview.js +38 -11
  38. package/dist/admin/preview/pages/Preview.js.map +1 -1
  39. package/dist/admin/preview/pages/Preview.mjs +39 -12
  40. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  41. package/dist/admin/preview/utils/constants.js +9 -15
  42. package/dist/admin/preview/utils/constants.js.map +1 -1
  43. package/dist/admin/preview/utils/constants.mjs +10 -15
  44. package/dist/admin/preview/utils/constants.mjs.map +1 -1
  45. package/dist/admin/src/components/InjectionZone.d.ts +1 -2
  46. package/dist/admin/src/content-manager.d.ts +15 -15
  47. package/dist/admin/src/history/services/historyVersion.d.ts +2 -2
  48. package/dist/admin/src/hooks/useContentTypeSchema.d.ts +1 -1
  49. package/dist/admin/src/hooks/useDocument.d.ts +8 -9
  50. package/dist/admin/src/hooks/useDocumentLayout.d.ts +3 -3
  51. package/dist/admin/src/hooks/useDragAndDrop.d.ts +4 -4
  52. package/dist/admin/src/hooks/useKeyboardDragAndDrop.d.ts +1 -1
  53. package/dist/admin/src/hooks/usePersistentQueryParams.d.ts +0 -1
  54. package/dist/admin/src/modules/app.d.ts +5 -5
  55. package/dist/admin/src/pages/EditView/EditViewPage.d.ts +1 -1
  56. package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +12 -1
  57. package/dist/admin/src/pages/EditView/components/EditorToolbarObserver.d.ts +1 -1
  58. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.d.ts +1 -1
  59. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/conversions.d.ts +2 -2
  60. package/dist/admin/src/pages/EditView/components/FormInputs/ComponentContext.d.ts +1 -2
  61. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/Relations.d.ts +4 -4
  62. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.d.ts +2 -2
  63. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.d.ts +19 -20
  64. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +12 -12
  65. package/dist/admin/src/pages/EditView/utils/draftRelationCounts.d.ts +26 -0
  66. package/dist/admin/src/pages/ListView/components/BulkActions/PublishAction.d.ts +1 -1
  67. package/dist/admin/src/pages/ListView/components/Filters.d.ts +1 -1
  68. package/dist/admin/src/pages/formatComponentConfigurationEditLayout.d.ts +1 -1
  69. package/dist/admin/src/preview/utils/constants.d.ts +1 -7
  70. package/dist/admin/src/preview/utils/getSendMessage.d.ts +0 -1
  71. package/dist/admin/src/services/documents.d.ts +30 -70
  72. package/dist/admin/src/services/relations.d.ts +6 -20
  73. package/dist/admin/src/services/uid.d.ts +5 -5
  74. package/dist/admin/src/utils/layouts/normalizeContentManagerLayout.d.ts +4 -4
  75. package/dist/admin/src/utils/users.d.ts +1 -1
  76. package/dist/admin/src/utils/validation.d.ts +1 -1
  77. package/dist/admin/translations/en.json.js +5 -2
  78. package/dist/admin/translations/en.json.js.map +1 -1
  79. package/dist/admin/translations/en.json.mjs +5 -2
  80. package/dist/admin/translations/en.json.mjs.map +1 -1
  81. package/dist/admin/translations/ja.json.js +262 -87
  82. package/dist/admin/translations/ja.json.js.map +1 -1
  83. package/dist/admin/translations/ja.json.mjs +262 -87
  84. package/dist/admin/translations/ja.json.mjs.map +1 -1
  85. package/dist/server/controllers/collection-types.js +2 -2
  86. package/dist/server/controllers/collection-types.js.map +1 -1
  87. package/dist/server/controllers/collection-types.mjs +2 -2
  88. package/dist/server/controllers/collection-types.mjs.map +1 -1
  89. package/dist/server/controllers/single-types.js +2 -2
  90. package/dist/server/controllers/single-types.js.map +1 -1
  91. package/dist/server/controllers/single-types.mjs +2 -2
  92. package/dist/server/controllers/single-types.mjs.map +1 -1
  93. package/dist/server/preview/controllers/preview.js +9 -0
  94. package/dist/server/preview/controllers/preview.js.map +1 -1
  95. package/dist/server/preview/controllers/preview.mjs +9 -0
  96. package/dist/server/preview/controllers/preview.mjs.map +1 -1
  97. package/dist/server/preview/controllers/previewScript.js +1450 -0
  98. package/dist/server/preview/routes/preview.js +11 -0
  99. package/dist/server/preview/routes/preview.js.map +1 -1
  100. package/dist/server/preview/routes/preview.mjs +11 -0
  101. package/dist/server/preview/routes/preview.mjs.map +1 -1
  102. package/dist/server/services/document-manager.js +13 -19
  103. package/dist/server/services/document-manager.js.map +1 -1
  104. package/dist/server/services/document-manager.mjs +13 -19
  105. package/dist/server/services/document-manager.mjs.map +1 -1
  106. package/dist/server/services/utils/draft-relations.js +9 -0
  107. package/dist/server/services/utils/draft-relations.js.map +1 -0
  108. package/dist/server/services/utils/draft-relations.mjs +7 -0
  109. package/dist/server/services/utils/draft-relations.mjs.map +1 -0
  110. package/dist/server/services/utils/draft.js +118 -25
  111. package/dist/server/services/utils/draft.js.map +1 -1
  112. package/dist/server/services/utils/draft.mjs +118 -25
  113. package/dist/server/services/utils/draft.mjs.map +1 -1
  114. package/dist/server/services/utils/populate.js +15 -1
  115. package/dist/server/services/utils/populate.js.map +1 -1
  116. package/dist/server/services/utils/populate.mjs +15 -1
  117. package/dist/server/services/utils/populate.mjs.map +1 -1
  118. package/dist/server/src/controllers/index.d.ts +1 -1
  119. package/dist/server/src/controllers/relations.d.ts.map +1 -1
  120. package/dist/server/src/controllers/utils/clone.d.ts.map +1 -1
  121. package/dist/server/src/controllers/utils/document-status.d.ts +1 -1
  122. package/dist/server/src/controllers/utils/document-status.d.ts.map +1 -1
  123. package/dist/server/src/controllers/utils/metadata.d.ts +5 -5
  124. package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
  125. package/dist/server/src/controllers/validation/dimensions.d.ts.map +1 -1
  126. package/dist/server/src/controllers/validation/index.d.ts +3 -3
  127. package/dist/server/src/controllers/validation/index.d.ts.map +1 -1
  128. package/dist/server/src/controllers/validation/model-configuration.d.ts.map +1 -1
  129. package/dist/server/src/controllers/validation/relations.d.ts +2 -2
  130. package/dist/server/src/history/controllers/history-version.d.ts +1 -7
  131. package/dist/server/src/history/controllers/history-version.d.ts.map +1 -1
  132. package/dist/server/src/history/controllers/index.d.ts +2 -1
  133. package/dist/server/src/history/controllers/index.d.ts.map +1 -1
  134. package/dist/server/src/history/controllers/validation/history-version.d.ts +1 -1
  135. package/dist/server/src/history/services/history.d.ts +0 -2
  136. package/dist/server/src/history/services/history.d.ts.map +1 -1
  137. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  138. package/dist/server/src/history/services/utils.d.ts +3 -3
  139. package/dist/server/src/history/services/utils.d.ts.map +1 -1
  140. package/dist/server/src/history/utils.d.ts +1 -18
  141. package/dist/server/src/history/utils.d.ts.map +1 -1
  142. package/dist/server/src/homepage/controllers/homepage.d.ts +0 -1
  143. package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -1
  144. package/dist/server/src/homepage/controllers/index.d.ts +2 -1
  145. package/dist/server/src/homepage/controllers/index.d.ts.map +1 -1
  146. package/dist/server/src/homepage/index.d.ts +4 -8
  147. package/dist/server/src/homepage/index.d.ts.map +1 -1
  148. package/dist/server/src/homepage/services/homepage-query-utils.d.ts.map +1 -1
  149. package/dist/server/src/homepage/services/homepage.d.ts +3 -4
  150. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
  151. package/dist/server/src/homepage/services/index.d.ts +4 -8
  152. package/dist/server/src/homepage/services/index.d.ts.map +1 -1
  153. package/dist/server/src/index.d.ts +79 -85
  154. package/dist/server/src/index.d.ts.map +1 -1
  155. package/dist/server/src/mcp/derive-content-type-mcp-tools.d.ts.map +1 -1
  156. package/dist/server/src/mcp/handlers/collection-handlers.d.ts.map +1 -1
  157. package/dist/server/src/mcp/handlers/single-type-handlers.d.ts.map +1 -1
  158. package/dist/server/src/mcp/permissions.d.ts +1 -1
  159. package/dist/server/src/mcp/permissions.d.ts.map +1 -1
  160. package/dist/server/src/mcp/register-content-manager-mcp-tools.d.ts.map +1 -1
  161. package/dist/server/src/mcp/sanitizers/shape-relations.d.ts.map +1 -1
  162. package/dist/server/src/mcp/schemas/blocks-schema.d.ts.map +1 -1
  163. package/dist/server/src/mcp/schemas/data-schema.d.ts.map +1 -1
  164. package/dist/server/src/mcp/schemas/filters-schema.d.ts.map +1 -1
  165. package/dist/server/src/mcp/schemas/output-schemas.d.ts.map +1 -1
  166. package/dist/server/src/mcp/schemas/sort-schema.d.ts.map +1 -1
  167. package/dist/server/src/mcp/utils.d.ts.map +1 -1
  168. package/dist/server/src/middlewares/routing.d.ts.map +1 -1
  169. package/dist/server/src/policies/hasPermissions.d.ts.map +1 -1
  170. package/dist/server/src/policies/index.d.ts.map +1 -1
  171. package/dist/server/src/preview/controllers/index.d.ts +2 -1
  172. package/dist/server/src/preview/controllers/index.d.ts.map +1 -1
  173. package/dist/server/src/preview/controllers/preview.d.ts +5 -0
  174. package/dist/server/src/preview/controllers/preview.d.ts.map +1 -1
  175. package/dist/server/src/preview/controllers/validation/preview.d.ts +1 -2
  176. package/dist/server/src/preview/controllers/validation/preview.d.ts.map +1 -1
  177. package/dist/server/src/preview/routes/preview.d.ts.map +1 -1
  178. package/dist/server/src/preview/services/index.d.ts +1 -1
  179. package/dist/server/src/preview/services/index.d.ts.map +1 -1
  180. package/dist/server/src/preview/services/preview-config.d.ts +1 -1
  181. package/dist/server/src/preview/services/preview-config.d.ts.map +1 -1
  182. package/dist/server/src/preview/services/preview.d.ts.map +1 -1
  183. package/dist/server/src/preview/utils.d.ts +1 -16
  184. package/dist/server/src/preview/utils.d.ts.map +1 -1
  185. package/dist/server/src/services/components.d.ts +2 -2
  186. package/dist/server/src/services/components.d.ts.map +1 -1
  187. package/dist/server/src/services/configuration.d.ts.map +1 -1
  188. package/dist/server/src/services/content-types.d.ts.map +1 -1
  189. package/dist/server/src/services/data-mapper.d.ts +5 -5
  190. package/dist/server/src/services/data-mapper.d.ts.map +1 -1
  191. package/dist/server/src/services/document-manager.d.ts +14 -14
  192. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  193. package/dist/server/src/services/document-metadata.d.ts +6 -6
  194. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  195. package/dist/server/src/services/field-sizes.d.ts +2 -2
  196. package/dist/server/src/services/field-sizes.d.ts.map +1 -1
  197. package/dist/server/src/services/index.d.ts +78 -84
  198. package/dist/server/src/services/index.d.ts.map +1 -1
  199. package/dist/server/src/services/metrics.d.ts.map +1 -1
  200. package/dist/server/src/services/permission-checker.d.ts +12 -31
  201. package/dist/server/src/services/permission-checker.d.ts.map +1 -1
  202. package/dist/server/src/services/permission.d.ts.map +1 -1
  203. package/dist/server/src/services/populate-builder.d.ts +4 -4
  204. package/dist/server/src/services/populate-builder.d.ts.map +1 -1
  205. package/dist/server/src/services/uid.d.ts.map +1 -1
  206. package/dist/server/src/services/utils/configuration/attributes.d.ts.map +1 -1
  207. package/dist/server/src/services/utils/configuration/settings.d.ts.map +1 -1
  208. package/dist/server/src/services/utils/count.d.ts.map +1 -1
  209. package/dist/server/src/services/utils/draft-relations.d.ts +19 -0
  210. package/dist/server/src/services/utils/draft-relations.d.ts.map +1 -0
  211. package/dist/server/src/services/utils/draft.d.ts +8 -7
  212. package/dist/server/src/services/utils/draft.d.ts.map +1 -1
  213. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  214. package/dist/server/src/services/utils/store.d.ts.map +1 -1
  215. package/dist/server/src/utils/index.d.ts.map +1 -1
  216. package/dist/server/src/validation/policies/hasPermissions.d.ts +1 -1
  217. package/dist/server/src/validation/zod.d.ts +1 -1
  218. package/dist/server/src/validation/zod.d.ts.map +1 -1
  219. package/dist/shared/contracts/collection-types.d.ts +4 -1
  220. package/dist/shared/contracts/collection-types.d.ts.map +1 -1
  221. package/dist/shared/contracts/single-types.d.ts +4 -1
  222. package/dist/shared/contracts/single-types.d.ts.map +1 -1
  223. package/package.json +8 -8
  224. package/dist/admin/preview/utils/previewScript.js +0 -1068
  225. package/dist/admin/preview/utils/previewScript.js.map +0 -1
  226. package/dist/admin/preview/utils/previewScript.mjs +0 -1066
  227. package/dist/admin/preview/utils/previewScript.mjs.map +0 -1
  228. package/dist/admin/src/preview/utils/previewScript.d.ts +0 -32
@@ -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 type FieldContentSourceMap,\n useNotification,\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, useTheme } 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 } from '../utils/constants';\nimport { getSendMessage } from '../utils/getSendMessage';\nimport { previewScript } from '../utils/previewScript';\n\nimport type { Schema, 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 extends FieldContentSourceMap {\n position: DOMRect;\n attribute: Schema.Attribute.AnyAttribute;\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 components: NonNullable<ReturnType<UseDocument>['components']>;\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 const theme = useTheme();\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 const { toggleNotification } = useNotification();\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 const previewHighlightColors = {\n highlightHoverColor: theme.colors.primary500,\n highlightActiveColor: theme.colors.primary600,\n };\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()})(${JSON.stringify({\n shouldRun: true,\n colors: previewHighlightColors,\n })})`;\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 }, [documentId, toggleNotification, theme]);\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 components={documentResponse.components}\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=\"100dvh\"\n width=\"100dvw\"\n position=\"fixed\"\n top={0}\n left={0}\n zIndex={5}\n background=\"neutral0\"\n >\n <Page.Error />\n </Box>\n );\n }\n\n return (\n <Box\n height=\"100dvh\"\n width=\"100dvw\"\n position=\"fixed\"\n top={0}\n left={0}\n zIndex={5}\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 };\nexport type { PreviewContextValue };\n"],"names":["DEVICES","name","label","id","defaultMessage","width","height","PreviewProvider","usePreviewContext","createContext","AnimatedArrow","styled","ArrowLineLeft","props","$isSideEditorOpen","PreviewPage","location","useLocation","formatMessage","useIntl","theme","useTheme","iframeRef","React","useRef","isSideEditorOpen","setIsSideEditorOpen","useState","popoverField","setPopoverField","toggleNotification","useNotification","slug","model","documentId","collectionType","useParams","query","useQueryParams","params","useMemo","buildValidParams","deviceName","setDeviceName","device","find","d","previewHighlightColors","highlightHoverColor","colors","primary500","highlightActiveColor","primary600","useEffect","handleMessage","event","current","previewOrigin","URL","src","origin","data","type","PUBLIC_EVENTS","PREVIEW_READY","script","previewScript","toString","JSON","stringify","shouldRun","sendMessage","getSendMessage","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","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":";;;;;;;;;;;;;;;;;;;;;;;;AA4CA;;AAEkG,qGAElG,MAAMA,OAAAA,GAAU;AACd,IAAA;QACEC,IAAAA,EAAM,SAAA;QACNC,KAAAA,EAAO;YACLC,EAAAA,EAAI,wCAAA;YACJC,cAAAA,EAAgB;AAClB,SAAA;QACAC,KAAAA,EAAO,MAAA;QACPC,MAAAA,EAAQ;AACV,KAAA;AACA,IAAA;QACEL,IAAAA,EAAM,QAAA;QACNC,KAAAA,EAAO;YACLC,EAAAA,EAAI,uCAAA;YACJC,cAAAA,EAAgB;AAClB,SAAA;QACAC,KAAAA,EAAO,OAAA;QACPC,MAAAA,EAAQ;AACV;AACD,CAAA;AAyBD,MAAM,CAACC,eAAAA,EAAiBC,iBAAAA,CAAkB,GAAGC,aAAAA,CAAmC,aAAA;AAEhF;;AAEkG,qGAElG,MAAMC,aAAAA,GAAgBC,MAAAA,CAAOC,aAAAA,CAA8C;;AAEjE,UAAA,EAAE,CAACC,KAAAA,GAAWA,KAAAA,CAAMC,iBAAiB,GAAG,SAAS,QAAA,CAAU;;AAErE,CAAC;AAED,MAAMC,WAAAA,GAAc,IAAA;AAClB,IAAA,MAAMC,QAAAA,GAAWC,WAAAA,EAAAA;IACjB,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAMC,KAAAA,GAAQC,QAAAA,EAAAA;IAEd,MAAMC,SAAAA,GAAYC,KAAAA,CAAMC,MAAM,CAAoB,IAAA,CAAA;AAClD,IAAA,MAAM,CAACC,gBAAAA,EAAkBC,mBAAAA,CAAoB,GAAGH,KAAAA,CAAMI,QAAQ,CAAC,IAAA,CAAA;AAC/D,IAAA,MAAM,CAACC,YAAAA,EAAcC,eAAAA,CAAgB,GAAGN,KAAAA,CAAMI,QAAQ,CAAsB,IAAA,CAAA;IAC5E,MAAM,EAAEG,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;;IAG/B,MAAM,EACJC,MAAMC,KAAK,EACX9B,IAAI+B,UAAU,EACdC,cAAc,EACf,GAAGC,SAAAA,EAAAA;AAKJ,IAAA,MAAM,CAAC,EAAEC,KAAK,EAAE,CAAC,GAAGC,cAAAA,EAAAA;AAKpB,IAAA,MAAMC,SAAShB,KAAAA,CAAMiB,OAAO,CAAC,IAAMC,iBAAiBJ,KAAAA,CAAAA,EAAQ;AAACA,QAAAA;AAAM,KAAA,CAAA;IAEnE,MAAM,CAACK,UAAAA,EAAYC,aAAAA,CAAc,GAAGpB,KAAAA,CAAMI,QAAQ,CAChD3B,OAAO,CAAC,CAAA,CAAE,CAACC,IAAI,CAAA;AAEjB,IAAA,MAAM2C,MAAAA,GAAS5C,OAAAA,CAAQ6C,IAAI,CAAC,CAACC,CAAAA,GAAMA,CAAAA,CAAE7C,IAAI,KAAKyC,UAAAA,CAAAA,IAAe1C,OAAO,CAAC,CAAA,CAAE;AAEvE,IAAA,MAAM+C,sBAAAA,GAAyB;QAC7BC,mBAAAA,EAAqB5B,KAAAA,CAAM6B,MAAM,CAACC,UAAU;QAC5CC,oBAAAA,EAAsB/B,KAAAA,CAAM6B,MAAM,CAACG;AACrC,KAAA;;AAGA7B,IAAAA,KAAAA,CAAM8B,SAAS,CAAC,IAAA;AACd,QAAA,MAAMC,gBAAgB,CAACC,KAAAA,GAAAA;;YAErB,IAAIjC,SAAAA,CAAUkC,OAAO,EAAE;AACrB,gBAAA,MAAMC,gBAAgB,IAAIC,GAAAA,CAAIpC,UAAUkC,OAAO,EAAEG,KAAKC,MAAM;gBAC5D,IAAIL,KAAAA,CAAMK,MAAM,KAAKH,aAAAA,EAAe;AAClC,oBAAA;AACF,gBAAA;AACF,YAAA;AAEA,YAAA,IAAIF,MAAMM,IAAI,EAAEC,IAAAA,KAASC,aAAAA,CAAcC,aAAa,EAAE;gBACpD,MAAMC,MAAAA,GAAS,CAAC,CAAC,EAAEC,aAAAA,CAAcC,QAAQ,EAAA,CAAG,EAAE,EAAEC,IAAAA,CAAKC,SAAS,CAAC;oBAC7DC,SAAAA,EAAW,IAAA;oBACXrB,MAAAA,EAAQF;AACV,iBAAA,CAAA,CAAG,CAAC,CAAC;AACL,gBAAA,MAAMwB,cAAcC,cAAAA,CAAelD,SAAAA,CAAAA;gBACnCiD,WAAAA,CAAYR,aAAAA,CAAcU,aAAa,EAAE;AAAER,oBAAAA;AAAO,iBAAA,CAAA;AACpD,YAAA;AACF,QAAA,CAAA;QAEAS,MAAAA,CAAOC,gBAAgB,CAAC,SAAA,EAAWrB,aAAAA,CAAAA;QAEnC,OAAO,IAAA;YACLoB,MAAAA,CAAOE,mBAAmB,CAAC,SAAA,EAAWtB,aAAAA,CAAAA;AACxC,QAAA,CAAA;IACF,CAAA,EAAG;AAACpB,QAAAA,UAAAA;AAAYJ,QAAAA,kBAAAA;AAAoBV,QAAAA;AAAM,KAAA,CAAA;AAE1C,IAAA,IAAI,CAACe,cAAAA,EAAgB;AACnB,QAAA,MAAM,IAAI0C,KAAAA,CAAM,6CAAA,CAAA;AAClB,IAAA;AAEA,IAAA,IAAI,CAAC5C,KAAAA,EAAO;AACV,QAAA,MAAM,IAAI4C,KAAAA,CAAM,oCAAA,CAAA;AAClB,IAAA;;IAGA,IAAI1C,cAAAA,KAAmB2C,gBAAAA,IAAoB,CAAC5C,UAAAA,EAAY;AACtD,QAAA,MAAM,IAAI2C,KAAAA,CAAM,yCAAA,CAAA;AAClB,IAAA;AAEA,IAAA,MAAME,qBAAqBC,qBAAAA,CAAsB;QAC/CzC,MAAAA,EAAQ;YACN0C,WAAAA,EAAahD;AACf,SAAA;QACAI,KAAAA,EAAO;AACLH,YAAAA,UAAAA;AACAgD,YAAAA,MAAAA,EAAQ3C,OAAO2C,MAAM;AACrBC,YAAAA,MAAAA,EAAQ5C,OAAO4C;AACjB;AACF,KAAA,CAAA;AACA,IAAA,MAAMC,mBAAmBC,WAAAA,CAAY;AACnCpD,QAAAA,KAAAA;AACAE,QAAAA,cAAAA;AACAD,QAAAA,UAAAA;AACAK,QAAAA;AACF,KAAA,CAAA;AACA,IAAA,MAAM+C,yBAAyBC,iBAAAA,CAAkBtD,KAAAA,CAAAA;IAEjD,MAAMuD,SAAAA,GACJT,mBAAmBS,SAAS,IAAIF,uBAAuBE,SAAS,IAAIJ,iBAAiBI,SAAS;IAChG,IAAIA,SAAAA,KAAc,CAACJ,gBAAAA,CAAiBK,QAAQ,EAAEvD,UAAAA,IAAc6C,kBAAAA,CAAmBS,SAAQ,CAAA,EAAI;QACzF,qBAAOE,GAAA,CAACC,KAAKC,OAAO,EAAA,EAAA,CAAA;AACtB,IAAA;IAEA,MAAMC,aAAAA,GAAgBT,iBAAiBU,oBAAoB,EAAA;AAE3D,IAAA,IACEf,mBAAmBgB,KAAK,IACxBT,uBAAuBS,KAAK,IAC5B,CAACX,gBAAAA,CAAiBK,QAAQ,IAC1B,CAACL,gBAAAA,CAAiBY,IAAI,IACtB,CAACZ,iBAAiBa,MAAM,IACxB,CAACJ,aAAAA,EACD;QACA,qBAAOH,GAAA,CAACC,KAAKd,KAAK,EAAA,EAAA,CAAA;AACpB,IAAA;AAEA,IAAA,IAAI,CAACE,kBAAAA,CAAmBlB,IAAI,EAAEA,MAAMqC,GAAAA,EAAK;QACvC,qBAAOR,GAAA,CAACC,KAAKQ,MAAM,EAAA,EAAA,CAAA;AACrB,IAAA;IAEA,MAAMC,aAAAA,GAAgBhB,iBAAiBiB,QAAQ,CAACf,uBAAuBgB,IAAI,CAACC,QAAQ,CAACC,SAAS,CAAA;IAE9F,MAAMC,YAAAA,GAAe,CAACC,MAAAA,EAAiCC,OAAAA,GAAAA;QACrD,MAAM,EAAE9C,MAAM+C,aAAa,EAAEC,iBAAiB,EAAE,GAAGC,0BAA0BJ,MAAAA,EAAQ;AACnFT,YAAAA,MAAAA,EAAQb,iBAAiBa,MAAM;AAC/BJ,YAAAA,aAAAA;AACAkB,YAAAA,UAAAA,EAAY3B,iBAAiB2B;AAC/B,SAAA,CAAA;QAEA,MAAMC,SAAAA,GAAYC,gBAChB7B,gBAAAA,CAAiBa,MAAM,EAAEiB,UAAAA,EACzB9B,gBAAAA,CAAiB2B,UAAU,EAC3B;YACE5B,MAAAA,EAAQC,gBAAAA,CAAiBK,QAAQ,EAAEN,MAAAA;AACnC0B,YAAAA,iBAAAA;AACA,YAAA,GAAGF;AACL,SAAA,CAAA;QAGF,OAAOK,SAAAA,CAAUP,YAAY,CAACG,aAAAA,EAAe;YAAEO,UAAAA,EAAY;AAAM,SAAA,CAAA;AACnE,IAAA,CAAA;AAEA,IAAA,MAAMC,aAAarC,kBAAAA,CAAmBlB,IAAI,CAACA,IAAI,CAACqC,GAAG;AAEnD,IAAA,MAAMmB,SAAAA,GAAY,IAAA;QAChB/F,SAAAA,EAAWkC,OAAAA,EAAS8D,eAAeC,WAAAA,CACjC;YAAEzD,IAAAA,EAAM;AAAe,SAAA;AAEvB,QAAA,IAAIJ,IAAIpC,SAAAA,CAAUkC,OAAO,CAACG,GAAG,EAAEC,MAAM,CAAA;AAEzC,IAAA,CAAA;AAEA,IAAA,MAAM4D,qBAAqB9C,MAAAA,CAAO+C,MAAM,CAACC,QAAQ,CAACC,SAAS,CAAC,sBAAA,CAAA;IAE5D,qBACEC,IAAA,CAAAC,QAAA,EAAA;;AACE,0BAAAnC,GAAA,CAACC,KAAKmC,KAAK,EAAA;0BACR5G,aAAAA,CACC;oBACEf,EAAAA,EAAI,oCAAA;oBACJC,cAAAA,EAAgB;iBAClB,EACA;oBACE6E,WAAAA,EAAamB;AACf,iBAAA;;0BAGJV,GAAA,CAACnF,eAAAA,EAAAA;gBACC2F,GAAAA,EAAKkB,UAAAA;AACL3B,gBAAAA,QAAAA,EAAUL,iBAAiBK,QAAQ;gBACnCsC,KAAAA,EAAO3B,aAAAA;AACPJ,gBAAAA,IAAAA,EAAMZ,iBAAiBY,IAAI;AAC3BC,gBAAAA,MAAAA,EAAQb,iBAAiBa,MAAM;AAC/Bc,gBAAAA,UAAAA,EAAY3B,iBAAiB2B,UAAU;AACvCiB,gBAAAA,MAAAA,EAAQ1C,uBAAuBgB,IAAI;gBACnCe,SAAAA,EAAWA,SAAAA;gBACX/F,SAAAA,EAAWA,SAAAA;gBACXM,YAAAA,EAAcA,YAAAA;gBACdC,eAAAA,EAAiBA,eAAAA;AAEjB,gBAAA,QAAA,gBAAA6D,GAAA,CAACuC,IAAAA,EAAAA;oBACCC,MAAAA,EAAO,KAAA;oBACPC,QAAAA,EACE9F,KAAAA,CAAM8C,MAAM,KAAK,WAAA,IACjBC,oBACAA,gBAAAA,CAAiBK,QAAQ,CAACN,MAAM,KAAK,OAAA;AAEvCU,oBAAAA,aAAAA,EAAeT,iBAAiBU,oBAAoB,EAAA;AACpDsC,oBAAAA,aAAAA,EAAepH,UAAUqH,KAAAA,EAAOC,eAAAA,GAAkB7B,aAAaZ,aAAAA,EAAe,MAAM,EAAC;oBACrFvF,MAAAA,EAAO,MAAA;AACPiI,oBAAAA,QAAAA,EAAU,CAAC7B,MAAAA,EAAiCC,OAAAA,GAAAA;wBAC1C,MAAM,EAAE9C,MAAM+C,aAAa,EAAEC,iBAAiB,EAAE,GAAGC,0BAA0BJ,MAAAA,EAAQ;AACnFT,4BAAAA,MAAAA,EAAQb,iBAAiBa,MAAM;AAC/BJ,4BAAAA,aAAAA;AACAkB,4BAAAA,UAAAA,EAAY3B,iBAAiB2B;AAC/B,yBAAA,CAAA;wBAEA,MAAMC,SAAAA,GAAYC,gBAChB7B,gBAAAA,CAAiBa,MAAM,EAAEiB,UAAAA,EACzB9B,gBAAAA,CAAiB2B,UAAU,EAC3B;4BACE5B,MAAAA,EAAQC,gBAAAA,CAAiBK,QAAQ,EAAEN,MAAAA;AACnC0B,4BAAAA,iBAAAA;AACA,4BAAA,GAAGF;AACL,yBAAA,CAAA;wBAGF,OAAOK,SAAAA,CAAUuB,QAAQ,CAAC3B,aAAAA,EAAe;4BAAEO,UAAAA,EAAY;AAAM,yBAAA,CAAA;AAC/D,oBAAA,CAAA;AAEA,oBAAA,QAAA,gBAAAS,IAAA,CAACY,IAAAA,EAAAA;wBAAKC,SAAAA,EAAU,QAAA;wBAASnI,MAAAA,EAAO,MAAA;wBAAOoI,UAAAA,EAAW,SAAA;;0CAChDhD,GAAA,CAACiD,OAAAA,EAAAA,EAAAA,CAAAA;0CACDjD,GAAA,CAACkD,aAAAA,EAAAA,EAAAA,CAAAA;0CACDlD,GAAA,CAACmD,YAAAA,EAAAA;gCAAazD,gBAAAA,EAAkBA;;0CAChCwC,IAAA,CAACY,IAAAA,EAAAA;gCAAKM,IAAAA,EAAM,CAAA;gCAAGC,QAAAA,EAAS,MAAA;gCAAOL,UAAAA,EAAW,SAAA;;AACvClB,oCAAAA,kBAAAA,kBACC9B,GAAA,CAACsD,GAAAA,EAAAA;wCACCD,QAAAA,EAAS,MAAA;AACT1I,wCAAAA,KAAAA,EAAOoB,mBAAmB,KAAA,GAAQ,CAAA;wCAClCwH,WAAAA,EAAY,WAAA;wCACZC,WAAAA,EAAY,YAAA;wCACZC,UAAAA,EAAY,CAAA;wCACZC,aAAAA,EAAe,CAAA;;AAEfC,wCAAAA,WAAAA,EAAa5H,mBAAmB,CAAA,GAAI,CAAA;AACpC6H,wCAAAA,YAAAA,EAAc7H,mBAAmB,CAAA,GAAI,CAAA;wCACrC8H,UAAAA,EAAW,sBAAA;AAEX,wCAAA,QAAA,gBAAA7D,GAAA,CAAC8D,UAAAA,EAAAA;4CACCxB,MAAAA,EAAQ1C,sBAAAA,CAAuBgB,IAAI,CAAC0B,MAAM;4CAC1CvC,QAAAA,EAAUL,gBAAAA;4CACVqE,aAAAA,EAAe;;;kDAIrB7B,IAAA,CAACY,IAAAA,EAAAA;wCACCC,SAAAA,EAAU,QAAA;wCACVC,UAAAA,EAAW,SAAA;wCACXI,IAAAA,EAAM,CAAA;wCACNxI,MAAAA,EAAO,MAAA;wCACPyI,QAAAA,EAAS,QAAA;;0DAETnB,IAAA,CAACY,IAAAA,EAAAA;gDACCC,SAAAA,EAAU,KAAA;gDACViB,UAAAA,EAAW,UAAA;gDACXC,OAAAA,EAAS,CAAA;gDACTV,WAAAA,EAAY,WAAA;gDACZC,WAAAA,EAAY,YAAA;;AAEX1B,oDAAAA,kBAAAA,kBACC9B,GAAA,CAACkE,UAAAA,EAAAA;wDACCC,OAAAA,EAAQ,OAAA;AACR3J,wDAAAA,KAAAA,EAAOgB,cACLO,gBAAAA,GACI;4DACEtB,EAAAA,EAAI,8CAAA;4DACJC,cAAAA,EAAgB;yDAClB,GACA;4DACED,EAAAA,EAAI,6CAAA;4DACJC,cAAAA,EAAgB;AAClB,yDAAA,CAAA;AAEN0J,wDAAAA,OAAAA,EAAS,IAAMpI,mBAAAA,CAAoB,CAACqI,IAAAA,GAAS,CAACA,IAAAA,CAAAA;AAE9C,wDAAA,QAAA,gBAAArE,GAAA,CAAChF,aAAAA,EAAAA;4DAAcI,iBAAAA,EAAmBW;;;kEAGtCiE,GAAA,CAAC8C,IAAAA,EAAAA;wDAAKwB,cAAAA,EAAe,QAAA;wDAASlB,IAAAA,EAAM,CAAA;AAClC,wDAAA,QAAA,gBAAApD,GAAA,CAACuE,YAAAA,EAAAA;4DACCC,KAAAA,EAAOxH,UAAAA;AACPyH,4DAAAA,QAAAA,EAAU,CAAClK,IAAAA,GAAS0C,aAAAA,CAAc1C,IAAAA,CAAKkE,QAAQ,EAAA,CAAA;AAC/CiG,4DAAAA,YAAAA,EAAYlJ,aAAAA,CAAc;gEACxBf,EAAAA,EAAI,uCAAA;gEACJC,cAAAA,EAAgB;AAClB,6DAAA,CAAA;AAECJ,4DAAAA,QAAAA,EAAAA,OAAAA,CAAQqK,GAAG,CAAC,CAACC,YAAAA,iBACZ5E,GAAA,CAAC6E,kBAAAA,EAAAA;AAA2CL,oEAAAA,KAAAA,EAAOI,aAAarK,IAAI;AACjEiB,oEAAAA,QAAAA,EAAAA,aAAAA,CAAcoJ,aAAapK,KAAK;AADVoK,iEAAAA,EAAAA,YAAAA,CAAarK,IAAI,CAAA;;;;;0DAOlDyF,GAAA,CAAC8C,IAAAA,EAAAA;gDAAKC,SAAAA,EAAU,QAAA;gDAASuB,cAAAA,EAAe,QAAA;gDAASN,UAAAA,EAAW,UAAA;gDAAWZ,IAAAA,EAAM,CAAA;AAC3E,gDAAA,QAAA,gBAAApD,GAAA,CAACsD,GAAAA,EAAAA;oDACCwB,aAAAA,EAAY,gBAAA;oDACZC,GAAAA,EAAKnJ,SAAAA;oDACLqC,GAAAA,EAAKyD,UAAAA;AASLW,oDAAAA,KAAAA,EAAO7G,aAAAA,CAAc;wDACnBf,EAAAA,EAAI,qCAAA;wDACJC,cAAAA,EAAgB;AAClB,qDAAA,CAAA;AACAC,oDAAAA,KAAAA,EAAOuC,OAAOvC,KAAK;AACnBC,oDAAAA,MAAAA,EAAQsC,OAAOtC,MAAM;oDACrB2I,WAAAA,EAAa,CAAA;oDACbyB,GAAAA,EAAI;AARCtD,iDAAAA,EAAAA,UAAAA;;;;;;;;;;;;AAkBzB,CAAA;AAEA;;AAEkG,qGAElG,MAAMuD,wBAAAA,GAA2B,IAAA;AAC/B,IAAA,MAAM,EAAE3I,IAAAA,EAAMC,KAAK,EAAE,GAAGG,SAAAA,EAAAA;IAGxB,MAAM,EACJwI,cAAc,EAAE,EAChBpF,SAAS,EACTO,KAAK,EACN,GAAG8E,OAAAA,CAAQ;AACV,QAAA;YAAEC,MAAAA,EAAQ,uCAAA;YAAyCC,OAAAA,EAAS9I;AAAM,SAAA;AAClE,QAAA;YAAE6I,MAAAA,EAAQ,yCAAA;YAA2CC,OAAAA,EAAS9I;AAAM,SAAA;AACpE,QAAA;YAAE6I,MAAAA,EAAQ,0CAAA;YAA4CC,OAAAA,EAAS9I;AAAM;AACtE,KAAA,CAAA;AAED,IAAA,IAAIuD,SAAAA,EAAW;QACb,qBAAOE,GAAA,CAACC,KAAKC,OAAO,EAAA,EAAA,CAAA;AACtB,IAAA;IAEA,IAAIG,KAAAA,IAAS,CAAC9D,KAAAA,EAAO;AACnB,QAAA,qBACEyD,GAAA,CAACsD,GAAAA,EAAAA;YACC1I,MAAAA,EAAO,QAAA;YACPD,KAAAA,EAAM,QAAA;YACN2K,QAAAA,EAAS,OAAA;YACTC,GAAAA,EAAK,CAAA;YACLC,IAAAA,EAAM,CAAA;YACNC,MAAAA,EAAQ,CAAA;YACRzB,UAAAA,EAAW,UAAA;oCAEXhE,GAAA,CAACC,KAAKd,KAAK,EAAA,EAAA;;AAGjB,IAAA;AAEA,IAAA,qBACEa,GAAA,CAACsD,GAAAA,EAAAA;QACC1I,MAAAA,EAAO,QAAA;QACPD,KAAAA,EAAM,QAAA;QACN2K,QAAAA,EAAS,OAAA;QACTC,GAAAA,EAAK,CAAA;QACLC,IAAAA,EAAM,CAAA;QACNC,MAAAA,EAAQ,CAAA;QACRzB,UAAAA,EAAW,UAAA;gCAEXhE,GAAA,CAACC,KAAKyF,OAAO,EAAA;YACXR,WAAAA,EAAaA,WAAAA,CAAYS,MAAM,CAAC,CAACC,aAC/BA,UAAAA,CAAWR,MAAM,CAACS,QAAQ,CAAC,eAAA,CAAA,CAAA;AAG7B,YAAA,QAAA,gBAAA7F,GAAA,CAAC8F,YAAAA,EAAAA;gBAAaZ,WAAAA,EAAaA,WAAAA;AACzB,gBAAA,QAAA,gBAAAlF,GAAA,CAAC3E,WAAAA,EAAAA,EAAAA;;;;AAKX,CAAA;AAEA,MAAM0K,oBAAAA,GAAuB,IAAA;AAC3B,IAAA,qBACE/F,GAAA,CAACgG,MAAAA,EAAAA;AACC,QAAA,QAAA,gBAAAhG,GAAA,CAACiG,SAAAA,EAAAA;AACC,YAAA,QAAA,gBAAAjG,GAAA,CAACiF,wBAAAA,EAAAA,EAAAA;;;AAIT;;;;"}
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 type FieldContentSourceMap,\n useNotification,\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, useTheme } 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 { INTERNAL_EVENTS, PUBLIC_EVENTS } from '../utils/constants';\nimport { getSendMessage } from '../utils/getSendMessage';\n\nimport type { Schema, 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 extends FieldContentSourceMap {\n position: DOMRect;\n attribute: Schema.Attribute.AnyAttribute;\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 components: NonNullable<ReturnType<UseDocument>['components']>;\n layout: EditLayout;\n onPreview: () => void;\n iframeRef: React.RefObject<HTMLIFrameElement>;\n popoverField: PopoverField | null;\n setPopoverField: (value: PopoverField | null) => void;\n}\n\ntype PreviewHighlightColors = {\n highlightHoverColor: string;\n highlightActiveColor: string;\n};\n\nconst [PreviewProvider, usePreviewContext] = createContext<PreviewContextValue>('PreviewPage');\n\nconst getPreviewScript = (() => {\n let previewScript = '';\n return async (previewHighlightColors: PreviewHighlightColors) => {\n if (!previewScript) {\n const resp = await fetch(`${window.strapi.backendURL}/content-manager/preview/script`);\n\n if (!resp.ok) {\n throw new Error('Could not retrieve preview script from server.');\n }\n\n previewScript = await resp.text();\n\n if (!previewScript) {\n throw new Error('Could not retrieve preview script from server.');\n }\n }\n\n return `(${previewScript})(${JSON.stringify({\n colors: previewHighlightColors,\n events: INTERNAL_EVENTS,\n parentOrigin: window.location.origin,\n })})`;\n };\n})();\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 const theme = useTheme();\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 const { toggleNotification } = useNotification();\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 const previewHighlightColors: PreviewHighlightColors = {\n highlightHoverColor: theme.colors.primary500,\n highlightActiveColor: theme.colors.primary600,\n };\n\n // Listen for ready message from iframe before injecting script\n React.useEffect(() => {\n const handleMessage = async (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 try {\n const script = await getPreviewScript(previewHighlightColors);\n\n const sendMessage = getSendMessage(iframeRef);\n sendMessage(PUBLIC_EVENTS.STRAPI_SCRIPT, { script });\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'content-manager.preview.error.script-failed',\n defaultMessage:\n 'Could not load the live preview script. Visual editing may not be available.',\n }),\n });\n }\n }\n };\n\n window.addEventListener('message', handleMessage);\n\n return () => {\n window.removeEventListener('message', handleMessage);\n };\n }, [documentId, toggleNotification, theme, formatMessage]);\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 components={documentResponse.components}\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=\"100dvh\"\n width=\"100dvw\"\n position=\"fixed\"\n top={0}\n left={0}\n zIndex={5}\n background=\"neutral0\"\n >\n <Page.Error />\n </Box>\n );\n }\n\n return (\n <Box\n height=\"100dvh\"\n width=\"100dvw\"\n position=\"fixed\"\n top={0}\n left={0}\n zIndex={5}\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 };\nexport type { PreviewContextValue };\n"],"names":["DEVICES","name","label","id","defaultMessage","width","height","PreviewProvider","usePreviewContext","createContext","getPreviewScript","previewScript","previewHighlightColors","resp","fetch","window","strapi","backendURL","ok","Error","text","JSON","stringify","colors","events","INTERNAL_EVENTS","parentOrigin","location","origin","AnimatedArrow","styled","ArrowLineLeft","props","$isSideEditorOpen","PreviewPage","useLocation","formatMessage","useIntl","theme","useTheme","iframeRef","React","useRef","isSideEditorOpen","setIsSideEditorOpen","useState","popoverField","setPopoverField","toggleNotification","useNotification","slug","model","documentId","collectionType","useParams","query","useQueryParams","params","useMemo","buildValidParams","deviceName","setDeviceName","device","find","d","highlightHoverColor","primary500","highlightActiveColor","primary600","useEffect","handleMessage","event","current","previewOrigin","URL","src","data","type","PUBLIC_EVENTS","PREVIEW_READY","script","sendMessage","getSendMessage","STRAPI_SCRIPT","message","addEventListener","removeEventListener","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","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","toString","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,25 +1,20 @@
1
1
  'use strict';
2
2
 
3
- var previewScript = require('./previewScript.js');
4
-
5
- const PREVIEW_HIGHLIGHT_COLORS = {
6
- highlightHoverColor: 'transparent',
7
- highlightActiveColor: 'transparent'
8
- };
9
- const scriptResponse = previewScript.previewScript({
10
- shouldRun: false,
11
- colors: PREVIEW_HIGHLIGHT_COLORS
12
- });
13
3
  /**
14
- * These events can be changed safely. They're used by the content manager admin on one side, and by
15
- * the preview script on the other. We own both ends, and they're not documented to users, so we can
16
- * do what we want with them.
17
- */ const INTERNAL_EVENTS = scriptResponse.INTERNAL_EVENTS;
4
+ * These events are not part of the public API, changing them is not a breaking change.
5
+ */ const INTERNAL_EVENTS = {
6
+ STRAPI_FIELD_FOCUS: 'strapiFieldFocus',
7
+ STRAPI_FIELD_BLUR: 'strapiFieldBlur',
8
+ STRAPI_FIELD_CHANGE: 'strapiFieldChange',
9
+ STRAPI_FIELD_FOCUS_INTENT: 'strapiFieldFocusIntent',
10
+ STRAPI_FIELD_SINGLE_CLICK_HINT: 'strapiFieldSingleClickHint'
11
+ };
18
12
  /**
19
13
  * These events are documented to users, and will be hardcoded in their frontends.
20
14
  * Changing any of these would be a breaking change.
21
15
  */ const PUBLIC_EVENTS = {
22
16
  PREVIEW_READY: 'previewReady',
17
+ STRAPI_UPDATE: 'strapiUpdate',
23
18
  STRAPI_SCRIPT: 'strapiScript'
24
19
  };
25
20
  /**
@@ -58,6 +53,5 @@ const scriptResponse = previewScript.previewScript({
58
53
 
59
54
  exports.INTERNAL_EVENTS = INTERNAL_EVENTS;
60
55
  exports.PREVIEW_ERROR_MESSAGES = PREVIEW_ERROR_MESSAGES;
61
- exports.PREVIEW_HIGHLIGHT_COLORS = PREVIEW_HIGHLIGHT_COLORS;
62
56
  exports.PUBLIC_EVENTS = PUBLIC_EVENTS;
63
57
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sources":["../../../../admin/src/preview/utils/constants.ts"],"sourcesContent":["import { NotificationConfig } from '@strapi/admin/strapi-admin';\nimport { MessageDescriptor } from 'react-intl';\n\nimport { previewScript } from './previewScript';\n\nexport const PREVIEW_HIGHLIGHT_COLORS = {\n highlightHoverColor: 'transparent',\n highlightActiveColor: 'transparent',\n} as const;\n\nconst scriptResponse = previewScript({ shouldRun: false, colors: PREVIEW_HIGHLIGHT_COLORS });\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\n/**\n * Error messages for preview field operations.\n * This information is used to trigger notifications.\n */\nexport const PREVIEW_ERROR_MESSAGES = {\n INVALID_FIELD_PATH: {\n type: 'danger',\n message: {\n id: 'content-manager.preview.error.invalid-field-path',\n defaultMessage: 'Could not locate this field in the current document',\n },\n },\n RELATIONS_NOT_HANDLED: {\n type: 'info',\n message: {\n id: 'content-manager.preview.error.relations-not-handled',\n defaultMessage: 'Inline editing for relations is not currently supported.',\n },\n },\n INCOMPLETE_STRAPI_SOURCE: {\n type: 'danger',\n message: {\n id: 'content-manager.preview.error.incomplete-strapi-source',\n defaultMessage: 'This field is missing some required preview information',\n },\n },\n DIFFERENT_DOCUMENT: {\n type: 'info',\n message: {\n id: 'content-manager.preview.error.different-document',\n defaultMessage: 'This field comes from a different document',\n },\n },\n} as const satisfies Record<\n string,\n { message: MessageDescriptor; type: NonNullable<NotificationConfig['type']> }\n>;\n"],"names":["PREVIEW_HIGHLIGHT_COLORS","highlightHoverColor","highlightActiveColor","scriptResponse","previewScript","shouldRun","colors","INTERNAL_EVENTS","PUBLIC_EVENTS","PREVIEW_READY","STRAPI_SCRIPT","PREVIEW_ERROR_MESSAGES","INVALID_FIELD_PATH","type","message","id","defaultMessage","RELATIONS_NOT_HANDLED","INCOMPLETE_STRAPI_SOURCE","DIFFERENT_DOCUMENT"],"mappings":";;;;MAKaA,wBAAAA,GAA2B;IACtCC,mBAAAA,EAAqB,aAAA;IACrBC,oBAAAA,EAAsB;AACxB;AAEA,MAAMC,iBAAiBC,2BAAAA,CAAc;IAAEC,SAAAA,EAAW,KAAA;IAAOC,MAAAA,EAAQN;AAAyB,CAAA,CAAA;AAE1F;;;;AAIC,IACM,MAAMO,eAAAA,GAAkBJ,cAAAA,CAAgBI;AAE/C;;;UAIaC,aAAAA,GAAgB;IAC3BC,aAAAA,EAAe,cAAA;IAEfC,aAAAA,EAAe;AACjB;AAEA;;;UAIaC,sBAAAA,GAAyB;IACpCC,kBAAAA,EAAoB;QAClBC,IAAAA,EAAM,QAAA;QACNC,OAAAA,EAAS;YACPC,EAAAA,EAAI,kDAAA;YACJC,cAAAA,EAAgB;AAClB;AACF,KAAA;IACAC,qBAAAA,EAAuB;QACrBJ,IAAAA,EAAM,MAAA;QACNC,OAAAA,EAAS;YACPC,EAAAA,EAAI,qDAAA;YACJC,cAAAA,EAAgB;AAClB;AACF,KAAA;IACAE,wBAAAA,EAA0B;QACxBL,IAAAA,EAAM,QAAA;QACNC,OAAAA,EAAS;YACPC,EAAAA,EAAI,wDAAA;YACJC,cAAAA,EAAgB;AAClB;AACF,KAAA;IACAG,kBAAAA,EAAoB;QAClBN,IAAAA,EAAM,MAAA;QACNC,OAAAA,EAAS;YACPC,EAAAA,EAAI,kDAAA;YACJC,cAAAA,EAAgB;AAClB;AACF;AACF;;;;;;;"}
1
+ {"version":3,"file":"constants.js","sources":["../../../../admin/src/preview/utils/constants.ts"],"sourcesContent":["import { NotificationConfig } from '@strapi/admin/strapi-admin';\nimport { MessageDescriptor } from 'react-intl';\n\n/**\n * These events are not part of the public API, changing them is not a breaking change.\n */\nexport const INTERNAL_EVENTS = {\n STRAPI_FIELD_FOCUS: 'strapiFieldFocus',\n STRAPI_FIELD_BLUR: 'strapiFieldBlur',\n STRAPI_FIELD_CHANGE: 'strapiFieldChange',\n STRAPI_FIELD_FOCUS_INTENT: 'strapiFieldFocusIntent',\n STRAPI_FIELD_SINGLE_CLICK_HINT: 'strapiFieldSingleClickHint',\n} as const;\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\n/**\n * Error messages for preview field operations.\n * This information is used to trigger notifications.\n */\nexport const PREVIEW_ERROR_MESSAGES = {\n INVALID_FIELD_PATH: {\n type: 'danger',\n message: {\n id: 'content-manager.preview.error.invalid-field-path',\n defaultMessage: 'Could not locate this field in the current document',\n },\n },\n RELATIONS_NOT_HANDLED: {\n type: 'info',\n message: {\n id: 'content-manager.preview.error.relations-not-handled',\n defaultMessage: 'Inline editing for relations is not currently supported.',\n },\n },\n INCOMPLETE_STRAPI_SOURCE: {\n type: 'danger',\n message: {\n id: 'content-manager.preview.error.incomplete-strapi-source',\n defaultMessage: 'This field is missing some required preview information',\n },\n },\n DIFFERENT_DOCUMENT: {\n type: 'info',\n message: {\n id: 'content-manager.preview.error.different-document',\n defaultMessage: 'This field comes from a different document',\n },\n },\n} as const satisfies Record<\n string,\n { message: MessageDescriptor; type: NonNullable<NotificationConfig['type']> }\n>;\n"],"names":["INTERNAL_EVENTS","STRAPI_FIELD_FOCUS","STRAPI_FIELD_BLUR","STRAPI_FIELD_CHANGE","STRAPI_FIELD_FOCUS_INTENT","STRAPI_FIELD_SINGLE_CLICK_HINT","PUBLIC_EVENTS","PREVIEW_READY","STRAPI_UPDATE","STRAPI_SCRIPT","PREVIEW_ERROR_MESSAGES","INVALID_FIELD_PATH","type","message","id","defaultMessage","RELATIONS_NOT_HANDLED","INCOMPLETE_STRAPI_SOURCE","DIFFERENT_DOCUMENT"],"mappings":";;AAGA;;UAGaA,eAAAA,GAAkB;IAC7BC,kBAAAA,EAAoB,kBAAA;IACpBC,iBAAAA,EAAmB,iBAAA;IACnBC,mBAAAA,EAAqB,mBAAA;IACrBC,yBAAAA,EAA2B,wBAAA;IAC3BC,8BAAAA,EAAgC;AAClC;AAEA;;;UAIaC,aAAAA,GAAgB;IAC3BC,aAAAA,EAAe,cAAA;IACfC,aAAAA,EAAe,cAAA;IACfC,aAAAA,EAAe;AACjB;AAEA;;;UAIaC,sBAAAA,GAAyB;IACpCC,kBAAAA,EAAoB;QAClBC,IAAAA,EAAM,QAAA;QACNC,OAAAA,EAAS;YACPC,EAAAA,EAAI,kDAAA;YACJC,cAAAA,EAAgB;AAClB;AACF,KAAA;IACAC,qBAAAA,EAAuB;QACrBJ,IAAAA,EAAM,MAAA;QACNC,OAAAA,EAAS;YACPC,EAAAA,EAAI,qDAAA;YACJC,cAAAA,EAAgB;AAClB;AACF,KAAA;IACAE,wBAAAA,EAA0B;QACxBL,IAAAA,EAAM,QAAA;QACNC,OAAAA,EAAS;YACPC,EAAAA,EAAI,wDAAA;YACJC,cAAAA,EAAgB;AAClB;AACF,KAAA;IACAG,kBAAAA,EAAoB;QAClBN,IAAAA,EAAM,MAAA;QACNC,OAAAA,EAAS;YACPC,EAAAA,EAAI,kDAAA;YACJC,cAAAA,EAAgB;AAClB;AACF;AACF;;;;;;"}
@@ -1,23 +1,18 @@
1
- import { previewScript } from './previewScript.mjs';
2
-
3
- const PREVIEW_HIGHLIGHT_COLORS = {
4
- highlightHoverColor: 'transparent',
5
- highlightActiveColor: 'transparent'
6
- };
7
- const scriptResponse = previewScript({
8
- shouldRun: false,
9
- colors: PREVIEW_HIGHLIGHT_COLORS
10
- });
11
1
  /**
12
- * These events can be changed safely. They're used by the content manager admin on one side, and by
13
- * the preview script on the other. We own both ends, and they're not documented to users, so we can
14
- * do what we want with them.
15
- */ const INTERNAL_EVENTS = scriptResponse.INTERNAL_EVENTS;
2
+ * These events are not part of the public API, changing them is not a breaking change.
3
+ */ const INTERNAL_EVENTS = {
4
+ STRAPI_FIELD_FOCUS: 'strapiFieldFocus',
5
+ STRAPI_FIELD_BLUR: 'strapiFieldBlur',
6
+ STRAPI_FIELD_CHANGE: 'strapiFieldChange',
7
+ STRAPI_FIELD_FOCUS_INTENT: 'strapiFieldFocusIntent',
8
+ STRAPI_FIELD_SINGLE_CLICK_HINT: 'strapiFieldSingleClickHint'
9
+ };
16
10
  /**
17
11
  * These events are documented to users, and will be hardcoded in their frontends.
18
12
  * Changing any of these would be a breaking change.
19
13
  */ const PUBLIC_EVENTS = {
20
14
  PREVIEW_READY: 'previewReady',
15
+ STRAPI_UPDATE: 'strapiUpdate',
21
16
  STRAPI_SCRIPT: 'strapiScript'
22
17
  };
23
18
  /**
@@ -54,5 +49,5 @@ const scriptResponse = previewScript({
54
49
  }
55
50
  };
56
51
 
57
- export { INTERNAL_EVENTS, PREVIEW_ERROR_MESSAGES, PREVIEW_HIGHLIGHT_COLORS, PUBLIC_EVENTS };
52
+ export { INTERNAL_EVENTS, PREVIEW_ERROR_MESSAGES, PUBLIC_EVENTS };
58
53
  //# sourceMappingURL=constants.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.mjs","sources":["../../../../admin/src/preview/utils/constants.ts"],"sourcesContent":["import { NotificationConfig } from '@strapi/admin/strapi-admin';\nimport { MessageDescriptor } from 'react-intl';\n\nimport { previewScript } from './previewScript';\n\nexport const PREVIEW_HIGHLIGHT_COLORS = {\n highlightHoverColor: 'transparent',\n highlightActiveColor: 'transparent',\n} as const;\n\nconst scriptResponse = previewScript({ shouldRun: false, colors: PREVIEW_HIGHLIGHT_COLORS });\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\n/**\n * Error messages for preview field operations.\n * This information is used to trigger notifications.\n */\nexport const PREVIEW_ERROR_MESSAGES = {\n INVALID_FIELD_PATH: {\n type: 'danger',\n message: {\n id: 'content-manager.preview.error.invalid-field-path',\n defaultMessage: 'Could not locate this field in the current document',\n },\n },\n RELATIONS_NOT_HANDLED: {\n type: 'info',\n message: {\n id: 'content-manager.preview.error.relations-not-handled',\n defaultMessage: 'Inline editing for relations is not currently supported.',\n },\n },\n INCOMPLETE_STRAPI_SOURCE: {\n type: 'danger',\n message: {\n id: 'content-manager.preview.error.incomplete-strapi-source',\n defaultMessage: 'This field is missing some required preview information',\n },\n },\n DIFFERENT_DOCUMENT: {\n type: 'info',\n message: {\n id: 'content-manager.preview.error.different-document',\n defaultMessage: 'This field comes from a different document',\n },\n },\n} as const satisfies Record<\n string,\n { message: MessageDescriptor; type: NonNullable<NotificationConfig['type']> }\n>;\n"],"names":["PREVIEW_HIGHLIGHT_COLORS","highlightHoverColor","highlightActiveColor","scriptResponse","previewScript","shouldRun","colors","INTERNAL_EVENTS","PUBLIC_EVENTS","PREVIEW_READY","STRAPI_SCRIPT","PREVIEW_ERROR_MESSAGES","INVALID_FIELD_PATH","type","message","id","defaultMessage","RELATIONS_NOT_HANDLED","INCOMPLETE_STRAPI_SOURCE","DIFFERENT_DOCUMENT"],"mappings":";;MAKaA,wBAAAA,GAA2B;IACtCC,mBAAAA,EAAqB,aAAA;IACrBC,oBAAAA,EAAsB;AACxB;AAEA,MAAMC,iBAAiBC,aAAAA,CAAc;IAAEC,SAAAA,EAAW,KAAA;IAAOC,MAAAA,EAAQN;AAAyB,CAAA,CAAA;AAE1F;;;;AAIC,IACM,MAAMO,eAAAA,GAAkBJ,cAAAA,CAAgBI;AAE/C;;;UAIaC,aAAAA,GAAgB;IAC3BC,aAAAA,EAAe,cAAA;IAEfC,aAAAA,EAAe;AACjB;AAEA;;;UAIaC,sBAAAA,GAAyB;IACpCC,kBAAAA,EAAoB;QAClBC,IAAAA,EAAM,QAAA;QACNC,OAAAA,EAAS;YACPC,EAAAA,EAAI,kDAAA;YACJC,cAAAA,EAAgB;AAClB;AACF,KAAA;IACAC,qBAAAA,EAAuB;QACrBJ,IAAAA,EAAM,MAAA;QACNC,OAAAA,EAAS;YACPC,EAAAA,EAAI,qDAAA;YACJC,cAAAA,EAAgB;AAClB;AACF,KAAA;IACAE,wBAAAA,EAA0B;QACxBL,IAAAA,EAAM,QAAA;QACNC,OAAAA,EAAS;YACPC,EAAAA,EAAI,wDAAA;YACJC,cAAAA,EAAgB;AAClB;AACF,KAAA;IACAG,kBAAAA,EAAoB;QAClBN,IAAAA,EAAM,MAAA;QACNC,OAAAA,EAAS;YACPC,EAAAA,EAAI,kDAAA;YACJC,cAAAA,EAAgB;AAClB;AACF;AACF;;;;"}
1
+ {"version":3,"file":"constants.mjs","sources":["../../../../admin/src/preview/utils/constants.ts"],"sourcesContent":["import { NotificationConfig } from '@strapi/admin/strapi-admin';\nimport { MessageDescriptor } from 'react-intl';\n\n/**\n * These events are not part of the public API, changing them is not a breaking change.\n */\nexport const INTERNAL_EVENTS = {\n STRAPI_FIELD_FOCUS: 'strapiFieldFocus',\n STRAPI_FIELD_BLUR: 'strapiFieldBlur',\n STRAPI_FIELD_CHANGE: 'strapiFieldChange',\n STRAPI_FIELD_FOCUS_INTENT: 'strapiFieldFocusIntent',\n STRAPI_FIELD_SINGLE_CLICK_HINT: 'strapiFieldSingleClickHint',\n} as const;\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\n/**\n * Error messages for preview field operations.\n * This information is used to trigger notifications.\n */\nexport const PREVIEW_ERROR_MESSAGES = {\n INVALID_FIELD_PATH: {\n type: 'danger',\n message: {\n id: 'content-manager.preview.error.invalid-field-path',\n defaultMessage: 'Could not locate this field in the current document',\n },\n },\n RELATIONS_NOT_HANDLED: {\n type: 'info',\n message: {\n id: 'content-manager.preview.error.relations-not-handled',\n defaultMessage: 'Inline editing for relations is not currently supported.',\n },\n },\n INCOMPLETE_STRAPI_SOURCE: {\n type: 'danger',\n message: {\n id: 'content-manager.preview.error.incomplete-strapi-source',\n defaultMessage: 'This field is missing some required preview information',\n },\n },\n DIFFERENT_DOCUMENT: {\n type: 'info',\n message: {\n id: 'content-manager.preview.error.different-document',\n defaultMessage: 'This field comes from a different document',\n },\n },\n} as const satisfies Record<\n string,\n { message: MessageDescriptor; type: NonNullable<NotificationConfig['type']> }\n>;\n"],"names":["INTERNAL_EVENTS","STRAPI_FIELD_FOCUS","STRAPI_FIELD_BLUR","STRAPI_FIELD_CHANGE","STRAPI_FIELD_FOCUS_INTENT","STRAPI_FIELD_SINGLE_CLICK_HINT","PUBLIC_EVENTS","PREVIEW_READY","STRAPI_UPDATE","STRAPI_SCRIPT","PREVIEW_ERROR_MESSAGES","INVALID_FIELD_PATH","type","message","id","defaultMessage","RELATIONS_NOT_HANDLED","INCOMPLETE_STRAPI_SOURCE","DIFFERENT_DOCUMENT"],"mappings":"AAGA;;UAGaA,eAAAA,GAAkB;IAC7BC,kBAAAA,EAAoB,kBAAA;IACpBC,iBAAAA,EAAmB,iBAAA;IACnBC,mBAAAA,EAAqB,mBAAA;IACrBC,yBAAAA,EAA2B,wBAAA;IAC3BC,8BAAAA,EAAgC;AAClC;AAEA;;;UAIaC,aAAAA,GAAgB;IAC3BC,aAAAA,EAAe,cAAA;IACfC,aAAAA,EAAe,cAAA;IACfC,aAAAA,EAAe;AACjB;AAEA;;;UAIaC,sBAAAA,GAAyB;IACpCC,kBAAAA,EAAoB;QAClBC,IAAAA,EAAM,QAAA;QACNC,OAAAA,EAAS;YACPC,EAAAA,EAAI,kDAAA;YACJC,cAAAA,EAAgB;AAClB;AACF,KAAA;IACAC,qBAAAA,EAAuB;QACrBJ,IAAAA,EAAM,MAAA;QACNC,OAAAA,EAAS;YACPC,EAAAA,EAAI,qDAAA;YACJC,cAAAA,EAAgB;AAClB;AACF,KAAA;IACAE,wBAAAA,EAA0B;QACxBL,IAAAA,EAAM,QAAA;QACNC,OAAAA,EAAS;YACPC,EAAAA,EAAI,wDAAA;YACJC,cAAAA,EAAgB;AAClB;AACF,KAAA;IACAG,kBAAAA,EAAoB;QAClBN,IAAAA,EAAM,MAAA;QACNC,OAAAA,EAAS;YACPC,EAAAA,EAAI,kDAAA;YACJC,cAAAA,EAAgB;AAClB;AACF;AACF;;;;"}
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { InjectionZoneComponent } from '@strapi/admin/strapi-admin';
3
2
  declare const INJECTION_ZONES: {
4
3
  editView: {
@@ -45,7 +44,7 @@ declare const InjectionZone: ({ area, ...props }: {
45
44
  }) => import("react/jsx-runtime").JSX.Element;
46
45
  export declare const useInjectionZone: (area: InjectionZoneArea) => {
47
46
  name: string;
48
- Component: import("react").ComponentType<{}>;
47
+ Component: React.ComponentType;
49
48
  }[];
50
49
  export { InjectionZone, INJECTION_ZONES };
51
50
  export type { InjectionZoneArea, InjectionZoneComponent, InjectionZones, InjectionZoneModule, InjectionZoneContainer, InjectionZoneBlock, };
@@ -140,21 +140,21 @@ declare class ContentManagerPlugin {
140
140
  getEditViewSidePanels: () => PanelComponent[];
141
141
  getHeaderActions: () => HeaderActionComponent[];
142
142
  getRichTextBlocks: () => {
143
- [x: string]: import("./pages/EditView/components/FormInputs/BlocksInput/BlocksEditor").SelectorBlock | import("./pages/EditView/components/FormInputs/BlocksInput/BlocksEditor").NonSelectorBlock;
144
- code?: import("./pages/EditView/components/FormInputs/BlocksInput/BlocksEditor").SelectorBlock | undefined;
145
- image?: import("./pages/EditView/components/FormInputs/BlocksInput/BlocksEditor").SelectorBlock | undefined;
146
- paragraph?: import("./pages/EditView/components/FormInputs/BlocksInput/BlocksEditor").SelectorBlock | undefined;
147
- "heading-one"?: import("./pages/EditView/components/FormInputs/BlocksInput/BlocksEditor").SelectorBlock | undefined;
148
- "heading-two"?: import("./pages/EditView/components/FormInputs/BlocksInput/BlocksEditor").SelectorBlock | undefined;
149
- "heading-three"?: import("./pages/EditView/components/FormInputs/BlocksInput/BlocksEditor").SelectorBlock | undefined;
150
- "heading-four"?: import("./pages/EditView/components/FormInputs/BlocksInput/BlocksEditor").SelectorBlock | undefined;
151
- "heading-five"?: import("./pages/EditView/components/FormInputs/BlocksInput/BlocksEditor").SelectorBlock | undefined;
152
- "heading-six"?: import("./pages/EditView/components/FormInputs/BlocksInput/BlocksEditor").SelectorBlock | undefined;
153
- "list-ordered"?: import("./pages/EditView/components/FormInputs/BlocksInput/BlocksEditor").SelectorBlock | undefined;
154
- "list-unordered"?: import("./pages/EditView/components/FormInputs/BlocksInput/BlocksEditor").SelectorBlock | undefined;
155
- quote?: import("./pages/EditView/components/FormInputs/BlocksInput/BlocksEditor").SelectorBlock | undefined;
156
- link?: import("./pages/EditView/components/FormInputs/BlocksInput/BlocksEditor").NonSelectorBlock | undefined;
157
- "list-item"?: import("./pages/EditView/components/FormInputs/BlocksInput/BlocksEditor").NonSelectorBlock | undefined;
143
+ [x: string]: import("./exports").SelectorBlock | import("./exports").NonSelectorBlock;
144
+ code?: import("./exports").SelectorBlock | undefined;
145
+ image?: import("./exports").SelectorBlock | undefined;
146
+ paragraph?: import("./exports").SelectorBlock | undefined;
147
+ "heading-one"?: import("./exports").SelectorBlock | undefined;
148
+ "heading-two"?: import("./exports").SelectorBlock | undefined;
149
+ "heading-three"?: import("./exports").SelectorBlock | undefined;
150
+ "heading-four"?: import("./exports").SelectorBlock | undefined;
151
+ "heading-five"?: import("./exports").SelectorBlock | undefined;
152
+ "heading-six"?: import("./exports").SelectorBlock | undefined;
153
+ "list-ordered"?: import("./exports").SelectorBlock | undefined;
154
+ "list-unordered"?: import("./exports").SelectorBlock | undefined;
155
+ quote?: import("./exports").SelectorBlock | undefined;
156
+ link?: import("./exports").NonSelectorBlock | undefined;
157
+ "list-item"?: import("./exports").NonSelectorBlock | undefined;
158
158
  };
159
159
  };
160
160
  };
@@ -6,7 +6,7 @@ interface RestoreVersion extends RestoreHistoryVersion.Request {
6
6
  }
7
7
  declare const useGetHistoryVersionsQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery<import("@reduxjs/toolkit/query").QueryDefinition<{
8
8
  contentType: import("@strapi/types/dist/uid").ContentType;
9
- documentId?: Data.ID | undefined;
10
- locale?: string | undefined;
9
+ documentId?: Data.ID;
10
+ locale?: string;
11
11
  } & Partial<Pick<import("../../../../shared/contracts/history-versions").Pagination, "page" | "pageSize">>, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "ComponentConfiguration" | "ContentTypesConfiguration" | "ContentTypeSettings" | "Document" | "InitialData" | "HistoryVersion" | "Relations" | "UidAvailability" | "RecentDocumentList" | "CountDocuments" | "UpcomingReleasesList" | "AILocalizationJobs", GetHistoryVersions.Response, "adminApi">>, useRestoreVersionMutation: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseMutation<import("@reduxjs/toolkit/query").MutationDefinition<RestoreVersion, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "ComponentConfiguration" | "ContentTypesConfiguration" | "ContentTypeSettings" | "Document" | "InitialData" | "HistoryVersion" | "Relations" | "UidAvailability" | "RecentDocumentList" | "CountDocuments" | "UpcomingReleasesList" | "AILocalizationJobs", RestoreHistoryVersion.Response, "adminApi">>;
12
12
  export { useGetHistoryVersionsQuery, useRestoreVersionMutation };
@@ -20,6 +20,6 @@ declare const useContentTypeSchema: (model?: string) => {
20
20
  * @internal
21
21
  * @description Extracts the components used in a content type's attributes recursively.
22
22
  */
23
- declare const extractContentTypeComponents: (attributes?: ContentType['attributes'], allComponents?: ComponentsDictionary) => ComponentsDictionary;
23
+ declare const extractContentTypeComponents: (attributes?: ContentType["attributes"], allComponents?: ComponentsDictionary) => ComponentsDictionary;
24
24
  export { useContentTypeSchema, extractContentTypeComponents };
25
25
  export type { ComponentsDictionary };
@@ -9,7 +9,6 @@ import { useGetDocumentQuery } from '../services/documents';
9
9
  import { ComponentsDictionary } from './useContentTypeSchema';
10
10
  import type { FindOne } from '../../../shared/contracts/collection-types';
11
11
  import type { ContentType } from '../../../shared/contracts/content-types';
12
- import type { Modules } from '@strapi/types';
13
12
  interface UseDocumentArgs {
14
13
  collectionType: string;
15
14
  model: string;
@@ -82,15 +81,15 @@ declare const useDoc: (opts?: UseDocumentOpts) => {
82
81
  * by their uid.
83
82
  */
84
83
  components: ComponentsDictionary;
85
- document?: Modules.Documents.AnyDocument | undefined;
86
- meta?: import("../../../shared/contracts/collection-types").DocumentMetadata | undefined;
84
+ document?: Document;
85
+ meta?: FindOne.Response["meta"];
87
86
  isLoading: boolean;
88
87
  /**
89
88
  * This is the schema of the content type, it is not the same as the layout.
90
89
  */
91
- schema?: ContentType | undefined;
92
- schemas?: ContentType[] | undefined;
93
- hasError?: boolean | undefined;
90
+ schema?: Schema;
91
+ schemas?: Schema[];
92
+ hasError?: boolean;
94
93
  refetch: () => void;
95
94
  validate: (document: Document) => null | FormErrors;
96
95
  /**
@@ -126,14 +125,14 @@ declare const useContentManagerContext: () => {
126
125
  contentTypes: ContentType[] | undefined;
127
126
  form: unknown;
128
127
  layout: {
129
- error?: import("@reduxjs/toolkit").SerializedError | import("../utils/api").BaseQueryError | undefined;
128
+ error?: import("../utils/api").BaseQueryError | import("@reduxjs/toolkit").SerializedError;
130
129
  isLoading: boolean;
131
130
  edit: import("./useDocumentLayout").EditLayout;
132
131
  list: import("./useDocumentLayout").ListLayout;
133
132
  listViewConversionContext: {
134
- componentConfigurations: Record<string, import("../../../shared/contracts/components").ComponentConfiguration>;
133
+ componentConfigurations: import("../../../shared/contracts/content-types").FindContentTypeConfiguration.Response["data"]["components"];
135
134
  componentSchemas: ComponentsDictionary;
136
- contentTypeSchemas: ContentType[];
135
+ contentTypeSchemas: Schema[];
137
136
  } | null;
138
137
  };
139
138
  };
@@ -118,7 +118,7 @@ declare const useDocumentLayout: UseDocumentLayout;
118
118
  * content-manager because it won't work as intended.
119
119
  */
120
120
  declare const useDocLayout: () => {
121
- error?: SerializedError | BaseQueryError | undefined;
121
+ error?: BaseQueryError | SerializedError;
122
122
  isLoading: boolean;
123
123
  /**
124
124
  * This is the layout for the edit view,
@@ -138,7 +138,7 @@ type LayoutData = FindContentTypeConfiguration.Response['data'];
138
138
  * and formats it into a generic object that can be used to correctly render
139
139
  * the form fields.
140
140
  */
141
- declare const convertEditLayoutToFieldLayouts: (rows: LayoutData['contentType']['layouts']['edit'], attributes: import("@strapi/types/dist/struct").SchemaAttributes | undefined, metadatas: Metadatas, components?: {
141
+ declare const convertEditLayoutToFieldLayouts: (rows: LayoutData["contentType"]["layouts"]["edit"], attributes: Schema["attributes"] | undefined, metadatas: Metadatas, components?: {
142
142
  configurations: Record<string, ComponentConfiguration>;
143
143
  schemas: ComponentsDictionary;
144
144
  }, schemas?: Schema[]) => EditFieldLayout[][];
@@ -149,7 +149,7 @@ declare const convertEditLayoutToFieldLayouts: (rows: LayoutData['contentType'][
149
149
  *
150
150
  * @note We do use this to reformat the list of strings when updating the displayed headers for the list view.
151
151
  */
152
- declare const convertListLayoutToFieldLayouts: (columns: LayoutData['contentType']['layouts']['list'], attributes: import("@strapi/types/dist/struct").SchemaAttributes | undefined, metadatas: ListLayout['metadatas'], components?: {
152
+ declare const convertListLayoutToFieldLayouts: (columns: LayoutData["contentType"]["layouts"]["list"], attributes: Schema["attributes"] | undefined, metadatas: ListLayout["metadatas"], components?: {
153
153
  configurations: Record<string, ComponentConfiguration>;
154
154
  schemas: ComponentsDictionary;
155
155
  }, schemas?: Schema[]) => ListFieldLayout[];
@@ -40,12 +40,12 @@ type UseDragAndDropReturn<E extends Element = HTMLElement> = [
40
40
  * A utility hook abstracting the general drag and drop hooks from react-dnd.
41
41
  * Centralising the same behaviours and by default offering keyboard support.
42
42
  */
43
- declare const useDragAndDrop: <TIndex extends number | number[], TItem extends {
44
- [key: string]: unknown;
43
+ declare const useDragAndDrop: <TIndex extends number | Array<number>, TItem extends {
45
44
  index: TIndex;
46
- id?: Data.ID | undefined;
47
- } = {
45
+ id?: Data.ID;
48
46
  [key: string]: unknown;
47
+ } = {
49
48
  index: TIndex;
49
+ [key: string]: unknown;
50
50
  }, E extends Element = HTMLElement>(active: boolean, { type, index, item, onStart, onEnd, onGrabItem, onDropItem, onCancel, onMoveItem, dropSensitivity, }: UseDragAndDropOptions<TIndex, TItem>) => UseDragAndDropReturn<E>;
51
51
  export { useDragAndDrop, UseDragAndDropReturn, UseDragAndDropOptions, DIRECTIONS, DROP_SENSITIVITY, };
@@ -11,4 +11,4 @@ export type UseKeyboardDragAndDropCallbacks<TIndex extends number | Array<number
11
11
  *
12
12
  * @internal - You should use `useDragAndDrop` instead.
13
13
  */
14
- export declare const useKeyboardDragAndDrop: <TIndex extends number | number[] = number>(active: boolean, index: TIndex, { onCancel, onDropItem, onGrabItem, onMoveItem }: UseKeyboardDragAndDropCallbacks<TIndex>) => <E extends Element>(e: React.KeyboardEvent<E>) => void;
14
+ export declare const useKeyboardDragAndDrop: <TIndex extends number | Array<number> = number>(active: boolean, index: TIndex, { onCancel, onDropItem, onGrabItem, onMoveItem }: UseKeyboardDragAndDropCallbacks<TIndex>) => <E extends Element>(e: React.KeyboardEvent<E>) => void;
@@ -1,4 +1,3 @@
1
- /// <reference types="lodash" />
2
1
  import get from 'lodash/get';
3
2
  type PropertyPath = Parameters<typeof get>[1];
4
3
  interface PersistentQueryConfigEntry {
@@ -10,11 +10,11 @@ interface AppState {
10
10
  }
11
11
  declare const reducer: import("redux").Reducer<AppState>;
12
12
  declare const setInitialData: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
13
- authorizedCollectionTypeLinks: AppState['collectionTypeLinks'];
14
- authorizedSingleTypeLinks: AppState['singleTypeLinks'];
15
- components: AppState['components'];
16
- contentTypeSchemas: AppState['models'];
17
- fieldSizes: AppState['fieldSizes'];
13
+ authorizedCollectionTypeLinks: AppState["collectionTypeLinks"];
14
+ authorizedSingleTypeLinks: AppState["singleTypeLinks"];
15
+ components: AppState["components"];
16
+ contentTypeSchemas: AppState["models"];
17
+ fieldSizes: AppState["fieldSizes"];
18
18
  }, "app/setInitialData">;
19
19
  export { reducer, setInitialData };
20
20
  export type { AppState };
@@ -6,6 +6,6 @@ declare const EditViewPage: () => import("react/jsx-runtime").JSX.Element;
6
6
  * this typically will be "published" unless a user has edited their draft in which we should
7
7
  * display "modified".
8
8
  */
9
- declare const getDocumentStatus: (document: ReturnType<UseDocument>['document'], meta: ReturnType<UseDocument>['meta']) => 'draft' | 'published' | 'modified';
9
+ declare const getDocumentStatus: (document: ReturnType<UseDocument>["document"], meta: ReturnType<UseDocument>["meta"]) => "draft" | "published" | "modified";
10
10
  declare const ProtectedEditViewPage: () => import("react/jsx-runtime").JSX.Element;
11
11
  export { EditViewPage, ProtectedEditViewPage, getDocumentStatus };
@@ -2,6 +2,8 @@ import * as React from 'react';
2
2
  import { NotificationConfig } from '@strapi/admin/strapi-admin';
3
3
  import { ButtonProps } from '@strapi/design-system';
4
4
  import type { DocumentActionComponent } from '../../../content-manager';
5
+ type PublishConfirmDialogScope = 'panel' | 'preview' | 'relation-modal';
6
+ declare const openPublishConfirmDialog: (scope: PublishConfirmDialogScope) => void;
5
7
  type DocumentActionPosition = 'panel' | 'header' | 'table-row' | 'preview' | 'relation-modal';
6
8
  interface DocumentActionDescription {
7
9
  label: string;
@@ -23,12 +25,21 @@ interface DocumentActionDescription {
23
25
  */
24
26
  variant?: ButtonProps['variant'];
25
27
  loading?: ButtonProps['loading'];
28
+ /**
29
+ * When set on a publish action with a dialog, registers an opener for the keyboard shortcut.
30
+ */
31
+ publishConfirmScope?: PublishConfirmDialogScope;
26
32
  }
27
33
  interface DialogOptions {
28
34
  type: 'dialog';
29
35
  title: string;
30
36
  content?: React.ReactNode;
37
+ /**
38
+ * When set, centers a warning icon above the dialog body (bulk publish / delete pattern).
39
+ */
40
+ bodyIcon?: 'danger' | 'default';
31
41
  variant?: ButtonProps['variant'];
42
+ confirmLabel?: string;
32
43
  onConfirm?: () => void | Promise<void>;
33
44
  onCancel?: () => void | Promise<void>;
34
45
  }
@@ -76,5 +87,5 @@ interface DocumentActionsMenuProps {
76
87
  }
77
88
  declare const DocumentActionsMenu: ({ actions, children, label, variant, }: DocumentActionsMenuProps) => import("react/jsx-runtime").JSX.Element;
78
89
  declare const DEFAULT_ACTIONS: DocumentActionComponent[];
79
- export { DocumentActions, DocumentActionsMenu, DocumentActionButton, DEFAULT_ACTIONS };
90
+ export { DocumentActions, DocumentActionsMenu, DocumentActionButton, DEFAULT_ACTIONS, openPublishConfirmDialog, };
80
91
  export type { DocumentActionDescription, DocumentActionPosition, DialogOptions, NotificationOptions, ModalOptions, };
@@ -7,5 +7,5 @@ export interface ObservedComponent {
7
7
  }
8
8
  export declare const EditorToolbarObserver: ({ observedComponents, menuTriggerVariant, }: {
9
9
  observedComponents: ObservedComponent[];
10
- menuTriggerVariant?: Menu.TriggerProps['variant'];
10
+ menuTriggerVariant?: Menu.TriggerProps["variant"];
11
11
  }) => import("react/jsx-runtime").JSX.Element[];
@@ -42,7 +42,7 @@ export interface SelectorBlock extends BaseBlock {
42
42
  type NonSelectorBlockKey = 'list-item' | 'link';
43
43
  declare const selectorBlockKeys: readonly ["paragraph", "heading-one", "heading-two", "heading-three", "heading-four", "heading-five", "heading-six", "list-ordered", "list-unordered", "image", "quote", "code"];
44
44
  type SelectorBlockKey = (typeof selectorBlockKeys)[number];
45
- declare const isSelectorBlockKey: (key: unknown) => key is "code" | "image" | "paragraph" | "heading-one" | "heading-two" | "heading-three" | "heading-four" | "heading-five" | "heading-six" | "list-ordered" | "list-unordered" | "quote";
45
+ declare const isSelectorBlockKey: (key: unknown) => key is SelectorBlockKey;
46
46
  type BlocksStore = {
47
47
  [K in SelectorBlockKey]: SelectorBlock;
48
48
  } & {
@@ -3,8 +3,8 @@ import { type Element, type Path, Editor } from 'slate';
3
3
  * Extracts some logic that is common to most blocks' handleConvert functions.
4
4
  * @returns The path of the converted block
5
5
  */
6
- declare const baseHandleConvert: <T extends import("@strapi/types/dist/schema/attribute").BlocksNode>(editor: Editor, attributesToSet: Partial<T> & {
7
- type: T['type'];
6
+ declare const baseHandleConvert: <T extends Element>(editor: Editor, attributesToSet: Partial<T> & {
7
+ type: T["type"];
8
8
  }) => void | Path;
9
9
  /**
10
10
  * Set all attributes except type and children to null so that Slate deletes them
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  interface ComponentContextValue {
3
2
  /**
4
3
  * The id of the component. It will be undefined if the component
@@ -35,7 +34,7 @@ interface ComponentContextValue {
35
34
  */
36
35
  declare const ComponentProvider: {
37
36
  (props: ComponentContextValue & {
38
- children: import("react").ReactNode;
37
+ children: React.ReactNode;
39
38
  }): import("react/jsx-runtime").JSX.Element;
40
39
  displayName: string;
41
40
  }, useComponent: <Selected, ShouldThrow extends boolean = true>(consumerName: string, selector: (value: ComponentContextValue) => Selected, shouldThrowOnMissingContext?: ShouldThrow | undefined) => ShouldThrow extends true ? Selected : Selected | undefined;