@strapi/content-manager 0.0.0-experimental.c23f51fc41b3ef5de081f427d07e87af93cdcb2c → 0.0.0-experimental.c2b08ee20b017fc174cccf35c56c39438b0237b0

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 (375) hide show
  1. package/dist/admin/components/ConfigurationForm/Fields.js +300 -204
  2. package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -1
  3. package/dist/admin/components/ConfigurationForm/Fields.mjs +304 -209
  4. package/dist/admin/components/ConfigurationForm/Fields.mjs.map +1 -1
  5. package/dist/admin/components/DragPreviews/RelationDragPreview.js +1 -1
  6. package/dist/admin/components/DragPreviews/RelationDragPreview.js.map +1 -1
  7. package/dist/admin/components/DragPreviews/RelationDragPreview.mjs +1 -1
  8. package/dist/admin/components/DragPreviews/RelationDragPreview.mjs.map +1 -1
  9. package/dist/admin/components/LeftMenu.js +34 -30
  10. package/dist/admin/components/LeftMenu.js.map +1 -1
  11. package/dist/admin/components/LeftMenu.mjs +36 -32
  12. package/dist/admin/components/LeftMenu.mjs.map +1 -1
  13. package/dist/admin/components/Widgets.js +414 -0
  14. package/dist/admin/components/Widgets.js.map +1 -0
  15. package/dist/admin/components/Widgets.mjs +391 -0
  16. package/dist/admin/components/Widgets.mjs.map +1 -0
  17. package/dist/admin/content-manager.js.map +1 -1
  18. package/dist/admin/content-manager.mjs.map +1 -1
  19. package/dist/admin/features/DocumentRBAC.js +7 -6
  20. package/dist/admin/features/DocumentRBAC.js.map +1 -1
  21. package/dist/admin/features/DocumentRBAC.mjs +7 -6
  22. package/dist/admin/features/DocumentRBAC.mjs.map +1 -1
  23. package/dist/admin/history/components/VersionContent.js +24 -3
  24. package/dist/admin/history/components/VersionContent.js.map +1 -1
  25. package/dist/admin/history/components/VersionContent.mjs +25 -4
  26. package/dist/admin/history/components/VersionContent.mjs.map +1 -1
  27. package/dist/admin/history/components/VersionHeader.js +6 -0
  28. package/dist/admin/history/components/VersionHeader.js.map +1 -1
  29. package/dist/admin/history/components/VersionHeader.mjs +7 -1
  30. package/dist/admin/history/components/VersionHeader.mjs.map +1 -1
  31. package/dist/admin/history/components/VersionInputRenderer.js.map +1 -1
  32. package/dist/admin/history/components/VersionInputRenderer.mjs.map +1 -1
  33. package/dist/admin/history/pages/History.js.map +1 -1
  34. package/dist/admin/history/pages/History.mjs.map +1 -1
  35. package/dist/admin/hooks/useDocumentActions.js +30 -6
  36. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  37. package/dist/admin/hooks/useDocumentActions.mjs +30 -6
  38. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  39. package/dist/admin/hooks/useDocumentContext.js +57 -0
  40. package/dist/admin/hooks/useDocumentContext.js.map +1 -0
  41. package/dist/admin/hooks/useDocumentContext.mjs +36 -0
  42. package/dist/admin/hooks/useDocumentContext.mjs.map +1 -0
  43. package/dist/admin/index.js +81 -5
  44. package/dist/admin/index.js.map +1 -1
  45. package/dist/admin/index.mjs +80 -3
  46. package/dist/admin/index.mjs.map +1 -1
  47. package/dist/admin/pages/EditView/EditViewPage.js +102 -75
  48. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  49. package/dist/admin/pages/EditView/EditViewPage.mjs +104 -77
  50. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  51. package/dist/admin/pages/EditView/components/DocumentActions.js +321 -112
  52. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  53. package/dist/admin/pages/EditView/components/DocumentActions.mjs +328 -119
  54. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  55. package/dist/admin/pages/EditView/components/DocumentStatus.js +1 -2
  56. package/dist/admin/pages/EditView/components/DocumentStatus.js.map +1 -1
  57. package/dist/admin/pages/EditView/components/DocumentStatus.mjs +1 -2
  58. package/dist/admin/pages/EditView/components/DocumentStatus.mjs.map +1 -1
  59. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +12 -15
  60. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  61. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +12 -15
  62. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
  63. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +61 -26
  64. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  65. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +63 -28
  66. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
  67. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +21 -35
  68. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
  69. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +21 -35
  70. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
  71. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js +46 -95
  72. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -1
  73. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +48 -78
  74. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -1
  75. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js +2 -2
  76. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -1
  77. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs +2 -2
  78. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs.map +1 -1
  79. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +16 -2
  80. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  81. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +17 -3
  82. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
  83. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +20 -5
  84. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  85. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +21 -6
  86. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  87. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js +17 -8
  88. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
  89. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +17 -8
  90. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
  91. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +23 -6
  92. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  93. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +26 -9
  94. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  95. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +2 -2
  96. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
  97. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +2 -2
  98. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
  99. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +622 -0
  100. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -0
  101. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +598 -0
  102. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -0
  103. package/dist/admin/pages/EditView/components/FormInputs/{Relations.js → Relations/Relations.js} +211 -79
  104. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -0
  105. package/dist/admin/pages/EditView/components/FormInputs/{Relations.mjs → Relations/Relations.mjs} +214 -82
  106. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -0
  107. package/dist/admin/pages/EditView/components/FormInputs/UID.js +11 -9
  108. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
  109. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +11 -9
  110. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
  111. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +1 -1
  112. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
  113. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs +1 -1
  114. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
  115. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js +50 -97
  116. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js.map +1 -1
  117. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs +51 -79
  118. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs.map +1 -1
  119. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js +86 -118
  120. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js.map +1 -1
  121. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs +86 -118
  122. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs.map +1 -1
  123. package/dist/admin/pages/EditView/components/FormLayout.js +63 -36
  124. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  125. package/dist/admin/pages/EditView/components/FormLayout.mjs +63 -36
  126. package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
  127. package/dist/admin/pages/EditView/components/InputRenderer.js +29 -9
  128. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  129. package/dist/admin/pages/EditView/components/InputRenderer.mjs +12 -11
  130. package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
  131. package/dist/admin/pages/EditView/utils/data.js +103 -0
  132. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  133. package/dist/admin/pages/EditView/utils/data.mjs +103 -1
  134. package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
  135. package/dist/admin/pages/ListView/ListViewPage.js +227 -132
  136. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  137. package/dist/admin/pages/ListView/ListViewPage.mjs +229 -134
  138. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  139. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +2 -1
  140. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
  141. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +2 -1
  142. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -1
  143. package/dist/admin/pages/ListView/components/Filters.js +4 -1
  144. package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
  145. package/dist/admin/pages/ListView/components/Filters.mjs +4 -1
  146. package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
  147. package/dist/admin/pages/ListView/components/TableActions.js +13 -3
  148. package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
  149. package/dist/admin/pages/ListView/components/TableActions.mjs +13 -3
  150. package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
  151. package/dist/admin/pages/ListView/components/TableCells/Relations.js +0 -1
  152. package/dist/admin/pages/ListView/components/TableCells/Relations.js.map +1 -1
  153. package/dist/admin/pages/ListView/components/TableCells/Relations.mjs +0 -1
  154. package/dist/admin/pages/ListView/components/TableCells/Relations.mjs.map +1 -1
  155. package/dist/admin/preview/components/PreviewHeader.js +4 -79
  156. package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
  157. package/dist/admin/preview/components/PreviewHeader.mjs +6 -80
  158. package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -1
  159. package/dist/admin/preview/components/PreviewSidePanel.js +31 -4
  160. package/dist/admin/preview/components/PreviewSidePanel.js.map +1 -1
  161. package/dist/admin/preview/components/PreviewSidePanel.mjs +32 -5
  162. package/dist/admin/preview/components/PreviewSidePanel.mjs.map +1 -1
  163. package/dist/admin/preview/pages/Preview.js +138 -72
  164. package/dist/admin/preview/pages/Preview.js.map +1 -1
  165. package/dist/admin/preview/pages/Preview.mjs +140 -74
  166. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  167. package/dist/admin/services/api.js +3 -1
  168. package/dist/admin/services/api.js.map +1 -1
  169. package/dist/admin/services/api.mjs +3 -1
  170. package/dist/admin/services/api.mjs.map +1 -1
  171. package/dist/admin/services/documents.js +48 -16
  172. package/dist/admin/services/documents.js.map +1 -1
  173. package/dist/admin/services/documents.mjs +48 -16
  174. package/dist/admin/services/documents.mjs.map +1 -1
  175. package/dist/admin/services/homepage.js +39 -0
  176. package/dist/admin/services/homepage.js.map +1 -0
  177. package/dist/admin/services/homepage.mjs +36 -0
  178. package/dist/admin/services/homepage.mjs.map +1 -0
  179. package/dist/admin/src/components/ConfigurationForm/Fields.d.ts +6 -4
  180. package/dist/admin/src/components/Widgets.d.ts +4 -0
  181. package/dist/admin/src/content-manager.d.ts +0 -1
  182. package/dist/admin/src/exports.d.ts +1 -0
  183. package/dist/admin/src/features/DocumentRBAC.d.ts +4 -3
  184. package/dist/admin/src/history/pages/History.d.ts +1 -1
  185. package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
  186. package/dist/admin/src/hooks/useDocumentActions.d.ts +2 -1
  187. package/dist/admin/src/hooks/useDocumentContext.d.ts +30 -0
  188. package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +1 -1
  189. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.d.ts +2 -2
  190. package/dist/admin/src/pages/EditView/components/FormInputs/ComponentContext.d.ts +1 -1
  191. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.d.ts +1 -1
  192. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +74 -0
  193. package/dist/admin/src/pages/EditView/components/FormInputs/{Relations.d.ts → Relations/Relations.d.ts} +9 -2
  194. package/dist/admin/src/pages/EditView/components/FormInputs/UID.d.ts +1 -0
  195. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +13 -9
  196. package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +7 -4
  197. package/dist/admin/src/pages/EditView/utils/data.d.ts +19 -1
  198. package/dist/admin/src/preview/components/PreviewHeader.d.ts +1 -2
  199. package/dist/admin/src/preview/pages/Preview.d.ts +2 -3
  200. package/dist/admin/src/preview/services/preview.d.ts +1 -1
  201. package/dist/admin/src/services/api.d.ts +1 -1
  202. package/dist/admin/src/services/components.d.ts +2 -2
  203. package/dist/admin/src/services/contentTypes.d.ts +3 -3
  204. package/dist/admin/src/services/documents.d.ts +23 -17
  205. package/dist/admin/src/services/homepage.d.ts +9 -0
  206. package/dist/admin/src/services/init.d.ts +1 -1
  207. package/dist/admin/src/services/relations.d.ts +2 -2
  208. package/dist/admin/src/services/uid.d.ts +3 -3
  209. package/dist/admin/src/utils/validation.d.ts +1 -0
  210. package/dist/admin/translations/en.json.js +12 -1
  211. package/dist/admin/translations/en.json.js.map +1 -1
  212. package/dist/admin/translations/en.json.mjs +12 -1
  213. package/dist/admin/translations/en.json.mjs.map +1 -1
  214. package/dist/admin/translations/es.json.js +5 -2
  215. package/dist/admin/translations/es.json.js.map +1 -1
  216. package/dist/admin/translations/es.json.mjs +5 -2
  217. package/dist/admin/translations/es.json.mjs.map +1 -1
  218. package/dist/admin/translations/fr.json.js +10 -2
  219. package/dist/admin/translations/fr.json.js.map +1 -1
  220. package/dist/admin/translations/fr.json.mjs +10 -2
  221. package/dist/admin/translations/fr.json.mjs.map +1 -1
  222. package/dist/admin/translations/ru.json.js +235 -226
  223. package/dist/admin/translations/ru.json.js.map +1 -1
  224. package/dist/admin/translations/ru.json.mjs +230 -226
  225. package/dist/admin/translations/ru.json.mjs.map +1 -1
  226. package/dist/admin/translations/zh-Hans.json.js +2 -1
  227. package/dist/admin/translations/zh-Hans.json.js.map +1 -1
  228. package/dist/admin/translations/zh-Hans.json.mjs +2 -1
  229. package/dist/admin/translations/zh-Hans.json.mjs.map +1 -1
  230. package/dist/admin/utils/validation.js +17 -6
  231. package/dist/admin/utils/validation.js.map +1 -1
  232. package/dist/admin/utils/validation.mjs +17 -6
  233. package/dist/admin/utils/validation.mjs.map +1 -1
  234. package/dist/server/controllers/content-types.js +11 -1
  235. package/dist/server/controllers/content-types.js.map +1 -1
  236. package/dist/server/controllers/content-types.mjs +11 -1
  237. package/dist/server/controllers/content-types.mjs.map +1 -1
  238. package/dist/server/controllers/index.js +3 -1
  239. package/dist/server/controllers/index.js.map +1 -1
  240. package/dist/server/controllers/index.mjs +3 -1
  241. package/dist/server/controllers/index.mjs.map +1 -1
  242. package/dist/server/controllers/relations.js +2 -2
  243. package/dist/server/controllers/relations.js.map +1 -1
  244. package/dist/server/controllers/relations.mjs +2 -2
  245. package/dist/server/controllers/relations.mjs.map +1 -1
  246. package/dist/server/controllers/validation/index.js +14 -2
  247. package/dist/server/controllers/validation/index.js.map +1 -1
  248. package/dist/server/controllers/validation/index.mjs +14 -2
  249. package/dist/server/controllers/validation/index.mjs.map +1 -1
  250. package/dist/server/history/services/lifecycles.js +3 -0
  251. package/dist/server/history/services/lifecycles.js.map +1 -1
  252. package/dist/server/history/services/lifecycles.mjs +3 -0
  253. package/dist/server/history/services/lifecycles.mjs.map +1 -1
  254. package/dist/server/homepage/controllers/homepage.js +62 -0
  255. package/dist/server/homepage/controllers/homepage.js.map +1 -0
  256. package/dist/server/homepage/controllers/homepage.mjs +41 -0
  257. package/dist/server/homepage/controllers/homepage.mjs.map +1 -0
  258. package/dist/server/homepage/controllers/index.js +10 -0
  259. package/dist/server/homepage/controllers/index.js.map +1 -0
  260. package/dist/server/homepage/controllers/index.mjs +8 -0
  261. package/dist/server/homepage/controllers/index.mjs.map +1 -0
  262. package/dist/server/homepage/index.js +14 -0
  263. package/dist/server/homepage/index.js.map +1 -0
  264. package/dist/server/homepage/index.mjs +12 -0
  265. package/dist/server/homepage/index.mjs.map +1 -0
  266. package/dist/server/homepage/routes/homepage.js +36 -0
  267. package/dist/server/homepage/routes/homepage.js.map +1 -0
  268. package/dist/server/homepage/routes/homepage.mjs +34 -0
  269. package/dist/server/homepage/routes/homepage.mjs.map +1 -0
  270. package/dist/server/homepage/routes/index.js +13 -0
  271. package/dist/server/homepage/routes/index.js.map +1 -0
  272. package/dist/server/homepage/routes/index.mjs +11 -0
  273. package/dist/server/homepage/routes/index.mjs.map +1 -0
  274. package/dist/server/homepage/services/homepage.js +197 -0
  275. package/dist/server/homepage/services/homepage.js.map +1 -0
  276. package/dist/server/homepage/services/homepage.mjs +195 -0
  277. package/dist/server/homepage/services/homepage.mjs.map +1 -0
  278. package/dist/server/homepage/services/index.js +10 -0
  279. package/dist/server/homepage/services/index.js.map +1 -0
  280. package/dist/server/homepage/services/index.mjs +8 -0
  281. package/dist/server/homepage/services/index.mjs.map +1 -0
  282. package/dist/server/preview/services/preview-config.js +5 -1
  283. package/dist/server/preview/services/preview-config.js.map +1 -1
  284. package/dist/server/preview/services/preview-config.mjs +5 -1
  285. package/dist/server/preview/services/preview-config.mjs.map +1 -1
  286. package/dist/server/preview/services/preview.js +4 -1
  287. package/dist/server/preview/services/preview.js.map +1 -1
  288. package/dist/server/preview/services/preview.mjs +4 -1
  289. package/dist/server/preview/services/preview.mjs.map +1 -1
  290. package/dist/server/routes/index.js +3 -1
  291. package/dist/server/routes/index.js.map +1 -1
  292. package/dist/server/routes/index.mjs +3 -1
  293. package/dist/server/routes/index.mjs.map +1 -1
  294. package/dist/server/services/data-mapper.js +4 -1
  295. package/dist/server/services/data-mapper.js.map +1 -1
  296. package/dist/server/services/data-mapper.mjs +4 -1
  297. package/dist/server/services/data-mapper.mjs.map +1 -1
  298. package/dist/server/services/document-manager.js +8 -1
  299. package/dist/server/services/document-manager.js.map +1 -1
  300. package/dist/server/services/document-manager.mjs +8 -1
  301. package/dist/server/services/document-manager.mjs.map +1 -1
  302. package/dist/server/services/document-metadata.js +3 -1
  303. package/dist/server/services/document-metadata.js.map +1 -1
  304. package/dist/server/services/document-metadata.mjs +3 -1
  305. package/dist/server/services/document-metadata.mjs.map +1 -1
  306. package/dist/server/services/index.js +3 -1
  307. package/dist/server/services/index.js.map +1 -1
  308. package/dist/server/services/index.mjs +3 -1
  309. package/dist/server/services/index.mjs.map +1 -1
  310. package/dist/server/services/utils/configuration/attributes.js +1 -1
  311. package/dist/server/services/utils/configuration/attributes.js.map +1 -1
  312. package/dist/server/services/utils/configuration/attributes.mjs +1 -1
  313. package/dist/server/services/utils/configuration/attributes.mjs.map +1 -1
  314. package/dist/server/services/utils/configuration/layouts.js +1 -1
  315. package/dist/server/services/utils/configuration/layouts.js.map +1 -1
  316. package/dist/server/services/utils/configuration/layouts.mjs +1 -1
  317. package/dist/server/services/utils/configuration/layouts.mjs.map +1 -1
  318. package/dist/server/services/utils/configuration/metadatas.js +8 -0
  319. package/dist/server/services/utils/configuration/metadatas.js.map +1 -1
  320. package/dist/server/services/utils/configuration/metadatas.mjs +8 -0
  321. package/dist/server/services/utils/configuration/metadatas.mjs.map +1 -1
  322. package/dist/server/services/utils/populate.js +11 -0
  323. package/dist/server/services/utils/populate.js.map +1 -1
  324. package/dist/server/services/utils/populate.mjs +11 -0
  325. package/dist/server/services/utils/populate.mjs.map +1 -1
  326. package/dist/server/src/controllers/content-types.d.ts.map +1 -1
  327. package/dist/server/src/controllers/index.d.ts.map +1 -1
  328. package/dist/server/src/controllers/validation/index.d.ts +6 -1
  329. package/dist/server/src/controllers/validation/index.d.ts.map +1 -1
  330. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  331. package/dist/server/src/homepage/controllers/homepage.d.ts +8 -0
  332. package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -0
  333. package/dist/server/src/homepage/controllers/index.d.ts +2 -0
  334. package/dist/server/src/homepage/controllers/index.d.ts.map +1 -0
  335. package/dist/server/src/homepage/index.d.ts +23 -0
  336. package/dist/server/src/homepage/index.d.ts.map +1 -0
  337. package/dist/server/src/homepage/routes/homepage.d.ts +4 -0
  338. package/dist/server/src/homepage/routes/homepage.d.ts.map +1 -0
  339. package/dist/server/src/homepage/routes/index.d.ts +8 -0
  340. package/dist/server/src/homepage/routes/index.d.ts.map +1 -0
  341. package/dist/server/src/homepage/services/homepage.d.ts +14 -0
  342. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -0
  343. package/dist/server/src/homepage/services/index.d.ts +16 -0
  344. package/dist/server/src/homepage/services/index.d.ts.map +1 -0
  345. package/dist/server/src/index.d.ts +15 -0
  346. package/dist/server/src/index.d.ts.map +1 -1
  347. package/dist/server/src/preview/services/index.d.ts +1 -0
  348. package/dist/server/src/preview/services/index.d.ts.map +1 -1
  349. package/dist/server/src/preview/services/preview-config.d.ts +1 -0
  350. package/dist/server/src/preview/services/preview-config.d.ts.map +1 -1
  351. package/dist/server/src/preview/services/preview.d.ts.map +1 -1
  352. package/dist/server/src/preview/utils.d.ts +1 -0
  353. package/dist/server/src/preview/utils.d.ts.map +1 -1
  354. package/dist/server/src/routes/index.d.ts +1 -0
  355. package/dist/server/src/routes/index.d.ts.map +1 -1
  356. package/dist/server/src/services/data-mapper.d.ts +1 -0
  357. package/dist/server/src/services/data-mapper.d.ts.map +1 -1
  358. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  359. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  360. package/dist/server/src/services/index.d.ts +14 -0
  361. package/dist/server/src/services/index.d.ts.map +1 -1
  362. package/dist/server/src/services/utils/configuration/metadatas.d.ts.map +1 -1
  363. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  364. package/dist/shared/contracts/collection-types.d.ts +0 -1
  365. package/dist/shared/contracts/collection-types.d.ts.map +1 -1
  366. package/dist/shared/contracts/homepage.d.ts +38 -0
  367. package/dist/shared/contracts/homepage.d.ts.map +1 -0
  368. package/package.json +13 -10
  369. package/dist/admin/pages/EditView/components/FormInputs/Relations.js.map +0 -1
  370. package/dist/admin/pages/EditView/components/FormInputs/Relations.mjs.map +0 -1
  371. package/dist/admin/preview/components/PreviewContent.js +0 -25
  372. package/dist/admin/preview/components/PreviewContent.js.map +0 -1
  373. package/dist/admin/preview/components/PreviewContent.mjs +0 -23
  374. package/dist/admin/preview/components/PreviewContent.mjs.map +0 -1
  375. package/dist/admin/src/preview/components/PreviewContent.d.ts +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"PreviewSidePanel.js","sources":["../../../../admin/src/preview/components/PreviewSidePanel.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams, useTracking, useForm } from '@strapi/admin/strapi-admin';\nimport { Box, Button, Tooltip, type TooltipProps } from '@strapi/design-system';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link, useLocation } from 'react-router-dom';\n\nimport { useGetPreviewUrlQuery } from '../services/preview';\n\nimport type { PanelComponent } from '@strapi/content-manager/strapi-admin';\nimport type { UID } from '@strapi/types';\n\ninterface ConditionalTooltipProps {\n isShown: boolean;\n label: TooltipProps['label'];\n children: React.ReactNode;\n}\n\nconst ConditionalTooltip = ({ isShown, label, children }: ConditionalTooltipProps) => {\n if (isShown) {\n return <Tooltip label={label}>{children}</Tooltip>;\n }\n\n return children;\n};\n\nconst PreviewSidePanel: PanelComponent = ({ model, documentId, document }) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { pathname } = useLocation();\n const [{ query }] = useQueryParams();\n const isModified = useForm('PreviewSidePanel', (state) => state.modified);\n\n /**\n * The preview URL isn't used in this component, we just fetch it to know if preview is enabled\n * for the content type. If it's not, the panel is not displayed. If it is, we display a link to\n * /preview, and the URL will already be loaded in the RTK query cache.\n */\n const { data, error } = useGetPreviewUrlQuery({\n params: {\n contentType: model as UID.ContentType,\n },\n query: {\n documentId,\n locale: document?.locale,\n status: document?.status,\n },\n });\n\n if (!data?.data?.url || error) {\n return null;\n }\n\n const trackNavigation = () => {\n // Append /preview to the current URL\n const destinationPathname = pathname.replace(/\\/$/, '') + '/preview';\n trackUsage('willNavigate', { from: pathname, to: destinationPathname });\n };\n\n return {\n title: formatMessage({ id: 'content-manager.preview.panel.title', defaultMessage: 'Preview' }),\n content: (\n <ConditionalTooltip\n label={formatMessage({\n id: 'content-manager.preview.panel.button-disabled-tooltip',\n defaultMessage: 'Please save to open the preview',\n })}\n isShown={isModified}\n >\n <Box cursor=\"not-allowed\" width=\"100%\">\n <Button\n variant=\"tertiary\"\n tag={Link}\n to={{ pathname: 'preview', search: stringify(query, { encode: false }) }}\n onClick={trackNavigation}\n width=\"100%\"\n disabled={isModified}\n pointerEvents={isModified ? 'none' : undefined}\n tabIndex={isModified ? -1 : undefined}\n >\n {formatMessage({\n id: 'content-manager.preview.panel.button',\n defaultMessage: 'Open preview',\n })}\n </Button>\n </Box>\n </ConditionalTooltip>\n ),\n };\n};\n\nexport { PreviewSidePanel };\n"],"names":["ConditionalTooltip","isShown","label","children","_jsx","Tooltip","PreviewSidePanel","model","documentId","document","formatMessage","useIntl","trackUsage","useTracking","pathname","useLocation","query","useQueryParams","isModified","useForm","state","modified","data","error","useGetPreviewUrlQuery","params","contentType","locale","status","url","trackNavigation","destinationPathname","replace","from","to","title","id","defaultMessage","content","Box","cursor","width","Button","variant","tag","Link","search","stringify","encode","onClick","disabled","pointerEvents","undefined","tabIndex"],"mappings":"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"}
