@strapi/content-manager 0.0.0-experimental.6cc8ff695218d5a391739344d308dfb3683215c1 → 0.0.0-experimental.6dcc00cde430a8f928a482d5c989396386c42f54

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 (389) 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/LeftMenu.js +13 -15
  6. package/dist/admin/components/LeftMenu.js.map +1 -1
  7. package/dist/admin/components/LeftMenu.mjs +14 -16
  8. package/dist/admin/components/LeftMenu.mjs.map +1 -1
  9. package/dist/admin/components/Widgets.js +421 -0
  10. package/dist/admin/components/Widgets.js.map +1 -0
  11. package/dist/admin/components/Widgets.mjs +398 -0
  12. package/dist/admin/components/Widgets.mjs.map +1 -0
  13. package/dist/admin/content-manager.js.map +1 -1
  14. package/dist/admin/content-manager.mjs.map +1 -1
  15. package/dist/admin/history/components/VersionContent.js +24 -3
  16. package/dist/admin/history/components/VersionContent.js.map +1 -1
  17. package/dist/admin/history/components/VersionContent.mjs +25 -4
  18. package/dist/admin/history/components/VersionContent.mjs.map +1 -1
  19. package/dist/admin/history/components/VersionHeader.js +6 -0
  20. package/dist/admin/history/components/VersionHeader.js.map +1 -1
  21. package/dist/admin/history/components/VersionHeader.mjs +7 -1
  22. package/dist/admin/history/components/VersionHeader.mjs.map +1 -1
  23. package/dist/admin/history/pages/History.js +1 -9
  24. package/dist/admin/history/pages/History.js.map +1 -1
  25. package/dist/admin/history/pages/History.mjs +1 -9
  26. package/dist/admin/history/pages/History.mjs.map +1 -1
  27. package/dist/admin/hooks/useDocumentActions.js +20 -8
  28. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  29. package/dist/admin/hooks/useDocumentActions.mjs +21 -9
  30. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  31. package/dist/admin/hooks/useDocumentContext.js +57 -0
  32. package/dist/admin/hooks/useDocumentContext.js.map +1 -0
  33. package/dist/admin/hooks/useDocumentContext.mjs +36 -0
  34. package/dist/admin/hooks/useDocumentContext.mjs.map +1 -0
  35. package/dist/admin/index.js +81 -5
  36. package/dist/admin/index.js.map +1 -1
  37. package/dist/admin/index.mjs +80 -3
  38. package/dist/admin/index.mjs.map +1 -1
  39. package/dist/admin/layout.js +1 -27
  40. package/dist/admin/layout.js.map +1 -1
  41. package/dist/admin/layout.mjs +2 -9
  42. package/dist/admin/layout.mjs.map +1 -1
  43. package/dist/admin/pages/EditView/EditViewPage.js +95 -86
  44. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  45. package/dist/admin/pages/EditView/EditViewPage.mjs +97 -88
  46. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  47. package/dist/admin/pages/EditView/components/Blocker.js +18 -0
  48. package/dist/admin/pages/EditView/components/Blocker.js.map +1 -0
  49. package/dist/admin/pages/EditView/components/Blocker.mjs +16 -0
  50. package/dist/admin/pages/EditView/components/Blocker.mjs.map +1 -0
  51. package/dist/admin/pages/EditView/components/DocumentActions.js +329 -120
  52. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  53. package/dist/admin/pages/EditView/components/DocumentActions.mjs +336 -127
  54. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  55. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +12 -15
  56. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  57. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +12 -15
  58. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
  59. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +61 -26
  60. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  61. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +63 -28
  62. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
  63. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +21 -35
  64. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
  65. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +21 -35
  66. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
  67. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js +46 -95
  68. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -1
  69. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +48 -78
  70. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -1
  71. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js +2 -2
  72. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -1
  73. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs +2 -2
  74. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs.map +1 -1
  75. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +14 -3
  76. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  77. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +15 -4
  78. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
  79. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +17 -4
  80. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  81. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +18 -5
  82. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  83. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +23 -21
  84. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  85. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +25 -23
  86. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  87. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +2 -3
  88. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
  89. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +2 -3
  90. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
  91. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +507 -345
  92. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  93. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +507 -347
  94. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
  95. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +178 -69
  96. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  97. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +182 -73
  98. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  99. package/dist/admin/pages/EditView/components/FormInputs/UID.js +11 -9
  100. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
  101. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +11 -9
  102. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
  103. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +1 -1
  104. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
  105. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs +1 -1
  106. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
  107. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js +50 -97
  108. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js.map +1 -1
  109. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs +51 -79
  110. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs.map +1 -1
  111. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js +86 -118
  112. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js.map +1 -1
  113. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs +86 -118
  114. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs.map +1 -1
  115. package/dist/admin/pages/EditView/components/FormLayout.js +47 -27
  116. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  117. package/dist/admin/pages/EditView/components/FormLayout.mjs +47 -27
  118. package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
  119. package/dist/admin/pages/EditView/components/InputRenderer.js +18 -15
  120. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  121. package/dist/admin/pages/EditView/components/InputRenderer.mjs +18 -15
  122. package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
  123. package/dist/admin/pages/EditView/utils/data.js +128 -0
  124. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  125. package/dist/admin/pages/EditView/utils/data.mjs +128 -1
  126. package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
  127. package/dist/admin/pages/ListView/ListViewPage.js +221 -167
  128. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  129. package/dist/admin/pages/ListView/ListViewPage.mjs +222 -168
  130. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  131. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +2 -1
  132. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
  133. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +2 -1
  134. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -1
  135. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +12 -2
  136. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
  137. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs +12 -2
  138. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
  139. package/dist/admin/pages/ListView/components/Filters.js +4 -1
  140. package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
  141. package/dist/admin/pages/ListView/components/Filters.mjs +4 -1
  142. package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
  143. package/dist/admin/pages/ListView/components/TableActions.js +13 -3
  144. package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
  145. package/dist/admin/pages/ListView/components/TableActions.mjs +13 -3
  146. package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
  147. package/dist/admin/preview/components/InputPopover.js +73 -0
  148. package/dist/admin/preview/components/InputPopover.js.map +1 -0
  149. package/dist/admin/preview/components/InputPopover.mjs +70 -0
  150. package/dist/admin/preview/components/InputPopover.mjs.map +1 -0
  151. package/dist/admin/preview/components/PreviewHeader.js +3 -6
  152. package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
  153. package/dist/admin/preview/components/PreviewHeader.mjs +3 -6
  154. package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -1
  155. package/dist/admin/preview/components/PreviewSidePanel.js +31 -4
  156. package/dist/admin/preview/components/PreviewSidePanel.js.map +1 -1
  157. package/dist/admin/preview/components/PreviewSidePanel.mjs +32 -5
  158. package/dist/admin/preview/components/PreviewSidePanel.mjs.map +1 -1
  159. package/dist/admin/preview/hooks/usePreviewInputManager.js +67 -0
  160. package/dist/admin/preview/hooks/usePreviewInputManager.js.map +1 -0
  161. package/dist/admin/preview/hooks/usePreviewInputManager.mjs +46 -0
  162. package/dist/admin/preview/hooks/usePreviewInputManager.mjs.map +1 -0
  163. package/dist/admin/preview/pages/Preview.js +172 -78
  164. package/dist/admin/preview/pages/Preview.js.map +1 -1
  165. package/dist/admin/preview/pages/Preview.mjs +174 -80
  166. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  167. package/dist/admin/preview/utils/constants.js +22 -0
  168. package/dist/admin/preview/utils/constants.js.map +1 -0
  169. package/dist/admin/preview/utils/constants.mjs +19 -0
  170. package/dist/admin/preview/utils/constants.mjs.map +1 -0
  171. package/dist/admin/preview/utils/getSendMessage.js +22 -0
  172. package/dist/admin/preview/utils/getSendMessage.js.map +1 -0
  173. package/dist/admin/preview/utils/getSendMessage.mjs +20 -0
  174. package/dist/admin/preview/utils/getSendMessage.mjs.map +1 -0
  175. package/dist/admin/preview/utils/previewScript.js +450 -0
  176. package/dist/admin/preview/utils/previewScript.js.map +1 -0
  177. package/dist/admin/preview/utils/previewScript.mjs +448 -0
  178. package/dist/admin/preview/utils/previewScript.mjs.map +1 -0
  179. package/dist/admin/services/api.js +4 -1
  180. package/dist/admin/services/api.js.map +1 -1
  181. package/dist/admin/services/api.mjs +4 -1
  182. package/dist/admin/services/api.mjs.map +1 -1
  183. package/dist/admin/services/documents.js +42 -16
  184. package/dist/admin/services/documents.js.map +1 -1
  185. package/dist/admin/services/documents.mjs +42 -16
  186. package/dist/admin/services/documents.mjs.map +1 -1
  187. package/dist/admin/services/homepage.js +30 -0
  188. package/dist/admin/services/homepage.js.map +1 -0
  189. package/dist/admin/services/homepage.mjs +28 -0
  190. package/dist/admin/services/homepage.mjs.map +1 -0
  191. package/dist/admin/src/components/ConfigurationForm/Fields.d.ts +6 -4
  192. package/dist/admin/src/components/Widgets.d.ts +4 -0
  193. package/dist/admin/src/content-manager.d.ts +0 -3
  194. package/dist/admin/src/exports.d.ts +1 -0
  195. package/dist/admin/src/features/DocumentRBAC.d.ts +1 -1
  196. package/dist/admin/src/history/pages/History.d.ts +1 -1
  197. package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
  198. package/dist/admin/src/hooks/useDocumentActions.d.ts +1 -0
  199. package/dist/admin/src/hooks/useDocumentContext.d.ts +30 -0
  200. package/dist/admin/src/pages/EditView/components/Blocker.d.ts +5 -0
  201. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.d.ts +2 -2
  202. package/dist/admin/src/pages/EditView/components/FormInputs/ComponentContext.d.ts +1 -1
  203. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.d.ts +1 -1
  204. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +73 -7
  205. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/Relations.d.ts +1 -0
  206. package/dist/admin/src/pages/EditView/components/FormInputs/UID.d.ts +1 -0
  207. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +7 -8
  208. package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +2 -2
  209. package/dist/admin/src/pages/EditView/utils/data.d.ts +19 -1
  210. package/dist/admin/src/preview/components/InputPopover.d.ts +6 -0
  211. package/dist/admin/src/preview/hooks/usePreviewInputManager.d.ts +4 -0
  212. package/dist/admin/src/preview/pages/Preview.d.ts +10 -1
  213. package/dist/admin/src/preview/services/preview.d.ts +1 -1
  214. package/dist/admin/src/preview/utils/constants.d.ts +20 -0
  215. package/dist/admin/src/preview/utils/getSendMessage.d.ts +11 -0
  216. package/dist/admin/src/preview/utils/previewScript.d.ts +23 -0
  217. package/dist/admin/src/services/api.d.ts +1 -1
  218. package/dist/admin/src/services/components.d.ts +2 -2
  219. package/dist/admin/src/services/contentTypes.d.ts +3 -3
  220. package/dist/admin/src/services/documents.d.ts +23 -17
  221. package/dist/admin/src/services/homepage.d.ts +5 -0
  222. package/dist/admin/src/services/init.d.ts +1 -1
  223. package/dist/admin/src/services/relations.d.ts +2 -2
  224. package/dist/admin/src/services/uid.d.ts +3 -3
  225. package/dist/admin/src/utils/api.d.ts +1 -1
  226. package/dist/admin/src/utils/validation.d.ts +1 -0
  227. package/dist/admin/translations/en.json.js +10 -1
  228. package/dist/admin/translations/en.json.js.map +1 -1
  229. package/dist/admin/translations/en.json.mjs +10 -1
  230. package/dist/admin/translations/en.json.mjs.map +1 -1
  231. package/dist/admin/translations/es.json.js +6 -2
  232. package/dist/admin/translations/es.json.js.map +1 -1
  233. package/dist/admin/translations/es.json.mjs +6 -2
  234. package/dist/admin/translations/es.json.mjs.map +1 -1
  235. package/dist/admin/translations/fr.json.js +11 -2
  236. package/dist/admin/translations/fr.json.js.map +1 -1
  237. package/dist/admin/translations/fr.json.mjs +11 -2
  238. package/dist/admin/translations/fr.json.mjs.map +1 -1
  239. package/dist/admin/translations/ru.json.js +235 -226
  240. package/dist/admin/translations/ru.json.js.map +1 -1
  241. package/dist/admin/translations/ru.json.mjs +230 -226
  242. package/dist/admin/translations/ru.json.mjs.map +1 -1
  243. package/dist/admin/utils/api.js +1 -1
  244. package/dist/admin/utils/api.js.map +1 -1
  245. package/dist/admin/utils/api.mjs +1 -1
  246. package/dist/admin/utils/api.mjs.map +1 -1
  247. package/dist/admin/utils/validation.js +19 -7
  248. package/dist/admin/utils/validation.js.map +1 -1
  249. package/dist/admin/utils/validation.mjs +19 -7
  250. package/dist/admin/utils/validation.mjs.map +1 -1
  251. package/dist/server/controllers/content-types.js +11 -1
  252. package/dist/server/controllers/content-types.js.map +1 -1
  253. package/dist/server/controllers/content-types.mjs +11 -1
  254. package/dist/server/controllers/content-types.mjs.map +1 -1
  255. package/dist/server/controllers/index.js +3 -1
  256. package/dist/server/controllers/index.js.map +1 -1
  257. package/dist/server/controllers/index.mjs +3 -1
  258. package/dist/server/controllers/index.mjs.map +1 -1
  259. package/dist/server/controllers/relations.js +2 -2
  260. package/dist/server/controllers/relations.js.map +1 -1
  261. package/dist/server/controllers/relations.mjs +2 -2
  262. package/dist/server/controllers/relations.mjs.map +1 -1
  263. package/dist/server/controllers/validation/index.js +14 -2
  264. package/dist/server/controllers/validation/index.js.map +1 -1
  265. package/dist/server/controllers/validation/index.mjs +14 -2
  266. package/dist/server/controllers/validation/index.mjs.map +1 -1
  267. package/dist/server/history/services/lifecycles.js +23 -19
  268. package/dist/server/history/services/lifecycles.js.map +1 -1
  269. package/dist/server/history/services/lifecycles.mjs +23 -19
  270. package/dist/server/history/services/lifecycles.mjs.map +1 -1
  271. package/dist/server/homepage/controllers/homepage.js +62 -0
  272. package/dist/server/homepage/controllers/homepage.js.map +1 -0
  273. package/dist/server/homepage/controllers/homepage.mjs +41 -0
  274. package/dist/server/homepage/controllers/homepage.mjs.map +1 -0
  275. package/dist/server/homepage/controllers/index.js +10 -0
  276. package/dist/server/homepage/controllers/index.js.map +1 -0
  277. package/dist/server/homepage/controllers/index.mjs +8 -0
  278. package/dist/server/homepage/controllers/index.mjs.map +1 -0
  279. package/dist/server/homepage/index.js +14 -0
  280. package/dist/server/homepage/index.js.map +1 -0
  281. package/dist/server/homepage/index.mjs +12 -0
  282. package/dist/server/homepage/index.mjs.map +1 -0
  283. package/dist/server/homepage/routes/homepage.js +36 -0
  284. package/dist/server/homepage/routes/homepage.js.map +1 -0
  285. package/dist/server/homepage/routes/homepage.mjs +34 -0
  286. package/dist/server/homepage/routes/homepage.mjs.map +1 -0
  287. package/dist/server/homepage/routes/index.js +13 -0
  288. package/dist/server/homepage/routes/index.js.map +1 -0
  289. package/dist/server/homepage/routes/index.mjs +11 -0
  290. package/dist/server/homepage/routes/index.mjs.map +1 -0
  291. package/dist/server/homepage/services/homepage.js +197 -0
  292. package/dist/server/homepage/services/homepage.js.map +1 -0
  293. package/dist/server/homepage/services/homepage.mjs +195 -0
  294. package/dist/server/homepage/services/homepage.mjs.map +1 -0
  295. package/dist/server/homepage/services/index.js +10 -0
  296. package/dist/server/homepage/services/index.js.map +1 -0
  297. package/dist/server/homepage/services/index.mjs +8 -0
  298. package/dist/server/homepage/services/index.mjs.map +1 -0
  299. package/dist/server/preview/services/preview-config.js +5 -1
  300. package/dist/server/preview/services/preview-config.js.map +1 -1
  301. package/dist/server/preview/services/preview-config.mjs +5 -1
  302. package/dist/server/preview/services/preview-config.mjs.map +1 -1
  303. package/dist/server/preview/services/preview.js +4 -1
  304. package/dist/server/preview/services/preview.js.map +1 -1
  305. package/dist/server/preview/services/preview.mjs +4 -1
  306. package/dist/server/preview/services/preview.mjs.map +1 -1
  307. package/dist/server/routes/index.js +3 -1
  308. package/dist/server/routes/index.js.map +1 -1
  309. package/dist/server/routes/index.mjs +3 -1
  310. package/dist/server/routes/index.mjs.map +1 -1
  311. package/dist/server/services/data-mapper.js +4 -1
  312. package/dist/server/services/data-mapper.js.map +1 -1
  313. package/dist/server/services/data-mapper.mjs +4 -1
  314. package/dist/server/services/data-mapper.mjs.map +1 -1
  315. package/dist/server/services/document-manager.js +8 -1
  316. package/dist/server/services/document-manager.js.map +1 -1
  317. package/dist/server/services/document-manager.mjs +8 -1
  318. package/dist/server/services/document-manager.mjs.map +1 -1
  319. package/dist/server/services/document-metadata.js +3 -1
  320. package/dist/server/services/document-metadata.js.map +1 -1
  321. package/dist/server/services/document-metadata.mjs +3 -1
  322. package/dist/server/services/document-metadata.mjs.map +1 -1
  323. package/dist/server/services/index.js +3 -1
  324. package/dist/server/services/index.js.map +1 -1
  325. package/dist/server/services/index.mjs +3 -1
  326. package/dist/server/services/index.mjs.map +1 -1
  327. package/dist/server/services/utils/configuration/attributes.js +1 -1
  328. package/dist/server/services/utils/configuration/attributes.js.map +1 -1
  329. package/dist/server/services/utils/configuration/attributes.mjs +1 -1
  330. package/dist/server/services/utils/configuration/attributes.mjs.map +1 -1
  331. package/dist/server/services/utils/configuration/layouts.js +1 -1
  332. package/dist/server/services/utils/configuration/layouts.js.map +1 -1
  333. package/dist/server/services/utils/configuration/layouts.mjs +1 -1
  334. package/dist/server/services/utils/configuration/layouts.mjs.map +1 -1
  335. package/dist/server/services/utils/configuration/metadatas.js +8 -0
  336. package/dist/server/services/utils/configuration/metadatas.js.map +1 -1
  337. package/dist/server/services/utils/configuration/metadatas.mjs +8 -0
  338. package/dist/server/services/utils/configuration/metadatas.mjs.map +1 -1
  339. package/dist/server/services/utils/populate.js +11 -0
  340. package/dist/server/services/utils/populate.js.map +1 -1
  341. package/dist/server/services/utils/populate.mjs +11 -0
  342. package/dist/server/services/utils/populate.mjs.map +1 -1
  343. package/dist/server/src/controllers/content-types.d.ts.map +1 -1
  344. package/dist/server/src/controllers/index.d.ts.map +1 -1
  345. package/dist/server/src/controllers/validation/index.d.ts +6 -1
  346. package/dist/server/src/controllers/validation/index.d.ts.map +1 -1
  347. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  348. package/dist/server/src/homepage/controllers/homepage.d.ts +8 -0
  349. package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -0
  350. package/dist/server/src/homepage/controllers/index.d.ts +2 -0
  351. package/dist/server/src/homepage/controllers/index.d.ts.map +1 -0
  352. package/dist/server/src/homepage/index.d.ts +23 -0
  353. package/dist/server/src/homepage/index.d.ts.map +1 -0
  354. package/dist/server/src/homepage/routes/homepage.d.ts +4 -0
  355. package/dist/server/src/homepage/routes/homepage.d.ts.map +1 -0
  356. package/dist/server/src/homepage/routes/index.d.ts +8 -0
  357. package/dist/server/src/homepage/routes/index.d.ts.map +1 -0
  358. package/dist/server/src/homepage/services/homepage.d.ts +14 -0
  359. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -0
  360. package/dist/server/src/homepage/services/index.d.ts +16 -0
  361. package/dist/server/src/homepage/services/index.d.ts.map +1 -0
  362. package/dist/server/src/index.d.ts +14 -0
  363. package/dist/server/src/index.d.ts.map +1 -1
  364. package/dist/server/src/preview/services/index.d.ts +1 -0
  365. package/dist/server/src/preview/services/index.d.ts.map +1 -1
  366. package/dist/server/src/preview/services/preview-config.d.ts +1 -0
  367. package/dist/server/src/preview/services/preview-config.d.ts.map +1 -1
  368. package/dist/server/src/preview/services/preview.d.ts.map +1 -1
  369. package/dist/server/src/preview/utils.d.ts +1 -0
  370. package/dist/server/src/preview/utils.d.ts.map +1 -1
  371. package/dist/server/src/routes/index.d.ts +1 -0
  372. package/dist/server/src/routes/index.d.ts.map +1 -1
  373. package/dist/server/src/services/data-mapper.d.ts.map +1 -1
  374. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  375. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  376. package/dist/server/src/services/index.d.ts +13 -0
  377. package/dist/server/src/services/index.d.ts.map +1 -1
  378. package/dist/server/src/services/utils/configuration/metadatas.d.ts.map +1 -1
  379. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  380. package/dist/shared/contracts/collection-types.d.ts +0 -1
  381. package/dist/shared/contracts/collection-types.d.ts.map +1 -1
  382. package/dist/shared/contracts/homepage.d.ts +38 -0
  383. package/dist/shared/contracts/homepage.d.ts.map +1 -0
  384. package/package.json +12 -10
  385. package/dist/admin/features/DocumentContext.js +0 -71
  386. package/dist/admin/features/DocumentContext.js.map +0 -1
  387. package/dist/admin/features/DocumentContext.mjs +0 -49
  388. package/dist/admin/features/DocumentContext.mjs.map +0 -1
  389. package/dist/admin/src/features/DocumentContext.d.ts +0 -53
