@strapi/content-manager 0.0.0-experimental.aa680be2574ebd6a8ca7675ce7ba57512d0df8cf → 0.0.0-experimental.aa7a2469494b789539dfb9508d5dce9526d83b7d

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 (328) 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/Widgets.js +253 -0
  6. package/dist/admin/components/Widgets.js.map +1 -1
  7. package/dist/admin/components/Widgets.mjs +236 -3
  8. package/dist/admin/components/Widgets.mjs.map +1 -1
  9. package/dist/admin/history/components/VersionContent.js +24 -3
  10. package/dist/admin/history/components/VersionContent.js.map +1 -1
  11. package/dist/admin/history/components/VersionContent.mjs +25 -4
  12. package/dist/admin/history/components/VersionContent.mjs.map +1 -1
  13. package/dist/admin/history/components/VersionHeader.js +6 -0
  14. package/dist/admin/history/components/VersionHeader.js.map +1 -1
  15. package/dist/admin/history/components/VersionHeader.mjs +7 -1
  16. package/dist/admin/history/components/VersionHeader.mjs.map +1 -1
  17. package/dist/admin/hooks/useDocumentActions.js +12 -7
  18. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  19. package/dist/admin/hooks/useDocumentActions.mjs +13 -8
  20. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  21. package/dist/admin/hooks/useDocumentContext.js.map +1 -1
  22. package/dist/admin/hooks/useDocumentContext.mjs.map +1 -1
  23. package/dist/admin/index.js +48 -11
  24. package/dist/admin/index.js.map +1 -1
  25. package/dist/admin/index.mjs +47 -9
  26. package/dist/admin/index.mjs.map +1 -1
  27. package/dist/admin/layout.js +1 -27
  28. package/dist/admin/layout.js.map +1 -1
  29. package/dist/admin/layout.mjs +2 -9
  30. package/dist/admin/layout.mjs.map +1 -1
  31. package/dist/admin/pages/EditView/EditViewPage.js +90 -74
  32. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  33. package/dist/admin/pages/EditView/EditViewPage.mjs +92 -76
  34. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  35. package/dist/admin/pages/EditView/components/Blocker.js +18 -0
  36. package/dist/admin/pages/EditView/components/Blocker.js.map +1 -0
  37. package/dist/admin/pages/EditView/components/Blocker.mjs +16 -0
  38. package/dist/admin/pages/EditView/components/Blocker.mjs.map +1 -0
  39. package/dist/admin/pages/EditView/components/DocumentActions.js +289 -91
  40. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  41. package/dist/admin/pages/EditView/components/DocumentActions.mjs +293 -95
  42. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  43. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +12 -15
  44. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  45. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +12 -15
  46. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
  47. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +54 -14
  48. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  49. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +55 -15
  50. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
  51. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +21 -35
  52. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
  53. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +21 -35
  54. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
  55. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +12 -1
  56. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  57. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +13 -2
  58. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
  59. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +17 -3
  60. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  61. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +18 -4
  62. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  63. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +18 -5
  64. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  65. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +20 -7
  66. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  67. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +129 -55
  68. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  69. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +129 -55
  70. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
  71. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +124 -33
  72. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  73. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +128 -37
  74. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  75. package/dist/admin/pages/EditView/components/FormInputs/UID.js +4 -2
  76. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
  77. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +4 -2
  78. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
  79. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +1 -1
  80. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
  81. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs +1 -1
  82. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
  83. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js +86 -118
  84. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js.map +1 -1
  85. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs +86 -118
  86. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs.map +1 -1
  87. package/dist/admin/pages/EditView/components/FormLayout.js +47 -27
  88. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  89. package/dist/admin/pages/EditView/components/FormLayout.mjs +47 -27
  90. package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
  91. package/dist/admin/pages/EditView/components/InputRenderer.js +26 -14
  92. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  93. package/dist/admin/pages/EditView/components/InputRenderer.mjs +27 -15
  94. package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
  95. package/dist/admin/pages/EditView/utils/data.js +103 -0
  96. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  97. package/dist/admin/pages/EditView/utils/data.mjs +103 -1
  98. package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
  99. package/dist/admin/pages/ListView/ListViewPage.js +221 -203
  100. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  101. package/dist/admin/pages/ListView/ListViewPage.mjs +222 -204
  102. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  103. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +2 -1
  104. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
  105. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +2 -1
  106. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -1
  107. package/dist/admin/pages/ListView/components/Filters.js +4 -1
  108. package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
  109. package/dist/admin/pages/ListView/components/Filters.mjs +4 -1
  110. package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
  111. package/dist/admin/pages/ListView/components/TableActions.js +13 -3
  112. package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
  113. package/dist/admin/pages/ListView/components/TableActions.mjs +13 -3
  114. package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
  115. package/dist/admin/preview/components/PreviewSidePanel.js +31 -4
  116. package/dist/admin/preview/components/PreviewSidePanel.js.map +1 -1
  117. package/dist/admin/preview/components/PreviewSidePanel.mjs +32 -5
  118. package/dist/admin/preview/components/PreviewSidePanel.mjs.map +1 -1
  119. package/dist/admin/preview/hooks/usePreviewInputManager.js +117 -0
  120. package/dist/admin/preview/hooks/usePreviewInputManager.js.map +1 -0
  121. package/dist/admin/preview/hooks/usePreviewInputManager.mjs +96 -0
  122. package/dist/admin/preview/hooks/usePreviewInputManager.mjs.map +1 -0
  123. package/dist/admin/preview/pages/Preview.js +234 -73
  124. package/dist/admin/preview/pages/Preview.js.map +1 -1
  125. package/dist/admin/preview/pages/Preview.mjs +236 -75
  126. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  127. package/dist/admin/preview/utils/constants.js +22 -0
  128. package/dist/admin/preview/utils/constants.js.map +1 -0
  129. package/dist/admin/preview/utils/constants.mjs +19 -0
  130. package/dist/admin/preview/utils/constants.mjs.map +1 -0
  131. package/dist/admin/preview/utils/previewScript.js +299 -0
  132. package/dist/admin/preview/utils/previewScript.js.map +1 -0
  133. package/dist/admin/preview/utils/previewScript.mjs +297 -0
  134. package/dist/admin/preview/utils/previewScript.mjs.map +1 -0
  135. package/dist/admin/services/api.js +3 -1
  136. package/dist/admin/services/api.js.map +1 -1
  137. package/dist/admin/services/api.mjs +3 -1
  138. package/dist/admin/services/api.mjs.map +1 -1
  139. package/dist/admin/services/documents.js +32 -16
  140. package/dist/admin/services/documents.js.map +1 -1
  141. package/dist/admin/services/documents.mjs +32 -16
  142. package/dist/admin/services/documents.mjs.map +1 -1
  143. package/dist/admin/services/homepage.js +19 -6
  144. package/dist/admin/services/homepage.js.map +1 -1
  145. package/dist/admin/services/homepage.mjs +19 -7
  146. package/dist/admin/services/homepage.mjs.map +1 -1
  147. package/dist/admin/src/components/ConfigurationForm/Fields.d.ts +6 -4
  148. package/dist/admin/src/components/Widgets.d.ts +2 -1
  149. package/dist/admin/src/exports.d.ts +1 -0
  150. package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
  151. package/dist/admin/src/hooks/useDocumentActions.d.ts +1 -0
  152. package/dist/admin/src/hooks/useDocumentContext.d.ts +1 -1
  153. package/dist/admin/src/pages/EditView/components/Blocker.d.ts +2 -0
  154. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +26 -5
  155. package/dist/admin/src/pages/EditView/components/FormInputs/UID.d.ts +1 -0
  156. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +7 -8
  157. package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +1 -1
  158. package/dist/admin/src/pages/EditView/utils/data.d.ts +19 -1
  159. package/dist/admin/src/preview/hooks/usePreviewInputManager.d.ts +6 -0
  160. package/dist/admin/src/preview/pages/Preview.d.ts +9 -0
  161. package/dist/admin/src/preview/services/preview.d.ts +1 -1
  162. package/dist/admin/src/preview/utils/constants.d.ts +20 -0
  163. package/dist/admin/src/preview/utils/previewScript.d.ts +22 -0
  164. package/dist/admin/src/services/api.d.ts +1 -1
  165. package/dist/admin/src/services/components.d.ts +2 -2
  166. package/dist/admin/src/services/contentTypes.d.ts +3 -3
  167. package/dist/admin/src/services/documents.d.ts +23 -17
  168. package/dist/admin/src/services/homepage.d.ts +6 -2
  169. package/dist/admin/src/services/init.d.ts +1 -1
  170. package/dist/admin/src/services/relations.d.ts +2 -2
  171. package/dist/admin/src/services/uid.d.ts +3 -3
  172. package/dist/admin/src/utils/validation.d.ts +1 -0
  173. package/dist/admin/translations/en.json.js +9 -1
  174. package/dist/admin/translations/en.json.js.map +1 -1
  175. package/dist/admin/translations/en.json.mjs +9 -1
  176. package/dist/admin/translations/en.json.mjs.map +1 -1
  177. package/dist/admin/translations/es.json.js +5 -2
  178. package/dist/admin/translations/es.json.js.map +1 -1
  179. package/dist/admin/translations/es.json.mjs +5 -2
  180. package/dist/admin/translations/es.json.mjs.map +1 -1
  181. package/dist/admin/translations/fr.json.js +10 -2
  182. package/dist/admin/translations/fr.json.js.map +1 -1
  183. package/dist/admin/translations/fr.json.mjs +10 -2
  184. package/dist/admin/translations/fr.json.mjs.map +1 -1
  185. package/dist/admin/translations/ru.json.js +235 -226
  186. package/dist/admin/translations/ru.json.js.map +1 -1
  187. package/dist/admin/translations/ru.json.mjs +230 -226
  188. package/dist/admin/translations/ru.json.mjs.map +1 -1
  189. package/dist/admin/utils/validation.js +19 -7
  190. package/dist/admin/utils/validation.js.map +1 -1
  191. package/dist/admin/utils/validation.mjs +19 -7
  192. package/dist/admin/utils/validation.mjs.map +1 -1
  193. package/dist/server/controllers/content-types.js +11 -1
  194. package/dist/server/controllers/content-types.js.map +1 -1
  195. package/dist/server/controllers/content-types.mjs +11 -1
  196. package/dist/server/controllers/content-types.mjs.map +1 -1
  197. package/dist/server/controllers/index.js +3 -1
  198. package/dist/server/controllers/index.js.map +1 -1
  199. package/dist/server/controllers/index.mjs +3 -1
  200. package/dist/server/controllers/index.mjs.map +1 -1
  201. package/dist/server/controllers/relations.js +2 -2
  202. package/dist/server/controllers/relations.js.map +1 -1
  203. package/dist/server/controllers/relations.mjs +2 -2
  204. package/dist/server/controllers/relations.mjs.map +1 -1
  205. package/dist/server/controllers/validation/index.js +14 -2
  206. package/dist/server/controllers/validation/index.js.map +1 -1
  207. package/dist/server/controllers/validation/index.mjs +14 -2
  208. package/dist/server/controllers/validation/index.mjs.map +1 -1
  209. package/dist/server/history/services/lifecycles.js +23 -19
  210. package/dist/server/history/services/lifecycles.js.map +1 -1
  211. package/dist/server/history/services/lifecycles.mjs +23 -19
  212. package/dist/server/history/services/lifecycles.mjs.map +1 -1
  213. package/dist/server/homepage/controllers/homepage.js +62 -0
  214. package/dist/server/homepage/controllers/homepage.js.map +1 -0
  215. package/dist/server/homepage/controllers/homepage.mjs +41 -0
  216. package/dist/server/homepage/controllers/homepage.mjs.map +1 -0
  217. package/dist/server/homepage/controllers/index.js +10 -0
  218. package/dist/server/homepage/controllers/index.js.map +1 -0
  219. package/dist/server/homepage/controllers/index.mjs +8 -0
  220. package/dist/server/homepage/controllers/index.mjs.map +1 -0
  221. package/dist/server/homepage/index.js +14 -0
  222. package/dist/server/homepage/index.js.map +1 -0
  223. package/dist/server/homepage/index.mjs +12 -0
  224. package/dist/server/homepage/index.mjs.map +1 -0
  225. package/dist/server/homepage/routes/homepage.js +36 -0
  226. package/dist/server/homepage/routes/homepage.js.map +1 -0
  227. package/dist/server/homepage/routes/homepage.mjs +34 -0
  228. package/dist/server/homepage/routes/homepage.mjs.map +1 -0
  229. package/dist/server/homepage/routes/index.js +13 -0
  230. package/dist/server/homepage/routes/index.js.map +1 -0
  231. package/dist/server/homepage/routes/index.mjs +11 -0
  232. package/dist/server/homepage/routes/index.mjs.map +1 -0
  233. package/dist/server/homepage/services/homepage.js +197 -0
  234. package/dist/server/homepage/services/homepage.js.map +1 -0
  235. package/dist/server/homepage/services/homepage.mjs +195 -0
  236. package/dist/server/homepage/services/homepage.mjs.map +1 -0
  237. package/dist/server/homepage/services/index.js +10 -0
  238. package/dist/server/homepage/services/index.js.map +1 -0
  239. package/dist/server/homepage/services/index.mjs +8 -0
  240. package/dist/server/homepage/services/index.mjs.map +1 -0
  241. package/dist/server/preview/services/preview-config.js +5 -1
  242. package/dist/server/preview/services/preview-config.js.map +1 -1
  243. package/dist/server/preview/services/preview-config.mjs +5 -1
  244. package/dist/server/preview/services/preview-config.mjs.map +1 -1
  245. package/dist/server/preview/services/preview.js +4 -1
  246. package/dist/server/preview/services/preview.js.map +1 -1
  247. package/dist/server/preview/services/preview.mjs +4 -1
  248. package/dist/server/preview/services/preview.mjs.map +1 -1
  249. package/dist/server/routes/index.js +3 -1
  250. package/dist/server/routes/index.js.map +1 -1
  251. package/dist/server/routes/index.mjs +3 -1
  252. package/dist/server/routes/index.mjs.map +1 -1
  253. package/dist/server/services/data-mapper.js +4 -1
  254. package/dist/server/services/data-mapper.js.map +1 -1
  255. package/dist/server/services/data-mapper.mjs +4 -1
  256. package/dist/server/services/data-mapper.mjs.map +1 -1
  257. package/dist/server/services/document-manager.js +8 -1
  258. package/dist/server/services/document-manager.js.map +1 -1
  259. package/dist/server/services/document-manager.mjs +8 -1
  260. package/dist/server/services/document-manager.mjs.map +1 -1
  261. package/dist/server/services/document-metadata.js +3 -1
  262. package/dist/server/services/document-metadata.js.map +1 -1
  263. package/dist/server/services/document-metadata.mjs +3 -1
  264. package/dist/server/services/document-metadata.mjs.map +1 -1
  265. package/dist/server/services/index.js +3 -1
  266. package/dist/server/services/index.js.map +1 -1
  267. package/dist/server/services/index.mjs +3 -1
  268. package/dist/server/services/index.mjs.map +1 -1
  269. package/dist/server/services/utils/configuration/attributes.js +1 -1
  270. package/dist/server/services/utils/configuration/attributes.js.map +1 -1
  271. package/dist/server/services/utils/configuration/attributes.mjs +1 -1
  272. package/dist/server/services/utils/configuration/attributes.mjs.map +1 -1
  273. package/dist/server/services/utils/configuration/layouts.js +1 -1
  274. package/dist/server/services/utils/configuration/layouts.js.map +1 -1
  275. package/dist/server/services/utils/configuration/layouts.mjs +1 -1
  276. package/dist/server/services/utils/configuration/layouts.mjs.map +1 -1
  277. package/dist/server/services/utils/configuration/metadatas.js +8 -0
  278. package/dist/server/services/utils/configuration/metadatas.js.map +1 -1
  279. package/dist/server/services/utils/configuration/metadatas.mjs +8 -0
  280. package/dist/server/services/utils/configuration/metadatas.mjs.map +1 -1
  281. package/dist/server/services/utils/populate.js +11 -0
  282. package/dist/server/services/utils/populate.js.map +1 -1
  283. package/dist/server/services/utils/populate.mjs +11 -0
  284. package/dist/server/services/utils/populate.mjs.map +1 -1
  285. package/dist/server/src/controllers/content-types.d.ts.map +1 -1
  286. package/dist/server/src/controllers/index.d.ts.map +1 -1
  287. package/dist/server/src/controllers/validation/index.d.ts +6 -1
  288. package/dist/server/src/controllers/validation/index.d.ts.map +1 -1
  289. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  290. package/dist/server/src/homepage/controllers/homepage.d.ts +8 -0
  291. package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -0
  292. package/dist/server/src/homepage/controllers/index.d.ts +2 -0
  293. package/dist/server/src/homepage/controllers/index.d.ts.map +1 -0
  294. package/dist/server/src/homepage/index.d.ts +23 -0
  295. package/dist/server/src/homepage/index.d.ts.map +1 -0
  296. package/dist/server/src/homepage/routes/homepage.d.ts +4 -0
  297. package/dist/server/src/homepage/routes/homepage.d.ts.map +1 -0
  298. package/dist/server/src/homepage/routes/index.d.ts +8 -0
  299. package/dist/server/src/homepage/routes/index.d.ts.map +1 -0
  300. package/dist/server/src/homepage/services/homepage.d.ts +14 -0
  301. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -0
  302. package/dist/server/src/homepage/services/index.d.ts +16 -0
  303. package/dist/server/src/homepage/services/index.d.ts.map +1 -0
  304. package/dist/server/src/index.d.ts +14 -0
  305. package/dist/server/src/index.d.ts.map +1 -1
  306. package/dist/server/src/preview/services/index.d.ts +1 -0
  307. package/dist/server/src/preview/services/index.d.ts.map +1 -1
  308. package/dist/server/src/preview/services/preview-config.d.ts +1 -0
  309. package/dist/server/src/preview/services/preview-config.d.ts.map +1 -1
  310. package/dist/server/src/preview/services/preview.d.ts.map +1 -1
  311. package/dist/server/src/preview/utils.d.ts +1 -0
  312. package/dist/server/src/preview/utils.d.ts.map +1 -1
  313. package/dist/server/src/routes/index.d.ts +1 -0
  314. package/dist/server/src/routes/index.d.ts.map +1 -1
  315. package/dist/server/src/services/data-mapper.d.ts.map +1 -1
  316. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  317. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  318. package/dist/server/src/services/index.d.ts +13 -0
  319. package/dist/server/src/services/index.d.ts.map +1 -1
  320. package/dist/server/src/services/utils/configuration/metadatas.d.ts.map +1 -1
  321. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  322. package/dist/shared/contracts/collection-types.d.ts +0 -1
  323. package/dist/shared/contracts/collection-types.d.ts.map +1 -1
  324. package/dist/shared/contracts/homepage.d.ts +13 -0
  325. package/dist/shared/contracts/homepage.d.ts.map +1 -1
  326. package/package.json +11 -9
  327. package/dist/server/src/services/homepage.d.ts +0 -11
  328. package/dist/server/src/services/homepage.d.ts.map +0 -1