1
+ {"version":3,"file":"PreviewSidePanel.js","sources":["../../../../admin/src/preview/components/PreviewSidePanel.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams, useTracking, useForm } from '@strapi/admin/strapi-admin';\nimport { Box, Button, Tooltip, type TooltipProps } from '@strapi/design-system';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link, useLocation } from 'react-router-dom';\n\nimport { useGetPreviewUrlQuery } from '../services/preview';\n\nimport type { PanelComponent } from '@strapi/content-manager/strapi-admin';\nimport type { UID } from '@strapi/types';\n\ninterface ConditionalTooltipProps {\n isShown: boolean;\n label: TooltipProps['label'];\n children: React.ReactNode;\n}\n\nconst ConditionalTooltip = ({ isShown, label, children }: ConditionalTooltipProps) => {\n if (isShown) {\n return <Tooltip label={label}>{children}</Tooltip>;\n }\n\n return children;\n};\n\nconst PreviewSidePanel: PanelComponent = ({ model, documentId, document }) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { pathname } = useLocation();\n const [{ query }] = useQueryParams();\n const isModified = useForm('PreviewSidePanel', (state) => state.modified);\n const isUnsaved = Boolean(!document || !document.id);\n\n const title = formatMessage({\n id: 'content-manager.preview.panel.title',\n defaultMessage: 'Preview',\n });\n\n /**\n * The preview URL isn't used in this component, we just fetch it to know if preview is enabled\n * for the content type. If it's not, the panel is not displayed. If it is, we display a link to\n * /preview, and the URL will already be loaded in the RTK query cache.\n */\n const { data, error } = useGetPreviewUrlQuery(\n {\n params: {\n contentType: model as UID.ContentType,\n },\n query: {\n documentId,\n locale: document?.locale,\n status: document?.status,\n },\n },\n // Don't bother making the request since we won't show any UI\n { skip: isUnsaved }\n );\n\n if (isUnsaved) {\n return null;\n }\n\n // Preview was not configured but not disabled either (otherwise it would be a success 204).\n // So we encourage the user to set it up.\n if (error && error.name === 'NotFoundError') {\n return {\n title,\n content: (\n <Button\n variant=\"tertiary\"\n tag={Link}\n to=\"https://docs.strapi.io/cms/features/preview\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n width=\"100%\"\n >\n {formatMessage({\n id: 'content-manager.preview.panel.button-configuration',\n defaultMessage: 'Set up preview',\n })}\n </Button>\n ),\n };\n }\n\n if (!data?.data?.url || error) {\n return null;\n }\n\n const trackNavigation = () => {\n // Append /preview to the current URL\n const destinationPathname = pathname.replace(/\\/$/, '') + '/preview';\n trackUsage('willNavigate', { from: pathname, to: destinationPathname });\n };\n\n return {\n title,\n content: (\n <ConditionalTooltip\n label={formatMessage({\n id: 'content-manager.preview.panel.button-disabled-tooltip',\n defaultMessage: 'Please save to open the preview',\n })}\n isShown={isModified}\n >\n <Box cursor=\"not-allowed\" width=\"100%\">\n <Button\n variant=\"tertiary\"\n tag={Link}\n to={{ pathname: 'preview', search: stringify(query, { encode: false }) }}\n onClick={trackNavigation}\n width=\"100%\"\n disabled={isModified}\n pointerEvents={isModified ? 'none' : undefined}\n tabIndex={isModified ? -1 : undefined}\n >\n {formatMessage({\n id: 'content-manager.preview.panel.button',\n defaultMessage: 'Open preview',\n })}\n </Button>\n </Box>\n </ConditionalTooltip>\n ),\n };\n};\n\nexport { PreviewSidePanel };\n"],"names":["ConditionalTooltip","isShown","label","children","_jsx","Tooltip","PreviewSidePanel","model","documentId","document","formatMessage","useIntl","trackUsage","useTracking","pathname","useLocation","query","useQueryParams","isModified","useForm","state","modified","isUnsaved","Boolean","id","title","defaultMessage","data","error","useGetPreviewUrlQuery","params","contentType","locale","status","skip","name","content","Button","variant","tag","Link","to","target","rel","width","url","trackNavigation","destinationPathname","replace","from","Box","cursor","search","stringify","encode","onClick","disabled","pointerEvents","undefined","tabIndex"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import 'react';
3
3
  import { useTracking, useQueryParams, useForm } from '@strapi/admin/strapi-admin';
4
- import { Box, Button, Tooltip } from '@strapi/design-system';
4
+ import { Button, Box, Tooltip } from '@strapi/design-system';
5
5
  import { stringify } from 'qs';
6
6
  import { useIntl } from 'react-intl';
7
7
  import { useLocation, Link } from 'react-router-dom';
@@ -22,6 +22,11 @@ const PreviewSidePanel = ({ model, documentId, document })=>{
22
22
  const { pathname } = useLocation();
23
23
  const [{ query }] = useQueryParams();
24
24
  const isModified = useForm('PreviewSidePanel', (state)=>state.modified);
25
+ const isUnsaved = Boolean(!document || !document.id);
26
+ const title = formatMessage({
27
+ id: 'content-manager.preview.panel.title',
28
+ defaultMessage: 'Preview'
29
+ });
25
30
  /**
26
31
  * The preview URL isn't used in this component, we just fetch it to know if preview is enabled
27
32
  * for the content type. If it's not, the panel is not displayed. If it is, we display a link to
@@ -35,7 +40,32 @@ const PreviewSidePanel = ({ model, documentId, document })=>{
35
40
  locale: document?.locale,
36
41
  status: document?.status
37
42
  }
43
+ }, // Don't bother making the request since we won't show any UI
44
+ {
45
+ skip: isUnsaved
38
46
  });
47
+ if (isUnsaved) {
48
+ return null;
49
+ }
50
+ // Preview was not configured but not disabled either (otherwise it would be a success 204).
51
+ // So we encourage the user to set it up.
52
+ if (error && error.name === 'NotFoundError') {
53
+ return {
54
+ title,
55
+ content: /*#__PURE__*/ jsx(Button, {
56
+ variant: "tertiary",
57
+ tag: Link,
58
+ to: "https://docs.strapi.io/cms/features/preview",
59
+ target: "_blank",
60
+ rel: "noopener noreferrer",
61
+ width: "100%",
62
+ children: formatMessage({
63
+ id: 'content-manager.preview.panel.button-configuration',
64
+ defaultMessage: 'Set up preview'
65
+ })
66
+ })
67
+ };
68
+ }
39
69
  if (!data?.data?.url || error) {
40
70
  return null;
41
71
  }
@@ -48,10 +78,7 @@ const PreviewSidePanel = ({ model, documentId, document })=>{
48
78
  });