@@ -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":"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"}
@@ -0,0 +1,67 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var strapiAdmin = require('@strapi/admin/strapi-admin');
5
+ var InputPopover = require('../components/InputPopover.js');
6
+ var Preview = require('../pages/Preview.js');
7
+ var constants = require('../utils/constants.js');
8
+ var getSendMessage = require('../utils/getSendMessage.js');
9
+
10
+ function _interopNamespaceDefault(e) {
11
+ var n = Object.create(null);
12
+ if (e) {
13
+ Object.keys(e).forEach(function (k) {
14
+ if (k !== 'default') {
15
+ var d = Object.getOwnPropertyDescriptor(e, k);
16
+ Object.defineProperty(n, k, d.get ? d : {
17
+ enumerable: true,
18
+ get: function () { return e[k]; }
19
+ });
20
+ }
21
+ });
22
+ }
23
+ n.default = e;
24
+ return Object.freeze(n);
25
+ }
26
+
27
+ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
28
+
29
+ function usePreviewInputManager(name) {
30
+ const iframe = Preview.usePreviewContext('usePreviewInputManager', (state)=>state.iframeRef, false);
31
+ const setPopoverField = Preview.usePreviewContext('usePreviewInputManager', (state)=>state.setPopoverField, false);
32
+ const hasInputPopoverParent = InputPopover.useHasInputPopoverParent();
33
+ const { value } = strapiAdmin.useField(name);
34
+ React__namespace.useEffect(()=>{
35
+ if (!iframe) {
36
+ return;
37
+ }
38
+ const sendMessage = getSendMessage.getSendMessage(iframe);
39
+ sendMessage(constants.INTERNAL_EVENTS.STRAPI_FIELD_CHANGE, {
40
+ field: name,
41
+ value
42
+ });
43
+ }, [
44
+ name,
45
+ value,
46
+ iframe
47
+ ]);
48
+ const sendMessage = getSendMessage.getSendMessage(iframe);
49
+ return {
50
+ onFocus: ()=>{
51
+ if (hasInputPopoverParent) return;
52
+ sendMessage(constants.INTERNAL_EVENTS.STRAPI_FIELD_FOCUS, {
53
+ field: name
54
+ });
55
+ },
56
+ onBlur: ()=>{
57
+ if (hasInputPopoverParent) return;
58
+ setPopoverField?.(null);
59
+ sendMessage(constants.INTERNAL_EVENTS.STRAPI_FIELD_BLUR, {
60
+ field: name
61
+ });
62
+ }
63
+ };
64
+ }
65
+
66
+ exports.usePreviewInputManager = usePreviewInputManager;
67
+ //# sourceMappingURL=usePreviewInputManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePreviewInputManager.js","sources":["../../../../admin/src/preview/hooks/usePreviewInputManager.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useField } from '@strapi/admin/strapi-admin';\n\nimport { useHasInputPopoverParent } from '../components/InputPopover';\nimport { usePreviewContext } from '../pages/Preview';\nimport { INTERNAL_EVENTS } from '../utils/constants';\nimport { getSendMessage } from '../utils/getSendMessage';\n\ntype PreviewInputProps = Pick<\n Required<React.InputHTMLAttributes<HTMLInputElement>>,\n 'onFocus' | 'onBlur'\n>;\n\nexport function usePreviewInputManager(name: string): PreviewInputProps {\n const iframe = usePreviewContext('usePreviewInputManager', (state) => state.iframeRef, false);\n const setPopoverField = usePreviewContext(\n 'usePreviewInputManager',\n (state) => state.setPopoverField,\n false\n );\n const hasInputPopoverParent = useHasInputPopoverParent();\n const { value } = useField(name);\n\n React.useEffect(() => {\n if (!iframe) {\n return;\n }\n\n const sendMessage = getSendMessage(iframe);\n sendMessage(INTERNAL_EVENTS.STRAPI_FIELD_CHANGE, { field: name, value });\n }, [name, value, iframe]);\n\n const sendMessage = getSendMessage(iframe);\n\n return {\n onFocus: () => {\n if (hasInputPopoverParent) return;\n\n sendMessage(INTERNAL_EVENTS.STRAPI_FIELD_FOCUS, { field: name });\n },\n onBlur: () => {\n if (hasInputPopoverParent) return;\n\n setPopoverField?.(null);\n sendMessage(INTERNAL_EVENTS.STRAPI_FIELD_BLUR, { field: name });\n },\n };\n}\n"],"names":["usePreviewInputManager","name","iframe","usePreviewContext","state","iframeRef","setPopoverField","hasInputPopoverParent","useHasInputPopoverParent","value","useField","React","useEffect","sendMessage","getSendMessage","INTERNAL_EVENTS","STRAPI_FIELD_CHANGE","field","onFocus","STRAPI_FIELD_FOCUS","onBlur","STRAPI_FIELD_BLUR"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcO,SAASA,uBAAuBC,IAAY,EAAA;AACjD,IAAA,MAAMC,SAASC,yBAAkB,CAAA,wBAAA,EAA0B,CAACC,KAAUA,GAAAA,KAAAA,CAAMC,SAAS,EAAE,KAAA,CAAA;AACvF,IAAA,MAAMC,kBAAkBH,yBACtB,CAAA,wBAAA,EACA,CAACC,KAAUA,GAAAA,KAAAA,CAAME,eAAe,EAChC,KAAA,CAAA;AAEF,IAAA,MAAMC,qBAAwBC,GAAAA,qCAAAA,EAAAA;AAC9B,IAAA,MAAM,EAAEC,KAAK,EAAE,GAAGC,oBAAST,CAAAA,IAAAA,CAAAA;AAE3BU,IAAAA,gBAAAA,CAAMC,SAAS,CAAC,IAAA;AACd,QAAA,IAAI,CAACV,MAAQ,EAAA;AACX,YAAA;AACF;AAEA,QAAA,MAAMW,cAAcC,6BAAeZ,CAAAA,MAAAA,CAAAA;QACnCW,WAAYE,CAAAA,yBAAAA,CAAgBC,mBAAmB,EAAE;YAAEC,KAAOhB,EAAAA,IAAAA;AAAMQ,YAAAA;AAAM,SAAA,CAAA;KACrE,EAAA;AAACR,QAAAA,IAAAA;AAAMQ,QAAAA,KAAAA;AAAOP,QAAAA;AAAO,KAAA,CAAA;AAExB,IAAA,MAAMW,cAAcC,6BAAeZ,CAAAA,MAAAA,CAAAA;IAEnC,OAAO;QACLgB,OAAS,EAAA,IAAA;AACP,YAAA,IAAIX,qBAAuB,EAAA;YAE3BM,WAAYE,CAAAA,yBAAAA,CAAgBI,kBAAkB,EAAE;gBAAEF,KAAOhB,EAAAA;AAAK,aAAA,CAAA;AAChE,SAAA;QACAmB,MAAQ,EAAA,IAAA;AACN,YAAA,IAAIb,qBAAuB,EAAA;YAE3BD,eAAkB,GAAA,IAAA,CAAA;YAClBO,WAAYE,CAAAA,yBAAAA,CAAgBM,iBAAiB,EAAE;gBAAEJ,KAAOhB,EAAAA;AAAK,aAAA,CAAA;AAC/D;AACF,KAAA;AACF;;;;"}
@@ -0,0 +1,46 @@
1
+ import * as React from 'react';
2
+ import { useField } from '@strapi/admin/strapi-admin';
3
+ import { useHasInputPopoverParent } from '../components/InputPopover.mjs';
4
+ import { usePreviewContext } from '../pages/Preview.mjs';
5
+ import { INTERNAL_EVENTS } from '../utils/constants.mjs';
6
+ import { getSendMessage } from '../utils/getSendMessage.mjs';
7
+
8
+ function usePreviewInputManager(name) {
9
+ const iframe = usePreviewContext('usePreviewInputManager', (state)=>state.iframeRef, false);
10
+ const setPopoverField = usePreviewContext('usePreviewInputManager', (state)=>state.setPopoverField, false);
11
+ const hasInputPopoverParent = useHasInputPopoverParent();
12
+ const { value } = useField(name);
13
+ React.useEffect(()=>{
14
+ if (!iframe) {
15
+ return;
16
+ }
17
+ const sendMessage = getSendMessage(iframe);
18
+ sendMessage(INTERNAL_EVENTS.STRAPI_FIELD_CHANGE, {
19
+ field: name,
20
+ value
21
+ });
22
+ }, [
23
+ name,
24
+ value,
25
+ iframe
26
+ ]);
27
+ const sendMessage = getSendMessage(iframe);
28
+ return {
29
+ onFocus: ()=>{
30
+ if (hasInputPopoverParent) return;
31
+ sendMessage(INTERNAL_EVENTS.STRAPI_FIELD_FOCUS, {
32
+ field: name
33
+ });
34
+ },
35
+ onBlur: ()=>{
36
+ if (hasInputPopoverParent) return;
37
+ setPopoverField?.(null);
38
+ sendMessage(INTERNAL_EVENTS.STRAPI_FIELD_BLUR, {
39
+ field: name
40
+ });
41
+ }
42
+ };
43
+ }
44
+
45
+ export { usePreviewInputManager };
46
+ //# sourceMappingURL=usePreviewInputManager.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePreviewInputManager.mjs","sources":["../../../../admin/src/preview/hooks/usePreviewInputManager.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useField } from '@strapi/admin/strapi-admin';\n\nimport { useHasInputPopoverParent } from '../components/InputPopover';\nimport { usePreviewContext } from '../pages/Preview';\nimport { INTERNAL_EVENTS } from '../utils/constants';\nimport { getSendMessage } from '../utils/getSendMessage';\n\ntype PreviewInputProps = Pick<\n Required<React.InputHTMLAttributes<HTMLInputElement>>,\n 'onFocus' | 'onBlur'\n>;\n\nexport function usePreviewInputManager(name: string): PreviewInputProps {\n const iframe = usePreviewContext('usePreviewInputManager', (state) => state.iframeRef, false);\n const setPopoverField = usePreviewContext(\n 'usePreviewInputManager',\n (state) => state.setPopoverField,\n false\n );\n const hasInputPopoverParent = useHasInputPopoverParent();\n const { value } = useField(name);\n\n React.useEffect(() => {\n if (!iframe) {\n return;\n }\n\n const sendMessage = getSendMessage(iframe);\n sendMessage(INTERNAL_EVENTS.STRAPI_FIELD_CHANGE, { field: name, value });\n }, [name, value, iframe]);\n\n const sendMessage = getSendMessage(iframe);\n\n return {\n onFocus: () => {\n if (hasInputPopoverParent) return;\n\n sendMessage(INTERNAL_EVENTS.STRAPI_FIELD_FOCUS, { field: name });\n },\n onBlur: () => {\n if (hasInputPopoverParent) return;\n\n setPopoverField?.(null);\n sendMessage(INTERNAL_EVENTS.STRAPI_FIELD_BLUR, { field: name });\n },\n };\n}\n"],"names":["usePreviewInputManager","name","iframe","usePreviewContext","state","iframeRef","setPopoverField","hasInputPopoverParent","useHasInputPopoverParent","value","useField","React","useEffect","sendMessage","getSendMessage","INTERNAL_EVENTS","STRAPI_FIELD_CHANGE","field","onFocus","STRAPI_FIELD_FOCUS","onBlur","STRAPI_FIELD_BLUR"],"mappings":";;;;;;;AAcO,SAASA,uBAAuBC,IAAY,EAAA;AACjD,IAAA,MAAMC,SAASC,iBAAkB,CAAA,wBAAA,EAA0B,CAACC,KAAUA,GAAAA,KAAAA,CAAMC,SAAS,EAAE,KAAA,CAAA;AACvF,IAAA,MAAMC,kBAAkBH,iBACtB,CAAA,wBAAA,EACA,CAACC,KAAUA,GAAAA,KAAAA,CAAME,eAAe,EAChC,KAAA,CAAA;AAEF,IAAA,MAAMC,qBAAwBC,GAAAA,wBAAAA,EAAAA;AAC9B,IAAA,MAAM,EAAEC,KAAK,EAAE,GAAGC,QAAST,CAAAA,IAAAA,CAAAA;AAE3BU,IAAAA,KAAAA,CAAMC,SAAS,CAAC,IAAA;AACd,QAAA,IAAI,CAACV,MAAQ,EAAA;AACX,YAAA;AACF;AAEA,QAAA,MAAMW,cAAcC,cAAeZ,CAAAA,MAAAA,CAAAA;QACnCW,WAAYE,CAAAA,eAAAA,CAAgBC,mBAAmB,EAAE;YAAEC,KAAOhB,EAAAA,IAAAA;AAAMQ,YAAAA;AAAM,SAAA,CAAA;KACrE,EAAA;AAACR,QAAAA,IAAAA;AAAMQ,QAAAA,KAAAA;AAAOP,QAAAA;AAAO,KAAA,CAAA;AAExB,IAAA,MAAMW,cAAcC,cAAeZ,CAAAA,MAAAA,CAAAA;IAEnC,OAAO;QACLgB,OAAS,EAAA,IAAA;AACP,YAAA,IAAIX,qBAAuB,EAAA;YAE3BM,WAAYE,CAAAA,eAAAA,CAAgBI,kBAAkB,EAAE;gBAAEF,KAAOhB,EAAAA;AAAK,aAAA,CAAA;AAChE,SAAA;QACAmB,MAAQ,EAAA,IAAA;AACN,YAAA,IAAIb,qBAAuB,EAAA;YAE3BD,eAAkB,GAAA,IAAA,CAAA;YAClBO,WAAYE,CAAAA,eAAAA,CAAgBM,iBAAiB,EAAE;gBAAEJ,KAAOhB,EAAAA;AAAK,aAAA,CAAA;AAC/D;AACF,KAAA;AACF;;;;"}
@@ -9,15 +9,20 @@ var reactIntl = require('react-intl');
9
9
  var reactRouterDom = require('react-router-dom');