@@ -0,0 +1,299 @@
1
+ 'use strict';
2
+
3
+ // NOTE: This override is for the properties on _user's site_, it's not about Strapi Admin.
4
+ /**
5
+ * previewScript will be injected into the preview iframe after being stringified.
6
+ * Therefore it CANNOT use any imports, or refer to any variables outside of its own scope.
7
+ * It's why many functions are defined within previewScript, it's the only way to avoid going full spaghetti.
8
+ * To get a better overview of everything previewScript does, go to the orchestration part at its end.
9
+ */ const previewScript = (shouldRun = true)=>{
10
+ /* -----------------------------------------------------------------------------------------------
11
+ * Params
12
+ * ---------------------------------------------------------------------------------------------*/ const HIGHLIGHT_PADDING = 2; // in pixels
13
+ const HIGHLIGHT_COLOR = window.__strapi_HIGHLIGHT_COLOR ?? '#4945ff';
14
+ const DISABLE_STEGA_DECODING = window.__strapi_DISABLE_STEGA_DECODING ?? false;
15
+ const SOURCE_ATTRIBUTE = 'data-strapi-source';
16
+ const OVERLAY_ID = 'strapi-preview-overlay';
17
+ const INTERNAL_EVENTS = {
18
+ WILL_EDIT_FIELD: 'willEditField',
19
+ STRAPI_FIELD_TYPING: 'strapiFieldTyping',
20
+ STRAPI_FIELD_FOCUS: 'strapiFieldFocus',
21
+ STRAPI_FIELD_BLUR: 'strapiFieldBlur'
22
+ };
23
+ /**
24
+ * Calling the function in no-run mode lets us retrieve the constants from other files and keep
25
+ * a single source of truth for them. It's the only way to do this because this script can't
26
+ * refer to any variables outside of its own scope, because it's stringified before it's run.
27
+ */ if (!shouldRun) {
28
+ return {
29
+ INTERNAL_EVENTS
30
+ };
31
+ }
32
+ /* -----------------------------------------------------------------------------------------------
33
+ * Utils
34
+ * ---------------------------------------------------------------------------------------------*/ const sendMessage = (type, payload)=>{
35
+ window.parent.postMessage({
36
+ type,
37
+ payload
38
+ }, '*');
39
+ };
40
+ /* -----------------------------------------------------------------------------------------------
41
+ * Functional blocks
42
+ * ---------------------------------------------------------------------------------------------*/ const setupStegaDecoding = async ()=>{
43
+ if (DISABLE_STEGA_DECODING) {
44
+ return;
45
+ }
46
+ const { vercelStegaDecode: stegaDecode } = await import(// @ts-expect-error it's not a local dependency
47
+ // eslint-disable-next-line import/no-unresolved
48
+ 'https://cdn.jsdelivr.net/npm/@vercel/stega@0.1.2/+esm');
49
+ const allElements = document.querySelectorAll('*');
50
+ Array.from(allElements).forEach((element)=>{
51
+ const directTextContent = Array.from(element.childNodes).filter((node)=>node.nodeType === Node.TEXT_NODE).map((node)=>node.textContent || '').join('');
52
+ if (directTextContent) {
53
+ try {
54
+ const result = stegaDecode(directTextContent);
55
+ if (result) {
56
+ element.setAttribute(SOURCE_ATTRIBUTE, result.key);
57
+ }
58
+ } catch (error) {}
59
+ }
60
+ });
61
+ };
62
+ const createOverlaySystem = ()=>{
63
+ const existingOverlay = document.getElementById(OVERLAY_ID);
64
+ if (existingOverlay) {
65
+ existingOverlay.remove();
66
+ }
67
+ window.__strapi_previewCleanup?.();
68
+ const overlay = document.createElement('div');
69
+ overlay.id = OVERLAY_ID;
70
+ overlay.style.cssText = `
71
+ position: fixed;
72
+ top: 0;
73
+ left: 0;
74
+ width: 100%;
75
+ height: 100%;
76
+ pointer-events: none;
77
+ z-index: 9999;
78
+ `;
79
+ window.document.body.appendChild(overlay);
80
+ return overlay;
81
+ };
82
+ const createHighlightManager = (overlay)=>{
83
+ const elements = window.document.querySelectorAll(`[${SOURCE_ATTRIBUTE}]`);
84
+ const highlights = [];
85
+ let focusedField = null;
86
+ const focusedHighlights = [];
87
+ const drawOverlay = (target, highlight)=>{
88
+ if (!highlight) return;
89
+ const rect = target.getBoundingClientRect();
90
+ highlight.style.width = `${rect.width + HIGHLIGHT_PADDING * 2}px`;
91
+ highlight.style.height = `${rect.height + HIGHLIGHT_PADDING * 2}px`;
92
+ highlight.style.transform = `translate(${rect.left - HIGHLIGHT_PADDING}px, ${rect.top - HIGHLIGHT_PADDING}px)`;
93
+ };
94
+ const updateAllHighlights = ()=>{
95
+ highlights.forEach((highlight, index)=>{
96
+ const element = elements[index];
97
+ if (element && highlight) {
98
+ drawOverlay(element, highlight);
99
+ }
100
+ });
101
+ };
102
+ elements.forEach((element)=>{
103
+ if (element instanceof HTMLElement) {
104
+ const highlight = document.createElement('div');
105
+ highlight.style.cssText = `
106
+ position: absolute;
107
+ outline: 2px solid transparent;
108
+ pointer-events: auto;
109
+ border-radius: 2px 0 2px 2px;
110
+ background-color: transparent;
111
+ will-change: transform;
112
+ transition: outline-color 0.1s ease-in-out;
113
+ `;
114
+ const editButton = document.createElement('button');
115
+ editButton.textContent = 'Edit';
116
+ editButton.style.cssText = `
117
+ position: absolute;
118
+ top: 0px;
119
+ right: -${HIGHLIGHT_PADDING}px;
120
+ transform: translateY(-100%);
121
+ font-size: 12px;
122
+ padding: 4px 8px;
123
+ background: ${HIGHLIGHT_COLOR};
124
+ color: white;
125
+ border: none;
126
+ border-radius: 4px 4px 0 0;
127
+ cursor: pointer;
128
+ pointer-events: auto;
129
+ display: none;
130
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
131
+ z-index: 10000;
132
+ user-select: none;
133
+ `;
134
+ highlight.addEventListener('mouseenter', ()=>{
135
+ highlight.style.outlineColor = HIGHLIGHT_COLOR;
136
+ editButton.style.display = 'block';
137
+ highlight.style.borderRadius = '2px 0 2px 2px';
138
+ });
139
+ highlight.addEventListener('mouseleave', ()=>{
140
+ const fieldPath = element.getAttribute(SOURCE_ATTRIBUTE);
141
+ if (fieldPath !== focusedField) {
142
+ highlight.style.outlineColor = 'transparent';
143
+ }
144
+ editButton.style.display = 'none';
145
+ highlight.style.borderRadius = '2px';
146
+ });
147
+ const triggerEdit = (e)=>{
148
+ e.stopPropagation();
149
+ e.preventDefault();
150
+ const fieldPath = element.getAttribute(SOURCE_ATTRIBUTE);
151
+ if (fieldPath && window.parent) {
152
+ const rect = element.getBoundingClientRect();
153
+ sendMessage(INTERNAL_EVENTS.WILL_EDIT_FIELD, {
154
+ path: fieldPath,
155
+ position: {
156
+ top: rect.top,
157
+ left: rect.left,
158
+ width: rect.width,
159
+ height: rect.height
160
+ }
161
+ });
162
+ }
163
+ };
164
+ editButton.addEventListener('click', triggerEdit);
165
+ highlight.addEventListener('dblclick', triggerEdit);
166
+ highlight.appendChild(editButton);
167
+ highlights.push(highlight);
168
+ overlay.appendChild(highlight);
169
+ drawOverlay(element, highlight);
170
+ }
171
+ });
172
+ return {
173
+ elements,
174
+ highlights,
175
+ focusedField,
176
+ focusedHighlights,
177
+ updateAllHighlights,
178
+ setFocusedField: (field)=>{
179
+ focusedField = field;
180
+ },
181
+ getFocusedField: ()=>focusedField
182
+ };
183
+ };
184
+ const setupEventHandlers = (highlightManager)=>{
185
+ const handleMessages = (event)=>{
186
+ if (event.data?.type === INTERNAL_EVENTS.STRAPI_FIELD_TYPING) {
187
+ const { field, value } = event.data.payload;
188
+ if (field) {
189
+ const matchingElements = document.querySelectorAll(`[${SOURCE_ATTRIBUTE}="${field}"]`);
190
+ matchingElements.forEach((element)=>{
191
+ if (element instanceof HTMLElement) {
192
+ element.textContent = value || '';
193
+ }
194
+ });
195
+ }
196
+ } else if (event.data?.type === INTERNAL_EVENTS.STRAPI_FIELD_FOCUS) {
197
+ const { field } = event.data.payload;
198
+ if (field) {
199
+ highlightManager.focusedHighlights.forEach((highlight)=>{
200
+ highlight.style.outlineColor = 'transparent';
201
+ });
202
+ highlightManager.focusedHighlights.length = 0;
203
+ highlightManager.setFocusedField(field);
204
+ const matchingElements = document.querySelectorAll(`[${SOURCE_ATTRIBUTE}="${field}"]`);
205
+ matchingElements.forEach((element)=>{
206
+ const highlight = highlightManager.highlights[Array.from(highlightManager.elements).indexOf(element)];
207
+ if (highlight) {
208
+ highlight.style.outlineColor = HIGHLIGHT_COLOR;
209
+ highlightManager.focusedHighlights.push(highlight);
210
+ }
211
+ });
212
+ }
213
+ } else if (event.data?.type === INTERNAL_EVENTS.STRAPI_FIELD_BLUR) {
214
+ const { field } = event.data.payload;
215
+ if (field === highlightManager.getFocusedField()) {
216
+ highlightManager.focusedHighlights.forEach((highlight)=>{
217
+ highlight.style.outlineColor = 'transparent';
218
+ });
219
+ highlightManager.focusedHighlights.length = 0;
220
+ highlightManager.setFocusedField(null);
221
+ }
222
+ }
223
+ };
224
+ window.addEventListener('message', handleMessages);
225
+ return {
226
+ handleMessages
227
+ };
228
+ };
229
+ const setupObservers = (highlightManager)=>{
230
+ const resizeObserver = new ResizeObserver(()=>{
231
+ highlightManager.updateAllHighlights();
232
+ });
233
+ highlightManager.elements.forEach((element)=>{
234
+ resizeObserver.observe(element);
235
+ });
236
+ resizeObserver.observe(document.documentElement);
237
+ const updateOnScroll = ()=>{
238
+ highlightManager.updateAllHighlights();
239
+ };
240
+ // Find all scrollable ancestors for all tracked elements
241
+ const scrollableElements = new Set();
242
+ scrollableElements.add(window); // Add window as a special case
243
+ highlightManager.elements.forEach((element)=>{
244
+ let parent = element.parentElement;
245
+ while(parent){
246
+ const computedStyle = window.getComputedStyle(parent);
247
+ const overflow = computedStyle.overflow + computedStyle.overflowX + computedStyle.overflowY;
248
+ if (overflow.includes('scroll') || overflow.includes('auto')) {
249
+ scrollableElements.add(parent);
250
+ }
251
+ parent = parent.parentElement;
252
+ }
253
+ });
254
+ // Add scroll listeners to all scrollable elements
255
+ scrollableElements.forEach((element)=>{
256
+ if (element === window) {
257
+ window.addEventListener('scroll', updateOnScroll);
258
+ window.addEventListener('resize', updateOnScroll);
259
+ } else {
260
+ element.addEventListener('scroll', updateOnScroll);
261
+ }
262
+ });
263
+ return {
264
+ resizeObserver,
265
+ updateOnScroll,
266
+ scrollableElements
267
+ };
268
+ };
269
+ const createCleanupSystem = (overlay, observers, eventHandlers)=>{
270
+ window.__strapi_previewCleanup = ()=>{
271
+ observers.resizeObserver.disconnect();
272
+ // Remove all scroll listeners
273
+ observers.scrollableElements.forEach((element)=>{
274
+ if (element === window) {
275
+ window.removeEventListener('scroll', observers.updateOnScroll);
276
+ window.removeEventListener('resize', observers.updateOnScroll);
277
+ } else {
278
+ element.removeEventListener('scroll', observers.updateOnScroll);
279
+ }
280
+ });
281
+ window.removeEventListener('message', eventHandlers.handleMessages);
282
+ if (overlay.parentNode) {
283
+ overlay.parentNode.removeChild(overlay);
284
+ }
285
+ };
286
+ };
287
+ /* -----------------------------------------------------------------------------------------------
288
+ * Orchestration
289
+ * ---------------------------------------------------------------------------------------------*/ setupStegaDecoding().then(()=>{
290
+ const overlay = createOverlaySystem();
291
+ const highlightManager = createHighlightManager(overlay);
292
+ const eventHandlers = setupEventHandlers(highlightManager);
293
+ const observers = setupObservers(highlightManager);
294
+ createCleanupSystem(overlay, observers, eventHandlers);
295
+ });
296
+ };
297
+
298
+ exports.previewScript = previewScript;
299
+ //# sourceMappingURL=previewScript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"previewScript.js","sources":["../../../../admin/src/preview/utils/previewScript.ts"],"sourcesContent":["// NOTE: This override is for the properties on _user's site_, it's not about Strapi Admin.\ndeclare global {\n interface Window {\n __strapi_previewCleanup?: () => void;\n __strapi_HIGHLIGHT_COLOR?: string;\n __strapi_DISABLE_STEGA_DECODING?: boolean;\n }\n}\n\n/**\n * previewScript will be injected into the preview iframe after being stringified.\n * Therefore it CANNOT use any imports, or refer to any variables outside of its own scope.\n * It's why many functions are defined within previewScript, it's the only way to avoid going full spaghetti.\n * To get a better overview of everything previewScript does, go to the orchestration part at its end.\n */\nconst previewScript = (shouldRun = true) => {\n /* -----------------------------------------------------------------------------------------------\n * Params\n * ---------------------------------------------------------------------------------------------*/\n\n const HIGHLIGHT_PADDING = 2; // in pixels\n const HIGHLIGHT_COLOR = window.__strapi_HIGHLIGHT_COLOR ?? '#4945ff';\n const DISABLE_STEGA_DECODING = window.__strapi_DISABLE_STEGA_DECODING ?? false;\n const SOURCE_ATTRIBUTE = 'data-strapi-source';\n const OVERLAY_ID = 'strapi-preview-overlay';\n const INTERNAL_EVENTS = {\n WILL_EDIT_FIELD: 'willEditField',\n STRAPI_FIELD_TYPING: 'strapiFieldTyping',\n STRAPI_FIELD_FOCUS: 'strapiFieldFocus',\n STRAPI_FIELD_BLUR: 'strapiFieldBlur',\n } as const;\n\n /**\n * Calling the function in no-run mode lets us retrieve the constants from other files and keep\n * a single source of truth for them. It's the only way to do this because this script can't\n * refer to any variables outside of its own scope, because it's stringified before it's run.\n */\n if (!shouldRun) {\n return { INTERNAL_EVENTS };\n }\n\n /* -----------------------------------------------------------------------------------------------\n * Utils\n * ---------------------------------------------------------------------------------------------*/\n\n const sendMessage = (\n type: (typeof INTERNAL_EVENTS)[keyof typeof INTERNAL_EVENTS],\n payload: unknown\n ) => {\n window.parent.postMessage({ type, payload }, '*');\n };\n\n /* -----------------------------------------------------------------------------------------------\n * Functional blocks\n * ---------------------------------------------------------------------------------------------*/\n\n const setupStegaDecoding = async () => {\n if (DISABLE_STEGA_DECODING) {\n return;\n }\n\n const { vercelStegaDecode: stegaDecode } = await import(\n // @ts-expect-error it's not a local dependency\n // eslint-disable-next-line import/no-unresolved\n 'https://cdn.jsdelivr.net/npm/@vercel/stega@0.1.2/+esm'\n );\n\n const allElements = document.querySelectorAll('*');\n\n Array.from(allElements).forEach((element) => {\n const directTextContent = Array.from(element.childNodes)\n .filter((node) => node.nodeType === Node.TEXT_NODE)\n .map((node) => node.textContent || '')\n .join('');\n\n if (directTextContent) {\n try {\n const result = stegaDecode(directTextContent);\n if (result) {\n element.setAttribute(SOURCE_ATTRIBUTE, result.key);\n }\n } catch (error) {}\n }\n });\n };\n\n const createOverlaySystem = () => {\n const existingOverlay = document.getElementById(OVERLAY_ID);\n if (existingOverlay) {\n existingOverlay.remove();\n }\n\n window.__strapi_previewCleanup?.();\n\n const overlay = document.createElement('div');\n overlay.id = OVERLAY_ID;\n overlay.style.cssText = `\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n z-index: 9999;\n `;\n\n window.document.body.appendChild(overlay);\n return overlay;\n };\n\n const createHighlightManager = (overlay: HTMLElement) => {\n const elements = window.document.querySelectorAll(`[${SOURCE_ATTRIBUTE}]`);\n const highlights: HTMLElement[] = [];\n let focusedField: string | null = null;\n const focusedHighlights: HTMLElement[] = [];\n\n const drawOverlay = (target: Element, highlight: HTMLElement) => {\n if (!highlight) return;\n\n const rect = target.getBoundingClientRect();\n highlight.style.width = `${rect.width + HIGHLIGHT_PADDING * 2}px`;\n highlight.style.height = `${rect.height + HIGHLIGHT_PADDING * 2}px`;\n highlight.style.transform = `translate(${rect.left - HIGHLIGHT_PADDING}px, ${rect.top - HIGHLIGHT_PADDING}px)`;\n };\n\n const updateAllHighlights = () => {\n highlights.forEach((highlight, index) => {\n const element = elements[index];\n if (element && highlight) {\n drawOverlay(element, highlight);\n }\n });\n };\n\n elements.forEach((element) => {\n if (element instanceof HTMLElement) {\n const highlight = document.createElement('div');\n highlight.style.cssText = `\n position: absolute;\n outline: 2px solid transparent;\n pointer-events: auto;\n border-radius: 2px 0 2px 2px;\n background-color: transparent;\n will-change: transform;\n transition: outline-color 0.1s ease-in-out;\n `;\n\n const editButton = document.createElement('button');\n editButton.textContent = 'Edit';\n editButton.style.cssText = `\n position: absolute;\n top: 0px;\n right: -${HIGHLIGHT_PADDING}px;\n transform: translateY(-100%);\n font-size: 12px;\n padding: 4px 8px;\n background: ${HIGHLIGHT_COLOR};\n color: white;\n border: none;\n border-radius: 4px 4px 0 0;\n cursor: pointer;\n pointer-events: auto;\n display: none;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n z-index: 10000;\n user-select: none;\n `;\n\n highlight.addEventListener('mouseenter', () => {\n highlight.style.outlineColor = HIGHLIGHT_COLOR;\n editButton.style.display = 'block';\n highlight.style.borderRadius = '2px 0 2px 2px';\n });\n\n highlight.addEventListener('mouseleave', () => {\n const fieldPath = element.getAttribute(SOURCE_ATTRIBUTE);\n if (fieldPath !== focusedField) {\n highlight.style.outlineColor = 'transparent';\n }\n editButton.style.display = 'none';\n highlight.style.borderRadius = '2px';\n });\n\n const triggerEdit = (e: Event) => {\n e.stopPropagation();\n e.preventDefault();\n\n const fieldPath = element.getAttribute(SOURCE_ATTRIBUTE);\n if (fieldPath && window.parent) {\n const rect = element.getBoundingClientRect();\n sendMessage(INTERNAL_EVENTS.WILL_EDIT_FIELD, {\n path: fieldPath,\n position: {\n top: rect.top,\n left: rect.left,\n width: rect.width,\n height: rect.height,\n },\n });\n }\n };\n\n editButton.addEventListener('click', triggerEdit);\n highlight.addEventListener('dblclick', triggerEdit);\n\n highlight.appendChild(editButton);\n highlights.push(highlight);\n overlay.appendChild(highlight);\n\n drawOverlay(element, highlight);\n }\n });\n\n return {\n elements,\n highlights,\n focusedField,\n focusedHighlights,\n updateAllHighlights,\n setFocusedField: (field: string | null) => {\n focusedField = field;\n },\n getFocusedField: () => focusedField,\n };\n };\n\n type HighlightManager = ReturnType<typeof createHighlightManager>;\n\n const setupEventHandlers = (highlightManager: HighlightManager) => {\n const handleMessages = (event: MessageEvent) => {\n if (event.data?.type === INTERNAL_EVENTS.STRAPI_FIELD_TYPING) {\n const { field, value } = event.data.payload;\n if (field) {\n const matchingElements = document.querySelectorAll(`[${SOURCE_ATTRIBUTE}=\"${field}\"]`);\n matchingElements.forEach((element) => {\n if (element instanceof HTMLElement) {\n element.textContent = value || '';\n }\n });\n }\n } else if (event.data?.type === INTERNAL_EVENTS.STRAPI_FIELD_FOCUS) {\n const { field } = event.data.payload;\n if (field) {\n highlightManager.focusedHighlights.forEach((highlight: HTMLElement) => {\n highlight.style.outlineColor = 'transparent';\n });\n highlightManager.focusedHighlights.length = 0;\n\n highlightManager.setFocusedField(field);\n const matchingElements = document.querySelectorAll(`[${SOURCE_ATTRIBUTE}=\"${field}\"]`);\n matchingElements.forEach((element) => {\n const highlight =\n highlightManager.highlights[Array.from(highlightManager.elements).indexOf(element)];\n if (highlight) {\n highlight.style.outlineColor = HIGHLIGHT_COLOR;\n highlightManager.focusedHighlights.push(highlight);\n }\n });\n }\n } else if (event.data?.type === INTERNAL_EVENTS.STRAPI_FIELD_BLUR) {\n const { field } = event.data.payload;\n if (field === highlightManager.getFocusedField()) {\n highlightManager.focusedHighlights.forEach((highlight: HTMLElement) => {\n highlight.style.outlineColor = 'transparent';\n });\n highlightManager.focusedHighlights.length = 0;\n highlightManager.setFocusedField(null);\n }\n }\n };\n\n window.addEventListener('message', handleMessages);\n return { handleMessages };\n };\n\n const setupObservers = (highlightManager: HighlightManager) => {\n const resizeObserver = new ResizeObserver(() => {\n highlightManager.updateAllHighlights();\n });\n\n highlightManager.elements.forEach((element: Element) => {\n resizeObserver.observe(element);\n });\n\n resizeObserver.observe(document.documentElement);\n\n const updateOnScroll = () => {\n highlightManager.updateAllHighlights();\n };\n\n // Find all scrollable ancestors for all tracked elements\n const scrollableElements = new Set<Element | Window>();\n scrollableElements.add(window); // Add window as a special case\n\n highlightManager.elements.forEach((element) => {\n let parent = element.parentElement;\n while (parent) {\n const computedStyle = window.getComputedStyle(parent);\n const overflow = computedStyle.overflow + computedStyle.overflowX + computedStyle.overflowY;\n\n if (overflow.includes('scroll') || overflow.includes('auto')) {\n scrollableElements.add(parent);\n }\n\n parent = parent.parentElement;\n }\n });\n\n // Add scroll listeners to all scrollable elements\n scrollableElements.forEach((element) => {\n if (element === window) {\n window.addEventListener('scroll', updateOnScroll);\n window.addEventListener('resize', updateOnScroll);\n } else {\n (element as Element).addEventListener('scroll', updateOnScroll);\n }\n });\n\n return {\n resizeObserver,\n updateOnScroll,\n scrollableElements,\n };\n };\n\n const createCleanupSystem = (\n overlay: HTMLElement,\n observers: ReturnType<typeof setupObservers>,\n eventHandlers: ReturnType<typeof setupEventHandlers>\n ) => {\n window.__strapi_previewCleanup = () => {\n observers.resizeObserver.disconnect();\n\n // Remove all scroll listeners\n observers.scrollableElements.forEach((element) => {\n if (element === window) {\n window.removeEventListener('scroll', observers.updateOnScroll);\n window.removeEventListener('resize', observers.updateOnScroll);\n } else {\n (element as Element).removeEventListener('scroll', observers.updateOnScroll);\n }\n });\n\n window.removeEventListener('message', eventHandlers.handleMessages);\n if (overlay.parentNode) {\n overlay.parentNode.removeChild(overlay);\n }\n };\n };\n\n /* -----------------------------------------------------------------------------------------------\n * Orchestration\n * ---------------------------------------------------------------------------------------------*/\n\n setupStegaDecoding().then(() => {\n const overlay = createOverlaySystem();\n const highlightManager = createHighlightManager(overlay);\n const eventHandlers = setupEventHandlers(highlightManager);\n const observers = setupObservers(highlightManager);\n createCleanupSystem(overlay, observers, eventHandlers);\n });\n};\n\nexport { previewScript };\n"],"names":["previewScript","shouldRun","HIGHLIGHT_PADDING","HIGHLIGHT_COLOR","window","__strapi_HIGHLIGHT_COLOR","DISABLE_STEGA_DECODING","__strapi_DISABLE_STEGA_DECODING","SOURCE_ATTRIBUTE","OVERLAY_ID","INTERNAL_EVENTS","WILL_EDIT_FIELD","STRAPI_FIELD_TYPING","STRAPI_FIELD_FOCUS","STRAPI_FIELD_BLUR","sendMessage","type","payload","parent","postMessage","setupStegaDecoding","vercelStegaDecode","stegaDecode","allElements","document","querySelectorAll","Array","from","forEach","element","directTextContent","childNodes","filter","node","nodeType","Node","TEXT_NODE","map","textContent","join","result","setAttribute","key","error","createOverlaySystem","existingOverlay","getElementById","remove","__strapi_previewCleanup","overlay","createElement","id","style","cssText","body","appendChild","createHighlightManager","elements","highlights","focusedField","focusedHighlights","drawOverlay","target","highlight","rect","getBoundingClientRect","width","height","transform","left","top","updateAllHighlights","index","HTMLElement","editButton","addEventListener","outlineColor","display","borderRadius","fieldPath","getAttribute","triggerEdit","e","stopPropagation","preventDefault","path","position","push","setFocusedField","field","getFocusedField","setupEventHandlers","highlightManager","handleMessages","event","data","value","matchingElements","length","indexOf","setupObservers","resizeObserver","ResizeObserver","observe","documentElement","updateOnScroll","scrollableElements","Set","add","parentElement","computedStyle","getComputedStyle","overflow","overflowX","overflowY","includes","createCleanupSystem","observers","eventHandlers","disconnect","removeEventListener","parentNode","removeChild","then"],"mappings":"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"}
@@ -0,0 +1,297 @@
1
+ // NOTE: This override is for the properties on _user's site_, it's not about Strapi Admin.
2
+ /**
3
+ * previewScript will be injected into the preview iframe after being stringified.
4
+ * Therefore it CANNOT use any imports, or refer to any variables outside of its own scope.
5
+ * It's why many functions are defined within previewScript, it's the only way to avoid going full spaghetti.
6
+ * To get a better overview of everything previewScript does, go to the orchestration part at its end.
7
+ */ const previewScript = (shouldRun = true)=>{
8
+ /* -----------------------------------------------------------------------------------------------
9
+ * Params
10
+ * ---------------------------------------------------------------------------------------------*/ const HIGHLIGHT_PADDING = 2; // in pixels
11
+ const HIGHLIGHT_COLOR = window.__strapi_HIGHLIGHT_COLOR ?? '#4945ff';
12
+ const DISABLE_STEGA_DECODING = window.__strapi_DISABLE_STEGA_DECODING ?? false;
13
+ const SOURCE_ATTRIBUTE = 'data-strapi-source';
14
+ const OVERLAY_ID = 'strapi-preview-overlay';
15
+ const INTERNAL_EVENTS = {
16
+ WILL_EDIT_FIELD: 'willEditField',
17
+ STRAPI_FIELD_TYPING: 'strapiFieldTyping',
18
+ STRAPI_FIELD_FOCUS: 'strapiFieldFocus',
19
+ STRAPI_FIELD_BLUR: 'strapiFieldBlur'
20
+ };
21
+ /**
22
+ * Calling the function in no-run mode lets us retrieve the constants from other files and keep
23
+ * a single source of truth for them. It's the only way to do this because this script can't
24
+ * refer to any variables outside of its own scope, because it's stringified before it's run.
25
+ */ if (!shouldRun) {
26
+ return {
27
+ INTERNAL_EVENTS
28
+ };
29
+ }
30
+ /* -----------------------------------------------------------------------------------------------
31
+ * Utils
32
+ * ---------------------------------------------------------------------------------------------*/ const sendMessage = (type, payload)=>{
33
+ window.parent.postMessage({
34
+ type,
35
+ payload
36
+ }, '*');
37
+ };
38
+ /* -----------------------------------------------------------------------------------------------
39
+ * Functional blocks
40
+ * ---------------------------------------------------------------------------------------------*/ const setupStegaDecoding = async ()=>{
41
+ if (DISABLE_STEGA_DECODING) {
42
+ return;
43
+ }
44
+ const { vercelStegaDecode: stegaDecode } = await import(// @ts-expect-error it's not a local dependency
45
+ // eslint-disable-next-line import/no-unresolved
46
+ 'https://cdn.jsdelivr.net/npm/@vercel/stega@0.1.2/+esm');
47
+ const allElements = document.querySelectorAll('*');
48
+ Array.from(allElements).forEach((element)=>{
49
+ const directTextContent = Array.from(element.childNodes).filter((node)=>node.nodeType === Node.TEXT_NODE).map((node)=>node.textContent || '').join('');
50
+ if (directTextContent) {
51
+ try {
52
+ const result = stegaDecode(directTextContent);
53
+ if (result) {
54
+ element.setAttribute(SOURCE_ATTRIBUTE, result.key);
55
+ }
56
+ } catch (error) {}
57
+ }
58
+ });
59
+ };
60
+ const createOverlaySystem = ()=>{
61
+ const existingOverlay = document.getElementById(OVERLAY_ID);
62
+ if (existingOverlay) {
63
+ existingOverlay.remove();
64
+ }
65
+ window.__strapi_previewCleanup?.();
66
+ const overlay = document.createElement('div');
67
+ overlay.id = OVERLAY_ID;
68
+ overlay.style.cssText = `
69
+ position: fixed;
70
+ top: 0;
71
+ left: 0;
72
+ width: 100%;
73
+ height: 100%;
74
+ pointer-events: none;
75
+ z-index: 9999;
76
+ `;
77
+ window.document.body.appendChild(overlay);
78
+ return overlay;
79
+ };
80
+ const createHighlightManager = (overlay)=>{
81
+ const elements = window.document.querySelectorAll(`[${SOURCE_ATTRIBUTE}]`);
82
+ const highlights = [];
83
+ let focusedField = null;
84
+ const focusedHighlights = [];
85
+ const drawOverlay = (target, highlight)=>{
86
+ if (!highlight) return;
87
+ const rect = target.getBoundingClientRect();
88
+ highlight.style.width = `${rect.width + HIGHLIGHT_PADDING * 2}px`;
89
+ highlight.style.height = `${rect.height + HIGHLIGHT_PADDING * 2}px`;
90
+ highlight.style.transform = `translate(${rect.left - HIGHLIGHT_PADDING}px, ${rect.top - HIGHLIGHT_PADDING}px)`;
91
+ };
92
+ const updateAllHighlights = ()=>{
93
+ highlights.forEach((highlight, index)=>{
94
+ const element = elements[index];
95
+ if (element && highlight) {
96
+ drawOverlay(element, highlight);
97
+ }
98
+ });
99
+ };
100
+ elements.forEach((element)=>{
101
+ if (element instanceof HTMLElement) {
102
+ const highlight = document.createElement('div');
103
+ highlight.style.cssText = `
104
+ position: absolute;
105
+ outline: 2px solid transparent;
106
+ pointer-events: auto;
107
+ border-radius: 2px 0 2px 2px;
108
+ background-color: transparent;
109
+ will-change: transform;
110
+ transition: outline-color 0.1s ease-in-out;
111
+ `;
112
+ const editButton = document.createElement('button');
113
+ editButton.textContent = 'Edit';
114
+ editButton.style.cssText = `
115
+ position: absolute;
116
+ top: 0px;
117
+ right: -${HIGHLIGHT_PADDING}px;
118
+ transform: translateY(-100%);
119
+ font-size: 12px;
120
+ padding: 4px 8px;
121
+ background: ${HIGHLIGHT_COLOR};
122
+ color: white;
123
+ border: none;
124
+ border-radius: 4px 4px 0 0;
125
+ cursor: pointer;
126
+ pointer-events: auto;
127
+ display: none;
128
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
129
+ z-index: 10000;
130
+ user-select: none;
131
+ `;
132
+ highlight.addEventListener('mouseenter', ()=>{
133
+ highlight.style.outlineColor = HIGHLIGHT_COLOR;
134
+ editButton.style.display = 'block';
135
+ highlight.style.borderRadius = '2px 0 2px 2px';
136
+ });
137
+ highlight.addEventListener('mouseleave', ()=>{
138
+ const fieldPath = element.getAttribute(SOURCE_ATTRIBUTE);
139
+ if (fieldPath !== focusedField) {
140
+ highlight.style.outlineColor = 'transparent';
141
+ }
142
+ editButton.style.display = 'none';
143
+ highlight.style.borderRadius = '2px';
144
+ });
145
+ const triggerEdit = (e)=>{
146
+ e.stopPropagation();
147
+ e.preventDefault();
148
+ const fieldPath = element.getAttribute(SOURCE_ATTRIBUTE);
149
+ if (fieldPath && window.parent) {
150
+ const rect = element.getBoundingClientRect();
151
+ sendMessage(INTERNAL_EVENTS.WILL_EDIT_FIELD, {
152
+ path: fieldPath,
153
+ position: {
154
+ top: rect.top,
155
+ left: rect.left,
156
+ width: rect.width,
157
+ height: rect.height
158
+ }
159
+ });
160
+ }
161
+ };
162
+ editButton.addEventListener('click', triggerEdit);
163
+ highlight.addEventListener('dblclick', triggerEdit);
164
+ highlight.appendChild(editButton);
165
+ highlights.push(highlight);
166
+ overlay.appendChild(highlight);
167
+ drawOverlay(element, highlight);
168
+ }
169
+ });
170
+ return {
171
+ elements,
172
+ highlights,
173
+ focusedField,
174
+ focusedHighlights,
175
+ updateAllHighlights,
176
+ setFocusedField: (field)=>{
177
+ focusedField = field;
178
+ },
179
+ getFocusedField: ()=>focusedField
180
+ };
181
+ };
182
+ const setupEventHandlers = (highlightManager)=>{
183
+ const handleMessages = (event)=>{
184
+ if (event.data?.type === INTERNAL_EVENTS.STRAPI_FIELD_TYPING) {
185
+ const { field, value } = event.data.payload;
186
+ if (field) {
187
+ const matchingElements = document.querySelectorAll(`[${SOURCE_ATTRIBUTE}="${field}"]`);
188
+ matchingElements.forEach((element)=>{
189
+ if (element instanceof HTMLElement) {
190
+ element.textContent = value || '';
191
+ }
192
+ });
193
+ }
194
+ } else if (event.data?.type === INTERNAL_EVENTS.STRAPI_FIELD_FOCUS) {
195
+ const { field } = event.data.payload;
196
+ if (field) {
197
+ highlightManager.focusedHighlights.forEach((highlight)=>{
198
+ highlight.style.outlineColor = 'transparent';
199
+ });
200
+ highlightManager.focusedHighlights.length = 0;
201
+ highlightManager.setFocusedField(field);
202
+ const matchingElements = document.querySelectorAll(`[${SOURCE_ATTRIBUTE}="${field}"]`);
203
+ matchingElements.forEach((element)=>{
204
+ const highlight = highlightManager.highlights[Array.from(highlightManager.elements).indexOf(element)];
205
+ if (highlight) {
206
+ highlight.style.outlineColor = HIGHLIGHT_COLOR;
207
+ highlightManager.focusedHighlights.push(highlight);
208
+ }
209
+ });
210
+ }
211
+ } else if (event.data?.type === INTERNAL_EVENTS.STRAPI_FIELD_BLUR) {
212
+ const { field } = event.data.payload;
213
+ if (field === highlightManager.getFocusedField()) {
214
+ highlightManager.focusedHighlights.forEach((highlight)=>{
215
+ highlight.style.outlineColor = 'transparent';
216
+ });
217
+ highlightManager.focusedHighlights.length = 0;
218
+ highlightManager.setFocusedField(null);
219
+ }
220
+ }
221
+ };
222
+ window.addEventListener('message', handleMessages);
223
+ return {
224
+ handleMessages
225
+ };
226
+ };
227
+ const setupObservers = (highlightManager)=>{
228
+ const resizeObserver = new ResizeObserver(()=>{
229
+ highlightManager.updateAllHighlights();
230
+ });
231
+ highlightManager.elements.forEach((element)=>{
232
+ resizeObserver.observe(element);
233
+ });
234
+ resizeObserver.observe(document.documentElement);
235
+ const updateOnScroll = ()=>{
236
+ highlightManager.updateAllHighlights();
237
+ };
238
+ // Find all scrollable ancestors for all tracked elements
239
+ const scrollableElements = new Set();
240
+ scrollableElements.add(window); // Add window as a special case
241
+ highlightManager.elements.forEach((element)=>{
242
+ let parent = element.parentElement;
243
+ while(parent){
244
+ const computedStyle = window.getComputedStyle(parent);
245
+ const overflow = computedStyle.overflow + computedStyle.overflowX + computedStyle.overflowY;
246
+ if (overflow.includes('scroll') || overflow.includes('auto')) {
247
+ scrollableElements.add(parent);
248
+ }
249
+ parent = parent.parentElement;
250
+ }
251
+ });
252
+ // Add scroll listeners to all scrollable elements
253
+ scrollableElements.forEach((element)=>{
254
+ if (element === window) {
255
+ window.addEventListener('scroll', updateOnScroll);
256
+ window.addEventListener('resize', updateOnScroll);
257
+ } else {
258
+ element.addEventListener('scroll', updateOnScroll);
259
+ }
260
+ });
261
+ return {
262
+ resizeObserver,
263
+ updateOnScroll,
264
+ scrollableElements
265
+ };
266
+ };
267
+ const createCleanupSystem = (overlay, observers, eventHandlers)=>{
268
+ window.__strapi_previewCleanup = ()=>{
269
+ observers.resizeObserver.disconnect();
270
+ // Remove all scroll listeners
271
+ observers.scrollableElements.forEach((element)=>{
272
+ if (element === window) {
273
+ window.removeEventListener('scroll', observers.updateOnScroll);
274
+ window.removeEventListener('resize', observers.updateOnScroll);
275
+ } else {
276
+ element.removeEventListener('scroll', observers.updateOnScroll);
277
+ }
278
+ });
279
+ window.removeEventListener('message', eventHandlers.handleMessages);
280
+ if (overlay.parentNode) {
281
+ overlay.parentNode.removeChild(overlay);
282
+ }
283
+ };
284
+ };
285
+ /* -----------------------------------------------------------------------------------------------
286
+ * Orchestration
287
+ * ---------------------------------------------------------------------------------------------*/ setupStegaDecoding().then(()=>{
288
+ const overlay = createOverlaySystem();
289
+ const highlightManager = createHighlightManager(overlay);
290
+ const eventHandlers = setupEventHandlers(highlightManager);
291
+ const observers = setupObservers(highlightManager);
292
+ createCleanupSystem(overlay, observers, eventHandlers);
293
+ });
294
+ };
295
+
296
+ export { previewScript };
297
+ //# sourceMappingURL=previewScript.mjs.map