49
79
  };
50
80
  return {
51
- title: formatMessage({
52
- id: 'content-manager.preview.panel.title',
53
- defaultMessage: 'Preview'
54
- }),
81
+ title,
55
82
  content: /*#__PURE__*/ jsx(ConditionalTooltip, {
56
83
  label: formatMessage({
57
84
  id: 'content-manager.preview.panel.button-disabled-tooltip',
@@ -1 +1 @@
1
- {"version":3,"file":"PreviewSidePanel.mjs","sources":["../../../../admin/src/preview/components/PreviewSidePanel.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams, useTracking, useForm } from '@strapi/admin/strapi-admin';\nimport { Box, Button, Tooltip, type TooltipProps } from '@strapi/design-system';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link, useLocation } from 'react-router-dom';\n\nimport { useGetPreviewUrlQuery } from '../services/preview';\n\nimport type { PanelComponent } from '@strapi/content-manager/strapi-admin';\nimport type { UID } from '@strapi/types';\n\ninterface ConditionalTooltipProps {\n isShown: boolean;\n label: TooltipProps['label'];\n children: React.ReactNode;\n}\n\nconst ConditionalTooltip = ({ isShown, label, children }: ConditionalTooltipProps) => {\n if (isShown) {\n return <Tooltip label={label}>{children}</Tooltip>;\n }\n\n return children;\n};\n\nconst PreviewSidePanel: PanelComponent = ({ model, documentId, document }) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { pathname } = useLocation();\n const [{ query }] = useQueryParams();\n const isModified = useForm('PreviewSidePanel', (state) => state.modified);\n\n /**\n * The preview URL isn't used in this component, we just fetch it to know if preview is enabled\n * for the content type. If it's not, the panel is not displayed. If it is, we display a link to\n * /preview, and the URL will already be loaded in the RTK query cache.\n */\n const { data, error } = useGetPreviewUrlQuery({\n params: {\n contentType: model as UID.ContentType,\n },\n query: {\n documentId,\n locale: document?.locale,\n status: document?.status,\n },\n });\n\n if (!data?.data?.url || error) {\n return null;\n }\n\n const trackNavigation = () => {\n // Append /preview to the current URL\n const destinationPathname = pathname.replace(/\\/$/, '') + '/preview';\n trackUsage('willNavigate', { from: pathname, to: destinationPathname });\n };\n\n return {\n title: formatMessage({ id: 'content-manager.preview.panel.title', defaultMessage: 'Preview' }),\n content: (\n <ConditionalTooltip\n label={formatMessage({\n id: 'content-manager.preview.panel.button-disabled-tooltip',\n defaultMessage: 'Please save to open the preview',\n })}\n isShown={isModified}\n >\n <Box cursor=\"not-allowed\" width=\"100%\">\n <Button\n variant=\"tertiary\"\n tag={Link}\n to={{ pathname: 'preview', search: stringify(query, { encode: false }) }}\n onClick={trackNavigation}\n width=\"100%\"\n disabled={isModified}\n pointerEvents={isModified ? 'none' : undefined}\n tabIndex={isModified ? -1 : undefined}\n >\n {formatMessage({\n id: 'content-manager.preview.panel.button',\n defaultMessage: 'Open preview',\n })}\n </Button>\n </Box>\n </ConditionalTooltip>\n ),\n };\n};\n\nexport { PreviewSidePanel };\n"],"names":["ConditionalTooltip","isShown","label","children","_jsx","Tooltip","PreviewSidePanel","model","documentId","document","formatMessage","useIntl","trackUsage","useTracking","pathname","useLocation","query","useQueryParams","isModified","useForm","state","modified","data","error","useGetPreviewUrlQuery","params","contentType","locale","status","url","trackNavigation","destinationPathname","replace","from","to","title","id","defaultMessage","content","Box","cursor","width","Button","variant","tag","Link","search","stringify","encode","onClick","disabled","pointerEvents","undefined","tabIndex"],"mappings":"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"}
1
+ {"version":3,"file":"PreviewSidePanel.mjs","sources":["../../../../admin/src/preview/components/PreviewSidePanel.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams, useTracking, useForm } from '@strapi/admin/strapi-admin';\nimport { Box, Button, Tooltip, type TooltipProps } from '@strapi/design-system';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link, useLocation } from 'react-router-dom';\n\nimport { useGetPreviewUrlQuery } from '../services/preview';\n\nimport type { PanelComponent } from '@strapi/content-manager/strapi-admin';\nimport type { UID } from '@strapi/types';\n\ninterface ConditionalTooltipProps {\n isShown: boolean;\n label: TooltipProps['label'];\n children: React.ReactNode;\n}\n\nconst ConditionalTooltip = ({ isShown, label, children }: ConditionalTooltipProps) => {\n if (isShown) {\n return <Tooltip label={label}>{children}</Tooltip>;\n }\n\n return children;\n};\n\nconst PreviewSidePanel: PanelComponent = ({ model, documentId, document }) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { pathname } = useLocation();\n const [{ query }] = useQueryParams();\n const isModified = useForm('PreviewSidePanel', (state) => state.modified);\n const isUnsaved = Boolean(!document || !document.id);\n\n const title = formatMessage({\n id: 'content-manager.preview.panel.title',\n defaultMessage: 'Preview',\n });\n\n /**\n * The preview URL isn't used in this component, we just fetch it to know if preview is enabled\n * for the content type. If it's not, the panel is not displayed. If it is, we display a link to\n * /preview, and the URL will already be loaded in the RTK query cache.\n */\n const { data, error } = useGetPreviewUrlQuery(\n {\n params: {\n contentType: model as UID.ContentType,\n },\n query: {\n documentId,\n locale: document?.locale,\n status: document?.status,\n },\n },\n // Don't bother making the request since we won't show any UI\n { skip: isUnsaved }\n );\n\n if (isUnsaved) {\n return null;\n }\n\n // Preview was not configured but not disabled either (otherwise it would be a success 204).\n // So we encourage the user to set it up.\n if (error && error.name === 'NotFoundError') {\n return {\n title,\n content: (\n <Button\n variant=\"tertiary\"\n tag={Link}\n to=\"https://docs.strapi.io/cms/features/preview\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n width=\"100%\"\n >\n {formatMessage({\n id: 'content-manager.preview.panel.button-configuration',\n defaultMessage: 'Set up preview',\n })}\n </Button>\n ),\n };\n }\n\n if (!data?.data?.url || error) {\n return null;\n }\n\n const trackNavigation = () => {\n // Append /preview to the current URL\n const destinationPathname = pathname.replace(/\\/$/, '') + '/preview';\n trackUsage('willNavigate', { from: pathname, to: destinationPathname });\n };\n\n return {\n title,\n content: (\n <ConditionalTooltip\n label={formatMessage({\n id: 'content-manager.preview.panel.button-disabled-tooltip',\n defaultMessage: 'Please save to open the preview',\n })}\n isShown={isModified}\n >\n <Box cursor=\"not-allowed\" width=\"100%\">\n <Button\n variant=\"tertiary\"\n tag={Link}\n to={{ pathname: 'preview', search: stringify(query, { encode: false }) }}\n onClick={trackNavigation}\n width=\"100%\"\n disabled={isModified}\n pointerEvents={isModified ? 'none' : undefined}\n tabIndex={isModified ? -1 : undefined}\n >\n {formatMessage({\n id: 'content-manager.preview.panel.button',\n defaultMessage: 'Open preview',\n })}\n </Button>\n </Box>\n </ConditionalTooltip>\n ),\n };\n};\n\nexport { PreviewSidePanel };\n"],"names":["ConditionalTooltip","isShown","label","children","_jsx","Tooltip","PreviewSidePanel","model","documentId","document","formatMessage","useIntl","trackUsage","useTracking","pathname","useLocation","query","useQueryParams","isModified","useForm","state","modified","isUnsaved","Boolean","id","title","defaultMessage","data","error","useGetPreviewUrlQuery","params","contentType","locale","status","skip","name","content","Button","variant","tag","Link","to","target","rel","width","url","trackNavigation","destinationPathname","replace","from","Box","cursor","search","stringify","encode","onClick","disabled","pointerEvents","undefined","tabIndex"],"mappings":";;;;;;;;;AAmBA,MAAMA,kBAAAA,GAAqB,CAAC,EAAEC,OAAO,EAAEC,KAAK,EAAEC,QAAQ,EAA2B,GAAA;AAC/E,IAAA,IAAIF,OAAS,EAAA;AACX,QAAA,qBAAOG,GAACC,CAAAA,OAAAA,EAAAA;YAAQH,KAAOA,EAAAA,KAAAA;AAAQC,YAAAA,QAAAA,EAAAA;;AACjC;IAEA,OAAOA,QAAAA;AACT,CAAA;AAEMG,MAAAA,gBAAAA,GAAmC,CAAC,EAAEC,KAAK,EAAEC,UAAU,EAAEC,QAAQ,EAAE,GAAA;IACvE,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAM,EAAEC,UAAU,EAAE,GAAGC,WAAAA,EAAAA;IACvB,MAAM,EAAEC,QAAQ,EAAE,GAAGC,WAAAA,EAAAA;AACrB,IAAA,MAAM,CAAC,EAAEC,KAAK,EAAE,CAAC,GAAGC,cAAAA,EAAAA;AACpB,IAAA,MAAMC,aAAaC,OAAQ,CAAA,kBAAA,EAAoB,CAACC,KAAAA,GAAUA,MAAMC,QAAQ,CAAA;AACxE,IAAA,MAAMC,YAAYC,OAAQ,CAAA,CAACd,QAAY,IAAA,CAACA,SAASe,EAAE,CAAA;AAEnD,IAAA,MAAMC,QAAQf,aAAc,CAAA;QAC1Bc,EAAI,EAAA,qCAAA;QACJE,cAAgB,EAAA;AAClB,KAAA,CAAA;AAEA;;;;AAIC,MACD,MAAM,EAAEC,IAAI,EAAEC,KAAK,EAAE,GAAGC,qBACtB,CAAA;QACEC,MAAQ,EAAA;YACNC,WAAaxB,EAAAA;AACf,SAAA;QACAS,KAAO,EAAA;AACLR,YAAAA,UAAAA;AACAwB,YAAAA,MAAAA,EAAQvB,QAAUuB,EAAAA,MAAAA;AAClBC,YAAAA,MAAAA,EAAQxB,QAAUwB,EAAAA;AACpB;AACF,KAAA;AAEA,IAAA;QAAEC,IAAMZ,EAAAA;AAAU,KAAA,CAAA;AAGpB,IAAA,IAAIA,SAAW,EAAA;QACb,OAAO,IAAA;AACT;;;AAIA,IAAA,IAAIM,KAASA,IAAAA,KAAAA,CAAMO,IAAI,KAAK,eAAiB,EAAA;QAC3C,OAAO;AACLV,YAAAA,KAAAA;AACAW,YAAAA,OAAAA,gBACEhC,GAACiC,CAAAA,MAAAA,EAAAA;gBACCC,OAAQ,EAAA,UAAA;gBACRC,GAAKC,EAAAA,IAAAA;gBACLC,EAAG,EAAA,6CAAA;gBACHC,MAAO,EAAA,QAAA;gBACPC,GAAI,EAAA,qBAAA;gBACJC,KAAM,EAAA,MAAA;0BAELlC,aAAc,CAAA;oBACbc,EAAI,EAAA,oDAAA;oBACJE,cAAgB,EAAA;AAClB,iBAAA;;AAGN,SAAA;AACF;AAEA,IAAA,IAAI,CAACC,IAAAA,EAAMA,IAAMkB,EAAAA,GAAAA,IAAOjB,KAAO,EAAA;QAC7B,OAAO,IAAA;AACT;AAEA,IAAA,MAAMkB,eAAkB,GAAA,IAAA;;AAEtB,QAAA,MAAMC,mBAAsBjC,GAAAA,QAAAA,CAASkC,OAAO,CAAC,OAAO,EAAM,CAAA,GAAA,UAAA;AAC1DpC,QAAAA,UAAAA,CAAW,cAAgB,EAAA;YAAEqC,IAAMnC,EAAAA,QAAAA;YAAU2B,EAAIM,EAAAA;AAAoB,SAAA,CAAA;AACvE,KAAA;IAEA,OAAO;AACLtB,QAAAA,KAAAA;AACAW,QAAAA,OAAAA,gBACEhC,GAACJ,CAAAA,kBAAAA,EAAAA;AACCE,YAAAA,KAAAA,EAAOQ,aAAc,CAAA;gBACnBc,EAAI,EAAA,uDAAA;gBACJE,cAAgB,EAAA;AAClB,aAAA,CAAA;YACAzB,OAASiB,EAAAA,UAAAA;AAET,YAAA,QAAA,gBAAAd,GAAC8C,CAAAA,GAAAA,EAAAA;gBAAIC,MAAO,EAAA,aAAA;gBAAcP,KAAM,EAAA,MAAA;AAC9B,gBAAA,QAAA,gBAAAxC,GAACiC,CAAAA,MAAAA,EAAAA;oBACCC,OAAQ,EAAA,UAAA;oBACRC,GAAKC,EAAAA,IAAAA;oBACLC,EAAI,EAAA;wBAAE3B,QAAU,EAAA,SAAA;AAAWsC,wBAAAA,MAAAA,EAAQC,UAAUrC,KAAO,EAAA;4BAAEsC,MAAQ,EAAA;AAAM,yBAAA;AAAG,qBAAA;oBACvEC,OAAST,EAAAA,eAAAA;oBACTF,KAAM,EAAA,MAAA;oBACNY,QAAUtC,EAAAA,UAAAA;AACVuC,oBAAAA,aAAAA,EAAevC,aAAa,MAASwC,GAAAA,SAAAA;oBACrCC,QAAUzC,EAAAA,UAAAA,GAAa,CAAC,CAAIwC,GAAAA,SAAAA;8BAE3BhD,aAAc,CAAA;wBACbc,EAAI,EAAA,sCAAA;wBACJE,cAAgB,EAAA;AAClB,qBAAA;;;;AAKV,KAAA;AACF;;;;"}
@@ -13,9 +13,9 @@ var DocumentRBAC = require('../../features/DocumentRBAC.js');
13
13
  var useDocument = require('../../hooks/useDocument.js');
14
14
  var useDocumentLayout = require('../../hooks/useDocumentLayout.js');
15
15
  var FormLayout = require('../../pages/EditView/components/FormLayout.js');
16
+ var data = require('../../pages/EditView/utils/data.js');
16
17
  var api = require('../../utils/api.js');
17
18
  var validation = require('../../utils/validation.js');
18
- var PreviewContent = require('../components/PreviewContent.js');
19
19
  var PreviewHeader = require('../components/PreviewHeader.js');
20
20
  var preview = require('../services/preview.js');
21
21
 
@@ -38,12 +38,34 @@ function _interopNamespaceDefault(e) {
38
38
 
39
39
  var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
40
40
 
41
+ /* -------------------------------------------------------------------------------------------------
42
+ * Constants
43
+ * -----------------------------------------------------------------------------------------------*/ const DEVICES = [
44
+ {
45
+ name: 'desktop',
46
+ label: {
47
+ id: 'content-manager.preview.device.desktop',
48
+ defaultMessage: 'Desktop'
49
+ },
50
+ width: '100%',
51
+ height: '100%'
52
+ },
53
+ {
54
+ name: 'mobile',
55
+ label: {
56
+ id: 'content-manager.preview.device.mobile',
57
+ defaultMessage: 'Mobile'
58
+ },
59
+ width: '375px',
60
+ height: '667px'
61
+ }
62
+ ];
41
63
  const [PreviewProvider, usePreviewContext] = strapiAdmin.createContext('PreviewPage');
42
64
  /* -------------------------------------------------------------------------------------------------
43
65
  * PreviewPage
44
66
  * -----------------------------------------------------------------------------------------------*/ const AnimatedArrow = styledComponents.styled(Icons.ArrowLineLeft)`
45
67
  will-change: transform;
46
- rotate: ${(props)=>props.isSideEditorOpen ? '0deg' : '180deg'};
68
+ rotate: ${(props)=>props.$isSideEditorOpen ? '0deg' : '180deg'};
47
69
  transition: rotate 0.2s ease-in-out;
48
70
  `;
49
71
  const PreviewPage = ()=>{
@@ -57,6 +79,8 @@ const PreviewPage = ()=>{
57
79
  const params = React__namespace.useMemo(()=>api.buildValidParams(query), [
58
80
  query
59
81
  ]);
82
+ const [deviceName, setDeviceName] = React__namespace.useState(DEVICES[0].name);
83
+ const device = DEVICES.find((d)=>d.name === deviceName) ?? DEVICES[0];
60
84
  if (!collectionType) {
61
85
  throw new Error('Could not find collectionType in url params');
62
86
  }
@@ -85,7 +109,7 @@ const PreviewPage = ()=>{
85
109
  });
86
110
  const documentLayoutResponse = useDocumentLayout.useDocumentLayout(model);
87
111
  const isLoading = previewUrlResponse.isLoading || documentLayoutResponse.isLoading || documentResponse.isLoading;
88
- if (isLoading && !documentResponse.document?.documentId) {
112
+ if (isLoading) {
89
113
  return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.Loading, {});
90
114
  }
91
115
  const initialValues = documentResponse.getInitialFormValues();
@@ -97,15 +121,28 @@ const PreviewPage = ()=>{
97
121
  }
98
122
  const documentTitle = documentResponse.getTitle(documentLayoutResponse.edit.settings.mainField);
99
123
  const validateSync = (values, options)=>{
124
+ const { data: cleanedValues, removedAttributes } = data.handleInvisibleAttributes(values, {
125
+ schema: documentResponse.schema,
126
+ initialValues,
127
+ components: documentResponse.components
128
+ });
100
129
  const yupSchema = validation.createYupSchema(documentResponse.schema?.attributes, documentResponse.components, {
101
130
  status: documentResponse.document?.status,
131
+ removedAttributes,
102
132
  ...options
103
133
  });
104
- return yupSchema.validateSync(values, {
134
+ return yupSchema.validateSync(cleanedValues, {
105
135
  abortEarly: false
106
136
  });
107
137
  };
108
138
  const previewUrl = previewUrlResponse.data.data.url;
139
+ const onPreview = ()=>{
140
+ iframeRef?.current?.contentWindow?.postMessage({
141
+ type: 'strapiUpdate'
142
+ }, // The iframe origin is safe to use since it must be provided through the allowedOrigins config
143
+ new URL(iframeRef.current.src).origin);
144
+ };
145
+ const hasAdvancedPreview = window.strapi.features.isEnabled('cms-advanced-preview');
109
146
  return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
110
147
  children: [
111
148
  /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.Title, {
@@ -123,7 +160,7 @@ const PreviewPage = ()=>{
123
160
  meta: documentResponse.meta,
124
161
  schema: documentResponse.schema,
125
162
  layout: documentLayoutResponse.edit,
126
- iframeRef: iframeRef,
163
+ onPreview: onPreview,
127
164
  children: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Form, {
128
165
  method: "PUT",
129
166
  disabled: query.status === 'published' && documentResponse && documentResponse.document.status !== 'draft',
@@ -131,52 +168,103 @@ const PreviewPage = ()=>{
131
168
  initialErrors: location?.state?.forceValidation ? validateSync(initialValues, {}) : {},
132
169
  height: "100%",
133
170
  validate: (values, options)=>{
171
+ const { data: cleanedValues, removedAttributes } = data.handleInvisibleAttributes(values, {
172
+ schema: documentResponse.schema,
173
+ initialValues,
174
+ components: documentResponse.components
175
+ });
134
176
  const yupSchema = validation.createYupSchema(documentResponse.schema?.attributes, documentResponse.components, {
135
177
  status: documentResponse.document?.status,
178
+ removedAttributes,
136
179
  ...options
137
180
  });
138
- return yupSchema.validate(values, {
181
+ return yupSchema.validate(cleanedValues, {
139
182
  abortEarly: false
140
183
  });
141
184
  },
142
- children: ({ resetForm })=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
185
+ children: ({ resetForm })=>/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
143
186
  direction: "column",
144
187
  height: "100%",
145
188
  alignItems: "stretch",
146
- children: window.strapi.future.isEnabled('unstablePreviewSideEditor') ? /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
147
- children: [
148
- /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Blocker, {
149
- onProceed: resetForm
150
- }),
151
- /*#__PURE__*/ jsxRuntime.jsx(PreviewHeader.UnstablePreviewHeader, {}),
152
- /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
153
- flex: 1,
154
- overflow: "auto",
155
- alignItems: "stretch",
156
- children: [
157
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
158
- overflow: "auto",
159
- width: isSideEditorOpen ? '50%' : 0,
160
- borderWidth: "0 1px 0 0",
161
- borderColor: "neutral150",
162
- paddingTop: 6,
163
- paddingBottom: 6,
164
- // Remove horizontal padding when the editor is closed or it won't fully disappear
165
- paddingLeft: isSideEditorOpen ? 6 : 0,
166
- paddingRight: isSideEditorOpen ? 6 : 0,
167
- transition: "all 0.2s ease-in-out",
168
- children: /*#__PURE__*/ jsxRuntime.jsx(FormLayout.FormLayout, {
169
- layout: documentLayoutResponse.edit.layout,
170
- hasBackground: true
171
- })
172
- }),
173
- /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Box, {
174
- position: "relative",
175
- flex: 1,
176
- height: "100%",
177
- overflow: "hidden",
178
- children: [
179
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
189
+ children: [
190
+ /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Blocker, {
191
+ onProceed: resetForm
192
+ }),
193
+ /*#__PURE__*/ jsxRuntime.jsx(PreviewHeader.PreviewHeader, {}),
194
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
195
+ flex: 1,
196
+ overflow: "auto",
197
+ alignItems: "stretch",
198
+ children: [
199
+ hasAdvancedPreview && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
200
+ overflow: "auto",
201
+ width: isSideEditorOpen ? '50%' : 0,
202
+ borderWidth: "0 1px 0 0",
203
+ borderColor: "neutral150",
204
+ paddingTop: 6,
205
+ paddingBottom: 6,
206
+ // Remove horizontal padding when the editor is closed or it won't fully disappear
207
+ paddingLeft: isSideEditorOpen ? 6 : 0,
208
+ paddingRight: isSideEditorOpen ? 6 : 0,
209
+ transition: "all 0.2s ease-in-out",
210
+ children: /*#__PURE__*/ jsxRuntime.jsx(FormLayout.FormLayout, {
211
+ layout: documentLayoutResponse.edit.layout,
212
+ document: documentResponse,
213
+ hasBackground: false
214
+ })
215
+ }),
216
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
217
+ direction: "column",
218
+ alignItems: "stretch",
219
+ flex: 1,
220
+ height: "100%",
221
+ overflow: "hidden",
222
+ children: [
223
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
224
+ direction: "row",
225
+ background: "neutral0",
226
+ padding: 2,
227
+ borderWidth: "0 0 1px 0",
228
+ borderColor: "neutral150",
229
+ children: [
230
+ hasAdvancedPreview && /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
231
+ variant: "ghost",
232
+ label: formatMessage(isSideEditorOpen ? {
233
+ id: 'content-manager.preview.content.close-editor',
234
+ defaultMessage: 'Close editor'
235
+ } : {
236
+ id: 'content-manager.preview.content.open-editor',
237
+ defaultMessage: 'Open editor'
238
+ }),
239
+ onClick: ()=>setIsSideEditorOpen((prev)=>!prev),
240
+ children: /*#__PURE__*/ jsxRuntime.jsx(AnimatedArrow, {
241
+ $isSideEditorOpen: isSideEditorOpen
242
+ })
243
+ }),
244
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
245
+ justifyContent: "center",
246
+ flex: 1,
247
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelect, {
248
+ value: deviceName,
249
+ onChange: (name)=>setDeviceName(name.toString()),
250
+ "aria-label": formatMessage({
251
+ id: 'content-manager.preview.device.select',
252
+ defaultMessage: 'Select device type'
253
+ }),
254
+ children: DEVICES.map((deviceOption)=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelectOption, {
255
+ value: deviceOption.name,
256
+ children: formatMessage(deviceOption.label)
257
+ }, deviceOption.name))
258
+ })
259
+ })
260
+ ]
261
+ }),
262
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
263
+ direction: "column",
264
+ justifyContent: "center",
265
+ background: "neutral0",
266
+ flex: 1,
267
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
180
268
  "data-testid": "preview-iframe",
181
269
  ref: iframeRef,
182
270
  src: previewUrl,
@@ -184,39 +272,17 @@ const PreviewPage = ()=>{
184
272
  id: 'content-manager.preview.panel.title',
185
273
  defaultMessage: 'Preview'
186
274
  }),
187
- width: "100%",
188
- height: "100%",
275
+ width: device.width,
276
+ height: device.height,
189
277
  borderWidth: 0,
190
278
  tag: "iframe"
191
- }, previewUrl),
192
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
193
- variant: "tertiary",
194
- label: formatMessage(isSideEditorOpen ? {
195
- id: 'content-manager.preview.content.close-editor',
196
- defaultMessage: 'Close editor'
197
- } : {
198
- id: 'content-manager.preview.content.open-editor',
199
- defaultMessage: 'Open editor'
200
- }),
201
- onClick: ()=>setIsSideEditorOpen((prev)=>!prev),
202
- position: "absolute",
203
- top: 2,
204
- left: 2,
205
- children: /*#__PURE__*/ jsxRuntime.jsx(AnimatedArrow, {
206
- isSideEditorOpen: isSideEditorOpen
207
- })
208
- })
209
- ]
210
- })
211
- ]
212
- })
213
- ]
214
- }) : /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
215
- children: [
216
- /*#__PURE__*/ jsxRuntime.jsx(PreviewHeader.PreviewHeader, {}),
217
- /*#__PURE__*/ jsxRuntime.jsx(PreviewContent.PreviewContent, {})
218
- ]
219
- })
279
+ }, previewUrl)
280
+ })
281
+ ]
282
+ })
283
+ ]
284
+ })
285
+ ]
220
286
  })