10
10
  var styledComponents = require('styled-components');
11
11
  var collections = require('../../constants/collections.js');
12
- var DocumentContext = require('../../features/DocumentContext.js');
13
12
  var DocumentRBAC = require('../../features/DocumentRBAC.js');
14
13
  var useDocument = require('../../hooks/useDocument.js');
15
14
  var useDocumentLayout = require('../../hooks/useDocumentLayout.js');
15
+ var Blocker = require('../../pages/EditView/components/Blocker.js');
16
16
  var FormLayout = require('../../pages/EditView/components/FormLayout.js');
17
+ var data = require('../../pages/EditView/utils/data.js');
17
18
  var api = require('../../utils/api.js');
18
19
  var validation = require('../../utils/validation.js');
20
+ var InputPopover = require('../components/InputPopover.js');
19
21
  var PreviewHeader = require('../components/PreviewHeader.js');
20
22
  var preview = require('../services/preview.js');
23
+ var constants = require('../utils/constants.js');
24
+ var getSendMessage = require('../utils/getSendMessage.js');
25
+ var previewScript = require('../utils/previewScript.js');
21
26
 
22
27
  function _interopNamespaceDefault(e) {
23
28
  var n = Object.create(null);
@@ -38,12 +43,34 @@ function _interopNamespaceDefault(e) {
38
43
 
39
44
  var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
40
45
 
46
+ /* -------------------------------------------------------------------------------------------------
47
+ * Constants
48
+ * -----------------------------------------------------------------------------------------------*/ const DEVICES = [
49
+ {
50
+ name: 'desktop',
51
+ label: {
52
+ id: 'content-manager.preview.device.desktop',
53
+ defaultMessage: 'Desktop'
54
+ },
55
+ width: '100%',
56
+ height: '100%'
57
+ },
58
+ {
59
+ name: 'mobile',
60
+ label: {
61
+ id: 'content-manager.preview.device.mobile',
62
+ defaultMessage: 'Mobile'
63
+ },
64
+ width: '375px',
65
+ height: '667px'
66
+ }
67
+ ];
41
68
  const [PreviewProvider, usePreviewContext] = strapiAdmin.createContext('PreviewPage');
42
69
  /* -------------------------------------------------------------------------------------------------
43
70
  * PreviewPage
44
71
  * -----------------------------------------------------------------------------------------------*/ const AnimatedArrow = styledComponents.styled(Icons.ArrowLineLeft)`
45
72
  will-change: transform;
46
- rotate: ${(props)=>props.isSideEditorOpen ? '0deg' : '180deg'};
73
+ rotate: ${(props)=>props.$isSideEditorOpen ? '0deg' : '180deg'};
47
74
  transition: rotate 0.2s ease-in-out;
48
75
  `;
49
76
  const PreviewPage = ()=>{
@@ -51,12 +78,41 @@ const PreviewPage = ()=>{
51
78
  const { formatMessage } = reactIntl.useIntl();
52
79
  const iframeRef = React__namespace.useRef(null);
53
80
  const [isSideEditorOpen, setIsSideEditorOpen] = React__namespace.useState(true);
81
+ const [popoverField, setPopoverField] = React__namespace.useState(null);
54
82
  // Read all the necessary data from the URL to find the right preview URL
55
83
  const { slug: model, id: documentId, collectionType } = reactRouterDom.useParams();
56
84
  const [{ query }] = strapiAdmin.useQueryParams();
57
85
  const params = React__namespace.useMemo(()=>api.buildValidParams(query), [
58
86
  query
59
87
  ]);
88
+ const [deviceName, setDeviceName] = React__namespace.useState(DEVICES[0].name);
89
+ const device = DEVICES.find((d)=>d.name === deviceName) ?? DEVICES[0];
90
+ // Listen for ready message from iframe before injecting script
91
+ React__namespace.useEffect(()=>{
92
+ const handleMessage = (event)=>{
93
+ // Only listen to events from the preview iframe
94
+ if (iframeRef.current) {
95
+ const previewOrigin = new URL(iframeRef.current?.src).origin;
96
+ if (event.origin !== previewOrigin) {
97
+ return;
98
+ }
99
+ }
100
+ if (event.data?.type === constants.PUBLIC_EVENTS.PREVIEW_READY) {
101
+ const script = `(${previewScript.previewScript.toString()})()`;
102
+ const sendMessage = getSendMessage.getSendMessage(iframeRef);
103
+ sendMessage(constants.PUBLIC_EVENTS.STRAPI_SCRIPT, {
104
+ script
105
+ });
106
+ }
107
+ if (event.data?.type === constants.INTERNAL_EVENTS.STRAPI_FIELD_FOCUS_INTENT) {
108
+ setPopoverField?.(event.data.payload);
109
+ }
110
+ };
111
+ window.addEventListener('message', handleMessage);
112
+ return ()=>{
113
+ window.removeEventListener('message', handleMessage);
114
+ };
115
+ }, []);
60
116
  if (!collectionType) {
61
117
  throw new Error('Could not find collectionType in url params');
62
118
  }
@@ -85,7 +141,7 @@ const PreviewPage = ()=>{
85
141
  });
86
142
  const documentLayoutResponse = useDocumentLayout.useDocumentLayout(model);
87
143
  const isLoading = previewUrlResponse.isLoading || documentLayoutResponse.isLoading || documentResponse.isLoading;
88
- if (isLoading && !documentResponse.document?.documentId) {
144
+ if (isLoading && (!documentResponse.document?.documentId || previewUrlResponse.isLoading)) {
89
145
  return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.Loading, {});
90
146
  }
91
147
  const initialValues = documentResponse.getInitialFormValues();
@@ -97,11 +153,17 @@ const PreviewPage = ()=>{
97
153
  }
98
154
  const documentTitle = documentResponse.getTitle(documentLayoutResponse.edit.settings.mainField);
99
155
  const validateSync = (values, options)=>{
156
+ const { data: cleanedValues, removedAttributes } = data.handleInvisibleAttributes(values, {
157
+ schema: documentResponse.schema,
158
+ initialValues,
159
+ components: documentResponse.components
160
+ });
100
161
  const yupSchema = validation.createYupSchema(documentResponse.schema?.attributes, documentResponse.components, {
101
162
  status: documentResponse.document?.status,
163
+ removedAttributes,
102
164
  ...options
103
165
  });
104
- return yupSchema.validateSync(values, {
166
+ return yupSchema.validateSync(cleanedValues, {
105
167
  abortEarly: false
106
168
  });
107
169
  };
@@ -123,87 +185,86 @@ const PreviewPage = ()=>{
123
185
  contentType: documentTitle
124
186
  })
125
187
  }),
126
- /*#__PURE__*/ jsxRuntime.jsx(DocumentContext.DocumentContextProvider, {
127
- initialDocument: {
128
- documentId: documentId || '',
129
- model,
130
- collectionType
131
- },
188
+ /*#__PURE__*/ jsxRuntime.jsx(PreviewProvider, {
189
+ url: previewUrl,
190
+ document: documentResponse.document,
191
+ title: documentTitle,
192
+ meta: documentResponse.meta,
193
+ schema: documentResponse.schema,
194
+ layout: documentLayoutResponse.edit,
132
195
  onPreview: onPreview,
133
- children: /*#__PURE__*/ jsxRuntime.jsx(PreviewProvider, {
134
- url: previewUrl,
135
- document: documentResponse.document,
136
- title: documentTitle,
137
- meta: documentResponse.meta,
138
- schema: documentResponse.schema,
139
- layout: documentLayoutResponse.edit,
140
- children: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Form, {
141
- method: "PUT",
142
- disabled: query.status === 'published' && documentResponse && documentResponse.document.status === 'published',
143
- initialValues: documentResponse.getInitialFormValues(),
144
- initialErrors: location?.state?.forceValidation ? validateSync(initialValues, {}) : {},
196
+ iframeRef: iframeRef,
197
+ popoverField: popoverField,
198
+ setPopoverField: setPopoverField,
199
+ children: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Form, {
200
+ method: "PUT",
201
+ disabled: query.status === 'published' && documentResponse && documentResponse.document.status !== 'draft',
202
+ initialValues: documentResponse.getInitialFormValues(),
203
+ initialErrors: location?.state?.forceValidation ? validateSync(initialValues, {}) : {},
204
+ height: "100%",
205
+ validate: (values, options)=>{
206
+ const { data: cleanedValues, removedAttributes } = data.handleInvisibleAttributes(values, {
207
+ schema: documentResponse.schema,
208
+ initialValues,
209
+ components: documentResponse.components
210
+ });
211
+ const yupSchema = validation.createYupSchema(documentResponse.schema?.attributes, documentResponse.components, {
212
+ status: documentResponse.document?.status,
213
+ removedAttributes,
214
+ ...options
215
+ });
216
+ return yupSchema.validate(cleanedValues, {
217
+ abortEarly: false
218
+ });
219
+ },
220
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
221
+ direction: "column",
145
222
  height: "100%",
146
- validate: (values, options)=>{
147
- const yupSchema = validation.createYupSchema(documentResponse.schema?.attributes, documentResponse.components, {
148
- status: documentResponse.document?.status,
149
- ...options
150
- });
151
- return yupSchema.validate(values, {
152
- abortEarly: false
153
- });
154
- },
155
- children: ({ resetForm })=>/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
156
- direction: "column",
157
- height: "100%",
223
+ alignItems: "stretch",
224
+ children: [
225
+ /*#__PURE__*/ jsxRuntime.jsx(Blocker.Blocker, {}),
226
+ /*#__PURE__*/ jsxRuntime.jsx(PreviewHeader.PreviewHeader, {}),
227
+ /*#__PURE__*/ jsxRuntime.jsx(InputPopover.InputPopover, {
228
+ documentResponse: documentResponse
229
+ }),
230
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
231
+ flex: 1,
232
+ overflow: "auto",
158
233
  alignItems: "stretch",
159
234
  children: [
160
- /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Blocker, {
161
- onProceed: resetForm
235
+ hasAdvancedPreview && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
236
+ overflow: "auto",
237
+ width: isSideEditorOpen ? '50%' : 0,
238
+ borderWidth: "0 1px 0 0",
239
+ borderColor: "neutral150",
240
+ paddingTop: 6,
241
+ paddingBottom: 6,
242
+ // Remove horizontal padding when the editor is closed or it won't fully disappear
243
+ paddingLeft: isSideEditorOpen ? 6 : 0,
244
+ paddingRight: isSideEditorOpen ? 6 : 0,
245
+ transition: "all 0.2s ease-in-out",
246
+ children: /*#__PURE__*/ jsxRuntime.jsx(FormLayout.FormLayout, {
247
+ layout: documentLayoutResponse.edit.layout,
248
+ document: documentResponse,
249
+ hasBackground: false
250
+ })
162
251
  }),
163
- /*#__PURE__*/ jsxRuntime.jsx(PreviewHeader.PreviewHeader, {}),
164
252
  /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
165
- flex: 1,
166
- overflow: "auto",
253
+ direction: "column",
167
254
  alignItems: "stretch",
255
+ flex: 1,
256
+ height: "100%",
257
+ overflow: "hidden",
168
258
  children: [
169
- hasAdvancedPreview && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
170
- overflow: "auto",
171
- width: isSideEditorOpen ? '50%' : 0,
172
- borderWidth: "0 1px 0 0",
259
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
260
+ direction: "row",
261
+ background: "neutral0",
262
+ padding: 2,
263
+ borderWidth: "0 0 1px 0",
173
264
  borderColor: "neutral150",
174
- paddingTop: 6,
175
- paddingBottom: 6,
176
- // Remove horizontal padding when the editor is closed or it won't fully disappear
177
- paddingLeft: isSideEditorOpen ? 6 : 0,
178
- paddingRight: isSideEditorOpen ? 6 : 0,
179
- transition: "all 0.2s ease-in-out",
180
- children: /*#__PURE__*/ jsxRuntime.jsx(FormLayout.FormLayout, {
181
- layout: documentLayoutResponse.edit.layout,
182
- document: documentResponse,
183
- hasBackground: false
184
- })
185
- }),
186
- /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Box, {
187
- position: "relative",
188
- flex: 1,
189
- height: "100%",
190
- overflow: "hidden",
191
265
  children: [
192
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
193
- "data-testid": "preview-iframe",
194
- ref: iframeRef,
195
- src: previewUrl,
196
- title: formatMessage({
197
- id: 'content-manager.preview.panel.title',
198
- defaultMessage: 'Preview'
199
- }),
200
- width: "100%",
201
- height: "100%",
202
- borderWidth: 0,
203
- tag: "iframe"
204
- }, previewUrl),
205
266
  hasAdvancedPreview && /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
206
- variant: "tertiary",
267
+ variant: "ghost",
207
268
  label: formatMessage(isSideEditorOpen ? {
208
269
  id: 'content-manager.preview.content.close-editor',
209
270
  defaultMessage: 'Close editor'
@@ -212,19 +273,52 @@ const PreviewPage = ()=>{
212
273
  defaultMessage: 'Open editor'
213
274
  }),
214
275
  onClick: ()=>setIsSideEditorOpen((prev)=>!prev),
215
- position: "absolute",
216
- top: 2,
217
- left: 2,
218
276
  children: /*#__PURE__*/ jsxRuntime.jsx(AnimatedArrow, {
219
- isSideEditorOpen: isSideEditorOpen
277
+ $isSideEditorOpen: isSideEditorOpen
278
+ })
279
+ }),
280
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
281
+ justifyContent: "center",
282
+ flex: 1,
283
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelect, {
284
+ value: deviceName,
285
+ onChange: (name)=>setDeviceName(name.toString()),
286
+ "aria-label": formatMessage({
287
+ id: 'content-manager.preview.device.select',
288
+ defaultMessage: 'Select device type'
289
+ }),
290
+ children: DEVICES.map((deviceOption)=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelectOption, {
291
+ value: deviceOption.name,
292
+ children: formatMessage(deviceOption.label)
293
+ }, deviceOption.name))
220
294
  })
221
295
  })
222
296
  ]
297
+ }),
298
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
299
+ direction: "column",
300
+ justifyContent: "center",
301
+ background: "neutral0",
302
+ flex: 1,
303
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
304
+ "data-testid": "preview-iframe",
305
+ ref: iframeRef,
306
+ src: previewUrl,
307
+ title: formatMessage({
308
+ id: 'content-manager.preview.panel.title',
309
+ defaultMessage: 'Preview'
310
+ }),
311
+ width: device.width,
312
+ height: device.height,
313
+ borderWidth: 0,
314
+ tag: "iframe"
315
+ }, previewUrl)
223
316
  })
224
317
  ]
225
318
  })
226
319
  ]
227
320
  })
321
+ ]
228
322
  })
229
323
  })
230
324
  })