221
287
  })
222
288
  })
@@ -1 +1 @@
1
- {"version":3,"file":"Preview.js","sources":["../../../../admin/src/preview/pages/Preview.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Page,\n useQueryParams,\n useRBAC,\n createContext,\n Form as FormContext,\n Blocker,\n} from '@strapi/admin/strapi-admin';\nimport { Box, Flex, FocusTrap, IconButton, Portal } from '@strapi/design-system';\nimport { ArrowLineLeft } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useParams } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { GetPreviewUrl } from '../../../../shared/contracts/preview';\nimport { COLLECTION_TYPES } from '../../constants/collections';\nimport { DocumentRBAC } from '../../features/DocumentRBAC';\nimport { type UseDocument, useDocument } from '../../hooks/useDocument';\nimport { type EditLayout, useDocumentLayout } from '../../hooks/useDocumentLayout';\nimport { FormLayout } from '../../pages/EditView/components/FormLayout';\nimport { buildValidParams } from '../../utils/api';\nimport { createYupSchema } from '../../utils/validation';\nimport { PreviewContent } from '../components/PreviewContent';\nimport { PreviewHeader, UnstablePreviewHeader } from '../components/PreviewHeader';\nimport { useGetPreviewUrlQuery } from '../services/preview';\n\nimport type { UID } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * PreviewProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PreviewContextValue {\n url: string;\n title: string;\n document: NonNullable<ReturnType<UseDocument>['document']>;\n meta: NonNullable<ReturnType<UseDocument>['meta']>;\n schema: NonNullable<ReturnType<UseDocument>['schema']>;\n layout: EditLayout;\n iframeRef?: React.RefObject<HTMLIFrameElement>;\n}\n\nconst [PreviewProvider, usePreviewContext] = createContext<PreviewContextValue>('PreviewPage');\n\n/* -------------------------------------------------------------------------------------------------\n * PreviewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst AnimatedArrow = styled(ArrowLineLeft)<{ isSideEditorOpen: boolean }>`\n will-change: transform;\n rotate: ${(props) => (props.isSideEditorOpen ? '0deg' : '180deg')};\n transition: rotate 0.2s ease-in-out;\n`;\n\nconst PreviewPage = () => {\n const location = useLocation();\n const { formatMessage } = useIntl();\n\n const iframeRef = React.useRef<HTMLIFrameElement>(null);\n const [isSideEditorOpen, setIsSideEditorOpen] = React.useState(true);\n\n // Read all the necessary data from the URL to find the right preview URL\n const {\n slug: model,\n id: documentId,\n collectionType,\n } = useParams<{\n slug: UID.ContentType;\n id: string;\n collectionType: string;\n }>();\n const [{ query }] = useQueryParams<{\n plugins?: Record<string, unknown>;\n status?: string;\n }>();\n\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n if (!collectionType) {\n throw new Error('Could not find collectionType in url params');\n }\n\n if (!model) {\n throw new Error('Could not find model in url params');\n }\n\n // Only collection types must have a documentId\n if (collectionType === COLLECTION_TYPES && !documentId) {\n throw new Error('Could not find documentId in url params');\n }\n\n const previewUrlResponse = useGetPreviewUrlQuery({\n params: {\n contentType: model,\n },\n query: {\n documentId,\n locale: params.locale,\n status: params.status as GetPreviewUrl.Request['query']['status'],\n },\n });\n const documentResponse = useDocument({\n model,\n collectionType,\n documentId,\n params,\n });\n const documentLayoutResponse = useDocumentLayout(model);\n\n const isLoading =\n previewUrlResponse.isLoading || documentLayoutResponse.isLoading || documentResponse.isLoading;\n if (isLoading && !documentResponse.document?.documentId) {\n return <Page.Loading />;\n }\n\n const initialValues = documentResponse.getInitialFormValues();\n\n if (\n previewUrlResponse.error ||\n documentLayoutResponse.error ||\n !documentResponse.document ||\n !documentResponse.meta ||\n !documentResponse.schema ||\n !initialValues\n ) {\n return <Page.Error />;\n }\n\n if (!previewUrlResponse.data?.data?.url) {\n return <Page.NoData />;\n }\n\n const documentTitle = documentResponse.getTitle(documentLayoutResponse.edit.settings.mainField);\n\n const validateSync = (values: Record<string, unknown>, options: Record<string, string>) => {\n const yupSchema = createYupSchema(\n documentResponse.schema?.attributes,\n documentResponse.components,\n {\n status: documentResponse.document?.status,\n ...options,\n }\n );\n\n return yupSchema.validateSync(values, { abortEarly: false });\n };\n\n const previewUrl = previewUrlResponse.data.data.url;\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n {\n id: 'content-manager.preview.page-title',\n defaultMessage: '{contentType} preview',\n },\n {\n contentType: documentTitle,\n }\n )}\n </Page.Title>\n <PreviewProvider\n url={previewUrl}\n document={documentResponse.document}\n title={documentTitle}\n meta={documentResponse.meta}\n schema={documentResponse.schema}\n layout={documentLayoutResponse.edit}\n iframeRef={iframeRef}\n >\n <FormContext\n method=\"PUT\"\n disabled={\n query.status === 'published' &&\n documentResponse &&\n documentResponse.document.status !== '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 yupSchema = createYupSchema(\n documentResponse.schema?.attributes,\n documentResponse.components,\n {\n status: documentResponse.document?.status,\n ...options,\n }\n );\n\n return yupSchema.validate(values, { abortEarly: false });\n }}\n >\n {({ resetForm }) => (\n <Flex direction=\"column\" height=\"100%\" alignItems=\"stretch\">\n {window.strapi.future.isEnabled('unstablePreviewSideEditor') ? (\n <>\n <Blocker onProceed={resetForm} />\n <UnstablePreviewHeader />\n <Flex flex={1} overflow=\"auto\" alignItems=\"stretch\">\n <Box\n overflow=\"auto\"\n width={isSideEditorOpen ? '50%' : 0}\n borderWidth=\"0 1px 0 0\"\n borderColor=\"neutral150\"\n paddingTop={6}\n paddingBottom={6}\n // Remove horizontal padding when the editor is closed or it won't fully disappear\n paddingLeft={isSideEditorOpen ? 6 : 0}\n paddingRight={isSideEditorOpen ? 6 : 0}\n transition=\"all 0.2s ease-in-out\"\n >\n <FormLayout layout={documentLayoutResponse.edit.layout} hasBackground />\n </Box>\n <Box position=\"relative\" flex={1} height=\"100%\" overflow=\"hidden\">\n <Box\n data-testid=\"preview-iframe\"\n ref={iframeRef}\n src={previewUrl}\n /**\n * For some reason, changing an iframe's src tag causes the browser to add a new item in the\n * history stack. This is an issue for us as it means clicking the back button will not let us\n * go back to the edit view. To fix it, we need to trick the browser into thinking this is a\n * different iframe when the preview URL changes. So we set a key prop to force React\n * to mount a different node when the src changes.\n */\n key={previewUrl}\n title={formatMessage({\n id: 'content-manager.preview.panel.title',\n defaultMessage: 'Preview',\n })}\n width=\"100%\"\n height=\"100%\"\n borderWidth={0}\n tag=\"iframe\"\n />\n <IconButton\n variant=\"tertiary\"\n label={formatMessage(\n isSideEditorOpen\n ? {\n id: 'content-manager.preview.content.close-editor',\n defaultMessage: 'Close editor',\n }\n : {\n id: 'content-manager.preview.content.open-editor',\n defaultMessage: 'Open editor',\n }\n )}\n onClick={() => setIsSideEditorOpen((prev) => !prev)}\n position=\"absolute\"\n top={2}\n left={2}\n >\n <AnimatedArrow isSideEditorOpen={isSideEditorOpen} />\n </IconButton>\n </Box>\n </Flex>\n </>\n ) : (\n <>\n <PreviewHeader />\n <PreviewContent />\n </>\n )}\n </Flex>\n )}\n </FormContext>\n </PreviewProvider>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedPreviewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedPreviewPageImpl = () => {\n const { slug: model } = useParams<{\n slug: string;\n }>();\n const {\n permissions = [],\n isLoading,\n error,\n } = useRBAC([\n { action: 'plugin::content-manager.explorer.read', subject: model },\n { action: 'plugin::content-manager.explorer.update', subject: model },\n { action: 'plugin::content-manager.explorer.publish', subject: model },\n ]);\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (error || !model) {\n return (\n <Box\n height=\"100vh\"\n width=\"100vw\"\n position=\"fixed\"\n top={0}\n left={0}\n zIndex={2}\n background=\"neutral0\"\n >\n <Page.Error />\n </Box>\n );\n }\n\n return (\n <Box\n height=\"100vh\"\n width=\"100vw\"\n position=\"fixed\"\n top={0}\n left={0}\n zIndex={2}\n background=\"neutral0\"\n >\n <Page.Protect\n permissions={permissions.filter((permission) =>\n permission.action.includes('explorer.read')\n )}\n >\n <DocumentRBAC permissions={permissions}>\n <PreviewPage />\n </DocumentRBAC>\n </Page.Protect>\n </Box>\n );\n};\n\nconst ProtectedPreviewPage = () => {\n return (\n <Portal>\n <FocusTrap>\n <ProtectedPreviewPageImpl />\n </FocusTrap>\n </Portal>\n );\n};\n\nexport { ProtectedPreviewPage, usePreviewContext };\n"],"names":["PreviewProvider","usePreviewContext","createContext","AnimatedArrow","styled","ArrowLineLeft","props","isSideEditorOpen","PreviewPage","location","useLocation","formatMessage","useIntl","iframeRef","React","useRef","setIsSideEditorOpen","useState","slug","model","id","documentId","collectionType","useParams","query","useQueryParams","params","useMemo","buildValidParams","Error","COLLECTION_TYPES","previewUrlResponse","useGetPreviewUrlQuery","contentType","locale","status","documentResponse","useDocument","documentLayoutResponse","useDocumentLayout","isLoading","document","_jsx","Page","Loading","initialValues","getInitialFormValues","error","meta","schema","data","url","NoData","documentTitle","getTitle","edit","settings","mainField","validateSync","values","options","yupSchema","createYupSchema","attributes","components","abortEarly","previewUrl","_jsxs","_Fragment","Title","defaultMessage","title","layout","FormContext","method","disabled","initialErrors","state","forceValidation","height","validate","resetForm","Flex","direction","alignItems","window","strapi","future","isEnabled","Blocker","onProceed","UnstablePreviewHeader","flex","overflow","Box","width","borderWidth","borderColor","paddingTop","paddingBottom","paddingLeft","paddingRight","transition","FormLayout","hasBackground","position","data-testid","ref","src","tag","IconButton","variant","label","onClick","prev","top","left","PreviewHeader","PreviewContent","ProtectedPreviewPageImpl","permissions","useRBAC","action","subject","zIndex","background","Protect","filter","permission","includes","DocumentRBAC","ProtectedPreviewPage","Portal","FocusTrap"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CA,MAAM,CAACA,eAAAA,EAAiBC,iBAAkB,CAAA,GAAGC,yBAAmC,CAAA,aAAA;AAEhF;;AAEkG,qGAElG,MAAMC,aAAAA,GAAgBC,uBAAOC,CAAAA,mBAAAA,CAA6C;;AAEhE,UAAA,EAAE,CAACC,KAAWA,GAAAA,KAAAA,CAAMC,gBAAgB,GAAG,SAAS,QAAU,CAAA;;AAEpE,CAAC;AAED,MAAMC,WAAc,GAAA,IAAA;AAClB,IAAA,MAAMC,QAAWC,GAAAA,0BAAAA,EAAAA;IACjB,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAE1B,MAAMC,SAAAA,GAAYC,gBAAMC,CAAAA,MAAM,CAAoB,IAAA,CAAA;AAClD,IAAA,MAAM,CAACR,gBAAkBS,EAAAA,mBAAAA,CAAoB,GAAGF,gBAAAA,CAAMG,QAAQ,CAAC,IAAA,CAAA;;IAG/D,MAAM,EACJC,MAAMC,KAAK,EACXC,IAAIC,UAAU,EACdC,cAAc,EACf,GAAGC,wBAAAA,EAAAA;AAKJ,IAAA,MAAM,CAAC,EAAEC,KAAK,EAAE,CAAC,GAAGC,0BAAAA,EAAAA;AAKpB,IAAA,MAAMC,SAASZ,gBAAMa,CAAAA,OAAO,CAAC,IAAMC,qBAAiBJ,KAAQ,CAAA,EAAA;AAACA,QAAAA;AAAM,KAAA,CAAA;AAEnE,IAAA,IAAI,CAACF,cAAgB,EAAA;AACnB,QAAA,MAAM,IAAIO,KAAM,CAAA,6CAAA,CAAA;AAClB;AAEA,IAAA,IAAI,CAACV,KAAO,EAAA;AACV,QAAA,MAAM,IAAIU,KAAM,CAAA,oCAAA,CAAA;AAClB;;IAGA,IAAIP,cAAAA,KAAmBQ,4BAAoB,IAAA,CAACT,UAAY,EAAA;AACtD,QAAA,MAAM,IAAIQ,KAAM,CAAA,yCAAA,CAAA;AAClB;AAEA,IAAA,MAAME,qBAAqBC,6BAAsB,CAAA;QAC/CN,MAAQ,EAAA;YACNO,WAAad,EAAAA;AACf,SAAA;QACAK,KAAO,EAAA;AACLH,YAAAA,UAAAA;AACAa,YAAAA,MAAAA,EAAQR,OAAOQ,MAAM;AACrBC,YAAAA,MAAAA,EAAQT,OAAOS;AACjB;AACF,KAAA,CAAA;AACA,IAAA,MAAMC,mBAAmBC,uBAAY,CAAA;AACnClB,QAAAA,KAAAA;AACAG,QAAAA,cAAAA;AACAD,QAAAA,UAAAA;AACAK,QAAAA;AACF,KAAA,CAAA;AACA,IAAA,MAAMY,yBAAyBC,mCAAkBpB,CAAAA,KAAAA,CAAAA;IAEjD,MAAMqB,SAAAA,GACJT,mBAAmBS,SAAS,IAAIF,uBAAuBE,SAAS,IAAIJ,iBAAiBI,SAAS;AAChG,IAAA,IAAIA,SAAa,IAAA,CAACJ,gBAAiBK,CAAAA,QAAQ,EAAEpB,UAAY,EAAA;QACvD,qBAAOqB,cAAA,CAACC,iBAAKC,OAAO,EAAA,EAAA,CAAA;AACtB;IAEA,MAAMC,aAAAA,GAAgBT,iBAAiBU,oBAAoB,EAAA;AAE3D,IAAA,IACEf,mBAAmBgB,KAAK,IACxBT,uBAAuBS,KAAK,IAC5B,CAACX,gBAAiBK,CAAAA,QAAQ,IAC1B,CAACL,gBAAAA,CAAiBY,IAAI,IACtB,CAACZ,iBAAiBa,MAAM,IACxB,CAACJ,aACD,EAAA;QACA,qBAAOH,cAAA,CAACC,iBAAKd,KAAK,EAAA,EAAA,CAAA;AACpB;AAEA,IAAA,IAAI,CAACE,kBAAAA,CAAmBmB,IAAI,EAAEA,MAAMC,GAAK,EAAA;QACvC,qBAAOT,cAAA,CAACC,iBAAKS,MAAM,EAAA,EAAA,CAAA;AACrB;IAEA,MAAMC,aAAAA,GAAgBjB,iBAAiBkB,QAAQ,CAAChB,uBAAuBiB,IAAI,CAACC,QAAQ,CAACC,SAAS,CAAA;IAE9F,MAAMC,YAAAA,GAAe,CAACC,MAAiCC,EAAAA,OAAAA,GAAAA;QACrD,MAAMC,SAAAA,GAAYC,2BAChB1B,gBAAiBa,CAAAA,MAAM,EAAEc,UACzB3B,EAAAA,gBAAAA,CAAiB4B,UAAU,EAC3B;YACE7B,MAAQC,EAAAA,gBAAAA,CAAiBK,QAAQ,EAAEN,MAAAA;AACnC,YAAA,GAAGyB;AACL,SAAA,CAAA;QAGF,OAAOC,SAAAA,CAAUH,YAAY,CAACC,MAAQ,EAAA;YAAEM,UAAY,EAAA;AAAM,SAAA,CAAA;AAC5D,KAAA;AAEA,IAAA,MAAMC,aAAanC,kBAAmBmB,CAAAA,IAAI,CAACA,IAAI,CAACC,GAAG;IAEnD,qBACEgB,eAAA,CAAAC,mBAAA,EAAA;;AACE,0BAAA1B,cAAA,CAACC,iBAAK0B,KAAK,EAAA;0BACR1D,aACC,CAAA;oBACES,EAAI,EAAA,oCAAA;oBACJkD,cAAgB,EAAA;iBAElB,EAAA;oBACErC,WAAaoB,EAAAA;AACf,iBAAA;;0BAGJX,cAAC1C,CAAAA,eAAAA,EAAAA;gBACCmD,GAAKe,EAAAA,UAAAA;AACLzB,gBAAAA,QAAAA,EAAUL,iBAAiBK,QAAQ;gBACnC8B,KAAOlB,EAAAA,aAAAA;AACPL,gBAAAA,IAAAA,EAAMZ,iBAAiBY,IAAI;AAC3BC,gBAAAA,MAAAA,EAAQb,iBAAiBa,MAAM;AAC/BuB,gBAAAA,MAAAA,EAAQlC,uBAAuBiB,IAAI;gBACnC1C,SAAWA,EAAAA,SAAAA;AAEX,gBAAA,QAAA,gBAAA6B,cAAC+B,CAAAA,gBAAAA,EAAAA;oBACCC,MAAO,EAAA,KAAA;oBACPC,QACEnD,EAAAA,KAAAA,CAAMW,MAAM,KAAK,WAAA,IACjBC,oBACAA,gBAAiBK,CAAAA,QAAQ,CAACN,MAAM,KAAK,OAAA;AAEvCU,oBAAAA,aAAAA,EAAeT,iBAAiBU,oBAAoB,EAAA;AACpD8B,oBAAAA,aAAAA,EAAenE,UAAUoE,KAAOC,EAAAA,eAAAA,GAAkBpB,aAAab,aAAe,EAAA,MAAM,EAAC;oBACrFkC,MAAO,EAAA,MAAA;AACPC,oBAAAA,QAAAA,EAAU,CAACrB,MAAiCC,EAAAA,OAAAA,GAAAA;wBAC1C,MAAMC,SAAAA,GAAYC,2BAChB1B,gBAAiBa,CAAAA,MAAM,EAAEc,UACzB3B,EAAAA,gBAAAA,CAAiB4B,UAAU,EAC3B;4BACE7B,MAAQC,EAAAA,gBAAAA,CAAiBK,QAAQ,EAAEN,MAAAA;AACnC,4BAAA,GAAGyB;AACL,yBAAA,CAAA;wBAGF,OAAOC,SAAAA,CAAUmB,QAAQ,CAACrB,MAAQ,EAAA;4BAAEM,UAAY,EAAA;AAAM,yBAAA,CAAA;AACxD,qBAAA;AAEC,oBAAA,QAAA,EAAA,CAAC,EAAEgB,SAAS,EAAE,iBACbvC,cAACwC,CAAAA,iBAAAA,EAAAA;4BAAKC,SAAU,EAAA,QAAA;4BAASJ,MAAO,EAAA,MAAA;4BAAOK,UAAW,EAAA,SAAA;AAC/CC,4BAAAA,QAAAA,EAAAA,MAAAA,CAAOC,MAAM,CAACC,MAAM,CAACC,SAAS,CAAC,2BAC9B,CAAA,iBAAArB,eAAA,CAAAC,mBAAA,EAAA;;kDACE1B,cAAC+C,CAAAA,mBAAAA,EAAAA;wCAAQC,SAAWT,EAAAA;;kDACpBvC,cAACiD,CAAAA,mCAAAA,EAAAA,EAAAA,CAAAA;kDACDxB,eAACe,CAAAA,iBAAAA,EAAAA;wCAAKU,IAAM,EAAA,CAAA;wCAAGC,QAAS,EAAA,MAAA;wCAAOT,UAAW,EAAA,SAAA;;0DACxC1C,cAACoD,CAAAA,gBAAAA,EAAAA;gDACCD,QAAS,EAAA,MAAA;AACTE,gDAAAA,KAAAA,EAAOxF,mBAAmB,KAAQ,GAAA,CAAA;gDAClCyF,WAAY,EAAA,WAAA;gDACZC,WAAY,EAAA,YAAA;gDACZC,UAAY,EAAA,CAAA;gDACZC,aAAe,EAAA,CAAA;;AAEfC,gDAAAA,WAAAA,EAAa7F,mBAAmB,CAAI,GAAA,CAAA;AACpC8F,gDAAAA,YAAAA,EAAc9F,mBAAmB,CAAI,GAAA,CAAA;gDACrC+F,UAAW,EAAA,sBAAA;AAEX,gDAAA,QAAA,gBAAA5D,cAAC6D,CAAAA,qBAAAA,EAAAA;oDAAW/B,MAAQlC,EAAAA,sBAAAA,CAAuBiB,IAAI,CAACiB,MAAM;oDAAEgC,aAAa,EAAA;;;0DAEvErC,eAAC2B,CAAAA,gBAAAA,EAAAA;gDAAIW,QAAS,EAAA,UAAA;gDAAWb,IAAM,EAAA,CAAA;gDAAGb,MAAO,EAAA,MAAA;gDAAOc,QAAS,EAAA,QAAA;;kEACvDnD,cAACoD,CAAAA,gBAAAA,EAAAA;wDACCY,aAAY,EAAA,gBAAA;wDACZC,GAAK9F,EAAAA,SAAAA;wDACL+F,GAAK1C,EAAAA,UAAAA;AASLK,wDAAAA,KAAAA,EAAO5D,aAAc,CAAA;4DACnBS,EAAI,EAAA,qCAAA;4DACJkD,cAAgB,EAAA;AAClB,yDAAA,CAAA;wDACAyB,KAAM,EAAA,MAAA;wDACNhB,MAAO,EAAA,MAAA;wDACPiB,WAAa,EAAA,CAAA;wDACba,GAAI,EAAA;AARC3C,qDAAAA,EAAAA,UAAAA,CAAAA;kEAUPxB,cAACoE,CAAAA,uBAAAA,EAAAA;wDACCC,OAAQ,EAAA,UAAA;AACRC,wDAAAA,KAAAA,EAAOrG,cACLJ,gBACI,GAAA;4DACEa,EAAI,EAAA,8CAAA;4DACJkD,cAAgB,EAAA;yDAElB,GAAA;4DACElD,EAAI,EAAA,6CAAA;4DACJkD,cAAgB,EAAA;AAClB,yDAAA,CAAA;AAEN2C,wDAAAA,OAAAA,EAAS,IAAMjG,mBAAAA,CAAoB,CAACkG,IAAAA,GAAS,CAACA,IAAAA,CAAAA;wDAC9CT,QAAS,EAAA,UAAA;wDACTU,GAAK,EAAA,CAAA;wDACLC,IAAM,EAAA,CAAA;AAEN,wDAAA,QAAA,gBAAA1E,cAACvC,CAAAA,aAAAA,EAAAA;4DAAcI,gBAAkBA,EAAAA;;;;;;;;AAMzC,6BAAA,CAAA,iBAAA4D,eAAA,CAAAC,mBAAA,EAAA;;kDACE1B,cAAC2E,CAAAA,2BAAAA,EAAAA,EAAAA,CAAAA;kDACD3E,cAAC4E,CAAAA,6BAAAA,EAAAA,EAAAA;;;;;;;;AASnB,CAAA;AAEA;;AAEkG,qGAElG,MAAMC,wBAA2B,GAAA,IAAA;AAC/B,IAAA,MAAM,EAAErG,IAAAA,EAAMC,KAAK,EAAE,GAAGI,wBAAAA,EAAAA;IAGxB,MAAM,EACJiG,cAAc,EAAE,EAChBhF,SAAS,EACTO,KAAK,EACN,GAAG0E,mBAAQ,CAAA;AACV,QAAA;YAAEC,MAAQ,EAAA,uCAAA;YAAyCC,OAASxG,EAAAA;AAAM,SAAA;AAClE,QAAA;YAAEuG,MAAQ,EAAA,yCAAA;YAA2CC,OAASxG,EAAAA;AAAM,SAAA;AACpE,QAAA;YAAEuG,MAAQ,EAAA,0CAAA;YAA4CC,OAASxG,EAAAA;AAAM;AACtE,KAAA,CAAA;AAED,IAAA,IAAIqB,SAAW,EAAA;QACb,qBAAOE,cAAA,CAACC,iBAAKC,OAAO,EAAA,EAAA,CAAA;AACtB;IAEA,IAAIG,KAAAA,IAAS,CAAC5B,KAAO,EAAA;AACnB,QAAA,qBACEuB,cAACoD,CAAAA,gBAAAA,EAAAA;YACCf,MAAO,EAAA,OAAA;YACPgB,KAAM,EAAA,OAAA;YACNU,QAAS,EAAA,OAAA;YACTU,GAAK,EAAA,CAAA;YACLC,IAAM,EAAA,CAAA;YACNQ,MAAQ,EAAA,CAAA;YACRC,UAAW,EAAA,UAAA;oCAEXnF,cAAA,CAACC,iBAAKd,KAAK,EAAA,EAAA;;AAGjB;AAEA,IAAA,qBACEa,cAACoD,CAAAA,gBAAAA,EAAAA;QACCf,MAAO,EAAA,OAAA;QACPgB,KAAM,EAAA,OAAA;QACNU,QAAS,EAAA,OAAA;QACTU,GAAK,EAAA,CAAA;QACLC,IAAM,EAAA,CAAA;QACNQ,MAAQ,EAAA,CAAA;QACRC,UAAW,EAAA,UAAA;gCAEXnF,cAAA,CAACC,iBAAKmF,OAAO,EAAA;YACXN,WAAaA,EAAAA,WAAAA,CAAYO,MAAM,CAAC,CAACC,aAC/BA,UAAWN,CAAAA,MAAM,CAACO,QAAQ,CAAC,eAAA,CAAA,CAAA;AAG7B,YAAA,QAAA,gBAAAvF,cAACwF,CAAAA,yBAAAA,EAAAA;gBAAaV,WAAaA,EAAAA,WAAAA;AACzB,gBAAA,QAAA,gBAAA9E,cAAClC,CAAAA,WAAAA,EAAAA,EAAAA;;;;AAKX,CAAA;AAEA,MAAM2H,oBAAuB,GAAA,IAAA;AAC3B,IAAA,qBACEzF,cAAC0F,CAAAA,mBAAAA,EAAAA;AACC,QAAA,QAAA,gBAAA1F,cAAC2F,CAAAA,sBAAAA,EAAAA;AACC,YAAA,QAAA,gBAAA3F,cAAC6E,CAAAA,wBAAAA,EAAAA,EAAAA;;;AAIT;;;;;"}
1
+ {"version":3,"file":"Preview.js","sources":["../../../../admin/src/preview/pages/Preview.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Page,\n useQueryParams,\n useRBAC,\n createContext,\n Form as FormContext,\n Blocker,\n} from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n FocusTrap,\n IconButton,\n Portal,\n SingleSelect,\n SingleSelectOption,\n} from '@strapi/design-system';\nimport { ArrowLineLeft } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useParams } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { GetPreviewUrl } from '../../../../shared/contracts/preview';\nimport { COLLECTION_TYPES } from '../../constants/collections';\nimport { DocumentRBAC } from '../../features/DocumentRBAC';\nimport { type UseDocument, useDocument } from '../../hooks/useDocument';\nimport { type EditLayout, useDocumentLayout } from '../../hooks/useDocumentLayout';\nimport { FormLayout } from '../../pages/EditView/components/FormLayout';\nimport { handleInvisibleAttributes } from '../../pages/EditView/utils/data';\nimport { buildValidParams } from '../../utils/api';\nimport { createYupSchema } from '../../utils/validation';\nimport { PreviewHeader } from '../components/PreviewHeader';\nimport { useGetPreviewUrlQuery } from '../services/preview';\n\nimport type { UID } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * Constants\n * -----------------------------------------------------------------------------------------------*/\n\nconst DEVICES = [\n {\n name: 'desktop',\n label: {\n id: 'content-manager.preview.device.desktop',\n defaultMessage: 'Desktop',\n },\n width: '100%',\n height: '100%',\n },\n {\n name: 'mobile',\n label: {\n id: 'content-manager.preview.device.mobile',\n defaultMessage: 'Mobile',\n },\n width: '375px',\n height: '667px',\n },\n];\n\n/* -------------------------------------------------------------------------------------------------\n * PreviewProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PreviewContextValue {\n url: string;\n title: string;\n document: NonNullable<ReturnType<UseDocument>['document']>;\n meta: NonNullable<ReturnType<UseDocument>['meta']>;\n schema: NonNullable<ReturnType<UseDocument>['schema']>;\n layout: EditLayout;\n onPreview: () => void;\n}\n\nconst [PreviewProvider, usePreviewContext] = createContext<PreviewContextValue>('PreviewPage');\n\n/* -------------------------------------------------------------------------------------------------\n * PreviewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst AnimatedArrow = styled(ArrowLineLeft)<{ $isSideEditorOpen: boolean }>`\n will-change: transform;\n rotate: ${(props) => (props.$isSideEditorOpen ? '0deg' : '180deg')};\n transition: rotate 0.2s ease-in-out;\n`;\n\nconst PreviewPage = () => {\n const location = useLocation();\n const { formatMessage } = useIntl();\n\n const iframeRef = React.useRef<HTMLIFrameElement>(null);\n const [isSideEditorOpen, setIsSideEditorOpen] = React.useState(true);\n\n // Read all the necessary data from the URL to find the right preview URL\n const {\n slug: model,\n id: documentId,\n collectionType,\n } = useParams<{\n slug: UID.ContentType;\n id: string;\n collectionType: string;\n }>();\n const [{ query }] = useQueryParams<{\n plugins?: Record<string, unknown>;\n status?: string;\n }>();\n\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n const [deviceName, setDeviceName] = React.useState<(typeof DEVICES)[number]['name']>(\n DEVICES[0].name\n );\n const device = DEVICES.find((d) => d.name === deviceName) ?? DEVICES[0];\n\n 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) {\n return <Page.Loading />;\n }\n\n const initialValues = documentResponse.getInitialFormValues();\n\n if (\n previewUrlResponse.error ||\n documentLayoutResponse.error ||\n !documentResponse.document ||\n !documentResponse.meta ||\n !documentResponse.schema ||\n !initialValues\n ) {\n return <Page.Error />;\n }\n\n if (!previewUrlResponse.data?.data?.url) {\n return <Page.NoData />;\n }\n\n const documentTitle = documentResponse.getTitle(documentLayoutResponse.edit.settings.mainField);\n\n const validateSync = (values: Record<string, unknown>, options: Record<string, string>) => {\n const { data: cleanedValues, removedAttributes } = handleInvisibleAttributes(values, {\n schema: documentResponse.schema,\n initialValues,\n components: documentResponse.components,\n });\n\n const yupSchema = createYupSchema(\n documentResponse.schema?.attributes,\n documentResponse.components,\n {\n status: documentResponse.document?.status,\n removedAttributes,\n ...options,\n }\n );\n\n return yupSchema.validateSync(cleanedValues, { abortEarly: false });\n };\n\n const previewUrl = previewUrlResponse.data.data.url;\n\n const onPreview = () => {\n iframeRef?.current?.contentWindow?.postMessage(\n { type: 'strapiUpdate' },\n // The iframe origin is safe to use since it must be provided through the allowedOrigins config\n new URL(iframeRef.current.src).origin\n );\n };\n\n const hasAdvancedPreview = window.strapi.features.isEnabled('cms-advanced-preview');\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n {\n id: 'content-manager.preview.page-title',\n defaultMessage: '{contentType} preview',\n },\n {\n contentType: documentTitle,\n }\n )}\n </Page.Title>\n <PreviewProvider\n url={previewUrl}\n document={documentResponse.document}\n title={documentTitle}\n meta={documentResponse.meta}\n schema={documentResponse.schema}\n layout={documentLayoutResponse.edit}\n onPreview={onPreview}\n >\n <FormContext\n method=\"PUT\"\n disabled={\n query.status === 'published' &&\n documentResponse &&\n documentResponse.document.status !== 'draft'\n }\n initialValues={documentResponse.getInitialFormValues()}\n initialErrors={location?.state?.forceValidation ? validateSync(initialValues, {}) : {}}\n height=\"100%\"\n validate={(values: Record<string, unknown>, options: Record<string, string>) => {\n const { data: cleanedValues, removedAttributes } = handleInvisibleAttributes(values, {\n schema: documentResponse.schema,\n initialValues,\n components: documentResponse.components,\n });\n\n const yupSchema = createYupSchema(\n documentResponse.schema?.attributes,\n documentResponse.components,\n {\n status: documentResponse.document?.status,\n removedAttributes,\n ...options,\n }\n );\n\n return yupSchema.validate(cleanedValues, { abortEarly: false });\n }}\n >\n {({ resetForm }) => (\n <Flex direction=\"column\" height=\"100%\" alignItems=\"stretch\">\n <Blocker onProceed={resetForm} />\n <PreviewHeader />\n <Flex flex={1} overflow=\"auto\" alignItems=\"stretch\">\n {hasAdvancedPreview && (\n <Box\n overflow=\"auto\"\n width={isSideEditorOpen ? '50%' : 0}\n borderWidth=\"0 1px 0 0\"\n borderColor=\"neutral150\"\n paddingTop={6}\n paddingBottom={6}\n // Remove horizontal padding when the editor is closed or it won't fully disappear\n paddingLeft={isSideEditorOpen ? 6 : 0}\n paddingRight={isSideEditorOpen ? 6 : 0}\n transition=\"all 0.2s ease-in-out\"\n >\n <FormLayout\n layout={documentLayoutResponse.edit.layout}\n document={documentResponse}\n hasBackground={false}\n />\n </Box>\n )}\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n flex={1}\n height=\"100%\"\n overflow=\"hidden\"\n >\n <Flex\n direction=\"row\"\n background=\"neutral0\"\n padding={2}\n borderWidth=\"0 0 1px 0\"\n borderColor=\"neutral150\"\n >\n {hasAdvancedPreview && (\n <IconButton\n variant=\"ghost\"\n label={formatMessage(\n isSideEditorOpen\n ? {\n id: 'content-manager.preview.content.close-editor',\n defaultMessage: 'Close editor',\n }\n : {\n id: 'content-manager.preview.content.open-editor',\n defaultMessage: 'Open editor',\n }\n )}\n onClick={() => setIsSideEditorOpen((prev) => !prev)}\n >\n <AnimatedArrow $isSideEditorOpen={isSideEditorOpen} />\n </IconButton>\n )}\n <Flex justifyContent=\"center\" flex={1}>\n <SingleSelect\n value={deviceName}\n onChange={(name) => setDeviceName(name.toString())}\n aria-label={formatMessage({\n id: 'content-manager.preview.device.select',\n defaultMessage: 'Select device type',\n })}\n >\n {DEVICES.map((deviceOption) => (\n <SingleSelectOption key={deviceOption.name} value={deviceOption.name}>\n {formatMessage(deviceOption.label)}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </Flex>\n </Flex>\n <Flex direction=\"column\" justifyContent=\"center\" background=\"neutral0\" flex={1}>\n <Box\n data-testid=\"preview-iframe\"\n ref={iframeRef}\n src={previewUrl}\n /**\n * For some reason, changing an iframe's src tag causes the browser to add a new item in the\n * history stack. This is an issue for us as it means clicking the back button will not let us\n * go back to the edit view. To fix it, we need to trick the browser into thinking this is a\n * different iframe when the preview URL changes. So we set a key prop to force React\n * to mount a different node when the src changes.\n */\n key={previewUrl}\n title={formatMessage({\n id: 'content-manager.preview.panel.title',\n defaultMessage: 'Preview',\n })}\n width={device.width}\n height={device.height}\n borderWidth={0}\n tag=\"iframe\"\n />\n </Flex>\n </Flex>\n </Flex>\n </Flex>\n )}\n </FormContext>\n </PreviewProvider>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedPreviewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedPreviewPageImpl = () => {\n const { slug: model } = useParams<{\n slug: string;\n }>();\n const {\n permissions = [],\n isLoading,\n error,\n } = useRBAC([\n { action: 'plugin::content-manager.explorer.read', subject: model },\n { action: 'plugin::content-manager.explorer.update', subject: model },\n { action: 'plugin::content-manager.explorer.publish', subject: model },\n ]);\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (error || !model) {\n return (\n <Box\n height=\"100vh\"\n width=\"100vw\"\n position=\"fixed\"\n top={0}\n left={0}\n zIndex={2}\n background=\"neutral0\"\n >\n <Page.Error />\n </Box>\n );\n }\n\n return (\n <Box\n height=\"100vh\"\n width=\"100vw\"\n position=\"fixed\"\n top={0}\n left={0}\n zIndex={2}\n background=\"neutral0\"\n >\n <Page.Protect\n permissions={permissions.filter((permission) =>\n permission.action.includes('explorer.read')\n )}\n >\n <DocumentRBAC permissions={permissions}>\n <PreviewPage />\n </DocumentRBAC>\n </Page.Protect>\n </Box>\n );\n};\n\nconst ProtectedPreviewPage = () => {\n return (\n <Portal>\n <FocusTrap>\n <ProtectedPreviewPageImpl />\n </FocusTrap>\n </Portal>\n );\n};\n\nexport { ProtectedPreviewPage, usePreviewContext };\n"],"names":["DEVICES","name","label","id","defaultMessage","width","height","PreviewProvider","usePreviewContext","createContext","AnimatedArrow","styled","ArrowLineLeft","props","$isSideEditorOpen","PreviewPage","location","useLocation","formatMessage","useIntl","iframeRef","React","useRef","isSideEditorOpen","setIsSideEditorOpen","useState","slug","model","documentId","collectionType","useParams","query","useQueryParams","params","useMemo","buildValidParams","deviceName","setDeviceName","device","find","d","Error","COLLECTION_TYPES","previewUrlResponse","useGetPreviewUrlQuery","contentType","locale","status","documentResponse","useDocument","documentLayoutResponse","useDocumentLayout","isLoading","_jsx","Page","Loading","initialValues","getInitialFormValues","error","document","meta","schema","data","url","NoData","documentTitle","getTitle","edit","settings","mainField","validateSync","values","options","cleanedValues","removedAttributes","handleInvisibleAttributes","components","yupSchema","createYupSchema","attributes","abortEarly","previewUrl","onPreview","current","contentWindow","postMessage","type","URL","src","origin","hasAdvancedPreview","window","strapi","features","isEnabled","_jsxs","_Fragment","Title","title","layout","FormContext","method","disabled","initialErrors","state","forceValidation","validate","resetForm","Flex","direction","alignItems","Blocker","onProceed","PreviewHeader","flex","overflow","Box","borderWidth","borderColor","paddingTop","paddingBottom","paddingLeft","paddingRight","transition","FormLayout","hasBackground","background","padding","IconButton","variant","onClick","prev","justifyContent","SingleSelect","value","onChange","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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"}