@strapi/admin 4.20.5 → 5.0.0-alpha.1

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 (1201) hide show
  1. package/dist/_chunks/AdminSeatInfo-20pkL95U.mjs +101 -0
  2. package/dist/_chunks/AdminSeatInfo-20pkL95U.mjs.map +1 -0
  3. package/dist/_chunks/AdminSeatInfo-TjK5LW2b.js +101 -0
  4. package/dist/_chunks/AdminSeatInfo-TjK5LW2b.js.map +1 -0
  5. package/dist/_chunks/ApplicationInfoPage-1OdKMDYH.js +689 -0
  6. package/dist/_chunks/ApplicationInfoPage-1OdKMDYH.js.map +1 -0
  7. package/dist/_chunks/ApplicationInfoPage-ed6y9Q-B.mjs +667 -0
  8. package/dist/_chunks/ApplicationInfoPage-ed6y9Q-B.mjs.map +1 -0
  9. package/dist/_chunks/AuthResponse-Hxop00n-.mjs +43 -0
  10. package/dist/_chunks/AuthResponse-Hxop00n-.mjs.map +1 -0
  11. package/dist/_chunks/AuthResponse-sca_wjIN.js +64 -0
  12. package/dist/_chunks/AuthResponse-sca_wjIN.js.map +1 -0
  13. package/dist/_chunks/AuthenticatedLayout-PPlOm7kb.js +1132 -0
  14. package/dist/_chunks/AuthenticatedLayout-PPlOm7kb.js.map +1 -0
  15. package/dist/_chunks/AuthenticatedLayout-knXNB2i2.mjs +1105 -0
  16. package/dist/_chunks/AuthenticatedLayout-knXNB2i2.mjs.map +1 -0
  17. package/dist/_chunks/ComponentConfigurationPage-okd3XovW.mjs +235 -0
  18. package/dist/_chunks/ComponentConfigurationPage-okd3XovW.mjs.map +1 -0
  19. package/dist/_chunks/ComponentConfigurationPage-xZMDjeVf.js +254 -0
  20. package/dist/_chunks/ComponentConfigurationPage-xZMDjeVf.js.map +1 -0
  21. package/dist/_chunks/ComponentIcon-49LyfYCX.js +176 -0
  22. package/dist/_chunks/ComponentIcon-49LyfYCX.js.map +1 -0
  23. package/dist/_chunks/ComponentIcon-J3aEhVgQ.mjs +158 -0
  24. package/dist/_chunks/ComponentIcon-J3aEhVgQ.mjs.map +1 -0
  25. package/dist/_chunks/ContentBox-4TRGOJYI.js +41 -0
  26. package/dist/_chunks/ContentBox-4TRGOJYI.js.map +1 -0
  27. package/dist/_chunks/ContentBox-EWvnSfCf.mjs +40 -0
  28. package/dist/_chunks/ContentBox-EWvnSfCf.mjs.map +1 -0
  29. package/dist/_chunks/CreateActionEE-E6YNdAVx.js +55 -0
  30. package/dist/_chunks/CreateActionEE-E6YNdAVx.js.map +1 -0
  31. package/dist/_chunks/CreateActionEE-PaZYJ410.mjs +53 -0
  32. package/dist/_chunks/CreateActionEE-PaZYJ410.mjs.map +1 -0
  33. package/dist/_chunks/CreatePage-1Oi4-aR6.js +267 -0
  34. package/dist/_chunks/CreatePage-1Oi4-aR6.js.map +1 -0
  35. package/dist/_chunks/CreatePage-6458K0l9.mjs +14 -0
  36. package/dist/_chunks/CreatePage-6458K0l9.mjs.map +1 -0
  37. package/dist/_chunks/CreatePage-DmNFNVN9.js +268 -0
  38. package/dist/_chunks/CreatePage-DmNFNVN9.js.map +1 -0
  39. package/dist/_chunks/CreatePage-P1F3dkB3.mjs +248 -0
  40. package/dist/_chunks/CreatePage-P1F3dkB3.mjs.map +1 -0
  41. package/dist/_chunks/CreatePage-PM_r99U5.mjs +246 -0
  42. package/dist/_chunks/CreatePage-PM_r99U5.mjs.map +1 -0
  43. package/dist/_chunks/CreatePage-hlkPO2Cv.js +14 -0
  44. package/dist/_chunks/CreatePage-hlkPO2Cv.js.map +1 -0
  45. package/dist/_chunks/CreateView-AWmN1xWJ.js +13 -0
  46. package/dist/_chunks/CreateView-AWmN1xWJ.js.map +1 -0
  47. package/dist/_chunks/CreateView-cTvLLIgu.mjs +13 -0
  48. package/dist/_chunks/CreateView-cTvLLIgu.mjs.map +1 -0
  49. package/dist/_chunks/CreateView-hUH4bf5k.js +13 -0
  50. package/dist/_chunks/CreateView-hUH4bf5k.js.map +1 -0
  51. package/dist/_chunks/CreateView-pBI75ZwZ.mjs +13 -0
  52. package/dist/_chunks/CreateView-pBI75ZwZ.mjs.map +1 -0
  53. package/dist/_chunks/EditConfigurationPage-LItt0mJo.mjs +129 -0
  54. package/dist/_chunks/EditConfigurationPage-LItt0mJo.mjs.map +1 -0
  55. package/dist/_chunks/EditConfigurationPage-PZ4yq1bM.js +148 -0
  56. package/dist/_chunks/EditConfigurationPage-PZ4yq1bM.js.map +1 -0
  57. package/dist/_chunks/EditPage--EPGgPNr.mjs +260 -0
  58. package/dist/_chunks/EditPage--EPGgPNr.mjs.map +1 -0
  59. package/dist/_chunks/EditPage-30rqjB1d.mjs +303 -0
  60. package/dist/_chunks/EditPage-30rqjB1d.mjs.map +1 -0
  61. package/dist/_chunks/EditPage-GRIZWtGz.mjs +790 -0
  62. package/dist/_chunks/EditPage-GRIZWtGz.mjs.map +1 -0
  63. package/dist/_chunks/EditPage-MPNLCYgQ.mjs +326 -0
  64. package/dist/_chunks/EditPage-MPNLCYgQ.mjs.map +1 -0
  65. package/dist/_chunks/EditPage-RpzlPkkU.js +811 -0
  66. package/dist/_chunks/EditPage-RpzlPkkU.js.map +1 -0
  67. package/dist/_chunks/EditPage-W6hncyNY.js +322 -0
  68. package/dist/_chunks/EditPage-W6hncyNY.js.map +1 -0
  69. package/dist/_chunks/EditPage-_N_lm93z.js +348 -0
  70. package/dist/_chunks/EditPage-_N_lm93z.js.map +1 -0
  71. package/dist/_chunks/EditPage-mU2WAH0F.js +280 -0
  72. package/dist/_chunks/EditPage-mU2WAH0F.js.map +1 -0
  73. package/dist/_chunks/EditView-0lXpbgG0.mjs +339 -0
  74. package/dist/_chunks/EditView-0lXpbgG0.mjs.map +1 -0
  75. package/dist/_chunks/EditView-wDP9PNQY.js +359 -0
  76. package/dist/_chunks/EditView-wDP9PNQY.js.map +1 -0
  77. package/dist/_chunks/EditViewPage-0Pd8zBi7.js +865 -0
  78. package/dist/_chunks/EditViewPage-0Pd8zBi7.js.map +1 -0
  79. package/dist/_chunks/EditViewPage-R6diW-gL.mjs +197 -0
  80. package/dist/_chunks/EditViewPage-R6diW-gL.mjs.map +1 -0
  81. package/dist/_chunks/EditViewPage-ed0-10GO.js +218 -0
  82. package/dist/_chunks/EditViewPage-ed0-10GO.js.map +1 -0
  83. package/dist/_chunks/EditViewPage-uWYR_o8w.mjs +838 -0
  84. package/dist/_chunks/EditViewPage-uWYR_o8w.mjs.map +1 -0
  85. package/dist/_chunks/EventsTable-CqN6AzV9.mjs +32 -0
  86. package/dist/_chunks/EventsTable-CqN6AzV9.mjs.map +1 -0
  87. package/dist/_chunks/EventsTable-R_AHW6Z4.js +32 -0
  88. package/dist/_chunks/EventsTable-R_AHW6Z4.js.map +1 -0
  89. package/dist/_chunks/FieldTypeIcon-1WDWx0cR.js +49 -0
  90. package/dist/_chunks/FieldTypeIcon-1WDWx0cR.js.map +1 -0
  91. package/dist/_chunks/FieldTypeIcon-rAK1gg9p.mjs +50 -0
  92. package/dist/_chunks/FieldTypeIcon-rAK1gg9p.mjs.map +1 -0
  93. package/dist/_chunks/Filters-f6ghLf0Z.js +505 -0
  94. package/dist/_chunks/Filters-f6ghLf0Z.js.map +1 -0
  95. package/dist/_chunks/Filters-rPaxqj4F.mjs +487 -0
  96. package/dist/_chunks/Filters-rPaxqj4F.mjs.map +1 -0
  97. package/dist/_chunks/Form-QOZA9Aq6.mjs +737 -0
  98. package/dist/_chunks/Form-QOZA9Aq6.mjs.map +1 -0
  99. package/dist/_chunks/Form-eqzCPjSo.js +759 -0
  100. package/dist/_chunks/Form-eqzCPjSo.js.map +1 -0
  101. package/dist/_chunks/History-Eq4_WQPf.mjs +428 -0
  102. package/dist/_chunks/History-Eq4_WQPf.mjs.map +1 -0
  103. package/dist/_chunks/History-j00hpmXV.js +447 -0
  104. package/dist/_chunks/History-j00hpmXV.js.map +1 -0
  105. package/dist/_chunks/HomePage-3IVOMrYf.js +520 -0
  106. package/dist/_chunks/HomePage-3IVOMrYf.js.map +1 -0
  107. package/dist/_chunks/HomePage-79fqDlve.js +11 -0
  108. package/dist/_chunks/HomePage-79fqDlve.js.map +1 -0
  109. package/dist/_chunks/HomePage-O-TRGX5T.mjs +518 -0
  110. package/dist/_chunks/HomePage-O-TRGX5T.mjs.map +1 -0
  111. package/dist/_chunks/HomePage-gTElgmEK.mjs +11 -0
  112. package/dist/_chunks/HomePage-gTElgmEK.mjs.map +1 -0
  113. package/dist/_chunks/InputRenderer-AVDw8MeU.js +5274 -0
  114. package/dist/_chunks/InputRenderer-AVDw8MeU.js.map +1 -0
  115. package/dist/_chunks/InputRenderer-bJwYq9ga.mjs +5241 -0
  116. package/dist/_chunks/InputRenderer-bJwYq9ga.mjs.map +1 -0
  117. package/dist/_chunks/InstalledPluginsPage-FkR2xkQz.js +123 -0
  118. package/dist/_chunks/InstalledPluginsPage-FkR2xkQz.js.map +1 -0
  119. package/dist/_chunks/InstalledPluginsPage-R2hVFPZl.mjs +104 -0
  120. package/dist/_chunks/InstalledPluginsPage-R2hVFPZl.mjs.map +1 -0
  121. package/dist/_chunks/Layout-G49-Vc5u.js +219 -0
  122. package/dist/_chunks/Layout-G49-Vc5u.js.map +1 -0
  123. package/dist/_chunks/Layout-cV6Se3U9.mjs +197 -0
  124. package/dist/_chunks/Layout-cV6Se3U9.mjs.map +1 -0
  125. package/dist/_chunks/Layout-jweb3cF3.js +90 -0
  126. package/dist/_chunks/Layout-jweb3cF3.js.map +1 -0
  127. package/dist/_chunks/Layout-omCNy92r.mjs +89 -0
  128. package/dist/_chunks/Layout-omCNy92r.mjs.map +1 -0
  129. package/dist/_chunks/ListConfigurationPage-70qtv4Ci.js +667 -0
  130. package/dist/_chunks/ListConfigurationPage-70qtv4Ci.js.map +1 -0
  131. package/dist/_chunks/ListConfigurationPage-PrJNO_6y.mjs +646 -0
  132. package/dist/_chunks/ListConfigurationPage-PrJNO_6y.mjs.map +1 -0
  133. package/dist/_chunks/ListPage-2lswUYQN.js +561 -0
  134. package/dist/_chunks/ListPage-2lswUYQN.js.map +1 -0
  135. package/dist/_chunks/ListPage-78Cv8Vfq.js +507 -0
  136. package/dist/_chunks/ListPage-78Cv8Vfq.js.map +1 -0
  137. package/dist/_chunks/ListPage-7dZ3nYvc.js +299 -0
  138. package/dist/_chunks/ListPage-7dZ3nYvc.js.map +1 -0
  139. package/dist/_chunks/ListPage-Cvn3WbMH.mjs +340 -0
  140. package/dist/_chunks/ListPage-Cvn3WbMH.mjs.map +1 -0
  141. package/dist/_chunks/ListPage-Ms6egnF5.js +11 -0
  142. package/dist/_chunks/ListPage-Ms6egnF5.js.map +1 -0
  143. package/dist/_chunks/ListPage-NmUS_cOz.mjs +292 -0
  144. package/dist/_chunks/ListPage-NmUS_cOz.mjs.map +1 -0
  145. package/dist/_chunks/ListPage-Pf5LxUYn.js +313 -0
  146. package/dist/_chunks/ListPage-Pf5LxUYn.js.map +1 -0
  147. package/dist/_chunks/ListPage-Q81SX0vA.mjs +11 -0
  148. package/dist/_chunks/ListPage-Q81SX0vA.mjs.map +1 -0
  149. package/dist/_chunks/ListPage-edro79m2.mjs +486 -0
  150. package/dist/_chunks/ListPage-edro79m2.mjs.map +1 -0
  151. package/dist/_chunks/ListPage-mAUCZIg8.mjs +279 -0
  152. package/dist/_chunks/ListPage-mAUCZIg8.mjs.map +1 -0
  153. package/dist/_chunks/ListPage-xFkcmM1b.mjs +540 -0
  154. package/dist/_chunks/ListPage-xFkcmM1b.mjs.map +1 -0
  155. package/dist/_chunks/ListPage-yymh17qi.js +359 -0
  156. package/dist/_chunks/ListPage-yymh17qi.js.map +1 -0
  157. package/dist/_chunks/ListView--43zLiHW.mjs +205 -0
  158. package/dist/_chunks/ListView--43zLiHW.mjs.map +1 -0
  159. package/dist/_chunks/ListView-YtMAQnXL.js +225 -0
  160. package/dist/_chunks/ListView-YtMAQnXL.js.map +1 -0
  161. package/dist/_chunks/ListView-nfA6o3qO.js +235 -0
  162. package/dist/_chunks/ListView-nfA6o3qO.js.map +1 -0
  163. package/dist/_chunks/ListView-qPiKeCxj.mjs +215 -0
  164. package/dist/_chunks/ListView-qPiKeCxj.mjs.map +1 -0
  165. package/dist/_chunks/ListViewPage-Ys7-G2XX.js +965 -0
  166. package/dist/_chunks/ListViewPage-Ys7-G2XX.js.map +1 -0
  167. package/dist/_chunks/ListViewPage-fPFonK_X.mjs +941 -0
  168. package/dist/_chunks/ListViewPage-fPFonK_X.mjs.map +1 -0
  169. package/dist/_chunks/Login-6kXI90Vy.mjs +30 -0
  170. package/dist/_chunks/Login-6kXI90Vy.mjs.map +1 -0
  171. package/dist/_chunks/Login-Ge3DZEpr.js +32 -0
  172. package/dist/_chunks/Login-Ge3DZEpr.js.map +1 -0
  173. package/dist/_chunks/MagicLinkEE-HXWaLr0K.mjs +27 -0
  174. package/dist/_chunks/MagicLinkEE-HXWaLr0K.mjs.map +1 -0
  175. package/dist/_chunks/MagicLinkEE-sXtA2gUK.js +27 -0
  176. package/dist/_chunks/MagicLinkEE-sXtA2gUK.js.map +1 -0
  177. package/dist/_chunks/MarketplacePage-hVOJ9_0k.mjs +1003 -0
  178. package/dist/_chunks/MarketplacePage-hVOJ9_0k.mjs.map +1 -0
  179. package/dist/_chunks/MarketplacePage-s8KDwNwK.js +1027 -0
  180. package/dist/_chunks/MarketplacePage-s8KDwNwK.js.map +1 -0
  181. package/dist/_chunks/ModalForm-K_BmPh4N.js +25 -0
  182. package/dist/_chunks/ModalForm-K_BmPh4N.js.map +1 -0
  183. package/dist/_chunks/ModalForm-ULuD5ODP.mjs +25 -0
  184. package/dist/_chunks/ModalForm-ULuD5ODP.mjs.map +1 -0
  185. package/dist/_chunks/NoContentTypePage-7YEcgsE3.js +52 -0
  186. package/dist/_chunks/NoContentTypePage-7YEcgsE3.js.map +1 -0
  187. package/dist/_chunks/NoContentTypePage-szvJnQKF.mjs +52 -0
  188. package/dist/_chunks/NoContentTypePage-szvJnQKF.mjs.map +1 -0
  189. package/dist/_chunks/NoPermissionsPage-UX-5msLb.js +25 -0
  190. package/dist/_chunks/NoPermissionsPage-UX-5msLb.js.map +1 -0
  191. package/dist/_chunks/NoPermissionsPage-pqQFFlXa.mjs +25 -0
  192. package/dist/_chunks/NoPermissionsPage-pqQFFlXa.mjs.map +1 -0
  193. package/dist/_chunks/NotAllowed-MohR5HGD.mjs +36 -0
  194. package/dist/_chunks/NotAllowed-MohR5HGD.mjs.map +1 -0
  195. package/dist/_chunks/NotAllowed-NhYUk6La.js +37 -0
  196. package/dist/_chunks/NotAllowed-NhYUk6La.js.map +1 -0
  197. package/dist/_chunks/Ornaments-Aq2xidN_.mjs +211 -0
  198. package/dist/_chunks/Ornaments-Aq2xidN_.mjs.map +1 -0
  199. package/dist/_chunks/Ornaments-_AXIwJ-m.js +210 -0
  200. package/dist/_chunks/Ornaments-_AXIwJ-m.js.map +1 -0
  201. package/dist/_chunks/Permissions-NUaDxULo.mjs +2023 -0
  202. package/dist/_chunks/Permissions-NUaDxULo.mjs.map +1 -0
  203. package/dist/_chunks/Permissions-a0IZJ8dM.js +2055 -0
  204. package/dist/_chunks/Permissions-a0IZJ8dM.js.map +1 -0
  205. package/dist/_chunks/PrivateRoute-KGxyTa5b.js +19 -0
  206. package/dist/_chunks/PrivateRoute-KGxyTa5b.js.map +1 -0
  207. package/dist/_chunks/PrivateRoute-eP4-pBby.mjs +20 -0
  208. package/dist/_chunks/PrivateRoute-eP4-pBby.mjs.map +1 -0
  209. package/dist/_chunks/ProfilePage-LXB-_EZ8.mjs +392 -0
  210. package/dist/_chunks/ProfilePage-LXB-_EZ8.mjs.map +1 -0
  211. package/dist/_chunks/ProfilePage-MBCGqbc_.js +414 -0
  212. package/dist/_chunks/ProfilePage-MBCGqbc_.js.map +1 -0
  213. package/dist/_chunks/ReviewWorkflowsColumn-Ancp7-x3.js +33 -0
  214. package/dist/_chunks/ReviewWorkflowsColumn-Ancp7-x3.js.map +1 -0
  215. package/dist/_chunks/ReviewWorkflowsColumn-WzYpj2O3.mjs +33 -0
  216. package/dist/_chunks/ReviewWorkflowsColumn-WzYpj2O3.mjs.map +1 -0
  217. package/dist/_chunks/SelectRoles-Dxz_rAaT.mjs +103 -0
  218. package/dist/_chunks/SelectRoles-Dxz_rAaT.mjs.map +1 -0
  219. package/dist/_chunks/SelectRoles-Pr2wqehq.js +104 -0
  220. package/dist/_chunks/SelectRoles-Pr2wqehq.js.map +1 -0
  221. package/dist/_chunks/SingleSignOnPage-4dK4id8H.js +260 -0
  222. package/dist/_chunks/SingleSignOnPage-4dK4id8H.js.map +1 -0
  223. package/dist/_chunks/SingleSignOnPage-gxgIeURz.mjs +241 -0
  224. package/dist/_chunks/SingleSignOnPage-gxgIeURz.mjs.map +1 -0
  225. package/dist/_chunks/Table-NiTkS4IC.mjs +164 -0
  226. package/dist/_chunks/Table-NiTkS4IC.mjs.map +1 -0
  227. package/dist/_chunks/Table-_9gVkGGi.js +184 -0
  228. package/dist/_chunks/Table-_9gVkGGi.js.map +1 -0
  229. package/dist/_chunks/TokenTypeSelect-3aWUm1cW.js +373 -0
  230. package/dist/_chunks/TokenTypeSelect-3aWUm1cW.js.map +1 -0
  231. package/dist/_chunks/TokenTypeSelect-jtfCyMMZ.mjs +354 -0
  232. package/dist/_chunks/TokenTypeSelect-jtfCyMMZ.mjs.map +1 -0
  233. package/dist/_chunks/UseCasePage-0qXYZ8kt.mjs +148 -0
  234. package/dist/_chunks/UseCasePage-0qXYZ8kt.mjs.map +1 -0
  235. package/dist/_chunks/UseCasePage-QK-B8FfM.js +169 -0
  236. package/dist/_chunks/UseCasePage-QK-B8FfM.js.map +1 -0
  237. package/dist/_chunks/apiTokens-DO6vkoyd.mjs +60 -0
  238. package/dist/_chunks/apiTokens-DO6vkoyd.mjs.map +1 -0
  239. package/dist/_chunks/apiTokens-TayNdk_V.js +59 -0
  240. package/dist/_chunks/apiTokens-TayNdk_V.js.map +1 -0
  241. package/dist/_chunks/ar-QC-k5ddo.js +936 -0
  242. package/dist/_chunks/ar-QC-k5ddo.js.map +1 -0
  243. package/dist/_chunks/ar-Z3BD7TXr.mjs +936 -0
  244. package/dist/_chunks/ar-Z3BD7TXr.mjs.map +1 -0
  245. package/dist/_chunks/ca-aXWlXG9g.mjs +724 -0
  246. package/dist/_chunks/ca-aXWlXG9g.mjs.map +1 -0
  247. package/dist/_chunks/ca-pKSR4Q9q.js +724 -0
  248. package/dist/_chunks/ca-pKSR4Q9q.js.map +1 -0
  249. package/dist/_chunks/constants-FEW7x2Od.mjs +50 -0
  250. package/dist/_chunks/constants-FEW7x2Od.mjs.map +1 -0
  251. package/dist/_chunks/constants-RZp8o_c4.js +52 -0
  252. package/dist/_chunks/constants-RZp8o_c4.js.map +1 -0
  253. package/dist/_chunks/constants-Xd-X3SCR.js +188 -0
  254. package/dist/_chunks/constants-Xd-X3SCR.js.map +1 -0
  255. package/dist/_chunks/constants-_T5uxsuv.mjs +169 -0
  256. package/dist/_chunks/constants-_T5uxsuv.mjs.map +1 -0
  257. package/dist/_chunks/cs-6sDi2LJs.js +291 -0
  258. package/dist/_chunks/cs-6sDi2LJs.js.map +1 -0
  259. package/dist/_chunks/cs-zUoPZI4s.mjs +291 -0
  260. package/dist/_chunks/cs-zUoPZI4s.mjs.map +1 -0
  261. package/dist/_chunks/de-MMN7NdI0.js +716 -0
  262. package/dist/_chunks/de-MMN7NdI0.js.map +1 -0
  263. package/dist/_chunks/de-ek6cDDK8.mjs +716 -0
  264. package/dist/_chunks/de-ek6cDDK8.mjs.map +1 -0
  265. package/dist/_chunks/dk-BdUx8cFW.js +634 -0
  266. package/dist/_chunks/dk-BdUx8cFW.js.map +1 -0
  267. package/dist/_chunks/dk-opXY5SME.mjs +634 -0
  268. package/dist/_chunks/dk-opXY5SME.mjs.map +1 -0
  269. package/dist/_chunks/en-9q9Qw4Vl.js +1065 -0
  270. package/dist/_chunks/en-9q9Qw4Vl.js.map +1 -0
  271. package/dist/_chunks/en-YVPg1Mvo.mjs +1065 -0
  272. package/dist/_chunks/en-YVPg1Mvo.mjs.map +1 -0
  273. package/dist/_chunks/es-9imfnBIU.js +796 -0
  274. package/dist/_chunks/es-9imfnBIU.js.map +1 -0
  275. package/dist/_chunks/es-qWS0DuB6.mjs +796 -0
  276. package/dist/_chunks/es-qWS0DuB6.mjs.map +1 -0
  277. package/dist/_chunks/eu-LBdMNPpr.mjs +832 -0
  278. package/dist/_chunks/eu-LBdMNPpr.mjs.map +1 -0
  279. package/dist/_chunks/eu-aAvfsPGu.js +832 -0
  280. package/dist/_chunks/eu-aAvfsPGu.js.map +1 -0
  281. package/dist/_chunks/fr-KXfw9S0F.js +762 -0
  282. package/dist/_chunks/fr-KXfw9S0F.js.map +1 -0
  283. package/dist/_chunks/fr-jPBjKfV_.mjs +762 -0
  284. package/dist/_chunks/fr-jPBjKfV_.mjs.map +1 -0
  285. package/dist/_chunks/gu-Y0z1LfFv.js +623 -0
  286. package/dist/_chunks/gu-Y0z1LfFv.js.map +1 -0
  287. package/dist/_chunks/gu-bURNBu5c.mjs +623 -0
  288. package/dist/_chunks/gu-bURNBu5c.mjs.map +1 -0
  289. package/dist/_chunks/hi-MbNfZZA_.js +722 -0
  290. package/dist/_chunks/hi-MbNfZZA_.js.map +1 -0
  291. package/dist/_chunks/hi-s7B600dI.mjs +722 -0
  292. package/dist/_chunks/hi-s7B600dI.mjs.map +1 -0
  293. package/dist/_chunks/hu-HZwWiL3b.mjs +832 -0
  294. package/dist/_chunks/hu-HZwWiL3b.mjs.map +1 -0
  295. package/dist/_chunks/hu-QV5uhOW9.js +832 -0
  296. package/dist/_chunks/hu-QV5uhOW9.js.map +1 -0
  297. package/dist/_chunks/id-bByqKITV.mjs +448 -0
  298. package/dist/_chunks/id-bByqKITV.mjs.map +1 -0
  299. package/dist/_chunks/id-kFCOSN99.js +448 -0
  300. package/dist/_chunks/id-kFCOSN99.js.map +1 -0
  301. package/dist/_chunks/index-ejSDPT-T.js +10831 -0
  302. package/dist/_chunks/index-ejSDPT-T.js.map +1 -0
  303. package/dist/_chunks/index-hjUhNUvw.mjs +10795 -0
  304. package/dist/_chunks/index-hjUhNUvw.mjs.map +1 -0
  305. package/dist/_chunks/it-7xUr74VQ.mjs +459 -0
  306. package/dist/_chunks/it-7xUr74VQ.mjs.map +1 -0
  307. package/dist/_chunks/it-XZ_jYkVh.js +459 -0
  308. package/dist/_chunks/it-XZ_jYkVh.js.map +1 -0
  309. package/dist/_chunks/ja-Thwj6BLp.js +633 -0
  310. package/dist/_chunks/ja-Thwj6BLp.js.map +1 -0
  311. package/dist/_chunks/ja-uYLwB0aQ.mjs +633 -0
  312. package/dist/_chunks/ja-uYLwB0aQ.mjs.map +1 -0
  313. package/dist/_chunks/ko-_jJKWFgE.js +631 -0
  314. package/dist/_chunks/ko-_jJKWFgE.js.map +1 -0
  315. package/dist/_chunks/ko-s0EMd2R_.mjs +631 -0
  316. package/dist/_chunks/ko-s0EMd2R_.mjs.map +1 -0
  317. package/dist/_chunks/ml-J8WVOGJw.mjs +722 -0
  318. package/dist/_chunks/ml-J8WVOGJw.mjs.map +1 -0
  319. package/dist/_chunks/ml-dV8cEwE9.js +722 -0
  320. package/dist/_chunks/ml-dV8cEwE9.js.map +1 -0
  321. package/dist/_chunks/ms--jlrw42b.js +342 -0
  322. package/dist/_chunks/ms--jlrw42b.js.map +1 -0
  323. package/dist/_chunks/ms-HMf2TlIb.mjs +342 -0
  324. package/dist/_chunks/ms-HMf2TlIb.mjs.map +1 -0
  325. package/dist/_chunks/nl-dZtP9mID.js +828 -0
  326. package/dist/_chunks/nl-dZtP9mID.js.map +1 -0
  327. package/dist/_chunks/nl-r6_qFslC.mjs +828 -0
  328. package/dist/_chunks/nl-r6_qFslC.mjs.map +1 -0
  329. package/dist/_chunks/pl-SIHRdWWc.js +721 -0
  330. package/dist/_chunks/pl-SIHRdWWc.js.map +1 -0
  331. package/dist/_chunks/pl-clhbpDNh.mjs +721 -0
  332. package/dist/_chunks/pl-clhbpDNh.mjs.map +1 -0
  333. package/dist/_chunks/pt-BR-hWKoFXkw.js +794 -0
  334. package/dist/_chunks/pt-BR-hWKoFXkw.js.map +1 -0
  335. package/dist/_chunks/pt-BR-punxoRa2.mjs +794 -0
  336. package/dist/_chunks/pt-BR-punxoRa2.mjs.map +1 -0
  337. package/dist/_chunks/pt-Cf1BVWpH.mjs +296 -0
  338. package/dist/_chunks/pt-Cf1BVWpH.mjs.map +1 -0
  339. package/dist/_chunks/pt-_KgwbYMU.js +296 -0
  340. package/dist/_chunks/pt-_KgwbYMU.js.map +1 -0
  341. package/dist/_chunks/ru-6Tk_GR-j.mjs +993 -0
  342. package/dist/_chunks/ru-6Tk_GR-j.mjs.map +1 -0
  343. package/dist/_chunks/ru-UwdNMjzX.js +993 -0
  344. package/dist/_chunks/ru-UwdNMjzX.js.map +1 -0
  345. package/dist/_chunks/sa--IWI9QIC.mjs +722 -0
  346. package/dist/_chunks/sa--IWI9QIC.mjs.map +1 -0
  347. package/dist/_chunks/sa-EHIMiiE5.js +722 -0
  348. package/dist/_chunks/sa-EHIMiiE5.js.map +1 -0
  349. package/dist/_chunks/selectors-T2YIN4Fb.js +5 -0
  350. package/dist/_chunks/selectors-T2YIN4Fb.js.map +1 -0
  351. package/dist/_chunks/selectors-uLWxH-jN.mjs +6 -0
  352. package/dist/_chunks/selectors-uLWxH-jN.mjs.map +1 -0
  353. package/dist/_chunks/sk-O6d4eSB_.mjs +690 -0
  354. package/dist/_chunks/sk-O6d4eSB_.mjs.map +1 -0
  355. package/dist/_chunks/sk-mQumWjau.js +690 -0
  356. package/dist/_chunks/sk-mQumWjau.js.map +1 -0
  357. package/dist/_chunks/sv-20Po9yTX.mjs +827 -0
  358. package/dist/_chunks/sv-20Po9yTX.mjs.map +1 -0
  359. package/dist/_chunks/sv-9DHr5qSx.js +827 -0
  360. package/dist/_chunks/sv-9DHr5qSx.js.map +1 -0
  361. package/dist/_chunks/th-D3uMSMTb.mjs +430 -0
  362. package/dist/_chunks/th-D3uMSMTb.mjs.map +1 -0
  363. package/dist/_chunks/th-R7ewxEfd.js +430 -0
  364. package/dist/_chunks/th-R7ewxEfd.js.map +1 -0
  365. package/dist/_chunks/tr-3lPrmNK_.js +785 -0
  366. package/dist/_chunks/tr-3lPrmNK_.js.map +1 -0
  367. package/dist/_chunks/tr-yKDN9Q8W.mjs +785 -0
  368. package/dist/_chunks/tr-yKDN9Q8W.mjs.map +1 -0
  369. package/dist/_chunks/transferTokens-T-kGMb3U.js +62 -0
  370. package/dist/_chunks/transferTokens-T-kGMb3U.js.map +1 -0
  371. package/dist/_chunks/transferTokens-jdkk-sPx.mjs +63 -0
  372. package/dist/_chunks/transferTokens-jdkk-sPx.mjs.map +1 -0
  373. package/dist/_chunks/uk-jXdJMxUf.mjs +343 -0
  374. package/dist/_chunks/uk-jXdJMxUf.mjs.map +1 -0
  375. package/dist/_chunks/uk-w5sI8yln.js +343 -0
  376. package/dist/_chunks/uk-w5sI8yln.js.map +1 -0
  377. package/dist/_chunks/useAdminRoles-QJQS1BCd.mjs +28 -0
  378. package/dist/_chunks/useAdminRoles-QJQS1BCd.mjs.map +1 -0
  379. package/dist/_chunks/useAdminRoles-SnzC_mvy.js +46 -0
  380. package/dist/_chunks/useAdminRoles-SnzC_mvy.js.map +1 -0
  381. package/dist/_chunks/useContentTypes-Lpg-eJmK.js +69 -0
  382. package/dist/_chunks/useContentTypes-Lpg-eJmK.js.map +1 -0
  383. package/dist/_chunks/useContentTypes-U-n1-lz0.mjs +51 -0
  384. package/dist/_chunks/useContentTypes-U-n1-lz0.mjs.map +1 -0
  385. package/dist/_chunks/useDebounce-GrNR3exx.mjs +17 -0
  386. package/dist/_chunks/useDebounce-GrNR3exx.mjs.map +1 -0
  387. package/dist/_chunks/useDebounce-nLQfrFAo.js +35 -0
  388. package/dist/_chunks/useDebounce-nLQfrFAo.js.map +1 -0
  389. package/dist/_chunks/useLicenseLimitNotification-Hjv_LKmp.js +100 -0
  390. package/dist/_chunks/useLicenseLimitNotification-Hjv_LKmp.js.map +1 -0
  391. package/dist/_chunks/useLicenseLimitNotification-yJHxF4YO.mjs +80 -0
  392. package/dist/_chunks/useLicenseLimitNotification-yJHxF4YO.mjs.map +1 -0
  393. package/dist/_chunks/useOnce-BuAUYuau.mjs +7 -0
  394. package/dist/_chunks/useOnce-BuAUYuau.mjs.map +1 -0
  395. package/dist/_chunks/useOnce-eIxJr0o-.js +25 -0
  396. package/dist/_chunks/useOnce-eIxJr0o-.js.map +1 -0
  397. package/dist/_chunks/useReviewWorkflows-0rQx2KxS.mjs +27 -0
  398. package/dist/_chunks/useReviewWorkflows-0rQx2KxS.mjs.map +1 -0
  399. package/dist/_chunks/useReviewWorkflows-QoSEilRp.js +26 -0
  400. package/dist/_chunks/useReviewWorkflows-QoSEilRp.js.map +1 -0
  401. package/dist/_chunks/useSyncRbac-hZJWbmmY.js +57 -0
  402. package/dist/_chunks/useSyncRbac-hZJWbmmY.js.map +1 -0
  403. package/dist/_chunks/useSyncRbac-wVgN6XIc.mjs +39 -0
  404. package/dist/_chunks/useSyncRbac-wVgN6XIc.mjs.map +1 -0
  405. package/dist/_chunks/useWebhooks-1ZG0V0Mc.js +89 -0
  406. package/dist/_chunks/useWebhooks-1ZG0V0Mc.js.map +1 -0
  407. package/dist/_chunks/useWebhooks-WBwti5Jl.mjs +90 -0
  408. package/dist/_chunks/useWebhooks-WBwti5Jl.mjs.map +1 -0
  409. package/dist/_chunks/validateWorkflow-23kb45Oa.mjs +1042 -0
  410. package/dist/_chunks/validateWorkflow-23kb45Oa.mjs.map +1 -0
  411. package/dist/_chunks/validateWorkflow-MaEpFiHz.js +1065 -0
  412. package/dist/_chunks/validateWorkflow-MaEpFiHz.js.map +1 -0
  413. package/dist/_chunks/validation-7cD0kJHF.js +61 -0
  414. package/dist/_chunks/validation-7cD0kJHF.js.map +1 -0
  415. package/dist/_chunks/validation-rilbXPnt.mjs +43 -0
  416. package/dist/_chunks/validation-rilbXPnt.mjs.map +1 -0
  417. package/dist/_chunks/vi-kY-om6ai.mjs +298 -0
  418. package/dist/_chunks/vi-kY-om6ai.mjs.map +1 -0
  419. package/dist/_chunks/vi-t8uM5szE.js +298 -0
  420. package/dist/_chunks/vi-t8uM5szE.js.map +1 -0
  421. package/dist/_chunks/zh-Hans-RfPwVDfv.js +957 -0
  422. package/dist/_chunks/zh-Hans-RfPwVDfv.js.map +1 -0
  423. package/dist/_chunks/zh-Hans-xf4WJxoN.mjs +957 -0
  424. package/dist/_chunks/zh-Hans-xf4WJxoN.mjs.map +1 -0
  425. package/dist/_chunks/zh-NcXD6EU3.js +836 -0
  426. package/dist/_chunks/zh-NcXD6EU3.js.map +1 -0
  427. package/dist/_chunks/zh-fRA5e8rP.mjs +836 -0
  428. package/dist/_chunks/zh-fRA5e8rP.mjs.map +1 -0
  429. package/dist/_internal/index.d.ts +1 -0
  430. package/dist/_internal.js +63 -0
  431. package/dist/_internal.js.map +1 -0
  432. package/dist/_internal.mjs +63 -0
  433. package/dist/_internal.mjs.map +1 -0
  434. package/dist/admin/index.js +23 -72
  435. package/dist/admin/index.js.map +1 -1
  436. package/dist/admin/index.mjs +26 -75
  437. package/dist/admin/index.mjs.map +1 -1
  438. package/dist/admin/src/App.d.ts +8 -11
  439. package/dist/admin/src/StrapiApp.d.ts +118 -67
  440. package/dist/admin/src/components/ConfirmDialog.d.ts +34 -0
  441. package/dist/admin/src/components/ContentBox.d.ts +12 -0
  442. package/dist/admin/src/components/DescriptionComponentRenderer.d.ts +31 -0
  443. package/dist/admin/src/components/ErrorElement.d.ts +6 -0
  444. package/dist/admin/src/components/Filters.d.ts +83 -0
  445. package/dist/admin/src/components/Form.d.ts +71 -0
  446. package/dist/admin/src/components/FormInputs/Boolean.d.ts +4 -0
  447. package/dist/admin/src/components/FormInputs/Checkbox.d.ts +4 -0
  448. package/dist/admin/src/components/FormInputs/Date.d.ts +4 -0
  449. package/dist/admin/src/components/FormInputs/DateTime.d.ts +4 -0
  450. package/dist/admin/src/components/FormInputs/Email.d.ts +3 -0
  451. package/dist/admin/src/components/FormInputs/Enumeration.d.ts +3 -0
  452. package/dist/admin/src/components/FormInputs/Json.d.ts +6 -0
  453. package/dist/admin/src/components/FormInputs/Number.d.ts +4 -0
  454. package/dist/admin/src/components/FormInputs/Password.d.ts +3 -0
  455. package/dist/admin/src/components/FormInputs/Renderer.d.ts +10 -0
  456. package/dist/admin/src/components/FormInputs/String.d.ts +6 -0
  457. package/dist/admin/src/components/FormInputs/Textarea.d.ts +3 -0
  458. package/dist/admin/src/components/FormInputs/Time.d.ts +4 -0
  459. package/dist/admin/src/components/FormInputs/types.d.ts +32 -0
  460. package/dist/admin/src/components/GuidedTour/Provider.d.ts +38 -1
  461. package/dist/admin/src/components/PageHelpers.d.ts +38 -0
  462. package/dist/admin/src/components/Pagination.d.ts +55 -0
  463. package/dist/admin/src/components/PluginsInitializer.d.ts +4 -1
  464. package/dist/admin/src/components/PrivateRoute.d.ts +2 -3
  465. package/dist/admin/src/components/Providers.d.ts +4 -5
  466. package/dist/admin/src/components/RelativeTime.d.ts +28 -0
  467. package/dist/admin/src/components/SearchInput.d.ts +11 -0
  468. package/dist/admin/src/components/Table.d.ts +135 -0
  469. package/dist/admin/src/constants/filters.d.ts +137 -0
  470. package/dist/admin/src/constants.d.ts +1 -1
  471. package/dist/admin/src/content-manager/components/ConfigurationForm/EditFieldForm.d.ts +9 -0
  472. package/dist/admin/src/content-manager/components/ConfigurationForm/Fields.d.ts +21 -0
  473. package/dist/admin/src/content-manager/components/ConfigurationForm/Form.d.ts +32 -0
  474. package/dist/admin/src/content-manager/components/DragPreviews/CardDragPreview.d.ts +2 -2
  475. package/dist/admin/src/content-manager/components/DragPreviews/RelationDragPreview.d.ts +4 -2
  476. package/dist/admin/src/content-manager/components/FieldTypeIcon.d.ts +5 -28
  477. package/dist/admin/src/content-manager/constants/attributes.d.ts +13 -1
  478. package/dist/admin/src/content-manager/constants/collections.d.ts +3 -0
  479. package/dist/admin/src/content-manager/exports.d.ts +10 -0
  480. package/dist/admin/src/content-manager/features/DocumentRBAC.d.ts +36 -0
  481. package/dist/admin/src/content-manager/history/components/HistoryAction.d.ts +3 -0
  482. package/dist/admin/src/content-manager/history/components/VersionContent.d.ts +2 -0
  483. package/dist/admin/src/content-manager/history/components/VersionHeader.d.ts +5 -0
  484. package/dist/admin/src/content-manager/history/components/VersionsList.d.ts +2 -0
  485. package/dist/admin/src/content-manager/history/pages/History.d.ts +25 -0
  486. package/dist/admin/src/content-manager/history/routes.d.ts +11 -0
  487. package/dist/admin/src/content-manager/history/services/historyVersion.d.ts +7 -0
  488. package/dist/admin/src/content-manager/hooks/useContentManagerInitData.d.ts +2 -16
  489. package/dist/admin/src/content-manager/hooks/useContentTypeSchema.d.ts +24 -0
  490. package/dist/admin/src/content-manager/hooks/useDocument.d.ts +85 -0
  491. package/dist/admin/src/content-manager/hooks/useDocumentActions.d.ts +102 -0
  492. package/dist/admin/src/content-manager/hooks/useDocumentLayout.d.ts +138 -0
  493. package/dist/admin/src/content-manager/hooks/useDragAndDrop.d.ts +6 -3
  494. package/dist/admin/src/content-manager/hooks/useSyncRbac.d.ts +13 -26
  495. package/dist/admin/src/content-manager/layout.d.ts +16 -0
  496. package/dist/admin/src/content-manager/modules/rbac.d.ts +14 -0
  497. package/dist/admin/src/content-manager/modules/reducers.d.ts +4 -0
  498. package/dist/admin/src/content-manager/pages/ComponentConfigurationPage.d.ts +3 -0
  499. package/dist/admin/src/content-manager/pages/EditConfigurationPage.d.ts +3 -0
  500. package/dist/admin/src/content-manager/pages/EditView/EditViewPage.d.ts +2 -17
  501. package/dist/admin/src/content-manager/pages/EditView/components/DocumentActions.d.ts +68 -0
  502. package/dist/admin/src/content-manager/pages/EditView/components/DocumentStatus.d.ts +16 -0
  503. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.d.ts +61 -0
  504. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.d.ts +10 -0
  505. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/Component/Initializer.d.ts +9 -0
  506. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/Component/Input.d.ts +9 -0
  507. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/Component/NonRepeatable.d.ts +6 -0
  508. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/Component/Repeatable.d.ts +6 -0
  509. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/ComponentContext.d.ts +42 -0
  510. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/DynamicZone/ComponentCard.d.ts +9 -0
  511. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.d.ts +17 -0
  512. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.d.ts +14 -0
  513. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/DynamicZone/DynamicZoneLabel.d.ts +12 -0
  514. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/DynamicZone/Field.d.ts +13 -0
  515. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/NotAllowed.d.ts +7 -0
  516. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/Relations.d.ts +26 -0
  517. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/UID.d.ts +9 -0
  518. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/Wysiwyg/Editor.d.ts +18 -0
  519. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.d.ts +59 -0
  520. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/Wysiwyg/Field.d.ts +11 -0
  521. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.d.ts +54 -0
  522. package/dist/admin/src/content-manager/pages/EditView/components/FormLayout.d.ts +5 -0
  523. package/dist/admin/src/content-manager/pages/EditView/components/Header.d.ts +33 -5
  524. package/dist/admin/src/content-manager/pages/EditView/components/InputRenderer.d.ts +14 -0
  525. package/dist/admin/src/content-manager/pages/EditView/components/Panels.d.ts +10 -0
  526. package/dist/admin/src/content-manager/pages/EditView/utils/data.d.ts +20 -0
  527. package/dist/admin/src/content-manager/pages/EditView/utils/forms.d.ts +9 -0
  528. package/dist/admin/src/content-manager/pages/ListConfiguration/ListConfigurationPage.d.ts +10 -0
  529. package/dist/admin/src/content-manager/pages/ListConfiguration/components/DraggableCard.d.ts +12 -0
  530. package/dist/admin/src/content-manager/pages/ListConfiguration/components/EditFieldForm.d.ts +8 -0
  531. package/dist/admin/src/content-manager/pages/ListConfiguration/components/Header.d.ts +8 -0
  532. package/dist/admin/src/content-manager/pages/ListConfiguration/components/Settings.d.ts +5 -0
  533. package/dist/admin/src/content-manager/pages/ListConfiguration/components/SortDisplayedFields.d.ts +6 -0
  534. package/dist/admin/src/content-manager/pages/ListView/ListViewPage.d.ts +2 -24
  535. package/dist/admin/src/content-manager/pages/ListView/components/AutoCloneFailureModal.d.ts +6 -10
  536. package/dist/admin/src/content-manager/pages/ListView/components/BulkActions/Buttons.d.ts +4 -19
  537. package/dist/admin/src/content-manager/pages/ListView/components/BulkActions/SelectedEntriesModal.d.ts +1 -2
  538. package/dist/admin/src/content-manager/pages/ListView/components/Filters.d.ts +8 -0
  539. package/dist/admin/src/content-manager/pages/ListView/components/TableActions.d.ts +8 -0
  540. package/dist/admin/src/content-manager/pages/ListView/components/TableCells/CellContent.d.ts +3 -5
  541. package/dist/admin/src/content-manager/pages/ListView/components/TableCells/Components.d.ts +5 -5
  542. package/dist/admin/src/content-manager/pages/ListView/components/TableCells/Relations.d.ts +7 -7
  543. package/dist/admin/src/content-manager/pages/ListView/components/ViewSettingsMenu.d.ts +8 -4
  544. package/dist/admin/src/content-manager/router.d.ts +5 -0
  545. package/dist/admin/src/content-manager/services/api.d.ts +3 -0
  546. package/dist/admin/src/content-manager/services/components.d.ts +6 -0
  547. package/dist/admin/src/content-manager/services/contentTypes.d.ts +18 -0
  548. package/dist/admin/src/content-manager/services/documents.d.ts +92 -0
  549. package/dist/admin/src/content-manager/services/init.d.ts +10 -0
  550. package/dist/admin/src/content-manager/services/relations.d.ts +49 -0
  551. package/dist/admin/src/content-manager/services/uid.d.ts +32 -0
  552. package/dist/admin/src/content-manager/utils/api.d.ts +9 -4
  553. package/dist/admin/src/content-manager/utils/attributes.d.ts +17 -1
  554. package/dist/admin/src/content-manager/utils/relations.d.ts +12 -0
  555. package/dist/admin/src/content-manager/utils/validation.d.ts +3 -17
  556. package/dist/admin/src/core/apis/CustomFields.d.ts +51 -5
  557. package/dist/admin/src/core/apis/Plugin.d.ts +19 -11
  558. package/dist/admin/src/core/apis/content-manager.d.ts +98 -0
  559. package/dist/admin/src/core/store/configure.d.ts +14 -12
  560. package/dist/admin/src/core/store/hooks.d.ts +15 -15
  561. package/dist/admin/src/features/BackButton.d.ts +51 -0
  562. package/dist/admin/src/features/Configuration.d.ts +5 -11
  563. package/dist/admin/src/features/StrapiApp.d.ts +15 -0
  564. package/dist/admin/src/features/Tracking.d.ts +187 -0
  565. package/dist/admin/src/hooks/useAPIErrorHandler.d.ts +96 -0
  566. package/dist/admin/src/hooks/useContentTypes.d.ts +0 -1
  567. package/dist/admin/src/hooks/useControllableState.d.ts +8 -0
  568. package/dist/admin/src/hooks/useForceUpdate.d.ts +7 -0
  569. package/dist/admin/src/hooks/useInjectReducer.d.ts +9 -5
  570. package/dist/admin/src/hooks/useInjectionZone.d.ts +1 -5
  571. package/dist/admin/src/hooks/useIsMounted.d.ts +3 -0
  572. package/dist/admin/src/hooks/useMenu.d.ts +4 -3
  573. package/dist/admin/src/hooks/useSettingsMenu.d.ts +1 -1
  574. package/dist/admin/src/hooks/useThrottledCallback.d.ts +22 -0
  575. package/dist/admin/src/index.d.ts +37 -3
  576. package/dist/admin/src/layouts/AuthenticatedLayout.d.ts +3 -0
  577. package/dist/admin/src/pages/Auth/AuthPage.d.ts +1 -5
  578. package/dist/admin/src/pages/Marketplace/hooks/useMarketplaceData.d.ts +2 -2
  579. package/dist/admin/src/pages/Settings/Layout.d.ts +2 -0
  580. package/dist/admin/src/pages/Settings/components/Tokens/FormHead.d.ts +1 -2
  581. package/dist/admin/src/pages/Settings/components/Tokens/Table.d.ts +4 -10
  582. package/dist/admin/src/pages/Settings/constants.d.ts +2 -4
  583. package/dist/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.d.ts +2 -2
  584. package/dist/admin/src/pages/Settings/pages/Roles/components/CollapseLabel.d.ts +1 -1
  585. package/dist/admin/src/pages/Settings/pages/Roles/utils/difference.d.ts +5 -0
  586. package/dist/admin/src/pages/Settings/pages/TransferTokens/EditView.d.ts +0 -4
  587. package/dist/admin/src/pages/Settings/pages/Users/ListPage.d.ts +0 -18
  588. package/dist/admin/src/pages/Settings/pages/Users/components/SelectRoles.d.ts +2 -5
  589. package/dist/admin/src/pages/Settings/pages/Users/utils/validation.d.ts +2 -2
  590. package/dist/admin/src/pages/Settings/pages/Webhooks/components/Events.d.ts +1 -1
  591. package/dist/admin/src/pages/UseCasePage.d.ts +3 -1
  592. package/dist/admin/src/reducer.d.ts +2 -2
  593. package/dist/admin/src/render.d.ts +5 -2
  594. package/dist/admin/src/selectors.d.ts +10 -10
  595. package/dist/admin/src/services/auth.d.ts +7 -2
  596. package/dist/admin/src/services/contentManager.d.ts +2 -2
  597. package/dist/admin/src/services/users.d.ts +2 -2
  598. package/dist/admin/src/types/errors.d.ts +2 -0
  599. package/dist/admin/src/types/forms.d.ts +23 -0
  600. package/dist/admin/src/types/utils.d.ts +1 -0
  601. package/dist/admin/src/utils/baseQuery.d.ts +1 -1
  602. package/dist/admin/src/utils/getPrefixedId.d.ts +4 -0
  603. package/dist/admin/src/utils/locales.d.ts +9 -0
  604. package/dist/admin/src/utils/normalizeAPIError.d.ts +25 -0
  605. package/dist/admin/src/utils/objects.d.ts +30 -5
  606. package/dist/admin/src/utils/shims.d.ts +4 -0
  607. package/dist/admin/src/utils/translatedErrors.d.ts +90 -0
  608. package/dist/admin/src/utils/urls.d.ts +2 -0
  609. package/dist/admin/src/utils/users.d.ts +7 -0
  610. package/dist/ee/admin/src/constants.d.ts +7 -7
  611. package/dist/ee/admin/src/content-manager/pages/EditView/components/ReviewWorkflowsPanel.d.ts +3 -0
  612. package/dist/ee/admin/src/content-manager/pages/ListView/components/AssigneeFilter.d.ts +2 -1
  613. package/dist/ee/admin/src/content-manager/pages/ListView/components/StageFilter.d.ts +2 -1
  614. package/dist/ee/admin/src/content-manager/pages/ListView/constants.d.ts +41 -58
  615. package/dist/ee/admin/src/hooks/useLicenseLimits.d.ts +1 -1
  616. package/dist/ee/admin/src/pages/SettingsPage/constants.d.ts +6 -2
  617. package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ComboboxFilter.d.ts +2 -11
  618. package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.d.ts +2 -2
  619. package/dist/ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/components/AddStage.d.ts +1 -7
  620. package/dist/ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/components/Layout.d.ts +3 -7
  621. package/dist/ee/admin/src/pages/SettingsPage/pages/Users/components/CreateActionEE.d.ts +1 -7
  622. package/dist/ee/admin/src/pages/SettingsPage/pages/Users/components/ModalForm.d.ts +6 -9
  623. package/dist/ee/server/index.js +169 -141
  624. package/dist/ee/server/index.js.map +1 -1
  625. package/dist/ee/server/index.mjs +170 -141
  626. package/dist/ee/server/index.mjs.map +1 -1
  627. package/dist/server/index.js +156 -171
  628. package/dist/server/index.js.map +1 -1
  629. package/dist/server/index.mjs +158 -172
  630. package/dist/server/index.mjs.map +1 -1
  631. package/dist/server/src/bootstrap.d.ts.map +1 -1
  632. package/dist/server/src/controllers/admin.d.ts +0 -5
  633. package/dist/server/src/controllers/admin.d.ts.map +1 -1
  634. package/dist/server/src/controllers/index.d.ts +0 -1
  635. package/dist/server/src/controllers/index.d.ts.map +1 -1
  636. package/dist/server/src/controllers/transfer/runner.d.ts.map +1 -1
  637. package/dist/server/src/domain/permission/index.d.ts +4 -2
  638. package/dist/server/src/domain/permission/index.d.ts.map +1 -1
  639. package/dist/server/src/middlewares/data-transfer.d.ts.map +1 -1
  640. package/dist/server/src/middlewares/rateLimit.d.ts.map +1 -1
  641. package/dist/server/src/services/api-token.d.ts +1 -0
  642. package/dist/server/src/services/api-token.d.ts.map +1 -1
  643. package/dist/server/src/services/index.d.ts +2 -6
  644. package/dist/server/src/services/index.d.ts.map +1 -1
  645. package/dist/server/src/services/metrics.d.ts +1 -1
  646. package/dist/server/src/services/metrics.d.ts.map +1 -1
  647. package/dist/server/src/services/permission/permissions-manager/sanitize.d.ts.map +1 -1
  648. package/dist/server/src/services/permission/permissions-manager/validate.d.ts.map +1 -1
  649. package/dist/server/src/services/project-settings.d.ts +1 -0
  650. package/dist/server/src/services/project-settings.d.ts.map +1 -1
  651. package/dist/server/src/services/role.d.ts.map +1 -1
  652. package/dist/server/src/services/transfer/token.d.ts.map +1 -1
  653. package/dist/server/src/services/transfer/utils.d.ts +2 -6
  654. package/dist/server/src/services/transfer/utils.d.ts.map +1 -1
  655. package/dist/server/src/services/user.d.ts +2 -6
  656. package/dist/server/src/services/user.d.ts.map +1 -1
  657. package/dist/server/src/strategies/api-token.d.ts.map +1 -1
  658. package/dist/server/src/strategies/data-transfer.d.ts.map +1 -1
  659. package/dist/server/src/validation/api-tokens.d.ts +27 -4
  660. package/dist/server/src/validation/api-tokens.d.ts.map +1 -1
  661. package/dist/server/src/validation/authentication/register.d.ts +8 -2
  662. package/dist/server/src/validation/authentication/register.d.ts.map +1 -1
  663. package/dist/server/src/validation/permission.d.ts +53 -4
  664. package/dist/server/src/validation/permission.d.ts.map +1 -1
  665. package/dist/server/src/validation/policies/hasPermissions.d.ts +7 -2
  666. package/dist/server/src/validation/policies/hasPermissions.d.ts.map +1 -1
  667. package/dist/server/src/validation/role.d.ts +23 -6
  668. package/dist/server/src/validation/role.d.ts.map +1 -1
  669. package/dist/server/src/validation/transfer/token.d.ts +23 -4
  670. package/dist/server/src/validation/transfer/token.d.ts.map +1 -1
  671. package/dist/server/src/validation/user.d.ts +56 -8
  672. package/dist/server/src/validation/user.d.ts.map +1 -1
  673. package/dist/shared/contracts/user.d.ts +3 -1
  674. package/dist/shared/contracts/user.d.ts.map +1 -1
  675. package/package.json +48 -76
  676. package/dist/_chunks/AdminSeatInfo-0PZPHqsd.mjs +0 -166
  677. package/dist/_chunks/AdminSeatInfo-0PZPHqsd.mjs.map +0 -1
  678. package/dist/_chunks/AdminSeatInfo-VeqDpwGV.js +0 -166
  679. package/dist/_chunks/AdminSeatInfo-VeqDpwGV.js.map +0 -1
  680. package/dist/_chunks/AuthenticatedApp-3loM1zPQ.js +0 -1444
  681. package/dist/_chunks/AuthenticatedApp-3loM1zPQ.js.map +0 -1
  682. package/dist/_chunks/AuthenticatedApp-p_Hoz4w0.mjs +0 -1418
  683. package/dist/_chunks/AuthenticatedApp-p_Hoz4w0.mjs.map +0 -1
  684. package/dist/_chunks/CreateActionEE-BvBzN3ej.mjs +0 -122
  685. package/dist/_chunks/CreateActionEE-BvBzN3ej.mjs.map +0 -1
  686. package/dist/_chunks/CreateActionEE-msdEHH2t.js +0 -125
  687. package/dist/_chunks/CreateActionEE-msdEHH2t.js.map +0 -1
  688. package/dist/_chunks/CreatePage-0a6OdLKp.js +0 -86
  689. package/dist/_chunks/CreatePage-0a6OdLKp.js.map +0 -1
  690. package/dist/_chunks/CreatePage-CXHGEXMF.mjs +0 -86
  691. package/dist/_chunks/CreatePage-CXHGEXMF.mjs.map +0 -1
  692. package/dist/_chunks/CreatePage-DvbIy_jN.mjs +0 -314
  693. package/dist/_chunks/CreatePage-DvbIy_jN.mjs.map +0 -1
  694. package/dist/_chunks/CreatePage-TnWHEKrd.js +0 -327
  695. package/dist/_chunks/CreatePage-TnWHEKrd.js.map +0 -1
  696. package/dist/_chunks/CreatePage-eh67IoKV.mjs +0 -305
  697. package/dist/_chunks/CreatePage-eh67IoKV.mjs.map +0 -1
  698. package/dist/_chunks/CreatePage-tYv61v1J.js +0 -333
  699. package/dist/_chunks/CreatePage-tYv61v1J.js.map +0 -1
  700. package/dist/_chunks/CreateView-37DEWWCT.js +0 -92
  701. package/dist/_chunks/CreateView-37DEWWCT.js.map +0 -1
  702. package/dist/_chunks/CreateView-8a8sE0PN.mjs +0 -88
  703. package/dist/_chunks/CreateView-8a8sE0PN.mjs.map +0 -1
  704. package/dist/_chunks/CreateView-hFjKdwYu.mjs +0 -92
  705. package/dist/_chunks/CreateView-hFjKdwYu.mjs.map +0 -1
  706. package/dist/_chunks/CreateView-lQqp9igR.js +0 -88
  707. package/dist/_chunks/CreateView-lQqp9igR.js.map +0 -1
  708. package/dist/_chunks/EditPage-CbpEmXk3.mjs +0 -328
  709. package/dist/_chunks/EditPage-CbpEmXk3.mjs.map +0 -1
  710. package/dist/_chunks/EditPage-D0i2YdDb.js +0 -348
  711. package/dist/_chunks/EditPage-D0i2YdDb.js.map +0 -1
  712. package/dist/_chunks/EditPage-EFPGPMV_.js +0 -809
  713. package/dist/_chunks/EditPage-EFPGPMV_.js.map +0 -1
  714. package/dist/_chunks/EditPage-H51hPwcO.mjs +0 -788
  715. package/dist/_chunks/EditPage-H51hPwcO.mjs.map +0 -1
  716. package/dist/_chunks/EditPage-JS93HO0g.mjs +0 -474
  717. package/dist/_chunks/EditPage-JS93HO0g.mjs.map +0 -1
  718. package/dist/_chunks/EditPage-RrSgOYln.mjs +0 -371
  719. package/dist/_chunks/EditPage-RrSgOYln.mjs.map +0 -1
  720. package/dist/_chunks/EditPage-fOldhH6r.js +0 -496
  721. package/dist/_chunks/EditPage-fOldhH6r.js.map +0 -1
  722. package/dist/_chunks/EditPage-fVWNx5Oh.js +0 -390
  723. package/dist/_chunks/EditPage-fVWNx5Oh.js.map +0 -1
  724. package/dist/_chunks/EditView-lgBWjHOT.mjs +0 -413
  725. package/dist/_chunks/EditView-lgBWjHOT.mjs.map +0 -1
  726. package/dist/_chunks/EditView-o4vADGcb.js +0 -433
  727. package/dist/_chunks/EditView-o4vADGcb.js.map +0 -1
  728. package/dist/_chunks/EditViewPage-mqbskolf.js +0 -936
  729. package/dist/_chunks/EditViewPage-mqbskolf.js.map +0 -1
  730. package/dist/_chunks/EditViewPage-qJ7nFINE.mjs +0 -909
  731. package/dist/_chunks/EditViewPage-qJ7nFINE.mjs.map +0 -1
  732. package/dist/_chunks/EventsTable--TwAHLZA.js +0 -107
  733. package/dist/_chunks/EventsTable--TwAHLZA.js.map +0 -1
  734. package/dist/_chunks/EventsTable-Fvc-JpRm.mjs +0 -107
  735. package/dist/_chunks/EventsTable-Fvc-JpRm.mjs.map +0 -1
  736. package/dist/_chunks/Filters-Gdnt7qft.js +0 -61
  737. package/dist/_chunks/Filters-Gdnt7qft.js.map +0 -1
  738. package/dist/_chunks/Filters-dLXfVnI0.mjs +0 -43
  739. package/dist/_chunks/Filters-dLXfVnI0.mjs.map +0 -1
  740. package/dist/_chunks/HomePage-a1vOU1ul.mjs +0 -579
  741. package/dist/_chunks/HomePage-a1vOU1ul.mjs.map +0 -1
  742. package/dist/_chunks/HomePage-nOmgQyML.mjs +0 -86
  743. package/dist/_chunks/HomePage-nOmgQyML.mjs.map +0 -1
  744. package/dist/_chunks/HomePage-uF97iLvr.js +0 -600
  745. package/dist/_chunks/HomePage-uF97iLvr.js.map +0 -1
  746. package/dist/_chunks/HomePage-uLq-MN1K.js +0 -86
  747. package/dist/_chunks/HomePage-uLq-MN1K.js.map +0 -1
  748. package/dist/_chunks/InformationBoxEE-rompvdum.js +0 -359
  749. package/dist/_chunks/InformationBoxEE-rompvdum.js.map +0 -1
  750. package/dist/_chunks/InformationBoxEE-zr8UNPkv.mjs +0 -340
  751. package/dist/_chunks/InformationBoxEE-zr8UNPkv.mjs.map +0 -1
  752. package/dist/_chunks/InstalledPluginsPage-fCay7xDO.js +0 -188
  753. package/dist/_chunks/InstalledPluginsPage-fCay7xDO.js.map +0 -1
  754. package/dist/_chunks/InstalledPluginsPage-swMYXqyB.mjs +0 -169
  755. package/dist/_chunks/InstalledPluginsPage-swMYXqyB.mjs.map +0 -1
  756. package/dist/_chunks/InternalErrorPage-7JIAF-Ev.mjs +0 -41
  757. package/dist/_chunks/InternalErrorPage-7JIAF-Ev.mjs.map +0 -1
  758. package/dist/_chunks/InternalErrorPage-MkOX2w_Q.js +0 -41
  759. package/dist/_chunks/InternalErrorPage-MkOX2w_Q.js.map +0 -1
  760. package/dist/_chunks/Layout-BcpbdKNS.js +0 -88
  761. package/dist/_chunks/Layout-BcpbdKNS.js.map +0 -1
  762. package/dist/_chunks/Layout-vuQrq1Uu.mjs +0 -87
  763. package/dist/_chunks/Layout-vuQrq1Uu.mjs.map +0 -1
  764. package/dist/_chunks/LimitsModal-gq7jwfap.js +0 -75
  765. package/dist/_chunks/LimitsModal-gq7jwfap.js.map +0 -1
  766. package/dist/_chunks/LimitsModal-slvRtty7.mjs +0 -74
  767. package/dist/_chunks/LimitsModal-slvRtty7.mjs.map +0 -1
  768. package/dist/_chunks/ListPage-2GK03p5D.js +0 -617
  769. package/dist/_chunks/ListPage-2GK03p5D.js.map +0 -1
  770. package/dist/_chunks/ListPage-8ZPXoi72.js +0 -349
  771. package/dist/_chunks/ListPage-8ZPXoi72.js.map +0 -1
  772. package/dist/_chunks/ListPage-AKGBR4U_.mjs +0 -595
  773. package/dist/_chunks/ListPage-AKGBR4U_.mjs.map +0 -1
  774. package/dist/_chunks/ListPage-G5KMMFsZ.mjs +0 -346
  775. package/dist/_chunks/ListPage-G5KMMFsZ.mjs.map +0 -1
  776. package/dist/_chunks/ListPage-IqEVyyyf.js +0 -403
  777. package/dist/_chunks/ListPage-IqEVyyyf.js.map +0 -1
  778. package/dist/_chunks/ListPage-JIwwNmac.mjs +0 -659
  779. package/dist/_chunks/ListPage-JIwwNmac.mjs.map +0 -1
  780. package/dist/_chunks/ListPage-LA0lT654.js +0 -88
  781. package/dist/_chunks/ListPage-LA0lT654.js.map +0 -1
  782. package/dist/_chunks/ListPage-Tebxu06N.mjs +0 -88
  783. package/dist/_chunks/ListPage-Tebxu06N.mjs.map +0 -1
  784. package/dist/_chunks/ListPage-bxulds-R.js +0 -369
  785. package/dist/_chunks/ListPage-bxulds-R.js.map +0 -1
  786. package/dist/_chunks/ListPage-hFe-nYXL.mjs +0 -384
  787. package/dist/_chunks/ListPage-hFe-nYXL.mjs.map +0 -1
  788. package/dist/_chunks/ListPage-oOPktA3S.mjs +0 -348
  789. package/dist/_chunks/ListPage-oOPktA3S.mjs.map +0 -1
  790. package/dist/_chunks/ListPage-txDe-JTh.js +0 -680
  791. package/dist/_chunks/ListPage-txDe-JTh.js.map +0 -1
  792. package/dist/_chunks/ListView-07uZxF2i.mjs +0 -270
  793. package/dist/_chunks/ListView-07uZxF2i.mjs.map +0 -1
  794. package/dist/_chunks/ListView-BHlcoKKy.mjs +0 -280
  795. package/dist/_chunks/ListView-BHlcoKKy.mjs.map +0 -1
  796. package/dist/_chunks/ListView-ESH3o0Lu.js +0 -301
  797. package/dist/_chunks/ListView-ESH3o0Lu.js.map +0 -1
  798. package/dist/_chunks/ListView-qaE8Vcb3.js +0 -291
  799. package/dist/_chunks/ListView-qaE8Vcb3.js.map +0 -1
  800. package/dist/_chunks/Login-POtw5QbC.js +0 -98
  801. package/dist/_chunks/Login-POtw5QbC.js.map +0 -1
  802. package/dist/_chunks/Login-ZETxeuNn.mjs +0 -96
  803. package/dist/_chunks/Login-ZETxeuNn.mjs.map +0 -1
  804. package/dist/_chunks/MagicLinkEE-HMr2D5cP.mjs +0 -96
  805. package/dist/_chunks/MagicLinkEE-HMr2D5cP.mjs.map +0 -1
  806. package/dist/_chunks/MagicLinkEE-VHh9i6gc.js +0 -96
  807. package/dist/_chunks/MagicLinkEE-VHh9i6gc.js.map +0 -1
  808. package/dist/_chunks/MarketplacePage-ZRMsVYJZ.mjs +0 -1057
  809. package/dist/_chunks/MarketplacePage-ZRMsVYJZ.mjs.map +0 -1
  810. package/dist/_chunks/MarketplacePage-h7hniYgx.js +0 -1081
  811. package/dist/_chunks/MarketplacePage-h7hniYgx.js.map +0 -1
  812. package/dist/_chunks/ModalForm-W9-dHdzq.mjs +0 -28
  813. package/dist/_chunks/ModalForm-W9-dHdzq.mjs.map +0 -1
  814. package/dist/_chunks/ModalForm-cFcYN_zA.js +0 -28
  815. package/dist/_chunks/ModalForm-cFcYN_zA.js.map +0 -1
  816. package/dist/_chunks/Permissions-0WY1QWWe.js +0 -2040
  817. package/dist/_chunks/Permissions-0WY1QWWe.js.map +0 -1
  818. package/dist/_chunks/Permissions-ZU9ueRGQ.mjs +0 -2011
  819. package/dist/_chunks/Permissions-ZU9ueRGQ.mjs.map +0 -1
  820. package/dist/_chunks/ProfilePage-1Lw2oTjj.js +0 -668
  821. package/dist/_chunks/ProfilePage-1Lw2oTjj.js.map +0 -1
  822. package/dist/_chunks/ProfilePage-nhuFpc-j.mjs +0 -645
  823. package/dist/_chunks/ProfilePage-nhuFpc-j.mjs.map +0 -1
  824. package/dist/_chunks/ReviewWorkflowsColumn-RLBHKpSx.js +0 -102
  825. package/dist/_chunks/ReviewWorkflowsColumn-RLBHKpSx.js.map +0 -1
  826. package/dist/_chunks/ReviewWorkflowsColumn-chpd_GQz.mjs +0 -102
  827. package/dist/_chunks/ReviewWorkflowsColumn-chpd_GQz.mjs.map +0 -1
  828. package/dist/_chunks/SelectRoles-G7h5eMx7.js +0 -103
  829. package/dist/_chunks/SelectRoles-G7h5eMx7.js.map +0 -1
  830. package/dist/_chunks/SelectRoles-J-cOmNPg.mjs +0 -102
  831. package/dist/_chunks/SelectRoles-J-cOmNPg.mjs.map +0 -1
  832. package/dist/_chunks/SettingsPage-LJF4HQu3.mjs +0 -1077
  833. package/dist/_chunks/SettingsPage-LJF4HQu3.mjs.map +0 -1
  834. package/dist/_chunks/SettingsPage-RxG0zNmi.js +0 -1100
  835. package/dist/_chunks/SettingsPage-RxG0zNmi.js.map +0 -1
  836. package/dist/_chunks/SingleSignOnPage-5tR5Di3-.js +0 -316
  837. package/dist/_chunks/SingleSignOnPage-5tR5Di3-.js.map +0 -1
  838. package/dist/_chunks/SingleSignOnPage-mUWnhmYK.mjs +0 -297
  839. package/dist/_chunks/SingleSignOnPage-mUWnhmYK.mjs.map +0 -1
  840. package/dist/_chunks/Table-T-qYlZ1f.js +0 -226
  841. package/dist/_chunks/Table-T-qYlZ1f.js.map +0 -1
  842. package/dist/_chunks/Table-nKuv1TlJ.mjs +0 -206
  843. package/dist/_chunks/Table-nKuv1TlJ.mjs.map +0 -1
  844. package/dist/_chunks/TokenTypeSelect--jNeSLmd.mjs +0 -353
  845. package/dist/_chunks/TokenTypeSelect--jNeSLmd.mjs.map +0 -1
  846. package/dist/_chunks/TokenTypeSelect-Pu2u4u60.js +0 -372
  847. package/dist/_chunks/TokenTypeSelect-Pu2u4u60.js.map +0 -1
  848. package/dist/_chunks/apiTokens--6uAVPWd.js +0 -59
  849. package/dist/_chunks/apiTokens--6uAVPWd.js.map +0 -1
  850. package/dist/_chunks/apiTokens-kqDQ_zpb.mjs +0 -60
  851. package/dist/_chunks/apiTokens-kqDQ_zpb.mjs.map +0 -1
  852. package/dist/_chunks/ar-jktgflyG.mjs +0 -936
  853. package/dist/_chunks/ar-jktgflyG.mjs.map +0 -1
  854. package/dist/_chunks/ar-qfb99PVh.js +0 -936
  855. package/dist/_chunks/ar-qfb99PVh.js.map +0 -1
  856. package/dist/_chunks/build-8t_xn2ku.mjs +0 -77
  857. package/dist/_chunks/build-8t_xn2ku.mjs.map +0 -1
  858. package/dist/_chunks/build-QRFarm0x.js +0 -80
  859. package/dist/_chunks/build-QRFarm0x.js.map +0 -1
  860. package/dist/_chunks/build-UkKhySt2.js +0 -66
  861. package/dist/_chunks/build-UkKhySt2.js.map +0 -1
  862. package/dist/_chunks/build-Xj2_p4-7.mjs +0 -44
  863. package/dist/_chunks/build-Xj2_p4-7.mjs.map +0 -1
  864. package/dist/_chunks/build-bnYNP-fZ.js +0 -77
  865. package/dist/_chunks/build-bnYNP-fZ.js.map +0 -1
  866. package/dist/_chunks/build-yLRsyw6N.mjs +0 -75
  867. package/dist/_chunks/build-yLRsyw6N.mjs.map +0 -1
  868. package/dist/_chunks/ca-bQs9dsIc.js +0 -724
  869. package/dist/_chunks/ca-bQs9dsIc.js.map +0 -1
  870. package/dist/_chunks/ca-g_TZ9Gyb.mjs +0 -724
  871. package/dist/_chunks/ca-g_TZ9Gyb.mjs.map +0 -1
  872. package/dist/_chunks/colors-6VKZqnio.js +0 -33
  873. package/dist/_chunks/colors-6VKZqnio.js.map +0 -1
  874. package/dist/_chunks/colors-YeFa2BnS.mjs +0 -34
  875. package/dist/_chunks/colors-YeFa2BnS.mjs.map +0 -1
  876. package/dist/_chunks/config-bN5VpLkz.mjs +0 -135
  877. package/dist/_chunks/config-bN5VpLkz.mjs.map +0 -1
  878. package/dist/_chunks/config-cQDYAnre.js +0 -61
  879. package/dist/_chunks/config-cQDYAnre.js.map +0 -1
  880. package/dist/_chunks/config-e-cmAy8N.js +0 -281
  881. package/dist/_chunks/config-e-cmAy8N.js.map +0 -1
  882. package/dist/_chunks/config-gs-JvsQG.js +0 -137
  883. package/dist/_chunks/config-gs-JvsQG.js.map +0 -1
  884. package/dist/_chunks/config-vWNWOcHV.mjs +0 -58
  885. package/dist/_chunks/config-vWNWOcHV.mjs.map +0 -1
  886. package/dist/_chunks/config-wB5k8sQ0.mjs +0 -251
  887. package/dist/_chunks/config-wB5k8sQ0.mjs.map +0 -1
  888. package/dist/_chunks/constants-7tUiUGm7.js +0 -52
  889. package/dist/_chunks/constants-7tUiUGm7.js.map +0 -1
  890. package/dist/_chunks/constants-8R4e_wL4.mjs +0 -245
  891. package/dist/_chunks/constants-8R4e_wL4.mjs.map +0 -1
  892. package/dist/_chunks/constants-8sAt6dKz.mjs +0 -59
  893. package/dist/_chunks/constants-8sAt6dKz.mjs.map +0 -1
  894. package/dist/_chunks/constants-I89xL90x.js +0 -116
  895. package/dist/_chunks/constants-I89xL90x.js.map +0 -1
  896. package/dist/_chunks/constants-L1I-Y-RJ.js +0 -58
  897. package/dist/_chunks/constants-L1I-Y-RJ.js.map +0 -1
  898. package/dist/_chunks/constants-jbMn10wi.js +0 -245
  899. package/dist/_chunks/constants-jbMn10wi.js.map +0 -1
  900. package/dist/_chunks/constants-jzEsxOxr.js +0 -6
  901. package/dist/_chunks/constants-jzEsxOxr.js.map +0 -1
  902. package/dist/_chunks/constants-oGpvjQcC.mjs +0 -52
  903. package/dist/_chunks/constants-oGpvjQcC.mjs.map +0 -1
  904. package/dist/_chunks/constants-pDLet6IX.js +0 -189
  905. package/dist/_chunks/constants-pDLet6IX.js.map +0 -1
  906. package/dist/_chunks/constants-q1-_l5GM.mjs +0 -7
  907. package/dist/_chunks/constants-q1-_l5GM.mjs.map +0 -1
  908. package/dist/_chunks/constants-qrsi70P9.mjs +0 -114
  909. package/dist/_chunks/constants-qrsi70P9.mjs.map +0 -1
  910. package/dist/_chunks/constants-wqvQZos7.mjs +0 -168
  911. package/dist/_chunks/constants-wqvQZos7.mjs.map +0 -1
  912. package/dist/_chunks/cs-XYXIcfVY.js +0 -291
  913. package/dist/_chunks/cs-XYXIcfVY.js.map +0 -1
  914. package/dist/_chunks/cs-pnCQlrWo.mjs +0 -291
  915. package/dist/_chunks/cs-pnCQlrWo.mjs.map +0 -1
  916. package/dist/_chunks/de-elBeWdG2.js +0 -716
  917. package/dist/_chunks/de-elBeWdG2.js.map +0 -1
  918. package/dist/_chunks/de-uQFFWv6o.mjs +0 -716
  919. package/dist/_chunks/de-uQFFWv6o.mjs.map +0 -1
  920. package/dist/_chunks/develop-3cP1QX7t.mjs +0 -66
  921. package/dist/_chunks/develop-3cP1QX7t.mjs.map +0 -1
  922. package/dist/_chunks/develop-YNTGWKMC.js +0 -70
  923. package/dist/_chunks/develop-YNTGWKMC.js.map +0 -1
  924. package/dist/_chunks/dk-QgYCviRU.mjs +0 -634
  925. package/dist/_chunks/dk-QgYCviRU.mjs.map +0 -1
  926. package/dist/_chunks/dk-qvFj0oFG.js +0 -634
  927. package/dist/_chunks/dk-qvFj0oFG.js.map +0 -1
  928. package/dist/_chunks/en-ZBAy2GQ0.mjs +0 -1035
  929. package/dist/_chunks/en-ZBAy2GQ0.mjs.map +0 -1
  930. package/dist/_chunks/en-l5S8Gv-y.js +0 -1035
  931. package/dist/_chunks/en-l5S8Gv-y.js.map +0 -1
  932. package/dist/_chunks/es-h5dK2UFx.mjs +0 -796
  933. package/dist/_chunks/es-h5dK2UFx.mjs.map +0 -1
  934. package/dist/_chunks/es-hBQ_pL0X.js +0 -796
  935. package/dist/_chunks/es-hBQ_pL0X.js.map +0 -1
  936. package/dist/_chunks/eu-7yW2eEOy.mjs +0 -832
  937. package/dist/_chunks/eu-7yW2eEOy.mjs.map +0 -1
  938. package/dist/_chunks/eu-VH6nNPXY.js +0 -832
  939. package/dist/_chunks/eu-VH6nNPXY.js.map +0 -1
  940. package/dist/_chunks/fr-I-0ckcEU.mjs +0 -762
  941. package/dist/_chunks/fr-I-0ckcEU.mjs.map +0 -1
  942. package/dist/_chunks/fr-RVVsyT5B.js +0 -762
  943. package/dist/_chunks/fr-RVVsyT5B.js.map +0 -1
  944. package/dist/_chunks/gu-76mTVAc2.js +0 -623
  945. package/dist/_chunks/gu-76mTVAc2.js.map +0 -1
  946. package/dist/_chunks/gu-k2JKO75-.mjs +0 -623
  947. package/dist/_chunks/gu-k2JKO75-.mjs.map +0 -1
  948. package/dist/_chunks/hi-eUDhoDjK.mjs +0 -722
  949. package/dist/_chunks/hi-eUDhoDjK.mjs.map +0 -1
  950. package/dist/_chunks/hi-zD7tX6HS.js +0 -722
  951. package/dist/_chunks/hi-zD7tX6HS.js.map +0 -1
  952. package/dist/_chunks/hu-0pmvoLj1.js +0 -832
  953. package/dist/_chunks/hu-0pmvoLj1.js.map +0 -1
  954. package/dist/_chunks/hu-Nw7d3QWI.mjs +0 -832
  955. package/dist/_chunks/hu-Nw7d3QWI.mjs.map +0 -1
  956. package/dist/_chunks/id-xMqk-8lW.mjs +0 -448
  957. package/dist/_chunks/id-xMqk-8lW.mjs.map +0 -1
  958. package/dist/_chunks/id-yQtHASS7.js +0 -448
  959. package/dist/_chunks/id-yQtHASS7.js.map +0 -1
  960. package/dist/_chunks/index-0WWbaSNa.mjs +0 -898
  961. package/dist/_chunks/index-0WWbaSNa.mjs.map +0 -1
  962. package/dist/_chunks/index-sNH2VWbC.js +0 -936
  963. package/dist/_chunks/index-sNH2VWbC.js.map +0 -1
  964. package/dist/_chunks/index-yRyOfi01.mjs +0 -19071
  965. package/dist/_chunks/index-yRyOfi01.mjs.map +0 -1
  966. package/dist/_chunks/index-ydPzLfs7.js +0 -19129
  967. package/dist/_chunks/index-ydPzLfs7.js.map +0 -1
  968. package/dist/_chunks/it-RPJqQqp3.js +0 -459
  969. package/dist/_chunks/it-RPJqQqp3.js.map +0 -1
  970. package/dist/_chunks/it-rHB9s1La.mjs +0 -459
  971. package/dist/_chunks/it-rHB9s1La.mjs.map +0 -1
  972. package/dist/_chunks/ja-5uFhM-kW.js +0 -633
  973. package/dist/_chunks/ja-5uFhM-kW.js.map +0 -1
  974. package/dist/_chunks/ja-WD-v2aCc.mjs +0 -633
  975. package/dist/_chunks/ja-WD-v2aCc.mjs.map +0 -1
  976. package/dist/_chunks/ko-JyirX0Lo.js +0 -631
  977. package/dist/_chunks/ko-JyirX0Lo.js.map +0 -1
  978. package/dist/_chunks/ko-bqCJmLX_.mjs +0 -631
  979. package/dist/_chunks/ko-bqCJmLX_.mjs.map +0 -1
  980. package/dist/_chunks/ml-NdVWq6KA.mjs +0 -722
  981. package/dist/_chunks/ml-NdVWq6KA.mjs.map +0 -1
  982. package/dist/_chunks/ml-QqpcKQgB.js +0 -722
  983. package/dist/_chunks/ml-QqpcKQgB.js.map +0 -1
  984. package/dist/_chunks/ms-gansS54r.mjs +0 -342
  985. package/dist/_chunks/ms-gansS54r.mjs.map +0 -1
  986. package/dist/_chunks/ms-wbSWdQJ0.js +0 -342
  987. package/dist/_chunks/ms-wbSWdQJ0.js.map +0 -1
  988. package/dist/_chunks/nl--_EbnSVw.mjs +0 -828
  989. package/dist/_chunks/nl--_EbnSVw.mjs.map +0 -1
  990. package/dist/_chunks/nl-Foqdtl_-.js +0 -828
  991. package/dist/_chunks/nl-Foqdtl_-.js.map +0 -1
  992. package/dist/_chunks/pl-01EnRFRc.js +0 -721
  993. package/dist/_chunks/pl-01EnRFRc.js.map +0 -1
  994. package/dist/_chunks/pl-3EvXSIl8.mjs +0 -721
  995. package/dist/_chunks/pl-3EvXSIl8.mjs.map +0 -1
  996. package/dist/_chunks/pt-BR-8-G6vaMo.mjs +0 -794
  997. package/dist/_chunks/pt-BR-8-G6vaMo.mjs.map +0 -1
  998. package/dist/_chunks/pt-BR-F3FsQI-D.js +0 -794
  999. package/dist/_chunks/pt-BR-F3FsQI-D.js.map +0 -1
  1000. package/dist/_chunks/pt-Mve7WzqZ.js +0 -296
  1001. package/dist/_chunks/pt-Mve7WzqZ.js.map +0 -1
  1002. package/dist/_chunks/pt-TrdDLCZ4.mjs +0 -296
  1003. package/dist/_chunks/pt-TrdDLCZ4.mjs.map +0 -1
  1004. package/dist/_chunks/reviewWorkflows-qkvwfbFl.js +0 -116
  1005. package/dist/_chunks/reviewWorkflows-qkvwfbFl.js.map +0 -1
  1006. package/dist/_chunks/reviewWorkflows-zkQBDTm_.mjs +0 -117
  1007. package/dist/_chunks/reviewWorkflows-zkQBDTm_.mjs.map +0 -1
  1008. package/dist/_chunks/ru-flezEXdc.js +0 -993
  1009. package/dist/_chunks/ru-flezEXdc.js.map +0 -1
  1010. package/dist/_chunks/ru-mivqkjAk.mjs +0 -993
  1011. package/dist/_chunks/ru-mivqkjAk.mjs.map +0 -1
  1012. package/dist/_chunks/sa-AbTtHezl.mjs +0 -722
  1013. package/dist/_chunks/sa-AbTtHezl.mjs.map +0 -1
  1014. package/dist/_chunks/sa-gjKCAmHv.js +0 -722
  1015. package/dist/_chunks/sa-gjKCAmHv.js.map +0 -1
  1016. package/dist/_chunks/sk-IoQ_DY_j.mjs +0 -690
  1017. package/dist/_chunks/sk-IoQ_DY_j.mjs.map +0 -1
  1018. package/dist/_chunks/sk-xA9DPcmq.js +0 -690
  1019. package/dist/_chunks/sk-xA9DPcmq.js.map +0 -1
  1020. package/dist/_chunks/sv-SHJ67uau.mjs +0 -827
  1021. package/dist/_chunks/sv-SHJ67uau.mjs.map +0 -1
  1022. package/dist/_chunks/sv-be1suA3a.js +0 -827
  1023. package/dist/_chunks/sv-be1suA3a.js.map +0 -1
  1024. package/dist/_chunks/th-7ExcBOpr.js +0 -430
  1025. package/dist/_chunks/th-7ExcBOpr.js.map +0 -1
  1026. package/dist/_chunks/th-TrS9p5eO.mjs +0 -430
  1027. package/dist/_chunks/th-TrS9p5eO.mjs.map +0 -1
  1028. package/dist/_chunks/tr-f8ouRTmt.mjs +0 -785
  1029. package/dist/_chunks/tr-f8ouRTmt.mjs.map +0 -1
  1030. package/dist/_chunks/tr-u4e0KNRe.js +0 -785
  1031. package/dist/_chunks/tr-u4e0KNRe.js.map +0 -1
  1032. package/dist/_chunks/transferTokens-8RJcRrF7.mjs +0 -63
  1033. package/dist/_chunks/transferTokens-8RJcRrF7.mjs.map +0 -1
  1034. package/dist/_chunks/transferTokens-mBIXwjnE.js +0 -62
  1035. package/dist/_chunks/transferTokens-mBIXwjnE.js.map +0 -1
  1036. package/dist/_chunks/uk-5Ikxxci1.js +0 -343
  1037. package/dist/_chunks/uk-5Ikxxci1.js.map +0 -1
  1038. package/dist/_chunks/uk-x2flwIlG.mjs +0 -343
  1039. package/dist/_chunks/uk-x2flwIlG.mjs.map +0 -1
  1040. package/dist/_chunks/useAdminRoles-0FSsVVVF.mjs +0 -28
  1041. package/dist/_chunks/useAdminRoles-0FSsVVVF.mjs.map +0 -1
  1042. package/dist/_chunks/useAdminRoles-2lOWH8Kw.js +0 -46
  1043. package/dist/_chunks/useAdminRoles-2lOWH8Kw.js.map +0 -1
  1044. package/dist/_chunks/useContentTypes-GOmCpezl.mjs +0 -72
  1045. package/dist/_chunks/useContentTypes-GOmCpezl.mjs.map +0 -1
  1046. package/dist/_chunks/useContentTypes-JzGTxjad.js +0 -90
  1047. package/dist/_chunks/useContentTypes-JzGTxjad.js.map +0 -1
  1048. package/dist/_chunks/useLicenseLimitNotification-MeYE7YEx.js +0 -100
  1049. package/dist/_chunks/useLicenseLimitNotification-MeYE7YEx.js.map +0 -1
  1050. package/dist/_chunks/useLicenseLimitNotification-U_gpKHX2.mjs +0 -80
  1051. package/dist/_chunks/useLicenseLimitNotification-U_gpKHX2.mjs.map +0 -1
  1052. package/dist/_chunks/useReviewWorkflows--Q0J_Ge3.js +0 -26
  1053. package/dist/_chunks/useReviewWorkflows--Q0J_Ge3.js.map +0 -1
  1054. package/dist/_chunks/useReviewWorkflows-JseCtS_K.mjs +0 -27
  1055. package/dist/_chunks/useReviewWorkflows-JseCtS_K.mjs.map +0 -1
  1056. package/dist/_chunks/useWebhooks-GBt4UUQt.mjs +0 -90
  1057. package/dist/_chunks/useWebhooks-GBt4UUQt.mjs.map +0 -1
  1058. package/dist/_chunks/useWebhooks-rkAK3kK5.js +0 -89
  1059. package/dist/_chunks/useWebhooks-rkAK3kK5.js.map +0 -1
  1060. package/dist/_chunks/validateWorkflow-K0uDqmsX.js +0 -1078
  1061. package/dist/_chunks/validateWorkflow-K0uDqmsX.js.map +0 -1
  1062. package/dist/_chunks/validateWorkflow-Owsa2rpu.mjs +0 -1055
  1063. package/dist/_chunks/validateWorkflow-Owsa2rpu.mjs.map +0 -1
  1064. package/dist/_chunks/validation-f9rGWFeU.mjs +0 -16
  1065. package/dist/_chunks/validation-f9rGWFeU.mjs.map +0 -1
  1066. package/dist/_chunks/validation-j25hbp81.js +0 -34
  1067. package/dist/_chunks/validation-j25hbp81.js.map +0 -1
  1068. package/dist/_chunks/vi-BbeHSbqs.mjs +0 -298
  1069. package/dist/_chunks/vi-BbeHSbqs.mjs.map +0 -1
  1070. package/dist/_chunks/vi-SYqVl8vH.js +0 -298
  1071. package/dist/_chunks/vi-SYqVl8vH.js.map +0 -1
  1072. package/dist/_chunks/watch-6AKkERUi.mjs +0 -86
  1073. package/dist/_chunks/watch-6AKkERUi.mjs.map +0 -1
  1074. package/dist/_chunks/watch-IKaZxKoL.js +0 -134
  1075. package/dist/_chunks/watch-IKaZxKoL.js.map +0 -1
  1076. package/dist/_chunks/watch-ObwxNhtY.mjs +0 -129
  1077. package/dist/_chunks/watch-ObwxNhtY.mjs.map +0 -1
  1078. package/dist/_chunks/watch-ZVMgmXK1.js +0 -111
  1079. package/dist/_chunks/watch-ZVMgmXK1.js.map +0 -1
  1080. package/dist/_chunks/zh-9728QXZm.js +0 -836
  1081. package/dist/_chunks/zh-9728QXZm.js.map +0 -1
  1082. package/dist/_chunks/zh-Hans-SHNzD0Zk.js +0 -957
  1083. package/dist/_chunks/zh-Hans-SHNzD0Zk.js.map +0 -1
  1084. package/dist/_chunks/zh-Hans-eY3IWdFB.mjs +0 -957
  1085. package/dist/_chunks/zh-Hans-eY3IWdFB.mjs.map +0 -1
  1086. package/dist/_chunks/zh-cZop7tV1.mjs +0 -836
  1087. package/dist/_chunks/zh-cZop7tV1.mjs.map +0 -1
  1088. package/dist/admin/src/components/AuthenticatedApp.d.ts +0 -2
  1089. package/dist/admin/src/content-manager/components/BlocksInput/BlocksEditor.d.ts +0 -69
  1090. package/dist/admin/src/content-manager/components/BlocksInput/BlocksInput.d.ts +0 -19
  1091. package/dist/admin/src/content-manager/components/ComponentInitializer.d.ts +0 -10
  1092. package/dist/admin/src/content-manager/components/ContentTypeFormWrapper.d.ts +0 -32
  1093. package/dist/admin/src/content-manager/components/DynamicZone/ComponentCard.d.ts +0 -9
  1094. package/dist/admin/src/content-manager/components/DynamicZone/ComponentCategory.d.ts +0 -17
  1095. package/dist/admin/src/content-manager/components/DynamicZone/DynamicComponent.d.ts +0 -15
  1096. package/dist/admin/src/content-manager/components/DynamicZone/DynamicZoneLabel.d.ts +0 -13
  1097. package/dist/admin/src/content-manager/components/DynamicZone/Field.d.ts +0 -32
  1098. package/dist/admin/src/content-manager/components/EditViewDataManagerProvider/Provider.d.ts +0 -18
  1099. package/dist/admin/src/content-manager/components/EditViewDataManagerProvider/reducer.d.ts +0 -150
  1100. package/dist/admin/src/content-manager/components/EditViewDataManagerProvider/utils/cleanData.d.ts +0 -6
  1101. package/dist/admin/src/content-manager/components/EditViewDataManagerProvider/utils/findAllAndReplace.d.ts +0 -33
  1102. package/dist/admin/src/content-manager/components/EditViewDataManagerProvider/utils/getAPIInnerError.d.ts +0 -6
  1103. package/dist/admin/src/content-manager/components/EditViewDataManagerProvider/utils/moveFields.d.ts +0 -2
  1104. package/dist/admin/src/content-manager/components/FieldComponent.d.ts +0 -16
  1105. package/dist/admin/src/content-manager/components/Hint.d.ts +0 -9
  1106. package/dist/admin/src/content-manager/components/InputUID.d.ts +0 -16
  1107. package/dist/admin/src/content-manager/components/Inputs.d.ts +0 -11
  1108. package/dist/admin/src/content-manager/components/NonRepeatableComponent.d.ts +0 -9
  1109. package/dist/admin/src/content-manager/components/Relations/RelationInput.d.ts +0 -62
  1110. package/dist/admin/src/content-manager/components/Relations/RelationInputDataManager.d.ts +0 -26
  1111. package/dist/admin/src/content-manager/components/Relations/useRelation.d.ts +0 -31
  1112. package/dist/admin/src/content-manager/components/Relations/utils/diffRelations.d.ts +0 -2
  1113. package/dist/admin/src/content-manager/components/Relations/utils/getRelationLink.d.ts +0 -2
  1114. package/dist/admin/src/content-manager/components/Relations/utils/normalizeRelations.d.ts +0 -13
  1115. package/dist/admin/src/content-manager/components/Relations/utils/normalizeSearchResults.d.ts +0 -149
  1116. package/dist/admin/src/content-manager/components/RepeatableComponent.d.ts +0 -14
  1117. package/dist/admin/src/content-manager/components/Wysiwyg/Editor.d.ts +0 -28
  1118. package/dist/admin/src/content-manager/components/Wysiwyg/EditorLayout.d.ts +0 -59
  1119. package/dist/admin/src/content-manager/components/Wysiwyg/Field.d.ts +0 -14
  1120. package/dist/admin/src/content-manager/components/Wysiwyg/WysiwygStyles.d.ts +0 -54
  1121. package/dist/admin/src/content-manager/contexts/models.d.ts +0 -5
  1122. package/dist/admin/src/content-manager/hooks/useContentTypeLayout.d.ts +0 -6
  1123. package/dist/admin/src/content-manager/hooks/useFindRedirectionLink.d.ts +0 -2
  1124. package/dist/admin/src/content-manager/hooks/useLayouts.d.ts +0 -10
  1125. package/dist/admin/src/content-manager/pages/App.d.ts +0 -50
  1126. package/dist/admin/src/content-manager/pages/CollectionTypePages.d.ts +0 -12
  1127. package/dist/admin/src/content-manager/pages/ComponentSettingsView.d.ts +0 -2
  1128. package/dist/admin/src/content-manager/pages/EditView/components/DeleteLink.d.ts +0 -6
  1129. package/dist/admin/src/content-manager/pages/EditView/components/DraftAndPublishBadge.d.ts +0 -2
  1130. package/dist/admin/src/content-manager/pages/EditView/components/Information.d.ts +0 -10
  1131. package/dist/admin/src/content-manager/pages/EditView/components/InformationBoxCE.d.ts +0 -2
  1132. package/dist/admin/src/content-manager/pages/EditViewLayoutManager.d.ts +0 -26
  1133. package/dist/admin/src/content-manager/pages/ListView/components/AdminUsersFilter.d.ts +0 -6
  1134. package/dist/admin/src/content-manager/pages/ListView/components/DialogConfirmDelete.d.ts +0 -9
  1135. package/dist/admin/src/content-manager/pages/ListView/components/Filter.d.ts +0 -7
  1136. package/dist/admin/src/content-manager/pages/ListView/components/Table.d.ts +0 -28
  1137. package/dist/admin/src/content-manager/pages/ListView/hooks/useAllowedAttributes.d.ts +0 -3
  1138. package/dist/admin/src/content-manager/pages/ListViewLayoutManager.d.ts +0 -75
  1139. package/dist/admin/src/content-manager/sharedReducers/crud/actions.d.ts +0 -63
  1140. package/dist/admin/src/content-manager/sharedReducers/crud/constants.d.ts +0 -8
  1141. package/dist/admin/src/content-manager/sharedReducers/crud/reducer.d.ts +0 -24
  1142. package/dist/admin/src/content-manager/utils/arrayMoveItem.d.ts +0 -2
  1143. package/dist/admin/src/content-manager/utils/data.d.ts +0 -5
  1144. package/dist/admin/src/content-manager/utils/fields.d.ts +0 -7
  1145. package/dist/admin/src/content-manager/utils/layouts.d.ts +0 -96
  1146. package/dist/admin/src/content-manager/utils/paths.d.ts +0 -7
  1147. package/dist/admin/src/content-manager/utils/permissions.d.ts +0 -8
  1148. package/dist/admin/src/content-manager/utils/refs.d.ts +0 -8
  1149. package/dist/admin/src/content-manager/utils/schemas.d.ts +0 -22
  1150. package/dist/admin/src/content-manager/utils/users.d.ts +0 -7
  1151. package/dist/admin/src/core/apis/Components.d.ts +0 -10
  1152. package/dist/admin/src/core/apis/Fields.d.ts +0 -10
  1153. package/dist/admin/src/core/apis/Middlewares.d.ts +0 -9
  1154. package/dist/admin/src/core/apis/Reducers.d.ts +0 -10
  1155. package/dist/admin/src/hooks/useDocument.d.ts +0 -24
  1156. package/dist/admin/src/layouts/AppLayout.d.ts +0 -7
  1157. package/dist/admin/src/pages/Admin.d.ts +0 -7
  1158. package/dist/admin/src/pages/Auth/components/FieldActionWrapper.d.ts +0 -3
  1159. package/dist/admin/src/pages/Settings/SettingsPage.d.ts +0 -4
  1160. package/dist/admin/src/pages/Settings/components/Filters.d.ts +0 -5
  1161. package/dist/admin/src/pages/Settings/pages/ApiTokens/EditView/components/LoadingView.d.ts +0 -5
  1162. package/dist/admin/src/pages/Settings/pages/Users/components/TableRows.d.ts +0 -9
  1163. package/dist/admin/src/types/form.d.ts +0 -6
  1164. package/dist/admin/src/utils/createRoute.d.ts +0 -6
  1165. package/dist/admin/src/utils/getFullName.d.ts +0 -1
  1166. package/dist/cli.js +0 -34
  1167. package/dist/cli.js.map +0 -1
  1168. package/dist/cli.mjs +0 -34
  1169. package/dist/cli.mjs.map +0 -1
  1170. package/dist/ee/admin/src/content-manager/pages/EditView/components/InformationBoxEE.d.ts +0 -2
  1171. package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/PaginationFooter.d.ts +0 -6
  1172. package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/TableRows.d.ts +0 -32
  1173. package/index.d.ts +0 -22
  1174. package/index.js +0 -255
  1175. /package/dist/admin/src/content-manager/{utils → constants}/dragAndDrop.d.ts +0 -0
  1176. /package/dist/admin/src/content-manager/{components → pages/EditView/components/FormInputs}/BlocksInput/Blocks/Code.d.ts +0 -0
  1177. /package/dist/admin/src/content-manager/{components → pages/EditView/components/FormInputs}/BlocksInput/Blocks/Heading.d.ts +0 -0
  1178. /package/dist/admin/src/content-manager/{components → pages/EditView/components/FormInputs}/BlocksInput/Blocks/Image.d.ts +0 -0
  1179. /package/dist/admin/src/content-manager/{components → pages/EditView/components/FormInputs}/BlocksInput/Blocks/Link.d.ts +0 -0
  1180. /package/dist/admin/src/content-manager/{components → pages/EditView/components/FormInputs}/BlocksInput/Blocks/List.d.ts +0 -0
  1181. /package/dist/admin/src/content-manager/{components → pages/EditView/components/FormInputs}/BlocksInput/Blocks/Paragraph.d.ts +0 -0
  1182. /package/dist/admin/src/content-manager/{components → pages/EditView/components/FormInputs}/BlocksInput/Blocks/Quote.d.ts +0 -0
  1183. /package/dist/admin/src/content-manager/{components → pages/EditView/components/FormInputs}/BlocksInput/BlocksContent.d.ts +0 -0
  1184. /package/dist/admin/src/content-manager/{components → pages/EditView/components/FormInputs}/BlocksInput/BlocksToolbar.d.ts +0 -0
  1185. /package/dist/admin/src/content-manager/{components → pages/EditView/components/FormInputs}/BlocksInput/EditorLayout.d.ts +0 -0
  1186. /package/dist/admin/src/content-manager/{components → pages/EditView/components/FormInputs}/BlocksInput/Modifiers.d.ts +0 -0
  1187. /package/dist/admin/src/content-manager/{components → pages/EditView/components/FormInputs}/BlocksInput/plugins/withImages.d.ts +0 -0
  1188. /package/dist/admin/src/content-manager/{components → pages/EditView/components/FormInputs}/BlocksInput/plugins/withLinks.d.ts +0 -0
  1189. /package/dist/admin/src/content-manager/{components → pages/EditView/components/FormInputs}/BlocksInput/plugins/withStrapiSchema.d.ts +0 -0
  1190. /package/dist/admin/src/content-manager/{components → pages/EditView/components/FormInputs}/BlocksInput/utils/conversions.d.ts +0 -0
  1191. /package/dist/admin/src/content-manager/{components → pages/EditView/components/FormInputs}/BlocksInput/utils/enterKey.d.ts +0 -0
  1192. /package/dist/admin/src/content-manager/{components → pages/EditView/components/FormInputs}/BlocksInput/utils/links.d.ts +0 -0
  1193. /package/dist/admin/src/content-manager/{components → pages/EditView/components/FormInputs}/BlocksInput/utils/types.d.ts +0 -0
  1194. /package/dist/admin/src/content-manager/{components → pages/EditView/components/FormInputs}/DynamicZone/AddComponentButton.d.ts +0 -0
  1195. /package/dist/admin/src/content-manager/{components → pages/EditView/components/FormInputs}/DynamicZone/ComponentPicker.d.ts +0 -0
  1196. /package/dist/admin/src/content-manager/{components → pages/EditView/components/FormInputs}/Wysiwyg/PreviewWysiwyg.d.ts +0 -0
  1197. /package/dist/admin/src/content-manager/{components → pages/EditView/components/FormInputs}/Wysiwyg/WysiwygFooter.d.ts +0 -0
  1198. /package/dist/admin/src/content-manager/{components → pages/EditView/components/FormInputs}/Wysiwyg/WysiwygNav.d.ts +0 -0
  1199. /package/dist/admin/src/content-manager/{components → pages/EditView/components/FormInputs}/Wysiwyg/utils/continueList.d.ts +0 -0
  1200. /package/dist/admin/src/content-manager/{components → pages/EditView/components/FormInputs}/Wysiwyg/utils/mdRenderer.d.ts +0 -0
  1201. /package/dist/admin/src/content-manager/{components → pages/EditView/components/FormInputs}/Wysiwyg/utils/utils.d.ts +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-yRyOfi01.mjs","sources":["../../admin/src/components/NoJavascript.tsx","../../admin/src/components/DefaultDocument.tsx","../../admin/src/components/Context.tsx","../../admin/src/core/store/hooks.ts","../../admin/src/reducer.ts","../../admin/src/utils/baseQuery.ts","../../admin/src/services/api.ts","../../admin/src/services/auth.ts","../../admin/src/features/Auth.tsx","../../admin/src/components/PrivateRoute.tsx","../../admin/src/constants.ts","../../admin/src/services/admin.ts","../../admin/src/features/Configuration.tsx","../../admin/src/hooks/useEnterprise.ts","../../admin/src/components/UnauthenticatedLogo.tsx","../../admin/src/layouts/UnauthenticatedLayout.tsx","../../admin/src/pages/Auth/components/FieldActionWrapper.tsx","../../admin/src/pages/Auth/components/Login.tsx","../../admin/src/pages/Auth/components/ForgotPassword.tsx","../../admin/src/pages/Auth/components/ForgotPasswordSuccess.tsx","../../admin/src/pages/Auth/components/Oops.tsx","../../admin/src/components/NpsSurvey.tsx","../../admin/src/pages/Auth/components/Register.tsx","../../admin/src/pages/Auth/components/ResetPassword.tsx","../../admin/src/pages/Auth/constants.ts","../../admin/src/pages/Auth/AuthPage.tsx","../../admin/src/pages/NotFoundPage.tsx","../../admin/src/pages/UseCasePage.tsx","../../admin/src/utils/createRoute.tsx","../../admin/src/App.tsx","../../admin/src/assets/images/logo-strapi-2022.svg","../../admin/src/hooks/useInjectionZone.ts","../../admin/src/components/InjectionZone.tsx","../../admin/src/components/GuidedTour/Provider.tsx","../../admin/src/components/LanguageProvider.tsx","../../admin/src/components/Theme.tsx","../../admin/src/components/Providers.tsx","../../admin/src/core/apis/Components.ts","../../admin/src/core/apis/CustomFields.ts","../../admin/src/core/apis/Fields.ts","../../admin/src/core/apis/Middlewares.ts","../../admin/src/core/apis/Plugin.ts","../../admin/src/core/apis/Reducers.ts","../../admin/src/components/RBACProvider.tsx","../../admin/src/content-manager/hooks/useSyncRbac.ts","../../admin/src/components/DragLayer.tsx","../../admin/src/content-manager/components/DragPreviews/CardDragPreview.tsx","../../admin/src/content-manager/components/DragPreviews/ComponentDragPreview.tsx","../../admin/src/content-manager/utils/translations.ts","../../admin/src/content-manager/hooks/useKeyboardDragAndDrop.ts","../../admin/src/content-manager/hooks/useDragAndDrop.ts","../../admin/src/content-manager/hooks/usePrev.ts","../../admin/src/content-manager/utils/dragAndDrop.ts","../../admin/src/content-manager/utils/refs.ts","../../admin/src/content-manager/components/Relations/RelationInput.tsx","../../admin/src/content-manager/utils/paths.ts","../../admin/src/content-manager/components/Relations/utils/getRelationLink.ts","../../admin/src/content-manager/components/Relations/utils/normalizeRelations.ts","../../admin/src/content-manager/components/Relations/useRelation.ts","../../admin/src/content-manager/components/Relations/utils/diffRelations.ts","../../admin/src/content-manager/components/Relations/utils/normalizeSearchResults.ts","../../admin/src/content-manager/components/Relations/RelationInputDataManager.tsx","../../admin/src/content-manager/components/DragPreviews/RelationDragPreview.tsx","../../admin/src/content-manager/components/LeftMenu.tsx","../../admin/src/content-manager/contexts/models.ts","../../admin/src/content-manager/hooks/useContentManagerInitData.ts","../../admin/src/content-manager/utils/schemas.ts","../../admin/src/content-manager/utils/layouts.ts","../../admin/src/content-manager/hooks/useLayouts.ts","../../admin/src/content-manager/pages/EditSettingsView/components/LayoutDndProvider/index.jsx","../../admin/src/content-manager/pages/EditSettingsView/hooks/useLayoutDnd.js","../../admin/src/content-manager/pages/EditSettingsView/components/LinkToCTB.jsx","../../admin/src/content-manager/pages/EditSettingsView/components/ComponentFieldList.jsx","../../admin/src/content-manager/components/ComponentIcon.tsx","../../admin/src/content-manager/pages/EditSettingsView/components/DynamicZoneList.jsx","../../admin/src/content-manager/pages/EditSettingsView/components/FieldButtonContent.jsx","../../admin/src/content-manager/pages/EditSettingsView/components/DisplayedFieldButton.jsx","../../admin/src/content-manager/pages/EditSettingsView/components/RowItemsLayout.jsx","../../admin/src/content-manager/pages/EditSettingsView/components/RowsLayout.jsx","../../admin/src/content-manager/pages/EditSettingsView/components/DisplayedFields.jsx","../../admin/src/content-manager/components/FieldTypeIcon.tsx","../../admin/src/content-manager/pages/EditSettingsView/utils/createPossibleMainFieldsForModelsAndComponents.js","../../admin/src/content-manager/pages/EditSettingsView/utils/getInputProps.js","../../admin/src/content-manager/pages/EditSettingsView/components/GenericInput.jsx","../../admin/src/content-manager/pages/EditSettingsView/components/ModalForm.jsx","../../admin/src/content-manager/pages/EditSettingsView/components/FormModal.jsx","../../admin/src/content-manager/pages/EditSettingsView/utils/layout.js","../../admin/src/content-manager/pages/EditSettingsView/init.js","../../admin/src/content-manager/utils/arrayMoveItem.ts","../../admin/src/content-manager/pages/EditSettingsView/reducer.js","../../admin/src/content-manager/pages/EditSettingsView/index.jsx","../../admin/src/hooks/useOnce.ts","../../admin/src/utils/objects.ts","../../admin/src/content-manager/hooks/useFindRedirectionLink.ts","../../admin/src/content-manager/sharedReducers/crud/constants.ts","../../admin/src/content-manager/sharedReducers/crud/actions.ts","../../admin/src/content-manager/utils/api.ts","../../admin/src/content-manager/utils/data.ts","../../admin/src/content-manager/components/ContentTypeFormWrapper.tsx","../../admin/src/content-manager/hooks/useContentTypeLayout.ts","../../admin/src/content-manager/components/DynamicZone/AddComponentButton.tsx","../../admin/src/content-manager/components/DynamicZone/ComponentCategory.tsx","../../admin/src/content-manager/components/DynamicZone/ComponentPicker.tsx","../../admin/src/content-manager/utils/fields.ts","../../admin/src/content-manager/components/ComponentInitializer.tsx","../../admin/src/content-manager/hooks/useLazyComponents.ts","../../admin/src/content-manager/components/Hint.tsx","../../admin/src/content-manager/components/BlocksInput/utils/conversions.ts","../../admin/src/content-manager/components/BlocksInput/utils/enterKey.ts","../../admin/src/content-manager/components/BlocksInput/Blocks/Code.tsx","../../admin/src/content-manager/components/BlocksInput/Blocks/Heading.tsx","../../admin/src/content-manager/components/BlocksInput/Blocks/Image.tsx","../../admin/src/content-manager/components/BlocksInput/utils/links.ts","../../admin/src/content-manager/components/BlocksInput/utils/types.ts","../../admin/src/content-manager/components/BlocksInput/Blocks/Link.tsx","../../admin/src/content-manager/components/BlocksInput/Blocks/List.tsx","../../admin/src/content-manager/components/BlocksInput/Blocks/Paragraph.tsx","../../admin/src/content-manager/components/BlocksInput/Blocks/Quote.tsx","../../admin/src/content-manager/components/BlocksInput/BlocksToolbar.tsx","../../admin/src/content-manager/components/BlocksInput/BlocksContent.tsx","../../admin/src/content-manager/components/BlocksInput/EditorLayout.tsx","../../admin/src/content-manager/components/BlocksInput/Modifiers.tsx","../../admin/src/content-manager/components/BlocksInput/plugins/withImages.ts","../../admin/src/content-manager/components/BlocksInput/plugins/withLinks.ts","../../admin/src/content-manager/components/BlocksInput/plugins/withStrapiSchema.ts","../../admin/src/content-manager/components/BlocksInput/BlocksEditor.tsx","../../admin/src/content-manager/components/BlocksInput/BlocksInput.tsx","../../admin/src/hooks/useDebounce.ts","../../admin/src/content-manager/components/InputUID.tsx","../../admin/src/content-manager/components/Wysiwyg/utils/mdRenderer.ts","../../admin/src/content-manager/components/Wysiwyg/PreviewWysiwyg.tsx","../../admin/src/content-manager/components/Wysiwyg/utils/continueList.ts","../../admin/src/content-manager/components/Wysiwyg/Editor.tsx","../../admin/src/content-manager/components/Wysiwyg/EditorLayout.tsx","../../admin/src/content-manager/components/Wysiwyg/utils/utils.ts","../../admin/src/content-manager/components/Wysiwyg/WysiwygStyles.tsx","../../admin/src/content-manager/components/Wysiwyg/WysiwygFooter.tsx","../../admin/src/content-manager/components/Wysiwyg/WysiwygNav.tsx","../../admin/src/content-manager/components/Wysiwyg/Field.tsx","../../admin/src/content-manager/components/Inputs.tsx","../../admin/src/content-manager/components/NonRepeatableComponent.tsx","../../admin/src/content-manager/components/RepeatableComponent.tsx","../../admin/src/content-manager/components/FieldComponent.tsx","../../admin/src/content-manager/components/DynamicZone/DynamicComponent.tsx","../../admin/src/content-manager/components/DynamicZone/DynamicZoneLabel.tsx","../../admin/src/content-manager/components/DynamicZone/Field.tsx","../../admin/src/content-manager/utils/validation.ts","../../admin/src/content-manager/constants/attributes.ts","../../admin/src/content-manager/components/EditViewDataManagerProvider/utils/findAllAndReplace.ts","../../admin/src/content-manager/components/EditViewDataManagerProvider/utils/moveFields.ts","../../admin/src/content-manager/components/EditViewDataManagerProvider/reducer.ts","../../admin/src/content-manager/components/EditViewDataManagerProvider/utils/cleanData.ts","../../admin/src/content-manager/components/EditViewDataManagerProvider/Provider.tsx","../../admin/src/content-manager/utils/permissions.ts","../../admin/src/content-manager/pages/EditView/components/DeleteLink.tsx","../../admin/src/content-manager/pages/EditView/components/DraftAndPublishBadge.tsx","../../admin/src/content-manager/pages/EditView/components/Header.tsx","../../admin/src/content-manager/utils/users.ts","../../admin/src/content-manager/pages/EditView/components/Information.tsx","../../admin/src/content-manager/pages/EditView/components/InformationBoxCE.tsx","../../admin/src/content-manager/pages/EditView/EditViewPage.tsx","../../admin/src/content-manager/pages/EditViewLayoutManager.tsx","../../admin/src/content-manager/utils/attributes.ts","../../admin/src/content-manager/pages/ListSettingsView/components/EditFieldForm.jsx","../../admin/src/content-manager/pages/ListSettingsView/components/Settings.jsx","../../admin/src/content-manager/pages/ListSettingsView/components/DraggableCard.jsx","../../admin/src/content-manager/pages/ListSettingsView/components/SortDisplayedFields.jsx","../../admin/src/content-manager/pages/ListSettingsView/constants.js","../../admin/src/content-manager/pages/ListSettingsView/reducer.js","../../admin/src/content-manager/pages/ListSettingsView/index.jsx","../../admin/src/services/users.ts","../../admin/src/content-manager/pages/ListView/components/AdminUsersFilter.tsx","../../admin/src/content-manager/pages/ListView/components/AutoCloneFailureModal.tsx","../../admin/src/content-manager/pages/ListView/components/InjectionZoneList.tsx","../../admin/src/content-manager/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.tsx","../../admin/src/content-manager/pages/ListView/components/DialogConfirmDelete.tsx","../../admin/src/content-manager/pages/ListView/components/Table.tsx","../../admin/src/content-manager/pages/ListView/components/BulkActions/SelectedEntriesModal.tsx","../../admin/src/content-manager/pages/ListView/components/BulkActions/Buttons.tsx","../../admin/src/content-manager/pages/ListView/components/Filter.tsx","../../admin/src/content-manager/pages/ListView/components/TableCells/CellValue.tsx","../../admin/src/content-manager/pages/ListView/components/TableCells/Components.tsx","../../admin/src/content-manager/pages/ListView/components/TableCells/Media.tsx","../../admin/src/content-manager/pages/ListView/components/TableCells/Relations.tsx","../../admin/src/content-manager/pages/ListView/components/TableCells/CellContent.tsx","../../admin/src/content-manager/pages/ListView/components/ViewSettingsMenu.tsx","../../admin/src/content-manager/pages/ListView/hooks/useAllowedAttributes.ts","../../admin/src/content-manager/pages/ListView/ListViewPage.tsx","../../admin/src/content-manager/pages/ListViewLayoutManager.tsx","../../admin/src/content-manager/pages/CollectionTypePages.tsx","../../admin/src/content-manager/sharedReducers/crud/reducer.ts","../../admin/src/content-manager/pages/ComponentSettingsView.tsx","../../admin/src/content-manager/pages/NoContentTypePage.tsx","../../admin/src/content-manager/pages/NoPermissionsPage.tsx","../../admin/src/content-manager/pages/App.tsx","../../admin/src/core/store/configure.ts","../../admin/src/core/utils/basename.ts","../../admin/src/core/utils/createHook.ts","../../admin/src/translations/languageNativeNames.ts","../../admin/src/StrapiApp.tsx","../../admin/src/render.ts","../../admin/src/hooks/useDocument.ts","../../ee/admin/src/hooks/useLicenseLimits.ts"],"sourcesContent":["const styles = `\n.strapi--root {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n bottom: 0;\n background: #fff;\n}\n\n.strapi--no-js {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n text-align: center;\n font-family: helvetica, arial, sans-serif;\n}\n`;\n\n/**\n * @internal\n *\n * @description this belongs to our default document that we render.\n */\nconst NoJavascript = () => {\n return (\n <noscript>\n <div className=\"strapi--root\">\n <div className=\"strapi--no-js\">\n <style type=\"text/css\">{styles}</style>\n <h1>JavaScript disabled</h1>\n <p>\n Please <a href=\"https://www.enable-javascript.com/\">enable JavaScript</a> in your\n browser and reload the page to proceed.\n </p>\n </div>\n </div>\n </noscript>\n );\n};\n\nexport { NoJavascript };\n","import { NoJavascript } from './NoJavascript';\n\n/**\n * TODO: add favicons.........\n */\n\nconst globalStyles = `\n html,\n body,\n #strapi {\n height: 100%;\n }\n body {\n margin: 0;\n -webkit-font-smoothing: antialiased;\n }\n`;\n\ninterface DefaultDocumentProps {\n entryPath?: string;\n}\n\n/**\n * @internal\n */\nconst DefaultDocument = ({ entryPath }: DefaultDocumentProps) => {\n return (\n <html lang=\"en\">\n <head>\n <meta charSet=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, viewport-fit=cover\" />\n <meta name=\"robots\" content=\"noindex\" />\n <meta name=\"referrer\" content=\"same-origin\" />\n\n <title>Strapi Admin</title>\n <style>{globalStyles}</style>\n </head>\n <body>\n <div id=\"strapi\" />\n <NoJavascript />\n {entryPath ? <script type=\"module\" src={entryPath} /> : null}\n </body>\n </html>\n );\n};\n\nexport { DefaultDocument };\n","import * as React from 'react';\n\nimport * as ContextSelector from 'use-context-selector';\n\nfunction createContext<ContextValueType extends object | null>(\n rootComponentName: string,\n defaultContext?: ContextValueType\n) {\n const Context = ContextSelector.createContext<ContextValueType | undefined>(defaultContext);\n\n const Provider = (props: ContextValueType & { children: React.ReactNode }) => {\n const { children, ...context } = props;\n // Only re-memoize when prop values change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const value = React.useMemo(() => context, Object.values(context)) as ContextValueType;\n return <Context.Provider value={value}>{children}</Context.Provider>;\n };\n\n const useContext = <Selected,>(\n consumerName: string,\n selector: (value: ContextValueType) => Selected\n ): Selected =>\n ContextSelector.useContextSelector(Context, (ctx) => {\n if (ctx) return selector(ctx);\n // it's a required context.\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n });\n\n Provider.displayName = rootComponentName + 'Provider';\n\n return [Provider, useContext] as const;\n}\n\nexport { createContext };\n","import { createSelector, Selector } from '@reduxjs/toolkit';\nimport { useDispatch, useStore, TypedUseSelectorHook, useSelector } from 'react-redux';\n\nimport type { RootState, Store } from './configure';\n\ntype AppDispatch = Store['dispatch'];\n\nconst useTypedDispatch: () => AppDispatch = useDispatch;\nconst useTypedStore = useStore as () => Store;\nconst useTypedSelector: TypedUseSelectorHook<RootState> = useSelector;\n\nconst createTypedSelector = <TResult>(selector: Selector<RootState, TResult>) =>\n createSelector((state: RootState) => state, selector);\n\nexport { useTypedDispatch, useTypedStore, useTypedSelector, createTypedSelector };\n","import { createSlice } from '@reduxjs/toolkit';\n\nimport { PermissionMap } from './types/permissions';\n\nimport type { PayloadAction } from '@reduxjs/toolkit';\n\ntype ThemeName = 'light' | 'dark' | 'system';\n\ninterface AppState {\n language: {\n locale: string;\n localeNames: Record<string, string>;\n };\n permissions: Partial<PermissionMap>;\n theme: {\n currentTheme: ThemeName;\n availableThemes: string[];\n };\n}\n\nconst THEME_LOCAL_STORAGE_KEY = 'STRAPI_THEME';\nconst LANGUAGE_LOCAL_STORAGE_KEY = 'strapi-admin-language';\n\nconst adminSlice = createSlice({\n name: 'admin',\n initialState: () => {\n return {\n language: {\n locale: 'en',\n localeNames: { en: 'English' },\n },\n permissions: {},\n theme: {\n availableThemes: [],\n currentTheme: localStorage.getItem(THEME_LOCAL_STORAGE_KEY) || 'system',\n },\n } as AppState;\n },\n reducers: {\n setAdminPermissions(state, action: PayloadAction<Partial<PermissionMap>>) {\n state.permissions = action.payload;\n },\n setAppTheme(state, action: PayloadAction<ThemeName>) {\n state.theme.currentTheme = action.payload;\n window.localStorage.setItem(THEME_LOCAL_STORAGE_KEY, action.payload);\n },\n setAvailableThemes(state, action: PayloadAction<AppState['theme']['availableThemes']>) {\n state.theme.availableThemes = action.payload;\n },\n setLocale(state, action: PayloadAction<string>) {\n state.language.locale = action.payload;\n\n window.localStorage.setItem(LANGUAGE_LOCAL_STORAGE_KEY, action.payload);\n document.documentElement.setAttribute('lang', action.payload);\n },\n },\n});\n\nconst reducer = adminSlice.reducer;\n\nconst { setAdminPermissions, setAppTheme, setAvailableThemes, setLocale } = adminSlice.actions;\n\nexport {\n reducer,\n setAdminPermissions,\n setAppTheme,\n setAvailableThemes,\n setLocale,\n THEME_LOCAL_STORAGE_KEY,\n LANGUAGE_LOCAL_STORAGE_KEY,\n};\nexport type { AppState, ThemeName };\n","import { SerializedError } from '@reduxjs/toolkit';\nimport { BaseQueryFn } from '@reduxjs/toolkit/query';\nimport { ApiError, getFetchClient } from '@strapi/helper-plugin';\nimport { isAxiosError, type AxiosRequestConfig } from 'axios';\n\n/* -------------------------------------------------------------------------------------------------\n * Axios data\n * -----------------------------------------------------------------------------------------------*/\nexport interface QueryArguments {\n url: string;\n method?: AxiosRequestConfig['method'];\n data?: AxiosRequestConfig['data'];\n config?: AxiosRequestConfig;\n}\n\nexport interface UnknownApiError {\n name: 'UnknownError';\n message: string;\n details?: unknown;\n status?: number;\n}\n\nexport type BaseQueryError = ApiError | UnknownApiError;\n\nconst axiosBaseQuery =\n (): BaseQueryFn<string | QueryArguments, unknown, BaseQueryError> =>\n async (query, { signal }) => {\n try {\n const { get, post, del, put } = getFetchClient();\n\n if (typeof query === 'string') {\n const result = await get(query, { signal });\n return { data: result.data };\n } else {\n const { url, method = 'GET', data, config } = query;\n\n if (method === 'POST') {\n const result = await post(url, data, { ...config, signal });\n return { data: result.data };\n }\n\n if (method === 'DELETE') {\n const result = await del(url, { ...config, signal });\n return { data: result.data };\n }\n\n if (method === 'PUT') {\n const result = await put(url, data, { ...config, signal });\n return { data: result.data };\n }\n\n /**\n * Default is GET.\n */\n const result = await get(url, { ...config, signal });\n return { data: result.data };\n }\n } catch (err) {\n /**\n * Handle error of type AxiosError\n *\n * This format mimics what we want from an AxiosError which is what the\n * rest of the app works with, except this format is \"serializable\" since\n * it goes into the redux store.\n *\n * NOTE – passing the whole response will highlight this \"serializability\" issue.\n */\n\n if (isAxiosError(err)) {\n if (\n typeof err.response?.data === 'object' &&\n err.response?.data !== null &&\n 'error' in err.response?.data\n ) {\n /**\n * This will most likely be ApiError\n */\n return { data: undefined, error: err.response?.data.error };\n } else {\n return {\n data: undefined,\n error: {\n name: 'UnknownError',\n message: 'There was an unknown error response from the API',\n details: err.response?.data,\n status: err.response?.status,\n } as UnknownApiError,\n };\n }\n }\n\n const error = err as Error;\n return {\n data: undefined,\n error: {\n name: error.name,\n message: error.message,\n stack: error.stack,\n } satisfies SerializedError,\n };\n }\n };\n\nconst isBaseQueryError = (error: BaseQueryError | SerializedError): error is BaseQueryError => {\n return error.name !== undefined;\n};\n\nexport { axiosBaseQuery, isBaseQueryError };\n","import { createApi } from '@reduxjs/toolkit/query/react';\n\nimport { TokenRegenerate } from '../../../shared/contracts/transfer';\nimport { axiosBaseQuery, type UnknownApiError } from '../utils/baseQuery';\n\nconst adminApi = createApi({\n reducerPath: 'adminApi',\n baseQuery: axiosBaseQuery(),\n tagTypes: [\n 'ApiToken',\n 'LicenseLimits',\n 'Me',\n 'ProjectSettings',\n 'ProvidersOptions',\n 'ReviewWorkflow',\n 'ReviewWorkflowStage',\n 'Role',\n 'RolePermissions',\n 'TransferToken',\n 'User',\n 'Webhook',\n ],\n endpoints: (builder) => ({\n /**\n * This is here because it's shared between the transfer-token routes & the api-tokens.\n */\n regenerateToken: builder.mutation<TokenRegenerate.Response['data'], string>({\n query: (url) => ({\n method: 'POST',\n url: `${url}/regenerate`,\n }),\n transformResponse: (response: TokenRegenerate.Response) => response.data,\n }),\n }),\n});\n\nconst { useRegenerateTokenMutation } = adminApi;\n\nexport { adminApi, type UnknownApiError, useRegenerateTokenMutation };\n","import { ProvidersOptions } from '../../../shared/contracts/admin';\nimport {\n type RenewToken,\n type Login,\n type ResetPassword,\n type RegisterAdmin,\n type Register,\n type RegistrationInfo,\n ForgotPassword,\n} from '../../../shared/contracts/authentication';\nimport { GetProviders, IsSSOLocked } from '../../../shared/contracts/providers';\nimport { type GetOwnPermissions, type GetMe, type UpdateMe } from '../../../shared/contracts/users';\n\nimport { adminApi } from './api';\n\nconst authService = adminApi.injectEndpoints({\n endpoints: (builder) => ({\n /**\n * ME\n */\n getMe: builder.query<GetMe.Response['data'], void>({\n query: () => ({\n method: 'GET',\n url: '/admin/users/me',\n }),\n transformResponse(res: GetMe.Response) {\n return res.data;\n },\n providesTags: (res) => (res ? ['Me', { type: 'User', id: res.id }] : ['Me']),\n }),\n getMyPermissions: builder.query<GetOwnPermissions.Response['data'], void>({\n query: () => ({\n method: 'GET',\n url: '/admin/users/me/permissions',\n }),\n transformResponse(res: GetOwnPermissions.Response) {\n return res.data;\n },\n }),\n updateMe: builder.mutation<UpdateMe.Response['data'], UpdateMe.Request['body']>({\n query: (body) => ({\n method: 'PUT',\n url: '/admin/users/me',\n data: body,\n }),\n transformResponse(res: UpdateMe.Response) {\n return res.data;\n },\n invalidatesTags: ['Me'],\n }),\n /**\n * Auth methods\n */\n login: builder.mutation<Login.Response['data'], Login.Request['body']>({\n query: (body) => ({\n method: 'POST',\n url: '/admin/login',\n data: body,\n }),\n transformResponse(res: Login.Response) {\n return res.data;\n },\n invalidatesTags: ['Me'],\n }),\n logout: builder.mutation<void, void>({\n query: () => ({\n method: 'POST',\n url: '/admin/logout',\n }),\n }),\n resetPassword: builder.mutation<ResetPassword.Response['data'], ResetPassword.Request['body']>({\n query: (body) => ({\n method: 'POST',\n url: '/admin/reset-password',\n data: body,\n }),\n transformResponse(res: ResetPassword.Response) {\n return res.data;\n },\n }),\n renewToken: builder.mutation<RenewToken.Response['data'], RenewToken.Request['body']>({\n query: (body) => ({\n method: 'POST',\n url: '/admin/renew-token',\n data: body,\n }),\n transformResponse(res: RenewToken.Response) {\n return res.data;\n },\n }),\n getRegistrationInfo: builder.query<\n RegistrationInfo.Response['data'],\n RegistrationInfo.Request['query']['registrationToken']\n >({\n query: (registrationToken) => ({\n url: '/admin/registration-info',\n method: 'GET',\n config: {\n params: {\n registrationToken,\n },\n },\n }),\n transformResponse(res: RegistrationInfo.Response) {\n return res.data;\n },\n }),\n registerAdmin: builder.mutation<RegisterAdmin.Response['data'], RegisterAdmin.Request['body']>({\n query: (body) => ({\n method: 'POST',\n url: '/admin/register-admin',\n data: body,\n }),\n transformResponse(res: RegisterAdmin.Response) {\n return res.data;\n },\n }),\n registerUser: builder.mutation<Register.Response['data'], Register.Request['body']>({\n query: (body) => ({\n method: 'POST',\n url: '/admin/register',\n data: body,\n }),\n transformResponse(res: Register.Response) {\n return res.data;\n },\n }),\n forgotPassword: builder.mutation<ForgotPassword.Response, ForgotPassword.Request['body']>({\n query: (body) => ({\n url: '/admin/forgot-password',\n method: 'POST',\n data: body,\n }),\n }),\n isSSOLocked: builder.query<IsSSOLocked.Response['data'], void>({\n query: () => ({\n url: '/admin/providers/isSSOLocked',\n method: 'GET',\n }),\n transformResponse(res: IsSSOLocked.Response) {\n return res.data;\n },\n }),\n getProviders: builder.query<GetProviders.Response, void>({\n query: () => ({\n url: '/admin/providers',\n method: 'GET',\n }),\n }),\n getProviderOptions: builder.query<ProvidersOptions.Response['data'], void>({\n query: () => ({\n url: '/admin/providers/options',\n method: 'GET',\n }),\n transformResponse(res: ProvidersOptions.Response) {\n return res.data;\n },\n providesTags: ['ProvidersOptions'],\n }),\n updateProviderOptions: builder.mutation<\n ProvidersOptions.Response['data'],\n ProvidersOptions.Request['body']\n >({\n query: (body) => ({\n url: '/admin/providers/options',\n method: 'PUT',\n data: body,\n }),\n transformResponse(res: ProvidersOptions.Response) {\n return res.data;\n },\n invalidatesTags: ['ProvidersOptions'],\n }),\n }),\n overrideExisting: false,\n});\n\nconst {\n useGetMeQuery,\n useLoginMutation,\n useRenewTokenMutation,\n useLogoutMutation,\n useUpdateMeMutation,\n useResetPasswordMutation,\n useRegisterAdminMutation,\n useRegisterUserMutation,\n useGetRegistrationInfoQuery,\n useForgotPasswordMutation,\n useGetMyPermissionsQuery,\n useIsSSOLockedQuery,\n useGetProvidersQuery,\n useGetProviderOptionsQuery,\n useUpdateProviderOptionsMutation,\n} = authService;\n\nexport {\n useGetMeQuery,\n useLoginMutation,\n useRenewTokenMutation,\n useLogoutMutation,\n useUpdateMeMutation,\n useResetPasswordMutation,\n useRegisterAdminMutation,\n useRegisterUserMutation,\n useGetRegistrationInfoQuery,\n useForgotPasswordMutation,\n useGetMyPermissionsQuery,\n useIsSSOLockedQuery,\n useGetProvidersQuery,\n useGetProviderOptionsQuery,\n useUpdateProviderOptionsMutation,\n};\n","import * as React from 'react';\n\nimport { auth } from '@strapi/helper-plugin';\nimport { useHistory } from 'react-router-dom';\n\nimport { Login } from '../../../shared/contracts/authentication';\nimport { createContext } from '../components/Context';\nimport { useTypedDispatch } from '../core/store/hooks';\nimport { setLocale } from '../reducer';\nimport {\n useGetMeQuery,\n useLoginMutation,\n useLogoutMutation,\n useRenewTokenMutation,\n} from '../services/auth';\n\nimport type { SanitizedAdminUser } from '../../../shared/contracts/shared';\n\ninterface AuthContextValue {\n login: (\n body: Login.Request['body'] & { rememberMe: boolean }\n ) => Promise<Awaited<ReturnType<ReturnType<typeof useLoginMutation>[0]>>>;\n logout: () => Promise<void>;\n setToken: (token: string | null) => void;\n token: string | null;\n user?: SanitizedAdminUser;\n}\n\nconst [Provider, useAuth] = createContext<AuthContextValue>('Auth');\n\ninterface AuthProviderProps {\n children: React.ReactNode;\n}\n\nconst STORAGE_KEYS = {\n TOKEN: 'jwtToken',\n USER: 'userInfo',\n};\n\nconst AuthProvider = ({ children }: AuthProviderProps) => {\n const dispatch = useTypedDispatch();\n const [token, setToken] = React.useState<string | null>(() => {\n const token =\n localStorage.getItem(STORAGE_KEYS.TOKEN) ?? sessionStorage.getItem(STORAGE_KEYS.TOKEN);\n\n if (typeof token === 'string') {\n return JSON.parse(token);\n }\n\n return null;\n });\n\n const { data: user } = useGetMeQuery(undefined, {\n /**\n * If there's no token, we don't try to fetch\n * the user data because it will fail.\n */\n skip: !token,\n });\n const { push } = useHistory();\n\n const [loginMutation] = useLoginMutation();\n const [renewTokenMutation] = useRenewTokenMutation();\n const [logoutMutation] = useLogoutMutation();\n\n const clearStorage = React.useCallback(() => {\n localStorage.removeItem(STORAGE_KEYS.TOKEN);\n localStorage.removeItem(STORAGE_KEYS.USER);\n sessionStorage.removeItem(STORAGE_KEYS.TOKEN);\n sessionStorage.removeItem(STORAGE_KEYS.USER);\n setToken(null);\n }, []);\n\n /**\n * Fetch data from storages on mount and store it in our state.\n * It's not normally stored in session storage unless the user\n * does click \"remember me\" when they login. We also need to renew the token.\n */\n React.useEffect(() => {\n const token =\n localStorage.getItem(STORAGE_KEYS.TOKEN) ?? sessionStorage.getItem(STORAGE_KEYS.TOKEN);\n\n if (token) {\n renewTokenMutation({ token: JSON.parse(token) }).then((res) => {\n if ('data' in res) {\n setToken(res.data.token);\n } else {\n clearStorage();\n push('/auth/login');\n }\n });\n }\n }, [renewTokenMutation, clearStorage, push]);\n\n /**\n * Backwards compat – store the user info in the session storage\n *\n * TODO: V5 remove this and only explicitly set it when required.\n */\n React.useEffect(() => {\n auth.setUserInfo(user, true);\n if (user) {\n if (user.preferedLanguage) {\n dispatch(setLocale(user.preferedLanguage));\n }\n }\n }, [dispatch, user]);\n\n /**\n * Backwards compat – store the token in the session storage\n *\n * TODO: V5 remove this and only explicitly set it when required.\n */\n React.useEffect(() => {\n auth.setToken(token, false);\n }, [token]);\n\n React.useEffect(() => {\n /**\n * This will log a user out of all tabs if they log out in one tab.\n */\n const handleUserStorageChange = (event: StorageEvent) => {\n if (event.key === STORAGE_KEYS.USER && event.newValue === null) {\n clearStorage();\n push('/auth/login');\n }\n };\n\n window.addEventListener('storage', handleUserStorageChange);\n\n return () => {\n window.removeEventListener('storage', handleUserStorageChange);\n };\n });\n\n const login = React.useCallback<AuthContextValue['login']>(\n async ({ rememberMe, ...body }) => {\n const res = await loginMutation(body);\n\n /**\n * There will always be a `data` key in the response\n * because if something fails, it will throw an error.\n */\n if ('data' in res) {\n const { token } = res.data;\n\n auth.setToken(token, rememberMe);\n setToken(token);\n }\n\n return res;\n },\n [loginMutation]\n );\n\n const logout = React.useCallback(async () => {\n await logoutMutation();\n clearStorage();\n push('/auth/login');\n }, [clearStorage, logoutMutation, push]);\n\n return (\n <Provider token={token} user={user} login={login} logout={logout} setToken={setToken}>\n {children}\n </Provider>\n );\n};\n\nexport { AuthProvider, useAuth };\n","import * as React from 'react';\n\nimport { Redirect, Route, RouteProps } from 'react-router-dom';\n\nimport { useAuth } from '../features/Auth';\n\ninterface PrivateRouteProps extends Omit<RouteProps, 'render' | 'component'> {\n children: React.ReactNode;\n}\n\nconst PrivateRoute = ({ children, ...rest }: PrivateRouteProps) => {\n const token = useAuth('PrivateRoute', (state) => state.token);\n\n return (\n <Route\n {...rest}\n render={({ location: { pathname, search } }) =>\n token !== null ? (\n children\n ) : (\n <Redirect\n to={{\n pathname: '/auth/login',\n search:\n pathname !== '/'\n ? `?redirectTo=${encodeURIComponent(`${pathname}${search}`)}`\n : undefined,\n }}\n />\n )\n }\n />\n );\n};\n\nexport { PrivateRoute };\n","import { StrapiAppSettingLink } from '@strapi/helper-plugin';\n\nimport { PermissionMap } from './types/permissions';\n\nexport const ADMIN_PERMISSIONS_CE = {\n contentManager: {\n main: [],\n collectionTypesConfigurations: [\n {\n action: 'plugin::content-manager.collection-types.configure-view',\n subject: null,\n },\n ],\n componentsConfigurations: [\n {\n action: 'plugin::content-manager.components.configure-layout',\n subject: null,\n },\n ],\n singleTypesConfigurations: [\n {\n action: 'plugin::content-manager.single-types.configure-view',\n subject: null,\n },\n ],\n },\n marketplace: {\n main: [{ action: 'admin::marketplace.read', subject: null }],\n read: [{ action: 'admin::marketplace.read', subject: null }],\n },\n settings: {\n roles: {\n main: [\n { action: 'admin::roles.create', subject: null },\n { action: 'admin::roles.update', subject: null },\n { action: 'admin::roles.read', subject: null },\n { action: 'admin::roles.delete', subject: null },\n ],\n create: [{ action: 'admin::roles.create', subject: null }],\n delete: [{ action: 'admin::roles.delete', subject: null }],\n read: [{ action: 'admin::roles.read', subject: null }],\n update: [{ action: 'admin::roles.update', subject: null }],\n },\n users: {\n main: [\n { action: 'admin::users.create', subject: null },\n { action: 'admin::users.read', subject: null },\n { action: 'admin::users.update', subject: null },\n { action: 'admin::users.delete', subject: null },\n ],\n create: [{ action: 'admin::users.create', subject: null }],\n delete: [{ action: 'admin::users.delete', subject: null }],\n read: [{ action: 'admin::users.read', subject: null }],\n update: [{ action: 'admin::users.update', subject: null }],\n },\n webhooks: {\n main: [\n { action: 'admin::webhooks.create', subject: null },\n { action: 'admin::webhooks.read', subject: null },\n { action: 'admin::webhooks.update', subject: null },\n { action: 'admin::webhooks.delete', subject: null },\n ],\n create: [{ action: 'admin::webhooks.create', subject: null }],\n delete: [{ action: 'admin::webhooks.delete', subject: null }],\n read: [\n { action: 'admin::webhooks.read', subject: null },\n // NOTE: We need to check with the API\n { action: 'admin::webhooks.update', subject: null },\n { action: 'admin::webhooks.delete', subject: null },\n ],\n update: [{ action: 'admin::webhooks.update', subject: null }],\n },\n 'api-tokens': {\n main: [{ action: 'admin::api-tokens.access', subject: null }],\n create: [{ action: 'admin::api-tokens.create', subject: null }],\n delete: [{ action: 'admin::api-tokens.delete', subject: null }],\n read: [{ action: 'admin::api-tokens.read', subject: null }],\n update: [{ action: 'admin::api-tokens.update', subject: null }],\n regenerate: [{ action: 'admin::api-tokens.regenerate', subject: null }],\n },\n 'transfer-tokens': {\n main: [{ action: 'admin::transfer.tokens.access', subject: null }],\n create: [{ action: 'admin::transfer.tokens.create', subject: null }],\n delete: [{ action: 'admin::transfer.tokens.delete', subject: null }],\n read: [{ action: 'admin::transfer.tokens.read', subject: null }],\n update: [{ action: 'admin::transfer.tokens.update', subject: null }],\n regenerate: [{ action: 'admin::transfer.tokens.regenerate', subject: null }],\n },\n 'project-settings': {\n read: [{ action: 'admin::project-settings.read', subject: null }],\n update: [{ action: 'admin::project-settings.update', subject: null }],\n },\n },\n} satisfies Partial<PermissionMap>;\n\nexport const HOOKS = {\n /**\n * Hook that allows to mutate the displayed headers of the list view table\n * @constant\n * @type {string}\n */\n INJECT_COLUMN_IN_TABLE: 'Admin/CM/pages/ListView/inject-column-in-table',\n\n /**\n * Hook that allows to mutate the CM's collection types links pre-set filters\n * @constant\n * @type {string}\n */\n MUTATE_COLLECTION_TYPES_LINKS: 'Admin/CM/pages/App/mutate-collection-types-links',\n\n /**\n * Hook that allows to mutate the CM's edit view layout\n * @constant\n * @type {string}\n */\n MUTATE_EDIT_VIEW_LAYOUT: 'Admin/CM/pages/EditView/mutate-edit-view-layout',\n\n /**\n * Hook that allows to mutate the CM's single types links pre-set filters\n * @constant\n * @type {string}\n */\n MUTATE_SINGLE_TYPES_LINKS: 'Admin/CM/pages/App/mutate-single-types-links',\n};\n\nexport interface SettingsMenuLink\n extends Omit<StrapiAppSettingLink, 'Component' | 'permissions' | 'lockIcon'> {\n lockIcon?: boolean;\n}\n\nexport type SettingsMenu = {\n admin: SettingsMenuLink[];\n global: SettingsMenuLink[];\n};\n\nexport const SETTINGS_LINKS_CE = (): SettingsMenu => ({\n global: [\n {\n intlLabel: { id: 'Settings.application.title', defaultMessage: 'Overview' },\n to: '/settings/application-infos',\n id: '000-application-infos',\n },\n {\n intlLabel: { id: 'Settings.webhooks.title', defaultMessage: 'Webhooks' },\n to: '/settings/webhooks',\n id: 'webhooks',\n },\n {\n intlLabel: { id: 'Settings.apiTokens.title', defaultMessage: 'API Tokens' },\n to: '/settings/api-tokens?sort=name:ASC',\n id: 'api-tokens',\n },\n {\n intlLabel: { id: 'Settings.transferTokens.title', defaultMessage: 'Transfer Tokens' },\n to: '/settings/transfer-tokens?sort=name:ASC',\n id: 'transfer-tokens',\n },\n // If the Enterprise feature is not enabled and if the config doesn't disable it, we promote the Enterprise feature by displaying them in the settings menu.\n // Disable this by adding \"promoteEE: false\" to your `./config/admin.js` file\n ...(!window.strapi.features.isEnabled(window.strapi.features.SSO) &&\n window.strapi?.flags?.promoteEE\n ? [\n {\n intlLabel: { id: 'Settings.sso.title', defaultMessage: 'Single Sign-On' },\n to: '/settings/purchase-single-sign-on',\n id: 'sso',\n lockIcon: true,\n },\n ]\n : []),\n\n ...(!window.strapi.features.isEnabled(window.strapi.features.REVIEW_WORKFLOWS) &&\n window.strapi?.flags?.promoteEE\n ? [\n {\n intlLabel: {\n id: 'Settings.review-workflows.page.title',\n defaultMessage: 'Review Workflows',\n },\n to: '/settings/purchase-review-workflows',\n id: 'review-workflows',\n lockIcon: true,\n },\n ]\n : []),\n ],\n\n admin: [\n {\n intlLabel: { id: 'global.roles', defaultMessage: 'Roles' },\n to: '/settings/roles',\n id: 'roles',\n },\n {\n intlLabel: { id: 'global.users', defaultMessage: 'Users' },\n // Init the search params directly\n to: '/settings/users?pageSize=10&page=1&sort=firstname',\n id: 'users',\n },\n ...(!window.strapi.features.isEnabled(window.strapi.features.AUDIT_LOGS) &&\n window.strapi?.flags?.promoteEE\n ? [\n {\n intlLabel: { id: 'global.auditLogs', defaultMessage: 'Audit Logs' },\n to: '/settings/purchase-audit-logs',\n id: 'auditLogs',\n lockIcon: true,\n },\n ]\n : []),\n ],\n});\n","import { prefixFileUrlWithBackendUrl } from '@strapi/helper-plugin';\n\nimport {\n type TelemetryProperties,\n type Init,\n type Information,\n type GetProjectSettings,\n type UpdateProjectSettings,\n type Plugins,\n type GetLicenseLimitInformation,\n} from '../../../shared/contracts/admin';\n\nimport { adminApi } from './api';\n\ninterface ConfigurationLogo {\n custom?: {\n name?: string;\n url?: string;\n };\n default: string;\n}\n\nconst admin = adminApi.injectEndpoints({\n endpoints: (builder) => ({\n init: builder.query<Init.Response['data'], void>({\n query: () => ({\n url: '/admin/init',\n method: 'GET',\n }),\n transformResponse(res: Init.Response) {\n return res.data;\n },\n }),\n information: builder.query<Information.Response['data'], void>({\n query: () => ({\n url: '/admin/information',\n method: 'GET',\n }),\n transformResponse(res: Information.Response) {\n return res.data;\n },\n }),\n telemetryProperties: builder.query<TelemetryProperties.Response['data'], void>({\n query: () => ({\n url: '/admin/telemetry-properties',\n method: 'GET',\n config: {\n validateStatus: (status) => status < 500,\n },\n }),\n transformResponse(res: TelemetryProperties.Response) {\n return res.data;\n },\n }),\n projectSettings: builder.query<\n { authLogo?: ConfigurationLogo['custom']; menuLogo?: ConfigurationLogo['custom'] },\n void\n >({\n query: () => ({\n url: '/admin/project-settings',\n method: 'GET',\n }),\n providesTags: ['ProjectSettings'],\n transformResponse(data: GetProjectSettings.Response) {\n return {\n authLogo: data.authLogo\n ? {\n name: data.authLogo.name,\n url: prefixFileUrlWithBackendUrl(data.authLogo.url),\n }\n : undefined,\n menuLogo: data.menuLogo\n ? {\n name: data.menuLogo.name,\n url: prefixFileUrlWithBackendUrl(data.menuLogo.url),\n }\n : undefined,\n };\n },\n }),\n updateProjectSettings: builder.mutation<UpdateProjectSettings.Response, FormData>({\n query: (data) => ({\n url: '/admin/project-settings',\n method: 'POST',\n data,\n config: {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n },\n }),\n invalidatesTags: ['ProjectSettings'],\n }),\n getPlugins: builder.query<Plugins.Response, void>({\n query: () => ({\n url: '/admin/plugins',\n method: 'GET',\n }),\n }),\n getLicenseLimits: builder.query<GetLicenseLimitInformation.Response, void>({\n query: () => ({\n url: '/admin/license-limit-information',\n method: 'GET',\n }),\n providesTags: ['LicenseLimits'],\n }),\n }),\n overrideExisting: false,\n});\n\nconst {\n useInitQuery,\n useTelemetryPropertiesQuery,\n useInformationQuery,\n useProjectSettingsQuery,\n useUpdateProjectSettingsMutation,\n useGetPluginsQuery,\n useGetLicenseLimitsQuery,\n} = admin;\n\nexport {\n useInitQuery,\n useTelemetryPropertiesQuery,\n useInformationQuery,\n useProjectSettingsQuery,\n useUpdateProjectSettingsMutation,\n useGetPluginsQuery,\n useGetLicenseLimitsQuery,\n};\n\nexport type { ConfigurationLogo };\n","import * as React from 'react';\n\nimport { createContext } from '@radix-ui/react-context';\nimport { useAPIErrorHandler, useNotification, useTracking } from '@strapi/helper-plugin';\nimport { useIntl } from 'react-intl';\n\nimport { UpdateProjectSettings } from '../../../shared/contracts/admin';\nimport {\n ConfigurationLogo,\n useProjectSettingsQuery,\n useUpdateProjectSettingsMutation,\n} from '../services/admin';\n\nimport { useAuth } from './Auth';\n\n/* -------------------------------------------------------------------------------------------------\n * Configuration Context\n * -----------------------------------------------------------------------------------------------*/\n\ninterface UpdateProjectSettingsBody {\n authLogo:\n | ((UpdateProjectSettings.Request['body']['authLogo'] | ConfigurationLogo['custom']) & {\n rawFile?: File;\n })\n | null;\n menuLogo:\n | ((UpdateProjectSettings.Request['body']['menuLogo'] | ConfigurationLogo['custom']) & {\n rawFile?: File;\n })\n | null;\n}\n\ninterface ConfigurationContextValue {\n logos: {\n auth: ConfigurationLogo;\n menu: ConfigurationLogo;\n };\n showTutorials: boolean;\n showReleaseNotification: boolean;\n updateProjectSettings: (body: UpdateProjectSettingsBody) => Promise<void>;\n}\n\n/**\n * TODO: it would be nice if this context actually lived in redux.\n * But we'd probably need to reconcile the fact we get the data three\n * different ways and what that actually looks like.\n */\n\nconst [ConfigurationContextProvider, useConfiguration] =\n createContext<ConfigurationContextValue>('ConfigurationContext');\n\n/* -------------------------------------------------------------------------------------------------\n * ConfigurationProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ConfigurationProviderProps extends Required<Logos> {\n children: React.ReactNode;\n showReleaseNotification?: boolean;\n showTutorials?: boolean;\n}\n\ninterface Logos {\n menuLogo: ConfigurationContextValue['logos']['menu'];\n authLogo: ConfigurationContextValue['logos']['auth'];\n}\n\nconst ConfigurationProvider = ({\n children,\n authLogo: defaultAuthLogo,\n menuLogo: defaultMenuLogo,\n showReleaseNotification = false,\n showTutorials = false,\n}: ConfigurationProviderProps) => {\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const toggleNotification = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const token = useAuth('ConfigurationProvider', (state) => state.token);\n\n const { data, isSuccess } = useProjectSettingsQuery(undefined, {\n skip: !token,\n });\n\n const [updateProjectSettingsMutation] = useUpdateProjectSettingsMutation();\n\n const updateProjectSettings = React.useCallback(\n async (body: UpdateProjectSettingsBody) => {\n const formData = new FormData();\n\n /**\n * We either only send files or we send null values.\n * Null removes the logo. If you don't want to effect\n * an existing logo, don't send anything.\n */\n Object.entries(body).forEach(([key, value]) => {\n if (value?.rawFile) {\n formData.append(key, value.rawFile);\n } else if (value === null) {\n formData.append(key, JSON.stringify(value));\n }\n });\n\n const res = await updateProjectSettingsMutation(formData);\n\n if ('data' in res) {\n const updatedMenuLogo = !!res.data.menuLogo && !!body.menuLogo?.rawFile;\n const updatedAuthLogo = !!res.data.authLogo && !!body.authLogo?.rawFile;\n\n if (updatedMenuLogo) {\n trackUsage('didChangeLogo', {\n logo: 'menu',\n });\n }\n\n if (updatedAuthLogo) {\n trackUsage('didChangeLogo', {\n logo: 'auth',\n });\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'app', defaultMessage: 'Saved' }),\n });\n } else {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(res.error),\n });\n }\n },\n [formatAPIError, formatMessage, toggleNotification, trackUsage, updateProjectSettingsMutation]\n );\n\n return (\n <ConfigurationContextProvider\n showReleaseNotification={showReleaseNotification}\n showTutorials={showTutorials}\n logos={{\n menu: {\n custom: isSuccess ? data?.menuLogo : defaultMenuLogo.custom,\n default: defaultMenuLogo.default,\n },\n auth: {\n custom: isSuccess ? data?.authLogo : defaultAuthLogo.custom,\n default: defaultAuthLogo.default,\n },\n }}\n updateProjectSettings={updateProjectSettings}\n >\n {children}\n </ConfigurationContextProvider>\n );\n};\n\nexport {\n ConfigurationContextProvider as _internalConfigurationContextProvider,\n ConfigurationProvider,\n useConfiguration,\n};\nexport type {\n ConfigurationProviderProps,\n ConfigurationContextValue,\n ConfigurationLogo,\n UpdateProjectSettingsBody,\n};\n","import * as React from 'react';\n\nimport { useCallbackRef } from '@strapi/helper-plugin';\n\nfunction isEnterprise() {\n return window.strapi.isEE;\n}\n\nexport interface UseEnterpriseOptions<TCEData, TEEData, TDefaultValue, TCombinedValue> {\n defaultValue?: TDefaultValue;\n combine?: (ceData: TCEData, eeData: TEEData) => TCombinedValue;\n enabled?: boolean;\n}\n\ntype UseEnterpriseReturn<TCEData, TEEData, TDefaultValue, TCombinedValue> =\n TDefaultValue extends null\n ? TCEData | TEEData | TCombinedValue | null\n : TCEData | TEEData | TCombinedValue | TDefaultValue;\n\nexport const useEnterprise = <\n TCEData,\n TEEData = TCEData,\n TCombinedValue = TEEData,\n TDefaultValue = TCEData\n>(\n ceData: TCEData,\n eeCallback: () => Promise<TEEData>,\n opts: UseEnterpriseOptions<TCEData, TEEData, TDefaultValue, TCombinedValue> = {}\n): UseEnterpriseReturn<TCEData, TEEData, TDefaultValue, TCombinedValue> => {\n const { defaultValue = null, combine = (_ceData, eeData) => eeData, enabled = true } = opts;\n const eeCallbackRef = useCallbackRef(eeCallback);\n const combineCallbackRef = useCallbackRef(combine);\n\n // We have to use a nested object here, because functions (e.g. Components)\n // can not be stored as value directly\n const [{ data }, setData] = React.useState<{\n data: TCEData | TEEData | TDefaultValue | TCombinedValue | null;\n }>({\n data: isEnterprise() && enabled ? defaultValue : ceData,\n });\n\n React.useEffect(() => {\n async function importEE() {\n const eeData = await eeCallbackRef();\n const combinedValue = combineCallbackRef(ceData, eeData);\n\n setData({ data: combinedValue ? combinedValue : eeData });\n }\n\n if (isEnterprise() && enabled) {\n importEE();\n }\n }, [ceData, eeCallbackRef, combineCallbackRef, enabled]);\n\n // @ts-expect-error – the hook type assertion works in practice. But seems to have issues here...\n return data;\n};\n","import styled from 'styled-components';\n\nimport { useConfiguration } from '../features/Configuration';\n\nconst Img = styled.img`\n height: ${72 / 16}rem;\n`;\n\nconst Logo = () => {\n const {\n logos: { auth },\n } = useConfiguration('UnauthenticatedLogo');\n\n return <Img src={auth?.custom?.url || auth.default} aria-hidden alt=\"\" />;\n};\n\nexport { Logo };\n","import * as React from 'react';\n\nimport { Box, Flex, SingleSelect, SingleSelectOption } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { useTypedDispatch, useTypedSelector } from '../core/store/hooks';\nimport { setLocale } from '../reducer';\n\nconst Wrapper = styled(Box)`\n margin: 0 auto;\n width: 552px;\n`;\n\nexport const Column = styled(Flex)`\n flex-direction: column;\n`;\n\nconst LocaleToggle = () => {\n const localeNames = useTypedSelector((state) => state.admin_app.language.localeNames);\n const dispatch = useTypedDispatch();\n const { formatMessage, locale } = useIntl();\n\n return (\n <SingleSelect\n aria-label={formatMessage({\n id: 'global.localeToggle.label',\n defaultMessage: 'Select interface language',\n })}\n value={locale}\n onChange={(language) => {\n dispatch(setLocale(language as string));\n }}\n >\n {Object.entries(localeNames).map(([language, name]) => (\n <SingleSelectOption key={language} value={language}>\n {name}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n );\n};\n\ninterface LayoutContentProps {\n children: React.ReactNode;\n}\n\nexport const LayoutContent = ({ children }: LayoutContentProps) => (\n <Wrapper\n shadow=\"tableShadow\"\n hasRadius\n paddingTop={9}\n paddingBottom={9}\n paddingLeft={10}\n paddingRight={10}\n background=\"neutral0\"\n >\n {children}\n </Wrapper>\n);\n\ninterface UnauthenticatedLayoutProps {\n children: React.ReactNode;\n}\n\nexport const UnauthenticatedLayout = ({ children }: UnauthenticatedLayoutProps) => {\n return (\n <div>\n <Flex as=\"header\" justifyContent=\"flex-end\">\n <Box paddingTop={6} paddingRight={8}>\n <LocaleToggle />\n </Box>\n </Flex>\n <Box paddingTop={2} paddingBottom={11}>\n {children}\n </Box>\n </div>\n );\n};\n","import { FieldAction } from '@strapi/design-system';\nimport styled from 'styled-components';\n\nconst FieldActionWrapper = styled(FieldAction)`\n svg {\n height: 1rem;\n width: 1rem;\n path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n }\n`;\n\nexport { FieldActionWrapper };\n","import * as React from 'react';\n\nimport { Box, Button, Checkbox, Flex, Main, TextInput, Typography } from '@strapi/design-system';\nimport { Link } from '@strapi/design-system/v2';\nimport { Form, translatedErrors, useQuery } from '@strapi/helper-plugin';\nimport { Eye, EyeStriked } from '@strapi/icons';\nimport { Formik } from 'formik';\nimport camelCase from 'lodash/camelCase';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useHistory } from 'react-router-dom';\nimport styled from 'styled-components';\nimport * as yup from 'yup';\n\nimport { Logo } from '../../../components/UnauthenticatedLogo';\nimport { useAuth } from '../../../features/Auth';\nimport {\n UnauthenticatedLayout,\n Column,\n LayoutContent,\n} from '../../../layouts/UnauthenticatedLayout';\n\nimport { FieldActionWrapper } from './FieldActionWrapper';\n\nimport type { Login } from '../../../../../shared/contracts/authentication';\n\ninterface LoginProps {\n children?: React.ReactNode;\n}\n\nconst LOGIN_SCHEMA = yup.object().shape({\n email: yup.string().email(translatedErrors.email).required(translatedErrors.required),\n password: yup.string().required(translatedErrors.required),\n rememberMe: yup.bool().nullable(),\n});\n\nconst Login = ({ children }: LoginProps) => {\n const [apiError, setApiError] = React.useState<string>();\n const [passwordShown, setPasswordShown] = React.useState(false);\n const { formatMessage } = useIntl();\n const query = useQuery();\n const { push } = useHistory();\n\n const login = useAuth('Login', (state) => state.login);\n\n const handleLogin = async (body: Parameters<typeof login>[0]) => {\n setApiError(undefined);\n\n const res = await login(body);\n\n if ('error' in res) {\n const message = res.error.message ?? 'Something went wrong';\n\n if (camelCase(message).toLowerCase() === 'usernotactive') {\n push('/auth/oops');\n return;\n }\n\n setApiError(message);\n } else {\n const redirectTo = query.get('redirectTo');\n const redirectUrl = redirectTo ? decodeURIComponent(redirectTo) : '/';\n\n push(redirectUrl);\n }\n };\n\n return (\n <UnauthenticatedLayout>\n <Main>\n <LayoutContent>\n <Column>\n <Logo />\n <Box paddingTop={6} paddingBottom={1}>\n <Typography variant=\"alpha\" as=\"h1\">\n {formatMessage({\n id: 'Auth.form.welcome.title',\n defaultMessage: 'Welcome!',\n })}\n </Typography>\n </Box>\n <Box paddingBottom={7}>\n <Typography variant=\"epsilon\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Auth.form.welcome.subtitle',\n defaultMessage: 'Log in to your Strapi account',\n })}\n </Typography>\n </Box>\n {apiError ? (\n <Typography id=\"global-form-error\" role=\"alert\" tabIndex={-1} textColor=\"danger600\">\n {apiError}\n </Typography>\n ) : null}\n </Column>\n <Formik\n enableReinitialize\n initialValues={{\n email: '',\n password: '',\n rememberMe: false,\n }}\n onSubmit={(values) => {\n handleLogin(values);\n }}\n validationSchema={LOGIN_SCHEMA}\n validateOnChange={false}\n >\n {({ values, errors, handleChange }) => (\n <Form>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <TextInput\n error={\n errors.email\n ? formatMessage({\n id: errors.email,\n defaultMessage: 'This value is required.',\n })\n : ''\n }\n value={values.email}\n onChange={handleChange}\n label={formatMessage({ id: 'Auth.form.email.label', defaultMessage: 'Email' })}\n placeholder={formatMessage({\n id: 'Auth.form.email.placeholder',\n defaultMessage: 'kai@doe.com',\n })}\n name=\"email\"\n required\n />\n <PasswordInput\n error={\n errors.password\n ? formatMessage({\n id: errors.password,\n defaultMessage: 'This value is required.',\n })\n : ''\n }\n onChange={handleChange}\n value={values.password}\n label={formatMessage({\n id: 'global.password',\n defaultMessage: 'Password',\n })}\n name=\"password\"\n type={passwordShown ? 'text' : 'password'}\n endAction={\n <FieldActionWrapper\n onClick={(e) => {\n e.stopPropagation();\n setPasswordShown((prev) => !prev);\n }}\n label={formatMessage(\n passwordShown\n ? {\n id: 'Auth.form.password.show-password',\n defaultMessage: 'Show password',\n }\n : {\n id: 'Auth.form.password.hide-password',\n defaultMessage: 'Hide password',\n }\n )}\n >\n {passwordShown ? <Eye /> : <EyeStriked />}\n </FieldActionWrapper>\n }\n required\n />\n <Checkbox\n onValueChange={(checked) => {\n handleChange({ target: { value: checked, name: 'rememberMe' } });\n }}\n value={values.rememberMe}\n aria-label=\"rememberMe\"\n name=\"rememberMe\"\n >\n {formatMessage({\n id: 'Auth.form.rememberMe.label',\n defaultMessage: 'Remember me',\n })}\n </Checkbox>\n <Button fullWidth type=\"submit\">\n {formatMessage({ id: 'Auth.form.button.login', defaultMessage: 'Login' })}\n </Button>\n </Flex>\n </Form>\n )}\n </Formik>\n {children}\n </LayoutContent>\n <Flex justifyContent=\"center\">\n <Box paddingTop={4}>\n {/* @ts-expect-error – error with inferring the props from the as component */}\n <Link as={NavLink} to=\"/auth/forgot-password\">\n {formatMessage({\n id: 'Auth.link.forgot-password',\n defaultMessage: 'Forgot your password?',\n })}\n </Link>\n </Box>\n </Flex>\n </Main>\n </UnauthenticatedLayout>\n );\n};\n\nconst PasswordInput = styled(TextInput)`\n ::-ms-reveal {\n display: none;\n }\n`;\n\nexport { Login };\nexport type { LoginProps };\n","import { Box, Button, Flex, Main, TextInput, Typography } from '@strapi/design-system';\nimport { Link } from '@strapi/design-system/v2';\nimport { Form, translatedErrors, useAPIErrorHandler } from '@strapi/helper-plugin';\nimport { Formik } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useHistory } from 'react-router-dom';\nimport * as yup from 'yup';\n\nimport { Logo } from '../../../components/UnauthenticatedLogo';\nimport {\n Column,\n LayoutContent,\n UnauthenticatedLayout,\n} from '../../../layouts/UnauthenticatedLayout';\nimport { useForgotPasswordMutation } from '../../../services/auth';\nimport { isBaseQueryError } from '../../../utils/baseQuery';\n\nimport type { ForgotPassword } from '../../../../../shared/contracts/authentication';\n\nconst ForgotPassword = () => {\n const { push } = useHistory();\n const { formatMessage } = useIntl();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const [forgotPassword, { error }] = useForgotPasswordMutation();\n\n return (\n <UnauthenticatedLayout>\n <Main>\n <LayoutContent>\n <Column>\n <Logo />\n <Box paddingTop={6} paddingBottom={7}>\n <Typography as=\"h1\" variant=\"alpha\">\n {formatMessage({\n id: 'Auth.form.button.password-recovery',\n defaultMessage: 'Password Recovery',\n })}\n </Typography>\n </Box>\n {error ? (\n <Typography id=\"global-form-error\" role=\"alert\" tabIndex={-1} textColor=\"danger600\">\n {isBaseQueryError(error)\n ? formatAPIError(error)\n : formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n })}\n </Typography>\n ) : null}\n </Column>\n <Formik\n enableReinitialize\n initialValues={{\n email: '',\n }}\n onSubmit={async (body) => {\n const res = await forgotPassword(body);\n\n if (!('error' in res)) {\n push('/auth/forgot-password-success');\n }\n }}\n validationSchema={yup.object().shape({\n email: yup.string().email(translatedErrors.email).required(translatedErrors.required),\n })}\n validateOnChange={false}\n >\n {({ values, errors, handleChange }) => (\n <Form>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <TextInput\n error={\n errors.email\n ? formatMessage({\n id: errors.email,\n defaultMessage: 'This email is invalid.',\n })\n : ''\n }\n value={values.email}\n onChange={handleChange}\n label={formatMessage({ id: 'Auth.form.email.label', defaultMessage: 'Email' })}\n placeholder={formatMessage({\n id: 'Auth.form.email.placeholder',\n defaultMessage: 'kai@doe.com',\n })}\n name=\"email\"\n required\n />\n <Button type=\"submit\" fullWidth>\n {formatMessage({\n id: 'Auth.form.button.forgot-password',\n defaultMessage: 'Send Email',\n })}\n </Button>\n </Flex>\n </Form>\n )}\n </Formik>\n </LayoutContent>\n <Flex justifyContent=\"center\">\n <Box paddingTop={4}>\n {/* @ts-expect-error – error with inferring the props from the as component */}\n <Link as={NavLink} to=\"/auth/login\">\n {formatMessage({ id: 'Auth.link.ready', defaultMessage: 'Ready to sign in?' })}\n </Link>\n </Box>\n </Flex>\n </Main>\n </UnauthenticatedLayout>\n );\n};\n\nexport { ForgotPassword };\n","import { Box, Flex, Main, Typography } from '@strapi/design-system';\nimport { Link } from '@strapi/design-system/v2';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\n\nimport { Logo } from '../../../components/UnauthenticatedLogo';\nimport {\n Column,\n LayoutContent,\n UnauthenticatedLayout,\n} from '../../../layouts/UnauthenticatedLayout';\n\nconst ForgotPasswordSuccess = () => {\n const { formatMessage } = useIntl();\n\n return (\n <UnauthenticatedLayout>\n <Main>\n <LayoutContent>\n <Column>\n <Logo />\n <Box paddingTop={6} paddingBottom={7}>\n <Typography as=\"h1\" variant=\"alpha\">\n {formatMessage({\n id: 'app.containers.AuthPage.ForgotPasswordSuccess.title',\n defaultMessage: 'Email sent',\n })}\n </Typography>\n </Box>\n <Typography>\n {formatMessage({\n id: 'app.containers.AuthPage.ForgotPasswordSuccess.text.email',\n defaultMessage: 'It can take a few minutes to receive your password recovery link.',\n })}\n </Typography>\n <Box paddingTop={4}>\n <Typography>\n {formatMessage({\n id: 'app.containers.AuthPage.ForgotPasswordSuccess.text.contact-admin',\n defaultMessage:\n 'If you do not receive this link, please contact your administrator.',\n })}\n </Typography>\n </Box>\n </Column>\n </LayoutContent>\n <Flex justifyContent=\"center\">\n <Box paddingTop={4}>\n {/* @ts-expect-error – error with inferring the props from the as component */}\n <Link as={NavLink} to=\"/auth/login\">\n {formatMessage({ id: 'Auth.link.signin', defaultMessage: 'Sign in' })}\n </Link>\n </Box>\n </Flex>\n </Main>\n </UnauthenticatedLayout>\n );\n};\n\nexport { ForgotPasswordSuccess };\n","import { Box, Flex, Main, Typography } from '@strapi/design-system';\nimport { Link } from '@strapi/design-system/v2';\nimport { useQuery } from '@strapi/helper-plugin';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\n\nimport { Logo } from '../../../components/UnauthenticatedLogo';\nimport {\n Column,\n LayoutContent,\n UnauthenticatedLayout,\n} from '../../../layouts/UnauthenticatedLayout';\n\nconst Oops = () => {\n const { formatMessage } = useIntl();\n const query = useQuery();\n\n const message =\n query.get('info') ||\n formatMessage({\n id: 'Auth.components.Oops.text',\n defaultMessage: 'Your account has been suspended.',\n });\n\n return (\n <UnauthenticatedLayout>\n <Main>\n <LayoutContent>\n <Column>\n <Logo />\n <Box paddingTop={6} paddingBottom={7}>\n <Typography as=\"h1\" variant=\"alpha\">\n {formatMessage({ id: 'Auth.components.Oops.title', defaultMessage: 'Oops...' })}\n </Typography>\n </Box>\n <Typography>{message}</Typography>\n <Box paddingTop={4}>\n <Typography>\n {formatMessage({\n id: 'Auth.components.Oops.text.admin',\n defaultMessage: 'If this is a mistake, please contact your administrator.',\n })}\n </Typography>\n </Box>\n </Column>\n </LayoutContent>\n <Flex justifyContent=\"center\">\n <Box paddingTop={4}>\n {/* @ts-expect-error – error with inferring the props from the as component */}\n <Link as={NavLink} to=\"/auth/login\">\n {formatMessage({ id: 'Auth.link.signin', defaultMessage: 'Sign in' })}\n </Link>\n </Box>\n </Flex>\n </Main>\n </UnauthenticatedLayout>\n );\n};\n\nexport { Oops };\n","import * as React from 'react';\n\nimport {\n Box,\n Flex,\n IconButton,\n Button,\n Typography,\n Textarea,\n Portal,\n Field,\n FieldLabel,\n FieldInput,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { useNotification, useAppInfo, usePersistentState } from '@strapi/helper-plugin';\nimport { Cross } from '@strapi/icons';\nimport { Formik, Form } from 'formik';\nimport { useIntl } from 'react-intl';\nimport styled, { useTheme } from 'styled-components';\nimport * as yup from 'yup';\n\nimport { useAuth } from '../features/Auth';\n\nconst FieldWrapper = styled(Field)`\n height: ${32 / 16}rem;\n width: ${32 / 16}rem;\n\n > label,\n ~ input {\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n }\n\n > label {\n color: inherit;\n cursor: pointer;\n padding: ${({ theme }) => theme.spaces[2]};\n text-align: center;\n vertical-align: middle;\n }\n\n &:hover,\n &:focus-within {\n background-color: ${({ theme }) => theme.colors.neutral0};\n }\n\n &:active,\n &.selected {\n color: ${({ theme }) => theme.colors.primary700};\n background-color: ${({ theme }) => theme.colors.neutral0};\n border-color: ${({ theme }) => theme.colors.primary700};\n }\n`;\n\nconst delays = {\n postResponse: 90 * 24 * 60 * 60 * 1000, // 90 days in ms\n postFirstDismissal: 7 * 24 * 60 * 60 * 1000, // 7 days in ms\n postSubsequentDismissal: 90 * 24 * 60 * 60 * 1000, // 90 days in ms\n display: 5 * 60 * 1000, // 5 minutes in ms\n};\n\nconst ratingArray = [...Array(11).keys()];\n\nconst checkIfShouldShowSurvey = (settings: NpsSurveySettings) => {\n const { enabled, lastResponseDate, firstDismissalDate, lastDismissalDate } = settings;\n\n // This function goes through all the cases where we'd want to not show the survey:\n // 1. If the survey is disabled by strapi, abort mission, don't bother checking the other settings.\n // 2. If the survey is disabled by user, abort mission, don't bother checking the other settings.\n // 3. If the user has already responded to the survey, check if enough time has passed since the last response.\n // 4. If the user has dismissed the survey twice or more before, check if enough time has passed since the last dismissal.\n // 5. If the user has only dismissed the survey once before, check if enough time has passed since the first dismissal.\n // If none of these cases check out, then we show the survey.\n // Note that submitting a response resets the dismissal counts.\n // Checks 4 and 5 should not be reversed, since the first dismissal will also exist if the user has dismissed the survey twice or more before.\n\n // For users who had created an account before the NPS feature was introduced,\n // we assume that they would have enabled the NPS feature if they had the chance.\n\n // Global strapi disable for NSP.\n if (window.strapi.flags.nps === false) {\n return false;\n }\n\n // User chose not to enable the NPS feature when signing up\n if (enabled === false) {\n return false;\n }\n\n // The user has already responded to the survey\n if (lastResponseDate) {\n const timeSinceLastResponse = Date.now() - new Date(lastResponseDate).getTime();\n\n if (timeSinceLastResponse >= delays.postResponse) {\n return true;\n }\n\n return false;\n }\n\n // The user has dismissed the survey twice or more before\n if (lastDismissalDate) {\n const timeSinceLastDismissal = Date.now() - new Date(lastDismissalDate).getTime();\n\n if (timeSinceLastDismissal >= delays.postSubsequentDismissal) {\n return true;\n }\n\n return false;\n }\n\n // The user has only dismissed the survey once before\n if (firstDismissalDate) {\n const timeSinceFirstDismissal = Date.now() - new Date(firstDismissalDate).getTime();\n\n if (timeSinceFirstDismissal >= delays.postFirstDismissal) {\n return true;\n }\n\n return false;\n }\n\n // The user has not interacted with the survey before\n return true;\n};\n\nconst NpsSurvey = () => {\n const theme = useTheme();\n const { formatMessage } = useIntl();\n const { npsSurveySettings, setNpsSurveySettings } = useNpsSurveySettings();\n const [isFeedbackResponse, setIsFeedbackResponse] = React.useState(false);\n const toggleNotification = useNotification();\n const { currentEnvironment, strapiVersion } = useAppInfo();\n\n interface NpsSurveyMutationBody {\n email: string;\n rating: number | null;\n comment: string;\n environment?: string;\n version?: string;\n license: 'Enterprise' | 'Community';\n }\n\n // Only check on first render if the survey should be shown\n const [surveyIsShown, setSurveyIsShown] = React.useState(\n checkIfShouldShowSurvey(npsSurveySettings)\n );\n\n // Set a cooldown to show the survey when session begins\n const [displaySurvey, setDisplaySurvey] = React.useState(false);\n\n React.useEffect(() => {\n const displayTime = setTimeout(() => {\n setDisplaySurvey(true);\n }, delays.display);\n\n return () => {\n clearTimeout(displayTime);\n };\n }, []);\n\n const user = useAuth('NpsSurvey', (state) => state.user);\n\n if (!displaySurvey) {\n return null;\n }\n\n if (!surveyIsShown) {\n return null;\n }\n\n const handleSubmitResponse = async ({\n npsSurveyRating,\n npsSurveyFeedback,\n }: {\n npsSurveyRating: NpsSurveyMutationBody['rating'];\n npsSurveyFeedback: NpsSurveyMutationBody['comment'];\n }) => {\n try {\n const body = {\n email: typeof user === 'object' && user.email ? user.email : '',\n rating: npsSurveyRating,\n comment: npsSurveyFeedback,\n environment: currentEnvironment,\n version: strapiVersion ?? undefined,\n license: window.strapi.projectType,\n };\n const res = await fetch('https://analytics.strapi.io/submit-nps', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(body),\n });\n\n if (!res.ok) {\n throw new Error('Failed to submit NPS survey');\n }\n\n setNpsSurveySettings((settings) => ({\n ...settings,\n lastResponseDate: new Date().toString(),\n firstDismissalDate: null,\n lastDismissalDate: null,\n }));\n setIsFeedbackResponse(true);\n // Thank you message displayed in the banner should disappear after few seconds.\n setTimeout(() => {\n setSurveyIsShown(false);\n }, 3000);\n } catch (err) {\n toggleNotification({\n type: 'warning',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n const handleDismiss = () => {\n setNpsSurveySettings((settings) => {\n const nextSettings = {\n ...settings,\n lastResponseDate: null,\n };\n\n if (settings.firstDismissalDate) {\n // If the user dismisses the survey for the second time\n nextSettings.lastDismissalDate = new Date().toString();\n } else {\n // If the user dismisses the survey for the first time\n nextSettings.firstDismissalDate = new Date().toString();\n }\n\n return nextSettings;\n });\n\n setSurveyIsShown(false);\n };\n\n return (\n <Portal>\n <Formik\n initialValues={{ npsSurveyFeedback: '', npsSurveyRating: null }}\n onSubmit={handleSubmitResponse}\n validationSchema={yup.object({\n npsSurveyFeedback: yup.string(),\n npsSurveyRating: yup.number().required(),\n })}\n >\n {({ values, handleChange, setFieldValue, isSubmitting }) => (\n <Form name=\"npsSurveyForm\">\n <Flex\n hasRadius\n direction=\"column\"\n padding={4}\n borderColor=\"primary200\"\n background=\"neutral0\"\n shadow=\"popupShadow\"\n position=\"fixed\"\n bottom={0}\n left=\"50%\"\n transform=\"translateX(-50%)\"\n zIndex={theme.zIndices[2]}\n width=\"50%\"\n >\n {isFeedbackResponse ? (\n <Typography fontWeight=\"semiBold\">\n {formatMessage({\n id: 'app.components.NpsSurvey.feedback-response',\n defaultMessage: 'Thank you very much for your feedback!',\n })}\n </Typography>\n ) : (\n <Box as=\"fieldset\" width=\"100%\">\n <Flex justifyContent=\"space-between\" width=\"100%\">\n <Box marginLeft=\"auto\" marginRight=\"auto\">\n <Typography fontWeight=\"semiBold\" as=\"legend\">\n {formatMessage({\n id: 'app.components.NpsSurvey.banner-title',\n defaultMessage:\n 'How likely are you to recommend Strapi to a friend or colleague?',\n })}\n </Typography>\n </Box>\n <IconButton\n onClick={handleDismiss}\n aria-label={formatMessage({\n id: 'app.components.NpsSurvey.dismiss-survey-label',\n defaultMessage: 'Dismiss survey',\n })}\n icon={<Cross />}\n />\n </Flex>\n <Flex gap={2} marginTop={2} marginBottom={2} justifyContent=\"center\">\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'app.components.NpsSurvey.no-recommendation',\n defaultMessage: 'Not at all likely',\n })}\n </Typography>\n {ratingArray.map((number) => {\n return (\n <FieldWrapper\n key={number}\n className={values.npsSurveyRating === number ? 'selected' : undefined} // \"selected\" class added when child radio button is checked\n hasRadius\n background=\"primary100\"\n borderColor=\"primary200\"\n color=\"primary600\"\n position=\"relative\"\n cursor=\"pointer\"\n >\n <FieldLabel htmlFor={`nps-survey-rating-${number}-input`}>\n <VisuallyHidden>\n <FieldInput\n type=\"radio\"\n id={`nps-survey-rating-${number}-input`}\n name=\"npsSurveyRating\"\n checked={values.npsSurveyRating === number}\n onChange={(e) =>\n setFieldValue('npsSurveyRating', parseInt(e.target.value, 10))\n }\n value={number}\n />\n </VisuallyHidden>\n {number}\n </FieldLabel>\n </FieldWrapper>\n );\n })}\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'app.components.NpsSurvey.happy-to-recommend',\n defaultMessage: 'Extremely likely',\n })}\n </Typography>\n </Flex>\n {values.npsSurveyRating !== null && (\n <Flex direction=\"column\">\n <Box marginTop={2}>\n <FieldLabel htmlFor=\"npsSurveyFeedback\" fontWeight=\"semiBold\" fontSize={2}>\n {formatMessage({\n id: 'app.components.NpsSurvey.feedback-question',\n defaultMessage: 'Do you have any suggestion for improvements?',\n })}\n </FieldLabel>\n </Box>\n <Box width=\"62%\" marginTop={3} marginBottom={4}>\n <Textarea\n id=\"npsSurveyFeedback\" // formik element attribute \"id\" should be same as the values key to work\n width=\"100%\"\n onChange={handleChange}\n >\n {values.npsSurveyFeedback}\n </Textarea>\n </Box>\n <Button marginBottom={2} type=\"submit\" loading={isSubmitting}>\n {formatMessage({\n id: 'app.components.NpsSurvey.submit-feedback',\n defaultMessage: 'Submit Feedback',\n })}\n </Button>\n </Flex>\n )}\n </Box>\n )}\n </Flex>\n </Form>\n )}\n </Formik>\n </Portal>\n );\n};\n\ninterface NpsSurveySettings {\n enabled: boolean;\n lastResponseDate: string | null;\n firstDismissalDate: string | null;\n lastDismissalDate: string | null;\n}\n\n/**\n * We exported to make it available during admin user registration.\n * Because we only enable the NPS for users who subscribe to the newsletter when signing up\n */\nfunction useNpsSurveySettings() {\n const [npsSurveySettings, setNpsSurveySettings] = usePersistentState<NpsSurveySettings>(\n 'STRAPI_NPS_SURVEY_SETTINGS',\n {\n enabled: true,\n lastResponseDate: null,\n firstDismissalDate: null,\n lastDismissalDate: null,\n }\n );\n\n /**\n * TODO: should this just be an array so we can alias the `usePersistentState` hook?\n */\n return { npsSurveySettings, setNpsSurveySettings };\n}\n\nexport { NpsSurvey, useNpsSurveySettings };\n","import * as React from 'react';\n\nimport {\n Box,\n Button,\n Checkbox,\n Flex,\n Grid,\n GridItem,\n Main,\n TextInput,\n Typography,\n} from '@strapi/design-system';\nimport { Link } from '@strapi/design-system/v2';\nimport {\n Form,\n auth,\n getYupInnerErrors,\n translatedErrors,\n useAPIErrorHandler,\n useGuidedTour,\n useNotification,\n useQuery,\n useTracking,\n} from '@strapi/helper-plugin';\nimport { Eye, EyeStriked } from '@strapi/icons';\nimport { Formik, FormikHelpers } from 'formik';\nimport omit from 'lodash/omit';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { NavLink, Redirect, useHistory, useRouteMatch } from 'react-router-dom';\nimport styled from 'styled-components';\nimport * as yup from 'yup';\nimport { ValidationError } from 'yup';\n\nimport {\n Register as RegisterUser,\n RegisterAdmin,\n} from '../../../../../shared/contracts/authentication';\nimport { useNpsSurveySettings } from '../../../components/NpsSurvey';\nimport { Logo } from '../../../components/UnauthenticatedLogo';\nimport { useAuth } from '../../../features/Auth';\nimport { LayoutContent, UnauthenticatedLayout } from '../../../layouts/UnauthenticatedLayout';\nimport {\n useGetRegistrationInfoQuery,\n useRegisterAdminMutation,\n useRegisterUserMutation,\n} from '../../../services/auth';\nimport { isBaseQueryError } from '../../../utils/baseQuery';\nimport { AuthType } from '../constants';\n\nimport { FieldActionWrapper } from './FieldActionWrapper';\n\nconst REGISTER_USER_SCHEMA = yup.object().shape({\n firstname: yup.string().trim().required(translatedErrors.required),\n lastname: yup.string().nullable(),\n password: yup\n .string()\n .min(8, translatedErrors.minLength)\n .matches(/[a-z]/, 'components.Input.error.contain.lowercase')\n .matches(/[A-Z]/, 'components.Input.error.contain.uppercase')\n .matches(/\\d/, 'components.Input.error.contain.number')\n .required(translatedErrors.required),\n confirmPassword: yup\n .string()\n .oneOf([yup.ref('password'), null], 'components.Input.error.password.noMatch')\n .required(translatedErrors.required),\n registrationToken: yup.string().required(translatedErrors.required),\n});\n\nconst REGISTER_ADMIN_SCHEMA = yup.object().shape({\n firstname: yup.string().trim().required(translatedErrors.required),\n lastname: yup.string().nullable(),\n password: yup\n .string()\n .min(8, translatedErrors.minLength)\n .matches(/[a-z]/, 'components.Input.error.contain.lowercase')\n .matches(/[A-Z]/, 'components.Input.error.contain.uppercase')\n .matches(/\\d/, 'components.Input.error.contain.number')\n .required(translatedErrors.required),\n email: yup\n .string()\n .email(translatedErrors.email)\n .strict()\n .lowercase(translatedErrors.lowercase)\n .required(translatedErrors.required),\n confirmPassword: yup\n .string()\n .oneOf([yup.ref('password'), null], 'components.Input.error.password.noMatch')\n .required(translatedErrors.required),\n});\n\ninterface RegisterProps {\n hasAdmin?: boolean;\n}\n\ninterface RegisterFormValues {\n firstname: string;\n lastname: string;\n email: string;\n password: string;\n confirmPassword: string;\n registrationToken: string | undefined;\n news: boolean;\n}\n\nconst Register = ({ hasAdmin }: RegisterProps) => {\n const toggleNotification = useNotification();\n const { push } = useHistory();\n const [passwordShown, setPasswordShown] = React.useState(false);\n const [confirmPasswordShown, setConfirmPasswordShown] = React.useState(false);\n const [submitCount, setSubmitCount] = React.useState(0);\n const [apiError, setApiError] = React.useState<string>();\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const { setSkipped } = useGuidedTour();\n const query = useQuery();\n const match = useRouteMatch<{ authType: Extract<AuthType, `register${string}`> }>(\n '/auth/:authType'\n );\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n const { setNpsSurveySettings } = useNpsSurveySettings();\n\n const registrationToken = query.get('registrationToken');\n\n const { data: userInfo, error } = useGetRegistrationInfoQuery(registrationToken as string, {\n skip: !registrationToken,\n });\n\n React.useEffect(() => {\n if (error) {\n const message: string = isBaseQueryError(error) ? formatAPIError(error) : error.message ?? '';\n\n toggleNotification({\n type: 'warning',\n message,\n });\n\n push(`/auth/oops?info=${encodeURIComponent(message)}`);\n }\n }, [error, formatAPIError, push, toggleNotification]);\n\n const [registerAdmin] = useRegisterAdminMutation();\n const [registerUser] = useRegisterUserMutation();\n const setToken = useAuth('Register', (state) => state.setToken);\n\n const handleRegisterAdmin = async (\n { news, ...body }: RegisterAdmin.Request['body'] & { news: boolean },\n setFormErrors: FormikHelpers<RegisterFormValues>['setErrors']\n ) => {\n const res = await registerAdmin(body);\n\n if ('data' in res) {\n setToken(res.data.token);\n\n const { roles } = res.data.user;\n\n if (roles) {\n const isUserSuperAdmin = roles.find(({ code }) => code === 'strapi-super-admin');\n\n if (isUserSuperAdmin) {\n auth.set(false, 'GUIDED_TOUR_SKIPPED', true);\n setSkipped(false);\n trackUsage('didLaunchGuidedtour');\n }\n }\n\n if (news) {\n // Only enable EE survey if user accepted the newsletter\n setNpsSurveySettings((s) => ({ ...s, enabled: true }));\n\n push({\n pathname: '/usecase',\n search: `?hasAdmin=${true}`,\n });\n } else {\n push('/');\n }\n } else {\n if (isBaseQueryError(res.error)) {\n trackUsage('didNotCreateFirstAdmin');\n\n if (res.error.name === 'ValidationError') {\n setFormErrors(formatValidationErrors(res.error));\n return;\n }\n\n setApiError(formatAPIError(res.error));\n }\n }\n };\n\n const handleRegisterUser = async (\n { news, ...body }: RegisterUser.Request['body'] & { news: boolean },\n setFormErrors: FormikHelpers<RegisterFormValues>['setErrors']\n ) => {\n const res = await registerUser(body);\n\n if ('data' in res) {\n setToken(res.data.token);\n\n if (news) {\n // Only enable EE survey if user accepted the newsletter\n setNpsSurveySettings((s) => ({ ...s, enabled: true }));\n\n push({\n pathname: '/usecase',\n search: `?hasAdmin=${hasAdmin}`,\n });\n } else {\n push('/');\n }\n } else {\n if (isBaseQueryError(res.error)) {\n trackUsage('didNotCreateFirstAdmin');\n\n if (res.error.name === 'ValidationError') {\n setFormErrors(formatValidationErrors(res.error));\n return;\n }\n\n setApiError(formatAPIError(res.error));\n }\n }\n };\n\n if (\n !match ||\n (match.params.authType !== 'register' && match.params.authType !== 'register-admin')\n ) {\n return <Redirect to=\"/\" />;\n }\n\n const isAdminRegistration = match.params.authType === 'register-admin';\n\n const schema = isAdminRegistration ? REGISTER_ADMIN_SCHEMA : REGISTER_USER_SCHEMA;\n\n return (\n <UnauthenticatedLayout>\n <LayoutContent>\n <Flex direction=\"column\" alignItems=\"center\" gap={3}>\n <Logo />\n\n <Typography as=\"h1\" variant=\"alpha\" textAlign=\"center\">\n {formatMessage({\n id: 'Auth.form.welcome.title',\n defaultMessage: 'Welcome to Strapi!',\n })}\n </Typography>\n <Typography variant=\"epsilon\" textColor=\"neutral600\" textAlign=\"center\">\n {formatMessage({\n id: 'Auth.form.register.subtitle',\n defaultMessage:\n 'Credentials are only used to authenticate in Strapi. All saved data will be stored in your database.',\n })}\n </Typography>\n {apiError ? (\n <Typography id=\"global-form-error\" role=\"alert\" tabIndex={-1} textColor=\"danger600\">\n {apiError}\n </Typography>\n ) : null}\n </Flex>\n <Formik\n enableReinitialize\n initialValues={\n {\n firstname: userInfo?.firstname || '',\n lastname: userInfo?.lastname || '',\n email: userInfo?.email || '',\n password: '',\n confirmPassword: '',\n registrationToken: registrationToken || undefined,\n news: false,\n } satisfies RegisterFormValues\n }\n onSubmit={async (data, formik) => {\n const normalizedData = normalizeData(data);\n\n try {\n await schema.validate(normalizedData, { abortEarly: false });\n\n if (submitCount > 0 && isAdminRegistration) {\n trackUsage('didSubmitWithErrorsFirstAdmin', { count: submitCount.toString() });\n }\n\n if (normalizedData.registrationToken) {\n handleRegisterUser(\n {\n userInfo: omit(normalizedData, [\n 'registrationToken',\n 'confirmPassword',\n 'email',\n 'news',\n ]),\n registrationToken: normalizedData.registrationToken,\n news: normalizedData.news,\n },\n formik.setErrors\n );\n } else {\n await handleRegisterAdmin(\n omit(normalizedData, ['registrationToken', 'confirmPassword']),\n formik.setErrors\n );\n }\n } catch (err) {\n if (err instanceof ValidationError) {\n const errors = getYupInnerErrors(err);\n\n formik.setErrors(errors);\n }\n setSubmitCount(submitCount + 1);\n }\n }}\n validateOnChange={false}\n >\n {({ values, errors, handleChange }) => {\n return (\n <Form>\n <Main>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6} marginTop={7}>\n <Grid gap={4}>\n <GridItem col={6}>\n <TextInput\n name=\"firstname\"\n required\n value={values.firstname}\n error={\n errors.firstname\n ? formatMessage(errors.firstname as MessageDescriptor)\n : undefined\n }\n onChange={handleChange}\n label={formatMessage({\n id: 'Auth.form.firstname.label',\n defaultMessage: 'Firstname',\n })}\n />\n </GridItem>\n <GridItem col={6}>\n <TextInput\n name=\"lastname\"\n value={values.lastname}\n onChange={handleChange}\n label={formatMessage({\n id: 'Auth.form.lastname.label',\n defaultMessage: 'Lastname',\n })}\n />\n </GridItem>\n </Grid>\n <TextInput\n name=\"email\"\n disabled={!isAdminRegistration}\n value={values.email}\n onChange={handleChange}\n error={\n errors.email ? formatMessage(errors.email as MessageDescriptor) : undefined\n }\n required\n label={formatMessage({\n id: 'Auth.form.email.label',\n defaultMessage: 'Email',\n })}\n type=\"email\"\n />\n <PasswordInput\n name=\"password\"\n onChange={handleChange}\n value={values.password}\n error={\n errors.password\n ? formatMessage(errors.password as MessageDescriptor)\n : undefined\n }\n endAction={\n <FieldActionWrapper\n onClick={(e) => {\n e.preventDefault();\n setPasswordShown((prev) => !prev);\n }}\n label={formatMessage(\n passwordShown\n ? {\n id: 'Auth.form.password.show-password',\n defaultMessage: 'Show password',\n }\n : {\n id: 'Auth.form.password.hide-password',\n defaultMessage: 'Hide password',\n }\n )}\n >\n {passwordShown ? <Eye /> : <EyeStriked />}\n </FieldActionWrapper>\n }\n hint={formatMessage({\n id: 'Auth.form.password.hint',\n defaultMessage:\n 'Must be at least 8 characters, 1 uppercase, 1 lowercase & 1 number',\n })}\n required\n label={formatMessage({\n id: 'global.password',\n defaultMessage: 'Password',\n })}\n type={passwordShown ? 'text' : 'password'}\n />\n <PasswordInput\n name=\"confirmPassword\"\n onChange={handleChange}\n value={values.confirmPassword}\n error={\n errors.confirmPassword\n ? formatMessage(errors.confirmPassword as MessageDescriptor)\n : undefined\n }\n endAction={\n <FieldActionWrapper\n onClick={(e) => {\n e.preventDefault();\n setConfirmPasswordShown((prev) => !prev);\n }}\n label={formatMessage(\n confirmPasswordShown\n ? {\n id: 'Auth.form.password.show-password',\n defaultMessage: 'Show password',\n }\n : {\n id: 'Auth.form.password.hide-password',\n defaultMessage: 'Hide password',\n }\n )}\n >\n {confirmPasswordShown ? <Eye /> : <EyeStriked />}\n </FieldActionWrapper>\n }\n required\n label={formatMessage({\n id: 'Auth.form.confirmPassword.label',\n defaultMessage: 'Confirm Password',\n })}\n type={confirmPasswordShown ? 'text' : 'password'}\n />\n <Checkbox\n onValueChange={(checked) => {\n handleChange({ target: { value: checked, name: 'news' } });\n }}\n value={values.news}\n name=\"news\"\n aria-label=\"news\"\n >\n {formatMessage(\n {\n id: 'Auth.form.register.news.label',\n defaultMessage:\n 'Keep me updated about new features & upcoming improvements (by doing this you accept the {terms} and the {policy}).',\n },\n {\n terms: (\n <A target=\"_blank\" href=\"https://strapi.io/terms\" rel=\"noreferrer\">\n {formatMessage({\n id: 'Auth.privacy-policy-agreement.terms',\n defaultMessage: 'terms',\n })}\n </A>\n ),\n policy: (\n <A target=\"_blank\" href=\"https://strapi.io/privacy\" rel=\"noreferrer\">\n {formatMessage({\n id: 'Auth.privacy-policy-agreement.policy',\n defaultMessage: 'policy',\n })}\n </A>\n ),\n }\n )}\n </Checkbox>\n <Button fullWidth size=\"L\" type=\"submit\">\n {formatMessage({\n id: 'Auth.form.button.register',\n defaultMessage: \"Let's start\",\n })}\n </Button>\n </Flex>\n </Main>\n </Form>\n );\n }}\n </Formik>\n {match?.params.authType === 'register' && (\n <Box paddingTop={4}>\n <Flex justifyContent=\"center\">\n {/* @ts-expect-error – error with inferring the props from the as component */}\n <Link as={NavLink} to=\"/auth/login\">\n {formatMessage({\n id: 'Auth.link.signin.account',\n defaultMessage: 'Already have an account?',\n })}\n </Link>\n </Flex>\n </Box>\n )}\n </LayoutContent>\n </UnauthenticatedLayout>\n );\n};\n\ninterface RegisterFormValues {\n firstname: string;\n lastname: string;\n email: string;\n password: string;\n confirmPassword: string;\n registrationToken: string | undefined;\n news: boolean;\n}\n\ntype StringKeys<T> = {\n [K in keyof T]: T[K] extends string | undefined ? K : never;\n}[keyof T];\n\n/**\n * @description Trims all values but the password & sets lastName to null if it's a falsey value.\n */\nfunction normalizeData(data: RegisterFormValues) {\n return Object.entries(data).reduce(\n (acc, [key, value]) => {\n type PasswordKeys = Extract<keyof RegisterFormValues, 'password' | 'confirmPassword'>;\n type RegisterFormStringValues = Exclude<\n keyof Pick<RegisterFormValues, StringKeys<RegisterFormValues>>,\n PasswordKeys\n >;\n\n if (!['password', 'confirmPassword'].includes(key) && typeof value === 'string') {\n acc[key as RegisterFormStringValues] = value.trim();\n\n if (key === 'lastname') {\n acc[key] = value || undefined;\n }\n } else {\n acc[key as PasswordKeys] = value;\n }\n\n return acc;\n },\n {} as {\n firstname: string;\n lastname: string | undefined;\n email: string;\n password: string;\n confirmPassword: string;\n registrationToken: string | undefined;\n news: boolean;\n }\n );\n}\n\nconst A = styled.a`\n color: ${({ theme }) => theme.colors.primary600};\n`;\n\nconst PasswordInput = styled(TextInput)`\n ::-ms-reveal {\n display: none;\n }\n`;\n\nexport { Register };\nexport type { RegisterProps };\n","import * as React from 'react';\n\nimport { Box, Button, Flex, Main, TextInput, Typography } from '@strapi/design-system';\nimport { Link } from '@strapi/design-system/v2';\nimport { Form, translatedErrors, useAPIErrorHandler, useQuery } from '@strapi/helper-plugin';\nimport { Eye, EyeStriked } from '@strapi/icons';\nimport { Formik } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { NavLink, Redirect, useHistory } from 'react-router-dom';\nimport styled from 'styled-components';\nimport * as yup from 'yup';\n\nimport { ResetPassword } from '../../../../../shared/contracts/authentication';\nimport { Logo } from '../../../components/UnauthenticatedLogo';\nimport { useAuth } from '../../../features/Auth';\nimport {\n Column,\n LayoutContent,\n UnauthenticatedLayout,\n} from '../../../layouts/UnauthenticatedLayout';\nimport { useResetPasswordMutation } from '../../../services/auth';\nimport { isBaseQueryError } from '../../../utils/baseQuery';\n\nimport { FieldActionWrapper } from './FieldActionWrapper';\n\nconst RESET_PASSWORD_SCHEMA = yup.object().shape({\n password: yup\n .string()\n .min(8, translatedErrors.minLength)\n .matches(/[a-z]/, 'components.Input.error.contain.lowercase')\n .matches(/[A-Z]/, 'components.Input.error.contain.uppercase')\n .matches(/\\d/, 'components.Input.error.contain.number')\n .required(translatedErrors.required),\n confirmPassword: yup\n .string()\n .oneOf([yup.ref('password'), null], 'components.Input.error.password.noMatch')\n .required(translatedErrors.required),\n});\n\nconst ResetPassword = () => {\n const [passwordShown, setPasswordShown] = React.useState(false);\n const [confirmPasswordShown, setConfirmPasswordShown] = React.useState(false);\n const { formatMessage } = useIntl();\n const { push } = useHistory();\n const query = useQuery();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const setToken = useAuth('ResetPassword', (state) => state.setToken);\n\n const [resetPassword, { error }] = useResetPasswordMutation();\n\n const handleSubmit = async (body: ResetPassword.Request['body']) => {\n const res = await resetPassword(body);\n\n if ('data' in res) {\n setToken(res.data.token);\n push('/');\n }\n };\n /**\n * If someone doesn't have a reset password token\n * then they should just be redirected back to the login page.\n */\n if (!query.get('code')) {\n return <Redirect to=\"/auth/login\" />;\n }\n\n return (\n <UnauthenticatedLayout>\n <Main>\n <LayoutContent>\n <Column>\n <Logo />\n <Box paddingTop={6} paddingBottom={7}>\n <Typography as=\"h1\" variant=\"alpha\">\n {formatMessage({\n id: 'global.reset-password',\n defaultMessage: 'Reset password',\n })}\n </Typography>\n </Box>\n {error ? (\n <Typography id=\"global-form-error\" role=\"alert\" tabIndex={-1} textColor=\"danger600\">\n {isBaseQueryError(error)\n ? formatAPIError(error)\n : formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n })}\n </Typography>\n ) : null}\n </Column>\n <Formik\n enableReinitialize\n initialValues={{\n password: '',\n confirmPassword: '',\n }}\n onSubmit={(values) => {\n // We know query.code is defined because we check for it above.\n handleSubmit({ password: values.password, resetPasswordToken: query.get('code')! });\n }}\n validationSchema={RESET_PASSWORD_SCHEMA}\n validateOnChange={false}\n >\n {({ values, errors, handleChange }) => (\n <Form>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <PasswordInput\n name=\"password\"\n onChange={handleChange}\n value={values.password}\n error={\n errors.password\n ? formatMessage(\n {\n id: errors.password,\n defaultMessage: 'This field is required.',\n },\n {\n min: 8,\n }\n )\n : undefined\n }\n endAction={\n <FieldActionWrapper\n onClick={(e) => {\n e.preventDefault();\n setPasswordShown((prev) => !prev);\n }}\n label={formatMessage(\n passwordShown\n ? {\n id: 'Auth.form.password.show-password',\n defaultMessage: 'Show password',\n }\n : {\n id: 'Auth.form.password.hide-password',\n defaultMessage: 'Hide password',\n }\n )}\n >\n {passwordShown ? <Eye /> : <EyeStriked />}\n </FieldActionWrapper>\n }\n hint={formatMessage({\n id: 'Auth.form.password.hint',\n defaultMessage:\n 'Password must contain at least 8 characters, 1 uppercase, 1 lowercase and 1 number',\n })}\n required\n label={formatMessage({\n id: 'global.password',\n defaultMessage: 'Password',\n })}\n type={passwordShown ? 'text' : 'password'}\n />\n <PasswordInput\n name=\"confirmPassword\"\n onChange={handleChange}\n value={values.confirmPassword}\n error={\n errors.confirmPassword\n ? formatMessage({\n id: errors.confirmPassword,\n defaultMessage: 'This value is required.',\n })\n : undefined\n }\n endAction={\n <FieldActionWrapper\n onClick={(e) => {\n e.preventDefault();\n setConfirmPasswordShown((prev) => !prev);\n }}\n label={formatMessage(\n passwordShown\n ? {\n id: 'Auth.form.password.show-password',\n defaultMessage: 'Show password',\n }\n : {\n id: 'Auth.form.password.hide-password',\n defaultMessage: 'Hide password',\n }\n )}\n >\n {confirmPasswordShown ? <Eye /> : <EyeStriked />}\n </FieldActionWrapper>\n }\n required\n label={formatMessage({\n id: 'Auth.form.confirmPassword.label',\n defaultMessage: 'Confirm Password',\n })}\n type={confirmPasswordShown ? 'text' : 'password'}\n />\n <Button fullWidth type=\"submit\">\n {formatMessage({\n id: 'global.change-password',\n defaultMessage: 'Change password',\n })}\n </Button>\n </Flex>\n </Form>\n )}\n </Formik>\n </LayoutContent>\n <Flex justifyContent=\"center\">\n <Box paddingTop={4}>\n {/* @ts-expect-error – error with inferring the props from the as component */}\n <Link as={NavLink} to=\"/auth/login\">\n {formatMessage({ id: 'Auth.link.ready', defaultMessage: 'Ready to sign in?' })}\n </Link>\n </Box>\n </Flex>\n </Main>\n </UnauthenticatedLayout>\n );\n};\n\nconst PasswordInput = styled(TextInput)`\n ::-ms-reveal {\n display: none;\n }\n`;\n\nexport { ResetPassword };\n","import type { ComponentType } from 'react';\n\nimport { ForgotPassword } from './components/ForgotPassword';\nimport { ForgotPasswordSuccess } from './components/ForgotPasswordSuccess';\nimport { Oops } from './components/Oops';\nimport { Register, RegisterProps } from './components/Register';\nimport { ResetPassword } from './components/ResetPassword';\n\nexport type AuthType =\n | 'login'\n | 'register'\n | 'register-admin'\n | 'forgot-password'\n | 'reset-password'\n | 'forgot-password-success'\n | 'oops'\n | 'providers';\n\nexport type FormDictionary = Record<AuthType, ComponentType | ComponentType<RegisterProps>>;\n\nexport const FORMS = {\n 'forgot-password': ForgotPassword,\n 'forgot-password-success': ForgotPasswordSuccess,\n // the `Component` attribute is set after all forms and CE/EE components are loaded, but since we\n // are here outside of a React component we can not use the hook directly\n login: () => null,\n oops: Oops,\n register: Register,\n 'register-admin': Register,\n 'reset-password': ResetPassword,\n providers: () => null,\n} satisfies FormDictionary;\n","import { Redirect, useHistory, useRouteMatch } from 'react-router-dom';\n\nimport { useAuth } from '../../features/Auth';\nimport { useEnterprise } from '../../hooks/useEnterprise';\n\nimport { Login as LoginCE } from './components/Login';\nimport { AuthType, FORMS, FormDictionary } from './constants';\n\n/* -------------------------------------------------------------------------------------------------\n * AuthPage\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AuthPageProps {\n hasAdmin: boolean;\n}\n\nconst AuthPage = ({ hasAdmin }: AuthPageProps) => {\n const {\n location: { search },\n } = useHistory();\n const match = useRouteMatch<{ authType: AuthType }>('/auth/:authType');\n const authType = match?.params.authType;\n const Login = useEnterprise(\n LoginCE,\n async () => (await import('../../../../ee/admin/src/pages/AuthPage/components/Login')).LoginEE\n );\n const forms = useEnterprise<FormDictionary, Partial<FormDictionary>>(\n FORMS,\n async () => (await import('../../../../ee/admin/src/pages/AuthPage/constants')).FORMS,\n {\n combine(ceForms, eeForms) {\n return {\n ...ceForms,\n ...eeForms,\n };\n },\n defaultValue: FORMS,\n }\n );\n\n const token = useAuth('AuthPage', (state) => state.token);\n\n if (!authType || !forms) {\n return <Redirect to=\"/\" />;\n }\n\n const Component = forms[authType];\n\n // Redirect the user to the login page if\n // the endpoint does not exist or\n // there is already an admin user oo\n // the user is already logged in\n if (!Component || (hasAdmin && authType === 'register-admin') || token) {\n return <Redirect to=\"/\" />;\n }\n\n // Redirect the user to the register-admin if it is the first user\n if (!hasAdmin && authType !== 'register-admin') {\n return (\n <Redirect\n to={{\n pathname: '/auth/register-admin',\n // Forward the `?redirectTo` from /auth/login\n // /abc => /auth/login?redirectTo=%2Fabc => /auth/register-admin?redirectTo=%2Fabc\n search,\n }}\n />\n );\n }\n\n if (Login && authType === 'login') {\n // Assign the component to render for the login form\n return <Login />;\n } else if (authType === 'login' && !Login) {\n // block rendering until the Login EE component is fully loaded\n return null;\n }\n\n return <Component hasAdmin={hasAdmin} />;\n};\n\nexport { AuthPage };\nexport type { AuthPageProps };\n","/**\n * NotFoundPage\n *\n * This is the page we show when the user visits a url that doesn't have a route\n *\n */\nimport {\n ContentLayout,\n EmptyStateLayout,\n HeaderLayout,\n LinkButton,\n Main,\n} from '@strapi/design-system';\nimport { useFocusWhenNavigate } from '@strapi/helper-plugin';\nimport { ArrowRight, EmptyPictures } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nexport const NotFoundPage = () => {\n const { formatMessage } = useIntl();\n useFocusWhenNavigate();\n\n return (\n <Main labelledBy=\"title\">\n <HeaderLayout\n id=\"title\"\n title={formatMessage({\n id: 'content-manager.pageNotFound',\n defaultMessage: 'Page not found',\n })}\n />\n <ContentLayout>\n <EmptyStateLayout\n action={\n <LinkButton variant=\"secondary\" endIcon={<ArrowRight />} to=\"/\">\n {formatMessage({\n id: 'app.components.NotFoundPage.back',\n defaultMessage: 'Back to homepage',\n })}\n </LinkButton>\n }\n content={formatMessage({\n id: 'app.page.not.found',\n defaultMessage: \"Oops! We can't seem to find the page you're looging for...\",\n })}\n hasRadius\n icon={<EmptyPictures width=\"10rem\" />}\n shadow=\"tableShadow\"\n />\n </ContentLayout>\n </Main>\n );\n};\n","import * as React from 'react';\n\nimport {\n Box,\n Button,\n Flex,\n Main,\n Option,\n Select,\n TextButton,\n TextInput,\n Typography,\n} from '@strapi/design-system';\nimport { pxToRem, useNotification } from '@strapi/helper-plugin';\nimport { parse } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useHistory } from 'react-router-dom';\nimport styled from 'styled-components';\n\nimport { Logo } from '../components/UnauthenticatedLogo';\nimport { useAuth } from '../features/Auth';\nimport { LayoutContent, UnauthenticatedLayout } from '../layouts/UnauthenticatedLayout';\n\nexport const options = [\n {\n intlLabel: {\n id: 'Usecase.front-end',\n defaultMessage: 'Front-end developer',\n },\n value: 'front_end_developer',\n },\n {\n intlLabel: {\n id: 'Usecase.back-end',\n defaultMessage: 'Back-end developer',\n },\n value: 'back_end_developer',\n },\n {\n intlLabel: {\n id: 'Usecase.full-stack',\n defaultMessage: 'Full-stack developer',\n },\n value: 'full_stack_developer',\n },\n {\n intlLabel: {\n id: 'global.content-manager',\n defaultMessage: 'Content Manager',\n },\n value: 'content_manager',\n },\n {\n intlLabel: {\n id: 'Usecase.content-creator',\n defaultMessage: 'Content Creator',\n },\n value: 'content_creator',\n },\n {\n intlLabel: {\n id: 'Usecase.other',\n defaultMessage: 'Other',\n },\n value: 'other',\n },\n];\n\nconst TypographyCenter = styled(Typography)`\n text-align: center;\n`;\n\nexport const UseCasePage = () => {\n const toggleNotification = useNotification();\n const { push, location } = useHistory();\n const { formatMessage } = useIntl();\n const [role, setRole] = React.useState<string | number | null>(null);\n const [otherRole, setOtherRole] = React.useState('');\n\n const { firstname, email } = useAuth('UseCasePage', (state) => state.user) ?? {};\n const { hasAdmin } = parse(location?.search, { ignoreQueryPrefix: true });\n const isOther = role === 'other';\n\n const handleSubmit = async (event: React.FormEvent, skipPersona: boolean) => {\n event.preventDefault();\n try {\n await fetch('https://analytics.strapi.io/register', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n email,\n username: firstname,\n firstAdmin: Boolean(!hasAdmin),\n persona: {\n role: skipPersona ? undefined : role,\n otherRole: skipPersona ? undefined : otherRole,\n },\n }),\n });\n\n toggleNotification({\n type: 'success',\n message: {\n id: 'Usecase.notification.success.project-created',\n defaultMessage: 'Project has been successfully created',\n },\n });\n push('/');\n } catch (err) {\n // Silent\n }\n };\n\n return (\n <UnauthenticatedLayout>\n <Main labelledBy=\"usecase-title\">\n <LayoutContent>\n <form onSubmit={(e) => handleSubmit(e, false)}>\n <Flex direction=\"column\" paddingBottom={7}>\n <Logo />\n <Box paddingTop={6} paddingBottom={1} width={pxToRem(250)}>\n <TypographyCenter variant=\"alpha\" as=\"h1\" id=\"usecase-title\">\n {formatMessage({\n id: 'Usecase.title',\n defaultMessage: 'Tell us a bit more about yourself',\n })}\n </TypographyCenter>\n </Box>\n </Flex>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Select\n id=\"usecase\"\n data-testid=\"usecase\"\n label={formatMessage({\n id: 'Usecase.input.work-type',\n defaultMessage: 'What type of work do you do?',\n })}\n // onClear={() => setRole(null)}\n // clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}\n onChange={(value) => setRole(value)}\n value={role}\n >\n {options.map(({ intlLabel, value }) => (\n <Option key={value} value={value}>\n {formatMessage(intlLabel)}\n </Option>\n ))}\n </Select>\n {isOther && (\n <TextInput\n name=\"other\"\n label={formatMessage({ id: 'Usecase.other', defaultMessage: 'Other' })}\n value={otherRole}\n onChange={(e) => setOtherRole(e.target.value)}\n data-testid=\"other\"\n />\n )}\n <Button type=\"submit\" size=\"L\" fullWidth disabled={!role}>\n {formatMessage({ id: 'global.finish', defaultMessage: 'Finish' })}\n </Button>\n </Flex>\n </form>\n </LayoutContent>\n <Flex justifyContent=\"center\">\n <Box paddingTop={4}>\n <TextButton onClick={(event) => handleSubmit(event, true)}>\n {formatMessage({\n id: 'Usecase.button.skip',\n defaultMessage: 'Skip this question',\n })}\n </TextButton>\n </Box>\n </Flex>\n </Main>\n </UnauthenticatedLayout>\n );\n};\n","/* eslint-disable check-file/filename-naming-convention */\n\nimport * as React from 'react';\n\nimport { LoadingIndicatorPage, MenuItem } from '@strapi/helper-plugin';\nimport { Route } from 'react-router-dom';\n\ninterface LazyCompoProps {\n loadComponent: Required<MenuItem>['Component'];\n}\n\nconst LazyCompo = ({ loadComponent }: LazyCompoProps) => {\n const [Compo, setCompo] = React.useState<React.ComponentType | null>(null);\n\n React.useEffect(() => {\n const loadCompo = async () => {\n try {\n const loadedCompo = await loadComponent();\n\n // TODO the loaded component provided can currently come from a default or named export\n // We will move the entire codebase to use named exports only\n // Until then we support both cases with priority given to the existing default exports\n if (typeof loadedCompo === 'function') {\n setCompo(() => loadedCompo);\n } else if (loadedCompo.default) {\n setCompo(() => loadedCompo.default!);\n }\n } catch (err) {}\n };\n\n loadCompo();\n }, [loadComponent]);\n\n if (Compo) {\n return <Compo />;\n }\n\n return <LoadingIndicatorPage />;\n};\n\nexport const createRoute = (\n loadComponent: LazyCompoProps['loadComponent'],\n to: MenuItem['to'],\n exact: MenuItem['exact'] = false\n) => {\n return (\n <Route\n render={() => <LazyCompo loadComponent={loadComponent} />}\n key={to}\n path={to}\n exact={exact || false}\n />\n );\n};\n","/**\n *\n * App.js\n *\n */\n\nimport * as React from 'react';\n\nimport { SkipToContent } from '@strapi/design-system';\nimport {\n LoadingIndicatorPage,\n MenuItem,\n TrackingProvider,\n useAppInfo,\n useNotification,\n} from '@strapi/helper-plugin';\nimport merge from 'lodash/merge';\nimport { useIntl } from 'react-intl';\nimport { useDispatch } from 'react-redux';\nimport { Route, Switch } from 'react-router-dom';\n\nimport { PrivateRoute } from './components/PrivateRoute';\nimport { ADMIN_PERMISSIONS_CE } from './constants';\nimport { useAuth } from './features/Auth';\nimport { ConfigurationProvider, ConfigurationProviderProps } from './features/Configuration';\nimport { useEnterprise } from './hooks/useEnterprise';\nimport { AuthPage } from './pages/Auth/AuthPage';\nimport { NotFoundPage } from './pages/NotFoundPage';\nimport { UseCasePage } from './pages/UseCasePage';\nimport { setAdminPermissions } from './reducer';\nimport { useInitQuery, useTelemetryPropertiesQuery } from './services/admin';\nimport { PermissionMap } from './types/permissions';\nimport { createRoute } from './utils/createRoute';\n\ntype StrapiRoute = Pick<MenuItem, 'exact' | 'to'> & Required<Pick<MenuItem, 'Component'>>;\n\nconst ROUTES_CE: StrapiRoute[] | null = null;\n\nconst AuthenticatedApp = React.lazy(() =>\n import('./components/AuthenticatedApp').then((mod) => ({ default: mod.AuthenticatedApp }))\n);\n\ninterface AppProps extends Omit<ConfigurationProviderProps, 'children' | 'authLogo' | 'menuLogo'> {\n authLogo: string;\n menuLogo: string;\n}\n\nexport const App = ({ authLogo, menuLogo, showReleaseNotification, showTutorials }: AppProps) => {\n // @ts-expect-error – we need to type the useEnterprise hook better, in this circumstance we know it'll either be the CE data or a merge of the two.\n const adminPermissions: Partial<PermissionMap> = useEnterprise(\n ADMIN_PERMISSIONS_CE,\n async () => (await import('../../ee/admin/src/constants')).ADMIN_PERMISSIONS_EE,\n {\n combine(cePermissions, eePermissions) {\n // the `settings` NS e.g. are deep nested objects, that need a deep merge\n return merge({}, cePermissions, eePermissions);\n },\n\n defaultValue: ADMIN_PERMISSIONS_CE,\n }\n );\n const routes = useEnterprise(\n ROUTES_CE,\n async () => (await import('../../ee/admin/src/constants')).ROUTES_EE,\n {\n defaultValue: [],\n }\n );\n const toggleNotification = useNotification();\n const { formatMessage } = useIntl();\n const dispatch = useDispatch();\n const appInfo = useAppInfo();\n const token = useAuth('App', (state) => state.token);\n\n const authRoutes = React.useMemo(() => {\n if (!routes) {\n return null;\n }\n\n return routes.map(({ to, Component, exact }) => createRoute(Component, to, exact));\n }, [routes]);\n\n React.useEffect(() => {\n dispatch(setAdminPermissions(adminPermissions));\n }, [adminPermissions, dispatch]);\n\n const initQuery = useInitQuery();\n const {\n hasAdmin,\n uuid,\n authLogo: customAuthLogo,\n menuLogo: customMenuLogo,\n } = initQuery.data ?? {};\n\n const telemetryPropertiesQuery = useTelemetryPropertiesQuery(undefined, {\n skip: !uuid || !token,\n });\n\n React.useEffect(() => {\n if (initQuery.error) {\n toggleNotification({\n type: 'warning',\n message: { id: 'app.containers.App.notification.error.init' },\n });\n }\n }, [initQuery.error, toggleNotification]);\n\n React.useEffect(() => {\n if (uuid && appInfo.currentEnvironment && telemetryPropertiesQuery.data) {\n const event = 'didInitializeAdministration';\n /**\n * fetch doesn't throw so it doesn't need to be in a try/catch.\n */\n fetch('https://analytics.strapi.io/api/v2/track', {\n method: 'POST',\n body: JSON.stringify({\n // This event is anonymous\n event,\n userId: '',\n eventPropeties: {},\n userProperties: { environment: appInfo.currentEnvironment },\n groupProperties: { ...telemetryPropertiesQuery.data, projectId: uuid },\n }),\n headers: {\n 'Content-Type': 'application/json',\n 'X-Strapi-Event': event,\n },\n });\n }\n }, [appInfo.currentEnvironment, telemetryPropertiesQuery.data, uuid]);\n\n const trackingInfo = React.useMemo(\n () => ({\n uuid,\n telemetryProperties: telemetryPropertiesQuery.data,\n }),\n [uuid, telemetryPropertiesQuery.data]\n );\n\n if (initQuery.isLoading) {\n return <LoadingIndicatorPage />;\n }\n\n return (\n <React.Suspense fallback={<LoadingIndicatorPage />}>\n <SkipToContent>\n {formatMessage({ id: 'skipToContent', defaultMessage: 'Skip to content' })}\n </SkipToContent>\n <ConfigurationProvider\n authLogo={{\n default: authLogo,\n custom: {\n url: customAuthLogo ?? '',\n },\n }}\n menuLogo={{\n default: menuLogo,\n custom: {\n url: customMenuLogo ?? '',\n },\n }}\n showReleaseNotification={showReleaseNotification}\n showTutorials={showTutorials}\n >\n <TrackingProvider value={trackingInfo}>\n <Switch>\n {authRoutes}\n <Route\n path=\"/auth/:authType\"\n render={(routerProps) => <AuthPage {...routerProps} hasAdmin={Boolean(hasAdmin)} />}\n exact\n />\n <PrivateRoute path=\"/usecase\">\n <UseCasePage />\n </PrivateRoute>\n <PrivateRoute path=\"/\">\n <AuthenticatedApp />\n </PrivateRoute>\n <Route path=\"\" component={NotFoundPage} />\n </Switch>\n </TrackingProvider>\n </ConfigurationProvider>\n </React.Suspense>\n );\n};\n","export default \"data:image/svg+xml,%3csvg%20width='800'%20height='800'%20viewBox='0%200%20800%20800'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M39%20282c0-118%200-176.9%2036.6-213.5C112.2%2032%20171.1%2032%20288.9%2032h221.2c117.8%200%20176.7%200%20213.3%2036.6C760%20105.2%20760%20164.1%20760%20281.9v221.2c0%20117.8%200%20176.7-36.6%20213.3C686.8%20753%20627.9%20753%20510.1%20753H288.9c-117.8%200-176.7%200-213.3-36.6C39%20679.8%2039%20620.9%2039%20503.1V281.9Z'%20fill='%234945FF'/%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M536.4%20250.7H293.7v123.8h123.8v123.7h123.8V255.5c0-2.6-2.2-4.8-4.9-4.8Z'%20fill='%23fff'/%3e%3cpath%20fill='%23fff'%20d='M412.7%20374.5h4.8v4.8h-4.8z'/%3e%3cpath%20d='M293.8%20374.5h119c2.6%200%204.8%202.1%204.8%204.8v119h-119a4.8%204.8%200%200%201-4.8-4.9v-119Z'%20fill='%239593FF'/%3e%3cpath%20d='M417.5%20498.2h123.8L421.6%20618a2.4%202.4%200%200%201-4-1.7v-118ZM293.8%20374.5h-118a2.4%202.4%200%200%201-1.7-4.1l119.7-119.7v123.8Z'%20fill='%239593FF'/%3e%3c/svg%3e\"","import { useStrapiApp } from '@strapi/helper-plugin';\n\nimport {\n InjectionZoneArea,\n InjectionZoneBlock,\n InjectionZoneContainer,\n InjectionZoneModule,\n} from '../components/InjectionZone';\n\nexport const useInjectionZone = (area: InjectionZoneArea) => {\n const { getAdminInjectedComponents } = useStrapiApp();\n\n const [moduleName, page, position] = area.split('.') as [\n InjectionZoneModule,\n InjectionZoneContainer,\n InjectionZoneBlock\n ];\n\n return getAdminInjectedComponents(moduleName, page, position);\n};\n","import * as React from 'react';\n\nimport { useInjectionZone } from '../hooks/useInjectionZone';\n\nconst INJECTION_ZONES = {\n admin: {\n // Temporary injection zone, support for the react-tour plugin in foodadvisor\n tutorials: {\n links: [],\n },\n },\n contentManager: {\n editView: { informations: [], 'right-links': [] },\n listView: {\n actions: [],\n deleteModalAdditionalInfos: [],\n publishModalAdditionalInfos: [],\n unpublishModalAdditionalInfos: [],\n },\n },\n} satisfies InjectionZones;\n\ninterface InjectionZoneComponent {\n Component: React.ComponentType;\n name: string;\n // TODO: in theory this could receive and forward any React component prop\n // but in practice there only seems to be once instance, where `slug` is\n // forwarded. The type needs to become either more generic or we disallow\n // prop spreading and offer a different way to access context data.\n slug: string;\n}\n\ninterface InjectionZones {\n admin: {\n tutorials: {\n links: InjectionZoneComponent[];\n };\n };\n contentManager: {\n editView: {\n informations: InjectionZoneComponent[];\n 'right-links': InjectionZoneComponent[];\n };\n listView: {\n actions: InjectionZoneComponent[];\n deleteModalAdditionalInfos: InjectionZoneComponent[];\n publishModalAdditionalInfos: InjectionZoneComponent[];\n unpublishModalAdditionalInfos: InjectionZoneComponent[];\n };\n };\n}\n\ntype InjectionZoneArea =\n | 'admin.tutorials.links'\n | 'contentManager.editView.informations'\n | 'contentManager.editView.right-links'\n | 'contentManager.listView.actions'\n | 'contentManager.listView.unpublishModalAdditionalInfos'\n | 'contentManager.listView.deleteModalAdditionalInfos'\n | 'contentManager.listView.publishModalAdditionalInfos'\n | 'contentManager.listView.deleteModalAdditionalInfos';\n\ntype InjectionZoneModule = InjectionZoneArea extends `${infer Word}.${string}` ? Word : never;\ntype InjectionZoneContainer = InjectionZoneArea extends `${string}.${infer Word}.${string}`\n ? Word\n : never;\ntype InjectionZoneBlock = InjectionZoneArea extends `${string}.${string}.${infer Word}`\n ? Word\n : never;\n\n/**\n * You can't know what this component props will be because it's generic and used everywhere\n * e.g. content-manager edit view, we just send the slug but we might not in the listView,\n * therefore, people should type it themselves on the components they render.\n */\nconst InjectionZone = ({ area, ...props }: { area: InjectionZoneArea; [key: string]: unknown }) => {\n const components = useInjectionZone(area);\n\n return (\n <>\n {components.map((component) => (\n <component.Component key={component.name} {...props} />\n ))}\n </>\n );\n};\n\nexport { InjectionZone, INJECTION_ZONES };\n\nexport type {\n InjectionZoneArea,\n InjectionZoneComponent,\n InjectionZones,\n InjectionZoneModule,\n InjectionZoneContainer,\n InjectionZoneBlock,\n};\n","import * as React from 'react';\n\nimport {\n GuidedTourContextValue,\n GuidedTourProvider as GuidedTourProviderComponent,\n GuidedTourSectionKey,\n GuidedTourStep,\n GuidedTourStepKey,\n auth,\n} from '@strapi/helper-plugin';\nimport produce from 'immer';\nimport get from 'lodash/get';\nimport set from 'lodash/set';\n\n/* -------------------------------------------------------------------------------------------------\n * GuidedTourProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface GuidedTourProviderProps {\n children: React.ReactNode;\n}\n\nconst GuidedTourProvider = ({ children }: GuidedTourProviderProps) => {\n const [{ currentStep, guidedTourState, isGuidedTourVisible, isSkipped }, dispatch] =\n React.useReducer(reducer, initialState, initialiseState);\n\n const setCurrentStep = (step: SetCurrentStepAction['step']) => {\n // if step is null it is intentional, we need to dispatch it\n if (step !== null) {\n const isStepAlreadyDone = get(guidedTourState, step);\n const [sectionName, stepName] = step.split('.') as [GuidedTourSectionKey, GuidedTourStepKey];\n const sectionArray = Object.entries(guidedTourState[sectionName]);\n\n const currentStepIndex = sectionArray.findIndex(([key]) => key === stepName);\n const previousSteps = sectionArray.slice(0, currentStepIndex);\n\n const isStepToShow = previousSteps.every(([, sectionValue]) => sectionValue);\n\n if (isStepAlreadyDone || isSkipped || !isStepToShow) {\n return null;\n }\n }\n\n auth.set(null, 'GUIDED_TOUR_CURRENT_STEP', true);\n\n return dispatch({\n type: 'SET_CURRENT_STEP',\n step,\n });\n };\n\n const setGuidedTourVisibility = (value: SetGuidedTourVisibilityAction['value']) => {\n dispatch({\n type: 'SET_GUIDED_TOUR_VISIBILITY',\n value,\n });\n };\n\n const setStepState = (currentStep: GuidedTourStep, value: SetStepStateAction['value']) => {\n addCompletedStep(currentStep);\n\n dispatch({\n type: 'SET_STEP_STATE',\n currentStep,\n value,\n });\n };\n\n const startSection = (sectionName: GuidedTourSectionKey) => {\n const sectionSteps = guidedTourState[sectionName];\n\n if (sectionSteps) {\n const guidedTourArray = Object.entries(guidedTourState);\n\n // Find current section position in the guidedTourArray\n // Get only previous sections based on current section position\n const currentSectionIndex = guidedTourArray.findIndex(([key]) => key === sectionName);\n const previousSections = guidedTourArray.slice(0, currentSectionIndex);\n\n // Check if every steps from previous section are done\n const isSectionToShow = previousSections.every(([, sectionValue]) =>\n Object.values(sectionValue).every(Boolean)\n );\n\n const [firstStep] = Object.keys(sectionSteps) as [GuidedTourStepKey];\n const isFirstStepDone = sectionSteps[firstStep];\n\n if (isSectionToShow && !currentStep && !isFirstStepDone) {\n setCurrentStep(`${sectionName}.${firstStep}`);\n }\n }\n };\n\n const setSkipped = (value: SetSkippedAction['value']) => {\n auth.set(value, 'GUIDED_TOUR_SKIPPED', true);\n\n dispatch({\n type: 'SET_SKIPPED',\n value,\n });\n };\n\n return (\n <GuidedTourProviderComponent\n guidedTourState={guidedTourState}\n currentStep={currentStep}\n setCurrentStep={setCurrentStep}\n setGuidedTourVisibility={setGuidedTourVisibility}\n setSkipped={setSkipped}\n setStepState={setStepState}\n startSection={startSection}\n isGuidedTourVisible={isGuidedTourVisible}\n isSkipped={isSkipped}\n >\n {children}\n </GuidedTourProviderComponent>\n );\n};\n\ntype State = Pick<\n GuidedTourContextValue,\n 'guidedTourState' | 'currentStep' | 'isGuidedTourVisible' | 'isSkipped'\n>;\n\nconst initialState = {\n currentStep: null,\n guidedTourState: {\n contentTypeBuilder: {\n create: false,\n success: false,\n },\n contentManager: {\n create: false,\n success: false,\n },\n apiTokens: {\n create: false,\n success: false,\n },\n transferTokens: {\n create: false,\n success: false,\n },\n },\n isGuidedTourVisible: false,\n isSkipped: false,\n} satisfies State;\n\ninterface SetCurrentStepAction {\n type: 'SET_CURRENT_STEP';\n step: GuidedTourStep | null;\n}\n\ninterface SetStepStateAction {\n type: 'SET_STEP_STATE';\n currentStep: GuidedTourStep;\n value: boolean;\n}\n\ninterface SetSkippedAction {\n type: 'SET_SKIPPED';\n value: boolean;\n}\n\ninterface SetGuidedTourVisibilityAction {\n type: 'SET_GUIDED_TOUR_VISIBILITY';\n value: boolean;\n}\n\ntype Action =\n | SetCurrentStepAction\n | SetStepStateAction\n | SetSkippedAction\n | SetGuidedTourVisibilityAction;\n\nconst reducer: React.Reducer<State, Action> = (state: State = initialState, action: Action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'SET_CURRENT_STEP': {\n draftState.currentStep = action.step;\n break;\n }\n case 'SET_STEP_STATE': {\n const [section, step] = action.currentStep.split('.') as [\n GuidedTourSectionKey,\n GuidedTourStepKey\n ];\n draftState.guidedTourState[section][step] = action.value;\n break;\n }\n case 'SET_SKIPPED': {\n draftState.isSkipped = action.value;\n break;\n }\n case 'SET_GUIDED_TOUR_VISIBILITY': {\n draftState.isGuidedTourVisible = action.value;\n break;\n }\n default: {\n return draftState;\n }\n }\n });\n\nconst initialiseState = (initialState: State) => {\n const copyInitialState = { ...initialState };\n const guidedTourLocaleStorage = auth.get('GUIDED_TOUR_COMPLETED_STEPS');\n const currentStepLocaleStorage = auth.get('GUIDED_TOUR_CURRENT_STEP');\n const skippedLocaleStorage = auth.get('GUIDED_TOUR_SKIPPED');\n\n if (Array.isArray(guidedTourLocaleStorage)) {\n guidedTourLocaleStorage.forEach((step) => {\n const [sectionName, stepName] = step.split('.');\n set(copyInitialState, ['guidedTourState', sectionName, stepName], true);\n });\n }\n\n // if current step when initializing mark it as done\n if (currentStepLocaleStorage) {\n const [sectionName, stepName] = currentStepLocaleStorage.split('.') as [\n GuidedTourSectionKey,\n GuidedTourStepKey\n ];\n set(copyInitialState, ['guidedTourState', sectionName, stepName], true);\n\n addCompletedStep(currentStepLocaleStorage as GuidedTourStep);\n\n auth.set(null, 'GUIDED_TOUR_CURRENT_STEP', true);\n }\n\n if (skippedLocaleStorage !== null) {\n set(copyInitialState, 'isSkipped', skippedLocaleStorage);\n }\n\n return copyInitialState;\n};\n\n/**\n * @description Add a completed step to the local storage if it does not already exist.\n */\nconst addCompletedStep = (completedStep: GuidedTourStep) => {\n const currentSteps = auth.get('GUIDED_TOUR_COMPLETED_STEPS') ?? [];\n\n if (!Array.isArray(currentSteps)) {\n return;\n }\n\n const isAlreadyStored = currentSteps.includes(completedStep);\n\n if (isAlreadyStored) {\n return;\n }\n\n auth.set([...currentSteps, completedStep], 'GUIDED_TOUR_COMPLETED_STEPS', true);\n};\n\nexport { GuidedTourProvider };\n","import * as React from 'react';\n\nimport defaultsDeep from 'lodash/defaultsDeep';\nimport { IntlProvider } from 'react-intl';\n\nimport { useTypedSelector } from '../core/store/hooks';\n\n/* -------------------------------------------------------------------------------------------------\n * LanguageProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface LanguageProviderProps {\n children: React.ReactNode;\n messages: Record<string, Record<string, string>>;\n}\n\nconst LanguageProvider = ({ children, messages }: LanguageProviderProps) => {\n const locale = useTypedSelector((state) => state.admin_app.language.locale);\n const appMessages = defaultsDeep(messages[locale], messages.en);\n\n return (\n <IntlProvider locale={locale} defaultLocale=\"en\" messages={appMessages} textComponent=\"span\">\n {children}\n </IntlProvider>\n );\n};\n\nexport { LanguageProvider };\nexport type { LanguageProviderProps };\n","import * as React from 'react';\n\nimport { DesignSystemProvider } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { useDispatch } from 'react-redux';\nimport { DefaultTheme, createGlobalStyle } from 'styled-components';\n\nimport { useTypedSelector } from '../core/store/hooks';\nimport { setAvailableThemes } from '../reducer';\n\ninterface ThemeProps {\n children: React.ReactNode;\n themes: {\n dark: DefaultTheme;\n light: DefaultTheme;\n };\n}\n\nconst Theme = ({ children, themes }: ThemeProps) => {\n const { currentTheme } = useTypedSelector((state) => state.admin_app.theme);\n const [systemTheme, setSystemTheme] = React.useState<'light' | 'dark'>();\n const { locale } = useIntl();\n const dispatch = useDispatch();\n\n // Listen to changes in the system theme\n React.useEffect(() => {\n const themeWatcher = window.matchMedia('(prefers-color-scheme: dark)');\n setSystemTheme(themeWatcher.matches ? 'dark' : 'light');\n\n const listener = (event: MediaQueryListEvent) => {\n setSystemTheme(event.matches ? 'dark' : 'light');\n };\n themeWatcher.addEventListener('change', listener);\n\n // Remove listener on cleanup\n return () => {\n themeWatcher.removeEventListener('change', listener);\n };\n }, []);\n\n React.useEffect(() => {\n dispatch(setAvailableThemes(Object.keys(themes)));\n }, [dispatch, themes]);\n\n const computedThemeName = currentTheme === 'system' ? systemTheme : currentTheme;\n\n return (\n <DesignSystemProvider\n locale={locale}\n /**\n * TODO: could we make this neater i.e. by setting up the context to throw\n * if it can't find it, that way the type is always fully defined and we're\n * not checking it all the time...\n */\n theme={themes?.[computedThemeName || 'light']}\n >\n {children}\n <GlobalStyle />\n </DesignSystemProvider>\n );\n};\n\nconst GlobalStyle = createGlobalStyle`\n body {\n background: ${({ theme }) => theme.colors.neutral100};\n }\n`;\n\nexport { Theme };\nexport type { ThemeProps };\n","import * as React from 'react';\n\nimport {\n AutoReloadOverlayBlockerProvider,\n CustomFieldsProvider,\n CustomFieldsProviderProps,\n LibraryProvider,\n LibraryProviderProps,\n NotificationsProvider,\n OverlayBlockerProvider,\n StrapiAppProvider,\n StrapiAppProviderProps,\n} from '@strapi/helper-plugin';\nimport { QueryClient, QueryClientProvider } from 'react-query';\nimport { Provider } from 'react-redux';\n\nimport { AuthProvider } from '../features/Auth';\n\nimport { GuidedTourProvider } from './GuidedTour/Provider';\nimport { LanguageProvider, LanguageProviderProps } from './LanguageProvider';\nimport { Theme, ThemeProps } from './Theme';\n\nimport type { Store } from '../core/store/configure';\n\nconst queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n refetchOnWindowFocus: false,\n },\n },\n});\n\ninterface ProvidersProps\n extends Pick<LanguageProviderProps, 'messages'>,\n Pick<CustomFieldsProviderProps, 'customFields'>,\n Pick<LibraryProviderProps, 'components' | 'fields'>,\n Pick<\n StrapiAppProviderProps,\n | 'getPlugin'\n | 'getAdminInjectedComponents'\n | 'menu'\n | 'plugins'\n | 'runHookParallel'\n | 'runHookSeries'\n | 'runHookWaterfall'\n | 'settings'\n >,\n Pick<ThemeProps, 'themes'> {\n children: React.ReactNode;\n store: Store;\n}\n\nconst Providers = ({\n children,\n components,\n customFields,\n fields,\n getAdminInjectedComponents,\n getPlugin,\n menu,\n messages,\n plugins,\n runHookParallel,\n runHookSeries,\n runHookWaterfall,\n settings,\n store,\n themes,\n}: ProvidersProps) => {\n return (\n <Provider store={store}>\n <AuthProvider>\n <LanguageProvider messages={messages}>\n <Theme themes={themes}>\n <QueryClientProvider client={queryClient}>\n <StrapiAppProvider\n getPlugin={getPlugin}\n getAdminInjectedComponents={getAdminInjectedComponents}\n menu={menu}\n plugins={plugins}\n runHookParallel={runHookParallel}\n runHookWaterfall={runHookWaterfall}\n runHookSeries={runHookSeries}\n settings={settings}\n >\n <LibraryProvider components={components} fields={fields}>\n <CustomFieldsProvider customFields={customFields}>\n <AutoReloadOverlayBlockerProvider>\n <OverlayBlockerProvider>\n <GuidedTourProvider>\n <NotificationsProvider>{children}</NotificationsProvider>\n </GuidedTourProvider>\n </OverlayBlockerProvider>\n </AutoReloadOverlayBlockerProvider>\n </CustomFieldsProvider>\n </LibraryProvider>\n </StrapiAppProvider>\n </QueryClientProvider>\n </Theme>\n </LanguageProvider>\n </AuthProvider>\n </Provider>\n );\n};\n\nexport { Providers };\n","/* eslint-disable check-file/filename-naming-convention */\nimport * as React from 'react';\n\nimport invariant from 'invariant';\n\nexport interface Component {\n name: string;\n Component: React.ComponentType;\n}\n\nexport class Components {\n components: Record<Component['name'], Component['Component']>;\n\n constructor() {\n this.components = {};\n }\n\n add(component: Component) {\n const { name, Component } = component;\n\n invariant(Component, 'A Component must be provided');\n invariant(name, 'A name must be provided');\n invariant(this.components[name] === undefined, 'A similar field already exists');\n\n this.components[name] = Component;\n }\n}\n","/* eslint-disable check-file/filename-naming-convention */\nimport invariant from 'invariant';\n\nimport type {\n CustomField,\n CustomFieldOption,\n CustomFieldOptionSection,\n CustomFieldUID,\n} from '@strapi/helper-plugin';\n\nconst ALLOWED_TYPES = [\n 'biginteger',\n 'boolean',\n 'date',\n 'datetime',\n 'decimal',\n 'email',\n 'enumeration',\n 'float',\n 'integer',\n 'json',\n 'password',\n 'richtext',\n 'string',\n 'text',\n 'time',\n 'uid',\n] as const;\n\nconst ALLOWED_ROOT_LEVEL_OPTIONS = [\n 'min',\n 'minLength',\n 'max',\n 'maxLength',\n 'required',\n 'regex',\n 'enum',\n 'unique',\n 'private',\n 'default',\n] as const;\n\nexport class CustomFields {\n customFields: Record<string, CustomField>;\n\n constructor() {\n this.customFields = {};\n }\n\n register(customFields: CustomField | CustomField[]) {\n if (Array.isArray(customFields)) {\n // If several custom fields are passed, register them one by one\n customFields.forEach((customField) => {\n this.register(customField);\n });\n } else {\n // Handle individual custom field\n const { name, pluginId, type, intlLabel, intlDescription, components, options } =\n customFields;\n\n // Ensure required attributes are provided\n invariant(name, 'A name must be provided');\n invariant(type, 'A type must be provided');\n invariant(intlLabel, 'An intlLabel must be provided');\n invariant(intlDescription, 'An intlDescription must be provided');\n invariant(components, 'A components object must be provided');\n invariant(components.Input, 'An Input component must be provided');\n\n // Ensure the type is valid\n invariant(\n ALLOWED_TYPES.includes(type),\n `Custom field type: '${type}' is not a valid Strapi type or it can't be used with a Custom Field`\n );\n\n // Ensure name has no special characters\n const isValidObjectKey = /^(?![0-9])[a-zA-Z0-9$_-]+$/g;\n invariant(\n isValidObjectKey.test(name),\n `Custom field name: '${name}' is not a valid object key`\n );\n\n // Ensure options have valid name paths\n const allFormOptions = [...(options?.base || []), ...(options?.advanced || [])];\n\n if (allFormOptions.length) {\n const optionPathValidations = allFormOptions.reduce(optionsValidationReducer, []);\n\n optionPathValidations.forEach(({ isValidOptionPath, errorMessage }) => {\n invariant(isValidOptionPath, errorMessage);\n });\n }\n\n // When no plugin is specified, default to the global namespace\n const uid: CustomFieldUID = pluginId ? `plugin::${pluginId}.${name}` : `global::${name}`;\n\n // Ensure the uid is unique\n const uidAlreadyUsed = Object.prototype.hasOwnProperty.call(this.customFields, uid);\n invariant(!uidAlreadyUsed, `Custom field: '${uid}' has already been registered`);\n\n this.customFields[uid] = customFields;\n }\n }\n\n getAll() {\n return this.customFields;\n }\n\n get(uid: string): CustomField | undefined {\n return this.customFields[uid];\n }\n}\n\ninterface OptionValidation {\n isValidOptionPath: boolean;\n errorMessage: string;\n}\n\nconst optionsValidationReducer = (\n acc: OptionValidation[],\n option: CustomFieldOptionSection | CustomFieldOption\n): OptionValidation[] => {\n if ('items' in option) {\n return option.items.reduce(optionsValidationReducer, acc);\n }\n\n if (!option.name) {\n acc.push({\n isValidOptionPath: false,\n errorMessage: \"The 'name' property is required on an options object\",\n });\n } else {\n acc.push({\n isValidOptionPath:\n option.name.startsWith('options') || ALLOWED_ROOT_LEVEL_OPTIONS.includes(option.name),\n errorMessage: `'${option.name}' must be prefixed with 'options.'`,\n });\n }\n\n return acc;\n};\n","/* eslint-disable check-file/filename-naming-convention */\nimport * as React from 'react';\n\nimport invariant from 'invariant';\n\nexport interface Field {\n type: string;\n Component: React.ComponentType;\n}\n\nexport class Fields {\n fields: Record<Field['type'], Field['Component']>;\n\n constructor() {\n this.fields = {};\n }\n\n add(field: Field) {\n const { type, Component } = field;\n\n invariant(Component, 'A Component must be provided');\n invariant(type, 'A type must be provided');\n\n this.fields[type] = Component;\n }\n}\n","/* eslint-disable check-file/filename-naming-convention */\nimport { Middleware } from '@reduxjs/toolkit';\n\nimport { RootState } from '../store/configure';\n\ntype TypedMiddleware = () => Middleware<object, RootState>;\n\nclass Middlewares {\n middlewares: Array<TypedMiddleware>;\n\n constructor() {\n this.middlewares = [];\n }\n\n add(middleware: TypedMiddleware) {\n this.middlewares.push(middleware);\n }\n}\n\nexport { Middlewares, TypedMiddleware as Middleware };\n","/* eslint-disable check-file/filename-naming-convention */\nimport { Plugin as IPlugin } from '@strapi/helper-plugin';\n\nexport interface PluginConfig\n extends Pick<IPlugin, 'apis' | 'initializer' | 'injectionZones' | 'isReady' | 'name'> {\n id: string;\n}\n\nexport class Plugin implements IPlugin {\n apis: PluginConfig['apis'];\n initializer: PluginConfig['initializer'];\n injectionZones: PluginConfig['injectionZones'];\n isReady: PluginConfig['isReady'];\n name: PluginConfig['name'];\n pluginId: PluginConfig['id'];\n\n constructor(pluginConf: PluginConfig) {\n this.apis = pluginConf.apis || {};\n this.initializer = pluginConf.initializer || null;\n this.injectionZones = pluginConf.injectionZones || {};\n this.isReady = pluginConf.isReady !== undefined ? pluginConf.isReady : true;\n this.name = pluginConf.name;\n this.pluginId = pluginConf.id;\n }\n\n getInjectedComponents(containerName: string, blockName: string) {\n try {\n return this.injectionZones[containerName][blockName] || [];\n } catch (err) {\n console.error('Cannot get injected component', err);\n\n return [];\n }\n }\n\n injectComponent(\n containerName: string,\n blockName: string,\n component: ReturnType<IPlugin['getInjectedComponents']>[number]\n ) {\n try {\n this.injectionZones[containerName][blockName].push(component);\n } catch (err) {\n console.error('Cannot inject component', err);\n }\n }\n}\n","/* eslint-disable check-file/filename-naming-convention */\n\nimport { Reducer, ReducersMapObject } from '@reduxjs/toolkit';\n\ninterface ReducerConstructorArgs {\n appReducers?: ReducersMapObject;\n}\n\nexport class Reducers {\n reducers: ReducersMapObject;\n\n constructor({ appReducers = {} }: ReducerConstructorArgs = {}) {\n this.reducers = { ...appReducers };\n }\n\n add(reducerName: string, reducer: Reducer) {\n this.reducers[reducerName] = reducer;\n }\n}\n","import * as React from 'react';\n\nimport {\n LoadingIndicatorPage,\n Permission,\n RBACContext,\n RBACContextValue,\n} from '@strapi/helper-plugin';\nimport produce from 'immer';\n\nimport { useTypedSelector, useTypedDispatch } from '../core/store/hooks';\n\n/* -------------------------------------------------------------------------------------------------\n * RBACProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RBACProviderProps {\n children: React.ReactNode;\n permissions: Permission[];\n refetchPermissions: RBACContextValue['refetchPermissions'];\n}\n\nconst RBACProvider = ({ children, permissions, refetchPermissions }: RBACProviderProps) => {\n const allPermissions = useTypedSelector((state) => state.rbacProvider.allPermissions);\n\n const dispatch = useTypedDispatch();\n\n React.useEffect(() => {\n dispatch(setPermissionsAction(permissions));\n\n return () => {\n dispatch(resetStoreAction());\n };\n }, [permissions, dispatch]);\n\n if (!allPermissions) {\n return <LoadingIndicatorPage />;\n }\n\n return (\n <RBACContext.Provider value={{ allPermissions, refetchPermissions }}>\n {children}\n </RBACContext.Provider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * RBACReducer\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RBACState {\n allPermissions: null | Permission[];\n collectionTypesRelatedPermissions: Record<string, Record<string, Permission[]>>;\n}\n\nconst initialState = {\n allPermissions: null,\n collectionTypesRelatedPermissions: {},\n};\n\nconst RESET_STORE = 'StrapiAdmin/RBACProvider/RESET_STORE';\nconst SET_PERMISSIONS = 'StrapiAdmin/RBACProvider/SET_PERMISSIONS';\n\ninterface ResetStoreAction {\n type: typeof RESET_STORE;\n}\n\nconst resetStoreAction = (): ResetStoreAction => ({ type: RESET_STORE });\n\ninterface SetPermissionsAction {\n type: typeof SET_PERMISSIONS;\n permissions: Permission[];\n}\n\nconst setPermissionsAction = (\n permissions: SetPermissionsAction['permissions']\n): SetPermissionsAction => ({\n type: SET_PERMISSIONS,\n permissions,\n});\n\ntype Actions = ResetStoreAction | SetPermissionsAction;\n\nconst RBACReducer = (state: RBACState = initialState, action: Actions) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case SET_PERMISSIONS: {\n draftState.allPermissions = action.permissions;\n draftState.collectionTypesRelatedPermissions = action.permissions\n .filter((perm) => perm.subject)\n .reduce<Record<string, Record<string, Permission[]>>>((acc, current) => {\n const { subject, action } = current;\n\n if (!subject) return acc;\n\n if (!acc[subject]) {\n acc[subject] = {};\n }\n\n acc[subject] = acc[subject][action]\n ? { ...acc[subject], [action]: [...acc[subject][action], current] }\n : { ...acc[subject], [action]: [current] };\n\n return acc;\n }, {});\n break;\n }\n case RESET_STORE: {\n return initialState;\n }\n default:\n return state;\n }\n });\n\nexport { RBACProvider, RBACReducer, resetStoreAction, setPermissionsAction };\nexport type {\n RBACState,\n Actions,\n RBACProviderProps,\n ResetStoreAction,\n SetPermissionsAction,\n Permission,\n};\n","import { useEffect } from 'react';\n\nimport { Permission } from '@strapi/helper-plugin';\nimport produce from 'immer';\n\nimport { useTypedDispatch, useTypedSelector } from '../../core/store/hooks';\n\nimport type { RBACState } from '../../components/RBACProvider';\n\n/* -------------------------------------------------------------------------------------------------\n * useSyncRbac\n * -----------------------------------------------------------------------------------------------*/\n\nconst useSyncRbac = (\n query: { plugins?: object },\n collectionTypeUID: string,\n containerName = 'listView'\n): {\n isValid: boolean;\n permissions: Permission[] | null;\n} => {\n const dispatch = useTypedDispatch();\n\n const collectionTypesRelatedPermissions = useTypedSelector(\n (state) => state.rbacProvider.collectionTypesRelatedPermissions\n );\n const permissions = useTypedSelector((state) => state['content-manager_rbacManager'].permissions);\n\n const relatedPermissions = collectionTypesRelatedPermissions[collectionTypeUID];\n\n useEffect(() => {\n if (relatedPermissions) {\n dispatch({\n type: SET_PERMISSIONS,\n permissions: relatedPermissions,\n __meta__: {\n plugins: query ? query.plugins : null,\n containerName,\n },\n });\n\n return () => {\n dispatch({ type: RESET_PERMISSIONS });\n };\n }\n\n return () => {};\n }, [relatedPermissions, dispatch, query, containerName]);\n\n // Check if the permissions are related to the current collectionTypeUID\n const isPermissionMismatch =\n permissions?.some((permission) => permission.subject !== collectionTypeUID) ?? true;\n\n return {\n isValid: Boolean(permissions) && !isPermissionMismatch,\n permissions,\n };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Reducer\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SyncRbacState {\n permissions: RBACState['collectionTypesRelatedPermissions'][string][string] | null;\n}\n\nconst initialState = {\n permissions: null,\n} satisfies SyncRbacState;\n\nconst SET_PERMISSIONS = 'ContentManager/RBACManager/SET_PERMISSIONS';\nconst RESET_PERMISSIONS = 'ContentManager/RBACManager/RESET_PERMISSIONS';\n\ninterface SetPermissionsAction {\n type: typeof SET_PERMISSIONS;\n permissions: RBACState['collectionTypesRelatedPermissions'][string];\n __meta__?: {\n plugins: object;\n containerName: string;\n };\n}\n\ninterface ResetPermissionsAction {\n type: typeof RESET_PERMISSIONS;\n}\n\ntype Action = SetPermissionsAction | ResetPermissionsAction;\n\nconst reducer = (state: SyncRbacState = initialState, action: Action) =>\n // eslint-disable-next-line consistent-return\n produce(state, (draftState) => {\n switch (action.type) {\n case SET_PERMISSIONS: {\n draftState.permissions = Object.entries(action.permissions).reduce<\n NonNullable<SyncRbacState['permissions']>\n >((acc, current) => {\n return [...acc, ...current[1]];\n }, []);\n break;\n }\n case RESET_PERMISSIONS: {\n draftState.permissions = null;\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport { useSyncRbac, reducer };\nexport type { SyncRbacState, RBACState };\n","import * as React from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport { DragLayerMonitor, XYCoord, useDragLayer } from 'react-dnd';\n\nfunction getStyle(\n initialOffset: XYCoord | null,\n currentOffset: XYCoord | null,\n mouseOffset: XYCoord | null\n) {\n if (!initialOffset || !currentOffset || !mouseOffset) {\n return { display: 'none' };\n }\n\n const { x, y } = mouseOffset;\n\n return {\n transform: `translate(${x}px, ${y}px)`,\n };\n}\n\nexport interface DragLayerProps {\n renderItem: (item: {\n /**\n * TODO: it'd be great if we could make this a union where the type infers the item.\n */\n item: any;\n type: ReturnType<DragLayerMonitor['getItemType']>;\n }) => React.ReactNode;\n}\n\nconst DragLayer = ({ renderItem }: DragLayerProps) => {\n const { itemType, isDragging, item, initialOffset, currentOffset, mouseOffset } = useDragLayer(\n (monitor) => ({\n item: monitor.getItem(),\n itemType: monitor.getItemType(),\n initialOffset: monitor.getInitialSourceClientOffset(),\n currentOffset: monitor.getSourceClientOffset(),\n isDragging: monitor.isDragging(),\n mouseOffset: monitor.getClientOffset(),\n })\n );\n\n if (!isDragging) {\n return null;\n }\n\n return (\n <Box\n height=\"100%\"\n left={0}\n position=\"fixed\"\n pointerEvents=\"none\"\n top={0}\n zIndex={100}\n width=\"100%\"\n >\n <Box style={getStyle(initialOffset, currentOffset, mouseOffset)}>\n {renderItem({ type: itemType, item })}\n </Box>\n </Box>\n );\n};\n\nexport { DragLayer };\n","import { Flex, Typography } from '@strapi/design-system';\nimport { pxToRem } from '@strapi/helper-plugin';\nimport { Cross, Drag, Pencil } from '@strapi/icons';\nimport styled from 'styled-components';\n\ninterface CardDragPreviewProps {\n labelField: string;\n isSibling?: boolean;\n}\n\nconst CardDragPreview = ({ labelField, isSibling = false }: CardDragPreviewProps) => {\n return (\n <FieldContainer\n background={isSibling ? 'neutral100' : 'primary100'}\n display=\"inline-flex\"\n gap={3}\n hasRadius\n justifyContent=\"space-between\"\n isSibling={isSibling}\n max-height={pxToRem(32)}\n maxWidth=\"min-content\"\n >\n <Flex gap={3}>\n <DragButton alignItems=\"center\" cursor=\"all-scroll\" padding={3}>\n <Drag />\n </DragButton>\n\n <TypographyMaxWidth\n textColor={isSibling ? undefined : 'primary600'}\n fontWeight=\"bold\"\n ellipsis\n >\n {labelField}\n </TypographyMaxWidth>\n </Flex>\n\n <Flex>\n <ActionBox alignItems=\"center\">\n <Pencil />\n </ActionBox>\n\n <ActionBox alignItems=\"center\">\n <Cross />\n </ActionBox>\n </Flex>\n </FieldContainer>\n );\n};\n\nconst ActionBox = styled(Flex)`\n height: ${({ theme }) => theme.spaces[7]};\n\n &:last-child {\n padding: 0 ${({ theme }) => theme.spaces[3]};\n }\n`;\n\nconst DragButton = styled(ActionBox)`\n border-right: 1px solid ${({ theme }) => theme.colors.primary200};\n\n svg {\n width: ${12 / 16}rem;\n height: ${12 / 16}rem;\n }\n`;\n\nconst FieldContainer = styled(Flex)<{ isSibling: boolean }>`\n border: 1px solid\n ${({ theme, isSibling }) => (isSibling ? theme.colors.neutral150 : theme.colors.primary200)};\n\n svg {\n width: ${10 / 16}rem;\n height: ${10 / 16}rem;\n\n path {\n fill: ${({ theme, isSibling }) => (isSibling ? undefined : theme.colors.primary600)};\n }\n }\n`;\n\nconst TypographyMaxWidth = styled(Typography)`\n max-width: ${72 / 16}rem;\n`;\n\nexport { CardDragPreview };\nexport type { CardDragPreviewProps };\n","import { Flex, IconButton, Typography } from '@strapi/design-system';\nimport { pxToRem } from '@strapi/helper-plugin';\nimport { CarretDown, Drag, Trash } from '@strapi/icons';\nimport styled from 'styled-components';\n\ninterface ComponentDragPreviewProps {\n displayedValue: string;\n}\n\nconst ComponentDragPreview = ({ displayedValue }: ComponentDragPreviewProps) => {\n return (\n <Flex\n background=\"neutral0\"\n borderColor=\"neutral200\"\n justifyContent=\"space-between\"\n gap={3}\n padding={3}\n width={pxToRem(300)}\n >\n <ToggleButton type=\"button\">\n <Flex gap={6}>\n <DropdownIconWrapper\n alignItems=\"center\"\n justifyContent=\"center\"\n background=\"neutral200\"\n height={pxToRem(32)}\n width={pxToRem(32)}\n >\n <CarretDown />\n </DropdownIconWrapper>\n\n <Flex maxWidth={pxToRem(150)}>\n <Typography textColor=\"neutral700\" ellipsis>\n {displayedValue}\n </Typography>\n </Flex>\n </Flex>\n </ToggleButton>\n\n <Flex gap={2}>\n <IconButton aria-label=\"\" borderWidth={0}>\n <Trash />\n </IconButton>\n\n <IconButton aria-label=\"\" borderWidth={0}>\n <Drag />\n </IconButton>\n </Flex>\n </Flex>\n );\n};\n\nconst DropdownIconWrapper = styled(Flex)`\n border-radius: 50%;\n\n svg {\n height: ${6 / 16}rem;\n width: ${11 / 16}rem;\n > path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n }\n`;\n\n// TODO: we shouldn't have to reset a whole button\nconst ToggleButton = styled.button`\n border: none;\n background: transparent;\n display: block;\n width: 100%;\n text-align: unset;\n padding: 0;\n`;\n\nexport { ComponentDragPreview };\nexport type { ComponentDragPreviewProps };\n","const getTranslation = (id: string) => `content-manager.${id}`;\n\nexport { getTranslation };\n","import * as React from 'react';\n\nexport type UseKeyboardDragAndDropCallbacks<TIndex extends number | Array<number> = number> = {\n onCancel?: (index: TIndex) => void;\n onDropItem?: (currentIndex: TIndex, newIndex?: TIndex) => void;\n onGrabItem?: (index: TIndex) => void;\n onMoveItem?: (newIndex: TIndex, currentIndex: TIndex) => void;\n};\n\n/**\n * Utility hook designed to implement keyboard accessibile drag and drop by\n * returning an onKeyDown handler to be passed to the drag icon button.\n *\n * @internal - You should use `useDragAndDrop` instead.\n */\nexport const useKeyboardDragAndDrop = <TIndex extends number | Array<number> = number>(\n active: boolean,\n index: TIndex,\n { onCancel, onDropItem, onGrabItem, onMoveItem }: UseKeyboardDragAndDropCallbacks<TIndex>\n) => {\n const [isSelected, setIsSelected] = React.useState(false);\n\n const handleMove = (movement: 'UP' | 'DOWN') => {\n if (!isSelected) {\n return;\n }\n if (typeof index === 'number' && onMoveItem) {\n if (movement === 'UP') {\n onMoveItem((index - 1) as TIndex, index);\n } else if (movement === 'DOWN') {\n onMoveItem((index + 1) as TIndex, index);\n }\n }\n };\n\n const handleDragClick = () => {\n if (isSelected) {\n if (onDropItem) {\n onDropItem(index);\n }\n setIsSelected(false);\n } else {\n if (onGrabItem) {\n onGrabItem(index);\n }\n setIsSelected(true);\n }\n };\n\n const handleCancel = () => {\n if (isSelected) {\n setIsSelected(false);\n\n if (onCancel) {\n onCancel(index);\n }\n }\n };\n\n const handleKeyDown: React.KeyboardEventHandler<HTMLButtonElement> = (e) => {\n if (!active) {\n return;\n }\n\n if (e.key === 'Tab' && !isSelected) {\n return;\n }\n\n e.preventDefault();\n\n switch (e.key) {\n case ' ':\n case 'Enter':\n handleDragClick();\n break;\n\n case 'Escape':\n handleCancel();\n break;\n\n case 'ArrowDown':\n case 'ArrowRight':\n handleMove('DOWN');\n break;\n\n case 'ArrowUp':\n case 'ArrowLeft':\n handleMove('UP');\n break;\n\n default:\n }\n };\n\n return handleKeyDown;\n};\n","import * as React from 'react';\n\nimport {\n useDrag,\n useDrop,\n type HandlerManager,\n type ConnectDragSource,\n type ConnectDropTarget,\n type ConnectDragPreview,\n type DragSourceMonitor,\n} from 'react-dnd';\n\nimport {\n useKeyboardDragAndDrop,\n type UseKeyboardDragAndDropCallbacks,\n} from './useKeyboardDragAndDrop';\n\nimport type { Entity } from '@strapi/types';\n\nconst DIRECTIONS = {\n UPWARD: 'upward',\n DOWNWARD: 'downward',\n} as const;\n\nconst DROP_SENSITIVITY = {\n REGULAR: 'regular',\n IMMEDIATE: 'immediate',\n} as const;\n\ninterface UseDragAndDropOptions<\n TIndex extends number | Array<number> = number,\n TItem extends { index: TIndex } = { index: TIndex }\n> extends UseKeyboardDragAndDropCallbacks<TIndex> {\n type?: string;\n index: TIndex;\n item?: TItem;\n onStart?: () => void;\n onEnd?: () => void;\n dropSensitivity?: (typeof DROP_SENSITIVITY)[keyof typeof DROP_SENSITIVITY];\n}\n\ntype Identifier = ReturnType<HandlerManager['getHandlerId']>;\n\ntype UseDragAndDropReturn = [\n props: {\n handlerId: Identifier;\n isDragging: boolean;\n handleKeyDown: (event: React.KeyboardEvent<HTMLButtonElement>) => void;\n isOverDropTarget: boolean;\n direction: (typeof DIRECTIONS)[keyof typeof DIRECTIONS] | null;\n },\n objectRef: React.RefObject<HTMLElement>,\n dropRef: ConnectDropTarget,\n dragRef: ConnectDragSource,\n dragPreviewRef: ConnectDragPreview\n];\n\ntype DropCollectedProps = {\n handlerId: Identifier;\n isOver: boolean;\n};\n\n/**\n * A utility hook abstracting the general drag and drop hooks from react-dnd.\n * Centralising the same behaviours and by default offering keyboard support.\n */\nconst useDragAndDrop = <\n TIndex extends number | Array<number>,\n TItem extends { index: TIndex; id?: Entity.ID; [key: string]: unknown }\n>(\n active: boolean,\n {\n type = 'STRAPI_DND',\n index,\n item,\n onStart,\n onEnd,\n onGrabItem,\n onDropItem,\n onCancel,\n onMoveItem,\n dropSensitivity = DROP_SENSITIVITY.REGULAR,\n }: UseDragAndDropOptions<TIndex, TItem>\n): UseDragAndDropReturn => {\n const objectRef = React.useRef<HTMLElement>(null);\n\n const [{ handlerId, isOver }, dropRef] = useDrop<TItem, void, DropCollectedProps>({\n accept: type,\n collect(monitor) {\n return {\n handlerId: monitor.getHandlerId(),\n isOver: monitor.isOver({ shallow: true }),\n };\n },\n drop(item) {\n const draggedIndex = item.index;\n const newIndex = index;\n\n if (isOver && onDropItem) {\n onDropItem(draggedIndex, newIndex);\n }\n },\n hover(item, monitor) {\n if (!objectRef.current || !onMoveItem) {\n return;\n }\n\n const dragIndex = item.index;\n const newIndex = index;\n\n const hoverBoundingRect = objectRef.current?.getBoundingClientRect();\n const hoverMiddleY = (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;\n const clientOffset = monitor.getClientOffset();\n if (!clientOffset) return;\n\n const hoverClientY = clientOffset && clientOffset.y - hoverBoundingRect.top;\n if (typeof dragIndex === 'number' && typeof newIndex === 'number') {\n if (dragIndex === newIndex) {\n // Don't replace items with themselves\n return;\n }\n\n if (dropSensitivity === DROP_SENSITIVITY.REGULAR) {\n // Dragging downwards\n if (dragIndex < newIndex && hoverClientY < hoverMiddleY) {\n return;\n }\n\n // Dragging upwards\n if (dragIndex > newIndex && hoverClientY > hoverMiddleY) {\n return;\n }\n }\n\n // Time to actually perform the action\n onMoveItem(newIndex, dragIndex);\n item.index = newIndex;\n } else {\n // Using numbers as indices doesn't work for nested list items with path like [1, 1, 0]\n if (Array.isArray(dragIndex) && Array.isArray(newIndex))\n if (dropSensitivity === DROP_SENSITIVITY.REGULAR) {\n // Indices comparison to find item position in nested list\n const minLength = Math.min(dragIndex.length, newIndex.length);\n let areEqual = true;\n let isLessThan = false;\n let isGreaterThan = false;\n\n for (let i = 0; i < minLength; i++) {\n if (dragIndex[i] < newIndex[i]) {\n isLessThan = true;\n areEqual = false;\n break;\n } else if (dragIndex[i] > newIndex[i]) {\n isGreaterThan = true;\n areEqual = false;\n break;\n }\n }\n\n // Don't replace items with themselves\n if (areEqual && dragIndex.length === newIndex.length) {\n return;\n }\n // Dragging downwards\n if (isLessThan && !isGreaterThan && hoverClientY < hoverMiddleY) {\n return;\n }\n\n // Dragging upwards\n if (isGreaterThan && !isLessThan && hoverClientY > hoverMiddleY) {\n return;\n }\n }\n onMoveItem(newIndex, dragIndex);\n item.index = newIndex;\n }\n },\n });\n\n const getDragDirection = (monitor: DragSourceMonitor<TItem, void>) => {\n if (\n monitor &&\n monitor.isDragging() &&\n !monitor.didDrop() &&\n monitor.getInitialClientOffset() &&\n monitor.getClientOffset()\n ) {\n const deltaY = monitor.getInitialClientOffset()!.y - monitor.getClientOffset()!.y;\n\n if (deltaY > 0) return DIRECTIONS.UPWARD;\n\n if (deltaY < 0) return DIRECTIONS.DOWNWARD;\n\n return null;\n }\n\n return null;\n };\n\n const [{ isDragging, direction }, dragRef, dragPreviewRef] = useDrag({\n type,\n item() {\n if (onStart) {\n onStart();\n }\n\n /**\n * This will be attached and it helps define the preview sizes\n * when a component is flexy e.g. Relations\n */\n const { width } = objectRef.current?.getBoundingClientRect() ?? {};\n\n return { index, width, ...item };\n },\n end() {\n if (onEnd) {\n onEnd();\n }\n },\n canDrag: active,\n /**\n * This is useful when the item is in a virtualized list.\n * However, if we don't have an ID then we want the libraries\n * defaults to take care of this.\n */\n isDragging: item?.id\n ? (monitor) => {\n return item.id === monitor.getItem().id;\n }\n : undefined,\n collect: (monitor) => ({\n isDragging: monitor.isDragging(),\n initialOffset: monitor.getInitialClientOffset(),\n currentOffset: monitor.getClientOffset(),\n direction: getDragDirection(monitor),\n }),\n });\n\n const handleKeyDown = useKeyboardDragAndDrop(active, index, {\n onGrabItem,\n onDropItem,\n onCancel,\n onMoveItem,\n });\n\n return [\n { handlerId, isDragging, handleKeyDown, isOverDropTarget: isOver, direction },\n objectRef,\n dropRef,\n dragRef,\n dragPreviewRef,\n ];\n};\n\nexport {\n useDragAndDrop,\n UseDragAndDropReturn,\n UseDragAndDropOptions,\n DIRECTIONS,\n DROP_SENSITIVITY,\n};\n","import { useEffect, useRef } from 'react';\n\nexport const usePrev = <T>(value: T): T | undefined => {\n const ref = useRef<T>();\n\n useEffect(() => {\n ref.current = value;\n }, [value]);\n\n return ref.current;\n};\n","export const ItemTypes = {\n COMPONENT: 'component',\n EDIT_FIELD: 'editField',\n FIELD: 'field',\n DYNAMIC_ZONE: 'dynamicZone',\n RELATION: 'relation',\n BLOCKS: 'blocks',\n} as const;\n","import { MutableRefObject, Ref } from 'react';\n\ntype PossibleRef<T> = Ref<T> | undefined;\n\nconst setRef = <T>(ref: PossibleRef<T>, value: T) => {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref !== null && ref !== undefined) {\n (ref as MutableRefObject<T>).current = value;\n }\n};\n\n/**\n * A utility to compose multiple refs together\n * Accepts callback refs and RefObject(s)\n */\nexport const composeRefs = <T>(...refs: PossibleRef<T>[]) => {\n return (node: T) => refs.forEach((ref) => setRef(ref, node));\n};\n","import * as React from 'react';\n\nimport {\n Status,\n Box,\n Link,\n Icon,\n Flex,\n TextButton,\n Typography,\n Tooltip,\n VisuallyHidden,\n Combobox,\n IconButton,\n FlexProps,\n ComboboxOption,\n ComboboxProps,\n} from '@strapi/design-system';\nimport { pxToRem, useFocusInputField } from '@strapi/helper-plugin';\nimport { Cross, Drag, Refresh } from '@strapi/icons';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport { FixedSizeList, FixedSizeList as List, ListChildComponentProps } from 'react-window';\nimport styled from 'styled-components';\n\nimport {\n UseDragAndDropOptions,\n useDragAndDrop,\n DROP_SENSITIVITY,\n} from '../../hooks/useDragAndDrop';\nimport { usePrev } from '../../hooks/usePrev';\nimport { ItemTypes } from '../../utils/dragAndDrop';\nimport { composeRefs } from '../../utils/refs';\nimport { getTranslation } from '../../utils/translations';\n\nimport type { NormalizedRelation } from './utils/normalizeRelations';\nimport type { Contracts } from '@strapi/plugin-content-manager/_internal/shared';\nimport type { Entity } from '@strapi/types';\n\nconst RELATION_ITEM_HEIGHT = 50;\nconst RELATION_GUTTER = 4;\n\n/* -------------------------------------------------------------------------------------------------\n * RelationInput\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RelationInputProps\n extends Pick<\n ComboboxProps,\n 'disabled' | 'error' | 'id' | 'labelAction' | 'placeholder' | 'required'\n >,\n Pick<RelationItemProps, 'onCancel' | 'onDropItem' | 'onGrabItem' | 'iconButtonAriaLabel'> {\n canReorder: boolean;\n description: ComboboxProps['hint'];\n numberOfRelationsToDisplay: number;\n label: string;\n labelLoadMore?: string;\n labelDisconnectRelation: string;\n listAriaDescription: string;\n liveText: string;\n loadingMessage: string;\n name: string;\n noRelationsMessage: string;\n onRelationConnect: (relation: Contracts.Relations.RelationResult) => void;\n onRelationLoadMore: () => void;\n onRelationDisconnect: (relation: NormalizedRelation) => void;\n onRelationReorder?: (currentIndex: number, newIndex: number) => void;\n onSearchNextPage: () => void;\n onSearch: (searchTerm?: string) => void;\n publicationStateTranslations: {\n draft: string;\n published: string;\n };\n relations: {\n data: NormalizedRelation[];\n isLoading: boolean;\n isFetchingNextPage: boolean;\n hasNextPage?: boolean;\n };\n searchResults: {\n data: NormalizedRelation[];\n isLoading: boolean;\n hasNextPage?: boolean;\n };\n size: number;\n}\n\nconst RelationInput = ({\n canReorder,\n description,\n disabled,\n error,\n iconButtonAriaLabel,\n id,\n name,\n numberOfRelationsToDisplay,\n label,\n labelAction,\n labelLoadMore,\n labelDisconnectRelation,\n listAriaDescription,\n liveText,\n loadingMessage,\n onCancel,\n onDropItem,\n onGrabItem,\n noRelationsMessage,\n onRelationConnect,\n onRelationLoadMore,\n onRelationDisconnect,\n onRelationReorder,\n onSearchNextPage,\n onSearch,\n placeholder,\n publicationStateTranslations,\n required,\n relations: paginatedRelations,\n searchResults,\n size,\n}: RelationInputProps) => {\n const [textValue, setTextValue] = React.useState<string | undefined>('');\n const [overflow, setOverflow] = React.useState<'top' | 'bottom' | 'top-bottom'>();\n\n const listRef = React.useRef<FixedSizeList>(null);\n const outerListRef = React.useRef<HTMLUListElement>(null);\n\n const fieldRef = useFocusInputField(name);\n\n const { data } = searchResults;\n\n const relations = paginatedRelations.data;\n const totalNumberOfRelations = relations.length ?? 0;\n\n const dynamicListHeight = React.useMemo(\n () =>\n totalNumberOfRelations > numberOfRelationsToDisplay\n ? Math.min(totalNumberOfRelations, numberOfRelationsToDisplay) *\n (RELATION_ITEM_HEIGHT + RELATION_GUTTER) +\n RELATION_ITEM_HEIGHT / 2\n : Math.min(totalNumberOfRelations, numberOfRelationsToDisplay) *\n (RELATION_ITEM_HEIGHT + RELATION_GUTTER),\n [totalNumberOfRelations, numberOfRelationsToDisplay]\n );\n\n const shouldDisplayLoadMoreButton = !!labelLoadMore && paginatedRelations.hasNextPage;\n\n const options = React.useMemo(\n () =>\n data\n .flat()\n .filter(Boolean)\n .map((result) => ({\n ...result,\n value: result.id,\n label: result.mainField,\n })),\n [data]\n );\n\n React.useEffect(() => {\n if (totalNumberOfRelations <= numberOfRelationsToDisplay) {\n return setOverflow(undefined);\n }\n\n const handleNativeScroll = (e: Event) => {\n const el = e.target as HTMLUListElement;\n const parentScrollContainerHeight = (el.parentNode as HTMLDivElement).scrollHeight;\n const maxScrollBottom = el.scrollHeight - el.scrollTop;\n\n if (el.scrollTop === 0) {\n return setOverflow('bottom');\n }\n\n if (maxScrollBottom === parentScrollContainerHeight) {\n return setOverflow('top');\n }\n\n return setOverflow('top-bottom');\n };\n\n const outerListRefCurrent = outerListRef?.current;\n\n if (!paginatedRelations.isLoading && relations.length > 0 && outerListRefCurrent) {\n outerListRef.current.addEventListener('scroll', handleNativeScroll);\n }\n\n return () => {\n if (outerListRefCurrent) {\n outerListRefCurrent.removeEventListener('scroll', handleNativeScroll);\n }\n };\n }, [paginatedRelations, relations, numberOfRelationsToDisplay, totalNumberOfRelations]);\n\n const handleMenuOpen = (isOpen?: boolean) => {\n if (isOpen) {\n onSearch(textValue);\n }\n };\n\n const handleUpdatePositionOfRelation = (newIndex: number, currentIndex: number) => {\n if (onRelationReorder && newIndex >= 0 && newIndex < relations.length) {\n onRelationReorder(currentIndex, newIndex);\n }\n };\n\n const previewRelationsLength = usePrev(relations.length);\n const updatedRelationsWith = React.useRef<'onChange' | 'loadMore'>();\n\n const handleLoadMore = () => {\n updatedRelationsWith.current = 'loadMore';\n onRelationLoadMore();\n };\n\n React.useEffect(() => {\n if (updatedRelationsWith.current === 'onChange') {\n setTextValue('');\n }\n\n if (\n updatedRelationsWith.current === 'onChange' &&\n relations.length !== previewRelationsLength\n ) {\n listRef.current?.scrollToItem(relations.length, 'end');\n updatedRelationsWith.current = undefined;\n } else if (\n updatedRelationsWith.current === 'loadMore' &&\n relations.length !== previewRelationsLength\n ) {\n listRef.current?.scrollToItem(0, 'start');\n updatedRelationsWith.current = undefined;\n }\n }, [previewRelationsLength, relations]);\n\n const ariaDescriptionId = `${name}-item-instructions`;\n\n return (\n <Flex\n direction=\"column\"\n gap={3}\n justifyContent=\"space-between\"\n alignItems=\"stretch\"\n wrap=\"wrap\"\n >\n <Flex direction=\"row\" alignItems=\"end\" justifyContent=\"end\" gap={2} width=\"100%\">\n <ComboboxWrapper marginRight=\"auto\" maxWidth={size <= 6 ? '100%' : '70%'} width=\"100%\">\n <Combobox\n ref={fieldRef}\n autocomplete=\"none\"\n error={error}\n name={name}\n hint={description}\n id={id}\n required={required}\n label={label}\n labelAction={labelAction}\n disabled={disabled}\n placeholder={placeholder}\n hasMoreItems={searchResults.hasNextPage}\n loading={searchResults.isLoading}\n onOpenChange={handleMenuOpen}\n noOptionsMessage={() => noRelationsMessage}\n loadingMessage={loadingMessage}\n onLoadMore={() => {\n onSearchNextPage();\n }}\n textValue={textValue}\n onChange={(relationId) => {\n if (!relationId) {\n return;\n }\n onRelationConnect(data.flat().find((opt) => opt.id.toString() === relationId)!);\n updatedRelationsWith.current = 'onChange';\n }}\n onTextValueChange={(text) => {\n setTextValue(text);\n }}\n onInputChange={(event) => {\n onSearch(event.currentTarget.value);\n }}\n >\n {options.map((opt) => {\n return <Option key={opt.id} {...opt} />;\n })}\n </Combobox>\n </ComboboxWrapper>\n\n {shouldDisplayLoadMoreButton && (\n <TextButton\n disabled={paginatedRelations.isLoading || paginatedRelations.isFetchingNextPage}\n onClick={handleLoadMore}\n loading={paginatedRelations.isLoading || paginatedRelations.isFetchingNextPage}\n startIcon={<Refresh />}\n // prevent the label from line-wrapping\n shrink={0}\n >\n {labelLoadMore}\n </TextButton>\n )}\n </Flex>\n\n {relations.length > 0 && (\n <ShadowBox overflowDirection={overflow}>\n <VisuallyHidden id={ariaDescriptionId}>{listAriaDescription}</VisuallyHidden>\n <VisuallyHidden aria-live=\"assertive\">{liveText}</VisuallyHidden>\n {/* @ts-expect-error – width is expected, but we've not needed to pass it before. */}\n <List\n height={dynamicListHeight}\n ref={listRef}\n outerRef={outerListRef}\n itemCount={totalNumberOfRelations}\n itemSize={RELATION_ITEM_HEIGHT + RELATION_GUTTER}\n itemData={{\n name,\n ariaDescribedBy: ariaDescriptionId,\n canDrag: canReorder,\n disabled,\n handleCancel: onCancel,\n handleDropItem: onDropItem,\n handleGrabItem: onGrabItem,\n iconButtonAriaLabel,\n labelDisconnectRelation,\n onRelationDisconnect,\n publicationStateTranslations,\n relations,\n updatePositionOfRelation: handleUpdatePositionOfRelation,\n }}\n itemKey={(index) => `${relations[index].mainField}_${relations[index].id}`}\n innerElementType=\"ol\"\n >\n {ListItem}\n </List>\n </ShadowBox>\n )}\n </Flex>\n );\n};\n\nconst ComboboxWrapper = styled(Box)`\n align-self: flex-start;\n`;\n\nconst ShadowBox = styled(Box)<{ overflowDirection?: 'top-bottom' | 'top' | 'bottom' }>`\n position: relative;\n overflow: hidden;\n flex: 1;\n\n &:before,\n &:after {\n position: absolute;\n width: 100%;\n height: 4px;\n z-index: 1;\n }\n\n &:before {\n /* TODO: as for DS Table component we would need this to be handled by the DS theme */\n content: '';\n background: linear-gradient(rgba(3, 3, 5, 0.2) 0%, rgba(0, 0, 0, 0) 100%);\n top: 0;\n opacity: ${({ overflowDirection }) =>\n overflowDirection === 'top-bottom' || overflowDirection === 'top' ? 1 : 0};\n transition: opacity 0.2s ease-in-out;\n }\n\n &:after {\n /* TODO: as for DS Table component we would need this to be handled by the DS theme */\n content: '';\n background: linear-gradient(0deg, rgba(3, 3, 5, 0.2) 0%, rgba(0, 0, 0, 0) 100%);\n bottom: 0;\n opacity: ${({ overflowDirection }) =>\n overflowDirection === 'top-bottom' || overflowDirection === 'bottom' ? 1 : 0};\n transition: opacity 0.2s ease-in-out;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * Option\n * -----------------------------------------------------------------------------------------------*/\n\nconst Option = ({\n publicationState,\n mainField,\n id,\n}: Pick<NormalizedRelation, 'id' | 'mainField' | 'publicationState'>) => {\n const { formatMessage } = useIntl();\n const stringifiedDisplayValue = (mainField ?? id).toString();\n\n if (publicationState) {\n const isDraft = publicationState === 'draft';\n const draftMessage = {\n id: getTranslation('components.Select.draft-info-title'),\n defaultMessage: 'State: Draft',\n };\n const publishedMessage = {\n id: getTranslation('components.Select.publish-info-title'),\n defaultMessage: 'State: Published',\n };\n const title = isDraft ? formatMessage(draftMessage) : formatMessage(publishedMessage);\n\n return (\n <ComboboxOption value={id.toString()} textValue={stringifiedDisplayValue}>\n <Flex>\n <StyledBullet title={title} isDraft={isDraft} />\n <Typography ellipsis>{stringifiedDisplayValue}</Typography>\n </Flex>\n </ComboboxOption>\n );\n }\n\n return (\n <ComboboxOption value={id.toString()} textValue={stringifiedDisplayValue}>\n {stringifiedDisplayValue}\n </ComboboxOption>\n );\n};\n\nconst StyledBullet = styled.div<{ isDraft?: boolean }>`\n flex-shrink: 0;\n width: ${pxToRem(6)};\n height: ${pxToRem(6)};\n margin-right: ${({ theme }) => theme.spaces[2]};\n background-color: ${({ theme, isDraft }) =>\n theme.colors[isDraft ? 'secondary600' : 'success600']};\n border-radius: 50%;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * ListItem\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * This is in a separate component to enforce passing all the props the component requires to react-window\n * to ensure drag & drop correctly works.\n */\n\ninterface ListItemProps extends Pick<RelationItemProps, 'index' | 'style'> {\n data: Pick<\n RelationItemProps,\n | 'ariaDescribedBy'\n | 'canDrag'\n | 'disabled'\n | 'iconButtonAriaLabel'\n | 'name'\n | 'updatePositionOfRelation'\n > & {\n handleCancel: RelationItemProps['onCancel'];\n handleDropItem: RelationItemProps['onDropItem'];\n handleGrabItem: RelationItemProps['onGrabItem'];\n labelDisconnectRelation: string;\n onRelationDisconnect: (relation: NormalizedRelation) => void;\n publicationStateTranslations: {\n draft: string;\n published: string;\n };\n relations: NormalizedRelation[];\n };\n}\n\nconst ListItem = ({ data, index, style }: ListItemProps) => {\n const {\n ariaDescribedBy,\n canDrag,\n disabled,\n handleCancel,\n handleDropItem,\n handleGrabItem,\n iconButtonAriaLabel,\n name,\n labelDisconnectRelation,\n onRelationDisconnect,\n publicationStateTranslations,\n relations,\n updatePositionOfRelation,\n } = data;\n const { publicationState, href, mainField, id } = relations[index];\n const statusColor = publicationState === 'draft' ? 'secondary' : 'success';\n\n return (\n <RelationItem\n ariaDescribedBy={ariaDescribedBy}\n canDrag={canDrag}\n disabled={disabled}\n displayValue={String(mainField ?? id)}\n iconButtonAriaLabel={iconButtonAriaLabel}\n id={id}\n index={index}\n name={name}\n endAction={\n <DisconnectButton\n data-testid={`remove-relation-${id}`}\n disabled={disabled}\n type=\"button\"\n onClick={() => onRelationDisconnect(relations[index])}\n aria-label={labelDisconnectRelation}\n >\n <Icon width=\"12px\" as={Cross} />\n </DisconnectButton>\n }\n onCancel={handleCancel}\n onDropItem={handleDropItem}\n onGrabItem={handleGrabItem}\n status={publicationState || undefined}\n style={{\n ...style,\n bottom: style.bottom ?? 0 + RELATION_GUTTER,\n height: style.height ?? 0 - RELATION_GUTTER,\n }}\n updatePositionOfRelation={updatePositionOfRelation}\n >\n <Box minWidth={0} paddingTop={1} paddingBottom={1} paddingRight={4}>\n <Tooltip description={mainField ?? `${id}`}>\n {href ? (\n <LinkEllipsis to={href}>{mainField ?? id}</LinkEllipsis>\n ) : (\n <Typography textColor={disabled ? 'neutral600' : 'primary600'} ellipsis>\n {mainField ?? id}\n </Typography>\n )}\n </Tooltip>\n </Box>\n\n {publicationState && (\n <Status variant={statusColor} showBullet={false} size=\"S\">\n <Typography fontWeight=\"bold\" textColor={`${statusColor}700`}>\n {publicationStateTranslations[publicationState]}\n </Typography>\n </Status>\n )}\n </RelationItem>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DisconnectButton\n * -----------------------------------------------------------------------------------------------*/\n\nconst DisconnectButton = styled.button`\n svg path {\n fill: ${({ theme, disabled }) =>\n disabled ? theme.colors.neutral600 : theme.colors.neutral500};\n }\n\n &:hover svg path,\n &:focus svg path {\n fill: ${({ theme, disabled }) => !disabled && theme.colors.neutral600};\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * LinkEllipsis\n * -----------------------------------------------------------------------------------------------*/\n\nconst LinkEllipsis = styled(Link)`\n display: block;\n\n > span {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * RelationItem\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RelationItemProps\n extends Pick<UseDragAndDropOptions, 'onCancel' | 'onDropItem' | 'onGrabItem'>,\n Omit<FlexProps, 'id' | 'style'>,\n Pick<ListChildComponentProps, 'style' | 'index'> {\n ariaDescribedBy: string;\n canDrag: boolean;\n children: React.ReactNode;\n displayValue: string;\n disabled: boolean;\n endAction: React.ReactNode;\n iconButtonAriaLabel: string;\n id: Entity.ID;\n name: string;\n status?: NormalizedRelation['publicationState'];\n updatePositionOfRelation: UseDragAndDropOptions['onMoveItem'];\n}\n\nconst RelationItem = ({\n ariaDescribedBy,\n children,\n displayValue,\n canDrag,\n disabled,\n endAction,\n iconButtonAriaLabel,\n style,\n id,\n index,\n name,\n onCancel,\n onDropItem,\n onGrabItem,\n status,\n updatePositionOfRelation,\n ...props\n}: RelationItemProps) => {\n const [{ handlerId, isDragging, handleKeyDown }, relationRef, dropRef, dragRef, dragPreviewRef] =\n useDragAndDrop(canDrag && !disabled, {\n type: `${ItemTypes.RELATION}_${name}`,\n index,\n item: {\n displayedValue: displayValue,\n status,\n id,\n index,\n },\n onMoveItem: updatePositionOfRelation,\n onDropItem,\n onGrabItem,\n onCancel,\n dropSensitivity: DROP_SENSITIVITY.IMMEDIATE,\n });\n\n const composedRefs = composeRefs(relationRef, dragRef);\n\n React.useEffect(() => {\n dragPreviewRef(getEmptyImage());\n }, [dragPreviewRef]);\n\n return (\n <Box\n style={style}\n as=\"li\"\n ref={dropRef}\n aria-describedby={ariaDescribedBy}\n cursor={canDrag ? 'all-scroll' : 'default'}\n >\n {isDragging ? (\n <RelationItemPlaceholder />\n ) : (\n <Flex\n paddingTop={2}\n paddingBottom={2}\n paddingLeft={canDrag ? 2 : 4}\n paddingRight={4}\n hasRadius\n borderColor=\"neutral200\"\n background={disabled ? 'neutral150' : 'neutral0'}\n justifyContent=\"space-between\"\n ref={canDrag ? composedRefs : undefined}\n data-handler-id={handlerId}\n {...props}\n >\n <FlexWrapper gap={1}>\n {canDrag ? (\n <IconButton\n forwardedAs=\"div\"\n role=\"button\"\n tabIndex={0}\n aria-label={iconButtonAriaLabel}\n borderWidth={0}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n >\n <Drag />\n </IconButton>\n ) : null}\n <ChildrenWrapper justifyContent=\"space-between\">{children}</ChildrenWrapper>\n </FlexWrapper>\n {endAction && <Box paddingLeft={4}>{endAction}</Box>}\n </Flex>\n )}\n </Box>\n );\n};\n\nconst RelationItemPlaceholder = () => (\n <Box\n paddingTop={2}\n paddingBottom={2}\n paddingLeft={4}\n paddingRight={4}\n hasRadius\n borderStyle=\"dashed\"\n borderColor=\"primary600\"\n borderWidth=\"1px\"\n background=\"primary100\"\n height={`calc(100% - ${RELATION_GUTTER}px)`}\n />\n);\n\nconst FlexWrapper = styled(Flex)`\n width: 100%;\n /* Used to prevent endAction to be pushed out of container */\n min-width: 0;\n\n & > div[role='button'] {\n cursor: all-scroll;\n }\n`;\n\nconst ChildrenWrapper = styled(Flex)`\n width: 100%;\n /* Used to prevent endAction to be pushed out of container */\n min-width: 0;\n`;\n\nexport { RelationInput, FlexWrapper, ChildrenWrapper, LinkEllipsis, DisconnectButton };\nexport type { RelationInputProps };\n","import get from 'lodash/get';\n\n/**\n * This is typically used in circumstances where there are re-orderable pieces e.g. Dynamic Zones\n * or Repeatable fields. It finds the _original_ location of the initial data using `__temp_key__` values\n * which are added to the fields in the `INIT_FORM` reducer to give array data a stable (when you add\n * a new item they wont have a server ID).\n */\nexport const getInitialDataPathUsingTempKeys =\n (initialData: Record<string, any>, modifiedData: Record<string, any>) =>\n (currentPath: string) => {\n const splitPath = currentPath.split('.');\n\n return splitPath.reduce<string[]>((acc, currentValue, index) => {\n const initialDataParent = get(initialData, acc);\n const modifiedDataTempKey = get(modifiedData, [\n ...splitPath.slice(0, index),\n currentValue,\n '__temp_key__',\n ]);\n\n if (Array.isArray(initialDataParent) && typeof modifiedDataTempKey === 'number') {\n const initialDataIndex = initialDataParent.findIndex(\n (entry) => entry.__temp_key__ === modifiedDataTempKey\n );\n\n acc.push(initialDataIndex.toString());\n\n return acc;\n }\n\n acc.push(currentValue);\n\n return acc;\n }, []);\n };\n","import { Entity } from '@strapi/types';\n\nexport function getRelationLink(targetModel: string, id?: Entity.ID) {\n return `/content-manager/collection-types/${targetModel}/${id ?? ''}`;\n}\n","import { PUBLICATION_STATES } from '../RelationInputDataManager';\n\nimport { getRelationLink } from './getRelationLink';\n\nimport type { Contracts } from '@strapi/plugin-content-manager/_internal/shared';\nimport type { Attribute } from '@strapi/types';\n\nexport interface NormalizeRelationArgs {\n shouldAddLink: boolean;\n mainFieldName: string;\n targetModel: string;\n}\n\nexport type NormalizedRelation = Contracts.Relations.RelationResult & {\n href?: string;\n mainField: string;\n publicationState?: false | 'published' | 'draft';\n};\n\nexport const normalizeRelation = (\n relation: Contracts.Relations.RelationResult,\n { shouldAddLink, mainFieldName, targetModel }: NormalizeRelationArgs\n) => {\n const nextRelation: NormalizedRelation = {\n ...relation,\n // @ts-expect-error – TODO: fix why this want's it to be an attribute as opposed to a string.\n mainField: relation[mainFieldName],\n };\n\n if (shouldAddLink) {\n nextRelation.href = getRelationLink(targetModel, nextRelation.id);\n }\n\n nextRelation.publicationState = false;\n\n if (nextRelation?.publishedAt !== undefined) {\n nextRelation.publicationState = nextRelation.publishedAt\n ? PUBLICATION_STATES.PUBLISHED\n : PUBLICATION_STATES.DRAFT;\n }\n\n return nextRelation;\n};\n\n/*\n * Applies some transformations to existing and new relations in order to display them correctly\n * relations: raw relations data coming from useRelations\n * shouldAddLink: comes from generateRelationQueryInfos, if true we display a link to the relation (TO FIX: explanation)\n * mainFieldName: name of the main field inside the relation (e.g. text field), if no displayable main field exists (e.g. date field) we use the id of the entry\n * targetModel: the model on which the relation is based on, used to create an URL link\n */\n\nexport const normalizeRelations = (\n relations: Contracts.Relations.RelationResult[],\n args: NormalizeRelationArgs\n) => {\n return [...relations].map((relation) => normalizeRelation(relation, args));\n};\n","import { useEffect, useState } from 'react';\n\nimport { useCallbackRef, useFetchClient } from '@strapi/helper-plugin';\nimport { useInfiniteQuery } from 'react-query';\n\nimport {\n NormalizeRelationArgs,\n NormalizedRelation,\n normalizeRelations,\n} from './utils/normalizeRelations';\n\nimport type { Contracts } from '@strapi/plugin-content-manager/_internal/shared';\n\ninterface UseRelationArgs {\n relation: {\n enabled: boolean;\n endpoint: string;\n normalizeArguments: NormalizeRelationArgs;\n onLoad: (data: NormalizedRelation[]) => void;\n pageParams?: Record<string, any>;\n pageGoal?: number;\n };\n search: {\n endpoint: string;\n pageParams?: Record<string, any>;\n };\n}\n\nconst useRelation = (cacheKey: any[] = [], { relation, search }: UseRelationArgs) => {\n const [searchParams, setSearchParams] = useState({});\n const [currentPage, setCurrentPage] = useState(0);\n const { get } = useFetchClient();\n\n const { onLoad: onLoadRelations, normalizeArguments } = relation;\n\n const relationsRes = useInfiniteQuery(\n ['relation', ...cacheKey],\n async ({ pageParam = 1 }) => {\n try {\n const { data } = await get<Contracts.Relations.FindExisting.Response>(relation?.endpoint, {\n params: {\n ...(relation.pageParams ?? {}),\n page: pageParam,\n },\n });\n\n setCurrentPage(pageParam);\n\n return data;\n } catch (err) {\n return null;\n }\n },\n {\n cacheTime: 0,\n enabled: relation.enabled,\n getNextPageParam(lastPage) {\n const isXToOneRelation = lastPage && !('pagination' in lastPage);\n\n if (\n !lastPage || // the API may send an empty 204 response\n isXToOneRelation || // xToOne relations do not have a pagination\n lastPage?.pagination.page >= lastPage?.pagination.pageCount\n ) {\n return undefined;\n }\n\n // eslint-disable-next-line consistent-return\n return lastPage.pagination.page + 1;\n },\n select: (data) => ({\n ...data,\n pages: data.pages.map((page) => {\n if (!page) {\n return page;\n }\n\n let normalizedResults: Contracts.Relations.RelationResult[] = [];\n\n // xToOne relations return an object, which we normalize so that relations\n // always have the same shape\n if ('data' in page && page.data) {\n normalizedResults = [page.data];\n } else if ('results' in page && page.results) {\n normalizedResults = [...page.results].reverse();\n }\n\n return {\n pagination: 'pagination' in page ? page.pagination : undefined,\n results: normalizedResults,\n };\n }),\n }),\n }\n );\n\n const { pageGoal } = relation;\n\n const { status, data, fetchNextPage, hasNextPage } = relationsRes;\n\n useEffect(() => {\n /**\n * This ensures the infiniteQuery hook fetching has caught-up with the modifiedData\n * state i.e. in circumstances where you add 10 relations, the browserState knows this,\n * but the hook would think it could fetch more, when in reality, it can't.\n */\n if (pageGoal && pageGoal > currentPage && hasNextPage && status === 'success') {\n fetchNextPage({\n pageParam: currentPage + 1,\n });\n }\n }, [pageGoal, currentPage, fetchNextPage, hasNextPage, status]);\n\n const onLoadRelationsCallback = useCallbackRef(onLoadRelations);\n\n useEffect(() => {\n if (status === 'success' && data && data.pages?.at(-1)?.results && onLoadRelationsCallback) {\n // everytime we fetch, we normalize prior to adding to redux\n const normalizedResults = normalizeRelations(\n data.pages.at(-1)?.results ?? [],\n normalizeArguments\n );\n\n // this is loadRelation from EditViewDataManagerProvider\n onLoadRelationsCallback(normalizedResults);\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [status, onLoadRelationsCallback, data]);\n\n const searchRes = useInfiniteQuery(\n ['relation', ...cacheKey, 'search', JSON.stringify(searchParams)],\n async ({ pageParam = 1 }) => {\n try {\n const { data } = await get<Contracts.Relations.FindAvailable.Response>(search.endpoint, {\n params: {\n ...(search.pageParams ?? {}),\n ...searchParams,\n page: pageParam,\n },\n });\n\n return data;\n } catch (err) {\n return null;\n }\n },\n {\n enabled: Object.keys(searchParams).length > 0,\n getNextPageParam(lastPage) {\n if (\n !lastPage?.pagination ||\n (lastPage.pagination && lastPage.pagination.page >= lastPage.pagination.pageCount)\n ) {\n return undefined;\n }\n\n // eslint-disable-next-line consistent-return\n return lastPage.pagination.page + 1;\n },\n }\n );\n\n const searchFor = (term: string, options: object = {}) => {\n setSearchParams({\n ...options,\n _q: term,\n _filter: '$containsi',\n });\n };\n\n return { relations: relationsRes, search: searchRes, searchFor };\n};\n\nexport { useRelation };\nexport type { UseRelationArgs };\n","import { RelationData } from '../../EditViewDataManagerProvider/reducer';\n\nexport const diffRelations = (\n browserStateRelations: RelationData[] = [],\n serverStateRelations: RelationData[] = []\n): [connected: RelationData['id'][], disconnected: RelationData['id'][]] => {\n const connected = browserStateRelations.reduce<RelationData['id'][]>((acc, relation) => {\n if (!serverStateRelations.find((oldRelation) => oldRelation.id === relation.id)) {\n return [...acc, relation.id];\n }\n\n return acc;\n }, []);\n\n const disconnected = serverStateRelations.reduce<RelationData['id'][]>((acc, relation) => {\n if (!browserStateRelations.find((oldRelation) => oldRelation.id === relation.id)) {\n return [...acc, relation.id];\n }\n\n return acc;\n }, []);\n\n return [connected, disconnected];\n};\n","import { normalizeRelation, type NormalizeRelationArgs } from './normalizeRelations';\n\nimport type { Contracts } from '@strapi/plugin-content-manager/_internal/shared';\nimport type { UseInfiniteQueryResult } from 'react-query';\n\nexport const normalizeSearchResults = (\n relations: UseInfiniteQueryResult<Contracts.Relations.FindAvailable.Response | null, unknown>,\n { mainFieldName }: Pick<NormalizeRelationArgs, 'mainFieldName'>\n) => {\n const { data } = relations;\n const { pages = [] } = data ?? {};\n\n return {\n ...relations,\n data: pages\n .map((page) =>\n (page?.results ?? []).map((relation) =>\n normalizeRelation(relation, { mainFieldName, shouldAddLink: false, targetModel: '' })\n )\n )\n .filter(Boolean)\n .flat(),\n };\n};\n","import * as React from 'react';\n\nimport { NotAllowedInput, useCMEditViewDataManager } from '@strapi/helper-plugin';\nimport get from 'lodash/get';\nimport pick from 'lodash/pick';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { useRouteMatch } from 'react-router-dom';\n\nimport { getInitialDataPathUsingTempKeys } from '../../utils/paths';\nimport { getTranslation } from '../../utils/translations';\n\nimport { RelationInput, RelationInputProps } from './RelationInput';\nimport { useRelation } from './useRelation';\nimport { diffRelations } from './utils/diffRelations';\nimport { NormalizedRelation, normalizeRelation } from './utils/normalizeRelations';\nimport { normalizeSearchResults } from './utils/normalizeSearchResults';\n\nimport type { Contracts } from '@strapi/plugin-content-manager/_internal/shared';\n\nconst PUBLICATION_STATES = {\n DRAFT: 'draft',\n PUBLISHED: 'published',\n} as const;\n\nconst RELATIONS_TO_DISPLAY = 5;\n\nconst SEARCH_RESULTS_TO_DISPLAY = 10;\n\ninterface RelationInputDataManagerProps\n extends Pick<\n RelationInputProps,\n 'description' | 'error' | 'labelAction' | 'name' | 'required' | 'size'\n > {\n componentUid?: string;\n editable?: boolean;\n intlLabel: MessageDescriptor;\n isUserAllowedToEditField?: boolean;\n isUserAllowedToReadField?: boolean;\n mainField: {\n name: string;\n };\n placeholder?: MessageDescriptor;\n queryInfos: {\n defaultParams?: object;\n shouldDisplayRelationLink?: boolean;\n };\n relationType: string;\n targetModel: string;\n}\n\nconst RelationInputDataManager = ({\n componentUid,\n name,\n error,\n editable,\n description,\n intlLabel,\n isUserAllowedToEditField,\n isUserAllowedToReadField,\n labelAction,\n mainField,\n placeholder,\n queryInfos: { defaultParams, shouldDisplayRelationLink = false },\n required,\n relationType,\n size,\n targetModel,\n}: RelationInputDataManagerProps) => {\n const {\n isCreatingEntry,\n createActionAllowedFields,\n readActionAllowedFields,\n updateActionAllowedFields,\n slug,\n modifiedData,\n initialData,\n relationConnect,\n relationDisconnect,\n relationLoad,\n relationReorder,\n } = useCMEditViewDataManager();\n\n /**\n * This is our cloning route because the EditView & CloneView share the same UI component\n * We need the origin ID to pre-load the relations into the modifiedData of the new\n * to-be-cloned entity.\n */\n const { params } =\n useRouteMatch<{ origin?: string }>(\n '/content-manager/collection-types/:collectionType/create/clone/:origin'\n ) ?? {};\n\n const { origin } = params ?? {};\n const isCloningEntry = Boolean(origin);\n const isComponentRelation = Boolean(componentUid);\n\n const isFieldAllowed = React.useMemo(() => {\n if (isUserAllowedToEditField === true) {\n return true;\n }\n\n const allowedFields = isCreatingEntry ? createActionAllowedFields : updateActionAllowedFields;\n\n return allowedFields.includes(name);\n }, [\n isCreatingEntry,\n createActionAllowedFields,\n name,\n isUserAllowedToEditField,\n updateActionAllowedFields,\n ]);\n\n const isFieldReadable = React.useMemo(() => {\n if (isUserAllowedToReadField) {\n return true;\n }\n\n const allowedFields = isCreatingEntry ? [] : readActionAllowedFields;\n\n return allowedFields.includes(name);\n }, [isCreatingEntry, isUserAllowedToReadField, name, readActionAllowedFields]);\n\n const fieldNameKeys = name.split('.');\n const componentId = componentUid ? get(modifiedData, fieldNameKeys.slice(0, -1))?.id : undefined;\n\n const entityId = origin || modifiedData.id;\n\n // /content-manager/relations/[model]/[id]/[field-name]\n const relationFetchEndpoint = React.useMemo(() => {\n if (isCreatingEntry && !origin) {\n return null;\n }\n\n if (componentUid) {\n // repeatable components and dz are dynamically created\n // if no componentId exists in modifiedData it means that the user just created it\n // there then are no relations to request\n return componentId\n ? `/content-manager/relations/${componentUid}/${componentId}/${fieldNameKeys.at(-1)}`\n : null;\n }\n\n return `/content-manager/relations/${slug}/${entityId}/${name.split('.').at(-1)}`;\n }, [isCreatingEntry, origin, componentUid, slug, entityId, name, componentId, fieldNameKeys]);\n\n // /content-manager/relations/[model]/[field-name]\n const relationSearchEndpoint = React.useMemo(() => {\n if (componentUid) {\n return `/content-manager/relations/${componentUid}/${name.split('.').at(-1)}`;\n }\n\n return `/content-manager/relations/${slug}/${name.split('.').at(-1)}`;\n }, [componentUid, slug, name]);\n\n const [liveText, setLiveText] = React.useState('');\n const { formatMessage } = useIntl();\n\n const nameSplit = name.split('.');\n\n const initialDataPath = getInitialDataPathUsingTempKeys(initialData, modifiedData)(name);\n\n const relationsFromModifiedData = get(modifiedData, name, []);\n\n const currentLastPage = Math.ceil(get(initialData, name, []).length / RELATIONS_TO_DISPLAY);\n\n const { relations, search, searchFor } = useRelation(\n [slug, initialDataPath.join('.'), modifiedData.id, defaultParams],\n {\n relation: {\n enabled: !!relationFetchEndpoint,\n endpoint: relationFetchEndpoint!,\n pageGoal: currentLastPage,\n pageParams: {\n ...defaultParams,\n pageSize: RELATIONS_TO_DISPLAY,\n },\n onLoad(value) {\n relationLoad?.({\n target: {\n initialDataPath: ['initialData', ...initialDataPath],\n modifiedDataPath: ['modifiedData', ...nameSplit],\n value,\n },\n });\n },\n normalizeArguments: {\n mainFieldName: mainField.name,\n shouldAddLink: shouldDisplayRelationLink,\n targetModel,\n },\n },\n search: {\n endpoint: relationSearchEndpoint,\n pageParams: {\n ...defaultParams,\n // eslint-disable-next-line no-nested-ternary\n entityId:\n isCreatingEntry || isCloningEntry\n ? undefined\n : isComponentRelation\n ? componentId\n : entityId,\n pageSize: SEARCH_RESULTS_TO_DISPLAY,\n },\n },\n }\n );\n\n const isMorph = relationType.toLowerCase().includes('morph');\n const toOneRelation = [\n 'oneWay',\n 'oneToOne',\n 'manyToOne',\n 'oneToManyMorph',\n 'oneToOneMorph',\n ].includes(relationType);\n\n const isDisabled = React.useMemo(() => {\n if (isMorph) {\n return true;\n }\n\n if (!isCreatingEntry) {\n return (!isFieldAllowed && isFieldReadable) || !editable;\n }\n\n return !editable;\n }, [isMorph, isCreatingEntry, editable, isFieldAllowed, isFieldReadable]);\n\n const handleRelationConnect = (relation: Contracts.Relations.RelationResult) => {\n /**\n * Any relation being added to the store should be normalized so it has it's link.\n */\n const normalizedRelation = normalizeRelation(relation, {\n mainFieldName: mainField.name,\n shouldAddLink: shouldDisplayRelationLink,\n targetModel,\n });\n\n relationConnect?.({ name, value: normalizedRelation, toOneRelation });\n };\n\n const handleRelationDisconnect = (relation: NormalizedRelation) => {\n relationDisconnect?.({ name, id: relation.id });\n };\n\n const handleRelationLoadMore = () => {\n relations.fetchNextPage();\n };\n\n const handleSearch = (term = '') => {\n const [connected, disconnected] = diffRelations(\n relationsFromModifiedData,\n get(initialData, name)\n );\n\n searchFor(term, {\n idsToInclude: disconnected,\n idsToOmit: connected,\n });\n };\n\n const handleSearchMore = () => {\n search.fetchNextPage();\n };\n\n const getItemPos = (index: number) => `${index + 1} of ${relationsFromModifiedData.length}`;\n\n const handleRelationReorder = (oldIndex: number, newIndex: number) => {\n const item = relationsFromModifiedData[oldIndex];\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.reorder'),\n defaultMessage: '{item}, moved. New position in list: {position}.',\n },\n {\n item: item.mainField ?? item.id,\n position: getItemPos(newIndex),\n }\n )\n );\n\n relationReorder?.({\n name,\n newIndex,\n oldIndex,\n });\n };\n\n const handleGrabItem = (index: number) => {\n const item = relationsFromModifiedData[index];\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.grab-item'),\n defaultMessage: `{item}, grabbed. Current position in list: {position}. Press up and down arrow to change position, Spacebar to drop, Escape to cancel.`,\n },\n {\n item: item.mainField ?? item.id,\n position: getItemPos(index),\n }\n )\n );\n };\n\n const handleDropItem = (index: number) => {\n const item = relationsFromModifiedData[index];\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.drop-item'),\n defaultMessage: `{item}, dropped. Final position in list: {position}.`,\n },\n {\n item: item.mainField ?? item.id,\n position: getItemPos(index),\n }\n )\n );\n };\n\n const handleCancel = (index: number) => {\n const item = relationsFromModifiedData[index];\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.cancel-item'),\n defaultMessage: '{item}, dropped. Re-order cancelled.',\n },\n {\n item: item.mainField ?? item.id,\n }\n )\n );\n };\n\n if (\n (!isFieldAllowed && isCreatingEntry) ||\n (!isCreatingEntry && !isFieldAllowed && !isFieldReadable)\n ) {\n return <NotAllowedInput name={name} intlLabel={intlLabel} labelAction={labelAction} />;\n }\n\n /**\n * How to calculate the total number of relations even if you don't\n * have them all loaded in the browser.\n *\n * 1. The `infiniteQuery` gives you the total number of relations in the pagination result.\n * 2. You can diff the length of the browserState vs the fetchedServerState to determine if you've\n * either added or removed relations.\n * 3. Add them together, if you've removed relations you'll get a negative number and it'll\n * actually subtract from the total number on the server (regardless of how many you fetched).\n */\n const browserRelationsCount = relationsFromModifiedData.length;\n const serverRelationsCount = (get(initialData, initialDataPath) ?? []).length;\n const realServerRelationsCount = relations.data?.pages[0]?.pagination?.total ?? 0;\n /**\n * _IF_ theres no relations data and the browserCount is the same as serverCount you can therefore assume\n * that the browser count is correct because we've just _made_ this entry and the in-component hook is now fetching.\n */\n const totalRelations =\n !relations.data && browserRelationsCount === serverRelationsCount\n ? browserRelationsCount\n : browserRelationsCount - serverRelationsCount + realServerRelationsCount;\n\n return (\n <RelationInput\n error={error}\n canReorder={!toOneRelation}\n description={description}\n disabled={isDisabled}\n iconButtonAriaLabel={formatMessage({\n id: getTranslation('components.RelationInput.icon-button-aria-label'),\n defaultMessage: 'Drag',\n })}\n id={name}\n label={`${formatMessage({\n id: intlLabel.id,\n defaultMessage: intlLabel.defaultMessage,\n })} ${totalRelations > 0 ? `(${totalRelations})` : ''}`}\n labelAction={labelAction}\n labelLoadMore={\n !isCreatingEntry || isCloningEntry\n ? formatMessage({\n id: getTranslation('relation.loadMore'),\n defaultMessage: 'Load More',\n })\n : undefined\n }\n labelDisconnectRelation={formatMessage({\n id: getTranslation('relation.disconnect'),\n defaultMessage: 'Remove',\n })}\n listAriaDescription={formatMessage({\n id: getTranslation('dnd.instructions'),\n defaultMessage: `Press spacebar to grab and re-order`,\n })}\n liveText={liveText}\n loadingMessage={formatMessage({\n id: getTranslation('relation.isLoading'),\n defaultMessage: 'Relations are loading',\n })}\n name={name}\n noRelationsMessage={formatMessage({\n id: getTranslation('relation.notAvailable'),\n defaultMessage: 'No relations available',\n })}\n numberOfRelationsToDisplay={RELATIONS_TO_DISPLAY}\n onDropItem={handleDropItem}\n onGrabItem={handleGrabItem}\n onCancel={handleCancel}\n onRelationConnect={handleRelationConnect}\n onRelationDisconnect={handleRelationDisconnect}\n onRelationLoadMore={handleRelationLoadMore}\n onRelationReorder={handleRelationReorder}\n onSearch={(term) => handleSearch(term)}\n onSearchNextPage={() => handleSearchMore()}\n placeholder={formatMessage(\n placeholder || {\n id: getTranslation('relation.add'),\n defaultMessage: 'Add relation',\n }\n )}\n publicationStateTranslations={{\n [PUBLICATION_STATES.DRAFT]: formatMessage({\n id: getTranslation('relation.publicationState.draft'),\n defaultMessage: 'Draft',\n }),\n\n [PUBLICATION_STATES.PUBLISHED]: formatMessage({\n id: getTranslation('relation.publicationState.published'),\n defaultMessage: 'Published',\n }),\n }}\n relations={pick(\n { ...relations, data: relationsFromModifiedData },\n 'data',\n 'hasNextPage',\n 'isFetchingNextPage',\n 'isLoading',\n 'isSuccess'\n )}\n required={required}\n searchResults={normalizeSearchResults(search, {\n mainFieldName: mainField.name,\n })}\n size={size}\n />\n );\n};\n\nexport { RelationInputDataManager, PUBLICATION_STATES };\nexport type { RelationInputDataManagerProps };\n","import { Box, Flex, Icon, IconButton, Status, Typography } from '@strapi/design-system';\nimport { Cross, Drag } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { getTranslation } from '../../utils/translations';\nimport {\n DisconnectButton,\n LinkEllipsis,\n ChildrenWrapper,\n FlexWrapper,\n} from '../Relations/RelationInput';\nimport { PUBLICATION_STATES } from '../Relations/RelationInputDataManager';\n\ninterface RelationDragPreviewProps {\n status: typeof PUBLICATION_STATES.DRAFT | typeof PUBLICATION_STATES.PUBLISHED;\n displayedValue: string;\n width: number;\n}\n\nconst RelationDragPreview = ({ status, displayedValue, width }: RelationDragPreviewProps) => {\n const { formatMessage } = useIntl();\n\n const stateMessage = {\n [PUBLICATION_STATES.DRAFT]: formatMessage({\n id: getTranslation('relation.publicationState.draft'),\n defaultMessage: 'Draft',\n }),\n\n [PUBLICATION_STATES.PUBLISHED]: formatMessage({\n id: getTranslation('relation.publicationState.published'),\n defaultMessage: 'Published',\n }),\n };\n\n const statusColor = status === PUBLICATION_STATES.DRAFT ? 'secondary' : 'success';\n\n return (\n <Box style={{ width }}>\n <Flex\n paddingTop={2}\n paddingBottom={2}\n paddingLeft={2}\n paddingRight={4}\n hasRadius\n borderWidth={1}\n background=\"neutral0\"\n borderColor=\"neutral200\"\n justifyContent=\"space-between\"\n >\n <FlexWrapper gap={1}>\n <IconButton aria-label=\"\" borderWidth={0}>\n <Drag />\n </IconButton>\n <ChildrenWrapper maxWidth=\"100%\" justifyContent=\"space-between\">\n <Box minWidth={0} paddingTop={1} paddingBottom={1} paddingRight={4}>\n <LinkEllipsis href=\"\">\n <Typography textColor=\"primary600\" ellipsis>\n {displayedValue}\n </Typography>\n </LinkEllipsis>\n </Box>\n {status && (\n <Status variant={statusColor} showBullet={false} size=\"S\">\n <Typography fontWeight=\"bold\" textColor={`${statusColor}700`}>\n {stateMessage[status]}\n </Typography>\n </Status>\n )}\n </ChildrenWrapper>\n </FlexWrapper>\n <Box paddingLeft={4}>\n <DisconnectButton type=\"button\">\n <Icon width=\"12px\" as={Cross} />\n </DisconnectButton>\n </Box>\n </Flex>\n </Box>\n );\n};\n\nexport { RelationDragPreview };\nexport type { RelationDragPreviewProps };\n","import * as React from 'react';\n\nimport {\n SubNav,\n SubNavHeader,\n SubNavLink,\n SubNavSection,\n SubNavSections,\n} from '@strapi/design-system/v2';\nimport { useCollator, useFilter } from '@strapi/helper-plugin';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\n\nimport { useTypedSelector } from '../../core/store/hooks';\nimport { getTranslation } from '../utils/translations';\n\nconst LeftMenu = () => {\n const [search, setSearch] = React.useState('');\n const { formatMessage, locale } = useIntl();\n const collectionTypeLinks = useTypedSelector(\n (state) => state['content-manager_app'].collectionTypeLinks\n );\n const singleTypeLinks = useTypedSelector((state) => state['content-manager_app'].singleTypeLinks);\n\n const { startsWith } = useFilter(locale, {\n sensitivity: 'base',\n });\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const menu = React.useMemo(\n () =>\n [\n {\n id: 'collectionTypes',\n title: formatMessage({\n id: getTranslation('components.LeftMenu.collection-types'),\n defaultMessage: 'Collection Types',\n }),\n searchable: true,\n links: collectionTypeLinks,\n },\n {\n id: 'singleTypes',\n title: formatMessage({\n id: getTranslation('components.LeftMenu.single-types'),\n defaultMessage: 'Single Types',\n }),\n searchable: true,\n links: singleTypeLinks,\n },\n ].map((section) => ({\n ...section,\n links: section.links\n /**\n * Filter by the search value\n */\n .filter((link) => startsWith(link.title, search))\n /**\n * Sort correctly using the language\n */\n .sort((a, b) => formatter.compare(a.title, b.title))\n /**\n * Apply the formated strings to the links from react-intl\n */\n .map((link) => {\n return {\n ...link,\n title: formatMessage({ id: link.title, defaultMessage: link.title }),\n };\n }),\n })),\n [collectionTypeLinks, search, singleTypeLinks, startsWith, formatMessage, formatter]\n );\n\n const handleClear = () => {\n setSearch('');\n };\n\n const handleChangeSearch = ({ target: { value } }: { target: { value: string } }) => {\n setSearch(value);\n };\n\n const label = formatMessage({\n id: getTranslation('header.name'),\n defaultMessage: 'Content',\n });\n\n return (\n <SubNav ariaLabel={label}>\n <SubNavHeader\n label={label}\n searchable\n value={search}\n onChange={handleChangeSearch}\n onClear={handleClear}\n searchLabel={formatMessage({\n id: 'content-manager.components.LeftMenu.Search.label',\n defaultMessage: 'Search for a content type',\n })}\n />\n <SubNavSections>\n {menu.map((section) => {\n return (\n <SubNavSection\n key={section.id}\n label={section.title}\n badgeLabel={section.links.length.toString()}\n >\n {section.links.map((link) => {\n const search = link.search ? `?${link.search}` : '';\n\n return (\n // @ts-expect-error – DS inference does not work with the `as` prop.\n <SubNavLink as={NavLink} key={link.uid} to={`${link.to}${search}`}>\n {link.title}\n </SubNavLink>\n );\n })}\n </SubNavSection>\n );\n })}\n </SubNavSections>\n </SubNav>\n );\n};\n\nexport { LeftMenu };\n","import * as React from 'react';\n\nconst ModelsContext = React.createContext<{\n refetchData: () => Promise<void>;\n}>({\n refetchData: () => Promise.resolve(),\n});\n\nexport { ModelsContext };\n","import { useEffect, useRef } from 'react';\n\nimport { useNotifyAT } from '@strapi/design-system';\nimport {\n Permission,\n hasPermissions,\n useFetchClient,\n useNotification,\n useRBACProvider,\n useStrapiApp,\n} from '@strapi/helper-plugin';\nimport { Contracts } from '@strapi/plugin-content-manager/_internal/shared';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\n\nimport { HOOKS } from '../../constants';\nimport { useTypedDispatch, useTypedSelector } from '../../core/store/hooks';\nimport { getTranslation } from '../utils/translations';\n\nconst { MUTATE_COLLECTION_TYPES_LINKS, MUTATE_SINGLE_TYPES_LINKS } = HOOKS;\n\ninterface ContentManagerLink {\n permissions: Permission[];\n search: string | null;\n kind: string;\n title: string;\n to: string;\n uid: string;\n name: string;\n isDisplayed: boolean;\n}\n\n/**\n * TODO: refactor this whole thing.\n */\nconst useContentManagerInitData = () => {\n const dispatch = useTypedDispatch();\n const toggleNotification = useNotification();\n const state = useTypedSelector((state) => state['content-manager_app']);\n\n const { allPermissions } = useRBACProvider();\n const { runHookWaterfall } = useStrapiApp();\n const { notifyStatus } = useNotifyAT();\n const { formatMessage } = useIntl();\n const { get } = useFetchClient();\n\n const fetchDataRef = useRef(async () => {\n dispatch({\n type: 'ContentManager/App/GET_INIT_DATA',\n });\n\n try {\n const {\n data: {\n data: { components, contentTypes: models, fieldSizes },\n },\n } = await get<Contracts.Init.GetInitData.Response>('/content-manager/init');\n notifyStatus(\n formatMessage({\n id: getTranslation('App.schemas.data-loaded'),\n defaultMessage: 'The schemas have been successfully loaded.',\n })\n );\n\n const {\n data: { data: contentTypeConfigurations },\n } = await get<Contracts.ContentTypes.FindContentTypesSettings.Response>(\n '/content-manager/content-types-settings'\n );\n\n /**\n * We group these by the two types we support. We do with an object because we can use default\n * values of arrays to make sure we always have an array to manipulate further on if, for example,\n * a user has not made any single types.\n *\n * This means we have to manually add new content types to this hook if we add a new type – but\n * the safety is worth it.\n */\n const { collectionType: collectionTypeLinks, singleType: singleTypeLinks } = models.reduce<{\n collectionType: Contracts.ContentTypes.ContentType[];\n singleType: Contracts.ContentTypes.ContentType[];\n }>(\n (acc, model) => {\n acc[model.kind].push(model);\n return acc;\n },\n {\n collectionType: [],\n singleType: [],\n }\n );\n\n const collectionTypeSectionLinks = generateLinks(\n collectionTypeLinks,\n 'collectionTypes',\n contentTypeConfigurations\n );\n\n const singleTypeSectionLinks = generateLinks(singleTypeLinks, 'singleTypes');\n\n // Collection Types verifications\n const collectionTypeLinksPermissions = await Promise.all(\n collectionTypeSectionLinks.map(({ permissions }) =>\n hasPermissions(allPermissions, permissions)\n )\n );\n const authorizedCollectionTypeLinks = collectionTypeSectionLinks.filter(\n (_, index) => collectionTypeLinksPermissions[index]\n );\n\n // Single Types verifications\n const singleTypeLinksPermissions = await Promise.all(\n singleTypeSectionLinks.map(({ permissions }) => hasPermissions(allPermissions, permissions))\n );\n const authorizedSingleTypeLinks = singleTypeSectionLinks.filter(\n (_, index) => singleTypeLinksPermissions[index]\n );\n\n const { ctLinks } = runHookWaterfall(MUTATE_COLLECTION_TYPES_LINKS, {\n ctLinks: authorizedCollectionTypeLinks,\n models,\n });\n const { stLinks } = runHookWaterfall(MUTATE_SINGLE_TYPES_LINKS, {\n stLinks: authorizedSingleTypeLinks,\n models,\n });\n\n dispatch({\n type: 'ContentManager/App/SET_INIT_DATA',\n data: {\n authorizedCollectionTypeLinks: ctLinks,\n authorizedSingleTypeLinks: stLinks,\n contentTypeSchemas: models,\n components,\n fieldSizes,\n },\n });\n } catch (err) {\n console.error(err);\n\n toggleNotification({ type: 'warning', message: { id: 'notification.error' } });\n }\n });\n\n useEffect(() => {\n fetchDataRef.current();\n\n return () => {\n dispatch({\n type: 'ContentManager/App/RESET_INIT_DATA',\n });\n };\n }, [dispatch, toggleNotification]);\n\n return { ...state, refetchData: fetchDataRef.current };\n};\n\nconst generateLinks = (\n links: Contracts.ContentTypes.ContentType[],\n type: 'collectionTypes' | 'singleTypes',\n configurations: Contracts.ContentTypes.FindContentTypesSettings.Response['data'] = []\n) => {\n return links\n .filter((link) => link.isDisplayed)\n .map((link) => {\n const collectionTypesPermissions = [\n { action: 'plugin::content-manager.explorer.create', subject: link.uid },\n { action: 'plugin::content-manager.explorer.read', subject: link.uid },\n ];\n const singleTypesPermissions = [\n { action: 'plugin::content-manager.explorer.read', subject: link.uid },\n ];\n const permissions =\n type === 'collectionTypes' ? collectionTypesPermissions : singleTypesPermissions;\n\n const currentContentTypeConfig = configurations.find(({ uid }) => uid === link.uid);\n\n let search = null;\n\n if (currentContentTypeConfig) {\n const searchParams = {\n page: 1,\n pageSize: currentContentTypeConfig.settings.pageSize,\n sort: `${currentContentTypeConfig.settings.defaultSortBy}:${currentContentTypeConfig.settings.defaultSortOrder}`,\n };\n\n search = stringify(searchParams, { encode: false });\n }\n\n return {\n permissions,\n search,\n kind: link.kind,\n title: link.info.displayName,\n to: `/content-manager/${\n link.kind === 'collectionType' ? 'collection-types' : 'single-types'\n }/${link.uid}`,\n uid: link.uid,\n // Used for the list item key in the helper plugin\n name: link.uid,\n isDisplayed: link.isDisplayed,\n } satisfies ContentManagerLink;\n });\n};\n\nexport { useContentManagerInitData };\nexport type { ContentManagerLink };\n","import merge from 'lodash/merge';\n\nimport type { Contracts } from '@strapi/plugin-content-manager/_internal/shared';\n\ntype ContentTypeLayoutData = Contracts.ContentTypes.FindContentTypeConfiguration.Response['data'];\ntype ComponentLayoutData = Contracts.Components.FindComponentConfiguration.Response['data'];\n\ntype LayoutData<TKey> = TKey extends 'component'\n ? ComponentLayoutData\n : TKey extends 'contentType'\n ? ContentTypeLayoutData\n : never;\n\ntype Models = Array<Contracts.Components.Component | Contracts.ContentTypes.ContentType>;\n\ntype ModifiedLayoutData<TKey> = TKey extends 'component'\n ? Omit<ComponentsWithSchemas<ComponentLayoutData>, TKey> & {\n [K in TKey]: Contracts.Components.ComponentConfiguration & Contracts.Components.Component;\n }\n : TKey extends 'contentType'\n ? Omit<ComponentsWithSchemas<ContentTypeLayoutData>, TKey> & {\n [K in TKey]: Contracts.ContentTypes.Configuration & Contracts.ContentTypes.ContentType;\n }\n : never;\n\ntype ComponentsWithSchemas<\n TData extends { components: Record<string, Contracts.Components.ComponentConfiguration> }\n> = Omit<TData, 'components'> & {\n components: Record<\n string,\n Contracts.Components.ComponentConfiguration & Contracts.Components.Component\n >;\n};\n\n/**\n * TODO: this needs refactoring because typescript doesn't like the fact we just pass\n * a key that doesn't exist on both objects.\n */\nconst mergeMetasWithSchema = <TKey extends 'component' | 'contentType'>(\n data: LayoutData<TKey>,\n schemas: Models,\n mainSchemaKey: TKey\n): ModifiedLayoutData<TKey> => {\n const findSchema = (uid: string) => schemas.find((obj) => obj.uid === uid);\n const merged = Object.assign({}, data);\n\n // @ts-expect-error – TODO: fix me\n const { uid } = data[mainSchemaKey];\n const schema = findSchema(uid);\n\n // TODO:\n // In order to merge all the layers of the schema objects, we used the Lodash function \"merge\".\n // If the destructuration is used, it will only merge the first layer of properties and overwrite the nested objects.\n\n // @ts-expect-error – TODO: fix me\n merged[mainSchemaKey] = merge({}, schema, data[mainSchemaKey]);\n\n Object.keys(data.components).forEach((compoUID) => {\n const compoSchema = findSchema(compoUID);\n\n merged.components[compoUID] = {\n ...data.components[compoUID],\n ...compoSchema,\n };\n });\n\n // @ts-expect-error – TODO: fix me\n return merged;\n};\n\nexport { mergeMetasWithSchema };\nexport type { ModifiedLayoutData };\n","import cloneDeep from 'lodash/cloneDeep';\nimport omit from 'lodash/omit';\n\nimport { ModifiedLayoutData, mergeMetasWithSchema } from './schemas';\n\nimport type { Contracts } from '@strapi/plugin-content-manager/_internal/shared';\nimport type { Attribute, Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * formatLayouts\n * -----------------------------------------------------------------------------------------------*/\n\ntype LayoutData = Contracts.ContentTypes.FindContentTypeConfiguration.Response['data'];\ntype Models = Array<Contracts.Components.Component | Contracts.ContentTypes.ContentType>;\n\nconst getRelationModel = (targetModel: string, models: Models) =>\n models.find((model) => model.uid === targetModel);\n\ntype FormattedContentTypeLayout = Omit<SchemasWithMeta['contentType'], 'layouts'> & {\n layouts: {\n edit: EditLayoutRow[][];\n list: ListLayoutRow[];\n };\n};\n\ntype FormattedComponentLayout = Omit<SchemasWithMeta['components'][string], 'layouts'> & {\n layouts: {\n list: string[];\n edit: EditLayoutRow[][];\n };\n};\n\ninterface FormattedLayouts {\n contentType: FormattedContentTypeLayout;\n components: Record<string, FormattedComponentLayout>;\n}\n\nconst formatLayouts = (initialData: LayoutData, models: Models): FormattedLayouts => {\n const data = createMetasSchema(initialData, models);\n\n const contentType = {\n ...data.contentType,\n layouts: {\n ...data.contentType.layouts,\n edit: formatLayoutWithMetas(data.contentType, models),\n list: formatListLayoutWithMetas(data.contentType, data.components),\n },\n } satisfies FormattedContentTypeLayout;\n\n const components = Object.keys(data.components).reduce<Record<string, FormattedComponentLayout>>(\n (acc, componentUid) => {\n const formattedComponentEditLayout = formatLayoutWithMetas(\n data.components[componentUid],\n models\n );\n\n acc[componentUid] = {\n ...data.components[componentUid],\n layouts: {\n ...data.components[componentUid].layouts,\n edit: formattedComponentEditLayout,\n },\n } satisfies FormattedComponentLayout;\n\n return acc;\n },\n {}\n );\n\n return {\n contentType,\n components,\n };\n};\n\ntype MainField = Attribute.Any & {\n name: string;\n};\n\ninterface Metadata {\n edit: Contracts.ContentTypes.Metadatas[string]['edit'] & {\n mainField?: MainField;\n };\n list: Contracts.ContentTypes.Metadatas[string]['list'] & {\n mainField?: MainField;\n };\n}\n\ninterface SchemasWithMeta {\n contentType: Omit<ModifiedLayoutData<'contentType'>['contentType'], 'metadatas'> & {\n metadatas: Record<string, Metadata>;\n };\n components: Record<\n string,\n Omit<ModifiedLayoutData<'contentType'>['components'][string], 'metadatas'> & {\n metadatas: Record<string, Metadata>;\n }\n >;\n}\n\nconst createMetasSchema = (initialData: LayoutData, models: Models): SchemasWithMeta => {\n const data = mergeMetasWithSchema(cloneDeep(initialData), models, 'contentType');\n const { components, contentType } = data;\n\n const formatMetadatas = (\n targetSchema:\n | (Contracts.ContentTypes.Configuration & Contracts.ContentTypes.ContentType)\n | (Contracts.Components.ComponentConfiguration & Contracts.Components.Component)\n ) => {\n return Object.keys(targetSchema.metadatas).reduce<Record<string, Metadata>>((acc, current) => {\n const schema = targetSchema.attributes[current] ?? {};\n\n let metadatas: Metadata = targetSchema.metadatas[current];\n\n if (schema.type === 'relation' && 'target' in schema) {\n const relationModel = getRelationModel(schema.target, models)!;\n\n // @ts-expect-error TODO: fix this, im not sure why `mainField` is not in the type\n const mainFieldName = metadatas.edit.mainField as string;\n\n const mainField = {\n name: mainFieldName,\n ...relationModel.attributes[mainFieldName],\n };\n\n metadatas = {\n list: {\n ...metadatas.list,\n mainField,\n },\n edit: {\n ...metadatas.edit,\n mainField,\n },\n };\n }\n\n acc[current] = metadatas;\n\n return acc;\n }, {});\n };\n\n data.contentType.metadatas = formatMetadatas(contentType);\n\n Object.keys(components).forEach((compoUID) => {\n data.components[compoUID].metadatas = formatMetadatas(components[compoUID]);\n });\n\n return data;\n};\n\ninterface EditLayoutRow {\n name: string;\n size: number;\n fieldSchema: Attribute.Any & {\n /**\n * This type is not part of the strapi types, because it doesn't exist\n * on the schema, it's added by the server code.\n */\n customField?: string;\n };\n metadatas: Metadata['edit'];\n targetModelPluginOptions?: Schema.ContentType['pluginOptions'];\n queryInfos?: {\n defaultParams?: object;\n shouldDisplayRelationLink?: boolean;\n };\n}\n\nconst formatLayoutWithMetas = (\n contentTypeConfiguration: SchemasWithMeta['contentType'] | SchemasWithMeta['components'][string],\n models: Models\n) =>\n contentTypeConfiguration.layouts.edit.reduce<EditLayoutRow[][]>((acc, current) => {\n const row = current.map((attribute) => {\n const fieldSchema = contentTypeConfiguration.attributes[attribute.name] ?? {};\n\n const data: EditLayoutRow = {\n ...attribute,\n fieldSchema,\n metadatas: contentTypeConfiguration.metadatas[attribute.name].edit ?? {},\n };\n\n if (fieldSchema.type === 'relation') {\n // @ts-expect-error TODO: fix this.\n const targetModelSchema = getRelationModel(fieldSchema.target, models)!;\n const targetModelPluginOptions = targetModelSchema.pluginOptions || {};\n\n data.targetModelPluginOptions = targetModelPluginOptions;\n data.queryInfos = {\n shouldDisplayRelationLink: shouldDisplayRelationLink(\n contentTypeConfiguration,\n attribute.name,\n models\n ),\n };\n }\n\n return data;\n });\n\n acc.push(row);\n\n return acc;\n }, []);\n\ninterface ListLayoutRow {\n key: string;\n name: string;\n fieldSchema: Attribute.Any | { type: 'custom' };\n metadatas: Metadata['list'];\n}\n\nconst formatListLayoutWithMetas = (\n contentTypeConfiguration: SchemasWithMeta['contentType'],\n components: SchemasWithMeta['components']\n) => {\n const formatted = contentTypeConfiguration.layouts.list.reduce<ListLayoutRow[]>(\n (acc, current) => {\n const fieldSchema = contentTypeConfiguration.attributes[current] ?? {};\n const metadatas = contentTypeConfiguration.metadatas[current].list ?? {};\n\n if (fieldSchema.type === 'component') {\n const component = components[fieldSchema.component];\n const mainFieldName = component.settings.mainField;\n const mainFieldAttribute = component.attributes[mainFieldName];\n\n acc.push({\n key: `__${current}_key__`,\n name: current,\n fieldSchema,\n metadatas: {\n ...metadatas,\n mainField: {\n ...mainFieldAttribute,\n name: mainFieldName,\n },\n },\n });\n\n return acc;\n }\n\n acc.push({ key: `__${current}_key__`, name: current, fieldSchema, metadatas });\n\n return acc;\n },\n []\n );\n\n return formatted;\n};\n\nconst shouldDisplayRelationLink = (\n contentTypeConfiguration: SchemasWithMeta['contentType'] | SchemasWithMeta['components'][string],\n fieldName: string,\n models: Models\n): boolean => {\n // @ts-expect-error – TODO: fix this type issue.\n const targetModel = contentTypeConfiguration.attributes[fieldName].targetModel ?? '';\n\n return models.some((model) => model.uid === targetModel && model.isDisplayed);\n};\n\n/* -------------------------------------------------------------------------------------------------\n * formatLayoutForSettingsView\n * -----------------------------------------------------------------------------------------------*/\n\ninterface MetadataWithStringMainField {\n edit: Omit<Metadata['edit'], 'mainField'> & {\n mainField?: string;\n };\n list: Omit<Metadata['list'], 'mainField'>;\n}\n\ntype ReturnLayout<TLayout> = TLayout extends FormattedContentTypeLayout\n ? SettingsViewContentTypeLayout\n : SettingsViewComponentLayout;\n\nconst formatLayoutForSettingsView = <\n TLayout extends FormattedContentTypeLayout | FormattedComponentLayout\n>({\n layouts,\n metadatas,\n ...rest\n}: TLayout): ReturnLayout<TLayout> => {\n // @ts-expect-error – TODO: fix this.\n return {\n ...rest,\n layouts: {\n edit: layouts.edit.map((row) =>\n row.map(({ name, size }) => ({\n name,\n size,\n }))\n ),\n list: layouts.list.map((obj) => {\n if (typeof obj === 'object' && 'name' in obj) {\n return obj.name;\n }\n\n return obj;\n }),\n },\n metadatas: Object.keys(metadatas).reduce<Record<string, MetadataWithStringMainField>>(\n (acc, current) => {\n const currentMetadatas = metadatas[current] ?? {};\n\n if (currentMetadatas.edit.mainField) {\n return {\n ...acc,\n [current]: {\n edit: {\n ...currentMetadatas.edit,\n mainField: currentMetadatas.edit.mainField.name,\n },\n list: omit(currentMetadatas.list, ['mainField']),\n },\n };\n } else {\n return {\n ...acc,\n [current]: {\n edit: currentMetadatas.edit as MetadataWithStringMainField['edit'],\n list: omit(currentMetadatas.list, ['mainField']),\n },\n };\n }\n },\n {}\n ),\n };\n};\n\ninterface SettingsViewContentTypeLayout\n extends Omit<FormattedContentTypeLayout, 'metadatas' | 'layouts'> {\n layouts: {\n edit: Array<Array<{ name: string; size: number }>>;\n list: Array<string>;\n };\n metadatas: Record<string, MetadataWithStringMainField>;\n}\n\ninterface SettingsViewComponentLayout\n extends Omit<FormattedComponentLayout, 'metadatas' | 'layouts'> {\n layouts: {\n edit: Array<Array<{ name: string; size: number }>>;\n list: Array<string>;\n };\n metadatas: Record<string, MetadataWithStringMainField>;\n}\n\nexport { formatLayouts, formatLayoutForSettingsView };\nexport type {\n FormattedLayouts,\n FormattedContentTypeLayout,\n FormattedComponentLayout,\n ListLayoutRow,\n EditLayoutRow,\n Metadata,\n SettingsViewContentTypeLayout,\n SettingsViewComponentLayout,\n MainField,\n};\n","import * as React from 'react';\n\nimport { useFetchClient } from '@strapi/helper-plugin';\nimport { Contracts } from '@strapi/plugin-content-manager/_internal/shared';\nimport { useQuery } from 'react-query';\n\nimport { useTypedSelector } from '../../core/store/hooks';\nimport { selectSchemas } from '../pages/App';\nimport { formatLayouts } from '../utils/layouts';\n\nconst useContentTypeLayout = (contentTypeUID: string) => {\n const schemas = useTypedSelector(selectSchemas);\n const { get } = useFetchClient();\n\n const { data, isLoading, refetch } = useQuery(\n ['content-manager', 'content-types', contentTypeUID, 'configuration'],\n async () => {\n const {\n data: { data },\n } = await get<Contracts.ContentTypes.FindContentTypeConfiguration.Response>(\n `/content-manager/content-types/${contentTypeUID}/configuration`\n );\n\n return data;\n }\n );\n\n const layout = React.useMemo(() => (data ? formatLayouts(data, schemas) : null), [data, schemas]);\n\n return {\n isLoading,\n layout,\n updateLayout: refetch,\n };\n};\n\nexport { useContentTypeLayout };\n","import React from 'react';\n\nimport PropTypes from 'prop-types';\n\nexport const LayoutDndContext = React.createContext();\n\nexport function LayoutDndProvider({\n attributes,\n buttonData,\n children,\n goTo,\n layout,\n metadatas,\n moveItem,\n moveRow,\n onAddData,\n relationsLayout,\n removeField,\n selectedItemName,\n setEditFieldToSelect,\n ...rest\n}) {\n return (\n <LayoutDndContext.Provider\n value={{\n attributes,\n buttonData,\n goTo,\n layout,\n metadatas,\n moveItem,\n moveRow,\n onAddData,\n relationsLayout,\n removeField,\n selectedItemName,\n setEditFieldToSelect,\n ...rest,\n }}\n >\n {children}\n </LayoutDndContext.Provider>\n );\n}\n\nLayoutDndProvider.defaultProps = {\n attributes: {},\n buttonData: [],\n goTo() {},\n layout: [],\n metadatas: {},\n moveItem() {},\n moveRow() {},\n onAddData() {},\n relationsLayout: [],\n removeField() {},\n selectedItemName: null,\n setEditFieldToSelect() {},\n};\n\nLayoutDndProvider.propTypes = {\n attributes: PropTypes.object,\n buttonData: PropTypes.array,\n children: PropTypes.node.isRequired,\n goTo: PropTypes.func,\n layout: PropTypes.array,\n metadatas: PropTypes.object,\n moveItem: PropTypes.func,\n moveRow: PropTypes.func,\n onAddData: PropTypes.func,\n relationsLayout: PropTypes.array,\n removeField: PropTypes.func,\n selectedItemName: PropTypes.string,\n setEditFieldToSelect: PropTypes.func,\n};\n","import * as React from 'react';\n\nimport { LayoutDndContext } from '../components/LayoutDndProvider';\n\nexport function useLayoutDnd() {\n return React.useContext(LayoutDndContext);\n}\n","/**\n *\n * EditViewButton\n *\n */\n\nimport React from 'react';\n\nimport { CheckPermissions, LinkButton, useTracking } from '@strapi/helper-plugin';\nimport { Pencil } from '@strapi/icons';\nimport get from 'lodash/get';\nimport { useIntl } from 'react-intl';\n\nimport { getTranslation } from '../../../utils/translations';\nimport { useLayoutDnd } from '../hooks/useLayoutDnd';\n\nconst permissions = [{ action: 'plugin::content-type-builder.read', subject: null }];\n\n// Create link from content-type-builder to content-manager\nconst LinkToCTB = () => {\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const { slug, modifiedData, isContentTypeView } = useLayoutDnd();\n const type = isContentTypeView ? 'content-types' : 'components';\n\n const baseUrl = `/plugins/content-type-builder/${\n type === 'content-types' ? type : 'component-categories'\n }`;\n const category = get(modifiedData, 'category', '');\n\n const suffixUrl = type === 'content-types' ? slug : `${category}/${slug}`;\n\n const handleClick = () => {\n trackUsage('willEditEditLayout');\n };\n\n if (slug === 'strapi::administrator') {\n return null;\n }\n\n return (\n <CheckPermissions permissions={permissions}>\n <LinkButton\n to={`${baseUrl}/${suffixUrl}`}\n onClick={handleClick}\n size=\"S\"\n startIcon={<Pencil />}\n variant=\"secondary\"\n >\n {formatMessage({\n id: getTranslation(`edit-settings-view.link-to-ctb.${type}`),\n defaultMessage: 'Edit the content type',\n })}\n </LinkButton>\n </CheckPermissions>\n );\n};\n\nexport default LinkToCTB;\n","import React from 'react';\n\nimport { Box, Flex, Grid, GridItem, Typography } from '@strapi/design-system';\nimport { Link } from '@strapi/helper-plugin';\nimport { Cog } from '@strapi/icons';\nimport get from 'lodash/get';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { getTranslation } from '../../../utils/translations';\nimport { useLayoutDnd } from '../hooks/useLayoutDnd';\n\nconst ComponentFieldList = ({ componentUid }) => {\n const { componentLayouts } = useLayoutDnd();\n const { formatMessage } = useIntl();\n const componentData = get(componentLayouts, [componentUid], {});\n const componentLayout = get(componentData, ['layouts', 'edit'], []);\n\n return (\n <Box padding={3}>\n {componentLayout.map((row, index) => (\n // eslint-disable-next-line react/no-array-index-key\n <Grid gap={4} key={index}>\n {row.map((rowContent) => (\n <GridItem key={rowContent.name} col={rowContent.size}>\n <Box paddingTop={2}>\n <Flex\n alignItems=\"center\"\n background=\"neutral0\"\n paddingLeft={3}\n paddingRight={3}\n height={`${32 / 16}rem`}\n hasRadius\n borderColor=\"neutral200\"\n >\n <Typography textColor=\"neutral800\">{rowContent.name}</Typography>\n </Flex>\n </Box>\n </GridItem>\n ))}\n </Grid>\n ))}\n <Box paddingTop={2}>\n <Link\n startIcon={<Cog />}\n to={`/content-manager/components/${componentUid}/configurations/edit`}\n >\n {formatMessage({\n id: getTranslation('components.FieldItem.linkToComponentLayout'),\n defaultMessage: \"Set the component's layout\",\n })}\n </Link>\n </Box>\n </Box>\n );\n};\n\nComponentFieldList.propTypes = {\n componentUid: PropTypes.string.isRequired,\n};\n\nexport default ComponentFieldList;\n","import { Flex, Icon } from '@strapi/design-system';\nimport * as Icons from '@strapi/icons';\n\nimport type { Schema } from '@strapi/types';\n\ninterface ComponentIconProps {\n showBackground?: boolean;\n icon?: Schema.ContentTypeInfo['icon'];\n}\n\nconst ComponentIcon = ({ showBackground = true, icon = 'cube' }: ComponentIconProps) => {\n return (\n <Flex\n alignItems=\"center\"\n background={showBackground ? 'neutral200' : undefined}\n justifyContent=\"center\"\n height={8}\n width={8}\n color=\"neutral600\"\n borderRadius={showBackground ? '50%' : 0}\n >\n <Icon\n as={COMPONENT_ICONS[icon as keyof typeof COMPONENT_ICONS] || COMPONENT_ICONS.cube}\n height={5}\n width={5}\n />\n </Flex>\n );\n};\n\nconst COMPONENT_ICONS = {\n alien: Icons.Alien,\n apps: Icons.Apps,\n archive: Icons.Archive,\n arrowDown: Icons.ArrowDown,\n arrowLeft: Icons.ArrowLeft,\n arrowRight: Icons.ArrowRight,\n arrowUp: Icons.ArrowUp,\n attachment: Icons.Attachment,\n bell: Icons.Bell,\n bold: Icons.Bold,\n book: Icons.Book,\n briefcase: Icons.Briefcase,\n brush: Icons.Brush,\n bulletList: Icons.BulletList,\n calendar: Icons.Calendar,\n car: Icons.Car,\n cast: Icons.Cast,\n chartBubble: Icons.ChartBubble,\n chartCircle: Icons.ChartCircle,\n chartPie: Icons.ChartPie,\n check: Icons.Check,\n clock: Icons.Clock,\n cloud: Icons.Cloud,\n code: Icons.Code,\n cog: Icons.Cog,\n collapse: Icons.Collapse,\n command: Icons.Command,\n connector: Icons.Connector,\n crop: Icons.Crop,\n crown: Icons.Crown,\n cube: Icons.Cube,\n cup: Icons.Cup,\n cursor: Icons.Cursor,\n dashboard: Icons.Dashboard,\n database: Icons.Database,\n discuss: Icons.Discuss,\n doctor: Icons.Doctor,\n earth: Icons.Earth,\n emotionHappy: Icons.EmotionHappy,\n emotionUnhappy: Icons.EmotionUnhappy,\n envelop: Icons.Envelop,\n exit: Icons.Exit,\n expand: Icons.Expand,\n eye: Icons.Eye,\n feather: Icons.Feather,\n file: Icons.File,\n fileError: Icons.FileError,\n filePdf: Icons.FilePdf,\n filter: Icons.Filter,\n folder: Icons.Folder,\n gate: Icons.Gate,\n gift: Icons.Gift,\n globe: Icons.Globe,\n grid: Icons.Grid,\n handHeart: Icons.HandHeart,\n hashtag: Icons.Hashtag,\n headphone: Icons.Headphone,\n heart: Icons.Heart,\n house: Icons.House,\n information: Icons.Information,\n italic: Icons.Italic,\n key: Icons.Key,\n landscape: Icons.Landscape,\n layer: Icons.Layer,\n layout: Icons.Layout,\n lightbulb: Icons.Lightbulb,\n link: Icons.Link,\n lock: Icons.Lock,\n magic: Icons.Magic,\n manyToMany: Icons.ManyToMany,\n manyToOne: Icons.ManyToOne,\n manyWays: Icons.ManyWays,\n medium: Icons.Medium,\n message: Icons.Message,\n microphone: Icons.Microphone,\n monitor: Icons.Monitor,\n moon: Icons.Moon,\n music: Icons.Music,\n oneToMany: Icons.OneToMany,\n oneToOne: Icons.OneToOne,\n oneWay: Icons.OneWay,\n paint: Icons.Paint,\n paintBrush: Icons.PaintBrush,\n paperPlane: Icons.PaperPlane,\n pencil: Icons.Pencil,\n phone: Icons.Phone,\n picture: Icons.Picture,\n pin: Icons.Pin,\n pinMap: Icons.PinMap,\n plane: Icons.Plane,\n play: Icons.Play,\n plus: Icons.Plus,\n priceTag: Icons.PriceTag,\n puzzle: Icons.Puzzle,\n question: Icons.Question,\n quote: Icons.Quote,\n refresh: Icons.Refresh,\n repeat: Icons.Repeat,\n restaurant: Icons.Restaurant,\n rocket: Icons.Rocket,\n rotate: Icons.Rotate,\n scissors: Icons.Scissors,\n search: Icons.Search,\n seed: Icons.Seed,\n server: Icons.Server,\n shield: Icons.Shield,\n shirt: Icons.Shirt,\n shoppingCart: Icons.ShoppingCart,\n slideshow: Icons.Slideshow,\n stack: Icons.Stack,\n star: Icons.Star,\n store: Icons.Store,\n strikeThrough: Icons.StrikeThrough,\n sun: Icons.Sun,\n television: Icons.Television,\n thumbDown: Icons.ThumbDown,\n thumbUp: Icons.ThumbUp,\n train: Icons.Train,\n twitter: Icons.Twitter,\n typhoon: Icons.Typhoon,\n underline: Icons.Underline,\n user: Icons.User,\n volumeMute: Icons.VolumeMute,\n volumeUp: Icons.VolumeUp,\n walk: Icons.Walk,\n wheelchair: Icons.Wheelchair,\n write: Icons.Write,\n};\n\nexport { ComponentIcon };\nexport type { ComponentIconProps };\n","import React from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { Link } from 'react-router-dom';\nimport styled from 'styled-components';\n\nimport { ComponentIcon } from '../../../components/ComponentIcon';\nimport { useLayoutDnd } from '../hooks/useLayoutDnd';\n\nconst CustomLink = styled(Flex)`\n text-decoration: none;\n\n &:focus,\n &:hover {\n ${({ theme }) => `\n background-color: ${theme.colors.primary100};\n border-color: ${theme.colors.primary200};\n\n ${Typography} {\n color: ${theme.colors.primary600};\n }\n `}\n\n /* > ComponentIcon */\n > div:first-child {\n background: ${({ theme }) => theme.colors.primary200};\n color: ${({ theme }) => theme.colors.primary600};\n\n svg {\n path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n }\n }\n }\n`;\n\nconst DynamicZoneList = ({ components }) => {\n const { componentLayouts } = useLayoutDnd();\n\n return (\n <Flex gap={2} overflow=\"scroll hidden\" padding={3}>\n {components.map((componentUid) => (\n <CustomLink\n hasRadius\n background=\"neutral0\"\n justifyContent=\"center\"\n alignItems=\"center\"\n height={`${84 / 16}rem`}\n minWidth={`${140 / 16}rem`}\n key={componentUid}\n padding={2}\n direction=\"column\"\n borderColor=\"neutral200\"\n as={Link}\n to={`/content-manager/components/${componentUid}/configurations/edit`}\n >\n <ComponentIcon icon={componentLayouts?.[componentUid]?.info?.icon} />\n\n <Box paddingTop={1}>\n <Typography fontSize={1} textColor=\"neutral600\" fontWeight=\"bold\">\n {componentLayouts?.[componentUid]?.info?.displayName ?? ''}\n </Typography>\n </Box>\n </CustomLink>\n ))}\n </Flex>\n );\n};\n\nDynamicZoneList.propTypes = {\n components: PropTypes.arrayOf(PropTypes.string).isRequired,\n};\n\nexport default DynamicZoneList;\n","import React from 'react';\n\nimport { Box, Flex, IconButton, Typography } from '@strapi/design-system';\nimport { Pencil, Trash } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { getTranslation } from '../../../utils/translations';\n\nimport ComponentFieldList from './ComponentFieldList';\nimport DynamicZoneList from './DynamicZoneList';\n\nconst CustomIconButton = styled(IconButton)`\n background-color: transparent;\n path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n`;\n\nconst FieldButtonContent = ({ attribute, onEditField, onDeleteField, children }) => {\n const { formatMessage } = useIntl();\n\n return (\n <Box overflow=\"hidden\" width=\"100%\">\n <Flex paddingLeft={3} alignItems=\"center\" justifyContent=\"space-between\">\n <Typography fontWeight=\"semiBold\" textColor=\"neutral800\" ellipsis>\n {children}\n </Typography>\n <Flex>\n <CustomIconButton\n label={formatMessage(\n {\n id: getTranslation('containers.ListSettingsView.modal-form.edit-label'),\n defaultMessage: `Edit {fieldName}`,\n },\n { fieldName: children }\n )}\n onClick={onEditField}\n icon={<Pencil />}\n noBorder\n />\n <CustomIconButton\n label={formatMessage(\n {\n id: 'global.delete-target',\n defaultMessage: `Delete {target}`,\n },\n {\n target: children,\n }\n )}\n data-testid=\"delete-field\"\n onClick={onDeleteField}\n icon={<Trash />}\n noBorder\n />\n </Flex>\n </Flex>\n {attribute?.type === 'component' && <ComponentFieldList componentUid={attribute.component} />}\n {attribute?.type === 'dynamiczone' && <DynamicZoneList components={attribute.components} />}\n </Box>\n );\n};\n\nFieldButtonContent.defaultProps = {\n attribute: undefined,\n};\n\nFieldButtonContent.propTypes = {\n attribute: PropTypes.shape({\n components: PropTypes.array,\n component: PropTypes.string,\n type: PropTypes.string,\n }),\n onEditField: PropTypes.func.isRequired,\n onDeleteField: PropTypes.func.isRequired,\n children: PropTypes.string.isRequired,\n};\n\nexport default FieldButtonContent;\n","import React, { useEffect, useRef, useState } from 'react';\n\nimport { Box, Flex, GridItem } from '@strapi/design-system';\nimport { Drag } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useDrag, useDrop } from 'react-dnd';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport styled from 'styled-components';\n\nimport { ItemTypes } from '../../../utils/dragAndDrop';\nimport { useLayoutDnd } from '../hooks/useLayoutDnd';\n\nimport FieldButtonContent from './FieldButtonContent';\n\nconst Wrapper = styled(Flex)`\n position: relative;\n ${({ isFirst, isLast, hasHorizontalPadding }) => {\n if (isFirst) {\n return `\n padding-right: 4px;\n `;\n }\n if (isLast) {\n return `\n padding-left: 4px;\n `;\n }\n\n if (hasHorizontalPadding) {\n return `\n padding: 0 4px;\n `;\n }\n\n return '';\n }}\n ${({ showRightCarret, showLeftCarret, theme }) => {\n if (showRightCarret) {\n return `\n &:after {\n content: '';\n position: absolute;\n right: -1px;\n background-color: ${theme.colors.primary600};\n width: 2px;\n height: 100%;\n align-self: stretch;\n z-index: 1;\n }\n `;\n }\n\n if (showLeftCarret) {\n return `\n &:before {\n content: '';\n position: absolute;\n left: -1px;\n background-color: ${theme.colors.primary600};\n width: 2px;\n height: 100%;\n align-self: stretch;\n z-index: 1;\n }\n `;\n }\n\n return '';\n }};\n`;\nconst CustomDragIcon = styled(Drag)`\n height: ${12 / 16}rem;\n width: ${12 / 16}rem;\n path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n`;\nconst CustomFlex = styled(Flex)`\n display: ${({ dragStart }) => (dragStart ? 'none' : 'flex')};\n opacity: ${({ isDragging, isFullSize, isHidden }) => {\n if (isDragging && !isFullSize) {\n return 0.2;\n }\n\n if ((isDragging && isFullSize) || isHidden) {\n return 0;\n }\n\n return 1;\n }};\n`;\nconst DragButton = styled(Flex)`\n cursor: all-scroll;\n border-right: 1px solid ${({ theme }) => theme.colors.neutral200};\n`;\n\nconst DisplayedFieldButton = ({\n attribute,\n children,\n index,\n lastIndex,\n moveItem,\n moveRow,\n name,\n onDeleteField,\n onEditField,\n rowIndex,\n size,\n}) => {\n const [dragStart, setDragStart] = useState(false);\n const isHidden = name === '_TEMP_';\n const { setIsDraggingSibling } = useLayoutDnd();\n const isFullSize = size === 12;\n\n const dragRef = useRef(null);\n const dropRef = useRef(null);\n const [{ clientOffset, isOver }, drop] = useDrop({\n accept: ItemTypes.EDIT_FIELD,\n hover(item, monitor) {\n if (!dropRef.current) {\n return;\n }\n\n // We use the hover only to reorder full size items\n if (item.size !== 12) {\n return;\n }\n\n const dragIndex = monitor.getItem().index;\n const hoverIndex = index;\n const dragRow = monitor.getItem().rowIndex;\n const targetRow = rowIndex;\n\n // Don't replace item with themselves\n if (dragIndex === hoverIndex && dragRow === targetRow) {\n return;\n }\n\n // Determine rectangle on screen\n const hoverBoundingRect = dropRef.current.getBoundingClientRect();\n\n // Get vertical middle\n const hoverMiddleY = (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;\n // Determine mouse position\n const clientOffset = monitor.getClientOffset();\n\n // Get pixels to the top\n const hoverClientY = clientOffset.y - hoverBoundingRect.top;\n\n // Only perform the move when the mouse has crossed half of the items height\n // When dragging downwards, only move when the cursor is below 50%\n // When dragging upwards, only move when the cursor is above 50%\n\n // Dragging downwards\n if (dragRow < targetRow && hoverClientY < hoverMiddleY) {\n return;\n }\n\n // Dragging upwards\n if (dragRow > targetRow && hoverClientY > hoverMiddleY) {\n return;\n }\n\n moveRow(dragRow, targetRow);\n\n item.rowIndex = targetRow;\n item.itemIndex = hoverIndex;\n },\n drop(item, monitor) {\n if (!dropRef.current) {\n return;\n }\n\n const dragIndex = monitor.getItem().index;\n const hoverIndex = index;\n const dragRow = monitor.getItem().rowIndex;\n const targetRow = rowIndex;\n\n // Don't reorder on drop for full size elements since it is already done in the hover\n if (item.size === 12) {\n return;\n }\n\n // Don't replace item with themselves\n if (dragIndex === hoverIndex && dragRow === targetRow) {\n return;\n }\n\n // Determine rectangle on screen\n const hoverBoundingRect = dropRef.current.getBoundingClientRect();\n\n // Scroll window if mouse near vertical edge(100px)\n\n // Horizontal Check --\n if (\n Math.abs(monitor.getClientOffset().x - hoverBoundingRect.left) >\n hoverBoundingRect.width / 1.8\n ) {\n moveItem(dragIndex, hoverIndex + 1, dragRow, targetRow);\n\n item.itemIndex = hoverIndex + 1;\n item.rowIndex = targetRow;\n\n return;\n }\n\n // Vertical Check |\n\n // Time to actually perform the action\n moveItem(dragIndex, hoverIndex, dragRow, targetRow);\n // Note: we're mutating the monitor item here!\n // Generally it's better to avoid mutations,\n // but it's good here for the sake of performance\n // to avoid expensive index searches.\n\n item.itemIndex = hoverIndex;\n item.rowIndex = targetRow;\n },\n collect: (monitor) => ({\n canDrop: monitor.canDrop(),\n clientOffset: monitor.getClientOffset(),\n isOver: monitor.isOver(),\n isOverCurrent: monitor.isOver({ shallow: true }),\n itemType: monitor.getItemType(),\n }),\n });\n const [{ isDragging, getItem }, drag, dragPreview] = useDrag({\n type: ItemTypes.EDIT_FIELD,\n item() {\n setIsDraggingSibling(true);\n\n return {\n index,\n labelField: children,\n rowIndex,\n name,\n size,\n };\n },\n canDrag() {\n // Each row of the layout has a max size of 12 (based on bootstrap grid system)\n // So in order to offer a better drop zone we add the _TEMP_ div to complete the remaining substract (12 - existing)\n // Those divs cannot be dragged\n // If we wanted to offer the ability to create new lines in the layout (which will come later)\n // We will need to add a 12 size _TEMP_ div to offer a drop target between each existing row.\n return name !== '_TEMP_';\n },\n collect: (monitor) => ({\n isDragging: monitor.isDragging(),\n getItem: monitor.getItem(),\n }),\n end() {\n setIsDraggingSibling(false);\n },\n });\n\n // Remove the default preview when the item is being dragged\n // The preview is handled by the DragLayer\n useEffect(() => {\n dragPreview(getEmptyImage(), { captureDraggingState: true });\n }, [dragPreview]);\n\n // Create the refs\n // We need 1 for the drop target\n // 1 for the drag target\n const refs = {\n dragRef: drag(dragRef),\n dropRef: drop(dropRef),\n };\n\n let showLeftCarret = false;\n let showRightCarret = false;\n\n if (dropRef.current && clientOffset) {\n const hoverBoundingRect = dropRef.current.getBoundingClientRect();\n\n showLeftCarret =\n isOver &&\n getItem.size !== 12 &&\n Math.abs(clientOffset.x - hoverBoundingRect.left) < hoverBoundingRect.width / 2;\n showRightCarret =\n isOver &&\n getItem.size !== 12 &&\n Math.abs(clientOffset.x - hoverBoundingRect.left) > hoverBoundingRect.width / 2;\n\n if (name === '_TEMP_') {\n showLeftCarret = isOver && getItem.size !== 12;\n showRightCarret = false;\n }\n }\n\n const getHeight = () => {\n if (attribute && isFullSize) {\n return `${74 / 16}rem`;\n }\n\n return `${32 / 16}rem`;\n };\n\n const isFirst = index === 0 && !isFullSize;\n const isLast = index === lastIndex && !isFullSize;\n const hasHorizontalPadding = index !== 0 && !isFullSize;\n\n return (\n <GridItem col={size}>\n <Wrapper\n ref={refs.dropRef}\n showLeftCarret={showLeftCarret}\n showRightCarret={showRightCarret}\n isFirst={isFirst}\n isLast={isLast}\n hasHorizontalPadding={hasHorizontalPadding}\n onDrag={() => {\n if (isFullSize && !dragStart) {\n setDragStart(true);\n }\n }}\n onDragEnd={() => {\n if (isFullSize) {\n setDragStart(false);\n }\n }}\n >\n {dragStart && isFullSize && (\n <Box\n // style={{ display: isDragging ? 'block' : 'none' }}\n width=\"100%\"\n height=\"2px\"\n background=\"primary600\"\n />\n )}\n <CustomFlex\n width={isFullSize && dragStart ? 0 : '100%'}\n borderColor=\"neutral150\"\n hasRadius\n background=\"neutral100\"\n minHeight={getHeight()}\n alignItems=\"stretch\"\n isDragging={isDragging}\n dragStart={dragStart}\n isFullSize={isFullSize}\n isHidden={isHidden}\n >\n <DragButton\n as=\"span\"\n type=\"button\"\n ref={refs.dragRef}\n onClick={(e) => e.stopPropagation()}\n alignItems=\"center\"\n paddingLeft={3}\n paddingRight={3}\n // Disable the keyboard navigation since the drag n drop isn't accessible with the keyboard for the moment\n tabIndex={-1}\n >\n <CustomDragIcon />\n </DragButton>\n {!isHidden && (\n <FieldButtonContent\n attribute={attribute}\n onEditField={onEditField}\n onDeleteField={onDeleteField}\n >\n {children}\n </FieldButtonContent>\n )}\n </CustomFlex>\n </Wrapper>\n </GridItem>\n );\n};\n\nDisplayedFieldButton.defaultProps = {\n attribute: undefined,\n};\n\nDisplayedFieldButton.propTypes = {\n attribute: PropTypes.shape({\n components: PropTypes.array,\n component: PropTypes.string,\n type: PropTypes.string,\n }),\n children: PropTypes.string.isRequired,\n index: PropTypes.number.isRequired,\n moveItem: PropTypes.func.isRequired,\n moveRow: PropTypes.func.isRequired,\n name: PropTypes.string.isRequired,\n onDeleteField: PropTypes.func.isRequired,\n onEditField: PropTypes.func.isRequired,\n rowIndex: PropTypes.number.isRequired,\n lastIndex: PropTypes.number.isRequired,\n size: PropTypes.number.isRequired,\n};\n\nexport default DisplayedFieldButton;\n","import React from 'react';\n\nimport get from 'lodash/get';\nimport PropTypes from 'prop-types';\n\nimport { useLayoutDnd } from '../hooks/useLayoutDnd';\n\nimport DisplayedFieldButton from './DisplayedFieldButton';\n\nconst RowItemsLayout = ({ rowItem, onRemoveField, rowId, rowIndex, index, lastIndex }) => {\n const { setEditFieldToSelect, attributes, modifiedData, moveRow, moveItem } = useLayoutDnd();\n const attribute = get(attributes, [rowItem.name], {});\n const attributeLabel = get(modifiedData, ['metadatas', rowItem.name, 'edit', 'label'], '');\n\n return (\n <DisplayedFieldButton\n onEditField={() => setEditFieldToSelect(rowItem.name)}\n onDeleteField={() => onRemoveField(rowId, index)}\n attribute={attribute}\n index={index}\n lastIndex={lastIndex}\n rowIndex={rowIndex}\n name={rowItem.name}\n size={rowItem.size}\n moveRow={moveRow}\n moveItem={moveItem}\n >\n {attributeLabel || rowItem.name}\n </DisplayedFieldButton>\n );\n};\n\nRowItemsLayout.propTypes = {\n index: PropTypes.number.isRequired,\n lastIndex: PropTypes.number.isRequired,\n onRemoveField: PropTypes.func.isRequired,\n rowId: PropTypes.number.isRequired,\n rowIndex: PropTypes.number.isRequired,\n rowItem: PropTypes.object.isRequired,\n};\n\nexport default RowItemsLayout;\n","import React from 'react';\n\nimport { Grid } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\n\nimport RowItemsLayout from './RowItemsLayout';\n\nconst RowsLayout = ({ row, onRemoveField, rowIndex }) => {\n return (\n <Grid>\n {row.rowContent.map((rowItem, index) => {\n return (\n <RowItemsLayout\n key={rowItem.name}\n rowItem={rowItem}\n index={index}\n rowId={row.rowId}\n onRemoveField={onRemoveField}\n rowIndex={rowIndex}\n lastIndex={row.rowContent.length - 1}\n />\n );\n })}\n </Grid>\n );\n};\n\nRowsLayout.propTypes = {\n onRemoveField: PropTypes.func.isRequired,\n row: PropTypes.object.isRequired,\n rowIndex: PropTypes.number.isRequired,\n};\n\nexport default RowsLayout;\n","import React from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { Menu } from '@strapi/design-system/v2';\nimport { Plus } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { getTranslation } from '../../../utils/translations';\n\nimport LinkToCTB from './LinkToCTB';\nimport RowsLayout from './RowsLayout';\n\nconst DisplayedFields = ({ editLayout, fields, onRemoveField, onAddField }) => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex justifyContent=\"space-between\">\n <div>\n <Box>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: getTranslation('containers.ListPage.displayedFields'),\n defaultMessage: 'Displayed fields',\n })}\n </Typography>\n </Box>\n <Box>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'containers.SettingPage.editSettings.description',\n defaultMessage: 'Drag & drop the fields to build the layout',\n })}\n </Typography>\n </Box>\n </div>\n <LinkToCTB />\n </Flex>\n <Box padding={4} hasRadius borderStyle=\"dashed\" borderWidth=\"1px\" borderColor=\"neutral300\">\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n {editLayout.map((row, index) => (\n <RowsLayout key={row.rowId} row={row} rowIndex={index} onRemoveField={onRemoveField} />\n ))}\n <Menu.Root>\n <Menu.Trigger\n startIcon={<Plus />}\n endIcon={null}\n disabled={fields.length === 0}\n fullWidth\n variant=\"secondary\"\n >\n {formatMessage({\n id: getTranslation('containers.SettingPage.add.field'),\n defaultMessage: 'Insert another field',\n })}\n </Menu.Trigger>\n <Menu.Content>\n {fields.map((field) => (\n <Menu.Item key={field} onSelect={() => onAddField(field)}>\n {field}\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Root>\n </Flex>\n </Box>\n </Flex>\n );\n};\n\nDisplayedFields.propTypes = {\n editLayout: PropTypes.array.isRequired,\n fields: PropTypes.array.isRequired,\n onAddField: PropTypes.func.isRequired,\n onRemoveField: PropTypes.func.isRequired,\n};\n\nexport default DisplayedFields;\n","import { Box } from '@strapi/design-system';\nimport { useCustomFields } from '@strapi/helper-plugin';\nimport {\n Boolean,\n Component,\n Date,\n DynamicZone,\n Email,\n Enumeration,\n Json,\n Media,\n Number,\n Relation,\n Text,\n Uid,\n} from '@strapi/icons';\n\nconst iconByTypes = {\n biginteger: <Number />,\n boolean: <Boolean />,\n date: <Date />,\n datetime: <Date />,\n decimal: <Number />,\n email: <Email />,\n enum: <Enumeration />,\n enumeration: <Enumeration />,\n file: <Media />,\n files: <Media />,\n float: <Number />,\n integer: <Number />,\n media: <Media />,\n number: <Number />,\n relation: <Relation />,\n string: <Text />,\n text: <Text />,\n richtext: <Text />,\n time: <Date />,\n timestamp: <Date />,\n json: <Json />,\n uid: <Uid />,\n component: <Component />,\n dynamiczone: <DynamicZone />,\n};\n\ninterface FieldTypeIconProps {\n type: keyof typeof iconByTypes;\n customFieldUid?: string;\n}\n\nconst FieldTypeIcon = ({ type, customFieldUid }: FieldTypeIconProps) => {\n const customFieldsRegistry = useCustomFields();\n\n let Compo = iconByTypes[type];\n\n if (customFieldUid) {\n const customField = customFieldsRegistry.get(customFieldUid);\n const CustomFieldIcon = customField?.icon;\n\n if (CustomFieldIcon) {\n Compo = (\n <Box marginRight={3} width={7} height={6}>\n <CustomFieldIcon />\n </Box>\n );\n }\n }\n\n if (!iconByTypes[type]) {\n return null;\n }\n\n return Compo;\n};\n\nexport { FieldTypeIcon };\n","const createPossibleMainFieldsForModelsAndComponents = (array) => {\n return array.reduce((acc, current) => {\n const attributes = current?.attributes ?? {};\n const possibleMainFields = Object.keys(attributes).filter((attr) => {\n return ![\n 'boolean',\n 'component',\n 'dynamiczone',\n 'json',\n 'media',\n 'password',\n 'relation',\n 'text',\n 'richtext',\n 'blocks',\n ].includes(attributes?.[attr]?.type ?? '');\n });\n\n acc[current.uid] = possibleMainFields;\n\n return acc;\n }, {});\n};\n\nexport default createPossibleMainFieldsForModelsAndComponents;\n","import { getTranslation } from '../../../utils/translations';\n\nconst getInputProps = (fieldName) => {\n let type;\n\n switch (fieldName) {\n case 'description':\n case 'label':\n case 'placeholder':\n type = 'text';\n break;\n case 'mainField':\n type = 'select';\n break;\n case 'editable':\n type = 'bool';\n break;\n default:\n type = '';\n }\n\n const labelId =\n fieldName === 'mainField'\n ? getTranslation('containers.SettingPage.editSettings.entry.title')\n : getTranslation(`form.Input.${fieldName}`);\n\n return { type, label: { id: labelId } };\n};\n\nexport default getInputProps;\n","import React from 'react';\n\nimport { Option, Select, TextInput, ToggleInput } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nconst GenericInput = ({ type, options, onChange, value, name, ...inputProps }) => {\n const { formatMessage } = useIntl();\n\n switch (type) {\n case 'text': {\n return <TextInput onChange={onChange} value={value} name={name} {...inputProps} />;\n }\n case 'bool': {\n return (\n <ToggleInput\n onChange={(e) => {\n onChange({ target: { name, value: e.target.checked } });\n }}\n checked={value}\n name={name}\n onLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.on-label',\n defaultMessage: 'On',\n })}\n offLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.off-label',\n defaultMessage: 'Off',\n })}\n {...inputProps}\n />\n );\n }\n case 'select': {\n return (\n <Select\n value={value}\n name={name}\n onChange={(value) => onChange({ target: { name, value } })}\n {...inputProps}\n >\n {options.map((option) => (\n <Option key={option} value={option}>\n {option}\n </Option>\n ))}\n </Select>\n );\n }\n default:\n return null;\n }\n};\n\nGenericInput.defaultProps = {\n options: undefined,\n};\n\nGenericInput.propTypes = {\n type: PropTypes.string.isRequired,\n options: PropTypes.arrayOf(PropTypes.string),\n onChange: PropTypes.func.isRequired,\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]).isRequired,\n name: PropTypes.string.isRequired,\n};\n\nexport default GenericInput;\n","import React, { useCallback, useMemo } from 'react';\n\nimport { GridItem, Option, Select } from '@strapi/design-system';\nimport get from 'lodash/get';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { useSelector } from 'react-redux';\n\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { getTranslation } from '../../../utils/translations';\nimport { selectSchemas } from '../../App';\nimport { useLayoutDnd } from '../hooks/useLayoutDnd';\nimport { createPossibleMainFieldsForModelsAndComponents, getInputProps } from '../utils';\n\nimport GenericInput from './GenericInput';\n\nconst FIELD_SIZES = [\n [4, '33%'],\n [6, '50%'],\n [8, '66%'],\n [12, '100%'],\n];\n\nconst ModalForm = ({ onMetaChange, onSizeChange }) => {\n const { formatMessage } = useIntl();\n const { modifiedData, selectedField, attributes, fieldForm } = useLayoutDnd();\n const schemas = useSelector(selectSchemas);\n const fieldSizes = useTypedSelector((state) => state['content-manager_app'].fieldSizes);\n\n const formToDisplay = useMemo(() => {\n if (!selectedField) {\n return [];\n }\n\n const associatedMetas = get(modifiedData, ['metadatas', selectedField, 'edit'], {});\n\n return Object.keys(associatedMetas).filter((meta) => meta !== 'visible');\n }, [selectedField, modifiedData]);\n\n const componentsAndModelsPossibleMainFields = useMemo(() => {\n return createPossibleMainFieldsForModelsAndComponents(schemas);\n }, [schemas]);\n\n const getSelectedItemSelectOptions = useCallback(\n (formType) => {\n if (formType !== 'relation' && formType !== 'component') {\n return [];\n }\n\n const targetKey = formType === 'component' ? 'component' : 'targetModel';\n const key = get(modifiedData, ['attributes', selectedField, targetKey], '');\n\n return get(componentsAndModelsPossibleMainFields, [key], []);\n },\n\n [selectedField, componentsAndModelsPossibleMainFields, modifiedData]\n );\n\n const metaFields = formToDisplay.map((meta) => {\n const formType = get(attributes, [selectedField, 'type']);\n\n if (\n ['component', 'dynamiczone'].includes(formType) &&\n !['label', 'description'].includes(meta)\n ) {\n return null;\n }\n\n if (formType === 'component' && meta !== 'label') {\n return null;\n }\n\n if (['media', 'json', 'boolean'].includes(formType) && meta === 'placeholder') {\n return null;\n }\n\n if (meta === 'step') {\n return null;\n }\n\n return (\n <GridItem col={6} key={meta}>\n <GenericInput\n type={getInputProps(meta).type}\n hint={\n meta === 'mainField'\n ? formatMessage({\n id: getTranslation(\n 'containers.SettingPage.editSettings.relation-field.description'\n ),\n })\n : ''\n }\n label={formatMessage({\n id: get(getInputProps(meta), 'label.id', 'app.utils.defaultMessage'),\n })}\n name={meta}\n onChange={onMetaChange}\n value={get(fieldForm, ['metadata', meta], '')}\n options={getSelectedItemSelectOptions(formType)}\n />\n </GridItem>\n );\n });\n\n // Check for a custom input provided by a custom field, or use the default one for that type\n const { type, customField } = attributes[selectedField];\n const { isResizable } = fieldSizes[customField] ?? fieldSizes[type];\n\n return (\n <>\n {metaFields}\n {isResizable && (\n <GridItem col={6} key=\"size\">\n <Select\n value={fieldForm?.size}\n name=\"size\"\n onChange={(value) => {\n onSizeChange({ name: selectedField, value });\n }}\n label={formatMessage({\n id: getTranslation('containers.SettingPage.editSettings.size.label'),\n defaultMessage: 'Size',\n })}\n >\n {FIELD_SIZES.map(([value, label]) => (\n <Option key={value} value={value}>\n {label}\n </Option>\n ))}\n </Select>\n </GridItem>\n )}\n </>\n );\n};\n\nModalForm.propTypes = {\n onMetaChange: PropTypes.func.isRequired,\n onSizeChange: PropTypes.func.isRequired,\n};\n\nexport default ModalForm;\n","import React from 'react';\n\nimport {\n Button,\n Flex,\n Grid,\n ModalBody,\n ModalFooter,\n ModalHeader,\n ModalLayout,\n Typography,\n} from '@strapi/design-system';\nimport upperFirst from 'lodash/upperFirst';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { FieldTypeIcon } from '../../../components/FieldTypeIcon';\nimport { getTranslation } from '../../../utils/translations';\nimport { useLayoutDnd } from '../hooks/useLayoutDnd';\n\nimport ModalForm from './ModalForm';\n\nconst HeaderContainer = styled(Flex)`\n svg {\n width: ${32 / 16}rem;\n height: ${24 / 16}rem;\n margin-right: ${({ theme }) => theme.spaces[3]};\n }\n`;\n\nconst FormModal = ({ onToggle, onMetaChange, onSizeChange, onSubmit, type, customFieldUid }) => {\n const { selectedField } = useLayoutDnd();\n const { formatMessage } = useIntl();\n\n const getAttrType = () => {\n if (type === 'timestamp') {\n return 'date';\n }\n\n if (['decimal', 'float', 'integer', 'biginter'].includes(type)) {\n return 'number';\n }\n\n return type;\n };\n\n return (\n <ModalLayout onClose={onToggle} labelledBy=\"title\">\n <form onSubmit={onSubmit}>\n <ModalHeader>\n <HeaderContainer>\n <FieldTypeIcon type={getAttrType()} customFieldUid={customFieldUid} />\n <Typography fontWeight=\"bold\" textColor=\"neutral800\" as=\"h2\" id=\"title\">\n {formatMessage(\n {\n id: getTranslation('containers.ListSettingsView.modal-form.edit-label'),\n defaultMessage: 'Edit {fieldName}',\n },\n { fieldName: upperFirst(selectedField) }\n )}\n </Typography>\n </HeaderContainer>\n </ModalHeader>\n <ModalBody>\n <Grid gap={4}>\n <ModalForm onMetaChange={onMetaChange} onSizeChange={onSizeChange} />\n </Grid>\n </ModalBody>\n <ModalFooter\n startActions={\n <Button onClick={onToggle} variant=\"tertiary\">\n {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'Cancel' })}\n </Button>\n }\n endActions={\n <Button type=\"submit\">\n {formatMessage({ id: 'global.finish', defaultMessage: 'Finish' })}\n </Button>\n }\n />\n </form>\n </ModalLayout>\n );\n};\n\nFormModal.defaultProps = {\n customFieldUid: null,\n};\n\nFormModal.propTypes = {\n customFieldUid: PropTypes.string,\n onSubmit: PropTypes.func.isRequired,\n onToggle: PropTypes.func.isRequired,\n onMetaChange: PropTypes.func.isRequired,\n onSizeChange: PropTypes.func.isRequired,\n type: PropTypes.string.isRequired,\n};\n\nexport default FormModal;\n","const getRowSize = (arr) => arr.reduce((sum, value) => sum + value.size, 0);\n\nconst createLayout = (arr) => {\n return arr.reduce((acc, current, index) => {\n const row = { rowId: index, rowContent: current };\n\n return acc.concat(row);\n }, []);\n};\n\nconst formatLayout = (arr) => {\n return arr\n .reduce((acc, current) => {\n let toPush = [];\n const currentRow = current.rowContent.reduce((acc2, curr) => {\n const acc2Size = getRowSize(acc2);\n\n if (curr.name === '_TEMP_') {\n return acc2;\n }\n\n if (acc2Size + curr.size <= 12) {\n acc2.push(curr);\n } else {\n toPush.push(curr);\n }\n\n return acc2;\n }, []);\n const rowId =\n acc.length === 0\n ? 0\n : Math.max.apply(\n Math,\n acc.map((o) => o.rowId)\n ) + 1;\n\n const currentRowSize = getRowSize(currentRow);\n\n if (currentRowSize < 12) {\n currentRow.push({ name: '_TEMP_', size: 12 - currentRowSize });\n }\n\n acc.push({ rowId, rowContent: currentRow });\n\n if (toPush.length > 0) {\n const toPushSize = getRowSize(toPush);\n\n if (toPushSize < 12) {\n toPush.push({ name: '_TEMP_', size: 12 - toPushSize });\n }\n\n acc.push({ rowId: rowId + 1, rowContent: toPush });\n toPush = [];\n }\n\n return acc;\n }, [])\n .filter((row) => row.rowContent.length > 0)\n .filter((row) => {\n if (row.rowContent.length === 1) {\n return row.rowContent[0].name !== '_TEMP_';\n }\n\n return true;\n });\n};\n\nconst unformatLayout = (arr) => {\n return arr.reduce((acc, current) => {\n const currentRow = current.rowContent.filter((content) => content.name !== '_TEMP_');\n\n return acc.concat([currentRow]);\n }, []);\n};\n\nconst getFieldSize = (name, layouts = []) => {\n return layouts.reduce((acc, { rowContent }) => {\n const size = rowContent.find((row) => row.name === name)?.size ?? null;\n\n if (size) {\n acc = size;\n }\n\n return acc;\n }, null);\n};\n\nconst setFieldSize = (name, size, layouts = []) => {\n return layouts.map((row) => {\n row.rowContent = row.rowContent.map((column) => {\n if (column.name === name) {\n return {\n ...column,\n size,\n };\n }\n\n return column;\n });\n\n return row;\n });\n};\n\nexport { createLayout, formatLayout, getFieldSize, getRowSize, setFieldSize, unformatLayout };\n","import cloneDeep from 'lodash/cloneDeep';\nimport set from 'lodash/set';\n\nimport { createLayout, formatLayout } from './utils/layout';\n\nconst init = (initialState, mainLayout, components) => {\n let initialData = cloneDeep(mainLayout);\n\n set(initialData, ['layouts', 'edit'], formatLayout(createLayout(mainLayout.layouts.edit)));\n\n return {\n ...initialState,\n initialData,\n modifiedData: initialData,\n componentLayouts: components,\n };\n};\n\nexport default init;\n","import cloneDeep from 'lodash/cloneDeep';\n\nconst arrayMoveItem = <TArr extends any[]>(arr: TArr, from: number, to: number): TArr => {\n if (\n Array.isArray(arr) &&\n from >= 0 &&\n to >= 0 &&\n from <= arr.length - 1 &&\n to <= arr.length - 1\n ) {\n const newArray = cloneDeep(arr);\n\n const item = newArray.splice(from, 1);\n newArray.splice(to, 0, item[0]);\n\n return newArray;\n }\n\n return arr;\n};\n\nexport { arrayMoveItem };\n","import produce from 'immer';\nimport cloneDeep from 'lodash/cloneDeep';\nimport get from 'lodash/get';\nimport set from 'lodash/set';\n\nimport { arrayMoveItem } from '../../utils/arrayMoveItem';\n\nimport { formatLayout, getFieldSize, setFieldSize } from './utils/layout';\n\nconst DEFAULT_FIELD_SIZE = 6;\n\nconst initialState = {\n fieldForm: {},\n componentLayouts: {},\n metaToEdit: '',\n initialData: {},\n metaForm: {},\n modifiedData: {},\n};\n\nconst reducer = (state = initialState, action) =>\n // eslint-disable-next-line consistent-return\n produce(state, (draftState) => {\n const layoutPathEdit = ['modifiedData', 'layouts', 'edit'];\n\n switch (action.type) {\n case 'MOVE_ROW': {\n const editFieldLayoutValue = get(state, layoutPathEdit, []);\n const { fromIndex, toIndex } = action;\n set(draftState, layoutPathEdit, arrayMoveItem(editFieldLayoutValue, fromIndex, toIndex));\n break;\n }\n case 'ON_ADD_FIELD': {\n const newState = cloneDeep(state);\n const attribute = get(newState, ['modifiedData', 'attributes', action.name], {});\n\n // Get the default size, checking custom fields first, then the type and generic defaults\n const size =\n action.fieldSizes[attribute?.customField]?.default ??\n action.fieldSizes[attribute?.type]?.default ??\n DEFAULT_FIELD_SIZE;\n\n const listSize = get(newState, layoutPathEdit, []).length;\n const actualRowContentPath = [...layoutPathEdit, listSize - 1, 'rowContent'];\n const rowContentToSet = get(newState, actualRowContentPath, []);\n let newList = get(newState, layoutPathEdit, []);\n\n if (Array.isArray(rowContentToSet)) {\n set(\n newList,\n [listSize > 0 ? listSize - 1 : 0, 'rowContent'],\n [...rowContentToSet, { name: action.name, size }]\n );\n } else {\n set(\n newList,\n [listSize > 0 ? listSize - 1 : 0, 'rowContent'],\n [{ name: action.name, size }]\n );\n }\n\n const formattedList = formatLayout(newList);\n set(draftState, layoutPathEdit, formattedList);\n break;\n }\n case 'ON_CHANGE': {\n set(draftState, ['modifiedData', ...action.keys], action.value);\n break;\n }\n case 'ON_CHANGE_META': {\n set(draftState, ['metaForm', 'metadata', ...action.keys], action.value);\n break;\n }\n case 'ON_CHANGE_SIZE': {\n set(draftState, ['metaForm', 'size'], action.value);\n break;\n }\n case 'ON_RESET': {\n draftState.modifiedData = state.initialData;\n break;\n }\n case 'REMOVE_FIELD': {\n const row = get(state, [...layoutPathEdit, action.rowIndex, 'rowContent'], []);\n let newState = cloneDeep(state);\n\n if (row.length === 1 || (row.length === 2 && get(row, [1, 'name'], '') === '_TEMP_')) {\n const currentRowFieldList = get(state, layoutPathEdit, []);\n set(\n newState,\n layoutPathEdit,\n currentRowFieldList.filter((_, index) => action.rowIndex !== index)\n );\n } else {\n set(\n newState,\n [...layoutPathEdit, action.rowIndex, 'rowContent'],\n row.filter((_, index) => index !== action.fieldIndex)\n );\n }\n const updatedList = formatLayout(get(newState, layoutPathEdit, []));\n set(draftState, layoutPathEdit, updatedList);\n break;\n }\n case 'REORDER_DIFF_ROW': {\n const actualRowContent = get(\n state,\n [...layoutPathEdit, action.dragRowIndex, 'rowContent'],\n []\n );\n const targetRowContent = get(\n state,\n [...layoutPathEdit, action.hoverRowIndex, 'rowContent'],\n []\n );\n const itemToInsert = get(\n state,\n [...layoutPathEdit, action.dragRowIndex, 'rowContent', action.dragIndex],\n {}\n );\n const rowContent = [...targetRowContent, itemToInsert];\n let newState = cloneDeep(state);\n\n set(\n newState,\n [...layoutPathEdit, action.dragRowIndex, 'rowContent'],\n actualRowContent.filter((_, index) => action.dragIndex !== index)\n );\n set(\n newState,\n [...layoutPathEdit, action.hoverRowIndex, 'rowContent'],\n arrayMoveItem(rowContent, rowContent.length - 1, action.hoverIndex)\n );\n\n const updatedList = formatLayout(get(newState, layoutPathEdit, []));\n set(draftState, layoutPathEdit, updatedList);\n break;\n }\n case 'REORDER_ROW': {\n const newState = cloneDeep(state);\n const rowContent = get(\n newState,\n [...layoutPathEdit, action.dragRowIndex, 'rowContent'],\n []\n );\n\n set(\n newState,\n [...layoutPathEdit, action.dragRowIndex, 'rowContent'],\n arrayMoveItem(rowContent, action.dragIndex, action.hoverIndex)\n );\n\n const updatedList = formatLayout(get(newState, layoutPathEdit, []));\n set(draftState, layoutPathEdit, updatedList);\n break;\n }\n case 'SET_FIELD_TO_EDIT': {\n draftState.metaToEdit = action.name;\n draftState.metaForm = {\n metadata: get(state, ['modifiedData', 'metadatas', action.name, 'edit'], {}),\n size: getFieldSize(action.name, state.modifiedData?.layouts?.edit) ?? DEFAULT_FIELD_SIZE,\n };\n\n break;\n }\n case 'SUBMIT_META_FORM': {\n set(\n draftState,\n ['modifiedData', 'metadatas', state.metaToEdit, 'edit'],\n state.metaForm.metadata\n );\n\n const layoutsCopy = cloneDeep(get(state, layoutPathEdit, []));\n const nextLayoutValue = setFieldSize(state.metaToEdit, state.metaForm.size, layoutsCopy);\n\n if (nextLayoutValue.length > 0) {\n set(draftState, layoutPathEdit, formatLayout(nextLayoutValue));\n }\n\n break;\n }\n case 'SUBMIT_SUCCEEDED': {\n draftState.initialData = state.modifiedData;\n break;\n }\n case 'UNSET_FIELD_TO_EDIT': {\n draftState.metaToEdit = '';\n draftState.metaForm = {};\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport default reducer;\nexport { initialState };\n","import React, { useReducer, useState } from 'react';\n\nimport {\n Box,\n Button,\n ContentLayout,\n Divider,\n Flex,\n Grid,\n GridItem,\n HeaderLayout,\n Main,\n Option,\n Select,\n Typography,\n} from '@strapi/design-system';\nimport {\n ConfirmDialog,\n Link,\n useFetchClient,\n useNotification,\n useTracking,\n} from '@strapi/helper-plugin';\nimport { ArrowLeft, Check } from '@strapi/icons';\nimport cloneDeep from 'lodash/cloneDeep';\nimport isEqual from 'lodash/isEqual';\nimport upperFirst from 'lodash/upperFirst';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { useMutation } from 'react-query';\nimport { useHistory } from 'react-router-dom';\n\nimport { useTypedSelector } from '../../../core/store/hooks';\nimport { getTranslation } from '../../utils/translations';\n\nimport DisplayedFields from './components/DisplayedFields';\nimport ModalForm from './components/FormModal';\nimport { LayoutDndProvider } from './components/LayoutDndProvider';\nimport init from './init';\nimport reducer, { initialState } from './reducer';\nimport { unformatLayout } from './utils/layout';\n\nconst EditSettingsView = ({ mainLayout, components, isContentTypeView, slug, updateLayout }) => {\n const [reducerState, dispatch] = useReducer(reducer, initialState, () =>\n init(initialState, mainLayout, components)\n );\n const [isDraggingSibling, setIsDraggingSibling] = useState(false);\n const { trackUsage } = useTracking();\n const toggleNotification = useNotification();\n const { goBack } = useHistory();\n const [isModalFormOpen, setIsModalFormOpen] = useState(false);\n const [isConfirmDialogOpen, setIsConfirmDialogOpen] = useState(false);\n const { componentLayouts, initialData, modifiedData, metaToEdit, metaForm } = reducerState;\n const { formatMessage } = useIntl();\n const modelName = mainLayout.info.displayName;\n const attributes = modifiedData?.attributes ?? {};\n const fieldSizes = useTypedSelector((state) => state['content-manager_app'].fieldSizes);\n const { put } = useFetchClient();\n\n const entryTitleOptions = Object.keys(attributes).filter((attr) => {\n const type = attributes?.[attr]?.type ?? '';\n\n return (\n ![\n 'dynamiczone',\n 'json',\n 'text',\n 'relation',\n 'component',\n 'boolean',\n 'media',\n 'password',\n 'richtext',\n 'timestamp',\n 'blocks',\n ].includes(type) && !!type\n );\n });\n const editLayout = modifiedData.layouts.edit;\n const displayedFields = editLayout.flatMap((layout) => layout.rowContent);\n const editLayoutFields = Object.keys(modifiedData.attributes)\n .filter((attr) => (modifiedData?.metadatas?.[attr]?.edit?.visible ?? false) === true)\n .filter((attr) => displayedFields.findIndex((el) => el.name === attr) === -1)\n .sort();\n\n const handleChange = ({ target: { name, value } }) => {\n dispatch({\n type: 'ON_CHANGE',\n keys: name.split('.'),\n value,\n });\n };\n\n const handleToggleModal = () => {\n setIsModalFormOpen((prev) => !prev);\n };\n\n const toggleConfirmDialog = () => {\n setIsConfirmDialogOpen((prev) => !prev);\n };\n\n const handleMetaChange = ({ target: { name, value } }) => {\n dispatch({\n type: 'ON_CHANGE_META',\n keys: name.split('.'),\n value,\n });\n };\n\n const handleSizeChange = ({ name, value }) => {\n dispatch({\n type: 'ON_CHANGE_SIZE',\n name,\n value,\n });\n };\n\n const handleMetaSubmit = (e) => {\n e.preventDefault();\n dispatch({\n type: 'SUBMIT_META_FORM',\n });\n handleToggleModal();\n };\n\n const handleSubmit = (e) => {\n e.preventDefault();\n toggleConfirmDialog();\n };\n\n const submitMutation = useMutation(\n (body) => {\n return put(\n isContentTypeView\n ? `/content-manager/content-types/${slug}/configuration`\n : `/content-manager/components/${slug}/configuration`,\n body\n );\n },\n {\n onSuccess({ data }) {\n if (updateLayout) {\n updateLayout(data.data);\n }\n dispatch({\n type: 'SUBMIT_SUCCEEDED',\n });\n toggleConfirmDialog();\n trackUsage('didEditEditSettings');\n },\n onError() {\n toggleNotification({ type: 'warning', message: { id: 'notification.error' } });\n },\n }\n );\n const { isLoading: isSubmittingForm } = submitMutation;\n\n const handleConfirm = () => {\n const { layouts, metadatas, settings } = cloneDeep(modifiedData);\n submitMutation.mutate({\n layouts: {\n ...layouts,\n edit: unformatLayout(layouts.edit),\n },\n metadatas,\n settings,\n });\n };\n\n const handleMoveRelation = (fromIndex, toIndex) => {\n dispatch({\n type: 'MOVE_RELATION',\n fromIndex,\n toIndex,\n });\n };\n\n const handleMoveField = (fromIndex, toIndex) => {\n dispatch({\n type: 'MOVE_FIELD',\n fromIndex,\n toIndex,\n });\n };\n\n const moveItem = (dragIndex, hoverIndex, dragRowIndex, hoverRowIndex) => {\n // Same row = just reorder\n if (dragRowIndex === hoverRowIndex) {\n dispatch({\n type: 'REORDER_ROW',\n dragRowIndex,\n dragIndex,\n hoverIndex,\n });\n } else {\n dispatch({\n type: 'REORDER_DIFF_ROW',\n dragIndex,\n hoverIndex,\n dragRowIndex,\n hoverRowIndex,\n });\n }\n };\n\n const moveRow = (fromIndex, toIndex) => {\n dispatch({\n type: 'MOVE_ROW',\n fromIndex,\n toIndex,\n });\n };\n\n return (\n <LayoutDndProvider\n isContentTypeView={isContentTypeView}\n attributes={attributes}\n modifiedData={modifiedData}\n slug={slug}\n componentLayouts={componentLayouts}\n selectedField={metaToEdit}\n fieldForm={metaForm}\n onMoveRelation={handleMoveRelation}\n onMoveField={handleMoveField}\n moveRow={moveRow}\n moveItem={moveItem}\n setEditFieldToSelect={(name) => {\n dispatch({\n type: 'SET_FIELD_TO_EDIT',\n name,\n });\n handleToggleModal();\n }}\n isDraggingSibling={isDraggingSibling}\n setIsDraggingSibling={setIsDraggingSibling}\n >\n <Main>\n <form onSubmit={handleSubmit}>\n <HeaderLayout\n title={formatMessage(\n {\n id: getTranslation('components.SettingsViewWrapper.pluginHeader.title'),\n defaultMessage: `Configure the view - ${upperFirst(modelName)}`,\n },\n { name: upperFirst(modelName) }\n )}\n subtitle={formatMessage({\n id: getTranslation(\n 'components.SettingsViewWrapper.pluginHeader.description.edit-settings'\n ),\n defaultMessage: 'Customize how the edit view will look like.',\n })}\n navigationAction={\n <Link\n startIcon={<ArrowLeft />}\n onClick={(e) => {\n e.preventDefault();\n goBack();\n }}\n to=\"/\"\n >\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n primaryAction={\n <Button\n disabled={isEqual(initialData, modifiedData)}\n startIcon={<Check />}\n type=\"submit\"\n >\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n }\n />\n <ContentLayout>\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: getTranslation('containers.SettingPage.settings'),\n defaultMessage: 'Settings',\n })}\n </Typography>\n <Grid>\n <GridItem col={6} s={12}>\n <Select\n label={formatMessage({\n id: getTranslation('containers.SettingPage.editSettings.entry.title'),\n defaultMessage: 'Entry title',\n })}\n hint={formatMessage({\n id: getTranslation(\n 'containers.SettingPage.editSettings.entry.title.description'\n ),\n defaultMessage: 'Set the display field of your entry',\n })}\n onChange={(value) => {\n handleChange({\n target: {\n name: 'settings.mainField',\n value: value === '' ? null : value,\n },\n });\n }}\n value={modifiedData.settings.mainField}\n >\n {entryTitleOptions.map((attribute) => (\n <Option key={attribute} value={attribute}>\n {attribute}\n </Option>\n ))}\n </Select>\n </GridItem>\n </Grid>\n <Box paddingTop={2} paddingBottom={2}>\n <Divider />\n </Box>\n <Typography variant=\"delta\" as=\"h3\">\n {formatMessage({\n id: getTranslation('containers.SettingPage.view'),\n defaultMessage: 'View',\n })}\n </Typography>\n\n <DisplayedFields\n attributes={attributes}\n editLayout={editLayout}\n fields={editLayoutFields}\n onAddField={(field) => {\n dispatch({\n type: 'ON_ADD_FIELD',\n name: field,\n fieldSizes,\n });\n }}\n onRemoveField={(rowId, index) => {\n dispatch({\n type: 'REMOVE_FIELD',\n rowIndex: rowId,\n fieldIndex: index,\n });\n }}\n />\n </Flex>\n </Box>\n </ContentLayout>\n <ConfirmDialog\n bodyText={{\n id: getTranslation('popUpWarning.warning.updateAllSettings'),\n defaultMessage: 'This will modify all your settings',\n }}\n iconRightButton={<Check />}\n isConfirmButtonLoading={isSubmittingForm}\n isOpen={isConfirmDialogOpen}\n onToggleDialog={toggleConfirmDialog}\n onConfirm={handleConfirm}\n variantRightButton=\"success-light\"\n />\n </form>\n {isModalFormOpen && (\n <ModalForm\n onSubmit={handleMetaSubmit}\n onToggle={handleToggleModal}\n onMetaChange={handleMetaChange}\n onSizeChange={handleSizeChange}\n type={attributes?.[metaToEdit]?.type ?? ''}\n customFieldUid={attributes?.[metaToEdit]?.customField ?? ''}\n />\n )}\n </Main>\n </LayoutDndProvider>\n );\n};\n\nEditSettingsView.defaultProps = {\n isContentTypeView: false,\n updateLayout: null,\n};\n\nEditSettingsView.propTypes = {\n components: PropTypes.object.isRequired,\n isContentTypeView: PropTypes.bool,\n mainLayout: PropTypes.shape({\n attributes: PropTypes.object.isRequired,\n info: PropTypes.object.isRequired,\n layouts: PropTypes.shape({\n list: PropTypes.array.isRequired,\n edit: PropTypes.array.isRequired,\n }).isRequired,\n metadatas: PropTypes.object.isRequired,\n options: PropTypes.object.isRequired,\n }).isRequired,\n slug: PropTypes.string.isRequired,\n updateLayout: PropTypes.func,\n};\n\nexport default EditSettingsView;\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport * as React from 'react';\n\nexport const useOnce = (effect: React.EffectCallback) => React.useEffect(effect, emptyDeps);\n\nconst emptyDeps: React.DependencyList = [];\n","/**\n * @internal\n *\n * @description Checks if the given value is an object\n * with included type guard.\n */\nconst isObject = (obj: unknown): obj is object => {\n return typeof obj === 'object' && obj !== null && Array.isArray(obj) === false;\n};\n\nexport { isObject };\n","import { useQueryParams } from '@strapi/helper-plugin';\nimport QueryString, { parse, stringify } from 'qs';\n\nimport { useTypedSelector } from '../../core/store/hooks';\nimport { isObject } from '../../utils/objects';\n\nimport type { ContentManagerAppState } from '../pages/App';\n\nconst useFindRedirectionLink = (slug: string) => {\n const [{ rawQuery }] = useQueryParams();\n const collectionTypesMenuLinks = useTypedSelector(\n (state) => state['content-manager_app'].collectionTypeLinks\n );\n const redirectionLink = getRedirectionLink(collectionTypesMenuLinks, slug, rawQuery);\n\n return redirectionLink;\n};\n\n/**\n * Updates the leafs of the first argument\n */\nconst mergeParams = (\n initialParams: QueryString.ParsedQs,\n params: QueryString.ParsedQs\n): QueryString.ParsedQs => {\n return Object.keys(initialParams).reduce<QueryString.ParsedQs>((acc, current) => {\n const initialValue = initialParams[current];\n const nextValue = params[current] ?? initialValue;\n\n if (isObject(initialValue)) {\n // @ts-expect-error – TODO: fix this type error.\n return { ...acc, [current]: mergeParams(initialValue, nextValue) };\n }\n\n acc[current] = nextValue;\n\n return acc;\n }, {});\n};\n\nconst getRedirectionLink = (\n links: ContentManagerAppState['collectionTypeLinks'],\n slug: string,\n rawQuery: string\n) => {\n const matchingLink = links.find(({ to }) => to.includes(slug));\n\n if (!matchingLink) {\n return '/';\n }\n\n const { to, search } = matchingLink;\n const searchQueryParams = parse(search ?? '');\n const currentQueryParams = parse(rawQuery.substring(1));\n\n const mergedParams = mergeParams(searchQueryParams, currentQueryParams);\n\n const link = `${to}?${stringify(mergedParams, { encode: false })}`;\n\n return link;\n};\n\nexport { useFindRedirectionLink };\n","export const GET_DATA = 'ContentManager/CrudReducer/GET_DATA';\nexport const GET_DATA_SUCCEEDED = 'ContentManager/CrudReducer/GET_DATA_SUCCEEDED';\nexport const INIT_FORM = 'ContentManager/CrudReducer/INIT_FORM';\nexport const RESET_PROPS = 'ContentManager/CrudReducer/RESET_PROPS';\nexport const SET_DATA_STRUCTURES = 'ContentManager/CrudReducer/SET_DATA_STRUCTURES';\nexport const SET_STATUS = 'ContentManager/CrudReducer/SET_STATUS';\nexport const SUBMIT_SUCCEEDED = 'ContentManager/CrudReducer/SUBMIT_SUCCEEDED';\nexport const CLEAR_SET_MODIFIED_DATA_ONLY =\n 'ContentManager/CrudReducer/CLEAR_SET_MODIFIED_DATA_ONLY';\n","import {\n CLEAR_SET_MODIFIED_DATA_ONLY,\n GET_DATA,\n GET_DATA_SUCCEEDED,\n INIT_FORM,\n RESET_PROPS,\n SET_DATA_STRUCTURES,\n SET_STATUS,\n SUBMIT_SUCCEEDED,\n} from './constants';\nimport { CrudState } from './reducer';\n\ninterface GetDataAction {\n type: typeof GET_DATA;\n}\n\nconst getData = () => {\n return {\n type: GET_DATA,\n } satisfies GetDataAction;\n};\n\ninterface GetDataSucceededAction extends Pick<CrudState, 'data'> {\n type: typeof GET_DATA_SUCCEEDED;\n setModifiedDataOnly?: boolean;\n}\n\nconst getDataSucceeded = (data: GetDataSucceededAction['data']) =>\n ({\n type: GET_DATA_SUCCEEDED,\n data,\n } satisfies GetDataSucceededAction);\n\ninterface InitFormAction extends Partial<Pick<CrudState, 'data'>> {\n type: typeof INIT_FORM;\n rawQuery?: unknown;\n isSingleType?: boolean;\n}\n\nconst initForm = (rawQuery?: InitFormAction['rawQuery'], isSingleType = false) =>\n ({\n type: INIT_FORM,\n rawQuery,\n isSingleType,\n } satisfies InitFormAction);\n\ninterface ResetPropsAction {\n type: typeof RESET_PROPS;\n}\n\nconst resetProps = () => ({ type: RESET_PROPS } satisfies ResetPropsAction);\n\ninterface SetDataStructuresAction\n extends Pick<CrudState, 'componentsDataStructure' | 'contentTypeDataStructure'> {\n type: typeof SET_DATA_STRUCTURES;\n}\n\nconst setDataStructures = (\n componentsDataStructure: SetDataStructuresAction['componentsDataStructure'],\n contentTypeDataStructure: SetDataStructuresAction['contentTypeDataStructure']\n) =>\n ({\n type: SET_DATA_STRUCTURES,\n componentsDataStructure,\n contentTypeDataStructure,\n } satisfies SetDataStructuresAction);\n\ninterface SetStatusAction extends Pick<CrudState, 'status'> {\n type: typeof SET_STATUS;\n}\n\nconst setStatus = (status: SetStatusAction['status']) =>\n ({\n type: SET_STATUS,\n status,\n } satisfies SetStatusAction);\n\ninterface SubmitSucceededAction extends Pick<CrudState, 'data'> {\n type: typeof SUBMIT_SUCCEEDED;\n}\n\nconst submitSucceeded = (data: SubmitSucceededAction['data']) =>\n ({\n type: SUBMIT_SUCCEEDED,\n data,\n } satisfies SubmitSucceededAction);\n\ninterface ClearSetModifiedDataOnlyAction {\n type: typeof CLEAR_SET_MODIFIED_DATA_ONLY;\n}\n\nconst clearSetModifiedDataOnly = () =>\n ({\n type: CLEAR_SET_MODIFIED_DATA_ONLY,\n } satisfies ClearSetModifiedDataOnlyAction);\n\nexport {\n getData,\n getDataSucceeded,\n initForm,\n resetProps,\n setDataStructures,\n setStatus,\n submitSucceeded,\n clearSetModifiedDataOnly,\n};\n\ntype CrudAction =\n | GetDataAction\n | GetDataSucceededAction\n | InitFormAction\n | ResetPropsAction\n | SetDataStructuresAction\n | SetStatusAction\n | SubmitSucceededAction\n | ClearSetModifiedDataOnlyAction;\n\nexport type {\n GetDataAction,\n GetDataSucceededAction,\n InitFormAction,\n ResetPropsAction,\n SetDataStructuresAction,\n SetStatusAction,\n SubmitSucceededAction,\n ClearSetModifiedDataOnlyAction,\n CrudAction,\n};\n","interface Query {\n plugins?: Record<string, unknown>;\n _q?: string;\n [key: string]: any;\n}\n\n/**\n * @description\n * Creates a valid query params object for get requests\n * ie. plugins[18n][locale]=en becomes locale=en\n */\nconst buildValidGetParams = (query: Query = {}) => {\n // Extract pluginOptions from the query, they shouldn't be part of the URL\n const {\n plugins: _,\n _q: searchQuery,\n ...validQueryParams\n } = {\n ...query,\n ...Object.values(query?.plugins ?? {}).reduce<Record<string, unknown>>(\n (acc, current) => Object.assign(acc, current),\n {}\n ),\n };\n\n if (searchQuery) {\n // Encode the search query here since the paramsSerializer will not\n validQueryParams._q = encodeURIComponent(searchQuery);\n }\n\n return validQueryParams;\n};\n\nexport { buildValidGetParams };\n","import type { FormattedComponentLayout, FormattedContentTypeLayout } from './layouts';\nimport type { Attribute, Common, Schema } from '@strapi/types';\n\nconst createDefaultDataStructure = (\n attributes: Schema.Attributes,\n allComponentsSchema: Record<string, FormattedComponentLayout> = {}\n) => {\n return Object.keys(attributes).reduce<Record<string, Attribute.GetValue<Attribute.Any>>>(\n (acc, current) => {\n const attribute = attributes[current] ?? {};\n const { type, required } = attribute;\n\n if ('default' in attribute) {\n acc[current] = attribute.default;\n }\n\n if (type === 'component') {\n const currentComponentSchema = allComponentsSchema[attribute.component]?.attributes ?? {};\n const currentComponentDefaultForm = createDefaultDataStructure(\n currentComponentSchema,\n allComponentsSchema\n );\n\n if (required === true) {\n acc[current] = attribute.repeatable === true ? [] : currentComponentDefaultForm;\n }\n\n if (attribute.min && attribute.repeatable === true && required) {\n acc[current] = [];\n\n for (let i = 0; i < attribute.min; i += 1) {\n acc[current].push(currentComponentDefaultForm);\n }\n }\n }\n\n if (type === 'dynamiczone') {\n if (required === true) {\n acc[current] = [];\n }\n }\n\n return acc;\n },\n {}\n );\n};\n\nconst removePasswordFieldsFromData = <\n TSchema extends FormattedContentTypeLayout,\n TData extends { [K in keyof TSchema['attributes']]: Attribute.GetValue<TSchema['attributes'][K]> }\n>(\n data: TData,\n contentTypeSchema: TSchema,\n componentSchema: Record<string, FormattedComponentLayout>\n) => {\n const recursiveCleanData = <\n TSchemum extends FormattedContentTypeLayout | FormattedComponentLayout,\n TDatum extends {\n [P in keyof TSchemum['attributes']]: Attribute.GetValue<TSchemum['attributes'][P]>;\n }\n >(\n datum: TDatum,\n schema: TSchemum\n ) => {\n return Object.keys(datum).reduce<Record<string, Attribute.GetValue<Attribute.Any>>>(\n (acc, current) => {\n const attribute = schema.attributes[current];\n\n const value = datum[current];\n\n /**\n * This is really dumb, this basically keeps random metadata in the object,\n * but it's really not clear and doesn't make a lot of sense because you're\n * assuming that if there's no attribute we still want it? TODO: refactor.\n */\n if (!attribute) {\n acc[current] = value;\n return acc;\n }\n\n if (attribute.type === 'dynamiczone' && Array.isArray(value)) {\n acc[current] = (value as Attribute.GetValue<Attribute.DynamicZone>).map(\n (componentValue) => {\n const subCleanedData = recursiveCleanData(\n componentValue,\n componentSchema[componentValue.__component]\n );\n\n return subCleanedData;\n }\n );\n\n return acc;\n }\n\n if (attribute.type === 'component') {\n if (attribute.repeatable) {\n acc[current] =\n value && Array.isArray(value)\n ? (\n value as Attribute.GetValue<Attribute.Component<Common.UID.Component, true>>\n ).map((compoData) => {\n const subCleanedData = recursiveCleanData(\n compoData,\n componentSchema[attribute.component]\n );\n\n return subCleanedData;\n })\n : value;\n } else {\n acc[current] = value\n ? recursiveCleanData(value, componentSchema[attribute.component])\n : value;\n }\n\n return acc;\n }\n\n if (attribute.type !== 'password') {\n acc[current] = value;\n }\n\n return acc;\n },\n {}\n );\n };\n\n return recursiveCleanData(data, contentTypeSchema);\n};\n\nexport { createDefaultDataStructure, removePasswordFieldsFromData };\n","import * as React from 'react';\n\nimport {\n ApiError,\n TrackingEvent,\n formatContentTypeData,\n useAPIErrorHandler,\n useFetchClient,\n useGuidedTour,\n useNotification,\n useQueryParams,\n useTracking,\n} from '@strapi/helper-plugin';\nimport axios, { AxiosError, AxiosResponse, CancelTokenSource } from 'axios';\nimport get from 'lodash/get';\nimport { useQueryClient } from 'react-query';\nimport { useHistory } from 'react-router-dom';\n\nimport { useTypedDispatch, useTypedSelector } from '../../core/store/hooks';\nimport { useFindRedirectionLink } from '../hooks/useFindRedirectionLink';\nimport {\n getData,\n getDataSucceeded,\n initForm,\n resetProps,\n setDataStructures,\n setStatus,\n submitSucceeded,\n} from '../sharedReducers/crud/actions';\nimport { buildValidGetParams } from '../utils/api';\nimport { createDefaultDataStructure, removePasswordFieldsFromData } from '../utils/data';\nimport { getTranslation } from '../utils/translations';\n\nimport type { EditViewPageParams } from '../pages/EditView/EditViewPage';\nimport type { EntityData } from '../sharedReducers/crud/reducer';\nimport type { Contracts } from '@strapi/plugin-content-manager/_internal/shared';\n\ninterface RenderChildProps {\n componentsDataStructure: Record<string, any>;\n contentTypeDataStructure: Record<string, any>;\n data: EntityData | null;\n isCreatingEntry: boolean;\n isLoadingForData: boolean;\n onDelete: (\n trackerProperty: Extract<\n TrackingEvent,\n { name: 'willDeleteEntry' | 'didDeleteEntry' | 'didNotDeleteEntry' }\n >['properties']\n ) => Promise<Contracts.SingleTypes.Delete.Response>;\n onPost: (\n body: Contracts.SingleTypes.CreateOrUpdate.Request['body'],\n trackerProperty: Extract<\n TrackingEvent,\n { name: 'willCreateEntry' | 'didCreateEntry' | 'didNotCreateEntry' }\n >['properties']\n ) => Promise<Contracts.SingleTypes.CreateOrUpdate.Response>;\n onDraftRelationCheck: () => Promise<Contracts.SingleTypes.CountDraftRelations.Response['data']>;\n onPublish: () => Promise<Contracts.SingleTypes.Publish.Response>;\n onPut: (\n body: Contracts.SingleTypes.CreateOrUpdate.Request['body'],\n trackerProperty: Extract<\n TrackingEvent,\n { name: 'willEditEntry' | 'didEditEntry' | 'didNotEditEntry' }\n >['properties']\n ) => Promise<Contracts.SingleTypes.CreateOrUpdate.Response>;\n onUnpublish: () => Promise<void>;\n redirectionLink: string;\n status: string;\n}\n\ninterface ContentTypeFormWrapperProps extends EditViewPageParams {\n children: (props: RenderChildProps) => React.JSX.Element;\n}\n\n// This container is used to handle the CRUD\nconst ContentTypeFormWrapper = ({\n children,\n slug,\n id = '',\n origin,\n collectionType,\n}: ContentTypeFormWrapperProps) => {\n const allLayoutData = useTypedSelector(\n (state) => state['content-manager_editViewLayoutManager'].currentLayout\n );\n const queryClient = useQueryClient();\n const toggleNotification = useNotification();\n const { setCurrentStep } = useGuidedTour();\n const { trackUsage } = useTracking();\n const { push, replace } = useHistory();\n const [{ query, rawQuery }] = useQueryParams<{\n plugins?: {\n i18n?: {\n locale?: string;\n };\n };\n }>();\n const dispatch = useTypedDispatch();\n const { componentsDataStructure, contentTypeDataStructure, data, isLoading, status } =\n useTypedSelector((state) => state['content-manager_editViewCrudReducer']);\n const redirectionLink = useFindRedirectionLink(slug);\n const { formatAPIError } = useAPIErrorHandler(getTranslation);\n\n const isMounted = React.useRef(true);\n\n const fetchClient = useFetchClient();\n const { put, post, del } = fetchClient;\n\n const isSingleType = collectionType === 'single-types';\n const isCreatingEntry = !isSingleType && !id;\n\n const requestURL =\n isCreatingEntry && !origin\n ? null\n : `/content-manager/${collectionType}/${slug}/${origin || id}`;\n\n const cleanReceivedData = React.useCallback(\n (data: EntityData) => {\n const cleaned = removePasswordFieldsFromData(\n data,\n allLayoutData.contentType!,\n allLayoutData.components\n );\n\n return formatContentTypeData(cleaned, allLayoutData.contentType!, allLayoutData.components);\n },\n [allLayoutData]\n );\n\n // SET THE DEFAULT LAYOUT the effect is applied when the slug changes\n React.useEffect(() => {\n const componentsDataStructure = Object.keys(allLayoutData.components).reduce<\n Record<string, any>\n >((acc, current) => {\n const defaultComponentForm = createDefaultDataStructure(\n allLayoutData.components[current].attributes,\n allLayoutData.components\n );\n\n acc[current] = formatContentTypeData(\n defaultComponentForm,\n // @ts-expect-error – the helper-plugin doesn't (and can't) know about the types we have in the admin. TODO: fix this.\n allLayoutData.components[current],\n allLayoutData.components\n );\n\n return acc;\n }, {});\n\n const contentTypeDataStructure = createDefaultDataStructure(\n allLayoutData.contentType!.attributes,\n allLayoutData.components\n );\n\n const contentTypeDataStructureFormatted = formatContentTypeData(\n contentTypeDataStructure,\n allLayoutData.contentType!,\n allLayoutData.components\n );\n\n dispatch(setDataStructures(componentsDataStructure, contentTypeDataStructureFormatted));\n }, [allLayoutData, dispatch]);\n\n React.useEffect(() => {\n return () => {\n dispatch(resetProps());\n };\n }, [dispatch]);\n\n const validParams = React.useMemo(() => buildValidGetParams(query), [query]);\n\n React.useEffect(() => {\n const CancelToken = axios.CancelToken;\n const source = CancelToken.source();\n\n const fetchData = async (source: CancelTokenSource) => {\n if (!requestURL) {\n return;\n }\n\n dispatch(getData());\n\n try {\n const { data } = await fetchClient.get(requestURL, {\n cancelToken: source.token,\n params: validParams,\n });\n\n dispatch(getDataSucceeded(cleanReceivedData(data)));\n } catch (err) {\n if (axios.isCancel(err)) {\n return;\n }\n const resStatus = get(err, 'response.status', null);\n\n if (resStatus === 404 && !isSingleType) {\n push(redirectionLink);\n\n return;\n } else if (resStatus === 404 && isSingleType) {\n // Creating a single type\n dispatch(initForm(rawQuery, true));\n }\n\n // Not allowed to read a document\n if (resStatus === 403) {\n toggleNotification({\n type: 'info',\n message: { id: getTranslation('permissions.not-allowed.update') },\n });\n\n push(redirectionLink);\n }\n }\n };\n\n // This is needed in order to reset the form when the query changes\n const init = async () => {\n dispatch(getData());\n dispatch(initForm(rawQuery));\n };\n\n if (!isMounted.current) {\n return () => {};\n }\n\n if (requestURL) {\n fetchData(source);\n } else {\n init();\n }\n\n return () => {\n source.cancel('Operation canceled by the user.');\n };\n }, [\n fetchClient,\n cleanReceivedData,\n push,\n requestURL,\n dispatch,\n rawQuery,\n redirectionLink,\n toggleNotification,\n isSingleType,\n validParams,\n ]);\n\n const displayErrors = React.useCallback(\n (err: AxiosError<{ error: ApiError }>) => {\n toggleNotification({ type: 'warning', message: formatAPIError(err) });\n },\n [toggleNotification, formatAPIError]\n );\n\n const onDelete: RenderChildProps['onDelete'] = React.useCallback(\n async (trackerProperty) => {\n try {\n trackUsage('willDeleteEntry', trackerProperty);\n\n const locale = query?.plugins?.i18n?.locale;\n const params = isSingleType && locale ? { locale } : {};\n\n const { data } = await del<Contracts.CollectionTypes.Delete.Response>(\n `/content-manager/${collectionType}/${slug}/${id}`,\n { params }\n );\n\n toggleNotification({\n type: 'success',\n message: { id: getTranslation('success.record.delete') },\n });\n\n trackUsage('didDeleteEntry', trackerProperty);\n\n if (isSingleType) {\n dispatch(initForm(rawQuery, true));\n } else {\n replace(redirectionLink);\n }\n\n return Promise.resolve(data);\n } catch (err) {\n trackUsage('didNotDeleteEntry', { error: err, ...trackerProperty });\n\n return Promise.reject(err);\n }\n },\n [\n trackUsage,\n del,\n collectionType,\n slug,\n id,\n toggleNotification,\n isSingleType,\n dispatch,\n rawQuery,\n replace,\n redirectionLink,\n ]\n );\n\n const onPost: RenderChildProps['onPost'] = React.useCallback(\n async (body, trackerProperty) => {\n const isCloning = typeof origin === 'string';\n /**\n * If we're cloning we want to post directly to this endpoint\n * so that the relations even if they're not listed in the EditView\n * are correctly attached to the entry.\n */\n try {\n // Show a loading button in the EditView/Header.js && lock the app => no navigation\n dispatch(setStatus('submit-pending'));\n\n const { id: _id, ...restBody } = body;\n\n const { data } = await (isSingleType ? put : post)<\n Contracts.CollectionTypes.Create.Response | Contracts.CollectionTypes.Clone.Response,\n AxiosResponse<\n Contracts.CollectionTypes.Create.Response | Contracts.CollectionTypes.Clone.Response\n >,\n | Contracts.CollectionTypes.Create.Request['body']\n | Contracts.CollectionTypes.Clone.Request['body']\n >(\n isCloning\n ? `/content-manager/${collectionType}/${slug}/clone/${origin}`\n : `/content-manager/${collectionType}/${slug}`,\n isCloning ? restBody : body,\n {\n params: validParams,\n }\n );\n\n trackUsage('didCreateEntry', trackerProperty);\n toggleNotification({\n type: 'success',\n message: { id: getTranslation('success.record.save') },\n });\n\n setCurrentStep('contentManager.success');\n\n // TODO: need to find a better place, or a better abstraction\n queryClient.invalidateQueries(['relation']);\n\n dispatch(submitSucceeded(cleanReceivedData(data)));\n\n // Enable navigation and remove loaders\n dispatch(setStatus('resolved'));\n\n if (!isSingleType) {\n // @ts-expect-error – TODO: look into this, the type is probably wrong.\n replace(`/content-manager/${collectionType}/${slug}/${data.id}${rawQuery}`);\n }\n\n return Promise.resolve(data);\n } catch (err) {\n if (err instanceof AxiosError) {\n displayErrors(err);\n }\n\n trackUsage('didNotCreateEntry', { error: err, ...trackerProperty });\n dispatch(setStatus('resolved'));\n\n return Promise.reject(err);\n }\n },\n [\n origin,\n dispatch,\n collectionType,\n put,\n post,\n slug,\n validParams,\n trackUsage,\n toggleNotification,\n setCurrentStep,\n queryClient,\n cleanReceivedData,\n isSingleType,\n replace,\n rawQuery,\n displayErrors,\n ]\n );\n\n const onDraftRelationCheck: RenderChildProps['onDraftRelationCheck'] =\n React.useCallback(async () => {\n try {\n trackUsage('willCheckDraftRelations');\n\n dispatch(setStatus('draft-relation-check-pending'));\n\n const {\n data: { data },\n } = await fetchClient.get<Contracts.CollectionTypes.CountDraftRelations.Response>(\n isSingleType\n ? `/content-manager/${collectionType}/${slug}/actions/countDraftRelations`\n : `/content-manager/${collectionType}/${slug}/${id}/actions/countDraftRelations`\n );\n trackUsage('didCheckDraftRelations');\n\n dispatch(setStatus('resolved'));\n\n return data;\n } catch (err) {\n if (err instanceof AxiosError) {\n displayErrors(err);\n }\n dispatch(setStatus('resolved'));\n\n return Promise.reject(err);\n }\n }, [trackUsage, dispatch, fetchClient, isSingleType, collectionType, slug, id, displayErrors]);\n\n const onPublish: RenderChildProps['onPublish'] = React.useCallback(async () => {\n try {\n trackUsage('willPublishEntry');\n\n dispatch(setStatus('publish-pending'));\n\n const { data } = await post<Contracts.CollectionTypes.Publish.Response>(\n isSingleType\n ? `/content-manager/${collectionType}/${slug}/actions/publish`\n : `/content-manager/${collectionType}/${slug}/${id}/actions/publish`,\n undefined,\n {\n params: validParams,\n }\n );\n\n trackUsage('didPublishEntry');\n\n dispatch(submitSucceeded(cleanReceivedData(data)));\n dispatch(setStatus('resolved'));\n\n toggleNotification({\n type: 'success',\n message: { id: getTranslation('success.record.publish') },\n });\n\n return Promise.resolve(data);\n } catch (err) {\n if (err instanceof AxiosError) {\n displayErrors(err);\n }\n\n dispatch(setStatus('resolved'));\n\n return Promise.reject(err);\n }\n }, [\n trackUsage,\n dispatch,\n post,\n isSingleType,\n collectionType,\n slug,\n id,\n validParams,\n cleanReceivedData,\n toggleNotification,\n displayErrors,\n ]);\n\n const onPut: RenderChildProps['onPut'] = React.useCallback(\n async (body, trackerProperty) => {\n try {\n trackUsage('willEditEntry', trackerProperty);\n\n dispatch(setStatus('submit-pending'));\n\n const { data } = await put<\n Contracts.CollectionTypes.Update.Response,\n AxiosResponse<Contracts.CollectionTypes.Update.Response>,\n Contracts.CollectionTypes.Update.Request['body']\n >(`/content-manager/${collectionType}/${slug}/${id}`, body, {\n params: validParams,\n });\n\n trackUsage('didEditEntry', trackerProperty);\n toggleNotification({\n type: 'success',\n message: { id: getTranslation('success.record.save') },\n });\n\n // TODO: need to find a better place, or a better abstraction\n queryClient.invalidateQueries(['relation']);\n\n dispatch(submitSucceeded(cleanReceivedData(data)));\n\n dispatch(setStatus('resolved'));\n\n return Promise.resolve(data);\n } catch (err) {\n trackUsage('didNotEditEntry', { error: err, ...trackerProperty });\n\n if (err instanceof AxiosError) {\n displayErrors(err);\n }\n\n dispatch(setStatus('resolved'));\n\n return Promise.reject(err);\n }\n },\n [\n trackUsage,\n dispatch,\n put,\n collectionType,\n slug,\n id,\n validParams,\n toggleNotification,\n queryClient,\n cleanReceivedData,\n displayErrors,\n ]\n );\n\n const onUnpublish: RenderChildProps['onUnpublish'] = React.useCallback(async () => {\n dispatch(setStatus('unpublish-pending'));\n\n try {\n trackUsage('willUnpublishEntry');\n\n const { data } = await post<Contracts.CollectionTypes.Unpublish.Response>(\n isSingleType\n ? `/content-manager/${collectionType}/${slug}/actions/unpublish`\n : `/content-manager/${collectionType}/${slug}/${id}/actions/unpublish`,\n undefined,\n {\n params: validParams,\n }\n );\n\n trackUsage('didUnpublishEntry');\n toggleNotification({\n type: 'success',\n message: { id: getTranslation('success.record.unpublish') },\n });\n\n dispatch(submitSucceeded(cleanReceivedData(data)));\n dispatch(setStatus('resolved'));\n } catch (err) {\n dispatch(setStatus('resolved'));\n\n if (err instanceof AxiosError) {\n displayErrors(err);\n }\n\n return Promise.reject(err);\n }\n }, [\n dispatch,\n trackUsage,\n post,\n isSingleType,\n collectionType,\n slug,\n id,\n validParams,\n toggleNotification,\n cleanReceivedData,\n displayErrors,\n ]);\n\n return children({\n componentsDataStructure,\n contentTypeDataStructure,\n data,\n isCreatingEntry,\n isLoadingForData: isLoading,\n onDelete,\n onPost,\n onPublish,\n onDraftRelationCheck,\n onPut,\n onUnpublish,\n status,\n redirectionLink,\n });\n};\n\nexport { ContentTypeFormWrapper };\nexport type { ContentTypeFormWrapperProps, RenderChildProps };\n","import { useCallback } from 'react';\n\nimport { useTypedSelector } from '../../core/store/hooks';\n\nconst useContentTypeLayout = () => {\n const currentLayout = useTypedSelector(\n (state) => state['content-manager_editViewLayoutManager'].currentLayout\n );\n\n const getComponentLayout = useCallback(\n (componentUid: string) => {\n return currentLayout?.components?.[componentUid] ?? {};\n },\n [currentLayout]\n );\n\n return { ...currentLayout, getComponentLayout };\n};\n\nexport { useContentTypeLayout };\n","import * as React from 'react';\n\nimport { BaseButton, Flex, Typography } from '@strapi/design-system';\nimport { PlusCircle } from '@strapi/icons';\nimport styled from 'styled-components';\n\ninterface AddComponentButtonProps {\n children: React.ReactNode;\n hasError?: boolean;\n isDisabled?: boolean;\n isOpen?: boolean;\n onClick: React.MouseEventHandler<HTMLButtonElement> & React.MouseEventHandler<HTMLDivElement>;\n}\n\nconst AddComponentButton = ({\n hasError,\n isDisabled,\n isOpen,\n children,\n onClick,\n}: AddComponentButtonProps) => {\n return (\n <StyledButton\n type=\"button\"\n onClick={onClick}\n disabled={isDisabled}\n background=\"neutral0\"\n paddingTop={3}\n paddingBottom={3}\n paddingLeft={4}\n paddingRight={4}\n style={{ cursor: isDisabled ? 'not-allowed' : 'pointer' }}\n >\n <Flex as=\"span\" gap={2}>\n <StyledAddIcon aria-hidden $isOpen={isOpen} $hasError={hasError && !isOpen} />\n <Typography\n variant=\"pi\"\n fontWeight=\"bold\"\n textColor={hasError && !isOpen ? 'danger600' : 'neutral500'}\n >\n {children}\n </Typography>\n </Flex>\n </StyledButton>\n );\n};\n\nconst StyledAddIcon = styled(PlusCircle)<{ $isOpen?: boolean; $hasError?: boolean }>`\n height: ${({ theme }) => theme.spaces[6]};\n width: ${({ theme }) => theme.spaces[6]};\n transform: ${({ $isOpen }) => ($isOpen ? 'rotate(45deg)' : 'rotate(0deg)')};\n\n > circle {\n fill: ${({ theme, $hasError }) =>\n $hasError ? theme.colors.danger200 : theme.colors.neutral150};\n }\n > path {\n fill: ${({ theme, $hasError }) =>\n $hasError ? theme.colors.danger600 : theme.colors.neutral600};\n }\n`;\n\nconst StyledButton = styled(BaseButton)`\n border-radius: 26px;\n border-color: ${({ theme }) => theme.colors.neutral150};\n box-shadow: ${({ theme }) => theme.shadows.filterShadow};\n\n &:hover {\n ${Typography} {\n color: ${({ theme }) => theme.colors.primary600};\n }\n\n ${StyledAddIcon} {\n > circle {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n > path {\n fill: ${({ theme }) => theme.colors.neutral100};\n }\n }\n }\n &:active {\n ${Typography} {\n color: ${({ theme }) => theme.colors.primary600};\n }\n ${StyledAddIcon} {\n > circle {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n > path {\n fill: ${({ theme }) => theme.colors.neutral100};\n }\n }\n }\n`;\n\nexport { AddComponentButton };\nexport type { AddComponentButtonProps };\n","import * as React from 'react';\n\nimport {\n Accordion,\n AccordionContent,\n AccordionToggle,\n AccordionVariant,\n Box,\n Flex,\n Typography,\n} from '@strapi/design-system';\nimport { pxToRem } from '@strapi/helper-plugin';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { ComponentIcon } from '../ComponentIcon';\n\nimport type { FormattedComponentLayout } from '../../utils/layouts';\nimport type { Attribute } from '@strapi/types';\n\ninterface ComponentCategoryProps {\n category: string;\n components?: Array<\n Pick<FormattedComponentLayout, 'info' | 'attributes'> & {\n componentUid: Attribute.DynamicZone['components'][number];\n }\n >;\n isOpen?: boolean;\n onAddComponent: (\n componentUid: string\n ) => React.MouseEventHandler<HTMLButtonElement> & React.MouseEventHandler<HTMLDivElement>;\n onToggle: (category: string) => void;\n variant?: AccordionVariant;\n}\n\nconst ComponentCategory = ({\n category,\n components = [],\n variant = 'primary',\n isOpen,\n onAddComponent,\n onToggle,\n}: ComponentCategoryProps) => {\n const { formatMessage } = useIntl();\n\n const handleToggle = () => {\n onToggle(category);\n };\n\n return (\n <Accordion expanded={isOpen} onToggle={handleToggle} size=\"S\">\n <AccordionToggle\n // @ts-expect-error – Error in the design-system\n variant={variant}\n title={formatMessage({ id: category, defaultMessage: category })}\n togglePosition=\"left\"\n />\n <AccordionContent>\n <Box paddingTop={4} paddingBottom={4} paddingLeft={3} paddingRight={3}>\n <Grid>\n {components.map(({ componentUid, info: { displayName, icon } }) => (\n <ComponentBox\n key={componentUid}\n as=\"button\"\n type=\"button\"\n background=\"neutral100\"\n justifyContent=\"center\"\n onClick={onAddComponent(componentUid)}\n hasRadius\n height={pxToRem(84)}\n shrink={0}\n borderColor=\"neutral200\"\n >\n <Flex direction=\"column\" gap={1} alignItems=\"center\" justifyContent=\"center\">\n <ComponentIcon icon={icon} />\n\n <Typography variant=\"pi\" fontWeight=\"bold\" textColor=\"neutral600\">\n {formatMessage({ id: displayName, defaultMessage: displayName })}\n </Typography>\n </Flex>\n </ComponentBox>\n ))}\n </Grid>\n </Box>\n </AccordionContent>\n </Accordion>\n );\n};\n\nconst Grid = styled.div`\n display: grid;\n grid-template-columns: repeat(auto-fit, ${140 / 16}rem);\n grid-gap: ${({ theme }) => theme.spaces[1]};\n`;\n\nconst ComponentBox = styled(Flex)`\n &:focus,\n &:hover {\n border: 1px solid ${({ theme }) => theme.colors.primary200};\n background: ${({ theme }) => theme.colors.primary100};\n\n ${Typography} {\n color: ${({ theme }) => theme.colors.primary600};\n }\n\n /* > Flex > ComponentIcon */\n > div > div:first-child {\n background: ${({ theme }) => theme.colors.primary200};\n color: ${({ theme }) => theme.colors.primary600};\n }\n }\n`;\n\nexport { ComponentCategory };\nexport type { ComponentCategoryProps };\n","import * as React from 'react';\n\nimport { Box, Flex, KeyboardNavigable, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { getTranslation } from '../../utils/translations';\n\nimport { ComponentCategory, ComponentCategoryProps } from './ComponentCategory';\n\ninterface ComponentPickerProps {\n dynamicComponentsByCategory?: Record<string, NonNullable<ComponentCategoryProps['components']>>;\n isOpen?: boolean;\n onClickAddComponent: (componentUid: string) => void;\n}\n\nconst ComponentPicker = ({\n dynamicComponentsByCategory = {},\n isOpen,\n onClickAddComponent,\n}: ComponentPickerProps) => {\n const { formatMessage } = useIntl();\n\n const [categoryToOpen, setCategoryToOpen] = React.useState('');\n\n React.useEffect(() => {\n const categoryKeys = Object.keys(dynamicComponentsByCategory);\n\n if (isOpen && categoryKeys.length > 0) {\n setCategoryToOpen(categoryKeys[0]);\n }\n }, [isOpen, dynamicComponentsByCategory]);\n\n const handleAddComponentToDz = (componentUid: string) => () => {\n onClickAddComponent(componentUid);\n setCategoryToOpen('');\n };\n\n const handleClickToggle = (categoryName: string) => {\n setCategoryToOpen((currentCat) => (currentCat === categoryName ? '' : categoryName));\n };\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <Box\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={5}\n paddingRight={5}\n background=\"neutral0\"\n shadow=\"tableShadow\"\n borderColor=\"neutral150\"\n hasRadius\n >\n <Flex justifyContent=\"center\">\n <Typography fontWeight=\"bold\" textColor=\"neutral600\">\n {formatMessage({\n id: getTranslation('components.DynamicZone.ComponentPicker-label'),\n defaultMessage: 'Pick one component',\n })}\n </Typography>\n </Flex>\n <Box paddingTop={2}>\n <KeyboardNavigable attributeName=\"data-strapi-accordion-toggle\">\n {Object.entries(dynamicComponentsByCategory).map(([category, components], index) => (\n <ComponentCategory\n key={category}\n category={category}\n components={components}\n onAddComponent={handleAddComponentToDz}\n isOpen={category === categoryToOpen}\n onToggle={handleClickToggle}\n variant={index % 2 === 1 ? 'primary' : 'secondary'}\n />\n ))}\n </KeyboardNavigable>\n </Box>\n </Box>\n );\n};\n\nexport { ComponentPicker };\nexport type { ComponentPickerProps };\n","import isNaN from 'lodash/isNaN';\n\nconst getFieldName = (stringName: string) =>\n stringName.split('.').filter((string) => isNaN(parseInt(string, 10)));\n\nconst getMaxTempKey = (arr: Array<{ __temp_key__?: number; id?: number }>) => {\n if (arr.length === 0) {\n return -1;\n }\n\n const maxValue = Math.max(...arr.map((o) => Number(o.id ?? o.__temp_key__ ?? 0)));\n\n return Number.isNaN(maxValue) ? -1 : maxValue;\n};\n\nconst isFieldTypeNumber = (type: string) => {\n return ['integer', 'biginteger', 'decimal', 'float', 'number'].includes(type);\n};\n\nexport { getFieldName, getMaxTempKey, isFieldTypeNumber };\n","import * as React from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { TranslationMessage, pxToRem } from '@strapi/helper-plugin';\nimport { PlusCircle } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { getTranslation } from '../utils/translations';\n\ninterface ComponentInitializerProps {\n error?: TranslationMessage;\n isReadOnly?: boolean;\n onClick: React.MouseEventHandler<HTMLButtonElement> & React.MouseEventHandler<HTMLDivElement>;\n}\n\nconst ComponentInitializer = ({ error, isReadOnly, onClick }: ComponentInitializerProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <>\n <Box\n as=\"button\"\n background=\"neutral100\"\n borderColor={error ? 'danger600' : 'neutral200'}\n disabled={isReadOnly}\n hasRadius\n onClick={onClick}\n paddingTop={9}\n paddingBottom={9}\n type=\"button\"\n >\n <Flex direction=\"column\" gap={2}>\n <Flex justifyContent=\"center\" style={{ cursor: isReadOnly ? 'not-allowed' : 'inherit' }}>\n <CircleIcon />\n </Flex>\n <Flex justifyContent=\"center\">\n <Typography textColor=\"primary600\" variant=\"pi\" fontWeight=\"bold\">\n {formatMessage({\n id: getTranslation('components.empty-repeatable'),\n defaultMessage: 'No entry yet. Click on the button below to add one.',\n })}\n </Typography>\n </Flex>\n </Flex>\n </Box>\n {error?.id && (\n <Typography textColor=\"danger600\" variant=\"pi\">\n {formatMessage(error, { ...error.values })}\n </Typography>\n )}\n </>\n );\n};\n\nconst CircleIcon = styled(PlusCircle)`\n width: ${pxToRem(24)};\n height: ${pxToRem(24)};\n > circle {\n fill: ${({ theme }) => theme.colors.primary200};\n }\n > path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n`;\n\nexport { ComponentInitializer };\nexport type { ComponentInitializerProps };\n","import { ComponentType, useCallback, useEffect, useState } from 'react';\n\nimport { CustomField, useCustomFields } from '@strapi/helper-plugin';\n\nconst componentStore = new Map<string, ComponentType | undefined>();\n\ntype LazyComponentStore = Record<string, ComponentType | undefined>;\n\ninterface UseLazyComponentsReturn {\n isLazyLoading: boolean;\n lazyComponentStore: LazyComponentStore;\n cleanup: () => void;\n}\n\n/**\n * @description A hook to lazy load custom field components\n */\nconst useLazyComponents = (componentUids: string[] = []): UseLazyComponentsReturn => {\n const [lazyComponentStore, setLazyComponentStore] = useState(Object.fromEntries(componentStore));\n /**\n * Start loading only if there are any components passed in\n * and there are some new to load\n */\n const newUids = componentUids.filter((uid) => !componentStore.get(uid));\n const [loading, setLoading] = useState(() => !!newUids.length);\n const customFieldsRegistry = useCustomFields();\n\n useEffect(() => {\n const setStore = (store: Record<string, ComponentType | undefined>) => {\n setLazyComponentStore(store);\n setLoading(false);\n };\n\n const lazyLoadComponents = async (\n uids: string[],\n components: Array<ReturnType<CustomField['components']['Input']>>\n ) => {\n const modules = await Promise.all(components);\n\n uids.forEach((uid, index) => {\n componentStore.set(uid, modules[index].default);\n });\n\n setStore(Object.fromEntries(componentStore));\n };\n\n if (newUids.length > 0) {\n setLoading(true);\n\n const componentPromises = newUids.reduce<\n Array<ReturnType<CustomField['components']['Input']>>\n >((arrayOfPromises, uid) => {\n const customField = customFieldsRegistry.get(uid);\n\n if (customField) {\n arrayOfPromises.push(customField.components.Input());\n }\n\n return arrayOfPromises;\n }, []);\n\n if (componentPromises.length > 0) {\n lazyLoadComponents(newUids, componentPromises);\n }\n }\n }, [newUids, customFieldsRegistry]);\n\n /**\n * Wrap this in a callback so it can be used in\n * effects to cleanup the cached store if required\n */\n const cleanup = useCallback(() => {\n componentStore.clear();\n setLazyComponentStore({});\n }, []);\n\n return { isLazyLoading: loading, lazyComponentStore, cleanup };\n};\n\nexport { useLazyComponents };\nexport type { UseLazyComponentsReturn, LazyComponentStore };\n","import { Typography } from '@strapi/design-system';\n\ninterface HintProps {\n id?: string;\n error?: string;\n name: string;\n hint?: string;\n}\n\nconst Hint = ({ id, error, name, hint = '' }: HintProps) => {\n if (hint.length === 0 || error) {\n return null;\n }\n\n return (\n <Typography as=\"p\" variant=\"pi\" id={`${id || name}-hint`} textColor=\"neutral600\">\n {hint}\n </Typography>\n );\n};\n\nexport { Hint };\nexport type { HintProps };\n","import * as React from 'react';\n\nimport { type Element, type Path, Editor, Transforms } from 'slate';\n\n/**\n * Extracts some logic that is common to most blocks' handleConvert functions.\n * @returns The path of the converted block\n */\nconst baseHandleConvert = <T extends Element>(\n editor: Editor,\n attributesToSet: Partial<T> & { type: T['type'] }\n): void | Path => {\n // If there is no selection, convert last inserted node\n const [_, lastNodePath] = Editor.last(editor, []);\n\n // If the selection is inside a list, split the list so that the modified block is outside of it\n Transforms.unwrapNodes(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n split: true,\n at: editor.selection ?? lastNodePath,\n });\n\n // Make sure we get a block node, not an inline node\n const [, updatedLastNodePath] = Editor.last(editor, []);\n const entry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type !== 'text' && node.type !== 'link',\n at: editor.selection ?? updatedLastNodePath,\n });\n\n if (!entry || Editor.isEditor(entry[0])) {\n return;\n }\n\n const [element, elementPath] = entry;\n\n Transforms.setNodes(\n editor,\n {\n ...getAttributesToClear(element),\n ...attributesToSet,\n } as Partial<Element>,\n { at: elementPath }\n );\n\n return elementPath;\n};\n\n/**\n * Set all attributes except type and children to null so that Slate deletes them\n */\nconst getAttributesToClear = (element: Element) => {\n const { children: _children, type: _type, ...extra } = element;\n\n const attributesToClear = Object.keys(extra).reduce(\n (currentAttributes, key) => ({ ...currentAttributes, [key]: null }),\n {}\n );\n\n return attributesToClear as Record<string, null>;\n};\n\nexport { baseHandleConvert, getAttributesToClear };\n","import { type Text, Editor, Node, Transforms } from 'slate';\n\nconst isText = (node: unknown): node is Text => {\n return Node.isNode(node) && !Editor.isEditor(node) && node.type === 'text';\n};\n\n/**\n * Inserts a line break the first time the user presses enter, and exits the node the second time.\n */\nconst pressEnterTwiceToExit = (editor: Editor) => {\n /**\n * To determine if we should break out of the node, check 2 things:\n * 1. If the cursor is at the end of the node\n * 2. If the last line of the node is empty\n */\n const nodeEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && !['link', 'text'].includes(node.type),\n });\n if (!nodeEntry || !editor.selection) {\n return;\n }\n const [node, nodePath] = nodeEntry;\n const isNodeEnd = Editor.isEnd(editor, editor.selection.anchor, nodePath);\n const lastTextNode = node.children.at(-1);\n const isEmptyLine = isText(lastTextNode) && lastTextNode.text.endsWith('\\n');\n\n if (isNodeEnd && isEmptyLine) {\n // Remove the last line break\n Transforms.delete(editor, { distance: 1, unit: 'character', reverse: true });\n // Break out of the node by creating a new paragraph\n Transforms.insertNodes(editor, {\n type: 'paragraph',\n children: [{ type: 'text', text: '' }],\n });\n return;\n }\n\n // Otherwise insert a new line within the node\n Transforms.insertText(editor, '\\n');\n\n // If there's nothing after the cursor, disable modifiers\n if (isNodeEnd) {\n ['bold', 'italic', 'underline', 'strikethrough', 'code'].forEach((modifier) => {\n Editor.removeMark(editor, modifier);\n });\n }\n};\n\nexport { pressEnterTwiceToExit };\n","import * as React from 'react';\n\nimport { Code } from '@strapi/icons';\nimport styled from 'styled-components';\n\nimport { type BlocksStore } from '../BlocksEditor';\nimport { baseHandleConvert } from '../utils/conversions';\nimport { pressEnterTwiceToExit } from '../utils/enterKey';\nimport { type Block } from '../utils/types';\n\nconst CodeBlock = styled.pre.attrs({ role: 'code' })`\n border-radius: ${({ theme }) => theme.borderRadius};\n background-color: ${({ theme }) => theme.colors.neutral100};\n max-width: 100%;\n overflow: auto;\n padding: ${({ theme }) => `${theme.spaces[3]} ${theme.spaces[4]}`};\n flex-shrink: 1;\n & > code {\n font-family: 'SF Mono', SFMono-Regular, ui-monospace, 'DejaVu Sans Mono', Menlo, Consolas,\n monospace;\n color: ${({ theme }) => theme.colors.neutral800};\n overflow: auto;\n max-width: 100%;\n }\n`;\n\nconst codeBlocks: Pick<BlocksStore, 'code'> = {\n code: {\n renderElement: (props) => (\n <CodeBlock {...props.attributes}>\n <code>{props.children}</code>\n </CodeBlock>\n ),\n icon: Code,\n label: {\n id: 'components.Blocks.blocks.code',\n defaultMessage: 'Code block',\n },\n matchNode: (node) => node.type === 'code',\n isInBlocksSelector: true,\n handleConvert(editor) {\n baseHandleConvert<Block<'code'>>(editor, { type: 'code' });\n },\n handleEnterKey(editor) {\n pressEnterTwiceToExit(editor);\n },\n snippets: ['```'],\n dragHandleTopMargin: '10px',\n },\n};\n\nexport { codeBlocks };\n","import * as React from 'react';\n\nimport { Typography } from '@strapi/design-system';\nimport {\n HeadingFive,\n HeadingFour,\n HeadingOne,\n HeadingSix,\n HeadingThree,\n HeadingTwo,\n} from '@strapi/icons';\nimport { Editor } from 'slate';\nimport styled from 'styled-components';\n\nimport { type BlocksStore } from '../BlocksEditor';\nimport { baseHandleConvert } from '../utils/conversions';\nimport { type Block } from '../utils/types';\n\nconst H1 = styled(Typography).attrs({ as: 'h1' })`\n font-size: ${42 / 16}rem;\n line-height: ${({ theme }) => theme.lineHeights[1]};\n`;\n\nconst H2 = styled(Typography).attrs({ as: 'h2' })`\n font-size: ${35 / 16}rem;\n line-height: ${({ theme }) => theme.lineHeights[1]};\n`;\n\nconst H3 = styled(Typography).attrs({ as: 'h3' })`\n font-size: ${29 / 16}rem;\n line-height: ${({ theme }) => theme.lineHeights[1]};\n`;\n\nconst H4 = styled(Typography).attrs({ as: 'h4' })`\n font-size: ${24 / 16}rem;\n line-height: ${({ theme }) => theme.lineHeights[1]};\n`;\n\nconst H5 = styled(Typography).attrs({ as: 'h5' })`\n font-size: ${20 / 16}rem;\n line-height: ${({ theme }) => theme.lineHeights[1]};\n`;\n\nconst H6 = styled(Typography).attrs({ as: 'h6' })`\n font-size: 1rem;\n line-height: ${({ theme }) => theme.lineHeights[1]};\n`;\n\n/**\n * Common handler for converting a node to a heading\n */\nconst handleConvertToHeading = (editor: Editor, level: Block<'heading'>['level']) => {\n baseHandleConvert<Block<'heading'>>(editor, { type: 'heading', level });\n};\n\nconst headingBlocks: Pick<\n BlocksStore,\n 'heading-one' | 'heading-two' | 'heading-three' | 'heading-four' | 'heading-five' | 'heading-six'\n> = {\n 'heading-one': {\n renderElement: (props) => <H1 {...props.attributes}>{props.children}</H1>,\n icon: HeadingOne,\n label: {\n id: 'components.Blocks.blocks.heading1',\n defaultMessage: 'Heading 1',\n },\n handleConvert: (editor) => handleConvertToHeading(editor, 1),\n matchNode: (node) => node.type === 'heading' && node.level === 1,\n isInBlocksSelector: true,\n snippets: ['#'],\n dragHandleTopMargin: '14px',\n },\n 'heading-two': {\n renderElement: (props) => <H2 {...props.attributes}>{props.children}</H2>,\n icon: HeadingTwo,\n label: {\n id: 'components.Blocks.blocks.heading2',\n defaultMessage: 'Heading 2',\n },\n handleConvert: (editor) => handleConvertToHeading(editor, 2),\n matchNode: (node) => node.type === 'heading' && node.level === 2,\n isInBlocksSelector: true,\n snippets: ['##'],\n dragHandleTopMargin: '10px',\n },\n 'heading-three': {\n renderElement: (props) => <H3 {...props.attributes}>{props.children}</H3>,\n icon: HeadingThree,\n label: {\n id: 'components.Blocks.blocks.heading3',\n defaultMessage: 'Heading 3',\n },\n handleConvert: (editor) => handleConvertToHeading(editor, 3),\n matchNode: (node) => node.type === 'heading' && node.level === 3,\n isInBlocksSelector: true,\n snippets: ['###'],\n dragHandleTopMargin: '7px',\n },\n 'heading-four': {\n renderElement: (props) => <H4 {...props.attributes}>{props.children}</H4>,\n icon: HeadingFour,\n label: {\n id: 'components.Blocks.blocks.heading4',\n defaultMessage: 'Heading 4',\n },\n handleConvert: (editor) => handleConvertToHeading(editor, 4),\n matchNode: (node) => node.type === 'heading' && node.level === 4,\n isInBlocksSelector: true,\n snippets: ['####'],\n dragHandleTopMargin: '4px',\n },\n 'heading-five': {\n renderElement: (props) => <H5 {...props.attributes}>{props.children}</H5>,\n icon: HeadingFive,\n label: {\n id: 'components.Blocks.blocks.heading5',\n defaultMessage: 'Heading 5',\n },\n handleConvert: (editor) => handleConvertToHeading(editor, 5),\n matchNode: (node) => node.type === 'heading' && node.level === 5,\n isInBlocksSelector: true,\n snippets: ['#####'],\n },\n 'heading-six': {\n renderElement: (props) => <H6 {...props.attributes}>{props.children}</H6>,\n icon: HeadingSix,\n label: {\n id: 'components.Blocks.blocks.heading6',\n defaultMessage: 'Heading 6',\n },\n handleConvert: (editor) => handleConvertToHeading(editor, 6),\n matchNode: (node) => node.type === 'heading' && node.level === 6,\n isInBlocksSelector: true,\n snippets: ['######'],\n dragHandleTopMargin: '-2px',\n },\n};\n\nexport { headingBlocks };\n","import * as React from 'react';\n\nimport { Box, Flex } from '@strapi/design-system';\nimport { prefixFileUrlWithBackendUrl, useLibrary } from '@strapi/helper-plugin';\nimport { Picture } from '@strapi/icons';\nimport { type Attribute } from '@strapi/types';\nimport { type Element, Transforms, Editor } from 'slate';\nimport { useFocused, type RenderElementProps, useSelected } from 'slate-react';\nimport styled, { css } from 'styled-components';\n\nimport { useBlocksEditorContext, type BlocksStore } from '../BlocksEditor';\nimport { type Block } from '../utils/types';\n\ninterface ImageWrapperProps extends React.ComponentProps<typeof Box> {\n isFocused: boolean;\n}\n\nconst ImageWrapper = styled(Flex)<ImageWrapperProps>`\n transition-property: box-shadow;\n transition-duration: 0.2s;\n ${(props) =>\n props.isFocused &&\n css`\n box-shadow: ${props.theme.colors.primary600} 0px 0px 0px 3px;\n `}\n\n & > img {\n height: auto;\n // The max-height is decided with the design team, the 56px is the height of the toolbar\n max-height: calc(512px - 56px);\n max-width: 100%;\n object-fit: contain;\n }\n`;\n\nconst IMAGE_SCHEMA_FIELDS = [\n 'name',\n 'alternativeText',\n 'url',\n 'caption',\n 'width',\n 'height',\n 'formats',\n 'hash',\n 'ext',\n 'mime',\n 'size',\n 'previewUrl',\n 'provider',\n 'provider_metadata',\n 'createdAt',\n 'updatedAt',\n];\n\nconst pick = <T extends object, K extends keyof T>(object: T, keys: K[]): Pick<T, K> => {\n const entries = keys.map((key) => [key, object[key]]);\n return Object.fromEntries(entries);\n};\n\n// Type guard to force TypeScript to narrow the type of the element in Blocks component\nconst isImage = (element: Element): element is Block<'image'> => {\n return element.type === 'image';\n};\n\n// Added a background color to the image wrapper to make it easier to recognize the image block\nconst Image = ({ attributes, children, element }: RenderElementProps) => {\n const editorIsFocused = useFocused();\n const imageIsSelected = useSelected();\n\n if (!isImage(element)) {\n return null;\n }\n const { url, alternativeText, width, height } = element.image;\n\n return (\n <Box {...attributes}>\n {children}\n <ImageWrapper\n background=\"neutral100\"\n contentEditable={false}\n justifyContent=\"center\"\n isFocused={editorIsFocused && imageIsSelected}\n hasRadius\n >\n <img src={url} alt={alternativeText} width={width} height={height} />\n </ImageWrapper>\n </Box>\n );\n};\n\nconst ImageDialog = () => {\n const [isOpen, setIsOpen] = React.useState(true);\n const { editor } = useBlocksEditorContext('ImageDialog');\n const { components } = useLibrary();\n\n if (!components || !isOpen) return null;\n\n const MediaLibraryDialog = components['media-library'] as React.ComponentType<{\n allowedTypes: Attribute.MediaKind[];\n onClose: () => void;\n onSelectAssets: (_images: Attribute.MediaValue<true>) => void;\n }>;\n\n const insertImages = (images: Block<'image'>['image'][]) => {\n // If the selection is inside a list, split the list so that the modified block is outside of it\n Transforms.unwrapNodes(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n split: true,\n });\n\n // Save the path of the node that is being replaced by an image to insert the images there later\n // It's the closest full block node above the selection\n const nodeEntryBeingReplaced = Editor.above(editor, {\n match(node) {\n if (Editor.isEditor(node)) return false;\n\n const isInlineNode = ['text', 'link'].includes(node.type);\n\n return !isInlineNode;\n },\n });\n\n if (!nodeEntryBeingReplaced) return;\n const [, pathToInsert] = nodeEntryBeingReplaced;\n\n // Remove the previous node that is being replaced by an image\n Transforms.removeNodes(editor);\n\n // Convert images to nodes and insert them\n const nodesToInsert = images.map((image) => {\n const imageNode: Block<'image'> = {\n type: 'image',\n image,\n children: [{ type: 'text', text: '' }],\n };\n return imageNode;\n });\n Transforms.insertNodes(editor, nodesToInsert, { at: pathToInsert });\n\n // Set the selection on the image since it was cleared by calling removeNodes\n Transforms.select(editor, pathToInsert);\n };\n\n const handleSelectAssets = (images: Attribute.MediaValue<true>) => {\n const formattedImages = images.map((image) => {\n // Create an object with imageSchema defined and exclude unnecessary props coming from media library config\n const expectedImage = pick(image, IMAGE_SCHEMA_FIELDS);\n\n const nodeImage: Block<'image'>['image'] = {\n ...expectedImage,\n alternativeText: expectedImage.alternativeText || expectedImage.name,\n url: prefixFileUrlWithBackendUrl(image.url),\n };\n\n return nodeImage;\n });\n\n insertImages(formattedImages);\n setIsOpen(false);\n };\n\n return (\n <MediaLibraryDialog\n allowedTypes={['images']}\n onClose={() => setIsOpen(false)}\n onSelectAssets={handleSelectAssets}\n />\n );\n};\n\nconst imageBlocks: Pick<BlocksStore, 'image'> = {\n image: {\n renderElement: (props) => <Image {...props} />,\n icon: Picture,\n label: {\n id: 'components.Blocks.blocks.image',\n defaultMessage: 'Image',\n },\n matchNode: (node) => node.type === 'image',\n isInBlocksSelector: true,\n handleBackspaceKey(editor) {\n // Prevent issue where the image remains when it's the only block in the document\n if (editor.children.length === 1) {\n Transforms.setNodes(editor, {\n type: 'paragraph',\n // @ts-expect-error we're only setting image as null so that Slate deletes it\n image: null,\n children: [{ type: 'text', text: '' }],\n });\n } else {\n Transforms.removeNodes(editor);\n }\n },\n handleEnterKey(editor) {\n Transforms.insertNodes(editor, {\n type: 'paragraph',\n children: [{ type: 'text', text: '' }],\n });\n },\n handleConvert: () => {\n // All the logic is managed inside the ImageDialog component,\n // because the blocks are only created when the user selects images in the modal and submits\n // and if he closes the modal, then no changes are made to the editor\n return () => <ImageDialog />;\n },\n snippets: ['!['],\n },\n};\n\nexport { imageBlocks };\n","import { Transforms, Editor, Element as SlateElement, Node, Range } from 'slate';\n\nimport { type Block } from './types';\n\nconst removeLink = (editor: Editor) => {\n Transforms.unwrapNodes(editor, {\n match: (node) => !Editor.isEditor(node) && SlateElement.isElement(node) && node.type === 'link',\n });\n};\n\nconst insertLink = (editor: Editor, { url }: { url: string }) => {\n if (editor.selection) {\n // We want to remove all link on the selection\n const linkNodes = Array.from(\n Editor.nodes(editor, {\n at: editor.selection,\n match: (node) => !Editor.isEditor(node) && node.type === 'link',\n })\n );\n\n linkNodes.forEach(([, path]) => {\n Transforms.unwrapNodes(editor, { at: path });\n });\n\n if (Range.isCollapsed(editor.selection)) {\n const link: Block<'link'> = {\n type: 'link',\n url: url ?? '',\n children: [{ type: 'text', text: url }],\n };\n\n Transforms.insertNodes(editor, link);\n } else {\n Transforms.wrapNodes(editor, { type: 'link', url: url ?? '' } as Block<'link'>, {\n split: true,\n });\n }\n }\n};\n\nconst editLink = (editor: Editor, link: { url: string; text: string }) => {\n const { url, text } = link;\n\n if (!editor.selection) {\n return;\n }\n\n const linkEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'link',\n });\n\n if (linkEntry) {\n const [, linkPath] = linkEntry;\n Transforms.setNodes(editor, { url }, { at: linkPath });\n\n // If link text is different, we remove the old text and insert the new one\n if (text !== '' && text !== Editor.string(editor, linkPath)) {\n const linkNodeChildrens = Array.from(Node.children(editor, linkPath, { reverse: true }));\n\n linkNodeChildrens.forEach(([, childPath]) => {\n Transforms.removeNodes(editor, { at: childPath });\n });\n\n Transforms.insertNodes(editor, [{ type: 'text', text }], { at: linkPath.concat(0) });\n }\n }\n};\n\nexport { insertLink, editLink, removeLink };\n","import { type Attribute } from '@strapi/types';\nimport { type Element, Node } from 'slate';\n\ntype Block<T extends Element['type']> = Extract<Node, { type: T }>;\n\n// Wrap Object.entries to get the correct types\nconst getEntries = <T extends object>(object: T) =>\n Object.entries(object) as [keyof T, T[keyof T]][];\n\n// Wrap Object.keys to get the correct types\nconst getKeys = <T extends object>(object: T) => Object.keys(object) as (keyof T)[];\n\nconst isLinkNode = (element: Element): element is Attribute.LinkInlineNode => {\n return element.type === 'link';\n};\n\nconst isListNode = (element: Element): element is Attribute.ListBlockNode => {\n return element.type === 'list';\n};\n\nexport { type Block, getEntries, getKeys, isLinkNode, isListNode };\n","import * as React from 'react';\n\nimport {\n BaseLink,\n Button,\n Field,\n FieldInput,\n FieldLabel,\n Flex,\n Popover,\n} from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { Editor, Path, Range, Transforms } from 'slate';\nimport { type RenderElementProps, ReactEditor } from 'slate-react';\nimport styled from 'styled-components';\n\nimport { composeRefs } from '../../../utils/refs';\nimport { type BlocksStore, useBlocksEditorContext } from '../BlocksEditor';\nimport { editLink, removeLink } from '../utils/links';\nimport { isLinkNode, type Block } from '../utils/types';\n\nconst StyledBaseLink = styled(BaseLink)`\n text-decoration: none;\n`;\n\nconst RemoveButton = styled(Button)<{ visible: boolean }>`\n visibility: ${(props) => (props.visible ? 'visible' : 'hidden')};\n`;\n\ninterface LinkContentProps extends RenderElementProps {\n link: Block<'link'>;\n}\n\nconst LinkContent = React.forwardRef<HTMLAnchorElement, LinkContentProps>(\n ({ link, children, attributes }, forwardedRef) => {\n const { formatMessage } = useIntl();\n const { editor } = useBlocksEditorContext('Link');\n const path = ReactEditor.findPath(editor, link);\n const [popoverOpen, setPopoverOpen] = React.useState(\n editor.lastInsertedLinkPath ? Path.equals(path, editor.lastInsertedLinkPath) : false\n );\n const linkRef = React.useRef<HTMLAnchorElement>(null!);\n const elementText = link.children.map((child) => child.text).join('');\n const [linkText, setLinkText] = React.useState(elementText);\n const [linkUrl, setLinkUrl] = React.useState(link.url);\n const linkInputRef = React.useRef<HTMLInputElement>(null);\n const [showRemoveButton, setShowRemoveButton] = React.useState(false);\n const [isSaveDisabled, setIsSaveDisabled] = React.useState(false);\n\n const handleOpenEditPopover: React.MouseEventHandler<HTMLAnchorElement> = (e) => {\n e.preventDefault();\n setPopoverOpen(true);\n setShowRemoveButton(true);\n };\n\n const onLinkChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setIsSaveDisabled(false);\n setLinkUrl(e.target.value);\n\n try {\n // eslint-disable-next-line no-new\n new URL(\n e.target.value?.startsWith('/') ? `https://strapi.io${e.target.value}` : e.target.value\n );\n } catch (error) {\n setIsSaveDisabled(true);\n }\n };\n\n const handleSave: React.FormEventHandler = (e) => {\n e.stopPropagation();\n\n // If the selection is collapsed, we select the parent node because we want all the link to be replaced)\n if (editor.selection && Range.isCollapsed(editor.selection)) {\n const [, parentPath] = Editor.parent(editor, editor.selection.focus?.path);\n Transforms.select(editor, parentPath);\n }\n\n editLink(editor, { url: linkUrl, text: linkText });\n setPopoverOpen(false);\n editor.lastInsertedLinkPath = null;\n };\n\n const handleDismiss = () => {\n setPopoverOpen(false);\n\n if (link.url === '') {\n removeLink(editor);\n }\n\n ReactEditor.focus(editor);\n };\n\n const inputNotDirty =\n !linkText ||\n !linkUrl ||\n (link.url && link.url === linkUrl && elementText && elementText === linkText);\n\n const composedRefs = composeRefs(linkRef, forwardedRef);\n\n React.useEffect(() => {\n // Focus on the link input element when the popover opens\n if (popoverOpen) linkInputRef.current?.focus();\n }, [popoverOpen]);\n\n return (\n <>\n <StyledBaseLink\n {...attributes}\n ref={composedRefs}\n href={link.url}\n onClick={handleOpenEditPopover}\n color=\"primary600\"\n >\n {children}\n </StyledBaseLink>\n {popoverOpen && (\n <Popover source={linkRef} onDismiss={handleDismiss} padding={4} contentEditable={false}>\n <Flex as=\"form\" onSubmit={handleSave} direction=\"column\" gap={4}>\n <Field width=\"368px\">\n <Flex direction=\"column\" gap={1} alignItems=\"stretch\">\n <FieldLabel>\n {formatMessage({\n id: 'components.Blocks.popover.text',\n defaultMessage: 'Text',\n })}\n </FieldLabel>\n <FieldInput\n name=\"text\"\n placeholder={formatMessage({\n id: 'components.Blocks.popover.text.placeholder',\n defaultMessage: 'Enter link text',\n })}\n value={linkText}\n onChange={(e) => {\n setLinkText(e.target.value);\n }}\n />\n </Flex>\n </Field>\n <Field width=\"368px\">\n <Flex direction=\"column\" gap={1} alignItems=\"stretch\">\n <FieldLabel>\n {formatMessage({\n id: 'components.Blocks.popover.link',\n defaultMessage: 'Link',\n })}\n </FieldLabel>\n <FieldInput\n ref={linkInputRef}\n name=\"url\"\n placeholder={formatMessage({\n id: 'components.Blocks.popover.link.placeholder',\n defaultMessage: 'Paste link',\n })}\n value={linkUrl}\n onChange={onLinkChange}\n />\n </Flex>\n </Field>\n <Flex justifyContent=\"space-between\" width=\"100%\">\n <RemoveButton\n variant=\"danger-light\"\n onClick={() => removeLink(editor)}\n visible={showRemoveButton}\n >\n {formatMessage({\n id: 'components.Blocks.popover.remove',\n defaultMessage: 'Remove',\n })}\n </RemoveButton>\n <Flex gap={2}>\n <Button variant=\"tertiary\" onClick={handleDismiss}>\n {formatMessage({\n id: 'components.Blocks.popover.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n <Button type=\"submit\" disabled={Boolean(inputNotDirty) || isSaveDisabled}>\n {formatMessage({\n id: 'components.Blocks.popover.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n </Flex>\n </Flex>\n </Popover>\n )}\n </>\n );\n }\n);\n\nconst Link = React.forwardRef<HTMLAnchorElement, RenderElementProps>((props, forwardedRef) => {\n if (!isLinkNode(props.element)) {\n return null;\n }\n\n // LinkContent uses React hooks that rely on props.element being a link. If the type guard above\n // doesn't pass, those hooks would be called conditionnally, which is not allowed.\n // Hence the need for a separate component.\n return <LinkContent {...props} link={props.element} ref={forwardedRef} />;\n});\n\nconst linkBlocks: Pick<BlocksStore, 'link'> = {\n link: {\n renderElement: (props) => (\n <Link element={props.element} attributes={props.attributes}>\n {props.children}\n </Link>\n ),\n // No handleConvert here, links are created via the link button in the toolbar\n matchNode: (node) => node.type === 'link',\n isInBlocksSelector: false,\n },\n};\n\nexport { linkBlocks };\n","import * as React from 'react';\n\nimport { Typography } from '@strapi/design-system';\nimport { BulletList, NumberList } from '@strapi/icons';\nimport { type Text, Editor, Node, Transforms, Path } from 'slate';\nimport { type RenderElementProps, ReactEditor } from 'slate-react';\nimport styled, { type CSSProperties, css } from 'styled-components';\n\nimport { type BlocksStore } from '../BlocksEditor';\nimport { baseHandleConvert } from '../utils/conversions';\nimport { isListNode, type Block } from '../utils/types';\n\nconst listStyle = css`\n display: flex;\n flex-direction: column;\n gap: ${({ theme }) => theme.spaces[2]};\n margin-inline-start: ${({ theme }) => theme.spaces[0]};\n margin-inline-end: ${({ theme }) => theme.spaces[0]};\n padding-inline-start: ${({ theme }) => theme.spaces[2]};\n\n ol,\n ul {\n margin-block-start: ${({ theme }) => theme.spaces[0]};\n margin-block-end: ${({ theme }) => theme.spaces[0]};\n }\n\n li {\n margin-inline-start: ${({ theme }) => theme.spaces[3]};\n }\n`;\n\nconst Orderedlist = styled.ol<{ listStyleType: CSSProperties['listStyleType'] }>`\n list-style-type: ${(props) => props.listStyleType};\n ${listStyle}\n`;\n\nconst Unorderedlist = styled.ul<{ listStyleType: CSSProperties['listStyleType'] }>`\n list-style-type: ${(props) => props.listStyleType};\n ${listStyle}\n`;\n\nconst orderedStyles = ['decimal', 'lower-alpha', 'upper-roman'];\nconst unorderedStyles = ['disc', 'circle', 'square'];\n\nconst List = ({ attributes, children, element }: RenderElementProps) => {\n if (!isListNode(element)) {\n return null;\n }\n\n // Decide the subsequent style by referencing the given styles according to the format,\n // allowing for infinite nested lists\n const listStyles = element.format === 'ordered' ? orderedStyles : unorderedStyles;\n const nextIndex = (element.indentLevel || 0) % listStyles!.length;\n const listStyleType = listStyles![nextIndex];\n\n if (element.format === 'ordered') {\n return (\n <Orderedlist listStyleType={listStyleType} {...attributes}>\n {children}\n </Orderedlist>\n );\n }\n\n return (\n <Unorderedlist listStyleType={listStyleType} {...attributes}>\n {children}\n </Unorderedlist>\n );\n};\n\nconst replaceListWithEmptyBlock = (editor: Editor, currentListPath: Path) => {\n // Delete the empty list\n Transforms.removeNodes(editor, { at: currentListPath });\n\n if (currentListPath[0] === 0) {\n // If the list was the only (or first) block element then insert empty paragraph as editor needs default value\n Transforms.insertNodes(\n editor,\n {\n type: 'paragraph',\n children: [{ type: 'text', text: '' }],\n },\n { at: currentListPath }\n );\n Transforms.select(editor, currentListPath);\n }\n};\n\nconst isText = (node: unknown): node is Text => {\n return Node.isNode(node) && !Editor.isEditor(node) && node.type === 'text';\n};\n\n/**\n * Common handler for the backspace event on ordered and unordered lists\n */\nconst handleBackspaceKeyOnList = (editor: Editor, event: React.KeyboardEvent<HTMLElement>) => {\n if (!editor.selection) return;\n\n const [currentListItem, currentListItemPath] = Editor.parent(editor, editor.selection.anchor);\n const [currentList, currentListPath] = Editor.parent(editor, currentListItemPath);\n const isListEmpty =\n currentList.children.length === 1 &&\n isText(currentListItem.children[0]) &&\n currentListItem.children[0].text === '';\n const isListItemEmpty =\n currentListItem.children.length === 1 &&\n isText(currentListItem.children[0]) &&\n currentListItem.children[0].text === '';\n const isFocusAtTheBeginningOfAChild =\n editor.selection.focus.offset === 0 && editor.selection.focus.path.at(-2) === 0;\n\n if (isListEmpty) {\n const parentListEntry = Editor.above(editor, {\n at: currentListPath,\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n });\n if (!parentListEntry) {\n event.preventDefault();\n replaceListWithEmptyBlock(editor, currentListPath);\n }\n } else if (isFocusAtTheBeginningOfAChild) {\n // If the focus is at the beginning of a child node we need to replace it with a paragraph\n Transforms.liftNodes(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list-item',\n });\n Transforms.setNodes(editor, { type: 'paragraph' });\n } else if (isListItemEmpty) {\n const previousEntry = Editor.previous(editor, {\n at: currentListItemPath,\n });\n const nextEntry = Editor.next(editor, {\n at: currentListItemPath,\n });\n\n if (previousEntry && nextEntry) {\n // If previous and next nodes are lists or list-items, delete empty list item\n event.preventDefault();\n Transforms.removeNodes(editor, {\n at: currentListItemPath,\n });\n\n // If previous and next nodes are lists with same format and indent Levels, then merge the nodes\n const [previousList] = previousEntry;\n const [nextList] = nextEntry;\n if (\n !Editor.isEditor(previousList) &&\n !isText(previousList) &&\n isListNode(previousList) &&\n !Editor.isEditor(nextList) &&\n !isText(nextList) &&\n isListNode(nextList)\n ) {\n if (\n previousList.type === 'list' &&\n nextList.type === 'list' &&\n previousList.format === nextList.format &&\n previousList.indentLevel === nextList.indentLevel\n ) {\n Transforms.mergeNodes(editor, {\n at: currentListItemPath,\n });\n }\n }\n }\n }\n};\n\n/**\n * Common handler for the enter key on ordered and unordered lists\n */\nconst handleEnterKeyOnList = (editor: Editor) => {\n const currentListItemEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list-item',\n });\n\n if (!currentListItemEntry || !editor.selection) {\n return;\n }\n\n const [currentListItem, currentListItemPath] = currentListItemEntry;\n const [currentList, currentListPath] = Editor.parent(editor, currentListItemPath);\n const isListEmpty =\n currentList.children.length === 1 &&\n isText(currentListItem.children[0]) &&\n currentListItem.children[0].text === '';\n const isListItemEmpty =\n currentListItem.children.length === 1 &&\n isText(currentListItem.children[0]) &&\n currentListItem.children[0].text === '';\n const isFocusAtTheBeginningOfAChild =\n editor.selection.focus.offset === 0 && editor.selection.focus.path.at(-1) === 0;\n\n if (isListEmpty) {\n replaceListWithEmptyBlock(editor, currentListPath);\n } else if (isFocusAtTheBeginningOfAChild && !isListItemEmpty) {\n // If the focus is at the beginning of a child node, shift below the list item and create a new list-item\n const currentNode = Editor.above(editor, { at: editor.selection.anchor });\n Transforms.insertNodes(editor, { type: 'list-item', children: [{ type: 'text', text: '' }] });\n if (currentNode) {\n const path = currentNode[1];\n const updatedPath = [...path.slice(0, -1), path[path.length - 1] + 1];\n Transforms.select(editor, {\n anchor: { path: updatedPath.concat(0), offset: 0 },\n focus: { path: updatedPath.concat(0), offset: 0 },\n });\n }\n } else if (isListItemEmpty) {\n // Check if there is a list above the current list and shift list-item under it\n if (\n !Editor.isEditor(currentList) &&\n isListNode(currentList) &&\n currentList?.indentLevel &&\n currentList.indentLevel > 0\n ) {\n const previousIndentLevel = currentList.indentLevel - 1;\n\n const parentListNodeEntry = Editor.above(editor, {\n match: (node) =>\n !Editor.isEditor(node) &&\n node.type === 'list' &&\n (node.indentLevel || 0) === previousIndentLevel,\n });\n\n if (parentListNodeEntry) {\n // Get the parent list path and add 1 to it to exit from the current list\n const modifiedPath = currentListItemPath.slice(0, -1);\n if (modifiedPath.length > 0) {\n modifiedPath[modifiedPath.length - 1] += 1;\n }\n\n // Shift list-item under parent list\n Transforms.moveNodes(editor, {\n at: currentListItemPath,\n to: modifiedPath,\n });\n return;\n }\n }\n\n // Otherwise delete the empty list item and create a new paragraph below the parent list\n Transforms.removeNodes(editor, { at: currentListItemPath });\n\n const createdParagraphPath = Path.next(currentListPath);\n Transforms.insertNodes(\n editor,\n {\n type: 'paragraph',\n children: [{ type: 'text', text: '' }],\n },\n { at: createdParagraphPath }\n );\n\n // Move the selection to the newly created paragraph\n Transforms.select(editor, createdParagraphPath);\n } else {\n // Check if the cursor is at the end of the list item\n const isNodeEnd = Editor.isEnd(editor, editor.selection.anchor, currentListItemPath);\n\n if (isNodeEnd) {\n // If there was nothing after the cursor, create a fresh new list item,\n // in order to avoid carrying over the modifiers from the previous list item\n Transforms.insertNodes(editor, { type: 'list-item', children: [{ type: 'text', text: '' }] });\n } else {\n // If there is something after the cursor, split the current list item,\n // so that we keep the content and the modifiers\n Transforms.splitNodes(editor);\n }\n }\n};\n\n/**\n * Common handler for converting a node to a list\n */\nconst handleConvertToList = (editor: Editor, format: Block<'list'>['format']) => {\n const convertedPath = baseHandleConvert<Block<'list-item'>>(editor, { type: 'list-item' });\n\n if (!convertedPath) return;\n\n Transforms.wrapNodes(editor, { type: 'list', format, children: [] }, { at: convertedPath });\n};\n\n/**\n * Common handler for the tab key on ordered and unordered lists\n */\nconst handleTabOnList = (editor: Editor) => {\n const currentListItemEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list-item',\n });\n\n if (!currentListItemEntry || !editor.selection) {\n return;\n }\n\n const [currentListItem, currentListItemPath] = currentListItemEntry;\n const [currentList] = Editor.parent(editor, currentListItemPath);\n\n // Skip tabbing if list-item is the first item in the list\n if (currentListItem === currentList.children[0]) return;\n\n const currentListItemIndex = currentList.children.findIndex((item) => item === currentListItem);\n const previousNode = currentList.children[currentListItemIndex - 1];\n\n // If previous node is a list block then move the list-item under it\n if (previousNode.type === 'list') {\n const nodePath = ReactEditor.findPath(editor, previousNode);\n const insertAtPath = previousNode.children.length;\n\n Transforms.moveNodes(editor, {\n at: currentListItemPath,\n to: nodePath.concat(insertAtPath),\n });\n return;\n }\n\n if (!Editor.isEditor(currentList) && isListNode(currentList)) {\n // Wrap list-item with list block on tab\n Transforms.wrapNodes(editor, {\n type: 'list',\n format: currentList.format,\n indentLevel: (currentList.indentLevel || 0) + 1,\n children: [],\n });\n }\n};\n\nconst listBlocks: Pick<BlocksStore, 'list-ordered' | 'list-unordered' | 'list-item'> = {\n 'list-ordered': {\n renderElement: (props) => <List {...props} />,\n label: {\n id: 'components.Blocks.blocks.orderedList',\n defaultMessage: 'Numbered list',\n },\n icon: NumberList,\n matchNode: (node) => node.type === 'list' && node.format === 'ordered',\n isInBlocksSelector: true,\n handleConvert: (editor) => handleConvertToList(editor, 'ordered'),\n handleEnterKey: handleEnterKeyOnList,\n handleBackspaceKey: handleBackspaceKeyOnList,\n handleTab: handleTabOnList,\n snippets: ['1.'],\n },\n 'list-unordered': {\n renderElement: (props) => <List {...props} />,\n label: {\n id: 'components.Blocks.blocks.unorderedList',\n defaultMessage: 'Bulleted list',\n },\n icon: BulletList,\n matchNode: (node) => node.type === 'list' && node.format === 'unordered',\n isInBlocksSelector: true,\n handleConvert: (editor) => handleConvertToList(editor, 'unordered'),\n handleEnterKey: handleEnterKeyOnList,\n handleBackspaceKey: handleBackspaceKeyOnList,\n handleTab: handleTabOnList,\n snippets: ['-', '*', '+'],\n },\n 'list-item': {\n renderElement: (props) => (\n <Typography as=\"li\" {...props.attributes}>\n {props.children}\n </Typography>\n ),\n // No handleConvert, list items are created when converting to the parent list\n matchNode: (node) => node.type === 'list-item',\n isInBlocksSelector: false,\n dragHandleTopMargin: '-2px',\n },\n};\n\nexport { listBlocks };\n","import * as React from 'react';\n\nimport { Typography } from '@strapi/design-system';\nimport { Paragraph } from '@strapi/icons';\nimport { type Text, Editor, Transforms } from 'slate';\n\nimport { type BlocksStore } from '../BlocksEditor';\nimport { baseHandleConvert } from '../utils/conversions';\nimport { type Block } from '../utils/types';\n\nconst paragraphBlocks: Pick<BlocksStore, 'paragraph'> = {\n paragraph: {\n renderElement: (props) => (\n <Typography as=\"p\" variant=\"omega\" {...props.attributes}>\n {props.children}\n </Typography>\n ),\n icon: Paragraph,\n label: {\n id: 'components.Blocks.blocks.text',\n defaultMessage: 'Text',\n },\n matchNode: (node) => node.type === 'paragraph',\n isInBlocksSelector: true,\n dragHandleTopMargin: '-2px',\n handleConvert(editor) {\n baseHandleConvert<Block<'paragraph'>>(editor, { type: 'paragraph' });\n },\n handleEnterKey(editor) {\n if (!editor.selection) {\n return;\n }\n\n // We need to keep track of the initial position of the cursor\n const anchorPathInitialPosition = editor.selection.anchor.path;\n /**\n * Split the nodes where the cursor is. This will create a new paragraph with the content\n * after the cursor, while retaining all the children, modifiers etc.\n */\n Transforms.splitNodes(editor, {\n // Makes sure we always create a new node,\n // even if there's nothing to the right of the cursor in the node.\n always: true,\n });\n\n // Check if the created node is empty (if there was no text after the cursor in the node)\n // This lets us know if we need to carry over the modifiers from the previous node\n const parentBlockEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n if (!parentBlockEntry) {\n return;\n }\n const [, parentBlockPath] = parentBlockEntry;\n const isNodeEnd = Editor.isEnd(editor, editor.selection.anchor, parentBlockPath);\n\n /**\n * Delete and recreate the node that was created at the right of the cursor.\n * This is to avoid node pollution\n * (e.g. keeping the level attribute when converting a heading to a paragraph).\n * Select the parent of the selection because we want the full block, not the leaf.\n * And copy its children to make sure we keep the modifiers.\n */\n const [fragmentedNode] = Editor.parent(editor, editor.selection.anchor.path);\n Transforms.removeNodes(editor);\n\n // Check if after the current position there is another node\n const hasNextNode = editor.children.length - anchorPathInitialPosition[0] > 1;\n\n // Insert the new node at the right position.\n // The next line after the editor selection if present or otherwise at the end of the editor.\n Transforms.insertNodes(\n editor,\n {\n type: 'paragraph',\n // Don't carry over the modifiers from the previous node if there was no text after the cursor\n children: (isNodeEnd ? [{ type: 'text', text: '' }] : fragmentedNode.children) as Text[],\n },\n {\n at: hasNextNode ? [anchorPathInitialPosition[0] + 1] : [editor.children.length],\n }\n );\n\n /**\n * The new selection will by default be at the end of the created node.\n * Instead we manually move it to the start of the created node.\n * Make sure to we go to the start of the node and not the start of the leaf.\n */\n Transforms.select(editor, editor.start([anchorPathInitialPosition[0] + 1]));\n },\n },\n};\n\nexport { paragraphBlocks };\n","import * as React from 'react';\n\nimport { Quote } from '@strapi/icons';\nimport styled from 'styled-components';\n\nimport { type BlocksStore } from '../BlocksEditor';\nimport { baseHandleConvert } from '../utils/conversions';\nimport { pressEnterTwiceToExit } from '../utils/enterKey';\nimport { type Block } from '../utils/types';\n\nconst Blockquote = styled.blockquote.attrs({ role: 'blockquote' })`\n font-weight: ${({ theme }) => theme.fontWeights.regular};\n border-left: ${({ theme }) => `${theme.spaces[1]} solid ${theme.colors.neutral200}`};\n padding: ${({ theme }) => theme.spaces[2]} ${({ theme }) => theme.spaces[4]};\n color: ${({ theme }) => theme.colors.neutral600};\n`;\n\nconst quoteBlocks: Pick<BlocksStore, 'quote'> = {\n quote: {\n renderElement: (props) => (\n // The div is needed to make sure the padding bottom from BlocksContent is applied properly\n // when the quote is the last block in the editor\n <div>\n <Blockquote {...props.attributes}>{props.children}</Blockquote>\n </div>\n ),\n icon: Quote,\n label: {\n id: 'components.Blocks.blocks.quote',\n defaultMessage: 'Quote',\n },\n matchNode: (node) => node.type === 'quote',\n isInBlocksSelector: true,\n handleConvert(editor) {\n baseHandleConvert<Block<'quote'>>(editor, { type: 'quote' });\n },\n handleEnterKey(editor) {\n pressEnterTwiceToExit(editor);\n },\n snippets: ['>'],\n dragHandleTopMargin: '6px',\n },\n};\n\nexport { quoteBlocks };\n","import * as React from 'react';\n\nimport * as Toolbar from '@radix-ui/react-toolbar';\nimport { Flex, Icon, Tooltip, SingleSelect, SingleSelectOption, Box } from '@strapi/design-system';\nimport { pxToRem } from '@strapi/helper-plugin';\nimport { Link } from '@strapi/icons';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { Editor, Transforms, Element as SlateElement, Node, type Ancestor } from 'slate';\nimport { ReactEditor } from 'slate-react';\nimport styled from 'styled-components';\n\nimport {\n type BlocksStore,\n type SelectorBlockKey,\n isSelectorBlockKey,\n useBlocksEditorContext,\n} from './BlocksEditor';\nimport { insertLink } from './utils/links';\nimport { type Block, getEntries, getKeys } from './utils/types';\n\nconst ToolbarWrapper = styled(Flex)`\n &[aria-disabled='true'] {\n cursor: not-allowed;\n }\n`;\n\nconst Separator = styled(Toolbar.Separator)`\n background: ${({ theme }) => theme.colors.neutral150};\n width: 1px;\n height: ${pxToRem(24)};\n`;\n\nconst FlexButton = styled(Flex)`\n // Inherit the not-allowed cursor from ToolbarWrapper when disabled\n &[aria-disabled] {\n cursor: inherit;\n }\n\n &[aria-disabled='false'] {\n cursor: pointer;\n\n // Only apply hover styles if the button is enabled\n &:hover {\n background: ${({ theme }) => theme.colors.primary100};\n }\n }\n`;\n\nconst SelectWrapper = styled(Box)`\n // Styling changes to SingleSelect component don't work, so adding wrapper to target SingleSelect\n div[role='combobox'] {\n border: none;\n cursor: pointer;\n min-height: unset;\n padding-top: 6px;\n padding-bottom: 6px;\n\n &[aria-disabled='false']:hover {\n cursor: pointer;\n background: ${({ theme }) => theme.colors.primary100};\n }\n\n &[aria-disabled] {\n background: transparent;\n cursor: inherit;\n\n // Select text and icons should also have disabled color\n span {\n color: ${({ theme }) => theme.colors.neutral600};\n }\n }\n }\n`;\n\n/**\n * Handles the modal component that may be returned by a block when converting it\n */\nfunction useConversionModal() {\n const [modalElement, setModalComponent] = React.useState<React.JSX.Element | null>(null);\n\n const handleConversionResult = (renderModal: void | (() => React.JSX.Element) | undefined) => {\n // Not all blocks return a modal\n if (renderModal) {\n // Use cloneElement to apply a key because to create a new instance of the component\n // Without the new key, the state is kept from previous times that option was picked\n setModalComponent(React.cloneElement(renderModal(), { key: Date.now() }));\n }\n };\n\n return { modalElement, handleConversionResult };\n}\n\ninterface ToolbarButtonProps {\n icon: React.ComponentType;\n name: string;\n label: MessageDescriptor;\n isActive: boolean;\n disabled: boolean;\n handleClick: () => void;\n}\n\nconst ToolbarButton = ({\n icon,\n name,\n label,\n isActive,\n disabled,\n handleClick,\n}: ToolbarButtonProps) => {\n const { editor } = useBlocksEditorContext('ToolbarButton');\n const { formatMessage } = useIntl();\n const labelMessage = formatMessage(label);\n\n const enabledColor = isActive ? 'primary600' : 'neutral600';\n\n return (\n <Tooltip description={labelMessage}>\n <Toolbar.ToggleItem\n value={name}\n data-state={isActive ? 'on' : 'off'}\n onMouseDown={(e) => {\n e.preventDefault();\n handleClick();\n ReactEditor.focus(editor);\n }}\n aria-disabled={disabled}\n disabled={disabled}\n aria-label={labelMessage}\n asChild\n >\n <FlexButton\n as=\"button\"\n background={isActive ? 'primary100' : ''}\n alignItems=\"center\"\n justifyContent=\"center\"\n width={7}\n height={7}\n hasRadius\n >\n <Icon width={3} height={3} as={icon} color={disabled ? 'neutral300' : enabledColor} />\n </FlexButton>\n </Toolbar.ToggleItem>\n </Tooltip>\n );\n};\n\nconst BlocksDropdown = () => {\n const { editor, blocks, disabled } = useBlocksEditorContext('BlocksDropdown');\n const { formatMessage } = useIntl();\n const { modalElement, handleConversionResult } = useConversionModal();\n\n const blockKeysToInclude: SelectorBlockKey[] = getEntries(blocks).reduce<\n ReturnType<typeof getEntries>\n >((currentKeys, entry) => {\n const [key, block] = entry;\n\n return block.isInBlocksSelector ? [...currentKeys, key] : currentKeys;\n }, []);\n\n const [blockSelected, setBlockSelected] = React.useState<SelectorBlockKey>('paragraph');\n\n const handleSelect = (optionKey: unknown) => {\n if (!isSelectorBlockKey(optionKey)) {\n return;\n }\n\n const editorIsEmpty =\n editor.children.length === 1 && Editor.isEmpty(editor, editor.children[0]);\n\n if (!editor.selection && !editorIsEmpty) {\n // When there is no selection, create an empty block at the end of the editor\n // so that it can be converted to the selected block\n Transforms.insertNodes(\n editor,\n {\n type: 'quote',\n children: [{ type: 'text', text: '' }],\n },\n {\n select: true,\n // Since there's no selection, Slate will automatically insert the node at the end\n }\n );\n } else if (!editor.selection && editorIsEmpty) {\n // When there is no selection and the editor is empty,\n // select the empty paragraph from Slate's initialValue so it gets converted\n Transforms.select(editor, Editor.start(editor, [0, 0]));\n }\n\n // If selection is already a list block, toggle its format\n const currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n });\n\n if (currentListEntry && ['list-ordered', 'list-unordered'].includes(optionKey)) {\n const [currentList, currentListPath] = currentListEntry;\n const format = optionKey === 'list-ordered' ? 'ordered' : 'unordered';\n\n if (!Editor.isEditor(currentList) && isListNode(currentList)) {\n // Format is different, toggle list format\n if (currentList.format !== format) {\n Transforms.setNodes(editor, { format }, { at: currentListPath });\n }\n }\n return;\n }\n\n // Let the block handle the Slate conversion logic\n const maybeRenderModal = blocks[optionKey].handleConvert?.(editor);\n handleConversionResult(maybeRenderModal);\n\n setBlockSelected(optionKey);\n\n ReactEditor.focus(editor);\n };\n\n /**\n * Prevent the select from focusing itself so ReactEditor.focus(editor) can focus the editor instead.\n *\n * The editor first loses focus to a blur event when clicking the select button. However,\n * refocusing the editor is not enough since the select's default behavior is to refocus itself\n * after an option is selected.\n *\n */\n const preventSelectFocus = (e: Event) => e.preventDefault();\n\n // Listen to the selection change and update the selected block in the dropdown\n React.useEffect(() => {\n if (editor.selection) {\n let selectedNode: Ancestor;\n\n // If selection anchor is a list-item, get its parent\n const currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n at: editor.selection.anchor,\n });\n\n if (currentListEntry) {\n const [currentList] = currentListEntry;\n selectedNode = currentList;\n } else {\n // Get the parent node of the anchor other than list-item\n const [anchorNode] = Editor.parent(editor, editor.selection.anchor, {\n edge: 'start',\n depth: 2,\n });\n\n // @ts-expect-error slate's delete behaviour creates an exceptional type\n if (anchorNode.type === 'list-item') {\n // When the last node in the selection is a list item,\n // slate's default delete operation leaves an empty list-item instead of converting it into a paragraph.\n // Issue: https://github.com/ianstormtaylor/slate/issues/2500\n\n Transforms.setNodes(editor, { type: 'paragraph' });\n // @ts-expect-error convert explicitly type to paragraph\n selectedNode = { ...anchorNode, type: 'paragraph' };\n } else {\n selectedNode = anchorNode;\n }\n }\n\n // Find the block key that matches the anchor node\n const anchorBlockKey = getKeys(blocks).find(\n (blockKey) => !Editor.isEditor(selectedNode) && blocks[blockKey].matchNode(selectedNode)\n );\n\n // Change the value selected in the dropdown if it doesn't match the anchor block key\n if (anchorBlockKey && anchorBlockKey !== blockSelected) {\n setBlockSelected(anchorBlockKey as SelectorBlockKey);\n }\n }\n }, [editor.selection, editor, blocks, blockSelected]);\n\n return (\n <>\n <SelectWrapper>\n <SingleSelect\n startIcon={<Icon as={blocks[blockSelected].icon} />}\n onChange={handleSelect}\n placeholder={formatMessage(blocks[blockSelected].label)}\n value={blockSelected}\n onCloseAutoFocus={preventSelectFocus}\n aria-label={formatMessage({\n id: 'components.Blocks.blocks.selectBlock',\n defaultMessage: 'Select a block',\n })}\n disabled={disabled}\n >\n {blockKeysToInclude.map((key) => (\n <BlockOption\n key={key}\n value={key}\n label={blocks[key].label}\n icon={blocks[key].icon}\n blockSelected={blockSelected}\n />\n ))}\n </SingleSelect>\n </SelectWrapper>\n {modalElement}\n </>\n );\n};\n\ninterface BlockOptionProps {\n value: string;\n icon: React.ComponentType;\n label: MessageDescriptor;\n blockSelected: string;\n}\n\nconst BlockOption = ({ value, icon, label, blockSelected }: BlockOptionProps) => {\n const { formatMessage } = useIntl();\n\n const isSelected = value === blockSelected;\n\n return (\n <SingleSelectOption\n startIcon={<Icon as={icon} color={isSelected ? 'primary600' : 'neutral600'} />}\n value={value}\n >\n {formatMessage(label)}\n </SingleSelectOption>\n );\n};\n\nconst isListNode = (node: unknown): node is Block<'list'> => {\n return Node.isNode(node) && !Editor.isEditor(node) && node.type === 'list';\n};\n\ninterface ListButtonProps {\n block: BlocksStore['list-ordered'] | BlocksStore['list-unordered'];\n format: Block<'list'>['format'];\n}\n\nconst ListButton = ({ block, format }: ListButtonProps) => {\n const { editor, disabled, blocks } = useBlocksEditorContext('ListButton');\n\n const isListActive = () => {\n if (!editor.selection) return false;\n\n // Get the parent list at selection anchor node\n const currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n at: editor.selection.anchor,\n });\n\n if (currentListEntry) {\n const [currentList] = currentListEntry;\n if (!Editor.isEditor(currentList) && isListNode(currentList) && currentList.format === format)\n return true;\n }\n return false;\n };\n\n const toggleList = (format: Block<'list'>['format']) => {\n let currentListEntry;\n if (editor.selection) {\n currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n });\n } else {\n // If no selection, toggle last inserted node\n const [_, lastNodePath] = Editor.last(editor, []);\n currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n at: lastNodePath,\n });\n }\n\n if (!currentListEntry) {\n // If selection is not a list then convert it to list\n blocks[`list-${format}`].handleConvert!(editor);\n return;\n }\n\n // If selection is already a list then toggle format\n const [currentList, currentListPath] = currentListEntry;\n\n if (!Editor.isEditor(currentList) && isListNode(currentList)) {\n if (currentList.format !== format) {\n // Format is different, toggle list format\n Transforms.setNodes(editor, { format }, { at: currentListPath });\n } else {\n // Format is same, convert selected list-item to paragraph\n blocks['paragraph'].handleConvert!(editor);\n }\n }\n };\n\n return (\n <ToolbarButton\n icon={block.icon}\n name={format}\n label={block.label}\n isActive={isListActive()}\n disabled={disabled}\n handleClick={() => toggleList(format)}\n />\n );\n};\n\nconst LinkButton = ({ disabled }: { disabled: boolean }) => {\n const { editor } = useBlocksEditorContext('LinkButton');\n\n const isLinkActive = () => {\n const { selection } = editor;\n\n if (!selection) return false;\n\n const [match] = Array.from(\n Editor.nodes(editor, {\n at: Editor.unhangRange(editor, selection),\n match: (node) => SlateElement.isElement(node) && node.type === 'link',\n })\n );\n\n return Boolean(match);\n };\n\n const isLinkDisabled = () => {\n // Always disabled when the whole editor is disabled\n if (disabled) {\n return true;\n }\n\n // Always enabled when there's no selection\n if (!editor.selection) {\n return false;\n }\n\n // Get the block node closest to the anchor and focus\n const anchorNodeEntry = Editor.above(editor, {\n at: editor.selection.anchor,\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n const focusNodeEntry = Editor.above(editor, {\n at: editor.selection.focus,\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n\n if (!anchorNodeEntry || !focusNodeEntry) {\n return false;\n }\n\n // Disabled if the anchor and focus are not in the same block\n return anchorNodeEntry[0] !== focusNodeEntry[0];\n };\n\n const addLink = () => {\n editor.shouldSaveLinkPath = true;\n // We insert an empty anchor, so we split the DOM to have a element we can use as reference for the popover\n insertLink(editor, { url: '' });\n };\n\n return (\n <ToolbarButton\n icon={Link}\n name=\"link\"\n label={{\n id: 'components.Blocks.link',\n defaultMessage: 'Link',\n }}\n isActive={isLinkActive()}\n handleClick={addLink}\n disabled={isLinkDisabled()}\n />\n );\n};\n\nconst BlocksToolbar = () => {\n const { editor, blocks, modifiers, disabled } = useBlocksEditorContext('BlocksToolbar');\n\n /**\n * The modifier buttons are disabled when an image is selected.\n */\n const checkButtonDisabled = () => {\n // Always disabled when the whole editor is disabled\n if (disabled) {\n return true;\n }\n\n if (!editor.selection) {\n return false;\n }\n\n const selectedNode = editor.children[editor.selection.anchor.path[0]];\n\n if (['image', 'code'].includes(selectedNode.type)) {\n return true;\n }\n\n return false;\n };\n\n const isButtonDisabled = checkButtonDisabled();\n\n return (\n <Toolbar.Root aria-disabled={disabled} asChild>\n <ToolbarWrapper gap={2} padding={2}>\n <BlocksDropdown />\n <Separator />\n <Toolbar.ToggleGroup type=\"multiple\" asChild>\n <Flex gap={1}>\n {Object.entries(modifiers).map(([name, modifier]) => (\n <ToolbarButton\n key={name}\n name={name}\n icon={modifier.icon}\n label={modifier.label}\n isActive={modifier.checkIsActive(editor)}\n handleClick={() => modifier.handleToggle(editor)}\n disabled={isButtonDisabled}\n />\n ))}\n <LinkButton disabled={isButtonDisabled} />\n </Flex>\n </Toolbar.ToggleGroup>\n <Separator />\n <Toolbar.ToggleGroup type=\"single\" asChild>\n <Flex gap={1}>\n <ListButton block={blocks['list-unordered']} format=\"unordered\" />\n <ListButton block={blocks['list-ordered']} format=\"ordered\" />\n </Flex>\n </Toolbar.ToggleGroup>\n </ToolbarWrapper>\n </Toolbar.Root>\n );\n};\n\nexport { BlocksToolbar, useConversionModal };\n","import * as React from 'react';\n\nimport { Box, Flex, IconButton } from '@strapi/design-system';\nimport { Drag } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { Editor, Range, Transforms } from 'slate';\nimport { ReactEditor, type RenderElementProps, type RenderLeafProps, Editable } from 'slate-react';\nimport styled, { CSSProperties, css } from 'styled-components';\n\nimport { useDragAndDrop, DIRECTIONS } from '../../hooks/useDragAndDrop';\nimport { ItemTypes } from '../../utils/dragAndDrop';\nimport { composeRefs } from '../../utils/refs';\nimport { getTranslation } from '../../utils/translations';\n\nimport { type BlocksStore, useBlocksEditorContext } from './BlocksEditor';\nimport { useConversionModal } from './BlocksToolbar';\nimport { type ModifiersStore } from './Modifiers';\nimport { getEntries, isLinkNode, isListNode } from './utils/types';\n\nconst StyledEditable = styled(Editable)<{ isExpandedMode: boolean }>`\n // The outline style is set on the wrapper with :focus-within\n outline: none;\n display: flex;\n flex-direction: column;\n gap: ${({ theme }) => theme.spaces[3]};\n height: 100%;\n // For fullscreen align input in the center with fixed width\n width: ${(props) => (props.isExpandedMode ? '512px' : '100%')};\n margin: auto;\n\n > *:last-child {\n padding-bottom: ${({ theme }) => theme.spaces[3]};\n }\n`;\n\nconst Wrapper = styled(Box)<{ isOverDropTarget: boolean }>`\n position: ${({ isOverDropTarget }) => isOverDropTarget && 'relative'};\n`;\n\ntype DragDirection = (typeof DIRECTIONS)[keyof typeof DIRECTIONS];\n\nconst DropPlaceholder = styled(Box)<{\n dragDirection: DragDirection | null;\n placeholderMargin: 1 | 2;\n}>`\n position: absolute;\n right: 0;\n\n // Show drop placeholder 8px above or below the drop target\n ${({ dragDirection, theme, placeholderMargin }) => css`\n top: ${dragDirection === DIRECTIONS.UPWARD && `-${theme.spaces[placeholderMargin]}`};\n bottom: ${dragDirection === DIRECTIONS.DOWNWARD && `-${theme.spaces[placeholderMargin]}`};\n `}\n`;\n\nconst DragItem = styled(Flex)<{ dragVisibility: CSSProperties['visibility'] }>`\n // Style each block rendered using renderElement()\n & > [data-slate-node='element'] {\n width: 100%;\n opacity: inherit;\n }\n\n // Set the visibility of drag button\n [role='button'] {\n visibility: ${(props) => props.dragVisibility};\n opacity: inherit;\n }\n &[aria-disabled='true'] {\n user-drag: none;\n }\n`;\n\nconst DragIconButton = styled(IconButton)<{ dragHandleTopMargin?: CSSProperties['marginTop'] }>`\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: ${({ theme }) => theme.borderRadius};\n width: ${({ theme }) => theme.spaces[4]};\n height: ${({ theme }) => theme.spaces[6]};\n visibility: hidden;\n cursor: grab;\n opacity: inherit;\n margin-top: ${(props) => props.dragHandleTopMargin ?? 0};\n\n &:hover {\n background: ${({ theme }) => theme.colors.neutral200};\n }\n &:active {\n cursor: grabbing;\n }\n &[aria-disabled='true'] {\n cursor: not-allowed;\n background: transparent;\n }\n svg {\n height: auto;\n width: ${({ theme }) => theme.spaces[3]};\n\n path {\n fill: ${({ theme }) => theme.colors.neutral700};\n }\n }\n`;\n\ntype Direction = {\n setDragDirection: (direction: DragDirection) => void;\n dragDirection: DragDirection | null;\n};\n\ntype DragAndDropElementProps = Direction & {\n children: RenderElementProps['children'];\n index: Array<number>;\n dragHandleTopMargin?: CSSProperties['marginTop'];\n};\n\nconst DragAndDropElement = ({\n children,\n index,\n setDragDirection,\n dragDirection,\n dragHandleTopMargin,\n}: DragAndDropElementProps) => {\n const { editor, disabled, name, setLiveText } = useBlocksEditorContext('drag-and-drop');\n const { formatMessage } = useIntl();\n const [dragVisibility, setDragVisibility] = React.useState<CSSProperties['visibility']>('hidden');\n\n const handleMoveBlock = React.useCallback(\n (newIndex: Array<number>, currentIndex: Array<number>) => {\n Transforms.moveNodes(editor, {\n at: currentIndex,\n to: newIndex,\n });\n\n // Add 1 to the index for the live text message\n const currentIndexPosition = [currentIndex[0] + 1, ...currentIndex.slice(1)];\n const newIndexPosition = [newIndex[0] + 1, ...newIndex.slice(1)];\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('components.Blocks.dnd.reorder'),\n defaultMessage: '{item}, moved. New position in the editor: {position}.',\n },\n {\n item: `${name}.${currentIndexPosition.join(',')}`,\n position: `${newIndexPosition.join(',')} of ${editor.children.length}`,\n }\n )\n );\n },\n [editor, formatMessage, name, setLiveText]\n );\n\n const [{ handlerId, isDragging, isOverDropTarget, direction }, blockRef, dropRef, dragRef] =\n useDragAndDrop(!disabled, {\n type: `${ItemTypes.BLOCKS}_${name}`,\n index,\n item: {\n index,\n displayedValue: children,\n },\n onDropItem(currentIndex, newIndex) {\n if (newIndex) handleMoveBlock(newIndex, currentIndex);\n },\n });\n\n const composedBoxRefs = composeRefs(blockRef, dropRef);\n\n // Set Drag direction before loosing state while dragging\n React.useEffect(() => {\n if (direction) {\n setDragDirection(direction);\n }\n }, [direction, setDragDirection]);\n\n // On selection change hide drag handle\n React.useEffect(() => {\n setDragVisibility('hidden');\n }, [editor.selection]);\n\n return (\n <Wrapper ref={(ref) => composedBoxRefs(ref!)} isOverDropTarget={isOverDropTarget}>\n {isOverDropTarget && (\n <DropPlaceholder\n borderStyle=\"solid\"\n borderColor=\"secondary200\"\n borderWidth=\"2px\"\n width=\"calc(100% - 24px)\"\n marginLeft=\"auto\"\n dragDirection={dragDirection}\n // For list items placeholder reduce the margin around\n placeholderMargin={children.props.as && children.props.as === 'li' ? 1 : 2}\n />\n )}\n {isDragging ? (\n <CloneDragItem dragHandleTopMargin={dragHandleTopMargin}>{children}</CloneDragItem>\n ) : (\n <DragItem\n ref={dragRef}\n data-handler-id={handlerId}\n gap={2}\n paddingLeft={2}\n alignItems=\"start\"\n onDragStart={(event) => {\n const target = event.target as HTMLElement;\n const currentTarget = event.currentTarget as HTMLElement;\n\n // Dragging action should only trigger drag event when button is dragged, however update styles on the whole dragItem.\n if (target.getAttribute('role') !== 'button') {\n event.preventDefault();\n } else {\n // Setting styles using dragging state is not working, so set it on current target element as nodes get dragged\n currentTarget.style.opacity = '0.5';\n }\n }}\n onDragEnd={(event) => {\n const currentTarget = event.currentTarget as HTMLElement;\n currentTarget.style.opacity = '1';\n }}\n onMouseMove={() => setDragVisibility('visible')}\n onSelect={() => setDragVisibility('visible')}\n onMouseLeave={() => setDragVisibility('hidden')}\n aria-disabled={disabled}\n dragVisibility={dragVisibility}\n >\n <DragIconButton\n forwardedAs=\"div\"\n role=\"button\"\n tabIndex={0}\n aria-label={formatMessage({\n id: getTranslation('components.DragHandle-label'),\n defaultMessage: 'Drag',\n })}\n onClick={(e) => e.stopPropagation()}\n aria-disabled={disabled}\n disabled={disabled}\n draggable\n // For some blocks top margin added to drag handle to align at the text level\n dragHandleTopMargin={dragHandleTopMargin}\n >\n <Drag color=\"neutral600\" />\n </DragIconButton>\n {children}\n </DragItem>\n )}\n </Wrapper>\n );\n};\n\ninterface CloneDragItemProps {\n children: RenderElementProps['children'];\n dragHandleTopMargin?: CSSProperties['marginTop'];\n}\n\n// To prevent applying opacity to the original item being dragged, display a cloned element without opacity.\nconst CloneDragItem = ({ children, dragHandleTopMargin }: CloneDragItemProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <DragItem gap={2} paddingLeft={2} alignItems=\"start\" dragVisibility=\"visible\">\n <DragIconButton\n forwardedAs=\"div\"\n role=\"button\"\n aria-label={formatMessage({\n id: getTranslation('components.DragHandle-label'),\n defaultMessage: 'Drag',\n })}\n dragHandleTopMargin={dragHandleTopMargin}\n >\n <Drag color=\"neutral600\" />\n </DragIconButton>\n {children}\n </DragItem>\n );\n};\n\nconst baseRenderLeaf = (props: RenderLeafProps, modifiers: ModifiersStore) => {\n // Recursively wrap the children for each active modifier\n const wrappedChildren = getEntries(modifiers).reduce((currentChildren, modifierEntry) => {\n const [name, modifier] = modifierEntry;\n\n if (props.leaf[name]) {\n return modifier.renderLeaf(currentChildren);\n }\n\n return currentChildren;\n }, props.children);\n\n return <span {...props.attributes}>{wrappedChildren}</span>;\n};\n\ntype BaseRenderElementProps = Direction & {\n props: RenderElementProps['children'];\n blocks: BlocksStore;\n editor: Editor;\n};\n\nconst baseRenderElement = ({\n props,\n blocks,\n editor,\n setDragDirection,\n dragDirection,\n}: BaseRenderElementProps) => {\n const { element } = props;\n\n const blockMatch = Object.values(blocks).find((block) => block.matchNode(element));\n const block = blockMatch || blocks.paragraph;\n const nodePath = ReactEditor.findPath(editor, element);\n\n // Link is inline block so it cannot be dragged\n // List items and nested list blocks i.e. lists with indent level higher than 0 are skipped from dragged items\n if (\n isLinkNode(element) ||\n (isListNode(element) && element.indentLevel && element.indentLevel > 0) ||\n element.type === 'list-item'\n ) {\n return block.renderElement(props);\n }\n\n return (\n <DragAndDropElement\n index={nodePath}\n setDragDirection={setDragDirection}\n dragDirection={dragDirection}\n dragHandleTopMargin={block.dragHandleTopMargin}\n >\n {block.renderElement(props)}\n </DragAndDropElement>\n );\n};\n\ninterface BlocksContentProps {\n placeholder?: string;\n ariaLabelId: string;\n}\n\nconst BlocksContent = ({ placeholder, ariaLabelId }: BlocksContentProps) => {\n const { editor, disabled, blocks, modifiers, setLiveText, isExpandedMode } =\n useBlocksEditorContext('BlocksContent');\n const blocksRef = React.useRef<HTMLDivElement>(null);\n const { formatMessage } = useIntl();\n const [dragDirection, setDragDirection] = React.useState<DragDirection | null>(null);\n const { modalElement, handleConversionResult } = useConversionModal();\n\n // Create renderLeaf function based on the modifiers store\n const renderLeaf = React.useCallback(\n (props: RenderLeafProps) => baseRenderLeaf(props, modifiers),\n [modifiers]\n );\n\n const handleMoveBlocks = (editor: Editor, event: React.KeyboardEvent<HTMLElement>) => {\n if (!editor.selection) return;\n\n const start = Range.start(editor.selection);\n const currentIndex = [start.path[0]];\n let newIndexPosition = 0;\n\n if (event.key === 'ArrowUp') {\n newIndexPosition = currentIndex[0] > 0 ? currentIndex[0] - 1 : currentIndex[0];\n } else {\n newIndexPosition =\n currentIndex[0] < editor.children.length - 1 ? currentIndex[0] + 1 : currentIndex[0];\n }\n\n const newIndex = [newIndexPosition];\n\n if (newIndexPosition !== currentIndex[0]) {\n Transforms.moveNodes(editor, {\n at: currentIndex,\n to: newIndex,\n });\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('components.Blocks.dnd.reorder'),\n defaultMessage: '{item}, moved. New position in the editor: {position}.',\n },\n {\n item: `${name}.${currentIndex[0] + 1}`,\n position: `${newIndex[0] + 1} of ${editor.children.length}`,\n }\n )\n );\n\n event.preventDefault();\n }\n };\n\n // Create renderElement function base on the blocks store\n const renderElement = React.useCallback(\n (props: RenderElementProps) =>\n baseRenderElement({ props, blocks, editor, dragDirection, setDragDirection }),\n [blocks, editor, dragDirection, setDragDirection]\n );\n\n const checkSnippet = (event: React.KeyboardEvent<HTMLElement>) => {\n // Get current text block\n if (!editor.selection) {\n return;\n }\n\n const [textNode, textNodePath] = Editor.node(editor, editor.selection.anchor.path);\n\n // Narrow the type to a text node\n if (Editor.isEditor(textNode) || textNode.type !== 'text') {\n return;\n }\n\n // Don't check for snippets if we're not at the start of a block\n if (textNodePath.at(-1) !== 0) {\n return;\n }\n\n // Check if the text node starts with a known snippet\n const blockMatchingSnippet = Object.values(blocks).find((block) => {\n return block.snippets?.includes(textNode.text);\n });\n\n if (blockMatchingSnippet?.handleConvert) {\n // Prevent the space from being created and delete the snippet\n event.preventDefault();\n Transforms.delete(editor, {\n distance: textNode.text.length,\n unit: 'character',\n reverse: true,\n });\n\n // Convert the selected block\n const maybeRenderModal = blockMatchingSnippet.handleConvert(editor);\n handleConversionResult(maybeRenderModal);\n }\n };\n\n const handleEnter = (event: React.KeyboardEvent<HTMLElement>) => {\n if (!editor.selection) {\n return;\n }\n\n const selectedNode = editor.children[editor.selection.anchor.path[0]];\n const selectedBlock = Object.values(blocks).find((block) => block.matchNode(selectedNode));\n if (!selectedBlock) {\n return;\n }\n\n // Allow forced line breaks when shift is pressed\n if (event.shiftKey && selectedNode.type !== 'image') {\n Transforms.insertText(editor, '\\n');\n return;\n }\n\n // Check if there's an enter handler for the selected block\n if (selectedBlock.handleEnterKey) {\n selectedBlock.handleEnterKey(editor);\n } else {\n blocks.paragraph.handleEnterKey!(editor);\n }\n };\n\n const handleBackspaceEvent = (event: React.KeyboardEvent<HTMLElement>) => {\n if (!editor.selection) {\n return;\n }\n\n const selectedNode = editor.children[editor.selection.anchor.path[0]];\n const selectedBlock = Object.values(blocks).find((block) => block.matchNode(selectedNode));\n\n if (!selectedBlock) {\n return;\n }\n\n if (selectedBlock.handleBackspaceKey) {\n selectedBlock.handleBackspaceKey(editor, event);\n }\n };\n\n const handleTab = (event: React.KeyboardEvent<HTMLElement>) => {\n if (!editor.selection) {\n return;\n }\n\n const selectedNode = editor.children[editor.selection.anchor.path[0]];\n const selectedBlock = Object.values(blocks).find((block) => block.matchNode(selectedNode));\n if (!selectedBlock) {\n return;\n }\n\n if (selectedBlock.handleTab) {\n event.preventDefault();\n selectedBlock.handleTab(editor);\n }\n };\n\n const handleKeyboardShortcuts = (event: React.KeyboardEvent<HTMLElement>) => {\n const isCtrlOrCmd = event.metaKey || event.ctrlKey;\n\n if (isCtrlOrCmd) {\n // Check if there's a modifier to toggle\n Object.values(modifiers).forEach((value) => {\n if (value.isValidEventKey(event)) {\n value.handleToggle(editor);\n return;\n }\n });\n if (event.shiftKey && ['ArrowUp', 'ArrowDown'].includes(event.key)) {\n handleMoveBlocks(editor, event);\n }\n }\n };\n\n const handleKeyDown: React.KeyboardEventHandler<HTMLElement> = (event) => {\n // Find the right block-specific handlers for enter and backspace key presses\n switch (event.key) {\n case 'Enter':\n event.preventDefault();\n return handleEnter(event);\n case 'Backspace':\n return handleBackspaceEvent(event);\n case 'Tab':\n return handleTab(event);\n case 'Escape':\n return ReactEditor.blur(editor);\n }\n\n handleKeyboardShortcuts(event);\n\n // Check if a snippet was triggered\n if (event.key === ' ') {\n checkSnippet(event);\n }\n };\n\n /**\n * scrollSelectionIntoView : Slate's default method to scroll a DOM selection into the view,\n * thats shifting layout for us when there is a overflowY:scroll on the viewport.\n * We are overriding it to check if the selection is not fully within the visible area of the editor,\n * we use scrollBy one line to the bottom\n */\n const handleScrollSelectionIntoView = () => {\n if (!editor.selection) return;\n const domRange = ReactEditor.toDOMRange(editor, editor.selection);\n const domRect = domRange.getBoundingClientRect();\n const blocksInput = blocksRef.current;\n\n if (!blocksInput) {\n return;\n }\n\n const editorRect = blocksInput.getBoundingClientRect();\n\n // Check if the selection is not fully within the visible area of the editor\n if (domRect.top < editorRect.top || domRect.bottom > editorRect.bottom) {\n // Scroll by one line to the bottom\n blocksInput.scrollBy({\n top: 28, // 20px is the line-height + 8px line gap\n behavior: 'smooth',\n });\n }\n };\n\n return (\n <Box\n ref={blocksRef}\n grow={1}\n width=\"100%\"\n overflow=\"auto\"\n fontSize={2}\n background=\"neutral0\"\n color=\"neutral800\"\n lineHeight={6}\n paddingRight={4}\n paddingTop={6}\n paddingBottom={3}\n >\n <StyledEditable\n aria-labelledby={ariaLabelId}\n readOnly={disabled}\n placeholder={placeholder}\n isExpandedMode={isExpandedMode}\n renderElement={renderElement}\n renderLeaf={renderLeaf}\n onKeyDown={handleKeyDown}\n scrollSelectionIntoView={handleScrollSelectionIntoView}\n // As we have our own handler to drag and drop the elements returing true will skip slate's own event handler\n onDrop={() => {\n return true;\n }}\n onDragStart={() => {\n return true;\n }}\n />\n {modalElement}\n </Box>\n );\n};\n\nexport { BlocksContent, BlocksContentProps };\n","import * as React from 'react';\n\nimport { Box, Flex, FocusTrap, Portal, IconButton, InputWrapper } from '@strapi/design-system';\nimport { useLockScroll, pxToRem } from '@strapi/helper-plugin';\nimport { Collapse } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { getTranslation } from '../../utils/translations';\n\nimport { useBlocksEditorContext } from './BlocksEditor';\n\nconst CollapseIconButton = styled(IconButton)`\n position: absolute;\n bottom: ${pxToRem(12)};\n right: ${pxToRem(12)};\n`;\n\nconst ExpandWrapper = styled(Flex)`\n // Background with 20% opacity\n background: ${({ theme }) => `${theme.colors.neutral800}1F`};\n`;\n\ninterface EditorLayoutProps {\n children: React.ReactNode;\n error?: string;\n onCollapse: () => void;\n disabled: boolean;\n ariaDescriptionId: string;\n}\n\nconst EditorLayout = ({\n children,\n error,\n disabled,\n onCollapse,\n ariaDescriptionId,\n}: EditorLayoutProps) => {\n const { formatMessage } = useIntl();\n const { isExpandedMode } = useBlocksEditorContext('editorLayout');\n\n useLockScroll({ lockScroll: isExpandedMode });\n\n if (isExpandedMode) {\n return (\n <Portal role=\"dialog\" aria-modal={false}>\n <FocusTrap onEscape={onCollapse}>\n <ExpandWrapper\n position=\"fixed\"\n top={0}\n left={0}\n right={0}\n bottom={0}\n zIndex={4}\n justifyContent=\"center\"\n onClick={onCollapse}\n >\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"popupShadow\"\n overflow=\"hidden\"\n width=\"90%\"\n height=\"90%\"\n onClick={(e) => e.stopPropagation()}\n aria-describedby={ariaDescriptionId}\n position=\"relative\"\n >\n <Flex height=\"100%\" alignItems=\"flex-start\" direction=\"column\">\n {children}\n <CollapseIconButton\n aria-label={formatMessage({\n id: getTranslation('components.Blocks.collapse'),\n defaultMessage: 'Collapse',\n })}\n onClick={onCollapse}\n >\n <Collapse />\n </CollapseIconButton>\n </Flex>\n </Box>\n </ExpandWrapper>\n </FocusTrap>\n </Portal>\n );\n }\n\n return (\n <InputWrapper\n direction=\"column\"\n alignItems=\"flex-start\"\n height=\"512px\"\n disabled={disabled}\n hasError={Boolean(error)}\n style={{ overflow: 'hidden' }}\n aria-describedby={ariaDescriptionId}\n position=\"relative\"\n >\n {children}\n </InputWrapper>\n );\n};\n\nexport { EditorLayout };\n","import * as React from 'react';\n\nimport { Typography } from '@strapi/design-system';\nimport { Bold, Italic, Underline, StrikeThrough, Code } from '@strapi/icons';\nimport { type MessageDescriptor } from 'react-intl';\nimport { Editor, Text, Transforms } from 'slate';\nimport styled, { css } from 'styled-components';\n\nconst stylesToInherit = css`\n font-size: inherit;\n color: inherit;\n line-height: inherit;\n`;\n\nconst BoldText = styled(Typography).attrs({ fontWeight: 'bold' })`\n ${stylesToInherit}\n`;\n\nconst ItalicText = styled(Typography)`\n font-style: italic;\n ${stylesToInherit}\n`;\n\nconst UnderlineText = styled(Typography).attrs({ textDecoration: 'underline' })`\n ${stylesToInherit}\n`;\n\nconst StrikeThroughText = styled(Typography).attrs({ textDecoration: 'line-through' })`\n ${stylesToInherit}\n`;\n\nconst InlineCode = styled.code`\n background-color: ${({ theme }) => theme.colors.neutral150};\n border-radius: ${({ theme }) => theme.borderRadius};\n padding: ${({ theme }) => `0 ${theme.spaces[2]}`};\n font-family: 'SF Mono', SFMono-Regular, ui-monospace, 'DejaVu Sans Mono', Menlo, Consolas,\n monospace;\n color: inherit;\n`;\n\ntype ModifierKey = Exclude<keyof Text, 'type' | 'text'>;\n\ntype ModifiersStore = {\n [K in ModifierKey]: {\n icon: React.ComponentType;\n isValidEventKey: (event: React.KeyboardEvent<HTMLElement>) => boolean;\n label: MessageDescriptor;\n checkIsActive: (editor: Editor) => boolean;\n handleToggle: (editor: Editor) => void;\n renderLeaf: (children: React.JSX.Element | string) => React.JSX.Element;\n };\n};\n\n/**\n * The default handler for checking if a modifier is active\n */\nconst baseCheckIsActive = (editor: Editor, name: ModifierKey) => {\n const marks = Editor.marks(editor);\n if (!marks) return false;\n\n return Boolean(marks[name]);\n};\n\n/**\n * The default handler for toggling a modifier\n */\nconst baseHandleToggle = (editor: Editor, name: ModifierKey) => {\n const marks = Editor.marks(editor);\n\n // If there is no selection, set selection to the end of line\n if (!editor.selection) {\n const endOfEditor = Editor.end(editor, []);\n Transforms.select(editor, endOfEditor);\n }\n\n // Toggle the modifier\n if (marks?.[name]) {\n Editor.removeMark(editor, name);\n } else {\n Editor.addMark(editor, name, true);\n }\n};\n\nconst modifiers: ModifiersStore = {\n bold: {\n icon: Bold,\n isValidEventKey: (event) => event.key === 'b',\n label: { id: 'components.Blocks.modifiers.bold', defaultMessage: 'Bold' },\n checkIsActive: (editor) => baseCheckIsActive(editor, 'bold'),\n handleToggle: (editor) => baseHandleToggle(editor, 'bold'),\n renderLeaf: (children) => <BoldText>{children}</BoldText>,\n },\n italic: {\n icon: Italic,\n isValidEventKey: (event) => event.key === 'i',\n label: { id: 'components.Blocks.modifiers.italic', defaultMessage: 'Italic' },\n checkIsActive: (editor) => baseCheckIsActive(editor, 'italic'),\n handleToggle: (editor) => baseHandleToggle(editor, 'italic'),\n renderLeaf: (children) => <ItalicText>{children}</ItalicText>,\n },\n underline: {\n icon: Underline,\n isValidEventKey: (event) => event.key === 'u',\n label: { id: 'components.Blocks.modifiers.underline', defaultMessage: 'Underline' },\n checkIsActive: (editor) => baseCheckIsActive(editor, 'underline'),\n handleToggle: (editor) => baseHandleToggle(editor, 'underline'),\n renderLeaf: (children) => <UnderlineText>{children}</UnderlineText>,\n },\n strikethrough: {\n icon: StrikeThrough,\n isValidEventKey: (event) => event.key === 'S' && event.shiftKey,\n label: { id: 'components.Blocks.modifiers.strikethrough', defaultMessage: 'Strikethrough' },\n checkIsActive: (editor) => baseCheckIsActive(editor, 'strikethrough'),\n handleToggle: (editor) => baseHandleToggle(editor, 'strikethrough'),\n renderLeaf: (children) => <StrikeThroughText>{children}</StrikeThroughText>,\n },\n code: {\n icon: Code,\n isValidEventKey: (event) => event.key === 'e',\n label: { id: 'components.Blocks.modifiers.code', defaultMessage: 'Inline code' },\n checkIsActive: (editor) => baseCheckIsActive(editor, 'code'),\n handleToggle: (editor) => baseHandleToggle(editor, 'code'),\n renderLeaf: (children) => <InlineCode>{children}</InlineCode>,\n },\n};\n\nexport { type ModifiersStore, modifiers };\n","import { type Editor } from 'slate';\n\n/**\n * Images are void elements. They handle the rendering of their children instead of Slate.\n * See the Slate documentation for more information:\n * - https://docs.slatejs.org/api/nodes/element#void-vs-not-void\n * - https://docs.slatejs.org/api/nodes/element#rendering-void-elements\n */\nconst withImages = (editor: Editor) => {\n const { isVoid } = editor;\n\n editor.isVoid = (element) => {\n return element.type === 'image' ? true : isVoid(element);\n };\n\n return editor;\n};\n\nexport { withImages };\n","import { type BaseEditor, Path, Transforms, Range, Point, Editor } from 'slate';\n\nimport { insertLink } from '../utils/links';\n\ninterface LinkEditor extends BaseEditor {\n lastInsertedLinkPath: Path | null;\n shouldSaveLinkPath: boolean;\n}\n\nconst withLinks = (editor: Editor) => {\n const { isInline, apply, insertText, insertData } = editor;\n\n // Links are inline elements, so we need to override the isInline method for slate\n editor.isInline = (element) => {\n return element.type === 'link' ? true : isInline(element);\n };\n\n // We keep a track of the last inserted link path\n // So we can show the popover on the link component if that link is the last one inserted\n editor.lastInsertedLinkPath = null;\n\n // We intercept the apply method, so everytime we insert a new link, we save its path\n editor.apply = (operation) => {\n if (operation.type === 'insert_node') {\n if (\n !Editor.isEditor(operation.node) &&\n operation.node.type === 'link' &&\n editor.shouldSaveLinkPath\n ) {\n editor.lastInsertedLinkPath = operation.path;\n }\n } else if (operation.type === 'move_node') {\n // We need to update the last inserted link path when link is moved\n // If link is the first word in the paragraph we dont need to update the path\n if (\n Path.hasPrevious(operation.path) &&\n editor.lastInsertedLinkPath &&\n editor.shouldSaveLinkPath\n ) {\n editor.lastInsertedLinkPath = Path.transform(editor.lastInsertedLinkPath, operation);\n }\n }\n\n apply(operation);\n };\n\n editor.insertText = (text) => {\n // When selection is at the end of a link and user types a space, we want to break the link\n if (editor.selection && Range.isCollapsed(editor.selection) && text === ' ') {\n const linksInSelection = Array.from(\n Editor.nodes(editor, {\n at: editor.selection,\n match: (node) => !Editor.isEditor(node) && node.type === 'link',\n })\n );\n\n const selectionIsInLink = editor.selection && linksInSelection.length > 0;\n const selectionIsAtEndOfLink =\n selectionIsInLink &&\n Point.equals(editor.selection.anchor, Editor.end(editor, linksInSelection[0][1]));\n\n if (selectionIsAtEndOfLink) {\n Transforms.insertNodes(\n editor,\n { text: ' ', type: 'text' },\n { at: Path.next(linksInSelection[0][1]), select: true }\n );\n\n return;\n }\n }\n\n insertText(text);\n };\n\n // Add data as a clickable link if its a valid URL\n editor.insertData = (data) => {\n const pastedText = data.getData('text/plain');\n\n if (pastedText) {\n try {\n // eslint-disable-next-line no-new\n new URL(pastedText);\n // Do not show link popup on copy-paste a link, so do not save its path\n editor.shouldSaveLinkPath = false;\n insertLink(editor, { url: pastedText });\n return;\n } catch (error) {\n // continue normal data insertion\n }\n }\n\n insertData(data);\n };\n\n return editor;\n};\n\nexport { withLinks, type LinkEditor };\n","import { type Text, Node, Editor, Element, Transforms } from 'slate';\n\nconst isText = (node: unknown): node is Text => {\n return Node.isNode(node) && !Editor.isEditor(node) && node.type === 'text';\n};\n\n/**\n * This plugin is used to normalize the Slate document to match the Strapi schema.\n */\nconst withStrapiSchema = (editor: Editor) => {\n const { normalizeNode } = editor;\n\n /**\n * On the strapi schema, we want text nodes to have type: text\n * By default, Slate add text nodes without type: text\n * So we add this normalization for the cases when Slate add text nodes automatically\n */\n editor.normalizeNode = (entry) => {\n const [node, path] = entry;\n\n if (!Element.isElement(node) && !isText(node)) {\n Transforms.setNodes(editor, { type: 'text' }, { at: path });\n\n return;\n }\n\n normalizeNode(entry);\n };\n\n return editor;\n};\n\nexport { withStrapiSchema };\n","import * as React from 'react';\n\nimport { createContext } from '@radix-ui/react-context';\nimport { IconButton, Divider, VisuallyHidden } from '@strapi/design-system';\nimport { pxToRem } from '@strapi/helper-plugin';\nimport { Expand } from '@strapi/icons';\nimport { type Attribute } from '@strapi/types';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { Editor, type Descendant, createEditor } from 'slate';\nimport { withHistory } from 'slate-history';\nimport { type RenderElementProps, Slate, withReact, ReactEditor, useSlate } from 'slate-react';\nimport styled, { type CSSProperties } from 'styled-components';\n\nimport { getTranslation } from '../../utils/translations';\n\nimport { codeBlocks } from './Blocks/Code';\nimport { headingBlocks } from './Blocks/Heading';\nimport { imageBlocks } from './Blocks/Image';\nimport { linkBlocks } from './Blocks/Link';\nimport { listBlocks } from './Blocks/List';\nimport { paragraphBlocks } from './Blocks/Paragraph';\nimport { quoteBlocks } from './Blocks/Quote';\nimport { BlocksContent, type BlocksContentProps } from './BlocksContent';\nimport { BlocksToolbar } from './BlocksToolbar';\nimport { EditorLayout } from './EditorLayout';\nimport { type ModifiersStore, modifiers } from './Modifiers';\nimport { withImages } from './plugins/withImages';\nimport { withLinks } from './plugins/withLinks';\nimport { withStrapiSchema } from './plugins/withStrapiSchema';\n\n/* -------------------------------------------------------------------------------------------------\n * BlocksEditorProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface BaseBlock {\n renderElement: (props: RenderElementProps) => React.JSX.Element;\n matchNode: (node: Attribute.BlocksNode) => boolean;\n handleConvert?: (editor: Editor) => void | (() => React.JSX.Element);\n handleEnterKey?: (editor: Editor) => void;\n handleBackspaceKey?: (editor: Editor, event: React.KeyboardEvent<HTMLElement>) => void;\n handleTab?: (editor: Editor) => void;\n snippets?: string[];\n dragHandleTopMargin?: CSSProperties['marginTop'];\n}\n\ninterface NonSelectorBlock extends BaseBlock {\n isInBlocksSelector: false;\n}\n\ninterface SelectorBlock extends BaseBlock {\n isInBlocksSelector: true;\n icon: React.ComponentType;\n label: MessageDescriptor;\n}\n\ntype NonSelectorBlockKey = 'list-item' | 'link';\n\nconst selectorBlockKeys = [\n 'paragraph',\n 'heading-one',\n 'heading-two',\n 'heading-three',\n 'heading-four',\n 'heading-five',\n 'heading-six',\n 'list-ordered',\n 'list-unordered',\n 'image',\n 'quote',\n 'code',\n] as const;\n\ntype SelectorBlockKey = (typeof selectorBlockKeys)[number];\n\nconst isSelectorBlockKey = (key: unknown): key is SelectorBlockKey => {\n return typeof key === 'string' && selectorBlockKeys.includes(key as SelectorBlockKey);\n};\n\ntype BlocksStore = {\n [K in SelectorBlockKey]: SelectorBlock;\n} & {\n [K in NonSelectorBlockKey]: NonSelectorBlock;\n};\n\ninterface BlocksEditorContextValue {\n blocks: BlocksStore;\n modifiers: ModifiersStore;\n disabled: boolean;\n name: string;\n setLiveText: (text: string) => void;\n isExpandedMode: boolean;\n}\n\nconst [BlocksEditorProvider, usePartialBlocksEditorContext] =\n createContext<BlocksEditorContextValue>('BlocksEditor');\n\nfunction useBlocksEditorContext(\n consumerName: string\n): BlocksEditorContextValue & { editor: Editor } {\n const context = usePartialBlocksEditorContext(consumerName);\n const editor = useSlate();\n\n return {\n ...context,\n editor,\n };\n}\n\n/* -------------------------------------------------------------------------------------------------\n * BlocksEditor\n * -----------------------------------------------------------------------------------------------*/\n\nconst EditorDivider = styled(Divider)`\n background: ${({ theme }) => theme.colors.neutral200};\n`;\n\nconst ExpandIconButton = styled(IconButton)`\n position: absolute;\n bottom: ${pxToRem(12)};\n right: ${pxToRem(12)};\n`;\n\n/**\n * Forces an update of the Slate editor when the value prop changes from outside of Slate.\n * The root cause is that Slate is not a controlled component: https://github.com/ianstormtaylor/slate/issues/4612\n * Why not use JSON.stringify(value) as the key?\n * Because it would force a rerender of the entire editor every time the user types a character.\n * Why not use the entity id as the key, since it's unique for each locale?\n * Because it would not solve the problem when using the \"fill in from other locale\" feature\n */\nfunction useResetKey(value?: Attribute.BlocksValue): {\n key: number;\n incrementSlateUpdatesCount: () => void;\n} {\n // Keep track how how many times Slate detected a change from a user interaction in the editor\n const slateUpdatesCount = React.useRef(0);\n // Keep track of how many times the value prop was updated, whether from within editor or from outside\n const valueUpdatesCount = React.useRef(0);\n // Use a key to force a rerender of the Slate editor when needed\n const [key, setKey] = React.useState(0);\n\n React.useEffect(() => {\n valueUpdatesCount.current += 1;\n\n // If the 2 refs are not equal, it means the value was updated from outside\n if (valueUpdatesCount.current !== slateUpdatesCount.current) {\n // So we change the key to force a rerender of the Slate editor,\n // which will pick up the new value through its initialValue prop\n setKey((previousKey) => previousKey + 1);\n\n // Then bring the 2 refs back in sync\n slateUpdatesCount.current = valueUpdatesCount.current;\n }\n }, [value]);\n\n return { key, incrementSlateUpdatesCount: () => (slateUpdatesCount.current += 1) };\n}\n\nconst pipe =\n (...fns: ((baseEditor: Editor) => Editor)[]) =>\n (value: Editor) =>\n fns.reduce<Editor>((prev, fn) => fn(prev), value);\n\ninterface BlocksEditorProps extends BlocksContentProps {\n name: string;\n onChange: (event: {\n target: { name: string; value: Attribute.BlocksValue; type: 'blocks' };\n }) => void;\n disabled?: boolean;\n value?: Attribute.BlocksValue;\n error?: string;\n}\n\nconst BlocksEditor = React.forwardRef<{ focus: () => void }, BlocksEditorProps>(\n ({ disabled = false, name, onChange, value, error, ...contentProps }, forwardedRef) => {\n const { formatMessage } = useIntl();\n const [editor] = React.useState(() =>\n pipe(withHistory, withImages, withStrapiSchema, withReact, withLinks)(createEditor())\n );\n const [liveText, setLiveText] = React.useState('');\n const ariaDescriptionId = React.useId();\n const [isExpandedMode, setIsExpandedMode] = React.useState(false);\n\n const handleToggleExpand = () => {\n setIsExpandedMode((prev) => !prev);\n };\n\n /**\n * Editable is not able to hold the ref, https://github.com/ianstormtaylor/slate/issues/4082\n * so with \"useImperativeHandle\" we can use ReactEditor methods to expose to the parent above\n * also not passing forwarded ref here, gives console warning.\n */\n React.useImperativeHandle(\n forwardedRef,\n () => ({\n focus() {\n ReactEditor.focus(editor);\n },\n }),\n [editor]\n );\n\n const { key, incrementSlateUpdatesCount } = useResetKey(value);\n\n const handleSlateChange = (state: Descendant[]) => {\n const isAstChange = editor.operations.some((op) => op.type !== 'set_selection');\n\n if (isAstChange) {\n incrementSlateUpdatesCount();\n\n onChange({\n // Casting is needed because Slate's onChange type doesn't take into consideration\n // that we set Editor['children'] to Attribute.BlocksValue in custom.d.ts\n target: { name, value: state as Attribute.BlocksValue, type: 'blocks' },\n });\n }\n };\n\n const blocks: BlocksStore = {\n ...paragraphBlocks,\n ...headingBlocks,\n ...listBlocks,\n ...linkBlocks,\n ...imageBlocks,\n ...quoteBlocks,\n ...codeBlocks,\n };\n\n return (\n <>\n <VisuallyHidden id={ariaDescriptionId}>\n {formatMessage({\n id: getTranslation('components.Blocks.dnd.instruction'),\n defaultMessage: `To reorder blocks, press Command or Control along with Shift and the Up or Down arrow keys`,\n })}\n </VisuallyHidden>\n <VisuallyHidden aria-live=\"assertive\">{liveText}</VisuallyHidden>\n <Slate\n editor={editor}\n initialValue={value || [{ type: 'paragraph', children: [{ type: 'text', text: '' }] }]}\n onChange={handleSlateChange}\n key={key}\n >\n <BlocksEditorProvider\n blocks={blocks}\n modifiers={modifiers}\n disabled={disabled}\n name={name}\n setLiveText={setLiveText}\n isExpandedMode={isExpandedMode}\n >\n <EditorLayout\n error={error}\n disabled={disabled}\n onCollapse={handleToggleExpand}\n ariaDescriptionId={ariaDescriptionId}\n >\n <BlocksToolbar />\n <EditorDivider width=\"100%\" />\n <BlocksContent {...contentProps} />\n {!isExpandedMode && (\n <ExpandIconButton\n aria-label={formatMessage({\n id: getTranslation('components.Blocks.expand'),\n defaultMessage: 'Expand',\n })}\n onClick={handleToggleExpand}\n >\n <Expand />\n </ExpandIconButton>\n )}\n </EditorLayout>\n </BlocksEditorProvider>\n </Slate>\n </>\n );\n }\n);\n\nexport {\n type BlocksStore,\n type SelectorBlockKey,\n BlocksEditor,\n BlocksEditorProvider,\n useBlocksEditorContext,\n isSelectorBlockKey,\n};\n","import * as React from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { type MessageDescriptor, useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { Hint, HintProps } from '../Hint';\n\nimport { BlocksEditor } from './BlocksEditor';\n\nconst LabelAction = styled(Box)`\n svg path {\n fill: ${({ theme }) => theme.colors.neutral500};\n }\n`;\n\ninterface BlocksInputProps\n extends Omit<React.ComponentPropsWithoutRef<typeof BlocksEditor>, 'placeholder'>,\n Pick<HintProps, 'hint'> {\n intlLabel: MessageDescriptor;\n attribute: { type: string; [key: string]: unknown };\n placeholder?: MessageDescriptor;\n description?: MessageDescriptor;\n labelAction?: React.ReactNode;\n required?: boolean;\n}\n\nconst BlocksInput = React.forwardRef<{ focus: () => void }, BlocksInputProps>(\n (\n {\n intlLabel,\n labelAction,\n name,\n required = false,\n error = '',\n hint,\n placeholder,\n ...editorProps\n },\n forwardedRef\n ) => {\n const { formatMessage } = useIntl();\n const uniqueId = React.useId();\n const label = intlLabel.id ? formatMessage(intlLabel) : name;\n const formattedPlaceholder =\n placeholder &&\n formatMessage({ id: placeholder.id, defaultMessage: placeholder.defaultMessage });\n\n return (\n <>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n <Flex gap={1}>\n <Typography\n variant=\"pi\"\n fontWeight=\"bold\"\n textColor=\"neutral800\"\n as=\"label\"\n id={uniqueId}\n >\n {label}\n {required && (\n <Typography textColor=\"danger600\" lineHeight=\"0px\">\n *\n </Typography>\n )}\n </Typography>\n {labelAction && <LabelAction paddingLeft={1}>{labelAction}</LabelAction>}\n </Flex>\n <BlocksEditor\n name={name}\n error={error}\n ref={forwardedRef}\n {...editorProps}\n ariaLabelId={uniqueId}\n placeholder={formattedPlaceholder}\n />\n <Hint hint={hint} name={name} error={error} />\n </Flex>\n {error && (\n <Box paddingTop={1}>\n <Typography variant=\"pi\" textColor=\"danger600\" data-strapi-field-error>\n {error}\n </Typography>\n </Box>\n )}\n </>\n );\n }\n);\n\nexport { BlocksInput };\n","import * as React from 'react';\n\nexport function useDebounce<TValue>(value: TValue, delay: number): TValue {\n const [debouncedValue, setDebouncedValue] = React.useState(value);\n\n React.useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n return () => {\n clearTimeout(handler);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}\n","import * as React from 'react';\n\nimport { FieldAction, Flex, TextInput, TextInputProps, Typography } from '@strapi/design-system';\nimport {\n CMEditViewDataManagerContextValue,\n TranslationMessage,\n useAPIErrorHandler,\n useCMEditViewDataManager,\n useFetchClient,\n useNotification,\n} from '@strapi/helper-plugin';\nimport { CheckCircle, ExclamationMarkCircle, Loader, Refresh } from '@strapi/icons';\nimport { Contracts } from '@strapi/plugin-content-manager/_internal/shared';\nimport { AxiosError, AxiosResponse } from 'axios';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQuery } from 'react-query';\nimport styled, { keyframes } from 'styled-components';\n\nimport { useDebounce } from '../../hooks/useDebounce';\n\n/* -------------------------------------------------------------------------------------------------\n * InputUID\n * -----------------------------------------------------------------------------------------------*/\n\nconst UID_REGEX = /^[A-Za-z0-9-_.~]*$/;\n\ninterface InputUIDProps\n extends Pick<TextInputProps, 'disabled' | 'error' | 'hint' | 'labelAction' | 'required'>,\n Required<Pick<CMEditViewDataManagerContextValue, 'onChange'>> {\n contentTypeUID: string;\n intlLabel: TranslationMessage;\n name: string;\n placeholder?: TranslationMessage;\n value: string;\n}\n\nconst InputUID = React.forwardRef<\n {\n inputWrapperRef: React.MutableRefObject<HTMLDivElement>;\n input: React.MutableRefObject<HTMLInputElement>;\n },\n InputUIDProps\n>(\n (\n {\n contentTypeUID,\n hint,\n disabled,\n error,\n intlLabel,\n labelAction,\n name,\n onChange,\n value = '',\n placeholder,\n required,\n },\n forwardedRef\n ) => {\n const [availability, setAvailability] =\n React.useState<Contracts.UID.CheckUIDAvailability.Response>();\n const [showRegenerate, setShowRegenerate] = React.useState(false);\n const debouncedValue = useDebounce(value, 300);\n const { modifiedData, initialData } = useCMEditViewDataManager();\n const toggleNotification = useNotification();\n const { formatAPIError } = useAPIErrorHandler();\n const { formatMessage } = useIntl();\n const { post } = useFetchClient();\n\n const label = intlLabel.id\n ? formatMessage(\n { id: intlLabel.id, defaultMessage: intlLabel.defaultMessage },\n { ...intlLabel.values }\n )\n : name;\n\n const formattedPlaceholder = placeholder\n ? formatMessage(\n { id: placeholder.id, defaultMessage: placeholder.defaultMessage },\n { ...placeholder.values }\n )\n : '';\n\n const { data: defaultGeneratedUID, isLoading: isGeneratingDefaultUID } = useQuery({\n queryKey: ['uid', { contentTypeUID, field: name, data: modifiedData }] as const,\n async queryFn({ queryKey }) {\n const [, body] = queryKey;\n\n const {\n data: { data },\n } = await post<\n Contracts.UID.GenerateUID.Response,\n AxiosResponse<Contracts.UID.GenerateUID.Response>,\n Contracts.UID.GenerateUID.Request['body']\n // @ts-expect-error – TODO: fix this\n >('/content-manager/uid/generate', body);\n\n return data;\n },\n onError(err) {\n if (err instanceof AxiosError) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(err),\n });\n }\n },\n enabled: !value && required,\n });\n\n /**\n * If the defaultGeneratedUID is available, then we set it as the value,\n * but we also want to set it as the initialValue too.\n */\n React.useEffect(() => {\n if (defaultGeneratedUID) {\n onChange({ target: { name, value: defaultGeneratedUID, type: 'text' } }, true);\n }\n }, [defaultGeneratedUID, name, onChange]);\n\n const { mutate: generateUID, isLoading: isGeneratingUID } = useMutation<\n Contracts.UID.GenerateUID.Response['data'],\n Contracts.UID.GenerateUID.Response['error'],\n Contracts.UID.GenerateUID.Request['body']\n >({\n async mutationFn(body) {\n const {\n data: { data },\n } = await post<\n Contracts.UID.GenerateUID.Response,\n AxiosResponse<Contracts.UID.GenerateUID.Response>,\n Contracts.UID.GenerateUID.Request['body']\n >('/content-manager/uid/generate', body);\n\n return data;\n },\n onSuccess(data) {\n onChange({ target: { name, value: data, type: 'text' } });\n },\n onError(err) {\n if (err instanceof AxiosError) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(err),\n });\n }\n },\n });\n\n const { data: availabilityData, isLoading: isCheckingAvailability } = useQuery({\n queryKey: [\n 'uid',\n { contentTypeUID, field: name, value: debouncedValue ? debouncedValue.trim() : '' },\n ] as const,\n async queryFn({ queryKey }) {\n const [, body] = queryKey;\n\n const { data } = await post<\n Contracts.UID.CheckUIDAvailability.Response,\n AxiosResponse<Contracts.UID.CheckUIDAvailability.Response>,\n Contracts.UID.CheckUIDAvailability.Request['body']\n >('/content-manager/uid/check-availability', body);\n\n return data;\n },\n enabled: Boolean(\n debouncedValue !== initialData[name] &&\n debouncedValue &&\n UID_REGEX.test(debouncedValue.trim())\n ),\n onError(err) {\n if (err instanceof AxiosError) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(err),\n });\n }\n },\n });\n\n React.useEffect(() => {\n /**\n * always store the data in state because that way as seen below\n * we can then remove the data to stop showing the label.\n */\n setAvailability(availabilityData);\n\n let timer: number;\n\n if (availabilityData?.isAvailable) {\n timer = window.setTimeout(() => {\n setAvailability(undefined);\n }, 4000);\n }\n\n return () => {\n if (timer) {\n clearTimeout(timer);\n }\n };\n }, [availabilityData]);\n\n const isLoading = isGeneratingDefaultUID || isGeneratingUID || isCheckingAvailability;\n\n return (\n <TextInput\n ref={forwardedRef}\n disabled={disabled}\n error={error}\n endAction={\n <Flex position=\"relative\" gap={1}>\n {availability && !showRegenerate && (\n <TextValidation\n alignItems=\"center\"\n gap={1}\n justifyContent=\"flex-end\"\n available={!!availability?.isAvailable}\n data-not-here-outer\n position=\"absolute\"\n pointerEvents=\"none\"\n right={6}\n width=\"100px\"\n >\n {availability?.isAvailable ? <CheckCircle /> : <ExclamationMarkCircle />}\n\n <Typography\n textColor={availability.isAvailable ? 'success600' : 'danger600'}\n variant=\"pi\"\n >\n {formatMessage(\n availability.isAvailable\n ? {\n id: 'content-manager.components.uid.available',\n defaultMessage: 'Available',\n }\n : {\n id: 'content-manager.components.uid.unavailable',\n defaultMessage: 'Unavailable',\n }\n )}\n </Typography>\n </TextValidation>\n )}\n\n {!disabled && (\n <>\n {showRegenerate && (\n <TextValidation alignItems=\"center\" justifyContent=\"flex-end\" gap={1}>\n <Typography textColor=\"primary600\" variant=\"pi\">\n {formatMessage({\n id: 'content-manager.components.uid.regenerate',\n defaultMessage: 'Regenerate',\n })}\n </Typography>\n </TextValidation>\n )}\n\n <FieldActionWrapper\n // @ts-expect-error – TODO: fix this\n onClick={() => generateUID({ contentTypeUID, field: name, data: modifiedData })}\n label={formatMessage({\n id: 'content-manager.components.uid.regenerate',\n defaultMessage: 'Regenerate',\n })}\n onMouseEnter={() => setShowRegenerate(true)}\n onMouseLeave={() => setShowRegenerate(false)}\n >\n {isLoading ? (\n <LoadingWrapper data-testid=\"loading-wrapper\">\n <Loader />\n </LoadingWrapper>\n ) : (\n <Refresh />\n )}\n </FieldActionWrapper>\n </>\n )}\n </Flex>\n }\n hint={hint}\n label={label}\n labelAction={labelAction}\n name={name}\n onChange={onChange}\n placeholder={formattedPlaceholder}\n value={value}\n required={required}\n />\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * FieldActionWrapper\n * -----------------------------------------------------------------------------------------------*/\n\nconst FieldActionWrapper = styled(FieldAction)`\n svg {\n height: 1rem;\n width: 1rem;\n path {\n fill: ${({ theme }) => theme.colors.neutral400};\n }\n }\n\n svg:hover {\n path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * TextValidation\n * -----------------------------------------------------------------------------------------------*/\n\nconst TextValidation = styled(Flex)<{ available?: boolean }>`\n svg {\n height: ${12 / 16}rem;\n width: ${12 / 16}rem;\n\n path {\n fill: ${({ theme, available }) =>\n available ? theme.colors.success600 : theme.colors.danger600};\n }\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * LoadingWrapper\n * -----------------------------------------------------------------------------------------------*/\n\nconst rotation = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(359deg);\n }\n`;\n\nconst LoadingWrapper = styled(Flex)`\n animation: ${rotation} 2s infinite linear;\n`;\n\nexport { InputUID };\nexport type { InputUIDProps };\n","import { getLanguage, highlight, highlightAuto } from 'highlight.js';\nimport Markdown from 'markdown-it';\n// @ts-expect-error - library does not export types\nimport abbr from 'markdown-it-abbr';\nimport container from 'markdown-it-container';\n// @ts-expect-error - library does not export types\nimport deflist from 'markdown-it-deflist';\nimport emoji from 'markdown-it-emoji';\nimport footnote from 'markdown-it-footnote';\n// @ts-expect-error - library does not export types\nimport ins from 'markdown-it-ins';\n// @ts-expect-error - library does not export types\nimport mark from 'markdown-it-mark';\n// @ts-expect-error - library does not export types\nimport sub from 'markdown-it-sub';\n// @ts-expect-error - library does not export types\nimport sup from 'markdown-it-sup';\n\nimport 'highlight.js/styles/solarized-dark.css';\n\nconst md: Markdown = new Markdown({\n html: true, // Enable HTML tags in source\n xhtmlOut: false,\n breaks: true,\n langPrefix: 'language-',\n linkify: true,\n typographer: true,\n // Code from: https://github.com/markdown-it/markdown-it/blob/master/support/demo_template/index.js#L83\n highlight(str, lang) {\n if (lang && lang !== 'auto' && getLanguage(lang)) {\n return (\n '<pre class=\"hljs language-' +\n md.utils.escapeHtml(lang.toLowerCase()) +\n '\"><code>' +\n highlight(lang, str, true).value +\n '</code></pre>'\n );\n }\n\n if (lang === 'auto') {\n const result = highlightAuto(str);\n\n return (\n '<pre class=\"hljs language-' +\n md.utils.escapeHtml(result.language!) +\n '\"><code>' +\n result.value +\n '</code></pre>'\n );\n }\n\n return '<pre class=\"hljs\"><code>' + md.utils.escapeHtml(str) + '</code></pre>';\n },\n})\n .use(abbr)\n .use(container, 'warning')\n .use(container, 'tip')\n .use(deflist)\n .use(emoji)\n .use(footnote)\n .use(ins)\n .use(mark)\n .use(sub)\n .use(sup);\n\n// Code from: https://github.com/markdown-it/markdown-it-footnote/blob/master/index.js#L29\nmd.renderer.rules.footnote_ref = (tokens, idx, options, env, slf) => {\n const caption = slf.rules.footnote_caption?.(tokens, idx, options, env, slf);\n\n return '<sup class=\"footnote-ref\"><span>' + caption + '</span></sup>';\n};\n\nmd.renderer.rules.footnote_anchor = () => {\n /* ↩ with escape code to prevent display as Apple Emoji on iOS */\n return ' <span class=\"footnote-backref\">\\u21a9\\uFE0E</span>';\n};\n\nexport { md };\n","import * as React from 'react';\n\nimport sanitizeHtml from 'sanitize-html';\nimport styled from 'styled-components';\n\nimport { md } from './utils/mdRenderer';\n\ninterface PreviewWysiwygProps {\n data?: string;\n}\n\nconst PreviewWysiwyg = ({ data = '' }: PreviewWysiwygProps) => {\n const html = React.useMemo(\n () =>\n sanitizeHtml(md.render(data.replaceAll('\\\\n', '\\n') || ''), {\n ...sanitizeHtml.defaults,\n allowedTags: false,\n allowedAttributes: {\n '*': ['href', 'align', 'alt', 'center', 'width', 'height', 'type', 'controls', 'target'],\n img: ['src', 'alt'],\n source: ['src', 'type'],\n },\n }),\n [data]\n );\n\n return (\n <Wrapper>\n <div dangerouslySetInnerHTML={{ __html: html }} />\n </Wrapper>\n );\n};\n\nconst Wrapper = styled.div`\n position: absolute;\n top: 0;\n width: 100%;\n height: 100%;\n overflow: auto;\n padding: ${({ theme }) => `${theme.spaces[3]} ${theme.spaces[4]}`};\n font-size: ${14 / 16}rem;\n background-color: ${({ theme }) => theme.colors.neutral0};\n color: ${({ theme }) => theme.colors.neutral800};\n line-height: ${({ theme }) => theme.lineHeights[6]};\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n margin-block-start: ${({ theme }) => theme.spaces[2]};\n margin-block-end: ${({ theme }) => theme.spaces[2]};\n }\n\n p {\n margin-bottom: ${({ theme }) => theme.spaces[2]};\n }\n\n h1 {\n font-size: ${36 / 16}rem;\n font-weight: 600;\n }\n\n h2 {\n font-size: ${30 / 16}rem;\n font-weight: 500;\n }\n\n h3 {\n font-size: ${24 / 16}rem;\n font-weight: 500;\n }\n\n h4 {\n font-size: ${20 / 16}rem;\n font-weight: 500;\n }\n\n strong {\n font-weight: 800;\n }\n\n em {\n font-style: italic;\n }\n\n blockquote {\n margin-top: ${({ theme }) => theme.spaces[8]};\n margin-bottom: ${({ theme }) => theme.spaces[7]};\n font-size: ${14 / 16}rem;\n font-weight: 400;\n border-left: 4px solid ${({ theme }) => theme.colors.neutral150};\n font-style: italic;\n padding: ${({ theme }) => theme.spaces[2]} ${({ theme }) => theme.spaces[5]};\n }\n\n img {\n max-width: 100%;\n }\n\n table {\n thead {\n background: ${({ theme }) => theme.colors.neutral150};\n\n th {\n padding: ${({ theme }) => theme.spaces[4]};\n }\n }\n tr {\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n }\n th,\n td {\n padding: ${({ theme }) => theme.spaces[4]};\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-bottom: 0;\n border-top: 0;\n }\n }\n\n pre,\n code {\n font-size: ${14 / 16}rem;\n border-radius: 4px;\n /* \n Hard coded since the color is the same between themes,\n theme.colors.neutral800 changes between themes.\n\n Matches the color of the JSON Input component.\n */\n background-color: #32324d;\n max-width: 100%;\n overflow: auto;\n padding: ${({ theme }) => theme.spaces[2]};\n }\n\n /* Inline code */\n p,\n pre,\n td {\n > code {\n color: #839496;\n }\n }\n\n ol {\n list-style-type: decimal;\n margin-block-start: ${({ theme }) => theme.spaces[4]};\n margin-block-end: ${({ theme }) => theme.spaces[4]};\n margin-inline-start: 0px;\n margin-inline-end: 0px;\n padding-inline-start: ${({ theme }) => theme.spaces[4]};\n\n ol,\n ul {\n margin-block-start: 0px;\n margin-block-end: 0px;\n }\n }\n\n ul {\n list-style-type: disc;\n margin-block-start: ${({ theme }) => theme.spaces[4]};\n margin-block-end: ${({ theme }) => theme.spaces[4]};\n margin-inline-start: 0px;\n margin-inline-end: 0px;\n padding-inline-start: ${({ theme }) => theme.spaces[4]};\n\n ul,\n ol {\n margin-block-start: 0px;\n margin-block-end: 0px;\n }\n }\n`;\n\nexport { PreviewWysiwyg };\n","import CodeMirror from 'codemirror5';\n\n// Disabling eslint on purpose\n/* eslint-disable */\n\nvar listRE = /^(\\s*)(>[> ]*|[*+-] \\[[x ]\\]\\s|[*+-]\\s|(\\d+)([.)]))(\\s*)/,\n emptyListRE = /^(\\s*)(>[> ]*|[*+-] \\[[x ]\\]|[*+-]|(\\d+)[.)])(\\s*)$/,\n unorderedListRE = /[*+-]\\s/;\n\n/*\n functions coming from CodeMirror addons continuelist.js\n ===> https://github.com/codemirror/CodeMirror/blob/master/addon/edit/continuelist.js\n\n we imported it because the way the addon ask to use markdown mode\n since we have our own markdown preview system we couldn't use it directly\n only thing we changed is removing the part that enabled addon only with markdown mode\n*/\n\nfunction newlineAndIndentContinueMarkdownList(cm: CodeMirror.Editor) {\n // @ts-expect-error - cm does not recognize disableInput.\n if (cm.getOption('disableInput')) return CodeMirror.Pass;\n var ranges = cm.listSelections(),\n replacements = [];\n for (var i = 0; i < ranges.length; i++) {\n var pos = ranges[i].head;\n\n var eolState = cm.getStateAfter(pos.line);\n var inList = eolState.list !== false;\n var inQuote = eolState.quote !== 0;\n\n var line = cm.getLine(pos.line),\n match = listRE.exec(line);\n var cursorBeforeBullet = /^\\s*$/.test(line.slice(0, pos.ch));\n if (!ranges[i].empty() || (!inList && !inQuote) || !match || cursorBeforeBullet) {\n cm.execCommand('newlineAndIndent');\n return;\n }\n if (emptyListRE.test(line)) {\n var endOfQuote = inQuote && />\\s*$/.test(line);\n var endOfList = !/>\\s*$/.test(line);\n if (endOfQuote || endOfList)\n cm.replaceRange(\n '',\n {\n line: pos.line,\n ch: 0,\n },\n {\n line: pos.line,\n ch: pos.ch + 1,\n }\n );\n replacements[i] = '\\n';\n } else {\n var indent = match[1],\n after = match[5];\n var numbered = !(unorderedListRE.test(match[2]) || match[2].indexOf('>') >= 0);\n var bullet = numbered ? parseInt(match[3], 10) + 1 + match[4] : match[2].replace('x', ' ');\n replacements[i] = '\\n' + indent + bullet + after;\n\n if (numbered) incrementRemainingMarkdownListNumbers(cm, pos);\n }\n }\n\n cm.replaceSelections(replacements);\n}\n\nfunction incrementRemainingMarkdownListNumbers(cm: CodeMirror.Editor, pos: CodeMirror.Position) {\n var startLine = pos.line,\n lookAhead = 0,\n skipCount = 0;\n var startItem = listRE.exec(cm.getLine(startLine)),\n startIndent = startItem![1];\n\n do {\n lookAhead += 1;\n var nextLineNumber = startLine + lookAhead;\n var nextLine = cm.getLine(nextLineNumber);\n var nextItem = listRE.exec(nextLine);\n\n if (nextItem) {\n var nextIndent = nextItem[1];\n var newNumber = parseInt(startItem![3], 10) + lookAhead - skipCount;\n var nextNumber = parseInt(nextItem[3], 10),\n itemNumber = nextNumber;\n\n if (startIndent === nextIndent && !isNaN(nextNumber)) {\n if (newNumber === nextNumber) itemNumber = nextNumber + 1;\n if (newNumber > nextNumber) itemNumber = newNumber + 1;\n cm.replaceRange(\n nextLine.replace(listRE, nextIndent + itemNumber + nextItem[4] + nextItem[5]),\n {\n line: nextLineNumber,\n ch: 0,\n },\n {\n line: nextLineNumber,\n ch: nextLine.length,\n }\n );\n } else {\n if (startIndent.length > nextIndent.length) return;\n // This doesn't run if the next line immediately indents, as it is\n // not clear of the users intention (new indented item or same level)\n if (startIndent.length < nextIndent.length && lookAhead === 1) return;\n skipCount += 1;\n }\n }\n } while (nextItem);\n}\n\nexport { newlineAndIndentContinueMarkdownList };\n","import * as React from 'react';\n\nimport CodeMirror, { EditorFromTextArea } from 'codemirror5';\nimport styled from 'styled-components';\n\nimport { PreviewWysiwyg } from './PreviewWysiwyg';\nimport { newlineAndIndentContinueMarkdownList } from './utils/continueList';\n\nimport 'codemirror5/addon/display/placeholder';\n\ninterface EditorApi {\n focus: () => void;\n scrollIntoView: (args?: Parameters<HTMLElement['scrollIntoView']>[0]) => void;\n}\n\ninterface EditorProps {\n disabled?: boolean;\n editorRef: React.MutableRefObject<EditorFromTextArea>;\n error?: string;\n isPreviewMode?: boolean;\n isExpandMode?: boolean;\n name: string;\n onChange: (event: { target: { name: string; value: string; type: string } }) => void;\n placeholder?: string;\n textareaRef: React.RefObject<HTMLTextAreaElement>;\n value?: string;\n}\n\nconst Editor = React.forwardRef<EditorApi, EditorProps>(\n (\n {\n disabled,\n editorRef,\n error,\n isPreviewMode,\n isExpandMode,\n name,\n onChange,\n placeholder,\n textareaRef,\n value,\n },\n forwardedRef\n ) => {\n const onChangeRef = React.useRef(onChange);\n\n React.useEffect(() => {\n if (editorRef.current) {\n // Ensure the editor and its wrapper are cleaned up whenever this view is re-rendered\n // e.g. in case of re-ordering wysiwyg components in a DynamicZone\n editorRef.current.toTextArea();\n }\n editorRef.current = CodeMirror.fromTextArea(textareaRef.current!, {\n lineWrapping: true,\n extraKeys: {\n Enter: 'newlineAndIndentContinueMarkdownList',\n Tab: false,\n 'Shift-Tab': false,\n },\n readOnly: false,\n smartIndent: false,\n placeholder,\n spellcheck: true,\n inputStyle: 'contenteditable',\n });\n\n // @ts-expect-error – doesn't think command exists?\n CodeMirror.commands.newlineAndIndentContinueMarkdownList =\n newlineAndIndentContinueMarkdownList;\n editorRef.current.on('change', (doc) => {\n onChangeRef.current({ target: { name, value: doc.getValue(), type: 'wysiwyg' } });\n });\n }, [editorRef, textareaRef, name, placeholder]);\n\n React.useEffect(() => {\n if (value && !editorRef.current.hasFocus()) {\n editorRef.current.setValue(value);\n }\n }, [editorRef, value]);\n\n React.useEffect(() => {\n if (isPreviewMode || disabled) {\n editorRef.current.setOption('readOnly', 'nocursor');\n } else {\n editorRef.current.setOption('readOnly', false);\n }\n }, [disabled, isPreviewMode, editorRef]);\n\n React.useEffect(() => {\n if (error) {\n editorRef.current.setOption('screenReaderLabel', error);\n } else {\n // to replace with translation\n editorRef.current.setOption('screenReaderLabel', 'Editor');\n }\n }, [editorRef, error]);\n\n React.useImperativeHandle(\n forwardedRef,\n () => ({\n focus() {\n editorRef.current.getInputField().focus();\n },\n scrollIntoView(args?: Parameters<HTMLElement['scrollIntoView']>[0]) {\n editorRef.current.getInputField().scrollIntoView(args);\n },\n }),\n [editorRef]\n );\n\n return (\n <EditorAndPreviewWrapper>\n <EditorStylesContainer isExpandMode={isExpandMode} disabled={disabled || isPreviewMode}>\n <textarea ref={textareaRef} />\n </EditorStylesContainer>\n {isPreviewMode && <PreviewWysiwyg data={value} />}\n </EditorAndPreviewWrapper>\n );\n }\n);\n\nconst EditorAndPreviewWrapper = styled.div`\n position: relative;\n height: calc(100% - 48px);\n`;\n\nconst EditorStylesContainer = styled.div<{ disabled?: boolean; isExpandMode?: boolean }>`\n cursor: ${({ disabled }) => (disabled ? 'not-allowed !important' : 'auto')};\n height: 100%;\n /* BASICS */\n .CodeMirror-placeholder {\n color: ${({ theme }) => theme.colors.neutral600} !important;\n }\n\n .CodeMirror {\n /* Set height, width, borders, and global font properties here */\n font-size: ${14 / 16}rem;\n height: ${({ isExpandMode }) =>\n isExpandMode\n ? '100%'\n : '410px'}; // 512px(total height) - 48px (header) - 52px(footer) - 2px border\n color: ${({ theme }) => theme.colors.neutral800};\n direction: ltr;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell,\n 'Open Sans', 'Helvetica Neue', sans-serif;\n }\n\n /* PADDING */\n\n .CodeMirror-lines {\n padding: ${({ theme }) => `${theme.spaces[3]} ${theme.spaces[4]}`};\n /* Vertical padding around content */\n }\n\n .CodeMirror-scrollbar-filler,\n .CodeMirror-gutter-filler {\n /* The little square between H and V scrollbars */\n background-color: ${({ theme }) => `${theme.colors.neutral0}`};\n }\n\n /* GUTTER */\n\n .CodeMirror-gutters {\n border-right: 1px solid #ddd;\n background-color: #f7f7f7;\n white-space: nowrap;\n }\n .CodeMirror-linenumbers {\n }\n .CodeMirror-linenumber {\n padding: 0 3px 0 5px;\n min-width: 20px;\n text-align: right;\n color: #999;\n white-space: nowrap;\n }\n\n .CodeMirror-guttermarker {\n color: black;\n }\n .CodeMirror-guttermarker-subtle {\n color: #999;\n }\n\n /* CURSOR */\n\n .CodeMirror-cursor {\n border-left: 1px solid black;\n border-right: none;\n width: 0;\n }\n /* Shown when moving in bi-directional text */\n .CodeMirror div.CodeMirror-secondarycursor {\n border-left: 1px solid silver;\n }\n .cm-fat-cursor .CodeMirror-cursor {\n width: auto;\n border: 0 !important;\n background: #7e7;\n }\n .cm-fat-cursor div.CodeMirror-cursors {\n /* z-index: 1; */\n }\n\n .cm-fat-cursor-mark {\n background-color: rgba(20, 255, 20, 0.5);\n -webkit-animation: blink 1.06s steps(1) infinite;\n -moz-animation: blink 1.06s steps(1) infinite;\n animation: blink 1.06s steps(1) infinite;\n }\n .cm-animate-fat-cursor {\n width: auto;\n border: 0;\n -webkit-animation: blink 1.06s steps(1) infinite;\n -moz-animation: blink 1.06s steps(1) infinite;\n animation: blink 1.06s steps(1) infinite;\n background-color: #7e7;\n }\n\n /* Can style cursor different in overwrite (non-insert) mode */\n .CodeMirror-overwrite .CodeMirror-cursor {\n }\n\n .cm-tab {\n display: inline-block;\n text-decoration: inherit;\n }\n\n .CodeMirror-rulers {\n position: absolute;\n left: 0;\n right: 0;\n top: -50px;\n bottom: 0;\n overflow: hidden;\n }\n .CodeMirror-ruler {\n border-left: 1px solid #ccc;\n top: 0;\n bottom: 0;\n position: absolute;\n }\n\n /* DEFAULT THEME */\n\n .cm-header,\n .cm-strong {\n font-weight: bold;\n }\n .cm-em {\n font-style: italic;\n }\n .cm-link {\n text-decoration: underline;\n }\n .cm-strikethrough {\n text-decoration: line-through;\n }\n\n .CodeMirror-composing {\n border-bottom: 2px solid;\n }\n\n /* Default styles for common addons */\n\n div.CodeMirror span.CodeMirror-matchingbracket {\n color: #0b0;\n }\n div.CodeMirror span.CodeMirror-nonmatchingbracket {\n color: #a22;\n }\n .CodeMirror-matchingtag {\n background: rgba(255, 150, 0, 0.3);\n }\n .CodeMirror-activeline-background {\n background: #e8f2ff;\n }\n\n /* STOP */\n\n /* The rest of this file contains styles related to the mechanics of\n the editor. You probably shouldn't touch them. */\n\n .CodeMirror {\n position: relative;\n overflow: hidden;\n background: ${({ theme }) => `${theme.colors.neutral0}`};\n }\n\n .CodeMirror-scroll {\n overflow: scroll !important; /* Things will break if this is overridden */\n /* 50px is the magic margin used to hide the element's real scrollbars */\n /* See overflow: hidden in .CodeMirror */\n margin-bottom: -50px;\n margin-right: -50px;\n padding-bottom: 50px;\n height: 100%;\n outline: none; /* Prevent dragging from highlighting the element */\n position: relative;\n }\n .CodeMirror-sizer {\n position: relative;\n border-right: 50px solid transparent;\n }\n\n /* The fake, visible scrollbars. Used to force redraw during scrolling\n before actual scrolling happens, thus preventing shaking and\n flickering artifacts. */\n .CodeMirror-vscrollbar,\n .CodeMirror-hscrollbar,\n .CodeMirror-scrollbar-filler,\n .CodeMirror-gutter-filler {\n position: absolute;\n z-index: 1;\n display: none;\n outline: none;\n }\n\n .CodeMirror-vscrollbar {\n right: 0;\n top: 0;\n overflow-x: hidden;\n overflow-y: scroll;\n }\n .CodeMirror-hscrollbar {\n bottom: 0;\n left: 0;\n overflow-y: hidden;\n overflow-x: scroll;\n }\n .CodeMirror-scrollbar-filler {\n right: 0;\n bottom: 0;\n }\n\n .CodeMirror-lines {\n cursor: text;\n min-height: 1px; /* prevents collapsing before first draw */\n }\n /* Reset some styles that the rest of the page might have set */\n .CodeMirror pre.CodeMirror-line,\n .CodeMirror pre.CodeMirror-line-like {\n -moz-border-radius: 0;\n -webkit-border-radius: 0;\n border-radius: 0;\n border-width: 0;\n background: transparent;\n font-family: inherit;\n font-size: inherit;\n margin: 0;\n white-space: pre;\n word-wrap: normal;\n line-height: 1.5;\n color: inherit;\n /* z-index: 2; */\n position: relative;\n overflow: visible;\n -webkit-tap-highlight-color: transparent;\n -webkit-font-variant-ligatures: contextual;\n font-variant-ligatures: contextual;\n }\n\n .CodeMirror pre.CodeMirror-line-like {\n z-index: 2;\n }\n\n .CodeMirror-wrap pre.CodeMirror-line,\n .CodeMirror-wrap pre.CodeMirror-line-like {\n word-wrap: break-word;\n white-space: pre-wrap;\n word-break: normal;\n }\n\n .CodeMirror-linebackground {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n z-index: 0;\n }\n\n .CodeMirror-linewidget {\n position: relative;\n /* z-index: 2; */\n padding: 0.1px; /* Force widget margins to stay inside of the container */\n }\n\n .CodeMirror-widget {\n }\n\n .CodeMirror-rtl pre {\n direction: rtl;\n }\n\n .CodeMirror-code {\n outline: none;\n }\n\n /* Force content-box sizing for the elements where we expect it */\n .CodeMirror-scroll,\n .CodeMirror-sizer,\n .CodeMirror-gutter,\n .CodeMirror-gutters,\n .CodeMirror-linenumber {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n }\n\n .CodeMirror-measure {\n position: absolute;\n width: 100%;\n height: 0;\n overflow: hidden;\n visibility: hidden;\n }\n\n .CodeMirror-cursor {\n position: absolute;\n pointer-events: none;\n border-color: ${({ theme }) => `${theme.colors.neutral800}`};\n }\n .CodeMirror-measure pre {\n position: static;\n }\n\n div.CodeMirror-cursors {\n visibility: hidden;\n position: relative;\n + div {\n z-index: 0 !important;\n }\n }\n\n div.CodeMirror-dragcursors {\n visibility: visible;\n }\n\n .CodeMirror-focused div.CodeMirror-cursors {\n visibility: visible;\n }\n\n .CodeMirror-selected {\n background: ${({ theme }) => theme.colors.neutral200};\n /* z-index: -10; */\n }\n .CodeMirror-crosshair {\n cursor: crosshair;\n }\n\n /* Used to force a border model for a node */\n .cm-force-border {\n padding-right: 0.1px;\n }\n\n /* See issue #2901 */\n .cm-tab-wrap-hack:after {\n content: '';\n }\n\n /* Help users use markselection to safely style text background */\n span.CodeMirror-selectedtext {\n background: none;\n }\n\n span {\n color: ${({ theme }) => theme.colors.neutral800} !important;\n }\n`;\n\nexport { Editor };\nexport type { EditorProps, EditorApi };\n","import * as React from 'react';\n\nimport { BaseButton, Box, Flex, FocusTrap, Portal, Typography } from '@strapi/design-system';\nimport { pxToRem, useLockScroll } from '@strapi/helper-plugin';\nimport { Collapse } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { PreviewWysiwyg } from './PreviewWysiwyg';\n\ninterface EditorLayoutProps {\n children: React.ReactNode;\n isExpandMode: boolean;\n error?: string;\n previewContent?: string;\n onCollapse: () => void;\n}\n\nconst EditorLayout = ({\n children,\n isExpandMode,\n error,\n previewContent = '',\n onCollapse,\n}: EditorLayoutProps) => {\n const { formatMessage } = useIntl();\n\n useLockScroll({ lockScroll: isExpandMode });\n\n if (isExpandMode) {\n return (\n <Portal role=\"dialog\" aria-modal={false}>\n <FocusTrap onEscape={onCollapse}>\n <ExpandWrapper\n position=\"fixed\"\n top={0}\n left={0}\n right={0}\n bottom={0}\n zIndex={4}\n justifyContent=\"center\"\n onClick={onCollapse}\n >\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"popupShadow\"\n overflow=\"hidden\"\n width=\"90%\"\n height=\"90%\"\n onClick={(e) => e.stopPropagation()}\n >\n <Flex height=\"100%\" alignItems=\"flex-start\">\n <BoxWithBorder flex=\"1\" height=\"100%\">\n {children}\n </BoxWithBorder>\n <Flex alignItems=\"start\" direction=\"column\" flex={1} height=\"100%\" width=\"100%\">\n <Flex\n height={pxToRem(48)}\n background=\"neutral100\"\n justifyContent=\"flex-end\"\n shrink={0}\n width=\"100%\"\n >\n <ExpandButton onClick={onCollapse}>\n <Typography>\n {formatMessage({\n id: 'components.Wysiwyg.collapse',\n defaultMessage: 'Collapse',\n })}\n </Typography>\n <Collapse />\n </ExpandButton>\n </Flex>\n\n <Box position=\"relative\" height=\"100%\" width=\"100%\">\n <PreviewWysiwyg data={previewContent} />\n </Box>\n </Flex>\n </Flex>\n </Box>\n </ExpandWrapper>\n </FocusTrap>\n </Portal>\n );\n }\n\n return (\n <Box\n borderColor={error ? 'danger600' : 'neutral200'}\n borderStyle=\"solid\"\n borderWidth=\"1px\"\n hasRadius\n >\n {children}\n </Box>\n );\n};\n\nconst ExpandWrapper = styled(Flex)`\n background: ${({ theme }) =>\n `${theme.colors.neutral800}${Math.floor(0.2 * 255)\n .toString(16)\n .padStart(2, '0')}`};\n`;\n\nconst BoxWithBorder = styled(Box)`\n border-right: 1px solid ${({ theme }) => theme.colors.neutral200};\n`;\n\nconst ExpandButton = styled(BaseButton)`\n background-color: transparent;\n border: none;\n align-items: center;\n\n svg {\n margin-left: ${({ theme }) => `${theme.spaces[2]}`};\n\n path {\n fill: ${({ theme }) => theme.colors.neutral700};\n width: ${12 / 16}rem;\n height: ${12 / 16}rem;\n }\n }\n`;\n\nexport { EditorLayout, ExpandButton };\nexport type { EditorLayoutProps };\n","import { MutableRefObject } from 'react';\n\nimport CodeMirror from 'codemirror5';\n\nexport const replaceText = (markdownName: string, textToChange: string) => {\n let editedText;\n\n switch (markdownName) {\n case 'Strikethrough':\n editedText = `~~${textToChange}~~`;\n break;\n case 'Bold':\n editedText = `**${textToChange}**`;\n break;\n case 'Italic':\n editedText = `_${textToChange}_`;\n break;\n case 'Underline':\n editedText = `<u>${textToChange}</u>`;\n break;\n case 'Code':\n editedText = `\\`\\`\\`\\n${textToChange}\\n\\`\\`\\``;\n break;\n case 'Link':\n editedText = `[${textToChange}](link)`;\n break;\n case 'Quote':\n editedText = `>${textToChange}`;\n break;\n default:\n editedText = textToChange;\n }\n\n return editedText;\n};\n\nexport const insertText = (markdownName: string) => {\n let editedText;\n // object to calculate text that will be selected after insert of markdown\n const selection = { start: markdownName.length, end: 0 };\n\n switch (markdownName) {\n case 'Strikethrough':\n editedText = `~~${markdownName}~~`;\n selection.end = 2;\n break;\n case 'Bold':\n editedText = `**${markdownName}**`;\n selection.end = 2;\n break;\n case 'Italic':\n editedText = `_${markdownName}_`;\n selection.end = 1;\n break;\n case 'alt':\n editedText = `[${markdownName}]()`;\n selection.end = 3;\n break;\n case 'Underline':\n editedText = `<u>${markdownName}</u>`;\n selection.end = 4;\n break;\n case 'Code':\n editedText = `\\`\\`\\`\\n${markdownName}\\n\\`\\`\\``;\n selection.end = 3;\n break;\n case 'Link':\n editedText = `[${markdownName}](link)`;\n selection.end = 7;\n break;\n case 'Quote':\n editedText = `>${markdownName}`;\n selection.end = 0;\n break;\n default:\n editedText = '';\n }\n\n return { editedText, selection };\n};\n\nexport const insertListOrTitle = (markdown: string) => {\n let textToInsert;\n\n switch (markdown) {\n case 'BulletList':\n textToInsert = '- ';\n break;\n case 'NumberList':\n textToInsert = '1. ';\n break;\n case 'h1':\n textToInsert = '# ';\n break;\n case 'h2':\n textToInsert = '## ';\n break;\n case 'h3':\n textToInsert = '### ';\n break;\n case 'h4':\n textToInsert = '#### ';\n break;\n case 'h5':\n textToInsert = '##### ';\n break;\n case 'h6':\n textToInsert = '###### ';\n break;\n default:\n return '';\n }\n\n return textToInsert;\n};\n\n// EDITOR ACTIONS FUNCTIONS\n\nexport const markdownHandler = (\n editor: MutableRefObject<CodeMirror.EditorFromTextArea>,\n markdownType: string\n) => {\n const textToEdit = editor.current.getSelection();\n let textToInsert;\n\n if (textToEdit) {\n const editedText = replaceText(markdownType, textToEdit);\n editor.current.replaceSelection(editedText);\n editor.current.focus();\n } else {\n textToInsert = insertText(markdownType);\n editor.current.replaceSelection(textToInsert.editedText);\n editor.current.focus();\n // set selection-focus to text to replace with content\n const { line, ch } = editor.current.getCursor();\n const endSelection = ch - textToInsert.selection.end;\n const startSelection = ch - textToInsert.selection.end - textToInsert.selection.start;\n editor.current.setSelection({ line, ch: startSelection }, { line, ch: endSelection });\n }\n};\n\nexport const listHandler = (\n editor: MutableRefObject<CodeMirror.EditorFromTextArea>,\n listType: string\n) => {\n const doc = editor.current.getDoc();\n const insertion = listType === 'BulletList' ? '- ' : '1. ';\n\n if (doc.somethingSelected()) {\n const selections = doc.listSelections();\n let remove: boolean | null = null;\n\n editor.current.operation(function () {\n selections.forEach(function (selection) {\n const pos = [selection.head.line, selection.anchor.line].sort();\n\n // Remove if the first text starts with it\n if (remove == null) {\n remove = doc.getLine(pos[0]).startsWith(insertion);\n }\n\n for (let i = pos[0]; i <= pos[1]; i++) {\n if (remove) {\n // Don't remove if we don't start with it\n if (doc.getLine(i).startsWith(insertion)) {\n doc.replaceRange('', { line: i, ch: 0 }, { line: i, ch: insertion.length });\n }\n } else {\n const lineInsertion = listType === 'BulletList' ? '- ' : `${i + 1}. `;\n doc.replaceRange(lineInsertion, { line: i, ch: 0 });\n }\n }\n });\n });\n } else {\n const { line: currentLine } = doc.getCursor();\n const listToInsert = insertListOrTitle(listType);\n const lineContent = editor.current.getLine(currentLine);\n\n const textToInsert = listToInsert + lineContent;\n editor.current.setSelection(\n { line: currentLine, ch: 0 },\n { line: currentLine, ch: lineContent.length }\n );\n editor.current.replaceSelection(textToInsert);\n }\n\n editor.current.focus();\n};\n\nexport const titleHandler = (\n editor: MutableRefObject<CodeMirror.EditorFromTextArea>,\n titleType: string\n) => {\n const { line: currentLine } = editor.current.getCursor();\n const titleToInsert = insertListOrTitle(titleType);\n const lineContent = editor.current.getLine(currentLine);\n\n // replace hashtags followed by a space in case user want to change the type of title\n const lineWithNoTitle = lineContent.replace(/#{1,6}\\s/g, '').trim();\n\n const textToInsert = titleToInsert + lineWithNoTitle;\n editor.current.setSelection(\n { line: currentLine, ch: 0 },\n { line: currentLine, ch: lineContent.length }\n );\n editor.current.replaceSelection(textToInsert);\n\n setTimeout(() => {\n const newLastLineLength = editor.current.getLine(currentLine).length;\n editor.current.focus();\n editor.current.setCursor({ line: currentLine, ch: newLastLineLength });\n }, 0);\n};\n\nexport const insertFile = (\n editor: MutableRefObject<CodeMirror.EditorFromTextArea>,\n files: any[]\n) => {\n let { line } = editor.current.getCursor();\n const { ch } = editor.current.getCursor();\n\n files.forEach((file, i) => {\n let contentLength = editor.current.getLine(line).length;\n editor.current.setCursor({ line, ch: contentLength });\n // create a new line after first image markdown inserted\n // or if there is content in current line\n\n if (i > 0 || (i === 0 && ch !== 0)) {\n contentLength = editor.current.getLine(line).length;\n editor.current.setCursor({ line, ch: contentLength });\n line++;\n editor.current.replaceSelection('\\n');\n }\n\n if (file.mime.includes('image')) {\n editor.current.replaceSelection(`![${file.alt}](${file.url})`);\n } else {\n editor.current.replaceSelection(`[${file.alt}](${file.url})`);\n }\n });\n\n setTimeout(() => editor.current.focus(), 0);\n};\n\n// NEXT FUNCTIONS FOR QUOTE OR CODE MARKDOWN\n\nconst insertWithTextToEdit = (\n editor: MutableRefObject<CodeMirror.EditorFromTextArea>,\n markdownType: string,\n line: number,\n contentLength: number,\n textToEdit: string\n) => {\n const textToInsert = replaceText(markdownType, textToEdit);\n\n // remove content after current line\n const contentToMove = editor.current.getRange(\n { line: line + 1, ch: 0 },\n { line: Infinity, ch: Infinity }\n );\n editor.current.replaceRange('', { line: line + 1, ch: 0 }, { line: Infinity, ch: Infinity });\n\n // remove word that was selected\n // set cursor end of line + move to next line\n // add text to insert\n editor.current.replaceSelection('');\n editor.current.setCursor({ line, ch: contentLength });\n editor.current.replaceSelection('\\n');\n editor.current.replaceSelection(textToInsert);\n\n if (markdownType === 'Code') {\n const { line: newLine } = editor.current.getCursor();\n editor.current.setCursor({ line: newLine - 1, ch: textToEdit.length });\n }\n\n // add content we had to remove earlier\n editor.current.replaceRange(\n contentToMove,\n { line: line + 4, ch: 0 },\n { line: Infinity, ch: Infinity }\n );\n\n editor.current.focus();\n};\n\nconst insertWithoutTextToEdit = (\n editor: MutableRefObject<CodeMirror.EditorFromTextArea>,\n markdownType: string,\n line: number,\n contentLength: number\n) => {\n const textToInsert = insertText(markdownType);\n\n // remove content after current line\n const contentToMove = editor.current.getRange(\n { line: line + 1, ch: 0 },\n { line: Infinity, ch: Infinity }\n );\n editor.current.replaceRange('', { line: line + 1, ch: 0 }, { line: Infinity, ch: Infinity });\n\n // replace cursor to next line\n editor.current.setCursor({ line, ch: contentLength });\n editor.current.replaceSelection('\\n');\n editor.current.replaceSelection(textToInsert.editedText);\n\n // set selection on \"Code\" or \"Quote\" word\n\n if (markdownType === 'Code') {\n line += 2;\n\n editor.current.setSelection({ line, ch: 0 }, { line, ch: 4 });\n } else {\n line += 1;\n\n const { ch } = editor.current.getCursor();\n const endSelection = ch - textToInsert.selection.end;\n const startSelection = ch - textToInsert.selection.end - textToInsert.selection.start;\n editor.current.setSelection({ line, ch: startSelection }, { line, ch: endSelection });\n }\n\n // add content we had to remove earlier\n editor.current.replaceRange(\n contentToMove,\n { line: line + 2, ch: 0 },\n { line: Infinity, ch: Infinity }\n );\n editor.current.focus();\n};\n\nexport const quoteAndCodeHandler = (\n editor: MutableRefObject<CodeMirror.EditorFromTextArea>,\n markdownType: string\n) => {\n const textToEdit = editor.current.getSelection();\n const { line } = editor.current.getCursor();\n const contentLength = editor.current.getLine(line).length;\n\n if (textToEdit) {\n insertWithTextToEdit(editor, markdownType, line, contentLength, textToEdit);\n } else {\n insertWithoutTextToEdit(editor, markdownType, line, contentLength);\n }\n};\n","import { BaseButton, IconButton, IconButtonGroup } from '@strapi/design-system';\nimport styled from 'styled-components';\n\n// NAV BUTTONS\nexport const CustomIconButton = styled(IconButton)`\n padding: ${({ theme }) => theme.spaces[2]};\n /* Trick to prevent the outline from overflowing because of the general outline-offset */\n outline-offset: -2px !important;\n\n svg {\n width: ${18 / 16}rem;\n height: ${18 / 16}rem;\n }\n`;\n\nexport const CustomLinkIconButton = styled(CustomIconButton)`\n svg {\n width: ${8 / 16}rem;\n height: ${8 / 16}rem;\n }\n`;\n\nexport const MainButtons = styled(IconButtonGroup)`\n margin-left: ${({ theme }) => theme.spaces[4]};\n`;\n\nexport const MoreButton = styled(IconButton)`\n margin: ${({ theme }) => `0 ${theme.spaces[2]}`};\n padding: ${({ theme }) => theme.spaces[2]};\n\n svg {\n width: ${18 / 16}rem;\n height: ${18 / 16}rem;\n }\n`;\n\n// NAV\n\nexport const IconButtonGroupMargin = styled(IconButtonGroup)`\n margin-right: ${({ theme }) => `${theme.spaces[2]}`};\n`;\n\n// FOOTER\nexport const ExpandButton = styled(BaseButton)`\n background-color: transparent;\n border: none;\n align-items: center;\n\n svg {\n margin-left: ${({ theme }) => `${theme.spaces[2]}`};\n path {\n fill: ${({ theme }) => theme.colors.neutral700};\n width: ${12 / 16}rem;\n height: ${12 / 16}rem;\n }\n }\n`;\n","import { BaseButtonProps, Box, Flex, Typography } from '@strapi/design-system';\nimport { Expand } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { ExpandButton } from './WysiwygStyles';\n\ninterface WysiwygFooterProps {\n onToggleExpand: BaseButtonProps['onClick'];\n}\n\nconst WysiwygFooter = ({ onToggleExpand }: WysiwygFooterProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Box padding={2} background=\"neutral100\" borderRadius={`0 0 ${4 / 16}rem ${4 / 16}rem`}>\n <Flex justifyContent=\"flex-end\" alignItems=\"flex-end\">\n <ExpandButton id=\"expand\" onClick={onToggleExpand}>\n <Typography>\n {formatMessage({\n id: 'components.WysiwygBottomControls.fullscreen',\n defaultMessage: 'Expand',\n })}\n </Typography>\n <Expand />\n </ExpandButton>\n </Flex>\n </Box>\n );\n};\n\nexport { WysiwygFooter };\nexport type { WysiwygFooterProps };\n","import * as React from 'react';\n\nimport {\n Button,\n Flex,\n IconButtonGroup,\n SingleSelectOption,\n Popover,\n SingleSelect,\n} from '@strapi/design-system';\nimport {\n Bold,\n BulletList,\n Code,\n Italic,\n Link,\n More,\n NumberList,\n Picture as Image,\n Quote,\n StrikeThrough,\n Underline,\n} from '@strapi/icons';\nimport { EditorFromTextArea } from 'codemirror5';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport {\n CustomIconButton,\n CustomLinkIconButton,\n IconButtonGroupMargin,\n MainButtons,\n MoreButton,\n} from './WysiwygStyles';\n\ninterface WysiwygNavProps {\n disabled?: boolean;\n editorRef: React.MutableRefObject<EditorFromTextArea>;\n isExpandMode?: boolean;\n isPreviewMode?: boolean;\n onActionClick: (\n action: string,\n editorRef: React.MutableRefObject<EditorFromTextArea>,\n callback?: () => void\n ) => void;\n onToggleMediaLib: () => void;\n onTogglePreviewMode?: () => void;\n}\n\n/**\n * TODO: refactor this mess.\n */\nconst WysiwygNav = ({\n disabled,\n editorRef,\n isExpandMode,\n isPreviewMode,\n onActionClick,\n onToggleMediaLib,\n onTogglePreviewMode,\n}: WysiwygNavProps) => {\n const [visiblePopover, setVisiblePopover] = React.useState(false);\n const { formatMessage } = useIntl();\n const selectPlaceholder = formatMessage({\n id: 'components.Wysiwyg.selectOptions.title',\n defaultMessage: 'Add a title',\n });\n const buttonMoreRef = React.useRef<HTMLButtonElement>(null!);\n\n const handleTogglePopover = () => {\n setVisiblePopover((prev) => !prev);\n };\n\n if (disabled || isPreviewMode) {\n return (\n <Flex\n padding={2}\n background=\"neutral100\"\n justifyContent=\"space-between\"\n borderRadius={`${4 / 16}rem ${4 / 16}rem 0 0`}\n >\n <StyledFlex>\n <SingleSelect disabled placeholder={selectPlaceholder} size=\"S\" label={selectPlaceholder}>\n <SingleSelectOption value=\"h1\">h1</SingleSelectOption>\n <SingleSelectOption value=\"h2\">h2</SingleSelectOption>\n <SingleSelectOption value=\"h3\">h3</SingleSelectOption>\n <SingleSelectOption value=\"h4\">h4</SingleSelectOption>\n <SingleSelectOption value=\"h5\">h5</SingleSelectOption>\n <SingleSelectOption value=\"h6\">h6</SingleSelectOption>\n </SingleSelect>\n\n <MainButtons>\n <CustomIconButton disabled label=\"Bold\" name=\"Bold\" icon={<Bold />} />\n <CustomIconButton disabled label=\"Italic\" name=\"Italic\" icon={<Italic />} />\n <CustomIconButton disabled label=\"Underline\" name=\"Underline\" icon={<Underline />} />\n </MainButtons>\n\n <MoreButton disabled label=\"More\" icon={<More />} />\n </StyledFlex>\n\n {!isExpandMode && (\n <Button onClick={onTogglePreviewMode} variant=\"tertiary\">\n {formatMessage({\n id: 'components.Wysiwyg.ToggleMode.markdown-mode',\n defaultMessage: 'Markdown mode',\n })}\n </Button>\n )}\n </Flex>\n );\n }\n\n return (\n <Flex\n padding={2}\n background=\"neutral100\"\n justifyContent=\"space-between\"\n borderRadius={`${4 / 16}rem ${4 / 16}rem 0 0`}\n >\n <StyledFlex>\n <SingleSelect\n placeholder={selectPlaceholder}\n label={selectPlaceholder}\n size=\"S\"\n // @ts-expect-error – DS v2 will only allow strings.\n onChange={(value) => onActionClick(value, editorRef)}\n >\n <SingleSelectOption value=\"h1\">h1</SingleSelectOption>\n <SingleSelectOption value=\"h2\">h2</SingleSelectOption>\n <SingleSelectOption value=\"h3\">h3</SingleSelectOption>\n <SingleSelectOption value=\"h4\">h4</SingleSelectOption>\n <SingleSelectOption value=\"h5\">h5</SingleSelectOption>\n <SingleSelectOption value=\"h6\">h6</SingleSelectOption>\n </SingleSelect>\n\n <MainButtons>\n <CustomIconButton\n onClick={() => onActionClick('Bold', editorRef)}\n label=\"Bold\"\n name=\"Bold\"\n icon={<Bold />}\n />\n <CustomIconButton\n onClick={() => onActionClick('Italic', editorRef)}\n label=\"Italic\"\n name=\"Italic\"\n icon={<Italic />}\n />\n <CustomIconButton\n onClick={() => onActionClick('Underline', editorRef)}\n label=\"Underline\"\n name=\"Underline\"\n icon={<Underline />}\n />\n </MainButtons>\n\n <MoreButton\n ref={buttonMoreRef}\n onClick={handleTogglePopover}\n label=\"More\"\n icon={<More />}\n />\n {visiblePopover && (\n <Popover onDismiss={handleTogglePopover} centered source={buttonMoreRef} spacing={4}>\n <Flex>\n <IconButtonGroupMargin>\n <CustomIconButton\n onClick={() => onActionClick('Strikethrough', editorRef, handleTogglePopover)}\n label=\"Strikethrough\"\n name=\"Strikethrough\"\n icon={<StrikeThrough />}\n />\n <CustomIconButton\n onClick={() => onActionClick('BulletList', editorRef, handleTogglePopover)}\n label=\"BulletList\"\n name=\"BulletList\"\n icon={<BulletList />}\n />\n <CustomIconButton\n onClick={() => onActionClick('NumberList', editorRef, handleTogglePopover)}\n label=\"NumberList\"\n name=\"NumberList\"\n icon={<NumberList />}\n />\n </IconButtonGroupMargin>\n <IconButtonGroup>\n <CustomIconButton\n onClick={() => onActionClick('Code', editorRef, handleTogglePopover)}\n label=\"Code\"\n name=\"Code\"\n icon={<Code />}\n />\n <CustomIconButton\n onClick={() => {\n handleTogglePopover();\n onToggleMediaLib();\n }}\n label=\"Image\"\n name=\"Image\"\n icon={<Image />}\n />\n <CustomLinkIconButton\n onClick={() => onActionClick('Link', editorRef, handleTogglePopover)}\n label=\"Link\"\n name=\"Link\"\n // eslint-disable-next-line jsx-a11y/anchor-is-valid\n icon={<Link />}\n />\n <CustomIconButton\n onClick={() => onActionClick('Quote', editorRef, handleTogglePopover)}\n label=\"Quote\"\n name=\"Quote\"\n icon={<Quote />}\n />\n </IconButtonGroup>\n </Flex>\n </Popover>\n )}\n </StyledFlex>\n\n {onTogglePreviewMode && (\n <Button onClick={onTogglePreviewMode} variant=\"tertiary\">\n {formatMessage({\n id: 'components.Wysiwyg.ToggleMode.preview-mode',\n defaultMessage: 'Preview mode',\n })}\n </Button>\n )}\n </Flex>\n );\n};\n\nexport { WysiwygNav };\nexport type { WysiwygNavProps };\n\nconst StyledFlex = styled(Flex)`\n /* Hide the label, every input needs a label. */\n label {\n border: 0;\n clip: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n }\n`;\n","import * as React from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { prefixFileUrlWithBackendUrl, TranslationMessage, useLibrary } from '@strapi/helper-plugin';\nimport { EditorFromTextArea } from 'codemirror5';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { Hint, HintProps } from '../Hint';\n\nimport { Editor, EditorApi, EditorProps } from './Editor';\nimport { EditorLayout, EditorLayoutProps } from './EditorLayout';\nimport {\n insertFile,\n listHandler,\n markdownHandler,\n quoteAndCodeHandler,\n titleHandler,\n} from './utils/utils';\nimport { WysiwygFooter } from './WysiwygFooter';\nimport { WysiwygNav } from './WysiwygNav';\n\ninterface WysiwygProps\n extends Pick<EditorProps, 'disabled' | 'name' | 'onChange' | 'value'>,\n Pick<EditorLayoutProps, 'error'>,\n Pick<HintProps, 'hint'> {\n intlLabel: TranslationMessage;\n labelAction?: React.ReactNode;\n placeholder?: TranslationMessage;\n required?: boolean;\n}\n\nconst Wysiwyg = React.forwardRef<EditorApi, WysiwygProps>(\n (\n { hint, disabled, error, intlLabel, labelAction, name, onChange, placeholder, value, required },\n forwardedRef\n ) => {\n const { formatMessage } = useIntl();\n const textareaRef = React.useRef<HTMLTextAreaElement>(null);\n const editorRef = React.useRef<EditorFromTextArea>(\n null\n ) as React.MutableRefObject<EditorFromTextArea>;\n const [isPreviewMode, setIsPreviewMode] = React.useState(false);\n const [mediaLibVisible, setMediaLibVisible] = React.useState(false);\n const [isExpandMode, setIsExpandMode] = React.useState(false);\n const { components = {} } = useLibrary();\n\n const MediaLibraryDialog = components['media-library'];\n\n const handleToggleMediaLib = () => setMediaLibVisible((prev) => !prev);\n const handleTogglePreviewMode = () => setIsPreviewMode((prev) => !prev);\n const handleToggleExpand = () => {\n setIsPreviewMode(false);\n setIsExpandMode((prev) => !prev);\n };\n\n const handleActionClick = (\n value: string,\n currentEditorRef: React.MutableRefObject<EditorFromTextArea>,\n togglePopover?: () => void\n ) => {\n switch (value) {\n case 'Link':\n case 'Strikethrough': {\n markdownHandler(currentEditorRef, value);\n togglePopover?.();\n break;\n }\n case 'Code':\n case 'Quote': {\n quoteAndCodeHandler(currentEditorRef, value);\n togglePopover?.();\n break;\n }\n case 'Bold':\n case 'Italic':\n case 'Underline': {\n markdownHandler(currentEditorRef, value);\n break;\n }\n case 'BulletList':\n case 'NumberList': {\n listHandler(currentEditorRef, value);\n togglePopover?.();\n break;\n }\n case 'h1':\n case 'h2':\n case 'h3':\n case 'h4':\n case 'h5':\n case 'h6': {\n titleHandler(currentEditorRef, value);\n break;\n }\n default: {\n // Nothing\n }\n }\n };\n\n const handleSelectAssets = (files: any[]) => {\n const formattedFiles = files.map((f) => ({\n alt: f.alternativeText || f.name,\n url: prefixFileUrlWithBackendUrl(f.url),\n mime: f.mime,\n }));\n\n insertFile(editorRef, formattedFiles);\n setMediaLibVisible(false);\n };\n\n const formattedPlaceholder = placeholder\n ? formatMessage(\n { id: placeholder.id, defaultMessage: placeholder.defaultMessage },\n { ...placeholder.values }\n )\n : '';\n\n const label = intlLabel.id\n ? formatMessage(\n { id: intlLabel.id, defaultMessage: intlLabel.defaultMessage },\n { ...intlLabel.values }\n )\n : name;\n\n return (\n <>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n <Flex gap={1}>\n <Typography variant=\"pi\" fontWeight=\"bold\" textColor=\"neutral800\">\n {label}\n {required && <TypographyAsterisk textColor=\"danger600\">*</TypographyAsterisk>}\n </Typography>\n {labelAction && <LabelAction paddingLeft={1}>{labelAction}</LabelAction>}\n </Flex>\n\n <EditorLayout\n isExpandMode={isExpandMode}\n error={error}\n previewContent={value}\n onCollapse={handleToggleExpand}\n >\n <WysiwygNav\n isExpandMode={isExpandMode}\n editorRef={editorRef}\n isPreviewMode={isPreviewMode}\n onActionClick={handleActionClick}\n onToggleMediaLib={handleToggleMediaLib}\n onTogglePreviewMode={isExpandMode ? undefined : handleTogglePreviewMode}\n disabled={disabled}\n />\n\n <Editor\n disabled={disabled}\n isExpandMode={isExpandMode}\n editorRef={editorRef}\n error={error}\n isPreviewMode={isPreviewMode}\n name={name}\n onChange={onChange}\n placeholder={formattedPlaceholder}\n textareaRef={textareaRef}\n value={value}\n ref={forwardedRef}\n />\n\n {!isExpandMode && <WysiwygFooter onToggleExpand={handleToggleExpand} />}\n </EditorLayout>\n <Hint hint={hint} name={name} error={error} />\n </Flex>\n\n {error && (\n <Box paddingTop={1}>\n <Typography variant=\"pi\" textColor=\"danger600\" data-strapi-field-error>\n {error}\n </Typography>\n </Box>\n )}\n\n {mediaLibVisible && (\n // @ts-expect-error – TODO: fix this way of injecting because it's not really typeable without a registry.\n <MediaLibraryDialog onClose={handleToggleMediaLib} onSelectAssets={handleSelectAssets} />\n )}\n </>\n );\n }\n);\n\nconst LabelAction = styled(Box)`\n svg path {\n fill: ${({ theme }) => theme.colors.neutral500};\n }\n`;\n\nconst TypographyAsterisk = styled(Typography)`\n line-height: 0;\n`;\n\nexport { Wysiwyg };\nexport type { WysiwygProps };\n","import * as React from 'react';\n\nimport {\n GenericInput,\n NotAllowedInput,\n useCMEditViewDataManager,\n useLibrary,\n} from '@strapi/helper-plugin';\nimport get from 'lodash/get';\nimport omit from 'lodash/omit';\nimport take from 'lodash/take';\nimport { useIntl } from 'react-intl';\n\nimport { useContentTypeLayout } from '../hooks/useContentTypeLayout';\nimport { LazyComponentStore } from '../hooks/useLazyComponents';\nimport { getFieldName } from '../utils/fields';\nimport { EditLayoutRow } from '../utils/layouts';\n\nimport { BlocksInput } from './BlocksInput/BlocksInput';\nimport { InputUID } from './InputUID';\nimport { RelationInputDataManager } from './Relations/RelationInputDataManager';\nimport { Wysiwyg } from './Wysiwyg/Field';\n\nconst VALIDATIONS_TO_OMIT = [\n 'type',\n 'model',\n 'via',\n 'collection',\n 'default',\n 'plugin',\n 'enum',\n 'regex',\n 'pluginOptions',\n];\n\n/* -------------------------------------------------------------------------------------------------\n * Inputs\n * -----------------------------------------------------------------------------------------------*/\n\ninterface InputProps\n extends Pick<EditLayoutRow, 'fieldSchema' | 'metadatas' | 'queryInfos' | 'size'> {\n componentUid?: string;\n keys: string;\n labelAction?: React.ReactNode;\n customFieldInputs: LazyComponentStore;\n}\n\nconst Inputs = ({\n componentUid,\n fieldSchema,\n keys,\n labelAction,\n metadatas,\n queryInfos,\n size,\n customFieldInputs,\n}: InputProps) => {\n const {\n createActionAllowedFields,\n formErrors,\n isCreatingEntry,\n modifiedData,\n onChange,\n readActionAllowedFields,\n shouldNotRunValidations,\n updateActionAllowedFields,\n } = useCMEditViewDataManager();\n\n const { fields } = useLibrary();\n const { formatMessage } = useIntl();\n const { contentType: currentContentTypeLayout } = useContentTypeLayout();\n\n const allowedFields = React.useMemo(() => {\n return isCreatingEntry ? createActionAllowedFields : updateActionAllowedFields;\n }, [isCreatingEntry, createActionAllowedFields, updateActionAllowedFields]);\n\n const readableFields = React.useMemo(() => {\n return isCreatingEntry ? [] : readActionAllowedFields;\n }, [isCreatingEntry, readActionAllowedFields]);\n\n const value = get(modifiedData, keys, null);\n\n const disabled = React.useMemo(() => !get(metadatas, 'editable', true), [metadatas]);\n const { type, customField: customFieldUid } = fieldSchema;\n const error = get(formErrors, [keys], undefined);\n\n const fieldName = getFieldName(keys);\n\n const validations = React.useMemo(() => {\n const inputValidations = omit(\n fieldSchema,\n shouldNotRunValidations\n ? [...VALIDATIONS_TO_OMIT, 'required', 'minLength']\n : VALIDATIONS_TO_OMIT\n );\n\n const regexpString = 'regex' in fieldSchema ? fieldSchema.regex : null;\n\n if (regexpString) {\n const regexp = new RegExp(regexpString);\n\n if (regexp) {\n // @ts-expect-error – TODO: fix me\n inputValidations.regex = regexp;\n }\n }\n\n return inputValidations;\n }, [fieldSchema, shouldNotRunValidations]);\n\n const isRequired = React.useMemo(() => get(validations, ['required'], false), [validations]);\n\n const isChildOfDynamicZone = React.useMemo(() => {\n const attributes = get(currentContentTypeLayout, ['attributes'], {});\n const foundAttributeType = get(attributes, [fieldName[0], 'type'], null);\n\n return foundAttributeType === 'dynamiczone';\n }, [currentContentTypeLayout, fieldName]);\n\n const inputType = getInputType(type);\n\n const inputValue = type === 'media' && !value ? [] : value;\n\n const isUserAllowedToEditField = React.useMemo(() => {\n const joinedName = fieldName.join('.');\n\n if (allowedFields.includes(joinedName)) {\n return true;\n }\n\n if (isChildOfDynamicZone) {\n return allowedFields.includes(fieldName[0]);\n }\n\n const isChildOfComponent = fieldName.length > 1;\n\n if (isChildOfComponent) {\n const parentFieldName = take(fieldName, fieldName.length - 1).join('.');\n\n return allowedFields.includes(parentFieldName);\n }\n\n return false;\n }, [allowedFields, fieldName, isChildOfDynamicZone]);\n\n const isUserAllowedToReadField = React.useMemo(() => {\n const joinedName = fieldName.join('.');\n\n if (readableFields.includes(joinedName)) {\n return true;\n }\n\n if (isChildOfDynamicZone) {\n return readableFields.includes(fieldName[0]);\n }\n\n const isChildOfComponent = fieldName.length > 1;\n\n if (isChildOfComponent) {\n const parentFieldName = take(fieldName, fieldName.length - 1).join('.');\n\n return readableFields.includes(parentFieldName);\n }\n\n return false;\n }, [readableFields, fieldName, isChildOfDynamicZone]);\n\n const shouldDisplayNotAllowedInput = isUserAllowedToReadField || isUserAllowedToEditField;\n\n const shouldDisableField = React.useMemo(() => {\n if (!isCreatingEntry) {\n const doesNotHaveRight = isUserAllowedToReadField && !isUserAllowedToEditField;\n\n if (doesNotHaveRight) {\n return true;\n }\n\n return disabled;\n }\n\n return disabled;\n }, [disabled, isCreatingEntry, isUserAllowedToEditField, isUserAllowedToReadField]);\n\n const options = [\n {\n metadatas: {\n intlLabel: {\n id: 'components.InputSelect.option.placeholder',\n defaultMessage: 'Choose here',\n },\n disabled: isRequired,\n hidden: isRequired,\n },\n key: '__enum_option_null',\n value: '',\n },\n // @ts-expect-error – TODO: fix me\n ...(fieldSchema.enum ?? []).map((option) => {\n return {\n metadatas: {\n intlLabel: {\n id: option,\n defaultMessage: option,\n },\n hidden: false,\n disabled: false,\n },\n key: option,\n value: option,\n };\n }),\n ];\n\n const { label, description, placeholder, visible } = metadatas;\n\n if (visible === false) {\n return null;\n }\n\n if (!shouldDisplayNotAllowedInput) {\n return (\n <NotAllowedInput\n description={description ? { id: description, defaultMessage: description } : undefined}\n intlLabel={{ id: label, defaultMessage: label }}\n labelAction={labelAction}\n error={error ? formatMessage(error) : undefined}\n name={keys}\n />\n );\n }\n\n if (type === 'relation') {\n return (\n // @ts-expect-error – TODO: fix this, it won't work because you assume too much based off it's type so you can't narrow everything else down.\n <RelationInputDataManager\n {...metadatas}\n {...fieldSchema}\n componentUid={componentUid}\n description={\n metadatas.description\n ? formatMessage({\n id: metadatas.description,\n defaultMessage: metadatas.description,\n })\n : undefined\n }\n intlLabel={{\n id: metadatas.label,\n defaultMessage: metadatas.label,\n }}\n labelAction={labelAction}\n isUserAllowedToEditField={isUserAllowedToEditField}\n isUserAllowedToReadField={isUserAllowedToReadField}\n name={keys}\n placeholder={\n metadatas.placeholder\n ? {\n id: metadatas.placeholder,\n defaultMessage: metadatas.placeholder,\n }\n : undefined\n }\n queryInfos={queryInfos ?? {}}\n size={size}\n error={error ? formatMessage(error) : undefined}\n />\n );\n }\n\n const customInputs = {\n uid: InputUID,\n media: fields!.media,\n wysiwyg: Wysiwyg,\n blocks: BlocksInput,\n ...fields,\n ...customFieldInputs,\n };\n\n return (\n <GenericInput\n attribute={fieldSchema}\n autoComplete=\"new-password\"\n intlLabel={{ id: label, defaultMessage: label }}\n // in case the default value of the boolean is null, attribute.default doesn't exist\n isNullable={\n inputType === 'bool' &&\n 'default' in fieldSchema &&\n (fieldSchema.default === null || fieldSchema.default === undefined)\n }\n description={description ? { id: description, defaultMessage: description } : undefined}\n disabled={shouldDisableField}\n error={error}\n labelAction={labelAction}\n contentTypeUID={currentContentTypeLayout!.uid}\n // @ts-expect-error – TODO: fix this later...\n customInputs={customInputs}\n multiple={'multiple' in fieldSchema ? fieldSchema.multiple : false}\n name={keys}\n // @ts-expect-error – TODO: fix this later...\n onChange={onChange}\n options={options}\n placeholder={placeholder ? { id: placeholder, defaultMessage: placeholder } : undefined}\n required={fieldSchema.required || false}\n step={getStep(type)}\n type={customFieldUid || inputType}\n // validations={validations}\n value={inputValue}\n withDefaultValue={false}\n />\n );\n};\n\nconst getStep = (type: string) => {\n switch (type) {\n case 'float':\n case 'decimal':\n return 0.01;\n default:\n return 1;\n }\n};\n\nconst getInputType = (type = '') => {\n switch (type.toLowerCase()) {\n case 'blocks':\n return 'blocks';\n case 'boolean':\n return 'bool';\n case 'biginteger':\n return 'text';\n case 'decimal':\n case 'float':\n case 'integer':\n return 'number';\n case 'date':\n case 'datetime':\n case 'time':\n return type;\n case 'email':\n return 'email';\n case 'enumeration':\n return 'select';\n case 'password':\n return 'password';\n case 'string':\n return 'text';\n case 'text':\n return 'textarea';\n case 'media':\n case 'file':\n case 'files':\n return 'media';\n case 'json':\n return 'json';\n case 'wysiwyg':\n case 'WYSIWYG':\n case 'richtext':\n return 'wysiwyg';\n case 'uid':\n return 'uid';\n default:\n return type || 'text';\n }\n};\n\nexport { Inputs };\n","import { Box, Flex, Grid, GridItem } from '@strapi/design-system';\n\nimport { useContentTypeLayout } from '../hooks/useContentTypeLayout';\nimport { useLazyComponents } from '../hooks/useLazyComponents';\n\nimport { FieldComponent } from './FieldComponent';\nimport { Inputs } from './Inputs';\n\ninterface NonRepeatableComponentProps {\n componentUid: string;\n isFromDynamicZone?: boolean;\n isNested?: boolean;\n name: string;\n}\n\nconst NonRepeatableComponent = ({\n componentUid,\n isFromDynamicZone,\n isNested,\n name,\n}: NonRepeatableComponentProps) => {\n const { getComponentLayout } = useContentTypeLayout();\n const componentLayoutData = getComponentLayout(componentUid);\n\n const fields = componentLayoutData.layouts.edit;\n\n const { lazyComponentStore } = useLazyComponents();\n\n return (\n <Box\n background={isFromDynamicZone ? '' : 'neutral100'}\n paddingLeft={6}\n paddingRight={6}\n paddingTop={6}\n paddingBottom={6}\n hasRadius={isNested}\n borderColor={isNested ? 'neutral200' : undefined}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {fields.map((fieldRow, key) => {\n return (\n <Grid gap={4} key={key}>\n {fieldRow.map(({ name: fieldName, size, metadatas, fieldSchema, queryInfos }) => {\n const isComponent = fieldSchema.type === 'component';\n const keys = `${name}.${fieldName}`;\n\n if (isComponent) {\n const compoUid = fieldSchema.component;\n\n return (\n <GridItem col={size} s={12} xs={12} key={fieldName}>\n <FieldComponent\n componentUid={compoUid}\n intlLabel={{\n id: metadatas.label,\n defaultMessage: metadatas.label,\n }}\n isNested\n isRepeatable={fieldSchema.repeatable}\n max={fieldSchema.max}\n min={fieldSchema.min}\n name={keys}\n required={fieldSchema.required || false}\n />\n </GridItem>\n );\n }\n\n return (\n <GridItem col={size} key={fieldName} s={12} xs={12}>\n <Inputs\n componentUid={componentUid}\n keys={keys}\n fieldSchema={fieldSchema}\n metadatas={metadatas}\n queryInfos={queryInfos}\n size={size}\n customFieldInputs={lazyComponentStore}\n />\n </GridItem>\n );\n })}\n </Grid>\n );\n })}\n </Flex>\n </Box>\n );\n};\n\nexport { NonRepeatableComponent };\nexport type { NonRepeatableComponentProps };\n","import * as React from 'react';\n\nimport {\n Box,\n Flex,\n TextButton,\n VisuallyHidden,\n Accordion,\n AccordionContent as DSAccordionContent,\n AccordionToggle,\n Grid,\n GridItem,\n IconButton,\n Typography,\n KeyboardNavigable,\n} from '@strapi/design-system';\nimport {\n TranslationMessage,\n useCMEditViewDataManager,\n useNotification,\n useQuery,\n} from '@strapi/helper-plugin';\nimport { Plus, Drag, Trash } from '@strapi/icons';\nimport get from 'lodash/get';\nimport toString from 'lodash/toString';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { useContentTypeLayout } from '../hooks/useContentTypeLayout';\nimport { useDragAndDrop, type UseDragAndDropOptions } from '../hooks/useDragAndDrop';\nimport { useLazyComponents } from '../hooks/useLazyComponents';\nimport { ItemTypes } from '../utils/dragAndDrop';\nimport { getMaxTempKey } from '../utils/fields';\nimport { composeRefs } from '../utils/refs';\nimport { getTranslation } from '../utils/translations';\n\nimport { ComponentInitializer } from './ComponentInitializer';\nimport { FieldComponent } from './FieldComponent';\nimport { Inputs } from './Inputs';\n\nimport type { EditLayoutRow } from '../utils/layouts';\n\n/* -------------------------------------------------------------------------------------------------\n * RepeatableComponent\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RepeatableComponentProps {\n componentUid: string;\n componentValue?: Array<{ __temp_key__: number }>;\n componentValueLength?: number;\n isReadOnly?: boolean;\n max?: number;\n min?: number;\n name: string;\n}\n\nconst RepeatableComponent = ({\n componentUid,\n componentValue = [],\n componentValueLength = 0,\n isReadOnly,\n max = Infinity,\n min = -Infinity,\n name,\n}: RepeatableComponentProps) => {\n const { addRepeatableComponentToField, formErrors, moveComponentField } =\n useCMEditViewDataManager();\n const toggleNotification = useNotification();\n const { formatMessage } = useIntl();\n const [collapseToOpen, setCollapseToOpen] = React.useState<number | null>(null);\n const [liveText, setLiveText] = React.useState('');\n const { getComponentLayout, components } = useContentTypeLayout();\n const componentLayoutData = getComponentLayout(componentUid);\n\n const search = useQuery();\n\n /**\n * Get the temp key of the component that has the field that is currently focussed\n * as defined by the `field` query param. We can then force this specific component\n * to be in it's \"open\" state.\n */\n const componentTmpKeyWithFocussedField = React.useMemo(() => {\n if (search.has('field')) {\n const field = search.get('field');\n\n if (!field) {\n return undefined;\n }\n\n const [, path] = field.split(`${name}.`);\n\n if (get(componentValue, path, undefined) !== undefined) {\n const [subpath] = path.split('.');\n\n return componentValue[parseInt(subpath, 10)]?.__temp_key__;\n }\n }\n\n return undefined;\n }, [componentValue, search, name]);\n\n React.useEffect(() => {\n if (typeof componentTmpKeyWithFocussedField === 'number') {\n setCollapseToOpen(componentTmpKeyWithFocussedField);\n }\n }, [componentTmpKeyWithFocussedField]);\n\n const nextTempKey = getMaxTempKey(componentValue) + 1;\n\n const componentErrorKeys = getComponentErrorKeys(name, formErrors);\n\n const missingComponentsValue = min - componentValueLength;\n\n const hasMinError = formErrors[name]?.id?.includes('min') ?? false;\n\n const toggleCollapses = () => {\n setCollapseToOpen(null);\n };\n\n const handleClick = () => {\n if (!isReadOnly) {\n if (componentValueLength < max) {\n const shouldCheckErrors = hasMinError;\n\n addRepeatableComponentToField?.(name, componentLayoutData, components, shouldCheckErrors);\n\n setCollapseToOpen(nextTempKey);\n } else if (componentValueLength >= max) {\n toggleNotification({\n type: 'info',\n message: { id: getTranslation('components.notification.info.maximum-requirement') },\n });\n }\n }\n };\n\n const handleMoveComponentField: ComponentProps['moveComponentField'] = (\n newIndex,\n currentIndex\n ) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.reorder'),\n defaultMessage: '{item}, moved. New position in list: {position}.',\n },\n {\n item: `${name}.${currentIndex}`,\n position: getItemPos(newIndex),\n }\n )\n );\n\n moveComponentField?.({\n name,\n newIndex,\n currentIndex,\n });\n };\n\n const mainField =\n 'settings' in componentLayoutData ? componentLayoutData.settings.mainField ?? 'id' : 'id';\n\n const handleToggle = (key: number) => () => {\n if (collapseToOpen === key) {\n setCollapseToOpen(null);\n } else {\n setCollapseToOpen(key);\n }\n };\n\n const getItemPos = (index: number) => `${index + 1} of ${componentValueLength}`;\n\n const handleCancel = (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.cancel-item'),\n defaultMessage: '{item}, dropped. Re-order cancelled.',\n },\n {\n item: `${name}.${index}`,\n }\n )\n );\n };\n\n const handleGrabItem = (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.grab-item'),\n defaultMessage: `{item}, grabbed. Current position in list: {position}. Press up and down arrow to change position, Spacebar to drop, Escape to cancel.`,\n },\n {\n item: `${name}.${index}`,\n position: getItemPos(index),\n }\n )\n );\n };\n\n const handleDropItem = (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.drop-item'),\n defaultMessage: `{item}, dropped. Final position in list: {position}.`,\n },\n {\n item: `${name}.${index}`,\n position: getItemPos(index),\n }\n )\n );\n };\n\n let errorMessage = formErrors[name];\n\n if (hasMinError) {\n errorMessage = {\n id: getTranslation('components.DynamicZone.missing-components'),\n defaultMessage:\n 'There {number, plural, =0 {are # missing components} one {is # missing component} other {are # missing components}}',\n values: { number: missingComponentsValue },\n };\n } else if (componentErrorKeys.some((error) => error.split('.').length > 1) && !hasMinError) {\n errorMessage = {\n id: getTranslation('components.RepeatableComponent.error-message'),\n defaultMessage: 'The component(s) contain error(s)',\n };\n }\n\n if (componentValueLength === 0) {\n return (\n <ComponentInitializer error={errorMessage} isReadOnly={isReadOnly} onClick={handleClick} />\n );\n }\n\n const ariaDescriptionId = `${name}-item-instructions`;\n\n return (\n <Box hasRadius>\n <VisuallyHidden id={ariaDescriptionId}>\n {formatMessage({\n id: getTranslation('dnd.instructions'),\n defaultMessage: `Press spacebar to grab and re-order`,\n })}\n </VisuallyHidden>\n <VisuallyHidden aria-live=\"assertive\">{liveText}</VisuallyHidden>\n <AccordionGroup error={errorMessage}>\n <AccordionContent aria-describedby={ariaDescriptionId}>\n {componentValue.map(({ __temp_key__: key }, index) => (\n <Component\n componentFieldName={`${name}.${index}`}\n componentUid={componentUid}\n fields={componentLayoutData.layouts.edit}\n key={key}\n index={index}\n isOpen={collapseToOpen === key}\n isReadOnly={isReadOnly}\n mainField={mainField}\n moveComponentField={handleMoveComponentField}\n onClickToggle={handleToggle(key)}\n toggleCollapses={toggleCollapses}\n onCancel={handleCancel}\n onDropItem={handleDropItem}\n onGrabItem={handleGrabItem}\n />\n ))}\n </AccordionContent>\n <AccordionFooter>\n <Flex justifyContent=\"center\" height=\"48px\" background=\"neutral0\">\n <TextButtonCustom disabled={isReadOnly} onClick={handleClick} startIcon={<Plus />}>\n {formatMessage({\n id: getTranslation('containers.EditView.add.new-entry'),\n defaultMessage: 'Add an entry',\n })}\n </TextButtonCustom>\n </Flex>\n </AccordionFooter>\n </AccordionGroup>\n </Box>\n );\n};\n\nconst TextButtonCustom = styled(TextButton)`\n height: 100%;\n width: 100%;\n border-radius: 0 0 4px 4px;\n display: flex;\n justify-content: center;\n span {\n font-weight: 600;\n font-size: 14px;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * Accordion\n * -----------------------------------------------------------------------------------------------*/\n\nconst AccordionFooter = styled(Box)`\n overflow: hidden;\n border-bottom: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-right: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-left: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-radius: 0 0 ${({ theme }) => theme.borderRadius} ${({ theme }) => theme.borderRadius};\n`;\n\nconst AccordionContent = styled(Box)`\n border-bottom: none;\n\n /* add the borders and make sure the top is transparent to avoid jumping with the hover effect */\n & > div > div {\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-top-color: transparent;\n }\n\n /* the top accordion _does_ need a border though */\n & > div:first-child > div {\n border-top: 1px solid ${({ theme }) => theme.colors.neutral200};\n }\n\n /* Reset all the border-radius' */\n & > div > div,\n & > div > div > div {\n border-radius: unset;\n }\n\n /* Give the border radius back to the first accordion */\n & > div:first-child > div,\n & > div:first-child > div > div {\n border-radius: ${({ theme }) => theme.borderRadius} ${({ theme }) => theme.borderRadius} 0 0;\n }\n\n & > div > div[data-strapi-expanded='true'] {\n border: 1px solid ${({ theme }) => theme.colors.primary600};\n }\n`;\n\ninterface AccordionGroupProps {\n children: React.ReactNode;\n error?: TranslationMessage;\n}\n\nconst AccordionGroup = ({ children, error }: AccordionGroupProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <KeyboardNavigable attributeName=\"data-strapi-accordion-toggle\">\n {children}\n {error && (\n <Box paddingTop={1}>\n <Typography variant=\"pi\" textColor=\"danger600\">\n {formatMessage(\n { id: error.id, defaultMessage: error.defaultMessage },\n { ...error.values }\n )}\n </Typography>\n </Box>\n )}\n </KeyboardNavigable>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Field\n * -----------------------------------------------------------------------------------------------*/\n\nconst CustomIconButton = styled(IconButton)<{ expanded?: boolean }>`\n background-color: transparent;\n\n svg {\n path {\n fill: ${({ theme, expanded }) =>\n expanded ? theme.colors.primary600 : theme.colors.neutral600};\n }\n }\n\n &:hover {\n svg {\n path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n }\n }\n`;\n\nconst ActionsFlex = styled(Flex)<{ expanded?: boolean }>`\n & .drag-handle {\n background: unset;\n\n svg {\n path {\n fill: ${({ theme, expanded }) => (expanded ? theme.colors.primary600 : undefined)};\n }\n }\n\n &:hover {\n svg {\n path {\n /* keeps the hover style of the accordion */\n fill: ${({ theme }) => theme.colors.primary600};\n }\n }\n }\n }\n`;\n\ninterface ComponentProps\n extends Pick<UseDragAndDropOptions, 'onGrabItem' | 'onDropItem' | 'onCancel'> {\n componentFieldName: string;\n componentUid: string;\n fields?: EditLayoutRow[][];\n index: number;\n isOpen?: boolean;\n isReadOnly?: boolean;\n mainField: string;\n onClickToggle: () => void;\n toggleCollapses: () => void;\n moveComponentField: (newIndex: number, currentIndex: number) => void;\n}\n\nconst Component = ({\n componentFieldName,\n componentUid,\n fields = [],\n index,\n isOpen,\n isReadOnly,\n mainField,\n moveComponentField,\n onClickToggle,\n toggleCollapses,\n onGrabItem,\n onDropItem,\n onCancel,\n}: ComponentProps) => {\n // @ts-expect-error – we need to add `triggerFormValidation` to the context.\n const { modifiedData, removeRepeatableField, triggerFormValidation } = useCMEditViewDataManager();\n\n const displayedValue = toString(\n get(modifiedData, [...componentFieldName.split('.'), mainField], '')\n );\n const accordionRef = React.useRef<HTMLButtonElement>(null!);\n const { formatMessage } = useIntl();\n\n /**\n * The last item in the fieldName array will be the index of this component.\n * Drag and drop should be isolated to the parent component so nested repeatable\n * components are not affected by the drag and drop of the parent component in\n * their own re-ordering context.\n */\n const componentKey = componentFieldName.split('.').slice(0, -1).join('.');\n\n const [{ handlerId, isDragging, handleKeyDown }, boxRef, dropRef, dragRef, dragPreviewRef] =\n useDragAndDrop(!isReadOnly, {\n type: `${ItemTypes.COMPONENT}_${componentKey}`,\n index,\n item: {\n index,\n displayedValue,\n },\n onStart() {\n // Close all collapses\n toggleCollapses();\n },\n onEnd() {\n // Update the errors\n triggerFormValidation();\n },\n onMoveItem: moveComponentField,\n onDropItem,\n onGrabItem,\n onCancel,\n });\n\n React.useEffect(() => {\n dragPreviewRef(getEmptyImage(), { captureDraggingState: false });\n }, [dragPreviewRef, index]);\n\n const composedAccordionRefs = composeRefs<HTMLButtonElement>(accordionRef, dragRef);\n const composedBoxRefs = composeRefs(boxRef, dropRef);\n\n const { lazyComponentStore } = useLazyComponents();\n\n return (\n <Box ref={(ref) => composedBoxRefs(ref!)}>\n {isDragging ? (\n <Preview />\n ) : (\n <Accordion expanded={isOpen} onToggle={onClickToggle} id={componentFieldName} size=\"S\">\n <AccordionToggle\n action={\n isReadOnly ? null : (\n <ActionsFlex gap={0} expanded={isOpen}>\n <CustomIconButton\n expanded={isOpen}\n noBorder\n onClick={() => {\n removeRepeatableField?.(componentFieldName);\n toggleCollapses();\n }}\n label={formatMessage({\n id: getTranslation('containers.Edit.delete'),\n defaultMessage: 'Delete',\n })}\n icon={<Trash />}\n />\n <IconButton\n className=\"drag-handle\"\n ref={composedAccordionRefs}\n forwardedAs=\"div\"\n role=\"button\"\n noBorder\n tabIndex={0}\n onClick={(e) => e.stopPropagation()}\n data-handler-id={handlerId}\n label={formatMessage({\n id: getTranslation('components.DragHandle-label'),\n defaultMessage: 'Drag',\n })}\n onKeyDown={handleKeyDown}\n >\n <Drag />\n </IconButton>\n </ActionsFlex>\n )\n }\n title={displayedValue}\n togglePosition=\"left\"\n />\n <DSAccordionContent>\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n background=\"neutral100\"\n padding={6}\n gap={6}\n >\n {fields.map((fieldRow, key) => {\n return (\n <Grid gap={4} key={key}>\n {fieldRow.map(({ name, fieldSchema, metadatas, queryInfos, size }) => {\n const isComponent = fieldSchema.type === 'component';\n const keys = `${componentFieldName}.${name}`;\n\n if (isComponent) {\n const componentUid = fieldSchema.component;\n\n return (\n <GridItem col={size} s={12} xs={12} key={name}>\n <FieldComponent\n componentUid={componentUid}\n intlLabel={{\n id: metadatas.label,\n defaultMessage: metadatas.label,\n }}\n isRepeatable={fieldSchema.repeatable}\n isNested\n name={keys}\n max={fieldSchema.max}\n min={fieldSchema.min}\n required={fieldSchema.required}\n />\n </GridItem>\n );\n }\n\n return (\n <GridItem key={keys} col={size} s={12} xs={12}>\n <Inputs\n componentUid={componentUid}\n fieldSchema={fieldSchema}\n keys={keys}\n metadatas={metadatas}\n queryInfos={queryInfos}\n size={size}\n customFieldInputs={lazyComponentStore}\n />\n </GridItem>\n );\n })}\n </Grid>\n );\n })}\n </Flex>\n </DSAccordionContent>\n </Accordion>\n )}\n </Box>\n );\n};\n\nconst Preview = () => {\n return <StyledSpan as=\"span\" padding={6} background=\"primary100\" />;\n};\n\nconst StyledSpan = styled(Box)`\n display: block;\n outline: 1px dashed ${({ theme }) => theme.colors.primary500};\n outline-offset: -1px;\n`;\n\nfunction getComponentErrorKeys(name: string, formErrors = {}) {\n return Object.keys(formErrors)\n .filter((errorKey) => errorKey.startsWith(name))\n .map((errorKey) =>\n errorKey\n .split('.')\n .slice(0, name.split('.').length + 1)\n .join('.')\n );\n}\n\nexport { RepeatableComponent };\nexport type { RepeatableComponentProps };\n","import * as React from 'react';\n\nimport { Box, Flex, IconButton, Typography } from '@strapi/design-system';\nimport {\n NotAllowedInput,\n TranslationMessage,\n useCMEditViewDataManager,\n} from '@strapi/helper-plugin';\nimport { Trash } from '@strapi/icons';\nimport { get, size } from 'lodash/fp';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { useContentTypeLayout } from '../hooks/useContentTypeLayout';\nimport { getFieldName } from '../utils/fields';\nimport { getTranslation } from '../utils/translations';\n\nimport { ComponentInitializer } from './ComponentInitializer';\nimport { NonRepeatableComponent } from './NonRepeatableComponent';\nimport { RepeatableComponent } from './RepeatableComponent';\n\ninterface FieldComponentProps {\n componentUid: string;\n intlLabel?: TranslationMessage;\n isFromDynamicZone?: boolean;\n isRepeatable?: boolean;\n isNested?: boolean;\n labelAction?: React.ReactNode;\n max?: number;\n min?: number;\n name: string;\n required?: boolean;\n}\n\nconst FieldComponent = ({\n componentUid,\n intlLabel,\n isFromDynamicZone,\n isRepeatable,\n isNested,\n labelAction,\n max = Infinity,\n min = -Infinity,\n name,\n required,\n}: FieldComponentProps) => {\n const { formatMessage } = useIntl();\n const {\n addNonRepeatableComponentToField,\n createActionAllowedFields,\n isCreatingEntry,\n modifiedData,\n removeComponentFromField,\n readActionAllowedFields,\n updateActionAllowedFields,\n } = useCMEditViewDataManager();\n const { contentType } = useContentTypeLayout();\n\n // This is used for the readonly mode when updating an entry\n const allDynamicZoneFields = React.useMemo(() => {\n const attributes = contentType?.attributes ?? {};\n\n return Object.keys(attributes).filter(\n (attrName) => attributes[attrName].type === 'dynamiczone'\n );\n }, [contentType]);\n\n const allowedFields = isCreatingEntry ? createActionAllowedFields : updateActionAllowedFields;\n\n // Use lodash get since the name can be a nested path (e.g. \"component.1.component\")\n const componentValue = get(name, modifiedData) ?? null;\n const compoName = getFieldName(name);\n\n const hasChildrenAllowedFields = React.useMemo(() => {\n if (isFromDynamicZone && isCreatingEntry) {\n return true;\n }\n\n const includedDynamicZoneFields = allowedFields.filter((name) => name === compoName[0]);\n\n if (includedDynamicZoneFields.length > 0) {\n return true;\n }\n\n const relatedChildrenAllowedFields = allowedFields\n .map((fieldName) => {\n return fieldName.split('.');\n })\n .filter((fieldName) => {\n if (fieldName.length < compoName.length) {\n return false;\n }\n\n return fieldName.slice(0, compoName.length).join('.') === compoName.join('.');\n });\n\n return relatedChildrenAllowedFields.length > 0;\n }, [isFromDynamicZone, isCreatingEntry, allowedFields, compoName]);\n\n // This is used only when updating an entry\n const hasChildrenReadableFields = React.useMemo(() => {\n if (isFromDynamicZone) {\n return true;\n }\n if (allDynamicZoneFields.includes(compoName[0])) {\n return true;\n }\n\n const allowedFields = isCreatingEntry ? [] : readActionAllowedFields;\n\n const relatedChildrenAllowedFields = allowedFields\n .map((fieldName) => {\n return fieldName.split('.');\n })\n .filter((fieldName) => {\n if (fieldName.length < compoName.length) {\n return false;\n }\n\n return fieldName.slice(0, compoName.length).join('.') === compoName.join('.');\n });\n\n return relatedChildrenAllowedFields.length > 0;\n }, [\n isFromDynamicZone,\n allDynamicZoneFields,\n compoName,\n isCreatingEntry,\n readActionAllowedFields,\n ]);\n\n const isReadOnly = isCreatingEntry\n ? false\n : hasChildrenAllowedFields\n ? false\n : hasChildrenReadableFields;\n\n const componentValueLength = size(componentValue);\n const isInitialized = componentValue !== null || isFromDynamicZone;\n const showResetComponent =\n !isRepeatable && isInitialized && !isFromDynamicZone && hasChildrenAllowedFields;\n\n const { getComponentLayout, components } = useContentTypeLayout();\n const componentLayoutData = getComponentLayout(componentUid);\n\n if (!hasChildrenAllowedFields && isCreatingEntry) {\n return <NotAllowedInput labelAction={labelAction} intlLabel={intlLabel} name={name} />;\n }\n\n if (!hasChildrenAllowedFields && !isCreatingEntry && !hasChildrenReadableFields) {\n return <NotAllowedInput labelAction={labelAction} intlLabel={intlLabel} name={name} />;\n }\n\n const handleClickAddNonRepeatableComponentToField = () => {\n addNonRepeatableComponentToField?.(name, componentLayoutData, components);\n };\n\n return (\n <Box>\n <Flex justifyContent=\"space-between\">\n {intlLabel && (\n <Flex paddingBottom={1}>\n <Typography\n textColor=\"neutral800\"\n htmlFor={name}\n variant=\"pi\"\n fontWeight=\"bold\"\n as=\"label\"\n >\n {formatMessage(intlLabel)}\n {isRepeatable && <>&nbsp;({componentValueLength})</>}\n {required && <Typography textColor=\"danger600\">*</Typography>}\n </Typography>\n {labelAction && <LabelAction paddingLeft={1}>{labelAction}</LabelAction>}\n </Flex>\n )}\n\n {showResetComponent && (\n <IconButton\n label={formatMessage({\n id: getTranslation('components.reset-entry'),\n defaultMessage: 'Reset Entry',\n })}\n icon={<Trash />}\n noBorder\n onClick={() => {\n removeComponentFromField?.(name, componentUid);\n }}\n />\n )}\n </Flex>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n {!isRepeatable && !isInitialized && (\n <ComponentInitializer\n isReadOnly={isReadOnly}\n onClick={handleClickAddNonRepeatableComponentToField}\n />\n )}\n {!isRepeatable && isInitialized && (\n <NonRepeatableComponent\n componentUid={componentUid}\n isFromDynamicZone={isFromDynamicZone}\n isNested={isNested}\n name={name}\n />\n )}\n {isRepeatable && (\n <RepeatableComponent\n componentValue={componentValue ?? undefined}\n componentValueLength={componentValueLength}\n componentUid={componentUid}\n isReadOnly={isReadOnly}\n max={max}\n min={min}\n name={name}\n />\n )}\n </Flex>\n </Box>\n );\n};\n\nconst LabelAction = styled(Box)`\n svg path {\n fill: ${({ theme }) => theme.colors.neutral500};\n }\n`;\n\nexport { FieldComponent };\n","import * as React from 'react';\n\nimport {\n Accordion,\n AccordionContent,\n AccordionToggle,\n Box,\n Flex,\n IconButton,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { Menu, MenuItem } from '@strapi/design-system/v2';\nimport { useCMEditViewDataManager } from '@strapi/helper-plugin';\nimport { Drag, More, Trash } from '@strapi/icons';\nimport get from 'lodash/get';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { useContentTypeLayout } from '../../hooks/useContentTypeLayout';\nimport { type UseDragAndDropOptions, useDragAndDrop } from '../../hooks/useDragAndDrop';\nimport { ItemTypes } from '../../utils/dragAndDrop';\nimport { composeRefs } from '../../utils/refs';\nimport { getTranslation } from '../../utils/translations';\nimport { ComponentIcon } from '../ComponentIcon';\nimport { FieldComponent } from '../FieldComponent';\n\nimport type { ComponentPickerProps } from './ComponentPicker';\n\ninterface DynamicComponentProps\n extends Pick<UseDragAndDropOptions, 'onGrabItem' | 'onDropItem' | 'onCancel'>,\n Pick<ComponentPickerProps, 'dynamicComponentsByCategory'> {\n componentUid: string;\n formErrors?: Record<string, unknown>;\n index?: number;\n isFieldAllowed?: boolean;\n name: string;\n onAddComponent?: (componentUid: string, index: number) => void;\n onRemoveComponentClick: () => void;\n onMoveComponent: (dragIndex: number, hoverIndex: number) => void;\n}\n\nconst DynamicComponent = ({\n componentUid,\n formErrors = {},\n index = 0,\n isFieldAllowed = false,\n name,\n onRemoveComponentClick,\n onMoveComponent,\n onGrabItem,\n onDropItem,\n onCancel,\n dynamicComponentsByCategory = {},\n onAddComponent,\n}: DynamicComponentProps) => {\n const [isOpen, setIsOpen] = React.useState(true);\n const { formatMessage } = useIntl();\n const { getComponentLayout } = useContentTypeLayout();\n const { modifiedData } = useCMEditViewDataManager();\n const { icon, friendlyName, mainValue } = React.useMemo(() => {\n const componentLayoutData = getComponentLayout(componentUid);\n\n const {\n info: { icon, displayName },\n } = componentLayoutData;\n\n const mainFieldKey = get(componentLayoutData, ['settings', 'mainField'], 'id');\n\n const mainField = get(modifiedData, [name, index, mainFieldKey]) ?? '';\n\n const displayedValue = mainFieldKey === 'id' ? '' : String(mainField).trim();\n\n const mainValue = displayedValue.length > 0 ? ` - ${displayedValue}` : displayedValue;\n\n return { friendlyName: displayName, icon, mainValue };\n }, [componentUid, getComponentLayout, modifiedData, name, index]);\n\n const fieldsErrors = Object.keys(formErrors).filter((errorKey) => {\n const errorKeysArray = errorKey.split('.');\n\n if (`${errorKeysArray[0]}.${errorKeysArray[1]}` === `${name}.${index}`) {\n return true;\n }\n\n return false;\n });\n\n let errorMessage;\n\n if (fieldsErrors.length > 0) {\n errorMessage = formatMessage({\n id: getTranslation('components.DynamicZone.error-message'),\n defaultMessage: 'The component contains error(s)',\n });\n }\n\n const handleToggle = () => {\n setIsOpen((s) => !s);\n };\n\n const [{ handlerId, isDragging, handleKeyDown }, boxRef, dropRef, dragRef, dragPreviewRef] =\n useDragAndDrop(isFieldAllowed, {\n type: `${ItemTypes.DYNAMIC_ZONE}_${name}`,\n index,\n item: {\n index,\n displayedValue: `${friendlyName}${mainValue}`,\n icon,\n },\n onMoveItem: onMoveComponent,\n onDropItem,\n onGrabItem,\n onCancel,\n });\n\n React.useEffect(() => {\n dragPreviewRef(getEmptyImage(), { captureDraggingState: false });\n }, [dragPreviewRef, index]);\n\n const composedBoxRefs = composeRefs(boxRef, dropRef);\n\n const accordionActions = !isFieldAllowed ? null : (\n <ActionsFlex gap={0}>\n <IconButtonCustom\n noBorder\n label={formatMessage(\n {\n id: getTranslation('components.DynamicZone.delete-label'),\n defaultMessage: 'Delete {name}',\n },\n { name: friendlyName }\n )}\n onClick={onRemoveComponentClick}\n >\n <Trash />\n </IconButtonCustom>\n <IconButton\n forwardedAs=\"div\"\n role=\"button\"\n noBorder\n tabIndex={0}\n onClick={(e) => e.stopPropagation()}\n data-handler-id={handlerId}\n ref={dragRef}\n label={formatMessage({\n id: getTranslation('components.DragHandle-label'),\n defaultMessage: 'Drag',\n })}\n onKeyDown={handleKeyDown}\n >\n <Drag />\n </IconButton>\n <Menu.Root>\n <Menu.Trigger size=\"S\" endIcon={null} paddingLeft={2} paddingRight={2}>\n <More aria-hidden focusable={false} />\n <VisuallyHidden as=\"span\">\n {formatMessage({\n id: getTranslation('components.DynamicZone.more-actions'),\n defaultMessage: 'More actions',\n })}\n </VisuallyHidden>\n </Menu.Trigger>\n <Menu.Content>\n <Menu.SubRoot>\n <Menu.SubTrigger>\n {formatMessage({\n id: getTranslation('components.DynamicZone.add-item-above'),\n defaultMessage: 'Add component above',\n })}\n </Menu.SubTrigger>\n <Menu.SubContent>\n {Object.entries(dynamicComponentsByCategory).map(([category, components]) => (\n <React.Fragment key={category}>\n <Menu.Label>{category}</Menu.Label>\n {components.map(({ componentUid, info: { displayName } }) => (\n <MenuItem\n key={componentUid}\n onSelect={() => onAddComponent?.(componentUid, index)}\n >\n {displayName}\n </MenuItem>\n ))}\n </React.Fragment>\n ))}\n </Menu.SubContent>\n </Menu.SubRoot>\n <Menu.SubRoot>\n <Menu.SubTrigger>\n {formatMessage({\n id: getTranslation('components.DynamicZone.add-item-below'),\n defaultMessage: 'Add component below',\n })}\n </Menu.SubTrigger>\n <Menu.SubContent>\n {Object.entries(dynamicComponentsByCategory).map(([category, components]) => (\n <React.Fragment key={category}>\n <Menu.Label>{category}</Menu.Label>\n {components.map(({ componentUid, info: { displayName } }) => (\n <MenuItem\n key={componentUid}\n onSelect={() => onAddComponent?.(componentUid, index + 1)}\n >\n {displayName}\n </MenuItem>\n ))}\n </React.Fragment>\n ))}\n </Menu.SubContent>\n </Menu.SubRoot>\n </Menu.Content>\n </Menu.Root>\n </ActionsFlex>\n );\n\n return (\n <ComponentContainer as=\"li\" width=\"100%\">\n <Flex justifyContent=\"center\">\n <Rectangle background=\"neutral200\" />\n </Flex>\n {/* @ts-expect-error – Fix this ref issue */}\n <StyledBox ref={composedBoxRefs} hasRadius>\n {isDragging ? (\n <Preview />\n ) : (\n <Accordion expanded={isOpen} onToggle={handleToggle} size=\"S\" error={errorMessage}>\n <AccordionToggle\n // @ts-expect-error – Issue in DS where AccordionToggle props don't extend TextButton\n startIcon={<ComponentIcon icon={icon} showBackground={false} size=\"S\" />}\n action={accordionActions}\n title={`${friendlyName}${mainValue}`}\n togglePosition=\"left\"\n />\n <AccordionContent>\n <AccordionContentRadius background=\"neutral0\">\n <FieldComponent\n componentUid={componentUid}\n name={`${name}.${index}`}\n isFromDynamicZone\n />\n </AccordionContentRadius>\n </AccordionContent>\n </Accordion>\n )}\n </StyledBox>\n </ComponentContainer>\n );\n};\n\nconst ActionsFlex = styled(Flex)`\n /* \n we need to remove the background from the button but we can't \n wrap the element in styled because it breaks the forwardedAs which\n we need for drag handler to work on firefox\n */\n div[role='button'] {\n background: transparent;\n }\n`;\n\nconst IconButtonCustom = styled(IconButton)<{ expanded?: boolean }>`\n background-color: transparent;\n\n svg path {\n fill: ${({ theme, expanded }) =>\n expanded ? theme.colors.primary600 : theme.colors.neutral600};\n }\n`;\n\n// TODO: Delete once https://github.com/strapi/design-system/pull/858\n// is merged and released.\nconst StyledBox = styled(Box)`\n > div:first-child {\n box-shadow: ${({ theme }) => theme.shadows.tableShadow};\n }\n`;\n\nconst AccordionContentRadius = styled(Box)`\n border-radius: 0 0 ${({ theme }) => theme.spaces[1]} ${({ theme }) => theme.spaces[1]};\n`;\n\nconst Rectangle = styled(Box)`\n width: ${({ theme }) => theme.spaces[2]};\n height: ${({ theme }) => theme.spaces[4]};\n`;\n\nconst Preview = styled.span`\n display: block;\n background-color: ${({ theme }) => theme.colors.primary100};\n outline: 1px dashed ${({ theme }) => theme.colors.primary500};\n outline-offset: -1px;\n padding: ${({ theme }) => theme.spaces[6]};\n`;\n\nconst ComponentContainer = styled(Box)`\n list-style: none;\n padding: 0;\n margin: 0;\n`;\n\nexport { DynamicComponent };\nexport type { DynamicComponentProps };\n","import * as React from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { pxToRem } from '@strapi/helper-plugin';\nimport { MessageDescriptor, useIntl } from 'react-intl';\n\ninterface DynamicZoneLabelProps {\n label?: string;\n labelAction?: React.ReactNode;\n name: string;\n numberOfComponents?: number;\n required?: boolean;\n intlDescription?: MessageDescriptor;\n}\n\nconst DynamicZoneLabel = ({\n label,\n labelAction,\n name,\n numberOfComponents = 0,\n required,\n intlDescription,\n}: DynamicZoneLabelProps) => {\n const { formatMessage } = useIntl();\n const intlLabel = formatMessage({ id: label || name, defaultMessage: label || name });\n\n return (\n <Flex justifyContent=\"center\">\n <Box\n paddingTop={3}\n paddingBottom={3}\n paddingRight={4}\n paddingLeft={4}\n borderRadius=\"26px\"\n background=\"neutral0\"\n shadow=\"filterShadow\"\n color=\"neutral500\"\n >\n <Flex direction=\"column\" justifyContent=\"center\">\n <Flex maxWidth={pxToRem(356)}>\n <Typography variant=\"pi\" textColor=\"neutral600\" fontWeight=\"bold\" ellipsis>\n {intlLabel}&nbsp;\n </Typography>\n <Typography variant=\"pi\" textColor=\"neutral600\" fontWeight=\"bold\">\n ({numberOfComponents})\n </Typography>\n {required && <Typography textColor=\"danger600\">*</Typography>}\n {labelAction && <Box paddingLeft={1}>{labelAction}</Box>}\n </Flex>\n {intlDescription && (\n <Box paddingTop={1} maxWidth={pxToRem(356)}>\n <Typography variant=\"pi\" textColor=\"neutral600\" ellipsis>\n {formatMessage(intlDescription)}\n </Typography>\n </Box>\n )}\n </Flex>\n </Box>\n </Flex>\n );\n};\n\nexport { DynamicZoneLabel };\nexport type { DynamicZoneLabelProps };\n","import * as React from 'react';\n\nimport { Box, Flex, VisuallyHidden } from '@strapi/design-system';\nimport { NotAllowedInput, useCMEditViewDataManager, useNotification } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { useContentTypeLayout } from '../../hooks/useContentTypeLayout';\nimport { getTranslation } from '../../utils/translations';\n\nimport { AddComponentButton } from './AddComponentButton';\nimport { ComponentPicker } from './ComponentPicker';\nimport { DynamicComponent, DynamicComponentProps } from './DynamicComponent';\nimport { DynamicZoneLabel } from './DynamicZoneLabel';\n\nimport type { EditLayoutRow } from '../../utils/layouts';\nimport type { Attribute } from '@strapi/types';\n\ninterface DynamicZoneProps extends Pick<EditLayoutRow, 'metadatas'> {\n name: string;\n fieldSchema?: Attribute.DynamicZone;\n labelAction?: React.ReactNode;\n}\n\nconst DynamicZone = ({ name, labelAction, fieldSchema, metadatas }: DynamicZoneProps) => {\n // We cannot use the default props here\n const { max = Infinity, min = -Infinity, components = [], required = false } = fieldSchema ?? {};\n\n const [addComponentIsOpen, setAddComponentIsOpen] = React.useState(false);\n const [liveText, setLiveText] = React.useState('');\n\n const {\n addComponentToDynamicZone,\n createActionAllowedFields,\n isCreatingEntry,\n formErrors,\n modifiedData,\n moveComponentField,\n removeComponentFromDynamicZone,\n readActionAllowedFields,\n updateActionAllowedFields,\n } = useCMEditViewDataManager();\n\n const dynamicDisplayedComponents = React.useMemo(\n () =>\n ((modifiedData?.[name] as []) ?? []).map(\n (data: Attribute.GetValue<Attribute.DynamicZone>[number] & { __temp_key__: number }) => {\n return {\n componentUid: data.__component,\n id: data.id ?? data.__temp_key__,\n };\n }\n ),\n [modifiedData, name]\n );\n\n const { getComponentLayout, components: allComponents } = useContentTypeLayout();\n\n const dynamicComponentsByCategory = React.useMemo(() => {\n return components.reduce<NonNullable<DynamicComponentProps['dynamicComponentsByCategory']>>(\n (acc, componentUid) => {\n const layout = getComponentLayout(componentUid);\n\n const { category, info, attributes } = layout;\n\n const component = { componentUid, info, attributes };\n\n if (!acc[category]) {\n acc[category] = [];\n }\n\n acc[category] = [...acc[category], component];\n\n return acc;\n },\n {}\n );\n }, [components, getComponentLayout]);\n\n const { formatMessage } = useIntl();\n\n const toggleNotification = useNotification();\n\n const isFieldAllowed = (\n isCreatingEntry ? createActionAllowedFields : updateActionAllowedFields\n ).includes(name);\n\n const isFieldReadable = (isCreatingEntry ? [] : readActionAllowedFields).includes(name);\n\n const dynamicDisplayedComponentsLength = dynamicDisplayedComponents.length;\n const intlDescription = metadatas.description\n ? { id: metadatas.description, defaultMessage: metadatas.description }\n : undefined;\n\n const dynamicZoneError = formErrors[name];\n\n const missingComponentNumber = min - dynamicDisplayedComponentsLength;\n const hasError = !!dynamicZoneError;\n\n const handleAddComponent = (componentUid: string, position?: number) => {\n setAddComponentIsOpen(false);\n\n const componentLayoutData = getComponentLayout(componentUid);\n\n /**\n * You have to pass _every component_ because the EditViewDataManager is not part of redux\n * and you could have a dynamic component option that contains a component that is not part\n * of the former list. Therefore it's schema is inaccessible leading to a crash.\n */\n addComponentToDynamicZone?.(name, componentLayoutData, allComponents, hasError, position);\n };\n\n const handleClickOpenPicker = () => {\n if (dynamicDisplayedComponentsLength < max) {\n setAddComponentIsOpen((prev) => !prev);\n } else {\n toggleNotification({\n type: 'info',\n message: { id: getTranslation('components.notification.info.maximum-requirement') },\n });\n }\n };\n\n const handleMoveComponent = (newIndex: number, currentIndex: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.reorder'),\n defaultMessage: '{item}, moved. New position in list: {position}.',\n },\n {\n item: `${name}.${currentIndex}`,\n position: getItemPos(newIndex),\n }\n )\n );\n\n moveComponentField?.({\n name,\n newIndex,\n currentIndex,\n });\n };\n\n const getItemPos = (index: number) => `${index + 1} of ${dynamicDisplayedComponents.length}`;\n\n const handleCancel = (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.cancel-item'),\n defaultMessage: '{item}, dropped. Re-order cancelled.',\n },\n {\n item: `${name}.${index}`,\n }\n )\n );\n };\n\n const handleGrabItem = (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.grab-item'),\n defaultMessage: `{item}, grabbed. Current position in list: {position}. Press up and down arrow to change position, Spacebar to drop, Escape to cancel.`,\n },\n {\n item: `${name}.${index}`,\n position: getItemPos(index),\n }\n )\n );\n };\n\n const handleDropItem = (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.drop-item'),\n defaultMessage: `{item}, dropped. Final position in list: {position}.`,\n },\n {\n item: `${name}.${index}`,\n position: getItemPos(index),\n }\n )\n );\n };\n\n const handleRemoveComponent = (name: string, currentIndex: number) => () => {\n removeComponentFromDynamicZone?.(name, currentIndex);\n };\n\n const renderButtonLabel = () => {\n if (addComponentIsOpen) {\n return formatMessage({ id: 'app.utils.close-label', defaultMessage: 'Close' });\n }\n\n if (hasError && dynamicZoneError.id?.includes('max')) {\n return formatMessage({\n id: 'components.Input.error.validation.max',\n defaultMessage: 'The value is too high.',\n });\n }\n\n if (hasError && dynamicZoneError.id?.includes('min')) {\n return formatMessage(\n {\n id: getTranslation(`components.DynamicZone.missing-components`),\n defaultMessage:\n 'There {number, plural, =0 {are # missing components} one {is # missing component} other {are # missing components}}',\n },\n { number: missingComponentNumber }\n );\n }\n\n return formatMessage(\n {\n id: getTranslation('components.DynamicZone.add-component'),\n defaultMessage: 'Add a component to {componentName}',\n },\n { componentName: metadatas.label || name }\n );\n };\n\n if (!isFieldAllowed && (isCreatingEntry || (!isFieldReadable && !isCreatingEntry))) {\n return (\n <NotAllowedInput\n description={intlDescription}\n intlLabel={{ id: metadatas.label, defaultMessage: metadatas.label }}\n labelAction={labelAction}\n name={name}\n />\n );\n }\n\n const ariaDescriptionId = `${name}-item-instructions`;\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {dynamicDisplayedComponentsLength > 0 && (\n <Box>\n <DynamicZoneLabel\n intlDescription={intlDescription}\n label={metadatas.label}\n labelAction={labelAction}\n name={name}\n numberOfComponents={dynamicDisplayedComponentsLength}\n required={required}\n />\n <VisuallyHidden id={ariaDescriptionId}>\n {formatMessage({\n id: getTranslation('dnd.instructions'),\n defaultMessage: `Press spacebar to grab and re-order`,\n })}\n </VisuallyHidden>\n <VisuallyHidden aria-live=\"assertive\">{liveText}</VisuallyHidden>\n <ol aria-describedby={ariaDescriptionId}>\n {dynamicDisplayedComponents.map(({ componentUid, id }, index) => (\n <DynamicComponent\n componentUid={componentUid}\n formErrors={formErrors}\n key={`${componentUid}-${id}`}\n index={index}\n isFieldAllowed={isFieldAllowed}\n name={name}\n onMoveComponent={handleMoveComponent}\n onRemoveComponentClick={handleRemoveComponent(name, index)}\n onCancel={handleCancel}\n onDropItem={handleDropItem}\n onGrabItem={handleGrabItem}\n onAddComponent={handleAddComponent}\n dynamicComponentsByCategory={dynamicComponentsByCategory}\n />\n ))}\n </ol>\n </Box>\n )}\n <Flex justifyContent=\"center\">\n <AddComponentButton\n hasError={hasError}\n isDisabled={!isFieldAllowed}\n isOpen={addComponentIsOpen}\n onClick={handleClickOpenPicker}\n >\n {renderButtonLabel()}\n </AddComponentButton>\n </Flex>\n <ComponentPicker\n dynamicComponentsByCategory={dynamicComponentsByCategory}\n isOpen={addComponentIsOpen}\n onClickAddComponent={handleAddComponent}\n />\n </Flex>\n );\n};\n\nDynamicZone.defaultProps = {\n fieldSchema: {},\n labelAction: null,\n};\n\nDynamicZone.propTypes = {\n fieldSchema: PropTypes.shape({\n components: PropTypes.array,\n max: PropTypes.number,\n min: PropTypes.number,\n required: PropTypes.bool,\n }),\n labelAction: PropTypes.element,\n metadatas: PropTypes.shape({\n description: PropTypes.string,\n label: PropTypes.string,\n }).isRequired,\n name: PropTypes.string.isRequired,\n};\n\nexport { DynamicZone };\nexport type { DynamicZoneProps };\n","import { translatedErrors as errorsTrads } from '@strapi/helper-plugin';\nimport { Attribute } from '@strapi/types';\nimport isBoolean from 'lodash/isBoolean';\nimport isEmpty from 'lodash/isEmpty';\nimport isNaN from 'lodash/isNaN';\nimport toNumber from 'lodash/toNumber';\nimport * as yup from 'yup';\n\nimport { isFieldTypeNumber } from './fields';\nimport { FormattedComponentLayout, FormattedContentTypeLayout } from './layouts';\n\nimport type Lazy from 'yup/lib/Lazy';\nimport type { MixedSchema } from 'yup/lib/mixed';\n\n/* -------------------------------------------------------------------------------------------------\n * createYupSchema\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * TODO: this whole thing needs actually fixing because it's useless without types\n * but it obviously something has gone wrong between conception and now for it to need\n * this many ts-error directives.\n *\n * See CONTENT-2107\n */\n\ninterface CreateYupSchemaOpts {\n isCreatingEntry?: boolean;\n isDraft?: boolean;\n isFromComponent?: boolean;\n isJSONTestDisabled?: boolean;\n}\n\nconst createYupSchema = (\n model: FormattedContentTypeLayout | FormattedComponentLayout,\n { components }: { components: Record<string, FormattedComponentLayout> },\n options: CreateYupSchemaOpts = {\n isCreatingEntry: true,\n isDraft: true,\n isFromComponent: false,\n isJSONTestDisabled: false,\n }\n) => {\n const { attributes } = model;\n\n return yup.object().shape(\n Object.keys(attributes).reduce<Record<string, MixedSchema | Lazy<any>>>((acc, current) => {\n const attribute = attributes[current];\n\n if (\n attribute.type !== 'relation' &&\n attribute.type !== 'component' &&\n attribute.type !== 'dynamiczone'\n ) {\n // @ts-expect-error – see comment at top of file\n const formatted = createYupSchemaAttribute(attribute.type, attribute, options);\n acc[current] = formatted;\n }\n\n if (attribute.type === 'relation') {\n acc[current] = [\n 'oneWay',\n 'oneToOne',\n 'manyToOne',\n 'oneToManyMorph',\n 'oneToOneMorph',\n // @ts-expect-error – see comment at top of file\n ].includes(attribute.relationType)\n ? yup.object().nullable()\n : yup.array().nullable();\n }\n\n if (attribute.type === 'component') {\n const componentFieldSchema = createYupSchema(\n components[attribute.component],\n {\n components,\n },\n { ...options, isFromComponent: true }\n );\n\n if (attribute.repeatable === true) {\n const { min, max, required } = attribute;\n\n const componentSchema = yup.lazy((value) => {\n let baseSchema = yup.array().of(componentFieldSchema);\n\n if (min) {\n if (required) {\n baseSchema = baseSchema.min(min, errorsTrads.min);\n // @ts-expect-error – see comment at top of file\n } else if (required !== true && isEmpty(value)) {\n // @ts-expect-error – see comment at top of file\n baseSchema = baseSchema.nullable();\n } else {\n baseSchema = baseSchema.min(min, errorsTrads.min);\n }\n } else if (required && !options.isDraft) {\n baseSchema = baseSchema.min(1, errorsTrads.required);\n }\n\n if (max) {\n baseSchema = baseSchema.max(max, errorsTrads.max);\n }\n\n return baseSchema;\n });\n\n acc[current] = componentSchema;\n\n return acc;\n }\n const componentSchema = yup.lazy((obj) => {\n if (obj !== undefined) {\n return attribute.required === true && !options.isDraft\n ? componentFieldSchema.defined()\n : componentFieldSchema.nullable();\n }\n\n return attribute.required === true ? yup.object().defined() : yup.object().nullable();\n });\n\n acc[current] = componentSchema;\n\n return acc;\n }\n\n if (attribute.type === 'dynamiczone') {\n let dynamicZoneSchema = yup.array().of(\n // @ts-expect-error – see comment at top of file\n yup.lazy(({ __component }) => {\n return createYupSchema(\n components[__component],\n { components },\n { ...options, isFromComponent: true }\n );\n })\n );\n\n const { max, min } = attribute;\n\n if (min) {\n if (attribute.required) {\n dynamicZoneSchema = dynamicZoneSchema\n // @ts-expect-error – see comment at top of file\n .test('min', errorsTrads.min, (value) => {\n if (options.isCreatingEntry) {\n return value && value.length >= min;\n }\n\n if (value === undefined) {\n return true;\n }\n\n return value !== null && value.length >= min;\n })\n .test('required', errorsTrads.required, (value) => {\n if (options.isCreatingEntry) {\n return value !== null || value !== undefined;\n }\n\n if (value === undefined) {\n return true;\n }\n\n return value !== null;\n });\n } else {\n // @ts-expect-error – see comment at top of file\n dynamicZoneSchema = dynamicZoneSchema.notEmptyMin(min);\n }\n } else if (attribute.required && !options.isDraft) {\n dynamicZoneSchema = dynamicZoneSchema.test('required', errorsTrads.required, (value) => {\n if (options.isCreatingEntry) {\n return value !== null || value !== undefined;\n }\n\n if (value === undefined) {\n return true;\n }\n\n return value !== null;\n });\n }\n\n if (max) {\n dynamicZoneSchema = dynamicZoneSchema.max(max, errorsTrads.max);\n }\n\n acc[current] = dynamicZoneSchema;\n }\n\n return acc;\n }, {})\n );\n};\n\nconst createYupSchemaAttribute = (\n type: Attribute.Any['type'],\n validations: Exclude<\n Attribute.Any,\n { type: 'dynamiczone' } | { type: 'component' } | { type: 'relation' }\n >,\n options: Required<CreateYupSchemaOpts>\n) => {\n let schema = yup.mixed();\n\n if (['string', 'uid', 'text', 'richtext', 'email', 'password', 'enumeration'].includes(type)) {\n schema = yup.string();\n }\n\n if (type === 'blocks') {\n schema = yup.mixed().test('isJSON', errorsTrads.json, (value) => {\n // Disable the test for bulk publish, it's valid when it comes from the db\n if (options.isJSONTestDisabled) {\n return true;\n }\n\n // Don't run validations on drafts\n if (options.isDraft) {\n return true;\n }\n\n // The backend validates the actual schema, check if a value different than null is not an array\n if (value && !Array.isArray(value)) {\n return false;\n }\n\n return true;\n });\n }\n\n if (type === 'json') {\n schema = yup\n // @ts-expect-error – see comment at top of file\n .mixed(errorsTrads.json)\n .test('isJSON', errorsTrads.json, (value) => {\n // Disable the test for bulk publish, it's valid when it comes from the db\n if (options.isJSONTestDisabled) {\n return true;\n }\n\n if (!value || !value.length) {\n return true;\n }\n\n try {\n JSON.parse(value);\n\n return true;\n } catch (err) {\n return false;\n }\n })\n .nullable()\n .test('required', errorsTrads.required, (value) => {\n if (validations.required && (!value || !value.length)) {\n return false;\n }\n\n return true;\n });\n }\n\n if (type === 'email') {\n // @ts-expect-error – see comment at top of file\n schema = schema.email(errorsTrads.email);\n }\n\n if (['number', 'integer', 'float', 'decimal'].includes(type)) {\n schema = yup\n .number()\n .transform((cv) => (isNaN(cv) ? undefined : cv))\n // @ts-expect-error – see comment at top of file\n .typeError();\n }\n\n if (type === 'biginteger') {\n schema = yup.string().matches(/^-?\\d*$/);\n }\n\n if (['date', 'datetime'].includes(type)) {\n schema = yup.date();\n }\n\n Object.keys(validations).forEach((validation) => {\n const validationValue = validations[validation as keyof typeof validations];\n\n if (\n !!validationValue ||\n // @ts-expect-error – see comment at top of file\n (!isBoolean(validationValue) && Number.isInteger(Math.floor(validationValue))) ||\n // @ts-expect-error – see comment at top of file\n validationValue === 0\n ) {\n switch (validation) {\n case 'required': {\n if (!options.isDraft) {\n if (type === 'password' && options.isCreatingEntry) {\n schema = schema.required(errorsTrads.required);\n }\n\n if (type !== 'password') {\n if (options.isCreatingEntry) {\n schema = schema.required(errorsTrads.required);\n } else {\n schema = schema.test('required', errorsTrads.required, (value) => {\n // Field is not touched and the user is editing the entry\n if (value === undefined && !options.isFromComponent) {\n return true;\n }\n\n if (isFieldTypeNumber(type)) {\n if (value === 0) {\n return true;\n }\n\n return !!value;\n }\n\n if (type === 'boolean') {\n // Boolean value can be undefined/unset in modifiedData when generated in a new component\n return value !== null && value !== undefined;\n }\n\n if (type === 'date' || type === 'datetime') {\n if (typeof value === 'string') {\n return !isEmpty(value);\n }\n\n return !isEmpty(value?.toString());\n }\n\n return !isEmpty(value);\n });\n }\n }\n }\n\n break;\n }\n\n case 'max': {\n if (type === 'biginteger') {\n // @ts-expect-error – see comment at top of file\n schema = schema.isInferior(errorsTrads.max, validationValue);\n } else {\n // @ts-expect-error – see comment at top of file\n schema = schema.max(validationValue, errorsTrads.max);\n }\n break;\n }\n case 'maxLength':\n // @ts-expect-error – see comment at top of file\n schema = schema.max(validationValue, errorsTrads.maxLength);\n break;\n case 'min': {\n if (type === 'biginteger') {\n // @ts-expect-error – see comment at top of file\n schema = schema.isSuperior(errorsTrads.min, validationValue);\n } else {\n // @ts-expect-error – see comment at top of file\n schema = schema.min(validationValue, errorsTrads.min);\n }\n break;\n }\n case 'minLength': {\n if (!options.isDraft) {\n // @ts-expect-error – see comment at top of file\n schema = schema.min(validationValue, errorsTrads.minLength);\n }\n break;\n }\n case 'regex':\n // @ts-expect-error – see comment at top of file\n schema = schema.matches(new RegExp(validationValue), {\n message: errorsTrads.regex,\n excludeEmptyString: !validations.required,\n });\n break;\n case 'lowercase':\n if (['text', 'textarea', 'email', 'string'].includes(type)) {\n // @ts-expect-error – see comment at top of file\n schema = schema.strict().lowercase();\n }\n break;\n case 'uppercase':\n if (['text', 'textarea', 'email', 'string'].includes(type)) {\n // @ts-expect-error – see comment at top of file\n schema = schema.strict().uppercase();\n }\n break;\n case 'positive':\n if (isFieldTypeNumber(type)) {\n // @ts-expect-error – see comment at top of file\n schema = schema.positive();\n }\n break;\n case 'negative':\n if (isFieldTypeNumber(type)) {\n // @ts-expect-error – see comment at top of file\n schema = schema.negative();\n }\n break;\n default:\n schema = schema.nullable();\n }\n }\n });\n\n return schema;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Addition Yup methods\n * -----------------------------------------------------------------------------------------------*/\n\nyup.addMethod(yup.mixed, 'defined', function () {\n return this.test('defined', errorsTrads.required, (value) => value !== undefined);\n});\n\nyup.addMethod(yup.array, 'notEmptyMin', function (min) {\n return this.test('notEmptyMin', errorsTrads.min, (value) => {\n if (!value || !value.length) {\n return true;\n }\n\n return value.length >= min;\n });\n});\n\nyup.addMethod(yup.string, 'isInferior', function (message, max) {\n return this.test('isInferior', message, function (value) {\n if (!value) {\n return true;\n }\n\n if (Number.isNaN(toNumber(value))) {\n return true;\n }\n\n return toNumber(max) >= toNumber(value);\n });\n});\n\nyup.addMethod(yup.string, 'isSuperior', function (message, min) {\n return this.test('isSuperior', message, function (value) {\n if (!value) {\n return true;\n }\n\n if (Number.isNaN(toNumber(value))) {\n return true;\n }\n\n return toNumber(value) >= toNumber(min);\n });\n});\n\nexport { createYupSchema };\n","const CREATOR_FIELDS = ['createdBy', 'updatedBy'];\n\nexport { CREATOR_FIELDS };\n","import type { FormattedComponentLayout } from '../../../utils/layouts';\nimport type { Attribute, Common } from '@strapi/types';\n\ntype ReplacementFn<\n TData extends Record<string, any>,\n TKey extends keyof TData,\n TReplacementValue\n> = (data: TData[TKey], args: { path: string[]; parent: TData }) => TReplacementValue;\n\n/**\n * This function will recursively find everything and replace it with a value\n * based on the boolean return of the predicate function e.g. `type === 'relation'`.\n *\n * If you provide a function it will call that function with data value you're replacing with\n * a second argument with the path to the value and it's parent.\n *\n * It's original use was for the preperation of action items for the INIT_FORM action. It requires\n * knowledge of the `components` in the entity, however `components` doesn't change nor does the predicate\n * function so we don't need to pass it everytime hence why it's curried.\n *\n */\nconst findAllAndReplaceSetup = <\n TReplacementValue,\n TData extends Record<string, any> = Record<string, any>\n>(\n components: Record<string, FormattedComponentLayout>,\n predicate: (\n value: FormattedComponentLayout['attributes'][string],\n args: { path: string[]; parent: { [key: string]: Attribute.Any } | Attribute.Any }\n ) => boolean = () => false,\n replacement?: ReplacementFn<TData, keyof TData, TReplacementValue> | TReplacementValue\n) => {\n const findAllAndReplace = <TData extends Record<string, any> = Record<string, any>>(\n data: TData,\n attributes: { [key: string]: Attribute.Any },\n {\n ignoreFalseyValues = false,\n path = [],\n parent = attributes,\n }: {\n ignoreFalseyValues?: boolean;\n path?: string[];\n parent?: { [key: string]: Attribute.Any } | Attribute.Any;\n } = {}\n ) => {\n return Object.entries(attributes).reduce<Record<string, any>>(\n (acc, [key, value]) => {\n if (\n ignoreFalseyValues &&\n (acc === null || acc === undefined || acc[key] === undefined || acc[key] === null)\n ) {\n return acc;\n }\n\n if (predicate(value, { path: [...path, key], parent })) {\n acc[key] =\n typeof replacement === 'function'\n ? // @ts-expect-error – TODO: Fix this.\n replacement(acc[key], { path: [...path, key], parent: acc })\n : replacement;\n }\n\n if (value.type === 'component') {\n const componentAttributes = components[value.component].attributes;\n\n if (!value.repeatable && acc[key] && typeof acc[key] === 'object') {\n acc[key] = findAllAndReplace(acc[key], componentAttributes, {\n ignoreFalseyValues,\n path: [...path, key],\n parent: attributes[key],\n });\n } else if (value.repeatable && Array.isArray(acc[key])) {\n acc[key] = (\n acc[key] as Attribute.GetValue<Attribute.Component<Common.UID.Component, true>>\n ).map((datum, index) => {\n const data = findAllAndReplace(datum, componentAttributes, {\n ignoreFalseyValues,\n path: [...path, key, index.toString()],\n parent: attributes[key],\n });\n\n return data;\n });\n }\n } else if (value.type === 'dynamiczone' && Array.isArray(acc[key])) {\n acc[key] = (acc[key] as Attribute.GetValue<Attribute.DynamicZone>).map((datum, index) => {\n const componentAttributes = components[datum.__component].attributes;\n const data = findAllAndReplace(datum, componentAttributes, {\n ignoreFalseyValues,\n path: [...path, key, index.toString()],\n parent: attributes[key],\n });\n\n return data;\n });\n }\n\n return acc;\n },\n { ...data }\n );\n };\n\n return findAllAndReplace;\n};\n\nexport { findAllAndReplaceSetup as findAllAndReplace };\n","const moveFields = <TValue>(initialValue: TValue[], from: number, to: number, value: TValue) => {\n const returnedValue = initialValue.slice();\n\n returnedValue.splice(from, 1);\n returnedValue.splice(to, 0, value);\n\n return returnedValue;\n};\n\nexport { moveFields };\n","import { generateNKeysBetween } from 'fractional-indexing';\nimport produce from 'immer';\nimport cloneDeep from 'lodash/cloneDeep';\nimport get from 'lodash/get';\nimport set from 'lodash/set';\nimport take from 'lodash/take';\nimport uniqBy from 'lodash/uniqBy';\nimport unset from 'lodash/unset';\n\nimport { CREATOR_FIELDS } from '../../constants/attributes';\nimport { getMaxTempKey } from '../../utils/fields';\n\nimport { findAllAndReplace } from './utils/findAllAndReplace';\nimport { moveFields } from './utils/moveFields';\n\nimport type { FormattedComponentLayout, FormattedContentTypeLayout } from '../../utils/layouts';\nimport type { Attribute, Entity } from '@strapi/types';\n\ninterface EditViewDataManagerState {\n componentsDataStructure: Record<string, any>;\n contentTypeDataStructure: Record<string, any>;\n formErrors: Record<string, any>;\n initialData: Record<string, Attribute.GetValue<Attribute.Any>>;\n modifiedData: Record<string, Attribute.GetValue<Attribute.Any>>;\n shouldCheckErrors: boolean;\n modifiedDZName: string | null;\n publishConfirmation: {\n show: boolean;\n draftCount: number;\n };\n}\n\nconst initialState = {\n componentsDataStructure: {},\n contentTypeDataStructure: {},\n formErrors: {},\n initialData: {},\n modifiedData: {},\n shouldCheckErrors: false,\n modifiedDZName: null,\n publishConfirmation: {\n show: false,\n draftCount: 0,\n },\n} satisfies EditViewDataManagerState;\n\ninterface AddNonRepeatableComponentToFieldAction {\n type: 'ADD_NON_REPEATABLE_COMPONENT_TO_FIELD';\n componentLayoutData: FormattedComponentLayout;\n allComponents: Record<string, FormattedComponentLayout>;\n keys: string[];\n}\n\ninterface AddComponentToDynamicZoneAction {\n type: 'ADD_COMPONENT_TO_DYNAMIC_ZONE';\n componentLayoutData: FormattedComponentLayout;\n allComponents: Record<string, FormattedComponentLayout>;\n keys: string[];\n shouldCheckErrors: boolean;\n position?: number;\n}\n\ninterface AddRepeatableComponentToFieldAction\n extends Omit<AddComponentToDynamicZoneAction, 'type'> {\n type: 'ADD_REPEATABLE_COMPONENT_TO_FIELD';\n}\n\ninterface LoadRelationAction {\n type: 'LOAD_RELATION';\n initialDataPath: string[];\n modifiedDataPath: string[];\n value: Omit<RelationData, '__temp_key__'>[];\n}\n\ninterface ConnectRelationAction {\n type: 'CONNECT_RELATION';\n keys: string[];\n value: Omit<RelationData, '__temp_key__'>;\n toOneRelation?: boolean;\n}\n\ninterface DisconnectRelationAction {\n type: 'DISCONNECT_RELATION';\n keys: string[];\n id: Entity.ID;\n}\n\ninterface MoveComponentFieldAction {\n type: 'MOVE_COMPONENT_FIELD';\n keys: string[];\n oldIndex: number;\n newIndex: number;\n}\n\ninterface MoveComponentUpAction {\n type: 'MOVE_COMPONENT_UP';\n currentIndex: number;\n dynamicZoneName: string;\n shouldCheckErrors: boolean;\n}\n\ninterface MoveComponentDownAction extends Omit<MoveComponentUpAction, 'type'> {\n type: 'MOVE_COMPONENT_DOWN';\n}\n\ninterface MoveFieldAction {\n type: 'MOVE_FIELD';\n keys: string[];\n dragIndex: number;\n overIndex: number;\n}\n\ninterface InitFormAction {\n type: 'INIT_FORM';\n initialValues: Record<string, any>;\n components: Record<string, FormattedComponentLayout>;\n attributes: FormattedContentTypeLayout['attributes'];\n setModifiedDataOnly?: boolean;\n}\n\ninterface OnChangeAction {\n type: 'ON_CHANGE';\n keys: string[];\n value: Attribute.GetValue<Attribute.Any>;\n shouldSetInitialValue?: boolean;\n}\n\ninterface RemoveComponentFromDynamicZoneAction {\n type: 'REMOVE_COMPONENT_FROM_DYNAMIC_ZONE';\n dynamicZoneName: string;\n index: number;\n shouldCheckErrors: boolean;\n}\n\ninterface RemoveComponentFromFieldAction {\n type: 'REMOVE_COMPONENT_FROM_FIELD';\n keys: string[];\n}\n\ninterface RemovePasswordFieldAction {\n type: 'REMOVE_PASSWORD_FIELD';\n keys: string[];\n}\n\ninterface RemoveRepeatableFieldAction {\n type: 'REMOVE_REPEATABLE_FIELD';\n keys: string[];\n}\n\ninterface ReorderRelationAction {\n type: 'REORDER_RELATION';\n keys: string[];\n oldIndex: number;\n newIndex: number;\n}\n\ninterface SetDefaultDataStructuresAction {\n type: 'SET_DEFAULT_DATA_STRUCTURES';\n componentsDataStructure: Record<string, any>;\n contentTypeDataStructure: Record<string, any>;\n}\n\ninterface SetFormErrorsAction {\n type: 'SET_FORM_ERRORS';\n errors: Record<string, any>;\n}\n\ninterface TriggerFormValidationAction {\n type: 'TRIGGER_FORM_VALIDATION';\n}\n\ninterface SetPublishConfirmationAction {\n type: 'SET_PUBLISH_CONFIRMATION';\n publishConfirmation: {\n show: boolean;\n draftCount: number;\n };\n}\n\ninterface ResetPublishConfirmationAction {\n type: 'RESET_PUBLISH_CONFIRMATION';\n}\n\ntype Action =\n | AddNonRepeatableComponentToFieldAction\n | AddComponentToDynamicZoneAction\n | AddRepeatableComponentToFieldAction\n | LoadRelationAction\n | ConnectRelationAction\n | DisconnectRelationAction\n | MoveComponentFieldAction\n | MoveComponentUpAction\n | MoveComponentDownAction\n | MoveFieldAction\n | InitFormAction\n | OnChangeAction\n | RemoveComponentFromDynamicZoneAction\n | RemoveComponentFromFieldAction\n | RemovePasswordFieldAction\n | RemoveRepeatableFieldAction\n | ReorderRelationAction\n | SetDefaultDataStructuresAction\n | SetFormErrorsAction\n | TriggerFormValidationAction\n | SetPublishConfirmationAction\n | ResetPublishConfirmationAction;\n\nexport interface RelationData {\n id: Entity.ID;\n __temp_key__: number;\n}\n\nconst reducer = (state: EditViewDataManagerState, action: Action) =>\n // eslint-disable-next-line consistent-return\n produce(state, (draftState) => {\n switch (action.type) {\n case 'ADD_NON_REPEATABLE_COMPONENT_TO_FIELD': {\n const { componentLayoutData, allComponents } = action;\n\n const defaultDataStructure = {\n ...state.componentsDataStructure[componentLayoutData.uid],\n };\n\n const findAllRelationsAndReplaceWithEmptyArray = findAllAndReplace(\n allComponents,\n (value) => value.type === 'relation',\n []\n );\n\n const componentDataStructure = findAllRelationsAndReplaceWithEmptyArray(\n defaultDataStructure,\n componentLayoutData.attributes\n );\n\n set(draftState, ['modifiedData', ...action.keys], componentDataStructure);\n\n break;\n }\n case 'ADD_COMPONENT_TO_DYNAMIC_ZONE':\n case 'ADD_REPEATABLE_COMPONENT_TO_FIELD': {\n const {\n keys,\n allComponents,\n componentLayoutData,\n shouldCheckErrors,\n position = undefined,\n } = action;\n\n if (shouldCheckErrors) {\n draftState.shouldCheckErrors = !state.shouldCheckErrors;\n }\n\n if (action.type === 'ADD_COMPONENT_TO_DYNAMIC_ZONE') {\n draftState.modifiedDZName = keys[0];\n }\n\n const currentValue = [...get(state, ['modifiedData', ...keys], [])];\n\n let actualPosition = position;\n\n if (actualPosition === undefined) {\n actualPosition = currentValue.length;\n } else if (actualPosition < 0) {\n actualPosition = 0;\n }\n\n const defaultDataStructure =\n action.type === 'ADD_COMPONENT_TO_DYNAMIC_ZONE'\n ? {\n ...state.componentsDataStructure[componentLayoutData.uid],\n __component: componentLayoutData.uid,\n __temp_key__: getMaxTempKey(currentValue) + 1,\n }\n : {\n ...state.componentsDataStructure[componentLayoutData.uid],\n __temp_key__: getMaxTempKey(currentValue) + 1,\n };\n\n const findAllRelationsAndReplaceWithEmptyArray = findAllAndReplace(\n allComponents,\n (value) => value.type === 'relation',\n []\n );\n\n const componentDataStructure = findAllRelationsAndReplaceWithEmptyArray(\n defaultDataStructure,\n componentLayoutData.attributes\n );\n\n currentValue.splice(actualPosition, 0, componentDataStructure);\n\n set(draftState, ['modifiedData', ...keys], currentValue);\n\n break;\n }\n case 'LOAD_RELATION': {\n const { initialDataPath, modifiedDataPath, value } = action;\n\n const initialDataRelations = (get(state, initialDataPath) ?? []) as RelationData[];\n const modifiedDataRelations = get(state, modifiedDataPath);\n\n const valuesToLoad = value.filter((relation) => {\n return !initialDataRelations.some((initialDataRelation) => {\n return initialDataRelation.id === relation.id;\n });\n });\n\n const keys = generateNKeysBetween(\n null,\n modifiedDataRelations[0]?.__temp_key__,\n valuesToLoad.length\n );\n\n /**\n * Check if the values we're loading are already in initial\n * data if they are then we don't need to load them at all\n */\n\n const valuesWithKeys = valuesToLoad.map((relation, index) => ({\n ...relation,\n __temp_key__: keys[index],\n }));\n\n /**\n * We need to set the value also on modifiedData, because initialData\n * and modifiedData need to stay in sync, so that the CM can compare\n * both states, to render the dirty UI state\n */\n set(\n draftState,\n initialDataPath,\n uniqBy([...valuesWithKeys, ...initialDataRelations], 'id')\n );\n set(\n draftState,\n modifiedDataPath,\n uniqBy([...valuesWithKeys, ...modifiedDataRelations], 'id')\n );\n\n break;\n }\n case 'CONNECT_RELATION': {\n const path = ['modifiedData', ...action.keys];\n const { value, toOneRelation } = action;\n\n /**\n * If the field is a single relation field we don't want to append\n * we just want to replace the value.\n */\n if (toOneRelation) {\n set(draftState, path, [value]);\n } else {\n const modifiedDataRelations = get(state, path);\n const [key] = generateNKeysBetween(modifiedDataRelations.at(-1)?.__temp_key__, null, 1);\n\n const newRelations = [...modifiedDataRelations, { ...value, __temp_key__: key }];\n set(draftState, path, newRelations);\n }\n\n break;\n }\n case 'DISCONNECT_RELATION': {\n const path = ['modifiedData', ...action.keys];\n const { id } = action;\n const modifiedDataRelation = get(state, [...path]) as RelationData[];\n\n const newRelations = modifiedDataRelation.filter((rel) => rel.id !== id);\n\n set(draftState, path, newRelations);\n\n break;\n }\n case 'MOVE_COMPONENT_FIELD':\n case 'REORDER_RELATION': {\n const { oldIndex, newIndex, keys } = action;\n const path = ['modifiedData', ...keys];\n const modifiedDataRelations = get(state, [...path]);\n\n const currentItem = modifiedDataRelations[oldIndex];\n\n const newRelations = [...modifiedDataRelations];\n\n if (action.type === 'REORDER_RELATION') {\n const startKey =\n oldIndex > newIndex\n ? modifiedDataRelations[newIndex - 1]?.__temp_key__\n : modifiedDataRelations[newIndex]?.__temp_key__;\n const endKey =\n oldIndex > newIndex\n ? modifiedDataRelations[newIndex]?.__temp_key__\n : modifiedDataRelations[newIndex + 1]?.__temp_key__;\n const [newKey] = generateNKeysBetween(startKey, endKey, 1);\n\n newRelations.splice(oldIndex, 1);\n newRelations.splice(newIndex, 0, { ...currentItem, __temp_key__: newKey });\n } else {\n newRelations.splice(oldIndex, 1);\n newRelations.splice(newIndex, 0, currentItem);\n }\n\n set(draftState, path, newRelations);\n\n break;\n }\n /**\n * This action will be called when you open your entry (first load)\n * but also every time you press publish.\n */\n case 'INIT_FORM': {\n const { initialValues, components = {}, attributes = {}, setModifiedDataOnly } = action;\n\n /**\n * You can't mutate an actions value.\n * and spreading an object only clones\n * the first level, the deeply nested values\n * are a reference.\n */\n const data = cloneDeep(initialValues);\n\n const findAllRelationsAndReplaceWithEmptyArray = findAllAndReplace(\n components,\n (value, { path }) => {\n const fieldName = path[path.length - 1];\n // We don't replace creator fields because we already return them without need to populate them separately\n const isCreatorField = CREATOR_FIELDS.includes(fieldName);\n\n return value.type === 'relation' && !isCreatorField;\n },\n (_, { path }) => {\n if (state.modifiedData?.id === data.id && get(state.modifiedData, path)) {\n return get(state.modifiedData, path);\n }\n\n return [];\n }\n );\n\n const mergedDataWithPreparedRelations = findAllRelationsAndReplaceWithEmptyArray(\n data,\n attributes\n );\n\n const findComponentsAndReplaceWithTempKey = findAllAndReplace(\n components,\n (value) =>\n value.type === 'dynamiczone' || (value.type === 'component' && !value.repeatable),\n (data) => {\n /**\n * If the data is an array, we have the dynamic zone if it's not, its a regular component.\n */\n return Array.isArray(data)\n ? data.map((datum, index) => ({\n ...datum,\n __temp_key__: index,\n }))\n : {\n ...data,\n __temp_key__: 0,\n };\n }\n );\n\n const mergedDataWithTmpKeys = findComponentsAndReplaceWithTempKey(\n mergedDataWithPreparedRelations,\n attributes,\n { ignoreFalseyValues: true }\n );\n\n if (!setModifiedDataOnly) {\n draftState.initialData = mergedDataWithTmpKeys;\n }\n\n draftState.modifiedData = mergedDataWithTmpKeys;\n\n draftState.formErrors = {};\n\n draftState.modifiedDZName = null;\n draftState.shouldCheckErrors = false;\n break;\n }\n case 'MOVE_COMPONENT_UP':\n case 'MOVE_COMPONENT_DOWN': {\n const { currentIndex, dynamicZoneName, shouldCheckErrors } = action;\n\n if (shouldCheckErrors) {\n draftState.shouldCheckErrors = !state.shouldCheckErrors;\n }\n\n const currentValue = state.modifiedData[dynamicZoneName];\n const nextIndex = action.type === 'MOVE_COMPONENT_UP' ? currentIndex - 1 : currentIndex + 1;\n const valueToInsert = state.modifiedData[dynamicZoneName][currentIndex];\n const updatedValue = moveFields(currentValue, currentIndex, nextIndex, valueToInsert);\n\n set(draftState, ['modifiedData', action.dynamicZoneName], updatedValue);\n\n break;\n }\n case 'MOVE_FIELD': {\n const currentValue = get(state, ['modifiedData', ...action.keys], []).slice();\n const valueToInsert = get(state, ['modifiedData', ...action.keys, action.dragIndex]);\n const updatedValue = moveFields(\n currentValue,\n action.dragIndex,\n action.overIndex,\n valueToInsert\n );\n\n set(draftState, ['modifiedData', ...action.keys], updatedValue);\n\n break;\n }\n case 'ON_CHANGE': {\n const [nonRepeatableComponentKey] = action.keys;\n\n // This is used to set the initialData for inputs\n // that needs an asynchronous initial value like the UID field\n // This is just a temporary patch.\n // TODO: Refactor the default form creation (workflow) to accept async default values.\n if (action.shouldSetInitialValue) {\n set(draftState, ['initialData', ...action.keys], action.value);\n }\n\n // FIXME: not sure this is needed...\n if (\n action.keys.length === 2 &&\n get(state, ['modifiedData', nonRepeatableComponentKey]) === null\n ) {\n set(draftState, ['modifiedData', nonRepeatableComponentKey], {\n [action.keys[1]]: action.value,\n });\n\n break;\n }\n\n set(draftState, ['modifiedData', ...action.keys], action.value);\n\n break;\n }\n case 'REMOVE_COMPONENT_FROM_DYNAMIC_ZONE': {\n if (action.shouldCheckErrors) {\n draftState.shouldCheckErrors = !state.shouldCheckErrors;\n }\n\n draftState.modifiedData[action.dynamicZoneName].splice(action.index, 1);\n\n break;\n }\n case 'REMOVE_COMPONENT_FROM_FIELD': {\n const componentPathToRemove = ['modifiedData', ...action.keys];\n\n set(draftState, componentPathToRemove, null);\n\n break;\n }\n case 'REMOVE_PASSWORD_FIELD': {\n unset(draftState, ['modifiedData', ...action.keys]);\n\n break;\n }\n case 'REMOVE_REPEATABLE_FIELD': {\n const keysLength = action.keys.length - 1;\n const pathToComponentData = ['modifiedData', ...take(action.keys, keysLength)];\n const hasErrors = Object.keys(state.formErrors).length > 0;\n\n if (hasErrors) {\n draftState.shouldCheckErrors = !state.shouldCheckErrors;\n }\n\n const currentValue = get(state, pathToComponentData).slice();\n currentValue.splice(parseInt(action.keys[keysLength], 10), 1);\n\n set(draftState, pathToComponentData, currentValue);\n\n break;\n }\n case 'SET_DEFAULT_DATA_STRUCTURES': {\n draftState.componentsDataStructure = action.componentsDataStructure;\n draftState.contentTypeDataStructure = action.contentTypeDataStructure;\n\n break;\n }\n case 'SET_FORM_ERRORS': {\n draftState.modifiedDZName = null;\n draftState.formErrors = action.errors;\n break;\n }\n case 'TRIGGER_FORM_VALIDATION': {\n const hasErrors = Object.keys(state.formErrors).length > 0;\n\n if (hasErrors) {\n draftState.shouldCheckErrors = !state.shouldCheckErrors;\n }\n\n break;\n }\n case 'SET_PUBLISH_CONFIRMATION': {\n draftState.publishConfirmation = { ...action.publishConfirmation };\n break;\n }\n case 'RESET_PUBLISH_CONFIRMATION': {\n draftState.publishConfirmation = { ...state.publishConfirmation, show: false };\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport { reducer, initialState };\nexport type { EditViewDataManagerState };\n","import get from 'lodash/get';\nimport isArray from 'lodash/isArray';\n\nimport { isObject } from '../../../../utils/objects';\nimport { CREATOR_FIELDS } from '../../../constants/attributes';\nimport { getInitialDataPathUsingTempKeys } from '../../../utils/paths';\n\nimport type { FormattedComponentLayout, FormattedContentTypeLayout } from '../../../utils/layouts';\nimport type { RelationData } from '../reducer';\nimport type { Attribute, Common, Entity } from '@strapi/types';\n\nconst cleanData = (\n {\n browserState, // the modifiedData from REDUX\n serverState, // the initialData from REDUX\n }: { browserState: Record<string, any>; serverState: Record<string, any> },\n currentSchema: FormattedContentTypeLayout,\n componentsSchema: Record<string, FormattedComponentLayout>\n) => {\n const rootServerState = serverState;\n const rootBrowserState = browserState;\n\n const recursiveCleanData = (\n browserState: Record<string, any>,\n serverState: Record<string, any>,\n schema: FormattedContentTypeLayout | FormattedComponentLayout,\n pathToParent: string // the path to the parent of the current entry\n ) => {\n return Object.keys(browserState).reduce<Record<string, any>>((acc, current) => {\n // Creator attributes can be safely ignored because they are handle on the backend\n if (CREATOR_FIELDS.includes(current)) {\n return acc;\n }\n\n const path = pathToParent ? `${pathToParent}.${current}` : current;\n const attribute = schema.attributes[current] ?? {};\n const { type } = attribute;\n\n // This is the field value\n const value = get(browserState, current);\n const oldValue = get(serverState, current);\n let cleanedData;\n\n switch (type) {\n case 'json':\n cleanedData = JSON.parse(value);\n break;\n case 'time': {\n cleanedData = value;\n\n // FIXME\n if (value && value.split(':').length < 3) {\n cleanedData = `${value}:00`;\n }\n\n break;\n }\n case 'media':\n if (attribute.multiple === true) {\n cleanedData = value ? value.filter((file: unknown) => !(file instanceof File)) : null;\n } else {\n cleanedData = get(value, 0) instanceof File ? null : get(value, 'id', null);\n }\n break;\n case 'component':\n if (attribute.repeatable) {\n cleanedData = value\n ? (value as Attribute.GetValue<Attribute.Component<Common.UID.Component, true>>).map(\n (data, index) => {\n const subCleanedData = recursiveCleanData(\n data,\n (oldValue ?? [])[index],\n componentsSchema[attribute.component],\n `${path}.${index}`\n );\n\n return subCleanedData;\n }\n )\n : value;\n } else {\n cleanedData = value\n ? recursiveCleanData(value, oldValue, componentsSchema[attribute.component], path)\n : value;\n }\n\n break;\n\n case 'relation': {\n const trueInitialDataPath = getInitialDataPathUsingTempKeys(\n rootServerState,\n rootBrowserState\n )(path);\n\n /**\n * Because of how repeatable components work when you dig into them the server\n * will have no object to compare too therefore no relation array will be setup\n * because the component has not been initialized, therefore we can safely assume\n * it needs to be added and provide a default empty array.\n */\n const actualOldValue = get(rootServerState, trueInitialDataPath, []) as RelationData[];\n\n interface RelationApiData extends Pick<RelationData, 'id'> {\n position:\n | {\n before: Entity.ID;\n end?: never;\n }\n | {\n before?: never;\n end: boolean;\n };\n }\n\n /**\n * Instead of the full relation object, we only want to send its ID\n * connectedRelations are the items that are in the browserState\n * array but not in the serverState\n */\n const connectedRelations = (value as RelationData[]).reduce<RelationApiData[]>(\n (acc, relation, currentIndex, array) => {\n const relationOnServer = actualOldValue.find(\n (oldRelation) => oldRelation.id === relation.id\n );\n\n const relationInFront = array[currentIndex + 1];\n\n if (!relationOnServer || relationOnServer.__temp_key__ !== relation.__temp_key__) {\n const position = relationInFront ? { before: relationInFront.id } : { end: true };\n\n return [...acc, { id: relation.id, position }];\n }\n\n return acc;\n },\n []\n );\n\n /**\n * disconnectedRelations are the items that are in the serverState but\n * are no longer in the browserState\n */\n const disconnectedRelations = actualOldValue.reduce<Omit<RelationApiData, 'position'>[]>(\n (acc, relation) => {\n if (\n !(value as RelationData[]).find((newRelation) => newRelation.id === relation.id)\n ) {\n return [...acc, { id: relation.id }];\n }\n\n return acc;\n },\n []\n );\n\n cleanedData = {\n disconnect: disconnectedRelations,\n /**\n * Reverse the array because the API sequentially goes through the list\n * so in an instance where you add two to the end it would fail because index0\n * would want to attach itself to index1 which doesn't exist yet.\n */\n connect: connectedRelations.reverse(),\n };\n\n break;\n }\n\n case 'dynamiczone':\n cleanedData = (value as Attribute.GetValue<Attribute.DynamicZone>).map(\n (componentData, index) => {\n const subCleanedData = recursiveCleanData(\n componentData,\n (oldValue ?? [])[index],\n componentsSchema[componentData.__component],\n `${path}.${index}`\n );\n\n return subCleanedData;\n }\n );\n break;\n default:\n cleanedData = helperCleanData(value, 'id');\n }\n\n acc[current] = cleanedData;\n\n return acc;\n }, {});\n };\n\n return recursiveCleanData(browserState, serverState, currentSchema, '');\n};\n\n// TODO: check which parts are still needed: I suspect the\n// isArray part can go away, but I'm not sure what could send\n// an object; in case both can go away we might be able to get\n// rid of the whole helper\nconst helperCleanData = (value: any, key: string) => {\n if (isArray(value)) {\n return value.map((obj) => (obj[key] ? obj[key] : obj));\n }\n if (isObject(value)) {\n return value[key as keyof typeof value];\n }\n\n return value;\n};\n\nexport { cleanData };\n","import * as React from 'react';\n\nimport { Main } from '@strapi/design-system';\nimport {\n AllowedActions,\n ContentManagerEditViewDataManagerContext,\n getAPIInnerErrors,\n getYupInnerErrors,\n LoadingIndicatorPage,\n TranslationMessage,\n useNotification,\n useOverlayBlocker,\n useTracking,\n} from '@strapi/helper-plugin';\nimport cloneDeep from 'lodash/cloneDeep';\nimport get from 'lodash/get';\nimport isEmpty from 'lodash/isEmpty';\nimport isEqual from 'lodash/isEqual';\nimport set from 'lodash/set';\nimport { flushSync } from 'react-dom';\nimport { useIntl } from 'react-intl';\nimport { Prompt, Redirect } from 'react-router-dom';\nimport { ValidationError } from 'yup';\n\nimport { useTypedDispatch, useTypedSelector } from '../../../core/store/hooks';\nimport { usePrev } from '../../hooks/usePrev';\nimport { clearSetModifiedDataOnly } from '../../sharedReducers/crud/actions';\nimport { getTranslation } from '../../utils/translations';\nimport { createYupSchema } from '../../utils/validation';\nimport { RenderChildProps } from '../ContentTypeFormWrapper';\n\nimport { reducer, initialState, RelationData } from './reducer';\nimport { cleanData } from './utils/cleanData';\n\nimport type { EntityData } from '../../sharedReducers/crud/reducer';\nimport type { FormattedComponentLayout } from '../../utils/layouts';\nimport type { Contracts } from '@strapi/plugin-content-manager/_internal/shared';\nimport type { Attribute, Entity } from '@strapi/types';\n\ninterface EditViewDataManagerProviderProps\n extends Pick<\n RenderChildProps,\n | 'componentsDataStructure'\n | 'contentTypeDataStructure'\n | 'isCreatingEntry'\n | 'isLoadingForData'\n | 'onDraftRelationCheck'\n | 'onPost'\n | 'onPublish'\n | 'onPut'\n | 'onUnpublish'\n | 'status'\n > {\n allowedActions: AllowedActions;\n createActionAllowedFields: string[];\n children: React.ReactNode;\n from: RenderChildProps['redirectionLink'];\n initialValues: EntityData | null;\n isSingleType: boolean;\n readActionAllowedFields: string[];\n redirectToPreviousPage: () => void;\n slug: string;\n updateActionAllowedFields: string[];\n}\n\nconst EditViewDataManagerProvider = ({\n allowedActions: { canRead, canUpdate },\n children,\n componentsDataStructure,\n contentTypeDataStructure,\n createActionAllowedFields,\n from,\n initialValues,\n isCreatingEntry,\n isLoadingForData,\n isSingleType,\n onPost,\n onPublish,\n onDraftRelationCheck,\n onPut,\n onUnpublish,\n readActionAllowedFields,\n // Not sure this is needed anymore\n redirectToPreviousPage,\n slug,\n status,\n updateActionAllowedFields,\n}: EditViewDataManagerProviderProps) => {\n const allLayoutData = useTypedSelector(\n (state) => state['content-manager_editViewLayoutManager'].currentLayout\n );\n const [isSaving, setIsSaving] = React.useState(false);\n /**\n * TODO: this should be moved into the global reducer\n * to match ever other reducer in the CM.\n */\n const [reducerState, dispatch] = React.useReducer(reducer, initialState);\n const {\n formErrors,\n initialData,\n modifiedData,\n modifiedDZName,\n shouldCheckErrors,\n publishConfirmation,\n } = reducerState;\n\n const { setModifiedDataOnly } = useTypedSelector(\n (state) => state['content-manager_editViewCrudReducer']\n );\n const reduxDispatch = useTypedDispatch();\n\n const toggleNotification = useNotification();\n const { lockApp, unlockApp } = useOverlayBlocker();\n\n const currentContentTypeLayout = allLayoutData.contentType;\n\n const hasDraftAndPublish = React.useMemo(() => {\n return get(currentContentTypeLayout, ['options', 'draftAndPublish'], false);\n }, [currentContentTypeLayout]);\n\n const shouldNotRunValidations = React.useMemo(() => {\n return hasDraftAndPublish && !initialData.publishedAt;\n }, [hasDraftAndPublish, initialData.publishedAt]);\n\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n\n const shouldRedirectToHomepageWhenEditingEntry = React.useMemo(() => {\n if (isLoadingForData) {\n return false;\n }\n\n if (isCreatingEntry) {\n return false;\n }\n\n if (canRead === false && canUpdate === false) {\n return true;\n }\n\n return false;\n }, [isLoadingForData, isCreatingEntry, canRead, canUpdate]);\n\n React.useEffect(() => {\n if (status === 'resolved') {\n // @ts-expect-error – fixed by context assertion in V5\n unlockApp();\n } else {\n // @ts-expect-error – fixed by context assertion in V5\n lockApp();\n }\n }, [lockApp, unlockApp, status]);\n\n // TODO: check this effect if it is really needed (not prio)\n React.useEffect(() => {\n if (!isLoadingForData) {\n checkFormErrors();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [shouldCheckErrors]);\n\n React.useEffect(() => {\n const errorsInForm = Object.keys(formErrors);\n\n // TODO: check if working with DZ, components...\n // TODO: use querySelector querySelectorAll('[data-strapi-field-error]')\n if (errorsInForm.length > 0) {\n const firstError = errorsInForm[0];\n const el = document.getElementById(firstError);\n\n if (el) {\n el.focus();\n }\n }\n }, [formErrors]);\n\n React.useEffect(() => {\n if (shouldRedirectToHomepageWhenEditingEntry) {\n toggleNotification({\n type: 'info',\n message: { id: getTranslation('permissions.not-allowed.update') },\n });\n }\n }, [shouldRedirectToHomepageWhenEditingEntry, toggleNotification]);\n\n React.useEffect(() => {\n dispatch({\n type: 'SET_DEFAULT_DATA_STRUCTURES',\n componentsDataStructure,\n contentTypeDataStructure,\n });\n }, [componentsDataStructure, contentTypeDataStructure]);\n\n const { components } = allLayoutData;\n\n const previousInitialValues = usePrev(initialValues);\n\n React.useEffect(() => {\n /**\n * Only fire this effect if the initialValues are different\n * otherwise it's a fruitless effort no matter what happens.\n */\n if (\n initialValues &&\n currentContentTypeLayout?.attributes &&\n !isEqual(previousInitialValues, initialValues)\n ) {\n dispatch({\n type: 'INIT_FORM',\n initialValues,\n components,\n attributes: currentContentTypeLayout.attributes,\n setModifiedDataOnly,\n });\n\n /**\n * TODO: This should be moved to a side-effect e.g. thunks\n * something to consider for V5\n */\n if (setModifiedDataOnly) {\n reduxDispatch(clearSetModifiedDataOnly());\n }\n }\n }, [\n initialValues,\n currentContentTypeLayout,\n components,\n setModifiedDataOnly,\n reduxDispatch,\n previousInitialValues,\n ]);\n\n const dispatchAddComponent = React.useCallback(\n (type: 'ADD_COMPONENT_TO_DYNAMIC_ZONE' | 'ADD_REPEATABLE_COMPONENT_TO_FIELD') =>\n (\n keys: string,\n componentLayoutData: FormattedComponentLayout,\n allComponents: Record<string, FormattedComponentLayout>,\n shouldCheckErrors = false,\n position = undefined\n ) => {\n trackUsage('didAddComponentToDynamicZone');\n\n dispatch({\n type,\n keys: keys.split('.'),\n position,\n componentLayoutData,\n allComponents,\n shouldCheckErrors,\n });\n },\n [trackUsage]\n );\n\n const addComponentToDynamicZone = dispatchAddComponent('ADD_COMPONENT_TO_DYNAMIC_ZONE');\n\n const addNonRepeatableComponentToField = React.useCallback(\n (\n keys: string,\n componentLayoutData: FormattedComponentLayout,\n allComponents: Record<string, FormattedComponentLayout>\n ) => {\n dispatch({\n type: 'ADD_NON_REPEATABLE_COMPONENT_TO_FIELD',\n keys: keys.split('.'),\n componentLayoutData,\n allComponents,\n });\n },\n []\n );\n\n const relationConnect = React.useCallback(\n ({\n name,\n value,\n toOneRelation,\n }: {\n name: string;\n value: Omit<RelationData, '__temp_key__'>;\n toOneRelation?: boolean;\n }) => {\n dispatch({\n type: 'CONNECT_RELATION',\n keys: name.split('.'),\n value,\n toOneRelation,\n });\n },\n []\n );\n\n const relationLoad = React.useCallback(\n ({\n target: { initialDataPath, modifiedDataPath, value },\n }: {\n target: {\n initialDataPath: string[];\n modifiedDataPath: string[];\n value: Omit<RelationData, '__temp_key__'>[];\n };\n }) => {\n dispatch({\n type: 'LOAD_RELATION',\n modifiedDataPath,\n initialDataPath,\n value,\n });\n },\n []\n );\n\n const addRepeatableComponentToField = dispatchAddComponent('ADD_REPEATABLE_COMPONENT_TO_FIELD');\n\n const yupSchema = React.useMemo(() => {\n const options = { isCreatingEntry, isDraft: shouldNotRunValidations, isFromComponent: false };\n\n return createYupSchema(\n currentContentTypeLayout!,\n {\n components: allLayoutData.components,\n },\n options\n );\n }, [\n allLayoutData.components,\n currentContentTypeLayout,\n isCreatingEntry,\n shouldNotRunValidations,\n ]);\n\n const checkFormErrors = React.useCallback(\n async (\n dataToSet: {\n path?: string;\n value?: any;\n } = {}\n ) => {\n let errors: Record<string, TranslationMessage> = {};\n const updatedData = cloneDeep(modifiedData);\n\n if (!isEmpty(updatedData) && dataToSet.path) {\n set(updatedData, dataToSet.path, dataToSet.value);\n }\n\n try {\n // Validate the form using yup\n await yupSchema.validate(updatedData, { abortEarly: false });\n } catch (err) {\n if (err instanceof ValidationError) {\n errors = getYupInnerErrors(err);\n }\n\n if (modifiedDZName) {\n errors = Object.keys(errors).reduce<Record<string, TranslationMessage>>(\n (acc, current) => {\n const dzName = current.split('.')[0];\n\n if (dzName !== modifiedDZName) {\n acc[current] = errors[current];\n }\n\n return acc;\n },\n {}\n );\n }\n }\n\n dispatch({\n type: 'SET_FORM_ERRORS',\n errors,\n });\n },\n [modifiedDZName, modifiedData, yupSchema]\n );\n\n const handleChange = React.useCallback(\n (\n {\n target,\n }: { target: { name: string; type: string; value: Attribute.GetValue<Attribute.Any> } },\n shouldSetInitialValue = false\n ) => {\n const { name, value, type } = target;\n let inputValue = value;\n\n // Allow to reset text, textarea, email, uid, select/enum, and number\n if (\n ['text', 'textarea', 'string', 'email', 'uid', 'select', 'select-one', 'number'].includes(\n type\n ) &&\n !value &&\n value !== 0\n ) {\n inputValue = null;\n }\n\n if (type === 'password' && !value) {\n dispatch({\n type: 'REMOVE_PASSWORD_FIELD',\n keys: name.split('.'),\n });\n\n return;\n }\n\n dispatch({\n type: 'ON_CHANGE',\n keys: name.split('.'),\n value: inputValue,\n shouldSetInitialValue,\n });\n },\n []\n );\n\n const createFormData = React.useCallback(\n (modifiedData: Record<string, any>, initialData: Record<string, any>) => {\n // Then we need to apply our helper\n const cleanedData = cleanData(\n { browserState: modifiedData, serverState: initialData },\n currentContentTypeLayout!,\n allLayoutData.components\n );\n\n // TODO: can we remove the cast?\n return cleanedData as Contracts.SingleTypes.CreateOrUpdate.Request['body'];\n },\n [allLayoutData.components, currentContentTypeLayout]\n );\n\n const trackerProperty = React.useMemo(() => {\n if (!hasDraftAndPublish) {\n return {};\n }\n\n return shouldNotRunValidations ? { status: 'draft' } : {};\n }, [hasDraftAndPublish, shouldNotRunValidations]);\n\n const handlePublishPromptDismissal = React.useCallback(async (e: React.SyntheticEvent) => {\n e.preventDefault();\n\n return dispatch({\n type: 'RESET_PUBLISH_CONFIRMATION',\n });\n }, []);\n\n const handleSubmit = React.useCallback(\n async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n let errors: Record<string, TranslationMessage> = {};\n\n try {\n await yupSchema.validate(modifiedData, { abortEarly: false });\n } catch (err) {\n if (err instanceof ValidationError) {\n errors = getYupInnerErrors(err);\n } else {\n console.error(err);\n }\n }\n\n try {\n if (isEmpty(errors)) {\n const formData = createFormData(modifiedData, initialData);\n flushSync(() => {\n setIsSaving(true);\n });\n\n if (isCreatingEntry) {\n await onPost(formData, trackerProperty);\n } else {\n await onPut(formData, trackerProperty);\n }\n\n setIsSaving(false);\n }\n } catch (err) {\n setIsSaving(false);\n errors = {\n ...errors,\n // @ts-expect-error – remove the function later.\n ...getAPIInnerErrors(err, { getTranslation }),\n };\n }\n\n dispatch({\n type: 'SET_FORM_ERRORS',\n errors,\n });\n },\n [\n createFormData,\n isCreatingEntry,\n modifiedData,\n initialData,\n onPost,\n onPut,\n trackerProperty,\n yupSchema,\n ]\n );\n\n const handlePublish = React.useCallback(async () => {\n // Create yup schema here's we need to apply all the validations\n const schema = createYupSchema(\n currentContentTypeLayout!,\n {\n components: get(allLayoutData, 'components', {}),\n },\n { isCreatingEntry, isDraft: false, isFromComponent: false }\n );\n\n const draftCount = await onDraftRelationCheck();\n\n if (!publishConfirmation.show && draftCount > 0) {\n // If the warning hasn't already been shown and draft relations are found,\n // abort the publish call and ask for confirmation from the user\n dispatch({\n type: 'SET_PUBLISH_CONFIRMATION',\n publishConfirmation: {\n show: true,\n draftCount,\n },\n });\n\n return;\n }\n dispatch({\n type: 'RESET_PUBLISH_CONFIRMATION',\n });\n\n let errors = {};\n try {\n await schema.validate(modifiedData, { abortEarly: false });\n } catch (err) {\n if (err instanceof ValidationError) {\n errors = getYupInnerErrors(err);\n }\n }\n\n try {\n if (isEmpty(errors)) {\n flushSync(() => {\n setIsSaving(true);\n });\n await onPublish();\n setIsSaving(false);\n }\n } catch (err) {\n setIsSaving(false);\n errors = {\n ...errors,\n // @ts-expect-error – we'll remove this deprecated function later anyway.\n ...getAPIInnerErrors(err, { getTranslation }),\n };\n }\n\n dispatch({\n type: 'SET_FORM_ERRORS',\n errors,\n });\n }, [\n allLayoutData,\n currentContentTypeLayout,\n isCreatingEntry,\n modifiedData,\n publishConfirmation.show,\n onPublish,\n onDraftRelationCheck,\n ]);\n\n const shouldCheckDZErrors = React.useCallback(\n (dzName: string) => {\n const doesDZHaveError = Object.keys(formErrors).some((key) => key.split('.')[0] === dzName);\n const shouldCheckErrors = !isEmpty(formErrors) && doesDZHaveError;\n\n return shouldCheckErrors;\n },\n [formErrors]\n );\n\n const moveComponentDown = React.useCallback(\n (dynamicZoneName: string, currentIndex: number) => {\n trackUsage('changeComponentsOrder');\n\n dispatch({\n type: 'MOVE_COMPONENT_DOWN',\n dynamicZoneName,\n currentIndex,\n shouldCheckErrors: shouldCheckDZErrors(dynamicZoneName),\n });\n },\n [shouldCheckDZErrors, trackUsage]\n );\n\n const moveComponentUp = React.useCallback(\n (dynamicZoneName: string, currentIndex: number) => {\n trackUsage('changeComponentsOrder');\n\n dispatch({\n type: 'MOVE_COMPONENT_UP',\n dynamicZoneName,\n currentIndex,\n shouldCheckErrors: shouldCheckDZErrors(dynamicZoneName),\n });\n },\n [shouldCheckDZErrors, trackUsage]\n );\n\n const moveComponentField = React.useCallback(\n ({\n name,\n newIndex,\n currentIndex,\n }: {\n name: string;\n currentIndex: number;\n newIndex: number;\n }) => {\n dispatch({\n type: 'MOVE_COMPONENT_FIELD',\n keys: name.split('.'),\n newIndex,\n oldIndex: currentIndex,\n });\n },\n []\n );\n\n const relationDisconnect = React.useCallback(({ name, id }: { name: string; id: Entity.ID }) => {\n dispatch({\n type: 'DISCONNECT_RELATION',\n keys: name.split('.'),\n id,\n });\n }, []);\n\n const relationReorder = React.useCallback(\n ({ name, oldIndex, newIndex }: { name: string; oldIndex: number; newIndex: number }) => {\n dispatch({\n type: 'REORDER_RELATION',\n keys: name.split('.'),\n oldIndex,\n newIndex,\n });\n },\n []\n );\n\n const removeComponentFromDynamicZone = React.useCallback(\n (dynamicZoneName: string, index: number) => {\n trackUsage('removeComponentFromDynamicZone');\n\n dispatch({\n type: 'REMOVE_COMPONENT_FROM_DYNAMIC_ZONE',\n dynamicZoneName,\n index,\n shouldCheckErrors: shouldCheckDZErrors(dynamicZoneName),\n });\n },\n [shouldCheckDZErrors, trackUsage]\n );\n\n const removeComponentFromField = React.useCallback((keys: string) => {\n dispatch({\n type: 'REMOVE_COMPONENT_FROM_FIELD',\n keys: keys.split('.'),\n });\n }, []);\n\n const removeRepeatableField = React.useCallback((keys: string) => {\n dispatch({\n type: 'REMOVE_REPEATABLE_FIELD',\n keys: keys.split('.'),\n });\n }, []);\n\n const triggerFormValidation = React.useCallback(() => {\n dispatch({\n type: 'TRIGGER_FORM_VALIDATION',\n });\n }, []);\n\n // Redirect the user to the previous page if he is not allowed to read/update a document\n if (shouldRedirectToHomepageWhenEditingEntry) {\n return <Redirect to={from} />;\n }\n\n if (!modifiedData) {\n return null;\n }\n\n return (\n <ContentManagerEditViewDataManagerContext.Provider\n value={{\n // @ts-expect-error – issue with the provider being in the helper-plugin and not having access to the \"unique\" layout type\n addComponentToDynamicZone,\n // @ts-expect-error – issue with the provider being in the helper-plugin and not having access to the \"unique\" layout type\n addNonRepeatableComponentToField,\n // @ts-expect-error – issue with the provider being in the helper-plugin and not having access to the \"unique\" layout type\n addRepeatableComponentToField,\n // @ts-expect-error – issue with the provider being in the helper-plugin and not having access to the \"unique\" layout type\n allLayoutData,\n checkFormErrors,\n createActionAllowedFields,\n formErrors,\n hasDraftAndPublish,\n initialData,\n isCreatingEntry,\n isSingleType,\n shouldNotRunValidations,\n status,\n // @ts-expect-error – issue with the provider being in the helper-plugin and not having access to the \"unique\" layout type\n layout: currentContentTypeLayout,\n modifiedData,\n moveComponentField,\n /**\n * @deprecated use `moveComponentField` instead. This will be removed in v5.\n */\n moveComponentDown,\n /**\n * @deprecated use `moveComponentField` instead. This will be removed in v5.\n */\n moveComponentUp,\n onChange: handleChange,\n onPublish: handlePublish,\n onUnpublish,\n readActionAllowedFields,\n redirectToPreviousPage,\n removeComponentFromDynamicZone,\n removeComponentFromField,\n removeRepeatableField,\n relationConnect,\n relationDisconnect,\n relationLoad,\n relationReorder,\n slug,\n triggerFormValidation,\n updateActionAllowedFields,\n onPublishPromptDismissal: handlePublishPromptDismissal,\n publishConfirmation,\n }}\n >\n {/* with SingleTypes, we'll never be creating the entry and there won't ever be an id because thats not how single types work. */}\n {isLoadingForData || (!isCreatingEntry && !initialData.id && !isSingleType) ? (\n <Main aria-busy=\"true\">\n <LoadingIndicatorPage />\n </Main>\n ) : (\n <>\n {!isSaving ? (\n <Prompt\n when={!isEqual(modifiedData, initialData)}\n message={formatMessage({ id: 'global.prompt.unsaved' })}\n />\n ) : null}\n <form noValidate onSubmit={handleSubmit}>\n {children}\n </form>\n </>\n )}\n </ContentManagerEditViewDataManagerContext.Provider>\n );\n};\n\nexport { EditViewDataManagerProvider };\n","import { Permission, findMatchingPermissions } from '@strapi/helper-plugin';\n\nconst generatePermissionsObject = (uid: string) => {\n // TODO: Why are the content-manager permissions hardcoded here?\n const permissions = {\n create: [{ action: 'plugin::content-manager.explorer.create', subject: null }],\n delete: [{ action: 'plugin::content-manager.explorer.delete', subject: null }],\n publish: [{ action: 'plugin::content-manager.explorer.publish', subject: null }],\n read: [{ action: 'plugin::content-manager.explorer.read', subject: null }],\n update: [{ action: 'plugin::content-manager.explorer.update', subject: null }],\n } satisfies Record<string, Permission[]>;\n\n return Object.entries(permissions).reduce<Record<string, Permission[]>>((acc, [key, value]) => {\n acc[key] = value.map((perm) => ({ ...perm, subject: uid }));\n\n return acc;\n }, {});\n};\n\nconst getFieldsActionMatchingPermissions = (userPermissions: Permission[], slug: string) => {\n const getMatchingPermissions = (action: 'create' | 'read' | 'update') => {\n const matched = findMatchingPermissions(userPermissions, [\n {\n action: `plugin::content-manager.explorer.${action}`,\n subject: slug,\n },\n ]);\n\n return (\n matched\n .flatMap((perm) => perm.properties?.fields)\n // return only unique fields\n .filter(\n (field, index, arr): field is string =>\n arr.indexOf(field) === index && typeof field === 'string'\n )\n );\n };\n\n return {\n createActionAllowedFields: getMatchingPermissions('create'),\n readActionAllowedFields: getMatchingPermissions('read'),\n updateActionAllowedFields: getMatchingPermissions('update'),\n };\n};\n\nexport { generatePermissionsObject, getFieldsActionMatchingPermissions };\n","import * as React from 'react';\n\nimport { Button } from '@strapi/design-system';\nimport {\n ConfirmDialog,\n useAPIErrorHandler,\n useCMEditViewDataManager,\n useNotification,\n} from '@strapi/helper-plugin';\nimport { Trash } from '@strapi/icons';\nimport { isAxiosError } from 'axios';\nimport { useIntl } from 'react-intl';\n\nimport { getTranslation } from '../../../utils/translations';\n\nimport type { RenderChildProps } from '../../../components/ContentTypeFormWrapper';\n\ninterface DeleteLinkProps {\n onDelete: RenderChildProps['onDelete'];\n}\n\nconst DeleteLink = ({ onDelete }: DeleteLinkProps) => {\n const { hasDraftAndPublish, modifiedData } = useCMEditViewDataManager();\n\n const trackerProperty = hasDraftAndPublish\n ? typeof modifiedData.publishedAt === 'string'\n ? { status: 'draft' }\n : { status: 'published' }\n : {};\n\n const [displayDeleteConfirmation, setDisplayDeleteConfirmation] = React.useState(false);\n const [isModalConfirmButtonLoading, setIsModalConfirmButtonLoading] = React.useState(false);\n const { formatMessage } = useIntl();\n const { formatAPIError } = useAPIErrorHandler(getTranslation);\n const toggleNotification = useNotification();\n\n const toggleWarningDelete = () => setDisplayDeleteConfirmation((prevState) => !prevState);\n\n const handleConfirmDelete = async () => {\n try {\n // Show the loading state\n setIsModalConfirmButtonLoading(true);\n\n await onDelete(trackerProperty);\n\n setIsModalConfirmButtonLoading(false);\n\n toggleWarningDelete();\n } catch (err) {\n setIsModalConfirmButtonLoading(false);\n toggleWarningDelete();\n\n if (isAxiosError(err)) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(err),\n });\n }\n }\n };\n\n return (\n <>\n <Button onClick={toggleWarningDelete} size=\"S\" startIcon={<Trash />} variant=\"danger-light\">\n {formatMessage({\n id: getTranslation('containers.Edit.delete-entry'),\n defaultMessage: 'Delete this entry',\n })}\n </Button>\n\n <ConfirmDialog\n isConfirmButtonLoading={isModalConfirmButtonLoading}\n isOpen={displayDeleteConfirmation}\n onConfirm={handleConfirmDelete}\n onToggleDialog={toggleWarningDelete}\n />\n </>\n );\n};\n\nexport { DeleteLink };\n","import { Box, Flex, Typography } from '@strapi/design-system';\nimport { pxToRem, useCMEditViewDataManager } from '@strapi/helper-plugin';\nimport { Dot } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport styled, { DefaultTheme } from 'styled-components';\n\nimport { getTranslation } from '../../../utils/translations';\n\nconst DraftAndPublishBadge = () => {\n const { initialData, hasDraftAndPublish } = useCMEditViewDataManager();\n const { formatMessage } = useIntl();\n\n if (!hasDraftAndPublish) {\n return null;\n }\n\n const isPublished = typeof initialData.publishedAt === 'string';\n\n const colors = {\n draft: {\n textColor: 'secondary700',\n bulletColor: 'secondary600',\n box: {\n background: 'secondary100',\n borderColor: 'secondary200',\n },\n },\n published: {\n textColor: 'success700',\n bulletColor: 'success600',\n box: {\n background: 'success100',\n borderColor: 'success200',\n },\n },\n } as const;\n\n const colorProps = isPublished ? colors.published : colors.draft;\n\n return (\n <Box\n hasRadius\n as=\"aside\"\n paddingTop={4}\n paddingBottom={4}\n paddingLeft={5}\n paddingRight={5}\n {...colorProps.box}\n >\n <Box as={Flex}>\n <CustomBullet $bulletColor={colorProps.bulletColor} />\n <Box paddingLeft={3}>\n <Typography textColor={colorProps.textColor}>\n {formatMessage({\n id: getTranslation('containers.Edit.information.editing'),\n defaultMessage: 'Editing',\n })}\n &nbsp;\n </Typography>\n <Typography fontWeight=\"bold\" textColor={colorProps.textColor}>\n {isPublished &&\n formatMessage({\n id: getTranslation('containers.Edit.information.publishedVersion'),\n defaultMessage: 'published version',\n })}\n {!isPublished &&\n formatMessage({\n id: getTranslation('containers.Edit.information.draftVersion'),\n defaultMessage: 'draft version',\n })}\n </Typography>\n </Box>\n </Box>\n </Box>\n );\n};\n\nconst CustomBullet = styled(Dot)<{ $bulletColor: keyof DefaultTheme['colors'] }>`\n width: ${pxToRem(6)};\n height: ${pxToRem(6)};\n * {\n fill: ${({ theme, $bulletColor }) => theme.colors[$bulletColor]};\n }\n`;\n\nexport { DraftAndPublishBadge };\n","import * as React from 'react';\n\nimport {\n Box,\n Button,\n Dialog,\n DialogBody,\n DialogFooter,\n Flex,\n HeaderLayout,\n Typography,\n} from '@strapi/design-system';\nimport { Link } from '@strapi/design-system/v2';\nimport { AllowedActions, useCMEditViewDataManager } from '@strapi/helper-plugin';\nimport { ArrowLeft, Check, ExclamationMarkCircle } from '@strapi/icons';\nimport get from 'lodash/get';\nimport isEqual from 'lodash/isEqual';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useHistory } from 'react-router-dom';\n\nimport { getTranslation } from '../../../utils/translations';\n\ninterface HeaderProps {\n allowedActions: AllowedActions;\n}\n\nconst Header = ({ allowedActions: { canUpdate, canCreate, canPublish } }: HeaderProps) => {\n const {\n initialData,\n isCreatingEntry,\n isSingleType,\n status,\n layout,\n hasDraftAndPublish,\n modifiedData,\n onPublish,\n onUnpublish,\n publishConfirmation: { show: showPublishConfirmation, draftCount } = {},\n onPublishPromptDismissal,\n } = useCMEditViewDataManager();\n const { goBack } = useHistory();\n const [showWarningUnpublish, setWarningUnpublish] = React.useState(false);\n const { formatMessage } = useIntl();\n\n const currentContentTypeMainField = get(layout, ['settings', 'mainField'], 'id');\n const currentContentTypeName = get(layout, ['info', 'displayName'], 'NOT FOUND');\n const didChangeData =\n !isEqual(initialData, modifiedData) ||\n (isCreatingEntry && Object.keys(modifiedData).length > 0);\n\n const createEntryIntlTitle = formatMessage({\n id: getTranslation('containers.Edit.pluginHeader.title.new'),\n defaultMessage: 'Create an entry',\n });\n\n let title = createEntryIntlTitle;\n\n if (!isCreatingEntry && !isSingleType) {\n title = initialData[currentContentTypeMainField] || currentContentTypeName;\n }\n\n if (isSingleType) {\n title = currentContentTypeName;\n }\n\n let primaryAction = null;\n\n if (isCreatingEntry && canCreate) {\n primaryAction = (\n <Flex gap={2}>\n {hasDraftAndPublish && (\n <Button disabled startIcon={<Check />} variant=\"secondary\">\n {formatMessage({ id: 'app.utils.publish', defaultMessage: 'Publish' })}\n </Button>\n )}\n <Button disabled={!didChangeData} loading={status === 'submit-pending'} type=\"submit\">\n {formatMessage({\n id: getTranslation('containers.Edit.submit'),\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n );\n }\n\n if (!isCreatingEntry && canUpdate) {\n const shouldShowPublishButton = hasDraftAndPublish && canPublish;\n const isPublished = typeof initialData.publishedAt === 'string';\n const isPublishButtonLoading = isPublished\n ? status === 'unpublish-pending'\n : status === 'publish-pending';\n const pubishButtonLabel = isPublished\n ? { id: 'app.utils.unpublish', defaultMessage: 'Unpublish' }\n : { id: 'app.utils.publish', defaultMessage: 'Publish' };\n\n const onClick = isPublished ? () => setWarningUnpublish(true) : () => onPublish?.();\n\n primaryAction = (\n <Flex>\n {shouldShowPublishButton && (\n <Button\n disabled={didChangeData}\n loading={isPublishButtonLoading}\n onClick={onClick}\n startIcon={<Check />}\n variant=\"secondary\"\n >\n {formatMessage(pubishButtonLabel)}\n </Button>\n )}\n <Box paddingLeft={shouldShowPublishButton ? 2 : 0}>\n <Button disabled={!didChangeData} loading={status === 'submit-pending'} type=\"submit\">\n {formatMessage({\n id: getTranslation('containers.Edit.submit'),\n defaultMessage: 'Save',\n })}\n </Button>\n </Box>\n </Flex>\n );\n }\n\n const toggleWarningUnpublish = () => setWarningUnpublish((prevState) => !prevState);\n\n const handleUnpublish = () => {\n toggleWarningUnpublish();\n onUnpublish?.();\n };\n\n const subtitle = `${formatMessage({\n id: getTranslation('api.id'),\n defaultMessage: 'API ID',\n // @ts-expect-error – issue comes from the context not having the correct layout from the admin.\n })}: ${layout?.apiID}`;\n\n return (\n <>\n <HeaderLayout\n title={title.toString()}\n primaryAction={primaryAction}\n subtitle={subtitle}\n navigationAction={\n <Link\n startIcon={<ArrowLeft />}\n // Needed in order to redirect the user with the correct search params\n // Since parts is using a link from react-router-dom the best way to do it is to disable the\n // event\n onClick={(e) => {\n e.preventDefault();\n goBack();\n }}\n as={NavLink}\n // @ts-expect-error – DS issue with inferring props from the `as` prop.\n to=\"/\"\n >\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n />\n <Dialog\n onClose={toggleWarningUnpublish}\n title=\"Confirmation\"\n aria-labelledby=\"confirmation\"\n aria-describedby=\"confirm-description\"\n isOpen={showWarningUnpublish}\n >\n <DialogBody icon={<ExclamationMarkCircle />}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Flex justifyContent=\"center\" style={{ textAlign: 'center' }}>\n <Typography id=\"confirm-description\">\n {formatMessage({\n id: getTranslation('popUpWarning.warning.unpublish'),\n defaultMessage: 'Unpublish this content will automatically change it to a draft.',\n })}\n </Typography>\n </Flex>\n <Flex justifyContent=\"center\" style={{ textAlign: 'center' }}>\n <Typography id=\"confirm-description\">\n {formatMessage({\n id: getTranslation('popUpWarning.warning.unpublish-question'),\n defaultMessage: 'Are you sure you want to unpublish it?',\n })}\n </Typography>\n </Flex>\n </Flex>\n </DialogBody>\n <DialogFooter\n startAction={\n <Button onClick={toggleWarningUnpublish} variant=\"tertiary\">\n {formatMessage({\n id: 'components.popUpWarning.button.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n }\n endAction={\n <Button variant=\"danger-light\" onClick={handleUnpublish}>\n {formatMessage({\n id: 'components.popUpWarning.button.confirm',\n defaultMessage: 'Confirm',\n })}\n </Button>\n }\n />\n </Dialog>\n <Dialog\n // @ts-expect-error – Context issue with it living in the helper-plugin\n onClose={onPublishPromptDismissal}\n title={formatMessage({\n id: getTranslation(`popUpWarning.warning.has-draft-relations.title`),\n defaultMessage: 'Confirmation',\n })}\n labelledBy=\"confirmation\"\n describedBy=\"confirm-description\"\n // @ts-expect-error – Context issue with it living in the helper-plugin\n isOpen={showPublishConfirmation}\n >\n <DialogBody icon={<ExclamationMarkCircle />}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Typography textAlign=\"center\" id=\"confirm-description\">\n {draftCount}\n {/* @ts-expect-error – this is an issue with rendering a component with the formatMessage helper, perhaps a mis-match in types? */}\n {formatMessage(\n {\n id: getTranslation(`popUpwarning.warning.has-draft-relations.message`),\n defaultMessage:\n '<b>{count, plural, one { relation is} other { relations are}}</b> not published yet and might lead to unexpected behavior.',\n },\n {\n b: (chunks) => <Typography fontWeight=\"bold\">{chunks}</Typography>,\n count: draftCount,\n }\n )}\n </Typography>\n <Typography textAlign=\"center\" id=\"confirm-description\">\n {formatMessage({\n id: getTranslation('popUpWarning.warning.publish-question'),\n defaultMessage: 'Do you still want to publish?',\n })}\n </Typography>\n </Flex>\n </DialogBody>\n <DialogFooter\n startAction={\n <Button onClick={onPublishPromptDismissal} variant=\"tertiary\">\n {formatMessage({\n id: 'components.popUpWarning.button.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n }\n endAction={\n <Button variant=\"success\" onClick={onPublish}>\n {formatMessage({\n id: getTranslation('popUpwarning.warning.has-draft-relations.button-confirm'),\n defaultMessage: 'Publish',\n })}\n </Button>\n }\n />\n </Dialog>\n </>\n );\n};\n\nexport { Header };\nexport type { HeaderProps };\n","import type { SanitizedAdminUser } from '../../../../shared/contracts/shared';\nimport type { IntlShape } from 'react-intl';\n\n/**\n * Retrieves the display name of an admin panel user\n */\nconst getDisplayName = (\n {\n firstname,\n lastname,\n username,\n email,\n }: Pick<SanitizedAdminUser, 'firstname' | 'lastname' | 'username' | 'email'>,\n formatMessage: IntlShape['formatMessage']\n) => {\n if (username) {\n return username;\n }\n\n // firstname is not required if the user is created with a username\n if (firstname) {\n return formatMessage(\n {\n id: 'global.fullname',\n defaultMessage: '{firstname} {lastname}',\n },\n {\n firstname,\n lastname,\n }\n ).trim();\n }\n\n return email;\n};\n\nexport { getDisplayName };\n","import * as React from 'react';\n\nimport { Box, Divider, Flex, Typography } from '@strapi/design-system';\nimport { useCMEditViewDataManager } from '@strapi/helper-plugin';\nimport { useIntl } from 'react-intl';\n\nimport { getTranslation } from '../../../utils/translations';\nimport { getDisplayName } from '../../../utils/users';\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RootProps {\n children: React.ReactNode;\n}\n\nconst Root = ({ children }: RootProps) => {\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n {children}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Title\n * -----------------------------------------------------------------------------------------------*/\n\nconst Title = () => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Typography variant=\"sigma\" textColor=\"neutral600\" id=\"additional-information\">\n {formatMessage({\n id: getTranslation('containers.Edit.information'),\n defaultMessage: 'Information',\n })}\n </Typography>\n\n <Box>\n <Divider />\n </Box>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Body\n * -----------------------------------------------------------------------------------------------*/\n\nconst Body = () => {\n const { formatMessage, formatRelativeTime } = useIntl();\n const { initialData, isCreatingEntry } = useCMEditViewDataManager();\n const currentTime = React.useRef(Date.now());\n\n const getFieldInfo = (atField: 'updatedAt' | 'createdAt', byField: 'updatedBy' | 'createdBy') => {\n const user = initialData[byField];\n const at = initialData[atField];\n\n const displayName = user ? getDisplayName(user, formatMessage) : '-';\n const timestamp = at ? new Date(at).getTime() : Date.now();\n const elapsed = timestamp - currentTime.current;\n const { unit, value } = getUnits(-elapsed);\n\n return {\n at: formatRelativeTime(value, unit, { numeric: 'auto' }),\n by: isCreatingEntry ? '-' : displayName,\n };\n };\n\n const updated = getFieldInfo('updatedAt', 'updatedBy');\n const created = getFieldInfo('createdAt', 'createdBy');\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2} as=\"dl\">\n <KeyValuePair\n label={formatMessage({\n id: getTranslation('containers.Edit.information.created'),\n defaultMessage: 'Created',\n })}\n value={created.at}\n />\n\n <KeyValuePair\n label={formatMessage({\n id: getTranslation('containers.Edit.information.by'),\n defaultMessage: 'By',\n })}\n value={created.by}\n />\n </Flex>\n\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2} as=\"dl\">\n <KeyValuePair\n label={formatMessage({\n id: getTranslation('containers.Edit.information.lastUpdate'),\n defaultMessage: 'Last update',\n })}\n value={updated.at}\n />\n\n <KeyValuePair\n label={formatMessage({\n id: getTranslation('containers.Edit.information.by'),\n defaultMessage: 'By',\n })}\n value={updated.by}\n />\n </Flex>\n </Flex>\n );\n};\n\ninterface KeyValuePairProps {\n label: string;\n value?: string;\n}\n\nconst KeyValuePair = ({ label, value = '-' }: KeyValuePairProps) => {\n return (\n <Flex justifyContent=\"space-between\">\n <Typography as=\"dt\" fontWeight=\"bold\" textColor=\"neutral800\" variant=\"pi\">\n {label}\n </Typography>\n <Typography as=\"dd\" variant=\"pi\" textColor=\"neutral600\">\n {value}\n </Typography>\n </Flex>\n );\n};\n\nconst MINUTE = 60 * 1000;\nconst HOUR = MINUTE * 60;\nconst DAY = HOUR * 24;\nconst MONTH = DAY * 30;\nconst YEAR = DAY * 365;\n\n/**\n * @internal\n *\n * @description This compares the milliseconds to the constants above to understand\n * which time unit it's closest too e.g. is it under a minute? then it's seconds\n * and we turn the value into seconds.\n */\nconst getUnits = (value: number): { unit: Intl.RelativeTimeFormatUnit; value: number } => {\n if (value < MINUTE) {\n return { unit: 'second', value: -Math.round(value / 1000) };\n }\n if (value < HOUR) {\n return { unit: 'minute', value: -Math.round(value / MINUTE) };\n }\n if (value < DAY) {\n return { unit: 'hour', value: -Math.round(value / HOUR) };\n }\n if (value < MONTH) {\n return { unit: 'day', value: -Math.round(value / DAY) };\n }\n if (value < YEAR) {\n return { unit: 'month', value: -Math.round(value / MONTH) };\n }\n\n return { unit: 'year', value: -Math.round(value / YEAR) };\n};\n\nexport const Information = {\n Root,\n Title,\n Body,\n};\n","import { Information } from './Information';\n\nconst InformationBoxCE = () => {\n return (\n <Information.Root>\n <Information.Title />\n <Information.Body />\n </Information.Root>\n );\n};\n\nexport { InformationBoxCE };\n","import * as React from 'react';\n\nimport { createSelector } from '@reduxjs/toolkit';\nimport { Main, ContentLayout, Grid, GridItem, Flex, Box } from '@strapi/design-system';\nimport {\n CheckPermissions,\n LinkButton,\n LoadingIndicatorPage,\n useNotification,\n useTracking,\n useRBAC,\n Permission,\n AllowedActions,\n} from '@strapi/helper-plugin';\nimport { Layer, Pencil } from '@strapi/icons';\nimport { Attribute } from '@strapi/types';\nimport { useIntl } from 'react-intl';\nimport { RouteComponentProps, useLocation } from 'react-router-dom';\n\nimport { InjectionZone } from '../../../components/InjectionZone';\nimport { useTypedSelector } from '../../../core/store/hooks';\nimport { useEnterprise } from '../../../hooks/useEnterprise';\nimport { useOnce } from '../../../hooks/useOnce';\nimport { ContentTypeFormWrapper } from '../../components/ContentTypeFormWrapper';\nimport { DynamicZone } from '../../components/DynamicZone/Field';\nimport { EditViewDataManagerProvider } from '../../components/EditViewDataManagerProvider/Provider';\nimport { FieldComponent } from '../../components/FieldComponent';\nimport { Inputs } from '../../components/Inputs';\nimport { useLazyComponents } from '../../hooks/useLazyComponents';\nimport {\n generatePermissionsObject,\n getFieldsActionMatchingPermissions,\n} from '../../utils/permissions';\nimport { getTranslation } from '../../utils/translations';\n\nimport { DeleteLink } from './components/DeleteLink';\nimport { DraftAndPublishBadge } from './components/DraftAndPublishBadge';\nimport { Header } from './components/Header';\nimport { InformationBoxCE } from './components/InformationBoxCE';\n\nimport type { RootState } from '../../../core/store/configure';\nimport type { EditLayoutRow, FormattedLayouts } from '../../utils/layouts';\n\n// TODO: this seems suspicious\nconst CTB_PERMISSIONS = [{ action: 'plugin::content-type-builder.read', subject: null }];\n\n/* -------------------------------------------------------------------------------------------------\n * EditViewPage\n * -----------------------------------------------------------------------------------------------*/\n\ninterface EditViewPageParams {\n collectionType: string;\n slug: string;\n id?: string;\n origin?: string;\n}\n\ninterface EditViewPageProps extends RouteComponentProps<EditViewPageParams> {\n allowedActions: AllowedActions;\n userPermissions?: Permission[];\n}\n\nconst EditViewPage = ({\n allowedActions,\n history: { goBack },\n match: {\n params: { slug, collectionType, id, origin },\n },\n userPermissions = [],\n}: EditViewPageProps) => {\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const location = useLocation<{ error?: string }>();\n const toggleNotification = useNotification();\n const Information = useEnterprise(\n InformationBoxCE,\n async () =>\n (\n await import(\n '../../../../../ee/admin/src/content-manager/pages/EditView/components/InformationBoxEE'\n )\n ).InformationBoxEE\n );\n\n useOnce(() => {\n /**\n * We only ever want to fire the notification once otherwise\n * whenever the app re-renders it'll pop up regardless of\n * what we do because the state comes from react-router-dom\n */\n if (location?.state && 'error' in location.state) {\n toggleNotification({\n type: 'warning',\n message: location.state.error,\n timeout: 5000,\n });\n }\n });\n\n const formattedContentTypeLayout = useTypedSelector(selectAttributesLayout);\n const customFieldUids = useTypedSelector(selectCustomFieldUids);\n\n const { isLazyLoading, lazyComponentStore } = useLazyComponents(customFieldUids);\n\n const { createActionAllowedFields, readActionAllowedFields, updateActionAllowedFields } =\n getFieldsActionMatchingPermissions(userPermissions, slug);\n\n const configurationPermissions =\n (collectionType === 'single-types'\n ? permissions.contentManager?.singleTypesConfigurations\n : permissions.contentManager?.collectionTypesConfigurations) ?? [];\n\n // Check if a block is a dynamic zone\n const isDynamicZone = (\n block: EditLayoutRow[][]\n ): block is Array<\n Omit<EditLayoutRow, 'fieldSchema'> & {\n fieldSchema: Attribute.DynamicZone;\n }\n >[] => {\n return block.every((subBlock) => {\n return subBlock.every((obj) => obj.fieldSchema.type === 'dynamiczone');\n });\n };\n\n if (isLazyLoading) {\n return <LoadingIndicatorPage />;\n }\n\n // wait until the EE component is fully loaded before rendering, to prevent flickering\n if (!Information) {\n return null;\n }\n\n return (\n <ContentTypeFormWrapper collectionType={collectionType} slug={slug} id={id} origin={origin}>\n {({\n componentsDataStructure,\n contentTypeDataStructure,\n data,\n isCreatingEntry,\n isLoadingForData,\n onDelete,\n onPost,\n onPublish,\n onDraftRelationCheck,\n onPut,\n onUnpublish,\n redirectionLink,\n status,\n }) => {\n return (\n <EditViewDataManagerProvider\n allowedActions={allowedActions}\n createActionAllowedFields={createActionAllowedFields}\n componentsDataStructure={componentsDataStructure}\n contentTypeDataStructure={contentTypeDataStructure}\n from={redirectionLink}\n initialValues={data}\n isCreatingEntry={isCreatingEntry}\n isLoadingForData={isLoadingForData}\n isSingleType={collectionType === 'single-types'}\n onPost={onPost}\n onPublish={onPublish}\n onDraftRelationCheck={onDraftRelationCheck}\n onPut={onPut}\n onUnpublish={onUnpublish}\n readActionAllowedFields={readActionAllowedFields}\n redirectToPreviousPage={goBack}\n slug={slug}\n status={status}\n updateActionAllowedFields={updateActionAllowedFields}\n >\n <Main aria-busy={status !== 'resolved'}>\n <Header allowedActions={allowedActions} />\n <ContentLayout>\n <Grid gap={4}>\n <GridItem col={9} s={12}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {formattedContentTypeLayout.map((row, index) => {\n if (isDynamicZone(row)) {\n const [[{ name, fieldSchema, metadatas, ...restProps }]] = row;\n\n return (\n <Box key={index}>\n <Grid gap={4}>\n <GridItem col={12} s={12} xs={12}>\n <DynamicZone\n name={name}\n fieldSchema={fieldSchema}\n metadatas={metadatas}\n {...restProps}\n />\n </GridItem>\n </Grid>\n </Box>\n );\n }\n\n return (\n <Box\n key={index}\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n paddingLeft={6}\n paddingRight={6}\n paddingTop={6}\n paddingBottom={6}\n borderColor=\"neutral150\"\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {row.map((columns, gridRowIndex) => (\n <Grid key={gridRowIndex} gap={4}>\n {columns.map(\n ({\n fieldSchema,\n metadatas,\n name,\n size,\n queryInfos,\n ...restProps\n }) => {\n const isComponent = fieldSchema.type === 'component';\n\n if (isComponent) {\n const {\n component,\n max,\n min,\n repeatable = false,\n required = false,\n } = fieldSchema;\n\n return (\n <GridItem col={size} s={12} xs={12} key={component}>\n <FieldComponent\n componentUid={component}\n isRepeatable={repeatable}\n intlLabel={{\n id: metadatas.label,\n defaultMessage: metadatas.label,\n }}\n max={max}\n min={min}\n name={name}\n required={required}\n {...restProps}\n />\n </GridItem>\n );\n }\n\n return (\n <GridItem col={size} key={name} s={12} xs={12}>\n <Inputs\n size={size}\n fieldSchema={fieldSchema}\n keys={name}\n metadatas={metadatas}\n queryInfos={queryInfos}\n customFieldInputs={lazyComponentStore}\n {...restProps}\n />\n </GridItem>\n );\n }\n )}\n </Grid>\n ))}\n </Flex>\n </Box>\n );\n })}\n </Flex>\n </GridItem>\n <GridItem col={3} s={12}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <DraftAndPublishBadge />\n <Box\n as=\"aside\"\n aria-labelledby=\"additional-information\"\n background=\"neutral0\"\n borderColor=\"neutral150\"\n hasRadius\n paddingBottom={4}\n paddingLeft={4}\n paddingRight={4}\n paddingTop={6}\n shadow=\"tableShadow\"\n >\n <Information />\n <InjectionZone area=\"contentManager.editView.informations\" />\n </Box>\n <Box as=\"aside\" aria-labelledby=\"links\">\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <InjectionZone area=\"contentManager.editView.right-links\" slug={slug} />\n {slug !== 'strapi::administrator' && (\n <CheckPermissions permissions={CTB_PERMISSIONS}>\n <LinkButton\n onClick={() => {\n trackUsage('willEditEditLayout');\n }}\n size=\"S\"\n startIcon={<Pencil />}\n style={{ width: '100%' }}\n // @ts-expect-error – Remove deprecated component\n to={`/plugins/content-type-builder/content-types/${slug}`}\n variant=\"secondary\"\n >\n {formatMessage({\n id: getTranslation('link-to-ctb'),\n defaultMessage: 'Edit the model',\n })}\n </LinkButton>\n </CheckPermissions>\n )}\n\n <CheckPermissions permissions={configurationPermissions}>\n <LinkButton\n size=\"S\"\n startIcon={<Layer />}\n style={{ width: '100%' }}\n // @ts-expect-error – Remove deprecated component\n to={`/content-manager/${collectionType}/${slug}/configurations/edit`}\n variant=\"secondary\"\n >\n {formatMessage({\n id: 'app.links.configure-view',\n defaultMessage: 'Configure the view',\n })}\n </LinkButton>\n </CheckPermissions>\n\n {allowedActions.canDelete && !isCreatingEntry && (\n <DeleteLink onDelete={onDelete} />\n )}\n </Flex>\n </Box>\n </Flex>\n </GridItem>\n </Grid>\n </ContentLayout>\n </Main>\n </EditViewDataManagerProvider>\n );\n }}\n </ContentTypeFormWrapper>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Selectors\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * The layout has no concept of UI panes, it only knows what should be on separate rows, therefore\n * we manually split the layout into panes based on the presence of dynamic zones. where we then\n * use the original layout. Hence why, ITS ANOTHER ARRAY!\n */\nconst selectAttributesLayout = createSelector(\n (state: RootState) => state['content-manager_editViewLayoutManager'].currentLayout,\n (layout) => {\n const currentContentTypeLayoutData = layout?.contentType;\n\n if (!currentContentTypeLayoutData) {\n return [];\n }\n\n const currentLayout = currentContentTypeLayoutData.layouts.edit;\n\n let currentRowIndex = 0;\n const newLayout: Array<FormattedLayouts['contentType']['layouts']['edit']> = [];\n\n currentLayout.forEach((row) => {\n const hasDynamicZone = row.some(\n ({ name }) => currentContentTypeLayoutData.attributes[name]['type'] === 'dynamiczone'\n );\n\n if (!newLayout[currentRowIndex]) {\n newLayout[currentRowIndex] = [];\n }\n\n if (hasDynamicZone) {\n currentRowIndex =\n currentRowIndex === 0 && newLayout[0].length === 0 ? 0 : currentRowIndex + 1;\n\n if (!newLayout[currentRowIndex]) {\n newLayout[currentRowIndex] = [];\n }\n newLayout[currentRowIndex].push(row);\n\n currentRowIndex += 1;\n } else {\n newLayout[currentRowIndex].push(row);\n }\n });\n\n return newLayout.filter((arr) => arr.length > 0);\n }\n);\n\nconst selectCustomFieldUids = createSelector(\n (state: RootState) => state['content-manager_editViewLayoutManager'].currentLayout,\n (layout) => {\n if (!layout.contentType) return [];\n // Get all the fields on the content-type and its components\n const allFields = [\n ...layout.contentType.layouts.edit,\n ...Object.values(layout.components).flatMap((component) => component.layouts.edit),\n ].flat();\n\n // Filter that down to custom fields and map the uids\n const customFieldUids = allFields\n .filter((field) => field.fieldSchema.customField)\n .map((customField) => customField.fieldSchema.customField!);\n // Make sure the list is unique\n const uniqueCustomFieldUids = [...new Set(customFieldUids)];\n\n return uniqueCustomFieldUids;\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedEditViewPage\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ProtectedEditViewPageProps extends Omit<EditViewPageProps, 'allowedActions'> {}\n\nconst ProtectedEditViewPage = ({\n userPermissions = [],\n ...restProps\n}: ProtectedEditViewPageProps) => {\n const viewPermissions = React.useMemo(\n () => generatePermissionsObject(restProps.match.params.slug),\n [restProps.match.params.slug]\n );\n const { isLoading, allowedActions } = useRBAC(\n viewPermissions,\n // TODO: just make usePermissions undefined by default in the reducer?\n userPermissions\n );\n\n if (isLoading) {\n return <LoadingIndicatorPage />;\n }\n\n return (\n <EditViewPage\n {...restProps}\n allowedActions={allowedActions}\n userPermissions={userPermissions}\n />\n );\n};\n\nexport { EditViewPage, ProtectedEditViewPage };\nexport type { EditViewPageProps, EditViewPageParams, ProtectedEditViewPageProps };\n","import * as React from 'react';\n\nimport { LoadingIndicatorPage, useQueryParams, useStrapiApp } from '@strapi/helper-plugin';\nimport produce from 'immer';\n\nimport { HOOKS } from '../../constants';\nimport { useTypedDispatch, useTypedSelector } from '../../core/store/hooks';\nimport { useSyncRbac } from '../hooks/useSyncRbac';\n\nimport { ProtectedEditViewPage, ProtectedEditViewPageProps } from './EditView/EditViewPage';\n\nimport type { FormattedLayouts } from '../utils/layouts';\n\nconst { MUTATE_EDIT_VIEW_LAYOUT } = HOOKS;\n\n/* -------------------------------------------------------------------------------------------------\n * EditViewLayoutManager\n * -----------------------------------------------------------------------------------------------*/\ninterface EditViewLayoutManagerProps extends ProtectedEditViewPageProps {\n layout: FormattedLayouts;\n}\n\nconst EditViewLayoutManager = ({ layout, ...rest }: EditViewLayoutManagerProps) => {\n const currentLayout = useTypedSelector(\n (state) => state['content-manager_editViewLayoutManager'].currentLayout\n );\n const dispatch = useTypedDispatch();\n const [{ query }] = useQueryParams();\n const { runHookWaterfall } = useStrapiApp();\n const { permissions, isValid: isValidPermissions } = useSyncRbac(\n query,\n rest.match.params.slug,\n 'editView'\n );\n\n React.useEffect(() => {\n // Allow the plugins to extend the edit view layout\n const mutatedLayout = runHookWaterfall(MUTATE_EDIT_VIEW_LAYOUT, { layout, query });\n\n dispatch(setLayout(mutatedLayout.layout, query));\n\n return () => {\n dispatch(resetProps());\n };\n }, [layout, dispatch, query, runHookWaterfall]);\n\n if (!currentLayout.contentType || !isValidPermissions) {\n return <LoadingIndicatorPage />;\n }\n\n return <ProtectedEditViewPage {...rest} userPermissions={permissions ?? []} />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Reducer\n * -----------------------------------------------------------------------------------------------*/\n\nconst RESET_PROPS = 'ContentManager/EditViewLayoutManager/RESET_PROPS';\n\ninterface ResetPropsAction {\n type: typeof RESET_PROPS;\n}\n\nconst resetProps = () => ({ type: RESET_PROPS } satisfies ResetPropsAction);\n\nconst SET_LAYOUT = 'ContentManager/EditViewLayoutManager/SET_LAYOUT';\n\ninterface SetLayoutAction {\n type: typeof SET_LAYOUT;\n layout: EditViewLayoutManagerProps['layout'];\n query: object;\n}\n\nconst setLayout = (layout: SetLayoutAction['layout'], query: SetLayoutAction['query']) =>\n ({\n type: SET_LAYOUT,\n layout,\n query,\n } satisfies SetLayoutAction);\n\ninterface EditViewLayoutManagerState {\n currentLayout: {\n components: EditViewLayoutManagerProps['layout']['components'];\n contentType: EditViewLayoutManagerProps['layout']['contentType'] | null;\n };\n}\n\nconst initialState = {\n currentLayout: {\n components: {},\n contentType: null,\n },\n} satisfies EditViewLayoutManagerState;\n\ntype Action = ResetPropsAction | SetLayoutAction;\n\nconst reducer = (state: EditViewLayoutManagerState = initialState, action: Action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case RESET_PROPS: {\n draftState.currentLayout = initialState.currentLayout;\n break;\n }\n case SET_LAYOUT: {\n draftState.currentLayout = action.layout;\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport { EditViewLayoutManager, reducer };\nexport type { EditViewLayoutManagerProps, EditViewLayoutManagerState };\n","import type { Attribute } from '@strapi/types';\n\nconst checkIfAttributeIsDisplayable = (attribute: Attribute.Any) => {\n const { type } = attribute;\n\n if (type === 'relation') {\n return !attribute.relation.toLowerCase().includes('morph');\n }\n\n return !['json', 'dynamiczone', 'richtext', 'password', 'blocks'].includes(type) && !!type;\n};\n\nexport { checkIfAttributeIsDisplayable };\n","import React from 'react';\n\nimport {\n Button,\n Flex,\n Grid,\n GridItem,\n ModalBody,\n ModalFooter,\n ModalHeader,\n ModalLayout,\n TextInput,\n ToggleInput,\n Typography,\n} from '@strapi/design-system';\nimport upperFirst from 'lodash/upperFirst';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { FieldTypeIcon } from '../../../components/FieldTypeIcon';\nimport { getTranslation } from '../../../utils/translations';\n\nconst HeaderContainer = styled(Flex)`\n svg {\n width: ${32 / 16}rem;\n height: ${24 / 16}rem;\n margin-right: ${({ theme }) => theme.spaces[3]};\n }\n`;\n\nexport const EditFieldForm = ({\n attributes,\n fieldForm,\n fieldToEdit,\n onCloseModal,\n onChangeEditLabel,\n onSubmit,\n type,\n}) => {\n const { formatMessage } = useIntl();\n\n const relationType = attributes[fieldToEdit].relationType;\n\n let shouldDisplaySortToggle = !['media', 'relation'].includes(type);\n\n if (['oneWay', 'oneToOne', 'manyToOne'].includes(relationType)) {\n shouldDisplaySortToggle = true;\n }\n\n return (\n <ModalLayout onClose={onCloseModal} labelledBy=\"title\">\n <form onSubmit={onSubmit}>\n <ModalHeader>\n <HeaderContainer>\n <FieldTypeIcon type={type} />\n <Typography fontWeight=\"bold\" textColor=\"neutral800\" as=\"h2\" id=\"title\">\n {formatMessage(\n {\n id: getTranslation('containers.ListSettingsView.modal-form.edit-label'),\n defaultMessage: 'Edit {fieldName}',\n },\n { fieldName: upperFirst(fieldToEdit) }\n )}\n </Typography>\n </HeaderContainer>\n </ModalHeader>\n <ModalBody>\n <Grid gap={4}>\n <GridItem s={12} col={6}>\n <TextInput\n id=\"label-input\"\n label={formatMessage({\n id: getTranslation('form.Input.label'),\n defaultMessage: 'Label',\n })}\n name=\"label\"\n onChange={(e) => onChangeEditLabel(e)}\n value={fieldForm.label}\n hint={formatMessage({\n id: getTranslation('form.Input.label.inputDescription'),\n defaultMessage: \"This value overrides the label displayed in the table's head\",\n })}\n />\n </GridItem>\n {shouldDisplaySortToggle && (\n <GridItem s={12} col={6}>\n <ToggleInput\n data-testid=\"Enable sort on this field\"\n checked={fieldForm.sortable}\n label={formatMessage({\n id: getTranslation('form.Input.sort.field'),\n defaultMessage: 'Enable sort on this field',\n })}\n name=\"sortable\"\n onChange={(e) =>\n onChangeEditLabel({ target: { name: 'sortable', value: e.target.checked } })\n }\n onLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.on-label',\n defaultMessage: 'on',\n })}\n offLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.off-label',\n defaultMessage: 'off',\n })}\n />\n </GridItem>\n )}\n </Grid>\n </ModalBody>\n <ModalFooter\n startActions={\n <Button onClick={onCloseModal} variant=\"tertiary\">\n {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'Cancel' })}\n </Button>\n }\n endActions={\n <Button type=\"submit\">\n {formatMessage({ id: 'global.finish', defaultMessage: 'Finish' })}\n </Button>\n }\n />\n </form>\n </ModalLayout>\n );\n};\n\nEditFieldForm.propTypes = {\n attributes: PropTypes.objectOf(\n PropTypes.shape({\n relationType: PropTypes.string,\n })\n ).isRequired,\n fieldForm: PropTypes.shape({\n label: PropTypes.string,\n sortable: PropTypes.bool,\n }).isRequired,\n fieldToEdit: PropTypes.string.isRequired,\n onChangeEditLabel: PropTypes.func.isRequired,\n onCloseModal: PropTypes.func.isRequired,\n onSubmit: PropTypes.func.isRequired,\n type: PropTypes.string.isRequired,\n};\n","import React from 'react';\n\nimport {\n Box,\n Flex,\n Grid,\n GridItem,\n Option,\n Select,\n ToggleInput,\n Typography,\n} from '@strapi/design-system';\nimport { useCollator } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { useEnterprise } from '../../../../hooks/useEnterprise';\nimport { getTranslation } from '../../../utils/translations';\n\nexport const Settings = ({\n contentTypeOptions,\n modifiedData,\n onChange,\n sortOptions: sortOptionsCE,\n}) => {\n const { formatMessage, locale } = useIntl();\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n const sortOptions = useEnterprise(\n sortOptionsCE,\n async () =>\n (\n await import(\n '../../../../../../ee/admin/src/content-manager/pages/ListSettingsView/constants'\n )\n ).REVIEW_WORKFLOW_STAGE_SORT_OPTION_NAME,\n {\n combine(ceOptions, eeOption) {\n return [...ceOptions, { ...eeOption, label: formatMessage(eeOption.label) }];\n },\n\n defaultValue: sortOptionsCE,\n\n enabled: !!contentTypeOptions?.reviewWorkflows,\n }\n );\n\n const sortOptionsSorted = sortOptions.sort((a, b) => formatter.compare(a.label, b.label));\n const { settings } = modifiedData;\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: getTranslation('containers.SettingPage.settings'),\n defaultMessage: 'Settings',\n })}\n </Typography>\n\n <Flex justifyContent=\"space-between\" gap={4}>\n <Box width=\"100%\">\n <ToggleInput\n label={formatMessage({\n id: getTranslation('form.Input.search'),\n defaultMessage: 'Enable search',\n })}\n onChange={(e) => {\n onChange({ target: { name: 'settings.searchable', value: e.target.checked } });\n }}\n onLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.on-label',\n defaultMessage: 'on',\n })}\n offLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.off-label',\n defaultMessage: 'off',\n })}\n name=\"settings.searchable\"\n checked={settings.searchable}\n />\n </Box>\n\n <Box width=\"100%\">\n <ToggleInput\n label={formatMessage({\n id: getTranslation('form.Input.filters'),\n defaultMessage: 'Enable filters',\n })}\n onChange={(e) => {\n onChange({ target: { name: 'settings.filterable', value: e.target.checked } });\n }}\n onLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.on-label',\n defaultMessage: 'on',\n })}\n offLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.off-label',\n defaultMessage: 'off',\n })}\n name=\"settings.filterable\"\n checked={settings.filterable}\n />\n </Box>\n\n <Box width=\"100%\">\n <ToggleInput\n label={formatMessage({\n id: getTranslation('form.Input.bulkActions'),\n defaultMessage: 'Enable bulk actions',\n })}\n onChange={(e) => {\n onChange({ target: { name: 'settings.bulkable', value: e.target.checked } });\n }}\n onLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.on-label',\n defaultMessage: 'on',\n })}\n offLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.off-label',\n defaultMessage: 'off',\n })}\n name=\"settings.bulkable\"\n checked={settings.bulkable}\n />\n </Box>\n </Flex>\n\n <Grid gap={4}>\n <GridItem s={12} col={6}>\n <Select\n label={formatMessage({\n id: getTranslation('form.Input.pageEntries'),\n defaultMessage: 'Entries per page',\n })}\n hint={formatMessage({\n id: getTranslation('form.Input.pageEntries.inputDescription'),\n defaultMessage:\n 'Note: You can override this value in the Collection Type settings page.',\n })}\n onChange={(value) => onChange({ target: { name: 'settings.pageSize', value } })}\n name=\"settings.pageSize\"\n value={modifiedData.settings.pageSize || ''}\n >\n {[10, 20, 50, 100].map((pageSize) => (\n <Option key={pageSize} value={pageSize}>\n {pageSize}\n </Option>\n ))}\n </Select>\n </GridItem>\n <GridItem s={12} col={3}>\n <Select\n label={formatMessage({\n id: getTranslation('form.Input.defaultSort'),\n defaultMessage: 'Default sort attribute',\n })}\n onChange={(value) => onChange({ target: { name: 'settings.defaultSortBy', value } })}\n name=\"settings.defaultSortBy\"\n value={modifiedData.settings.defaultSortBy || ''}\n >\n {sortOptionsSorted.map(({ value, label }) => (\n <Option key={value} value={value}>\n {label}\n </Option>\n ))}\n </Select>\n </GridItem>\n <GridItem s={12} col={3}>\n <Select\n label={formatMessage({\n id: getTranslation('form.Input.sort.order'),\n defaultMessage: 'Default sort order',\n })}\n onChange={(value) => onChange({ target: { name: 'settings.defaultSortOrder', value } })}\n name=\"settings.defaultSortOrder\"\n value={modifiedData.settings.defaultSortOrder || ''}\n >\n {['ASC', 'DESC'].map((order) => (\n <Option key={order} value={order}>\n {order}\n </Option>\n ))}\n </Select>\n </GridItem>\n </Grid>\n </Flex>\n );\n};\n\nSettings.defaultProps = {\n modifiedData: {},\n sortOptions: [],\n};\n\nSettings.propTypes = {\n contentTypeOptions: PropTypes.object.isRequired,\n modifiedData: PropTypes.object,\n onChange: PropTypes.func.isRequired,\n sortOptions: PropTypes.arrayOf(\n PropTypes.shape({\n value: PropTypes.string,\n label: PropTypes.string,\n }).isRequired\n ),\n};\n","import React, { useEffect, useRef, useState } from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { Cross, Drag, Pencil } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useDrag, useDrop } from 'react-dnd';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { CardDragPreview } from '../../../components/DragPreviews/CardDragPreview';\nimport { ItemTypes } from '../../../utils/dragAndDrop';\nimport { getTranslation } from '../../../utils/translations';\n\nconst ActionButton = styled.button`\n display: flex;\n align-items: center;\n height: ${({ theme }) => theme.spaces[7]};\n\n &:last-child {\n padding: 0 ${({ theme }) => theme.spaces[3]};\n }\n`;\n\nconst DragButton = styled(ActionButton)`\n padding: 0 ${({ theme }) => theme.spaces[3]};\n border-right: 1px solid ${({ theme }) => theme.colors.neutral150};\n cursor: all-scroll;\n\n svg {\n width: ${12 / 16}rem;\n height: ${12 / 16}rem;\n }\n`;\n\nconst FieldContainer = styled(Flex)`\n max-height: ${32 / 16}rem;\n cursor: pointer;\n\n svg {\n width: ${10 / 16}rem;\n height: ${10 / 16}rem;\n\n path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n }\n\n &:hover {\n background-color: ${({ theme }) => theme.colors.primary100};\n border-color: ${({ theme }) => theme.colors.primary200};\n\n svg {\n path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n }\n\n ${Typography} {\n color: ${({ theme }) => theme.colors.primary600};\n }\n\n ${DragButton} {\n border-right: 1px solid ${({ theme }) => theme.colors.primary200};\n }\n }\n`;\n\nconst FieldWrapper = styled(Box)`\n &:last-child {\n padding-right: ${({ theme }) => theme.spaces[3]};\n }\n`;\n\nconst DraggableCard = ({\n index,\n isDraggingSibling,\n labelField,\n onClickEditField,\n onMoveField,\n onRemoveField,\n name,\n setIsDraggingSibling,\n}) => {\n const { formatMessage } = useIntl();\n const dragRef = useRef(null);\n const dropRef = useRef(null);\n const [, forceRerenderAfterDnd] = useState(false);\n const editButtonRef = useRef();\n\n const handleClickEditRow = () => {\n if (editButtonRef.current) {\n editButtonRef.current.click();\n }\n };\n\n // TODO: this can be simplified a lot by using the useDragAndDrop() hook\n const [, drop] = useDrop({\n accept: ItemTypes.FIELD,\n hover(item, monitor) {\n if (!dropRef.current) {\n return;\n }\n const dragIndex = item.index;\n const hoverIndex = index;\n\n // Don't replace items with themselves\n if (dragIndex === hoverIndex) {\n return;\n }\n\n // Determine rectangle on screen\n const hoverBoundingRect = dropRef.current.getBoundingClientRect();\n // Get vertical middle\n const hoverMiddleX = (hoverBoundingRect.right - hoverBoundingRect.left) / 2;\n // Determine mouse position\n const clientOffset = monitor.getClientOffset();\n // Get pixels to the top\n const hoverClientX = clientOffset.x - hoverBoundingRect.left;\n\n // Only perform the move when the mouse has crossed half of the items height\n // When dragging downwards, only move when the cursor is below 50%\n // When dragging upwards, only move when the cursor is above 50%\n // Dragging downwards\n if (dragIndex > hoverIndex && hoverClientX > hoverMiddleX) {\n return;\n }\n // Dragging upwards\n if (dragIndex < hoverIndex && hoverClientX < hoverMiddleX) {\n return;\n }\n\n onMoveField(dragIndex, hoverIndex);\n\n item.index = hoverIndex;\n },\n });\n\n const [{ isDragging }, drag, preview] = useDrag({\n type: ItemTypes.FIELD,\n item() {\n return { index, labelField, name };\n },\n collect: (monitor) => ({\n isDragging: monitor.isDragging(),\n }),\n end() {\n setIsDraggingSibling(false);\n },\n });\n\n useEffect(() => {\n preview(getEmptyImage(), { captureDraggingState: false });\n }, [preview]);\n\n useEffect(() => {\n if (isDragging) {\n setIsDraggingSibling(true);\n }\n }, [isDragging, setIsDraggingSibling]);\n\n // Effect in order to force a rerender after reordering the components\n // Since we are removing the Accordion when doing the DnD we are losing the dragRef, therefore the replaced element cannot be dragged\n // anymore, this hack forces a rerender in order to apply the dragRef\n useEffect(() => {\n if (!isDraggingSibling) {\n forceRerenderAfterDnd((prev) => !prev);\n }\n }, [isDraggingSibling]);\n\n // Create the refs\n // We need 1 for the drop target\n // 1 for the drag target\n const refs = {\n dragRef: drag(dragRef),\n dropRef: drop(dropRef),\n };\n\n return (\n <FieldWrapper ref={refs ? refs.dropRef : null}>\n {isDragging && <CardDragPreview labelField={labelField} />}\n {!isDragging && isDraggingSibling && <CardDragPreview isSibling labelField={labelField} />}\n\n {!isDragging && !isDraggingSibling && (\n <FieldContainer\n borderColor=\"neutral150\"\n background=\"neutral100\"\n hasRadius\n justifyContent=\"space-between\"\n onClick={handleClickEditRow}\n isDragging={isDragging}\n >\n <Flex gap={3}>\n <DragButton\n as=\"span\"\n aria-label={formatMessage(\n {\n id: getTranslation('components.DraggableCard.move.field'),\n defaultMessage: 'Move {item}',\n },\n { item: labelField }\n )}\n onClick={(e) => e.stopPropagation()}\n ref={refs.dragRef}\n type=\"button\"\n >\n <Drag />\n </DragButton>\n <Typography fontWeight=\"bold\">{labelField}</Typography>\n </Flex>\n <Flex paddingLeft={3}>\n <ActionButton\n ref={editButtonRef}\n onClick={(e) => {\n e.stopPropagation();\n onClickEditField(name);\n }}\n aria-label={formatMessage(\n {\n id: getTranslation('components.DraggableCard.edit.field'),\n defaultMessage: 'Edit {item}',\n },\n { item: labelField }\n )}\n type=\"button\"\n >\n <Pencil />\n </ActionButton>\n <ActionButton\n onClick={onRemoveField}\n data-testid={`delete-${name}`}\n aria-label={formatMessage(\n {\n id: getTranslation('components.DraggableCard.delete.field'),\n defaultMessage: 'Delete {item}',\n },\n { item: labelField }\n )}\n type=\"button\"\n >\n <Cross />\n </ActionButton>\n </Flex>\n </FieldContainer>\n )}\n </FieldWrapper>\n );\n};\n\nDraggableCard.propTypes = {\n index: PropTypes.number.isRequired,\n isDraggingSibling: PropTypes.bool.isRequired,\n labelField: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n onClickEditField: PropTypes.func.isRequired,\n onMoveField: PropTypes.func.isRequired,\n onRemoveField: PropTypes.func.isRequired,\n setIsDraggingSibling: PropTypes.func.isRequired,\n};\n\nexport default DraggableCard;\n","import React, { useEffect, useRef, useState } from 'react';\n\nimport { Box, Flex, VisuallyHidden, Typography } from '@strapi/design-system';\nimport { Menu } from '@strapi/design-system/v2';\nimport { Plus } from '@strapi/icons';\nimport { PropTypes } from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { getTranslation } from '../../../utils/translations';\n\nimport DraggableCard from './DraggableCard';\n\nexport const SortDisplayedFields = ({\n displayedFields,\n listRemainingFields,\n metadatas,\n onAddField,\n onClickEditField,\n onMoveField,\n onRemoveField,\n}) => {\n const { formatMessage } = useIntl();\n const [isDraggingSibling, setIsDraggingSibling] = useState(false);\n const [lastAction, setLastAction] = useState(null);\n const scrollableContainerRef = useRef();\n\n function handleAddField(...args) {\n setLastAction('add');\n onAddField(...args);\n }\n\n function handleRemoveField(...args) {\n setLastAction('remove');\n onRemoveField(...args);\n }\n\n useEffect(() => {\n if (lastAction === 'add' && scrollableContainerRef?.current) {\n scrollableContainerRef.current.scrollLeft = scrollableContainerRef.current.scrollWidth;\n }\n }, [displayedFields, lastAction]);\n\n return (\n <Flex alignItems=\"stretch\" direction=\"column\" gap={4}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: getTranslation('containers.SettingPage.view'),\n defaultMessage: 'View',\n })}\n </Typography>\n\n <Flex padding={4} borderColor=\"neutral300\" borderStyle=\"dashed\" borderWidth=\"1px\" hasRadius>\n <Box flex=\"1\" overflow=\"scroll hidden\" ref={scrollableContainerRef}>\n <Flex gap={3}>\n {displayedFields.map((field, index) => (\n <DraggableCard\n key={field}\n index={index}\n isDraggingSibling={isDraggingSibling}\n onMoveField={onMoveField}\n onClickEditField={onClickEditField}\n onRemoveField={(e) => handleRemoveField(e, index)}\n name={field}\n labelField={metadatas[field].list.label || field}\n setIsDraggingSibling={setIsDraggingSibling}\n />\n ))}\n </Flex>\n </Box>\n\n <Menu.Root>\n <Menu.Trigger\n paddingLeft={2}\n paddingRight={2}\n justifyContent=\"center\"\n endIcon={null}\n disabled={listRemainingFields.length <= 0}\n variant=\"tertiary\"\n >\n <VisuallyHidden as=\"span\">\n {formatMessage({\n id: getTranslation('components.FieldSelect.label'),\n defaultMessage: 'Add a field',\n })}\n </VisuallyHidden>\n <Plus aria-hidden focusable={false} style={{ position: 'relative', top: 2 }} />\n </Menu.Trigger>\n <Menu.Content>\n {listRemainingFields.map((field) => (\n <Menu.Item key={field} onSelect={() => handleAddField(field)}>\n {metadatas[field].list.label || field}\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Root>\n </Flex>\n </Flex>\n );\n};\n\nSortDisplayedFields.propTypes = {\n displayedFields: PropTypes.array.isRequired,\n listRemainingFields: PropTypes.array.isRequired,\n metadatas: PropTypes.objectOf(\n PropTypes.shape({\n list: PropTypes.shape({\n label: PropTypes.string,\n }),\n })\n ).isRequired,\n onAddField: PropTypes.func.isRequired,\n onClickEditField: PropTypes.func.isRequired,\n onMoveField: PropTypes.func.isRequired,\n onRemoveField: PropTypes.func.isRequired,\n};\n","export const EXCLUDED_SORT_ATTRIBUTE_TYPES = [\n 'media',\n 'richtext',\n 'dynamiczone',\n 'relation',\n 'component',\n 'json',\n 'blocks',\n];\n","import produce from 'immer'; // current\nimport get from 'lodash/get';\nimport set from 'lodash/set';\n\nimport { arrayMoveItem } from '../../utils/arrayMoveItem';\n\nconst initialState = {\n fieldForm: {},\n fieldToEdit: '',\n initialData: {},\n modifiedData: {},\n};\n\nconst reducer = (state = initialState, action) =>\n // eslint-disable-next-line consistent-return\n produce(state, (draftState) => {\n const layoutFieldListPath = ['modifiedData', 'layouts', 'list'];\n switch (action.type) {\n case 'ADD_FIELD': {\n const layoutFieldList = get(state, layoutFieldListPath, []);\n set(draftState, layoutFieldListPath, [...layoutFieldList, action.item]);\n break;\n }\n case 'MOVE_FIELD': {\n const layoutFieldList = get(state, layoutFieldListPath, []);\n const { originalIndex, atIndex } = action;\n set(\n draftState,\n layoutFieldListPath,\n arrayMoveItem(layoutFieldList, originalIndex, atIndex)\n );\n break;\n }\n case 'ON_CHANGE': {\n set(draftState, ['modifiedData', ...action.keys.split('.')], action.value);\n break;\n }\n case 'ON_CHANGE_FIELD_METAS': {\n set(draftState, ['fieldForm', action.name], action.value);\n break;\n }\n case 'REMOVE_FIELD': {\n const layoutFieldList = get(state, layoutFieldListPath, []);\n set(\n draftState,\n layoutFieldListPath,\n layoutFieldList.filter((_, index) => action.index !== index)\n );\n break;\n }\n case 'SET_FIELD_TO_EDIT': {\n const { fieldToEdit } = action;\n draftState.fieldToEdit = fieldToEdit;\n draftState.fieldForm.label = get(\n draftState,\n ['modifiedData', 'metadatas', fieldToEdit, 'list', 'label'],\n ''\n );\n draftState.fieldForm.sortable = get(\n draftState,\n ['modifiedData', 'metadatas', fieldToEdit, 'list', 'sortable'],\n ''\n );\n break;\n }\n case 'UNSET_FIELD_TO_EDIT': {\n draftState.fieldForm = {};\n draftState.fieldToEdit = '';\n break;\n }\n case 'SUBMIT_FIELD_FORM': {\n const fieldMetadataPath = ['modifiedData', 'metadatas', state.fieldToEdit, 'list'];\n set(draftState, [...fieldMetadataPath, 'label'], state.fieldForm.label);\n set(draftState, [...fieldMetadataPath, 'sortable'], state.fieldForm.sortable);\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport default reducer;\nexport { initialState };\n","import * as React from 'react';\n\nimport {\n Button,\n ContentLayout,\n Divider,\n Flex,\n HeaderLayout,\n Layout,\n Main,\n} from '@strapi/design-system';\nimport {\n Link,\n useFetchClient,\n useNotification,\n useQueryParams,\n useTracking,\n} from '@strapi/helper-plugin';\nimport { ArrowLeft, Check } from '@strapi/icons';\nimport isEqual from 'lodash/isEqual';\nimport upperFirst from 'lodash/upperFirst';\nimport PropTypes from 'prop-types';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useMutation } from 'react-query';\n\nimport { ModelsContext } from '../../contexts/models';\nimport { checkIfAttributeIsDisplayable } from '../../utils/attributes';\nimport { getTranslation } from '../../utils/translations';\n\nimport { EditFieldForm } from './components/EditFieldForm';\nimport { Settings } from './components/Settings';\nimport { SortDisplayedFields } from './components/SortDisplayedFields';\nimport { EXCLUDED_SORT_ATTRIBUTE_TYPES } from './constants';\nimport reducer, { initialState } from './reducer';\n\nexport const ListSettingsView = ({ layout, slug }) => {\n const { put } = useFetchClient();\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const [{ query }] = useQueryParams();\n const toggleNotification = useNotification();\n const { refetchData } = React.useContext(ModelsContext);\n const [{ fieldToEdit, fieldForm, initialData, modifiedData }, dispatch] = React.useReducer(\n reducer,\n initialState,\n () => ({\n ...initialState,\n initialData: layout,\n modifiedData: layout,\n })\n );\n\n const isModalFormOpen = Object.keys(fieldForm).length !== 0;\n\n const { attributes, options } = layout;\n const displayedFields = modifiedData.layouts.list;\n\n const handleChange = ({ target: { name, value } }) => {\n dispatch({\n type: 'ON_CHANGE',\n keys: name,\n value: name === 'settings.pageSize' ? parseInt(value, 10) : value,\n });\n };\n\n const { isLoading: isSubmittingForm, mutate } = useMutation(\n (body) => put(`/content-manager/content-types/${slug}/configuration`, body),\n {\n onSuccess() {\n trackUsage('didEditListSettings');\n refetchData();\n },\n onError() {\n toggleNotification({\n type: 'warning',\n message: { id: 'notification.error' },\n });\n },\n }\n );\n\n const handleAddField = (item) => {\n dispatch({\n type: 'ADD_FIELD',\n item,\n });\n };\n\n const handleRemoveField = (e, index) => {\n e.stopPropagation();\n\n if (displayedFields.length === 1) {\n toggleNotification({\n type: 'info',\n message: { id: getTranslation('notification.info.minimumFields') },\n });\n } else {\n dispatch({\n type: 'REMOVE_FIELD',\n index,\n });\n }\n };\n\n const handleSubmit = (event) => {\n event.preventDefault();\n\n const { layouts, settings, metadatas } = modifiedData;\n\n mutate({\n layouts,\n settings,\n metadatas,\n });\n\n trackUsage('willSaveContentTypeLayout');\n };\n\n const handleClickEditField = (fieldToEdit) => {\n dispatch({\n type: 'SET_FIELD_TO_EDIT',\n fieldToEdit,\n });\n };\n\n const handleCloseModal = () => {\n dispatch({\n type: 'UNSET_FIELD_TO_EDIT',\n });\n };\n\n const handleSubmitFieldEdit = (e) => {\n e.preventDefault();\n dispatch({\n type: 'SUBMIT_FIELD_FORM',\n });\n handleCloseModal();\n };\n\n const handleChangeEditLabel = ({ target: { name, value } }) => {\n dispatch({\n type: 'ON_CHANGE_FIELD_METAS',\n name,\n value,\n });\n };\n\n const listRemainingFields = Object.entries(attributes)\n .filter(\n ([name, attribute]) =>\n checkIfAttributeIsDisplayable(attribute) && !displayedFields.includes(name)\n )\n .map(([name]) => name)\n .sort();\n\n const sortOptions = Object.entries(attributes)\n .filter(([, attribute]) => !EXCLUDED_SORT_ATTRIBUTE_TYPES.includes(attribute.type))\n .map(([name]) => ({\n value: name,\n label: layout.metadatas[name].list.label,\n }));\n\n const move = (originalIndex, atIndex) => {\n dispatch({\n type: 'MOVE_FIELD',\n originalIndex,\n atIndex,\n });\n };\n\n const {\n settings: { pageSize, defaultSortBy, defaultSortOrder },\n kind,\n uid,\n } = initialData;\n\n return (\n <Layout>\n <Main aria-busy={isSubmittingForm}>\n <form onSubmit={handleSubmit}>\n <HeaderLayout\n navigationAction={\n <Link\n startIcon={<ArrowLeft />}\n to={{\n to: `/content-manager/${kind}/${uid}`,\n search: stringify(\n {\n page: 1,\n pageSize,\n sort: `${defaultSortBy}:${defaultSortOrder}`,\n plugins: query.plugins,\n },\n {\n encode: false,\n }\n ),\n }}\n id=\"go-back\"\n >\n {formatMessage({ id: 'global.back', defaultMessage: 'Back' })}\n </Link>\n }\n primaryAction={\n <Button\n size=\"S\"\n startIcon={<Check />}\n disabled={isEqual(modifiedData, initialData)}\n type=\"submit\"\n >\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n }\n subtitle={formatMessage({\n id: getTranslation(\n 'components.SettingsViewWrapper.pluginHeader.description.list-settings'\n ),\n defaultMessage: 'Define the settings of the list view.',\n })}\n title={formatMessage(\n {\n id: getTranslation('components.SettingsViewWrapper.pluginHeader.title'),\n defaultMessage: 'Configure the view - {name}',\n },\n { name: upperFirst(modifiedData.info.displayName) }\n )}\n />\n <ContentLayout>\n <Flex\n alignItems=\"stretch\"\n background=\"neutral0\"\n direction=\"column\"\n gap={6}\n hasRadius\n shadow=\"tableShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Settings\n contentTypeOptions={options}\n modifiedData={modifiedData}\n onChange={handleChange}\n sortOptions={sortOptions}\n />\n\n <Divider />\n\n <SortDisplayedFields\n listRemainingFields={listRemainingFields}\n displayedFields={displayedFields}\n onAddField={handleAddField}\n onClickEditField={handleClickEditField}\n onMoveField={move}\n onRemoveField={handleRemoveField}\n metadatas={modifiedData.metadatas}\n />\n </Flex>\n </ContentLayout>\n </form>\n\n {isModalFormOpen && (\n <EditFieldForm\n attributes={attributes}\n fieldForm={fieldForm}\n fieldToEdit={fieldToEdit}\n onChangeEditLabel={handleChangeEditLabel}\n onCloseModal={handleCloseModal}\n onSubmit={handleSubmitFieldEdit}\n type={attributes?.[fieldToEdit]?.type ?? 'text'}\n />\n )}\n </Main>\n </Layout>\n );\n};\n\nListSettingsView.propTypes = {\n layout: PropTypes.shape({\n uid: PropTypes.string.isRequired,\n settings: PropTypes.shape({\n bulkable: PropTypes.bool,\n defaultSortBy: PropTypes.string,\n defaultSortOrder: PropTypes.string,\n filterable: PropTypes.bool,\n pageSize: PropTypes.number,\n searchable: PropTypes.bool,\n }).isRequired,\n metadatas: PropTypes.object.isRequired,\n options: PropTypes.object.isRequired,\n attributes: PropTypes.objectOf(\n PropTypes.shape({\n type: PropTypes.string,\n })\n ).isRequired,\n }).isRequired,\n slug: PropTypes.string.isRequired,\n};\n","import { Entity } from '@strapi/types';\n\nimport * as Permissions from '../../../shared/contracts/permissions';\nimport * as Roles from '../../../shared/contracts/roles';\nimport * as Users from '../../../shared/contracts/user';\n\nimport { adminApi } from './api';\n\nconst usersService = adminApi.injectEndpoints({\n endpoints: (builder) => ({\n /**\n * users\n */\n createUser: builder.mutation<Users.Create.Response['data'], Users.Create.Request['body']>({\n query: (body) => ({\n url: '/admin/users',\n method: 'POST',\n data: body,\n }),\n transformResponse: (response: Users.Create.Response) => response.data,\n invalidatesTags: ['LicenseLimits', { type: 'User', id: 'LIST' }],\n }),\n updateUser: builder.mutation<\n Users.Update.Response['data'],\n Omit<Users.Update.Request['body'] & Users.Update.Params, 'blocked'>\n >({\n query: ({ id, ...body }) => ({\n url: `/admin/users/${id}`,\n method: 'PUT',\n data: body,\n }),\n invalidatesTags: (_res, _err, { id }) => [\n { type: 'User', id },\n { type: 'User', id: 'LIST' },\n ],\n }),\n getUsers: builder.query<\n {\n users: Users.FindAll.Response['data']['results'];\n pagination: Users.FindAll.Response['data']['pagination'] | null;\n },\n GetUsersParams | void\n >({\n query: ({ id, ...params } = {}) => ({\n url: `/admin/users/${id ?? ''}`,\n method: 'GET',\n config: {\n params,\n },\n }),\n transformResponse: (res: Users.FindAll.Response | Users.FindOne.Response) => {\n let users: Users.FindAll.Response['data']['results'] = [];\n\n if (res.data) {\n if ('results' in res.data) {\n if (Array.isArray(res.data.results)) {\n users = res.data.results;\n }\n } else {\n users = [res.data];\n }\n }\n\n return {\n users,\n pagination: 'pagination' in res.data ? res.data.pagination : null,\n };\n },\n providesTags: (res, _err, arg) => {\n if (typeof arg === 'object' && 'id' in arg) {\n return [{ type: 'User' as const, id: arg.id }];\n } else {\n return [\n ...(res?.users.map(({ id }) => ({ type: 'User' as const, id })) ?? []),\n { type: 'User' as const, id: 'LIST' },\n ];\n }\n },\n }),\n deleteManyUsers: builder.mutation<\n Users.DeleteMany.Response['data'],\n Users.DeleteMany.Request['body']\n >({\n query: (body) => ({\n url: '/admin/users/batch-delete',\n method: 'POST',\n data: body,\n }),\n transformResponse: (res: Users.DeleteMany.Response) => res.data,\n invalidatesTags: ['LicenseLimits', { type: 'User', id: 'LIST' }],\n }),\n /**\n * roles\n */\n createRole: builder.mutation<Roles.Create.Response['data'], Roles.Create.Request['body']>({\n query: (body) => ({\n url: '/admin/roles',\n method: 'POST',\n data: body,\n }),\n transformResponse: (res: Roles.Create.Response) => res.data,\n invalidatesTags: [{ type: 'Role', id: 'LIST' }],\n }),\n getRoles: builder.query<Roles.FindRoles.Response['data'], GetRolesParams | void>({\n query: ({ id, ...params } = {}) => ({\n url: `/admin/roles/${id ?? ''}`,\n method: 'GET',\n config: {\n params,\n },\n }),\n transformResponse: (res: Roles.FindRole.Response | Roles.FindRoles.Response) => {\n let roles: Roles.FindRoles.Response['data'] = [];\n\n if (res.data) {\n if (Array.isArray(res.data)) {\n roles = res.data;\n } else {\n roles = [res.data];\n }\n }\n\n return roles;\n },\n providesTags: (res, _err, arg) => {\n if (typeof arg === 'object' && 'id' in arg) {\n return [{ type: 'Role' as const, id: arg.id }];\n } else {\n return [\n ...(res?.map(({ id }) => ({ type: 'Role' as const, id })) ?? []),\n { type: 'Role' as const, id: 'LIST' },\n ];\n }\n },\n }),\n updateRole: builder.mutation<\n Roles.Update.Response['data'],\n Roles.Update.Request['body'] & Roles.Update.Request['params']\n >({\n query: ({ id, ...body }) => ({\n url: `/admin/roles/${id}`,\n method: 'PUT',\n data: body,\n }),\n transformResponse: (res: Roles.Create.Response) => res.data,\n invalidatesTags: (_res, _err, { id }) => [{ type: 'Role' as const, id }],\n }),\n getRolePermissions: builder.query<\n Roles.GetPermissions.Response['data'],\n GetRolePermissionsParams\n >({\n query: ({ id, ...params }) => ({\n url: `/admin/roles/${id}/permissions`,\n method: 'GET',\n config: {\n params,\n },\n }),\n transformResponse: (res: Roles.GetPermissions.Response) => res.data,\n providesTags: (_res, _err, { id }) => [{ type: 'RolePermissions' as const, id }],\n }),\n updateRolePermissions: builder.mutation<\n Roles.UpdatePermissions.Response['data'],\n Roles.UpdatePermissions.Request['body'] & Roles.UpdatePermissions.Request['params']\n >({\n query: ({ id, ...body }) => ({\n url: `/admin/roles/${id}/permissions`,\n method: 'PUT',\n data: body,\n }),\n transformResponse: (res: Roles.UpdatePermissions.Response) => res.data,\n invalidatesTags: (_res, _err, { id }) => [{ type: 'RolePermissions' as const, id }],\n }),\n /**\n * Permissions\n */\n getRolePermissionLayout: builder.query<\n Permissions.GetAll.Response['data'],\n Permissions.GetAll.Request['params']\n >({\n query: (params) => ({\n url: '/admin/permissions',\n method: 'GET',\n config: {\n params,\n },\n }),\n transformResponse: (res: Permissions.GetAll.Response) => res.data,\n }),\n }),\n overrideExisting: false,\n});\n\ntype GetUsersParams = Users.FindOne.Params | (Users.FindAll.Request['query'] & { id?: never });\ntype GetRolesParams =\n | Roles.FindRole.Request['params']\n | (Roles.FindRoles.Request['query'] & { id?: never });\ninterface GetRolePermissionsParams {\n id: Entity.ID;\n}\n\nconst {\n useCreateUserMutation,\n useGetUsersQuery,\n useUpdateUserMutation,\n useDeleteManyUsersMutation,\n useGetRolesQuery,\n useCreateRoleMutation,\n useUpdateRoleMutation,\n useGetRolePermissionsQuery,\n useGetRolePermissionLayoutQuery,\n useUpdateRolePermissionsMutation,\n} = usersService;\n\nconst useAdminUsers = useGetUsersQuery;\n\nexport {\n useUpdateUserMutation,\n useGetRolesQuery,\n useAdminUsers,\n useDeleteManyUsersMutation,\n useCreateUserMutation,\n useGetRolePermissionsQuery,\n useGetRolePermissionLayoutQuery,\n useCreateRoleMutation,\n useUpdateRolePermissionsMutation,\n useUpdateRoleMutation,\n};\nexport type { GetRolesParams, GetUsersParams, GetRolePermissionsParams };\n","import { Combobox, ComboboxOption, ComboboxProps } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useAdminUsers } from '../../../../services/users';\nimport { getDisplayName } from '../../../utils/users';\n\ninterface AdminUsersFilterProps extends Pick<ComboboxProps, 'value' | 'onChange'> {}\n\nconst AdminUsersFilter = ({ value, onChange }: AdminUsersFilterProps) => {\n const { formatMessage } = useIntl();\n const { data, isLoading } = useAdminUsers();\n\n const users = data?.users || [];\n\n return (\n <Combobox\n value={value}\n aria-label={formatMessage({\n id: 'content-manager.components.Filters.usersSelect.label',\n defaultMessage: 'Search and select an user to filter',\n })}\n onChange={onChange}\n loading={isLoading}\n >\n {users.map((user) => {\n return (\n <ComboboxOption key={user.id} value={user.id.toString()}>\n {getDisplayName(user, formatMessage)}\n </ComboboxOption>\n );\n })}\n </Combobox>\n );\n};\n\nexport { AdminUsersFilter };\nexport type { AdminUsersFilterProps };\n","import * as React from 'react';\n\nimport {\n Box,\n Button,\n Flex,\n Icon,\n ModalBody,\n ModalFooter,\n ModalHeader,\n ModalLayout,\n Typography,\n} from '@strapi/design-system';\nimport { LinkButton } from '@strapi/design-system/v2';\nimport { ChevronRight } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useLocation, NavLink } from 'react-router-dom';\n\nimport { getTranslation } from '../../../utils/translations';\n\nimport type { Entity } from '@strapi/types';\n\ntype Reason = 'relation' | 'unique';\ntype ProhibitedCloningField = [string[], Reason];\n\ninterface AutoCloneFailureModalProps {\n onClose: () => void;\n entryId: Entity.ID | null;\n prohibitedFields: ProhibitedCloningField[];\n pluginQueryParams: string;\n}\n\nconst AutoCloneFailureModal = ({\n onClose,\n entryId,\n prohibitedFields,\n pluginQueryParams,\n}: AutoCloneFailureModalProps) => {\n const { formatMessage } = useIntl();\n const { pathname } = useLocation();\n\n if (!entryId) {\n return null;\n }\n\n const editPath = `${pathname}/create/clone/${entryId}?${pluginQueryParams}`;\n\n const getDefaultErrorMessage = (reason: Reason) => {\n switch (reason) {\n case 'relation':\n return 'Duplicating the relation could remove it from the original entry.';\n case 'unique':\n return 'Identical values in a unique field are not allowed';\n default:\n return reason;\n }\n };\n\n return (\n <ModalLayout onClose={onClose} labelledBy=\"title\">\n <ModalHeader>\n <Typography variant=\"omega\" fontWeight=\"bold\" as=\"h2\" id=\"title\">\n {formatMessage({\n id: getTranslation('containers.ListPage.autoCloneModal.header'),\n defaultMessage: 'Duplicate',\n })}\n </Typography>\n </ModalHeader>\n <ModalBody>\n <Typography variant=\"beta\">\n {formatMessage({\n id: getTranslation('containers.ListPage.autoCloneModal.title'),\n defaultMessage: \"This entry can't be duplicated directly.\",\n })}\n </Typography>\n <Box marginTop={2}>\n <Typography textColor=\"neutral600\">\n {formatMessage({\n id: getTranslation('containers.ListPage.autoCloneModal.description'),\n defaultMessage:\n \"A new entry will be created with the same content, but you'll have to change the following fields to save it.\",\n })}\n </Typography>\n </Box>\n <Flex marginTop={6} gap={2} direction=\"column\" alignItems=\"stretch\">\n {prohibitedFields.map(([fieldPath, reason]) => (\n <Flex\n direction=\"column\"\n gap={2}\n alignItems=\"flex-start\"\n borderColor=\"neutral200\"\n hasRadius\n padding={6}\n key={fieldPath.join()}\n >\n <Flex direction=\"row\" as=\"ol\">\n {fieldPath.map((pathSegment, index) => (\n <Typography fontWeight=\"semiBold\" as=\"li\" key={index}>\n {pathSegment}\n {index !== fieldPath.length - 1 && (\n <Icon\n as={ChevronRight}\n color=\"neutral500\"\n height={2}\n width={2}\n marginLeft={2}\n marginRight={2}\n />\n )}\n </Typography>\n ))}\n </Flex>\n <Typography as=\"p\" textColor=\"neutral600\">\n {formatMessage({\n id: getTranslation(`containers.ListPage.autoCloneModal.error.${reason}`),\n defaultMessage: getDefaultErrorMessage(reason),\n })}\n </Typography>\n </Flex>\n ))}\n </Flex>\n </ModalBody>\n <ModalFooter\n startActions={\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({\n id: 'cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n }\n endActions={\n // @ts-expect-error - types are not inferred correctly through the as prop.\n <LinkButton as={NavLink} to={editPath}>\n {formatMessage({\n id: getTranslation('containers.ListPage.autoCloneModal.create'),\n defaultMessage: 'Create',\n })}\n </LinkButton>\n }\n />\n </ModalLayout>\n );\n};\n\nexport { AutoCloneFailureModal };\nexport type { ProhibitedCloningField };\n","import { Box } from '@strapi/design-system';\n\nimport { InjectionZoneArea } from '../../../../components/InjectionZone';\nimport { useInjectionZone } from '../../../../hooks/useInjectionZone';\n\ninterface InjectionZoneListProps {\n area: InjectionZoneArea;\n}\n\nconst InjectionZoneList = ({ area, ...props }: InjectionZoneListProps) => {\n const injectedComponents = useInjectionZone(area);\n\n if (!injectedComponents) {\n return null;\n }\n\n return (\n <ul>\n {injectedComponents.map(({ name, Component }) => (\n <Box key={name} padding={3} style={{ textAlign: 'center' }}>\n <Component {...props} />\n </Box>\n ))}\n </ul>\n );\n};\n\nexport { InjectionZoneList };\nexport type { InjectionZoneListProps };\n","import * as React from 'react';\n\nimport {\n Button,\n Flex,\n Dialog,\n DialogBody,\n DialogFooter,\n Typography,\n DialogFooterProps,\n} from '@strapi/design-system';\nimport {\n useTableContext,\n useFetchClient,\n useNotification,\n useAPIErrorHandler,\n useQueryParams,\n} from '@strapi/helper-plugin';\nimport { Check, ExclamationMarkCircle } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useQuery } from 'react-query';\n\nimport { useTypedSelector } from '../../../../../core/store/hooks';\nimport { getTranslation } from '../../../../utils/translations';\nimport { InjectionZoneList } from '../InjectionZoneList';\n\nimport type { Contracts } from '@strapi/plugin-content-manager/_internal/shared';\nimport type { AxiosError } from 'axios';\n\ninterface ConfirmBulkActionDialogProps extends Pick<DialogFooterProps, 'endAction'> {\n onToggleDialog: () => void;\n isOpen?: boolean;\n dialogBody: React.ReactNode;\n}\n\nconst ConfirmBulkActionDialog = ({\n onToggleDialog,\n isOpen = false,\n dialogBody,\n endAction,\n}: ConfirmBulkActionDialogProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Dialog\n onClose={onToggleDialog}\n title={formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n })}\n isOpen={isOpen}\n >\n <DialogBody icon={<ExclamationMarkCircle />}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n {dialogBody}\n </Flex>\n </DialogBody>\n <DialogFooter\n startAction={\n <Button onClick={onToggleDialog} variant=\"tertiary\">\n {formatMessage({\n id: 'app.components.Button.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n }\n endAction={endAction}\n />\n </Dialog>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * BoldChunk\n * -----------------------------------------------------------------------------------------------*/\n\nconst BoldChunk = (chunks: React.ReactNode) => <Typography fontWeight=\"bold\">{chunks}</Typography>;\n\n/* -------------------------------------------------------------------------------------------------\n * ConfirmDialogPublishAll\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ConfirmDialogPublishAllProps\n extends Pick<ConfirmBulkActionDialogProps, 'isOpen' | 'onToggleDialog'> {\n isConfirmButtonLoading?: boolean;\n onConfirm: () => void;\n}\n\nconst ConfirmDialogPublishAll = ({\n isOpen,\n onToggleDialog,\n isConfirmButtonLoading = false,\n onConfirm,\n}: ConfirmDialogPublishAllProps) => {\n const { formatMessage } = useIntl();\n const { get } = useFetchClient();\n const { selectedEntries } = useTableContext();\n const toggleNotification = useNotification();\n const { formatAPIError } = useAPIErrorHandler(getTranslation);\n const contentType = useTypedSelector((state) => state['content-manager_listView'].contentType);\n const [{ query }] = useQueryParams<{\n plugins?: {\n i18n?: {\n locale?: string;\n };\n };\n }>();\n\n const slug = contentType?.uid ?? '';\n\n const {\n data: countDraftRelations = 0,\n isLoading,\n isError,\n } = useQuery<\n Contracts.CollectionTypes.CountManyEntriesDraftRelations.Response['data'],\n AxiosError<\n Required<Pick<Contracts.CollectionTypes.CountManyEntriesDraftRelations.Response, 'error'>>\n >\n >(\n ['content-manager', 'draft-relations', slug, selectedEntries],\n async () => {\n const {\n data: { data },\n } = await get<Contracts.CollectionTypes.CountManyEntriesDraftRelations.Response>(\n `/content-manager/collection-types/${slug}/actions/countManyEntriesDraftRelations`,\n {\n params: {\n ids: selectedEntries,\n locale: query?.plugins?.i18n?.locale,\n },\n }\n );\n\n return data;\n },\n {\n // The API is called everytime you select/deselect an entry, this check avoids us sending a query with bad data\n enabled: selectedEntries.length > 0,\n onError(error) {\n toggleNotification({ type: 'warning', message: formatAPIError(error) });\n },\n }\n );\n\n if (isError) {\n return null;\n }\n\n return (\n <ConfirmBulkActionDialog\n isOpen={isOpen && !isLoading}\n onToggleDialog={onToggleDialog}\n dialogBody={\n <>\n <Typography id=\"confirm-description\" textAlign=\"center\">\n {countDraftRelations > 0 &&\n formatMessage(\n {\n id: getTranslation(`popUpwarning.warning.bulk-has-draft-relations.message`),\n defaultMessage:\n '<b>{count} {count, plural, one { relation } other { relations } } out of {entities} { entities, plural, one { entry } other { entries } } {count, plural, one { is } other { are } }</b> not published yet and might lead to unexpected behavior. ',\n },\n {\n b: BoldChunk,\n count: countDraftRelations,\n entities: selectedEntries.length,\n }\n )}\n {formatMessage({\n id: getTranslation('popUpWarning.bodyMessage.contentType.publish.all'),\n defaultMessage: 'Are you sure you want to publish these entries?',\n })}\n </Typography>\n <InjectionZoneList area=\"contentManager.listView.publishModalAdditionalInfos\" />\n </>\n }\n endAction={\n <Button\n onClick={onConfirm}\n variant=\"secondary\"\n startIcon={<Check />}\n loading={isConfirmButtonLoading}\n >\n {formatMessage({\n id: 'app.utils.publish',\n defaultMessage: 'Publish',\n })}\n </Button>\n }\n />\n );\n};\n\nexport { ConfirmDialogPublishAll, ConfirmBulkActionDialog };\nexport type { ConfirmDialogPublishAllProps, ConfirmBulkActionDialogProps };\n","import { Button, Dialog, DialogBody, DialogFooter, Flex, Typography } from '@strapi/design-system';\nimport { ExclamationMarkCircle, Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { InjectionZoneList } from './InjectionZoneList';\n\ninterface DialogConfirmDeleteProps {\n isConfirmButtonLoading?: boolean;\n isOpen?: boolean;\n onConfirm: () => void;\n onToggleDialog: () => void;\n}\n\nconst DialogConfirmDelete = ({\n isConfirmButtonLoading = false,\n isOpen = false,\n onToggleDialog,\n onConfirm,\n}: DialogConfirmDeleteProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Dialog\n onClose={onToggleDialog}\n title={formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n })}\n isOpen={isOpen}\n >\n <DialogBody icon={<ExclamationMarkCircle />}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Flex justifyContent=\"center\">\n <Typography id=\"confirm-description\">\n {formatMessage({\n id: 'components.popUpWarning.message',\n defaultMessage: 'Are you sure you want to delete this?',\n })}\n </Typography>\n </Flex>\n <Flex>\n <InjectionZoneList area=\"contentManager.listView.deleteModalAdditionalInfos\" />\n </Flex>\n </Flex>\n </DialogBody>\n <DialogFooter\n startAction={\n <Button onClick={onToggleDialog} variant=\"tertiary\">\n {formatMessage({\n id: 'app.components.Button.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n }\n endAction={\n <Button\n onClick={onConfirm}\n variant=\"danger-light\"\n startIcon={<Trash />}\n id=\"confirm-delete\"\n loading={isConfirmButtonLoading}\n >\n {formatMessage({\n id: 'app.components.Button.confirm',\n defaultMessage: 'Confirm',\n })}\n </Button>\n }\n />\n </Dialog>\n );\n};\n\nexport { DialogConfirmDelete };\nexport type { DialogConfirmDeleteProps };\n","import * as React from 'react';\n\nimport { BaseCheckbox, IconButton, Flex } from '@strapi/design-system';\nimport {\n useTracking,\n useTableContext,\n Table as HelperPluginTable,\n useQueryParams,\n} from '@strapi/helper-plugin';\nimport { Trash, Duplicate, Pencil } from '@strapi/icons';\nimport { Entity } from '@strapi/types';\nimport { Location } from 'history';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link } from 'react-router-dom';\n\nimport { DialogConfirmDelete } from './DialogConfirmDelete';\n\nconst stopPropagation = (e: React.SyntheticEvent) => e.stopPropagation();\n\n/* -------------------------------------------------------------------------------------------------\n * CheckboxDataCell\n * -----------------------------------------------------------------------------------------------*/\n\ninterface CheckboxDataCellProps {\n rowId: Entity.ID;\n index: number;\n}\n\nconst CheckboxDataCell = ({ rowId, index }: CheckboxDataCellProps) => {\n const { selectedEntries, onSelectRow } = useTableContext();\n const { formatMessage } = useIntl();\n const isChecked = selectedEntries.findIndex((id) => id === rowId) !== -1;\n const ariaLabel = formatMessage(\n {\n id: 'app.component.table.select.one-entry',\n defaultMessage: `Select {target}`,\n },\n { target: index + 1 }\n );\n\n return (\n <BaseCheckbox\n aria-label={ariaLabel}\n checked={isChecked}\n onClick={stopPropagation}\n onChange={() => {\n onSelectRow({ name: rowId, value: !isChecked });\n }}\n />\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EntityActionsDataCell\n * -----------------------------------------------------------------------------------------------*/\n\ninterface EntityActionsDataCellProps {\n rowId: Entity.ID;\n index: number;\n canCreate?: boolean;\n canDelete?: boolean;\n setIsConfirmDeleteRowOpen: (isOpen: boolean) => void;\n handleCloneClick: (id: Entity.ID) => () => void;\n}\n\nconst EntityActionsDataCell = ({\n rowId,\n index,\n canCreate = false,\n canDelete = false,\n setIsConfirmDeleteRowOpen,\n handleCloneClick,\n}: EntityActionsDataCellProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { setSelectedEntries } = useTableContext();\n const [{ query }] = useQueryParams<{ plugins?: Record<string, unknown> }>();\n\n const itemLineText = formatMessage(\n {\n id: 'content-manager.components.ListViewTable.row-line',\n defaultMessage: 'item line {number}',\n },\n { number: index + 1 }\n );\n\n return (\n <Flex gap={1} justifyContent=\"end\" onClick={stopPropagation}>\n <IconButton\n forwardedAs={Link}\n onClick={() => {\n trackUsage('willEditEntryFromButton');\n }}\n // @ts-expect-error – DS does not correctly infer props from the as prop.\n to={(location: Location) => ({\n pathname: `${location.pathname}/${rowId}`,\n state: { from: location.pathname },\n search: query.plugins ? stringify({ plugins: query.plugins }) : '',\n })}\n label={formatMessage(\n { id: 'app.component.table.edit', defaultMessage: 'Edit {target}' },\n { target: itemLineText }\n )}\n borderWidth={0}\n >\n <Pencil />\n </IconButton>\n\n {canCreate && (\n <IconButton\n onClick={handleCloneClick(rowId)}\n label={formatMessage(\n {\n id: 'app.component.table.duplicate',\n defaultMessage: 'Duplicate {target}',\n },\n { target: itemLineText }\n )}\n borderWidth={0}\n >\n <Duplicate />\n </IconButton>\n )}\n\n {canDelete && (\n <IconButton\n onClick={() => {\n trackUsage('willDeleteEntryFromList');\n setSelectedEntries([rowId]);\n setIsConfirmDeleteRowOpen(true);\n }}\n label={formatMessage(\n { id: 'global.delete-target', defaultMessage: 'Delete {target}' },\n { target: itemLineText }\n )}\n borderWidth={0}\n >\n <Trash />\n </IconButton>\n )}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RootProps {\n children: React.ReactNode;\n onConfirmDelete: (id: Entity.ID) => Promise<void>;\n isConfirmDeleteRowOpen: boolean;\n setIsConfirmDeleteRowOpen: (isOpen: boolean) => void;\n}\n\nconst Root = ({\n children,\n onConfirmDelete,\n isConfirmDeleteRowOpen,\n setIsConfirmDeleteRowOpen,\n}: RootProps) => {\n const [isLoading, setIsLoading] = React.useState(false);\n const { selectedEntries, setSelectedEntries } = useTableContext();\n\n const handleConfirmDelete = async () => {\n try {\n setIsLoading(true);\n await onConfirmDelete(selectedEntries[0]);\n setIsConfirmDeleteRowOpen(false);\n setIsLoading(false);\n setSelectedEntries([]);\n } catch (error) {\n setIsLoading(false);\n setIsConfirmDeleteRowOpen(false);\n }\n };\n\n return (\n <HelperPluginTable.Body>\n {children}\n <DialogConfirmDelete\n isConfirmButtonLoading={isLoading}\n onConfirm={handleConfirmDelete}\n onToggleDialog={() => setIsConfirmDeleteRowOpen(!isConfirmDeleteRowOpen)}\n isOpen={isConfirmDeleteRowOpen}\n />\n </HelperPluginTable.Body>\n );\n};\n\nconst Table = { CheckboxDataCell, EntityActionsDataCell, Root };\ntype TableProps = RootProps;\n\nexport { Table };\nexport type { TableProps };\n","import * as React from 'react';\n\nimport {\n Box,\n Button,\n Typography,\n ModalLayout,\n ModalHeader,\n ModalBody,\n ModalFooter,\n Tr,\n Td,\n IconButton,\n Flex,\n Icon,\n Tooltip,\n Loader,\n} from '@strapi/design-system';\nimport {\n useTableContext,\n Table as HelperPluginTable,\n getYupInnerErrors,\n useFetchClient,\n useQueryParams,\n useNotification,\n TranslationMessage,\n useAPIErrorHandler,\n} from '@strapi/helper-plugin';\nimport { Pencil, CrossCircle, CheckCircle } from '@strapi/icons';\nimport { Contracts } from '@strapi/plugin-content-manager/_internal/shared';\nimport { Entity } from '@strapi/types';\nimport { AxiosError, AxiosResponse } from 'axios';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { UseQueryResult, useMutation, useQuery } from 'react-query';\nimport { Link, useHistory } from 'react-router-dom';\nimport styled from 'styled-components';\nimport { ValidationError } from 'yup';\n\nimport { useTypedSelector } from '../../../../../core/store/hooks';\nimport { getTranslation } from '../../../../utils/translations';\nimport { createYupSchema } from '../../../../utils/validation';\nimport { Table } from '../Table';\n\nimport { ConfirmDialogPublishAll, ConfirmDialogPublishAllProps } from './ConfirmBulkActionDialog';\n\nconst TypographyMaxWidth = styled(Typography)`\n max-width: 300px;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * EntryValidationText\n * -----------------------------------------------------------------------------------------------*/\n\ninterface EntryValidationTextProps {\n validationErrors?: Record<string, MessageDescriptor>;\n isPublished?: boolean;\n}\n\nconst EntryValidationText = ({\n validationErrors,\n isPublished = false,\n}: EntryValidationTextProps) => {\n const { formatMessage } = useIntl();\n\n if (validationErrors) {\n const validationErrorsMessages = Object.entries(validationErrors)\n .map(([key, value]) =>\n formatMessage(\n { id: `${value.id}.withField`, defaultMessage: value.defaultMessage },\n { field: key }\n )\n )\n .join(' ');\n\n return (\n <Flex gap={2}>\n <Icon color=\"danger600\" as={CrossCircle} />\n <Tooltip description={validationErrorsMessages}>\n <TypographyMaxWidth textColor=\"danger600\" variant=\"omega\" fontWeight=\"semiBold\" ellipsis>\n {validationErrorsMessages}\n </TypographyMaxWidth>\n </Tooltip>\n </Flex>\n );\n }\n\n if (isPublished) {\n return (\n <Flex gap={2}>\n <Icon color=\"success600\" as={CheckCircle} />\n <Typography textColor=\"success600\" fontWeight=\"bold\">\n {formatMessage({\n id: 'content-manager.bulk-publish.already-published',\n defaultMessage: 'Already Published',\n })}\n </Typography>\n </Flex>\n );\n }\n\n return (\n <Flex gap={2}>\n <Icon color=\"success600\" as={CheckCircle} />\n <Typography>\n {formatMessage({\n id: 'app.utils.ready-to-publish',\n defaultMessage: 'Ready to publish',\n })}\n </Typography>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * SelectedEntriesTableContent\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SelectedEntriesTableContentProps {\n isPublishing?: boolean;\n rowsToDisplay?: TableRow[];\n entriesToPublish?: Entity.ID[];\n validationErrors: Record<string, EntryValidationTextProps['validationErrors']>;\n}\n\nconst SelectedEntriesTableContent = ({\n isPublishing,\n rowsToDisplay = [],\n entriesToPublish = [],\n validationErrors = {},\n}: SelectedEntriesTableContentProps) => {\n const {\n location: { pathname },\n } = useHistory();\n const { formatMessage } = useIntl();\n\n const contentTypeSettings = useTypedSelector(\n (state) => state['content-manager_listView'].contentType?.settings\n );\n const mainField = contentTypeSettings?.mainField;\n const shouldDisplayMainField = mainField != null && mainField !== 'id';\n\n return (\n <HelperPluginTable.Content>\n <HelperPluginTable.Head>\n <HelperPluginTable.HeaderCheckboxCell />\n <HelperPluginTable.HeaderCell fieldSchemaType=\"integer\" label=\"id\" name=\"id\" />\n {shouldDisplayMainField && (\n <HelperPluginTable.HeaderCell fieldSchemaType=\"string\" label=\"name\" name=\"name\" />\n )}\n <HelperPluginTable.HeaderCell fieldSchemaType=\"string\" label=\"status\" name=\"status\" />\n </HelperPluginTable.Head>\n <HelperPluginTable.LoadingBody />\n <HelperPluginTable.Body>\n {rowsToDisplay.map((row, index) => (\n <Tr key={row.id}>\n <Td>\n <Table.CheckboxDataCell rowId={row.id} index={index} />\n </Td>\n <Td>\n <Typography>{row.id}</Typography>\n </Td>\n {shouldDisplayMainField && (\n <Td>\n <Typography>{row[mainField as keyof TableRow]}</Typography>\n </Td>\n )}\n <Td>\n {isPublishing && entriesToPublish.includes(row.id) ? (\n <Flex gap={2}>\n <Typography>\n {formatMessage({\n id: 'content-manager.success.record.publishing',\n defaultMessage: 'Publishing...',\n })}\n </Typography>\n <Loader small />\n </Flex>\n ) : (\n <EntryValidationText\n validationErrors={validationErrors[row.id]}\n isPublished={row.publishedAt !== null}\n />\n )}\n </Td>\n <Td>\n <IconButton\n forwardedAs={Link}\n // @ts-expect-error – DS does not correctly infer props from the as prop.\n to={{\n pathname: `${pathname}/${row.id}`,\n state: { from: pathname },\n }}\n label={formatMessage(\n { id: 'app.component.HelperPluginTable.edit', defaultMessage: 'Edit {target}' },\n {\n target: formatMessage(\n {\n id: 'content-manager.components.ListViewHelperPluginTable.row-line',\n defaultMessage: 'item line {number}',\n },\n { number: index + 1 }\n ),\n }\n )}\n noBorder\n target=\"_blank\"\n marginLeft=\"auto\"\n >\n <Pencil />\n </IconButton>\n </Td>\n </Tr>\n ))}\n </HelperPluginTable.Body>\n </HelperPluginTable.Content>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * BoldChunk\n * -----------------------------------------------------------------------------------------------*/\n\nconst BoldChunk = (chunks: React.ReactNode) => <Typography fontWeight=\"bold\">{chunks}</Typography>;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectedEntriesModalContent\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SelectedEntriesModalContentProps\n extends Pick<SelectedEntriesTableContentProps, 'validationErrors'> {\n refetchModalData: UseQueryResult['refetch'];\n setEntriesToFetch: React.Dispatch<React.SetStateAction<Entity.ID[]>>;\n setSelectedListViewEntries: React.Dispatch<React.SetStateAction<Entity.ID[]>>;\n toggleModal: ConfirmDialogPublishAllProps['onToggleDialog'];\n}\n\ninterface TableRow {\n id: Entity.ID;\n publishedAt: string | null;\n}\n\nconst SelectedEntriesModalContent = ({\n toggleModal,\n refetchModalData,\n setEntriesToFetch,\n setSelectedListViewEntries,\n validationErrors = {},\n}: SelectedEntriesModalContentProps) => {\n const { formatMessage } = useIntl();\n const { selectedEntries, rows, onSelectRow, isLoading, isFetching } = useTableContext<TableRow>();\n const [isDialogOpen, setIsDialogOpen] = React.useState(false);\n const [rowsToDisplay, setRowsToDisplay] = React.useState<Array<TableRow>>([]);\n const [publishedCount, setPublishedCount] = React.useState(0);\n const { formatAPIError } = useAPIErrorHandler();\n\n const entriesToPublish = rows\n .filter(({ id }) => selectedEntries.includes(id) && !validationErrors[id])\n .map(({ id }) => id);\n\n const { post } = useFetchClient();\n const toggleNotification = useNotification();\n const { contentType } = useTypedSelector((state) => state['content-manager_listView']);\n\n const selectedEntriesWithErrorsCount = rowsToDisplay.filter(\n ({ id }) => selectedEntries.includes(id) && validationErrors[id]\n ).length;\n const selectedEntriesPublished = rowsToDisplay.filter(\n ({ id, publishedAt }) => selectedEntries.includes(id) && publishedAt\n ).length;\n const selectedEntriesWithNoErrorsCount =\n selectedEntries.length - selectedEntriesWithErrorsCount - selectedEntriesPublished;\n\n const bulkPublishMutation = useMutation<\n AxiosResponse<Contracts.CollectionTypes.BulkPublish.Response>,\n AxiosError<Required<Pick<Contracts.CollectionTypes.BulkPublish.Response, 'error'>>>,\n Contracts.CollectionTypes.BulkPublish.Request['body']\n >(\n (data) =>\n post(`/content-manager/collection-types/${contentType!.uid}/actions/bulkPublish`, data),\n {\n onSuccess() {\n const update = rowsToDisplay.filter((row) => {\n if (entriesToPublish.includes(row.id)) {\n // Deselect the entries that have been published from the modal table\n onSelectRow({ name: row.id, value: false });\n }\n\n // Remove the entries that have been published from the table\n return !entriesToPublish.includes(row.id);\n });\n\n setRowsToDisplay(update);\n const publishedIds = update.map(({ id }) => id);\n // Set the parent's entries to fetch when clicking refresh\n setEntriesToFetch(publishedIds);\n // Deselect the entries that were published in the list view\n setSelectedListViewEntries(publishedIds);\n\n if (update.length === 0) {\n toggleModal();\n }\n\n toggleNotification({\n type: 'success',\n message: { id: 'content-manager.success.record.publish', defaultMessage: 'Published' },\n });\n },\n onError(error) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(error),\n });\n },\n }\n );\n\n const toggleDialog = () => setIsDialogOpen((prev) => !prev);\n\n const handleConfirmBulkPublish = async () => {\n toggleDialog();\n const { data } = await bulkPublishMutation.mutateAsync({ ids: entriesToPublish });\n setPublishedCount(data.count);\n };\n\n const getFormattedCountMessage = () => {\n if (publishedCount) {\n return formatMessage(\n {\n id: getTranslation('containers.ListPage.selectedEntriesModal.publishedCount'),\n defaultMessage:\n '<b>{publishedCount}</b> {publishedCount, plural, =0 {entries} one {entry} other {entries}} published. <b>{withErrorsCount}</b> {withErrorsCount, plural, =0 {entries} one {entry} other {entries}} waiting for action.',\n },\n {\n publishedCount,\n withErrorsCount: selectedEntriesWithErrorsCount,\n b: BoldChunk,\n }\n );\n }\n\n return formatMessage(\n {\n id: getTranslation('containers.ListPage.selectedEntriesModal.selectedCount'),\n defaultMessage:\n '<b>{alreadyPublishedCount}</b> {alreadyPublishedCount, plural, =0 {entries} one {entry} other {entries}} already published. <b>{readyToPublishCount}</b> {readyToPublishCount, plural, =0 {entries} one {entry} other {entries}} ready to publish. <b>{withErrorsCount}</b> {withErrorsCount, plural, =0 {entries} one {entry} other {entries}} waiting for action.',\n },\n {\n readyToPublishCount: selectedEntriesWithNoErrorsCount,\n withErrorsCount: selectedEntriesWithErrorsCount,\n alreadyPublishedCount: selectedEntriesPublished,\n b: BoldChunk,\n }\n );\n };\n\n React.useEffect(() => {\n // When the api responds with data\n if (rows.length > 0) {\n // Update the rows to display\n setRowsToDisplay(rows);\n }\n }, [rows]);\n\n return (\n <ModalLayout onClose={toggleModal} labelledBy=\"title\">\n <ModalHeader>\n <Typography fontWeight=\"bold\" textColor=\"neutral800\" as=\"h2\" id=\"title\">\n {formatMessage({\n id: getTranslation('containers.ListPage.selectedEntriesModal.title'),\n defaultMessage: 'Publish entries',\n })}\n </Typography>\n </ModalHeader>\n <ModalBody>\n <Typography>{getFormattedCountMessage()}</Typography>\n <Box marginTop={5}>\n <SelectedEntriesTableContent\n isPublishing={bulkPublishMutation.isLoading}\n rowsToDisplay={rowsToDisplay}\n entriesToPublish={entriesToPublish}\n validationErrors={validationErrors}\n />\n </Box>\n </ModalBody>\n <ModalFooter\n startActions={\n <Button onClick={toggleModal} variant=\"tertiary\">\n {formatMessage({\n id: 'app.components.Button.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n }\n endActions={\n <Flex gap={2}>\n <Button onClick={() => refetchModalData()} variant=\"tertiary\" loading={isFetching}>\n {formatMessage({ id: 'app.utils.refresh', defaultMessage: 'Refresh' })}\n </Button>\n <Button\n onClick={toggleDialog}\n disabled={\n selectedEntries.length === 0 ||\n selectedEntries.length === selectedEntriesWithErrorsCount ||\n isLoading\n }\n loading={bulkPublishMutation.isLoading}\n >\n {formatMessage({ id: 'app.utils.publish', defaultMessage: 'Publish' })}\n </Button>\n </Flex>\n }\n />\n <ConfirmDialogPublishAll\n isOpen={isDialogOpen}\n onToggleDialog={toggleDialog}\n isConfirmButtonLoading={bulkPublishMutation.isLoading}\n onConfirm={handleConfirmBulkPublish}\n />\n </ModalLayout>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * SelectedEntriesModal\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SelectedEntriesModalProps {\n onToggle: SelectedEntriesModalContentProps['toggleModal'];\n}\n\nconst SelectedEntriesModal = ({ onToggle }: SelectedEntriesModalProps) => {\n const {\n selectedEntries: selectedListViewEntries,\n setSelectedEntries: setSelectedListViewEntries,\n } = useTableContext();\n const { contentType, components } = useTypedSelector(\n (state) => state['content-manager_listView']\n );\n // The child table will update this value based on the entries that were published\n const [entriesToFetch, setEntriesToFetch] = React.useState(selectedListViewEntries);\n // We want to keep the selected entries order same as the list view\n const [\n {\n query: { sort, plugins },\n },\n ] = useQueryParams<{ sort?: string; plugins?: Record<string, any> }>();\n\n const queryParams = {\n page: 1,\n pageSize: entriesToFetch.length,\n sort,\n filters: {\n id: {\n $in: entriesToFetch,\n },\n },\n locale: plugins?.i18n?.locale,\n };\n\n const { get } = useFetchClient();\n\n const {\n data = [],\n isLoading,\n isFetching,\n refetch,\n } = useQuery(\n ['entries', contentType?.uid, queryParams],\n async () => {\n const { data } = await get<Contracts.CollectionTypes.Find.Response>(\n `content-manager/collection-types/${contentType!.uid}`,\n {\n params: queryParams,\n }\n );\n\n return data.results;\n },\n {\n enabled: contentType !== null,\n }\n );\n\n const { rows, validationErrors } = React.useMemo(() => {\n if (data.length > 0 && contentType) {\n const schema = createYupSchema(\n contentType,\n { components },\n { isDraft: false, isJSONTestDisabled: true }\n );\n const validationErrors: Record<Entity.ID, Record<string, TranslationMessage>> = {};\n const rows = data.map((entry) => {\n try {\n schema.validateSync(entry, { abortEarly: false });\n\n return entry;\n } catch (e) {\n if (e instanceof ValidationError) {\n validationErrors[entry.id] = getYupInnerErrors(e);\n }\n\n return entry;\n }\n });\n\n return { rows, validationErrors };\n }\n\n return {\n rows: [],\n validationErrors: {},\n };\n }, [components, contentType, data]);\n\n return (\n <HelperPluginTable.Root\n rows={rows}\n defaultSelectedEntries={selectedListViewEntries}\n colCount={4}\n isLoading={isLoading}\n isFetching={isFetching}\n >\n <SelectedEntriesModalContent\n setSelectedListViewEntries={setSelectedListViewEntries}\n setEntriesToFetch={setEntriesToFetch}\n toggleModal={onToggle}\n refetchModalData={refetch}\n validationErrors={validationErrors}\n />\n </HelperPluginTable.Root>\n );\n};\n\nexport { SelectedEntriesModal };\n","import * as React from 'react';\n\nimport { Button, Typography } from '@strapi/design-system';\nimport { useTracking, useTableContext } from '@strapi/helper-plugin';\nimport { Check, Trash } from '@strapi/icons';\nimport { Entity } from '@strapi/types';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { useTypedSelector } from '../../../../../core/store/hooks';\nimport { getTranslation } from '../../../../utils/translations';\nimport { InjectionZoneList } from '../InjectionZoneList';\n\nimport { ConfirmBulkActionDialog, ConfirmDialogPublishAllProps } from './ConfirmBulkActionDialog';\nimport { SelectedEntriesModal } from './SelectedEntriesModal';\n\n/* -------------------------------------------------------------------------------------------------\n * ConfirmDialogUnpublishAll\n * -----------------------------------------------------------------------------------------------*/\n\nconst ConfirmDialogUnpublishAll = ({\n isOpen,\n onToggleDialog,\n isConfirmButtonLoading,\n onConfirm,\n}: ConfirmDialogPublishAllProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <ConfirmBulkActionDialog\n isOpen={isOpen}\n onToggleDialog={onToggleDialog}\n dialogBody={\n <>\n <Typography id=\"confirm-description\" textAlign=\"center\">\n {formatMessage({\n id: getTranslation('popUpWarning.bodyMessage.contentType.unpublish.all'),\n defaultMessage: 'Are you sure you want to unpublish these entries?',\n })}\n </Typography>\n <InjectionZoneList area=\"contentManager.listView.unpublishModalAdditionalInfos\" />\n </>\n }\n endAction={\n <Button\n onClick={onConfirm}\n variant=\"secondary\"\n startIcon={<Check />}\n loading={isConfirmButtonLoading}\n >\n {formatMessage({\n id: 'app.utils.unpublish',\n defaultMessage: 'Unpublish',\n })}\n </Button>\n }\n />\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ConfirmDialogDeleteAll\n * -----------------------------------------------------------------------------------------------*/\n\nconst ConfirmDialogDeleteAll = ({\n isOpen,\n onToggleDialog,\n isConfirmButtonLoading,\n onConfirm,\n}: ConfirmDialogPublishAllProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <ConfirmBulkActionDialog\n isOpen={isOpen}\n onToggleDialog={onToggleDialog}\n dialogBody={\n <>\n <Typography id=\"confirm-description\" textAlign=\"center\">\n {formatMessage({\n id: getTranslation('popUpWarning.bodyMessage.contentType.delete.all'),\n defaultMessage: 'Are you sure you want to delete these entries?',\n })}\n </Typography>\n <InjectionZoneList area=\"contentManager.listView.deleteModalAdditionalInfos\" />\n </>\n }\n endAction={\n <Button\n onClick={onConfirm}\n variant=\"danger-light\"\n startIcon={<Trash />}\n id=\"confirm-delete\"\n loading={isConfirmButtonLoading}\n >\n {formatMessage({\n id: 'app.components.Button.confirm',\n defaultMessage: 'Confirm',\n })}\n </Button>\n }\n />\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * BulkActionButtons\n * -----------------------------------------------------------------------------------------------*/\n\ninterface BulkActionButtonsProps {\n showPublish?: boolean;\n showDelete?: boolean;\n onConfirmDeleteAll: (ids: Entity.ID[]) => Promise<void>;\n onConfirmUnpublishAll: (ids: Entity.ID[]) => Promise<void>;\n refetchData: () => void;\n}\n\nconst BulkActionButtons = ({\n showPublish = false,\n showDelete = false,\n onConfirmDeleteAll,\n onConfirmUnpublishAll,\n refetchData,\n}: BulkActionButtonsProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { data } = useTypedSelector((state) => state['content-manager_listView']);\n const { selectedEntries, setSelectedEntries } = useTableContext();\n\n const [isConfirmButtonLoading, setIsConfirmButtonLoading] = React.useState(false);\n const [isSelectedEntriesModalOpen, setIsSelectedEntriesModalOpen] = React.useState(false);\n const [dialogToOpen, setDialogToOpen] = React.useState<'unpublish' | 'delete' | null>(null);\n\n // Filters for Bulk actions\n const selectedEntriesObjects = data.filter((entry) => selectedEntries.includes(entry.id));\n const publishButtonIsShown =\n showPublish && selectedEntriesObjects.some((entry) => !entry.publishedAt);\n const unpublishButtonIsShown =\n showPublish && selectedEntriesObjects.some((entry) => entry.publishedAt);\n\n const toggleDeleteDialog = () => {\n if (dialogToOpen === 'delete') {\n setDialogToOpen(null);\n } else {\n setDialogToOpen('delete');\n trackUsage('willBulkDeleteEntries');\n }\n };\n\n const toggleUnpublishDialog = () => {\n if (dialogToOpen === 'unpublish') {\n setDialogToOpen(null);\n } else {\n setDialogToOpen('unpublish');\n trackUsage('willBulkUnpublishEntries');\n }\n };\n\n const handleBulkAction =\n (confirmAction: (ids: Entity.ID[]) => Promise<void>, toggleDialog: () => void) => async () => {\n try {\n setIsConfirmButtonLoading(true);\n await confirmAction(selectedEntries);\n setIsConfirmButtonLoading(false);\n toggleDialog();\n setSelectedEntries([]);\n } catch (error) {\n setIsConfirmButtonLoading(false);\n toggleDialog();\n }\n };\n\n const handleToggleSelectedEntriesModal = () => {\n setIsSelectedEntriesModalOpen((prev) => {\n if (prev) {\n refetchData();\n }\n\n return !prev;\n });\n };\n\n return (\n <>\n {publishButtonIsShown && (\n <>\n <Button variant=\"tertiary\" onClick={handleToggleSelectedEntriesModal}>\n {formatMessage({ id: 'app.utils.publish', defaultMessage: 'Publish' })}\n </Button>\n {isSelectedEntriesModalOpen && (\n <SelectedEntriesModal onToggle={handleToggleSelectedEntriesModal} />\n )}\n </>\n )}\n {unpublishButtonIsShown && (\n <>\n <Button variant=\"tertiary\" onClick={toggleUnpublishDialog}>\n {formatMessage({ id: 'app.utils.unpublish', defaultMessage: 'Unpublish' })}\n </Button>\n <ConfirmDialogUnpublishAll\n isOpen={dialogToOpen === 'unpublish'}\n onToggleDialog={toggleUnpublishDialog}\n isConfirmButtonLoading={isConfirmButtonLoading}\n onConfirm={handleBulkAction(onConfirmUnpublishAll, toggleUnpublishDialog)}\n />\n </>\n )}\n {showDelete && (\n <>\n <Button variant=\"danger-light\" onClick={toggleDeleteDialog}>\n {formatMessage({ id: 'global.delete', defaultMessage: 'Delete' })}\n </Button>\n <ConfirmDialogDeleteAll\n isOpen={dialogToOpen === 'delete'}\n onToggleDialog={toggleDeleteDialog}\n isConfirmButtonLoading={isConfirmButtonLoading}\n onConfirm={handleBulkAction(onConfirmDeleteAll, toggleDeleteDialog)}\n />\n </>\n )}\n </>\n );\n};\n\nBulkActionButtons.defaultProps = {\n showPublish: false,\n showDelete: false,\n onConfirmDeleteAll() {},\n onConfirmUnpublishAll() {},\n refetchData() {},\n};\n\nBulkActionButtons.propTypes = {\n showPublish: PropTypes.bool,\n showDelete: PropTypes.bool,\n onConfirmDeleteAll: PropTypes.func,\n onConfirmUnpublishAll: PropTypes.func,\n refetchData: PropTypes.func,\n};\n\nexport { BulkActionButtons };\n","import * as React from 'react';\n\nimport { Button } from '@strapi/design-system';\nimport {\n FilterData,\n FilterListURLQuery,\n FilterPopoverURLQuery,\n useTracking,\n} from '@strapi/helper-plugin';\nimport { Filter as FilterIcon } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\ninterface FilterProps {\n displayedFilters: FilterData[];\n}\n\nconst Filter = ({ displayedFilters }: FilterProps) => {\n const [isVisible, setIsVisible] = React.useState(false);\n const { formatMessage } = useIntl();\n const buttonRef = React.useRef<HTMLButtonElement>(null!);\n const { trackUsage } = useTracking();\n\n const handleToggle = () => {\n if (!isVisible) {\n trackUsage('willFilterEntries');\n }\n setIsVisible((prev) => !prev);\n };\n\n return (\n <>\n <Button\n variant=\"tertiary\"\n ref={buttonRef}\n startIcon={<FilterIcon />}\n onClick={handleToggle}\n size=\"S\"\n >\n {formatMessage({ id: 'app.utils.filters', defaultMessage: 'Filters' })}\n </Button>\n {isVisible && (\n <FilterPopoverURLQuery\n displayedFilters={displayedFilters}\n isVisible={isVisible}\n onToggle={handleToggle}\n source={buttonRef}\n />\n )}\n <FilterListURLQuery filtersSchema={displayedFilters} />\n </>\n );\n};\n\nexport { Filter };\nexport type { FilterProps };\n","import parseISO from 'date-fns/parseISO';\nimport toString from 'lodash/toString';\nimport { useIntl } from 'react-intl';\n\nimport type { Attribute } from '@strapi/types';\n\ninterface CellValueProps {\n type: Attribute.Kind | 'custom';\n value: any;\n}\n\nconst CellValue = ({ type, value }: CellValueProps) => {\n const { formatDate, formatTime, formatNumber } = useIntl();\n let formattedValue = value;\n\n if (type === 'date') {\n formattedValue = formatDate(parseISO(value), { dateStyle: 'full' });\n }\n\n if (type === 'datetime') {\n formattedValue = formatDate(value, { dateStyle: 'full', timeStyle: 'short' });\n }\n\n if (type === 'time') {\n const [hour, minute, second] = value.split(':');\n const date = new Date();\n date.setHours(hour);\n date.setMinutes(minute);\n date.setSeconds(second);\n\n formattedValue = formatTime(date, {\n timeStyle: 'short',\n });\n }\n\n if (['float', 'decimal'].includes(type)) {\n formattedValue = formatNumber(value, {\n // Should be kept in sync with the corresponding value\n // in the design-system/NumberInput: https://github.com/strapi/design-system/blob/main/packages/strapi-design-system/src/NumberInput/NumberInput.js#L53\n maximumFractionDigits: 20,\n });\n }\n\n if (['integer', 'biginteger'].includes(type)) {\n formattedValue = formatNumber(value, { maximumFractionDigits: 0 });\n }\n\n return toString(formattedValue);\n};\n\nexport { CellValue };\nexport type { CellValueProps };\n","import { Badge, Tooltip, Typography } from '@strapi/design-system';\nimport { Menu } from '@strapi/design-system/v2';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { CellContentProps } from './CellContent';\nimport { CellValue } from './CellValue';\n\nimport type { Attribute } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * SingleComponent\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SingleComponentProps extends Pick<CellContentProps, 'metadatas'> {\n content: Attribute.GetValue<Attribute.Component>;\n}\n\nconst SingleComponent = ({ content, metadatas }: SingleComponentProps) => {\n const { mainField } = metadatas;\n\n if (!mainField) {\n return null;\n }\n\n return (\n <Tooltip label={content[mainField.name]}>\n <SingleComponentTypography textColor=\"neutral800\" ellipsis>\n <CellValue type={mainField?.type} value={content[mainField.name]} />\n </SingleComponentTypography>\n </Tooltip>\n );\n};\n\nconst SingleComponentTypography = styled(Typography)`\n max-width: 250px;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * RepeatableComponent\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RepeatableComponentProps extends Pick<CellContentProps, 'metadatas'> {\n content: Attribute.GetValue<Attribute.Component<`${string}.${string}`, true>>;\n}\n\nconst RepeatableComponent = ({ content, metadatas }: RepeatableComponentProps) => {\n const { formatMessage } = useIntl();\n const { mainField } = metadatas;\n\n if (!mainField) {\n return null;\n }\n\n return (\n <Menu.Root>\n <MenuTrigger onClick={(e) => e.stopPropagation()}>\n <Badge>{content.length}</Badge>{' '}\n {formatMessage(\n {\n id: 'content-manager.containers.ListPage.items',\n defaultMessage: '{number, plural, =0 {items} one {item} other {items}}',\n },\n { number: content.length }\n )}\n </MenuTrigger>\n <Menu.Content>\n {content.map((item) => (\n <Menu.Item key={item.id} disabled>\n <RepeatableComponentTypography ellipsis>\n <CellValue type={mainField.type} value={item[mainField.name]} />\n </RepeatableComponentTypography>\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Root>\n );\n};\n\nconst RepeatableComponentTypography = styled(Typography)`\n max-width: 500px;\n`;\n\n/**\n * TODO: this needs to be solved in the Design-System\n */\nconst MenuTrigger = styled(Menu.Trigger)`\n svg {\n width: ${6 / 16}rem;\n height: ${4 / 16}rem;\n }\n`;\n\nexport { SingleComponent, RepeatableComponent };\nexport type { SingleComponentProps, RepeatableComponentProps };\n","import * as React from 'react';\n\nimport { Avatar, AvatarGroup, Flex, Tooltip, Typography } from '@strapi/design-system';\nimport { getFileExtension, prefixFileUrlWithBackendUrl } from '@strapi/helper-plugin';\nimport styled from 'styled-components';\n\nimport type { Entity } from '@strapi/types';\n\ninterface MediaFile {\n id?: Entity.ID;\n alternativeText?: string;\n ext: string;\n formats: {\n thumbnail?: {\n url?: string;\n };\n };\n mime: string;\n name: string;\n url: string;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Media\n * -----------------------------------------------------------------------------------------------*/\n\ninterface MediaSingleProps extends MediaFile {}\n\nconst MediaSingle = ({ url, mime, alternativeText, name, ext, formats }: MediaSingleProps) => {\n const fileURL = prefixFileUrlWithBackendUrl(url)!;\n\n if (mime.includes('image')) {\n const thumbnail = formats?.thumbnail?.url;\n const mediaURL = prefixFileUrlWithBackendUrl(thumbnail) || fileURL;\n\n return <Avatar src={mediaURL} alt={alternativeText || name} preview />;\n }\n\n const fileExtension = getFileExtension(ext);\n const fileName = name.length > 100 ? `${name.substring(0, 100)}...` : name;\n\n return (\n <Tooltip description={fileName}>\n <FileWrapper>{fileExtension}</FileWrapper>\n </Tooltip>\n );\n};\n\nconst FileWrapper = ({ children }: { children: React.ReactNode }) => {\n return (\n <Flex\n as=\"span\"\n position=\"relative\"\n borderRadius=\"50%\"\n width=\"26px\"\n height=\"26px\"\n borderColor=\"neutral200\"\n background=\"neutral150\"\n paddingLeft=\"1px\"\n justifyContent=\"center\"\n alignItems=\"center\"\n >\n <FileTypography variant=\"sigma\" textColor=\"neutral600\">\n {children}\n </FileTypography>\n </Flex>\n );\n};\n\nconst FileTypography = styled(Typography)`\n font-size: 0.6rem;\n line-height: 0.6rem;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * MediaMultiple\n * -----------------------------------------------------------------------------------------------*/\n\ninterface MediaMultipleProps {\n content: MediaFile[];\n}\n\nconst MediaMultiple = ({ content }: MediaMultipleProps) => {\n return (\n <AvatarGroup>\n {content.map((file, index) => {\n const key = `${file.id}${index}`;\n\n if (index === 3) {\n const remainingFiles = `+${content.length - 3}`;\n\n return <FileWrapper key={key}>{remainingFiles}</FileWrapper>;\n }\n\n if (index > 3) {\n return null;\n }\n\n return <MediaSingle key={key} {...file} />;\n })}\n </AvatarGroup>\n );\n};\n\nexport { MediaMultiple, MediaSingle };\nexport type { MediaMultipleProps, MediaSingleProps };\n","import * as React from 'react';\n\nimport { Typography, Badge, Flex, Loader, useNotifyAT } from '@strapi/design-system';\nimport { Menu } from '@strapi/design-system/v2';\nimport { useFetchClient } from '@strapi/helper-plugin';\nimport { useIntl } from 'react-intl';\nimport { useQuery } from 'react-query';\nimport styled from 'styled-components';\n\nimport { getTranslation } from '../../../../utils/translations';\n\nimport { CellValue } from './CellValue';\n\nimport type { CellContentProps } from './CellContent';\nimport type { Contracts } from '@strapi/plugin-content-manager/_internal/shared';\nimport type { Entity } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * RelationSingle\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RelationSingleProps extends Pick<CellContentProps, 'metadatas' | 'content'> {}\n\nconst RelationSingle = ({ metadatas, content }: RelationSingleProps) => {\n return (\n <TypographyMaxWidth textColor=\"neutral800\" ellipsis>\n <CellValue\n // integer is default because that's what the id will be.\n type={metadatas.mainField?.type ?? 'integer'}\n value={metadatas.mainField?.name ? content[metadatas.mainField?.name] : content.id}\n />\n </TypographyMaxWidth>\n );\n};\n\nconst TypographyMaxWidth = styled(Typography)`\n max-width: 500px;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * RelationMultiple\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RelationMultipleProps extends Pick<CellContentProps, 'metadatas' | 'name' | 'content'> {\n entityId: Entity.ID;\n uid: string;\n}\n\nconst RelationMultiple = ({ metadatas, name, entityId, content, uid }: RelationMultipleProps) => {\n const { formatMessage } = useIntl();\n const { notifyStatus } = useNotifyAT();\n const [isOpen, setIsOpen] = React.useState(false);\n\n const { get } = useFetchClient();\n\n const [fieldName] = name.split('.');\n\n const { data, isLoading } = useQuery(\n [uid, entityId, fieldName],\n async () => {\n const { data } = await get<Contracts.Relations.FindExisting.Response>(\n `/content-manager/relations/${uid}/${entityId}/${fieldName}`\n );\n\n if ('data' in data && data.data) {\n return {\n results: [data.data],\n };\n }\n\n if ('results' in data) {\n return { results: data.results, pagination: data.pagination };\n }\n\n throw new Error(\n `/content-manager/relations/${uid}/${entityId}/${fieldName} returned an error object with a success code.`\n );\n },\n {\n enabled: isOpen,\n staleTime: 0,\n select: (data) => ({\n ...data,\n results: [...data.results].reverse(),\n }),\n }\n );\n\n React.useEffect(() => {\n if (data) {\n notifyStatus(\n formatMessage({\n id: getTranslation('DynamicTable.relation-loaded'),\n defaultMessage: 'Relations have been loaded',\n })\n );\n }\n }, [data, formatMessage, notifyStatus]);\n\n return (\n <Menu.Root onOpenChange={(isOpen) => setIsOpen(isOpen)}>\n <MenuTrigger onClick={(e) => e.stopPropagation()}>\n <Flex gap={1} wrap=\"nowrap\">\n <Badge>{content.count}</Badge>\n {formatMessage(\n {\n id: 'content-manager.containers.ListPage.items',\n defaultMessage: '{number, plural, =0 {items} one {item} other {items}}',\n },\n { number: content.count }\n )}\n </Flex>\n </MenuTrigger>\n <Menu.Content>\n {isLoading && (\n <Menu.Item disabled>\n <Loader small>\n {formatMessage({\n id: getTranslation('ListViewTable.relation-loading'),\n defaultMessage: 'Relations are loading',\n })}\n </Loader>\n </Menu.Item>\n )}\n\n {data?.results && (\n <>\n {data.results.map((entry) => (\n <Menu.Item key={entry.id} disabled>\n <TypographyMaxWidth ellipsis>\n <CellValue\n type={metadatas.mainField?.type ?? 'integer'}\n // @ts-expect-error – can't use a string to index the RelationResult object.\n value={metadatas.mainField?.name ? entry[metadatas.mainField.name] : entry.id}\n />\n </TypographyMaxWidth>\n </Menu.Item>\n ))}\n\n {data?.pagination && data?.pagination.total > 10 && (\n <Menu.Item\n aria-disabled\n aria-label={formatMessage({\n id: getTranslation('ListViewTable.relation-more'),\n defaultMessage: 'This relation contains more entities than displayed',\n })}\n >\n <Typography>…</Typography>\n </Menu.Item>\n )}\n </>\n )}\n </Menu.Content>\n </Menu.Root>\n );\n};\n\n/**\n * TODO: this needs to be solved in the Design-System\n */\nconst MenuTrigger = styled(Menu.Trigger)`\n svg {\n width: ${6 / 16}rem;\n height: ${4 / 16}rem;\n }\n`;\n\nexport { RelationSingle, RelationMultiple };\nexport type { RelationSingleProps, RelationMultipleProps };\n","import { Tooltip, Typography } from '@strapi/design-system';\nimport isEmpty from 'lodash/isEmpty';\nimport styled from 'styled-components';\n\nimport { isFieldTypeNumber } from '../../../../utils/fields';\n\nimport { CellValue } from './CellValue';\nimport { SingleComponent, RepeatableComponent } from './Components';\nimport { MediaSingle, MediaMultiple } from './Media';\nimport { RelationSingle, RelationMultiple } from './Relations';\n\nimport type { FormattedContentTypeLayout } from '../../../../utils/layouts';\nimport type { TableHeader } from '../../ListViewPage';\nimport type { Attribute, Entity } from '@strapi/types';\n\ninterface CellContentProps extends Omit<TableHeader, 'key'> {\n content: Attribute.GetValue<Attribute.Any>;\n rowId: Entity.ID;\n contentType: FormattedContentTypeLayout;\n}\n\nconst CellContent = ({\n content,\n fieldSchema,\n metadatas,\n name,\n rowId,\n contentType,\n}: CellContentProps) => {\n if (!hasContent(content, metadatas, fieldSchema)) {\n return <Typography textColor=\"neutral800\">-</Typography>;\n }\n\n switch (fieldSchema.type) {\n case 'media':\n if (!fieldSchema.multiple) {\n return <MediaSingle {...content} />;\n }\n\n return <MediaMultiple content={content} />;\n\n case 'relation': {\n if (isSingleRelation(fieldSchema.relation)) {\n return <RelationSingle metadatas={metadatas} content={content} />;\n }\n\n return (\n <RelationMultiple\n metadatas={metadatas}\n content={content}\n name={name}\n entityId={rowId}\n uid={contentType.uid}\n />\n );\n }\n\n case 'component':\n if (fieldSchema.repeatable === true) {\n return <RepeatableComponent content={content} metadatas={metadatas} />;\n }\n\n return <SingleComponent content={content} metadatas={metadatas} />;\n\n case 'string':\n return (\n <Tooltip description={content}>\n <TypographyMaxWidth ellipsis textColor=\"neutral800\">\n <CellValue type={fieldSchema.type} value={content} />\n </TypographyMaxWidth>\n </Tooltip>\n );\n\n default:\n return (\n <TypographyMaxWidth ellipsis textColor=\"neutral800\">\n <CellValue type={fieldSchema.type} value={content} />\n </TypographyMaxWidth>\n );\n }\n};\n\nconst TypographyMaxWidth = styled(Typography)`\n max-width: 300px;\n`;\n\nconst hasContent = (\n content: CellContentProps['content'],\n metadatas: CellContentProps['metadatas'],\n fieldSchema: CellContentProps['fieldSchema']\n) => {\n if (fieldSchema.type === 'component') {\n const { mainField } = metadatas;\n\n // Repeatable fields show the ID as fallback, in case the mainField\n // doesn't have any content\n if (fieldSchema?.repeatable || !mainField) {\n return content.length > 0;\n }\n\n const value = content?.[mainField.name];\n\n // relations, media ... show the id as fallback\n if (mainField.name === 'id' && ![undefined, null].includes(value)) {\n return true;\n }\n\n /* The ID field reports itself as type `integer`, which makes it\n impossible to distinguish it from other number fields.\n\n Biginteger fields need to be treated as strings, as `isNumber`\n doesn't deal with them.\n */\n if (\n isFieldTypeNumber(mainField.type) &&\n mainField.type !== 'biginteger' &&\n mainField.name !== 'id'\n ) {\n return typeof value === 'number';\n }\n\n return !isEmpty(value);\n }\n\n if (fieldSchema.type === 'relation') {\n if (isSingleRelation(fieldSchema.relation)) {\n return !isEmpty(content);\n }\n\n return content?.count > 0;\n }\n\n /* \n Biginteger fields need to be treated as strings, as `isNumber`\n doesn't deal with them.\n */\n if (isFieldTypeNumber(fieldSchema.type) && fieldSchema.type !== 'biginteger') {\n return typeof content === 'number';\n }\n\n if (fieldSchema.type === 'boolean') {\n return content !== null;\n }\n\n return !isEmpty(content);\n};\n\nconst isSingleRelation = (\n type: Extract<CellContentProps['fieldSchema'], { type: 'relation' }>['relation']\n) => ['oneToOne', 'manyToOne', 'oneToOneMorph'].includes(type);\n\nexport { CellContent };\nexport type { CellContentProps };\n","import React from 'react';\n\nimport { createSelector } from '@reduxjs/toolkit';\nimport {\n Flex,\n IconButton,\n Popover,\n BaseCheckbox,\n TextButton,\n Typography,\n} from '@strapi/design-system';\nimport { LinkButton } from '@strapi/design-system/v2';\nimport { CheckPermissions, useCollator, useTracking } from '@strapi/helper-plugin';\nimport { Cog, Layer } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport styled from 'styled-components';\n\nimport { useTypedSelector, useTypedDispatch } from '../../../../core/store/hooks';\nimport { checkIfAttributeIsDisplayable } from '../../../utils/attributes';\nimport { onChangeListHeaders, onResetListHeaders } from '../../ListViewLayoutManager';\n\nimport type { RootState } from '../../../../core/store/configure';\n\ninterface ViewSettingsMenuProps {\n slug: string;\n}\n\nconst ViewSettingsMenu = ({ slug }: ViewSettingsMenuProps) => {\n const [isVisible, setIsVisible] = React.useState(false);\n const cogButtonRef = React.useRef<HTMLButtonElement>(null!);\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const { formatMessage } = useIntl();\n\n const handleToggle = () => {\n setIsVisible((prev) => !prev);\n };\n\n return (\n <>\n <IconButton\n icon={<Cog />}\n label={formatMessage({\n id: 'components.ViewSettings.tooltip',\n defaultMessage: 'View Settings',\n })}\n ref={cogButtonRef}\n onClick={handleToggle}\n />\n {isVisible && (\n <Popover\n placement=\"bottom-end\"\n source={cogButtonRef}\n onDismiss={handleToggle}\n spacing={4}\n padding={3}\n >\n <Flex alignItems=\"stretch\" direction=\"column\" gap={3}>\n <CheckPermissions\n permissions={permissions.contentManager?.collectionTypesConfigurations}\n >\n <LinkButton\n size=\"S\"\n startIcon={<Layer />}\n variant=\"secondary\"\n as={NavLink}\n // @ts-expect-error – inference from the as prop does not work in the DS.\n to={`${slug}/configurations/list`}\n >\n {formatMessage({\n id: 'app.links.configure-view',\n defaultMessage: 'Configure the view',\n })}\n </LinkButton>\n </CheckPermissions>\n\n <FieldPicker />\n </Flex>\n </Popover>\n )}\n </>\n );\n};\n\nconst selectDisplayedHeaderKeys = createSelector(\n (state: RootState) => state['content-manager_listView'].displayedHeaders,\n (displayedHeaders) => displayedHeaders.map(({ name }) => name)\n);\n\nconst FieldPicker = () => {\n const dispatch = useTypedDispatch();\n const displayedHeadersKeys = useTypedSelector(selectDisplayedHeaderKeys);\n const contentTypeLayout = useTypedSelector(\n (state) => state['content-manager_listView'].contentType!\n );\n const { trackUsage } = useTracking();\n const { formatMessage, locale } = useIntl();\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const columns = Object.keys(contentTypeLayout.attributes)\n .filter((name) => checkIfAttributeIsDisplayable(contentTypeLayout.attributes[name]))\n .map((name) => ({\n name,\n label: contentTypeLayout.metadatas[name].list.label ?? '',\n }))\n .sort((a, b) => formatter.compare(a.label, b.label));\n\n const handleChange = (name: string) => {\n trackUsage('didChangeDisplayedFields');\n dispatch(onChangeListHeaders({ name, value: displayedHeadersKeys.includes(name) }));\n };\n\n const handleReset = () => {\n dispatch(onResetListHeaders());\n };\n\n return (\n <Flex as=\"fieldset\" direction=\"column\" alignItems=\"stretch\" gap={3}>\n <Flex justifyContent=\"space-between\">\n <Typography as=\"legend\" variant=\"pi\" fontWeight=\"bold\">\n {formatMessage({\n id: 'containers.ListPage.displayedFields',\n defaultMessage: 'Displayed fields',\n })}\n </Typography>\n\n <TextButton onClick={handleReset}>\n {formatMessage({\n id: 'app.components.Button.reset',\n defaultMessage: 'Reset',\n })}\n </TextButton>\n </Flex>\n\n <Flex direction=\"column\" alignItems=\"stretch\">\n {columns.map((header) => {\n const isActive = displayedHeadersKeys.includes(header.name);\n\n return (\n <ChackboxWrapper\n wrap=\"wrap\"\n gap={2}\n as=\"label\"\n background={isActive ? 'primary100' : 'transparent'}\n hasRadius\n padding={2}\n key={header.name}\n >\n <BaseCheckbox\n onChange={() => handleChange(header.name)}\n value={isActive}\n name={header.name}\n />\n <Typography fontSize={1}>{header.label}</Typography>\n </ChackboxWrapper>\n );\n })}\n </Flex>\n </Flex>\n );\n};\n\nconst ChackboxWrapper = styled(Flex)`\n :hover {\n background-color: ${(props) => props.theme.colors.primary100};\n }\n`;\n\nexport { ViewSettingsMenu };\nexport type { ViewSettingsMenuProps };\n","import { useRBACProvider, findMatchingPermissions } from '@strapi/helper-plugin';\n\nimport { CREATOR_FIELDS } from '../../../constants/attributes';\nimport { FormattedContentTypeLayout } from '../../../utils/layouts';\n\nconst NOT_ALLOWED_FILTERS = [\n 'json',\n 'component',\n 'media',\n 'richtext',\n 'dynamiczone',\n 'password',\n 'blocks',\n];\nconst DEFAULT_ALLOWED_FILTERS = ['createdAt', 'updatedAt'];\n\nconst useAllowedAttributes = (contentType: FormattedContentTypeLayout, slug: string) => {\n const { allPermissions } = useRBACProvider();\n\n const readPermissionsForSlug = findMatchingPermissions(allPermissions, [\n {\n action: 'plugin::content-manager.explorer.read',\n subject: slug,\n },\n ]);\n\n const canReadAdminUsers =\n findMatchingPermissions(allPermissions, [\n {\n action: 'admin::users.read',\n subject: null,\n },\n ]).length > 0;\n\n const attributesWithReadPermissions = readPermissionsForSlug?.[0]?.properties?.fields ?? [];\n\n const allowedAttributes = attributesWithReadPermissions.filter((attr) => {\n const current = contentType?.attributes?.[attr] ?? {};\n\n if (!current.type) {\n return false;\n }\n\n if (NOT_ALLOWED_FILTERS.includes(current.type)) {\n return false;\n }\n\n return true;\n });\n\n return [\n 'id',\n ...allowedAttributes,\n ...DEFAULT_ALLOWED_FILTERS,\n ...(canReadAdminUsers ? CREATOR_FIELDS : []),\n ];\n};\n\nexport { useAllowedAttributes };\n","import * as React from 'react';\n\nimport {\n Main,\n ActionLayout,\n Button,\n ContentLayout,\n HeaderLayout,\n useNotifyAT,\n Flex,\n Td,\n Tr,\n Typography,\n Status,\n lightTheme,\n ButtonProps,\n} from '@strapi/design-system';\nimport {\n findMatchingPermissions,\n NoPermissions,\n SearchURLQuery,\n useFetchClient,\n useFocusWhenNavigate,\n useQueryParams,\n useNotification,\n useRBACProvider,\n useTracking,\n Link,\n useAPIErrorHandler,\n useCollator,\n useStrapiApp,\n Table as HelperPluginTable,\n PaginationURLQuery,\n PageSizeURLQuery,\n Permission,\n LoadingIndicatorPage,\n useRBAC,\n FilterData,\n} from '@strapi/helper-plugin';\nimport { ArrowLeft, Plus } from '@strapi/icons';\nimport { Contracts } from '@strapi/plugin-content-manager/_internal/shared';\nimport { AxiosError, AxiosResponse } from 'axios';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQuery } from 'react-query';\nimport { useHistory, useLocation, Link as ReactRouterLink } from 'react-router-dom';\n\nimport { InjectionZone } from '../../../components/InjectionZone';\nimport { HOOKS } from '../../../constants';\nimport { useTypedDispatch, useTypedSelector } from '../../../core/store/hooks';\nimport { useEnterprise } from '../../../hooks/useEnterprise';\nimport { useAdminUsers } from '../../../services/users';\nimport { CREATOR_FIELDS } from '../../constants/attributes';\nimport { buildValidGetParams } from '../../utils/api';\nimport { FormattedLayouts, ListLayoutRow } from '../../utils/layouts';\nimport { generatePermissionsObject } from '../../utils/permissions';\nimport { getTranslation } from '../../utils/translations';\nimport { getDisplayName } from '../../utils/users';\nimport { getData, getDataSucceeded } from '../ListViewLayoutManager';\n\nimport { AdminUsersFilter } from './components/AdminUsersFilter';\nimport {\n AutoCloneFailureModal,\n type ProhibitedCloningField,\n} from './components/AutoCloneFailureModal';\nimport { BulkActionButtons } from './components/BulkActions/Buttons';\nimport { Filter } from './components/Filter';\nimport { Table } from './components/Table';\nimport { CellContent } from './components/TableCells/CellContent';\nimport { ViewSettingsMenu } from './components/ViewSettingsMenu';\nimport { useAllowedAttributes } from './hooks/useAllowedAttributes';\n\nimport type { Entity } from '@strapi/types';\n\nconst { INJECT_COLUMN_IN_TABLE } = HOOKS;\nconst REVIEW_WORKFLOW_COLUMNS_CE = null;\nconst REVIEW_WORKFLOW_COLUMNS_CELL_CE = {\n ReviewWorkflowsStageEE: () => null,\n ReviewWorkflowsAssigneeEE: () => null,\n};\nconst REVIEW_WORKFLOW_FILTER_CE: FilterData[] = [];\nconst USER_FILTER_ATTRIBUTES = [...CREATOR_FIELDS, 'strapi_assignee'];\n\n/* -------------------------------------------------------------------------------------------------\n * ListViewPage\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TableHeader extends Omit<ListLayoutRow, 'metadatas'> {\n metadatas: ListLayoutRow['metadatas'] & {\n label: string;\n };\n cellFormatter?: (\n data: Contracts.CollectionTypes.Find.Response['results'][number],\n header: Omit<TableHeader, 'cellFormatter'>\n ) => React.ReactNode;\n}\n\ninterface ListViewPageProps {\n canCreate?: boolean;\n canDelete?: boolean;\n canRead?: boolean;\n canPublish?: boolean;\n layout: FormattedLayouts;\n slug: string;\n}\n\nconst ListViewPage = ({\n canCreate,\n canDelete,\n canRead,\n canPublish,\n layout,\n slug,\n}: ListViewPageProps) => {\n const dispatch = useTypedDispatch();\n const { pagination, isLoading, data } = useTypedSelector(\n (state) => state['content-manager_listView']\n );\n const { total } = pagination;\n const { contentType } = layout;\n const {\n info,\n options,\n metadatas,\n settings: { bulkable: isBulkable, filterable: isFilterable, searchable: isSearchable },\n } = contentType;\n const [isConfirmDeleteRowOpen, setIsConfirmDeleteRowOpen] = React.useState(false);\n const toggleNotification = useNotification();\n const { trackUsage } = useTracking();\n const { allPermissions, refetchPermissions } = useRBACProvider();\n const { notifyStatus } = useNotifyAT();\n const { formatAPIError } = useAPIErrorHandler(getTranslation);\n const allowedAttributes = useAllowedAttributes(contentType, slug);\n const [{ query }] = useQueryParams<{\n plugins?: Record<string, unknown>;\n filters?: {\n $and: Array<{\n [key: string]: {\n id?: {\n $eq?: string;\n $ne?: string;\n };\n };\n }>;\n };\n }>();\n const { pathname } = useLocation();\n const { push } = useHistory();\n const { formatMessage, locale } = useIntl();\n const { get, post, del } = useFetchClient();\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const selectedUserIds =\n query?.filters?.$and?.reduce<Entity.ID[]>((acc, filter) => {\n const [key, value] = Object.entries(filter)[0];\n const id = value.id?.$eq || value.id?.$ne;\n\n // TODO: strapi_assignee should not be in here and rather defined\n // in the ee directory.\n if (id && USER_FILTER_ATTRIBUTES.includes(key) && !acc.includes(id)) {\n acc.push(id);\n }\n\n return acc;\n }, []) ?? [];\n\n const { data: userData, isLoading: isLoadingAdminUsers } = useAdminUsers(\n { filters: { id: { $in: selectedUserIds } } },\n {\n // fetch the list of admin users only if the filter contains users and the\n // current user has permissions to display users\n skip:\n selectedUserIds.length === 0 ||\n findMatchingPermissions(allPermissions, [\n {\n action: 'admin::users.read',\n subject: null,\n },\n ]).length === 0,\n }\n );\n\n const { users = [] } = userData ?? {};\n\n useFocusWhenNavigate();\n\n const params = React.useMemo(() => buildValidGetParams(query), [query]);\n const pluginsQueryParams = stringify({ plugins: query.plugins }, { encode: false });\n\n const displayedAttributeFilters = allowedAttributes.map((name) => {\n const attribute = contentType.attributes[name];\n\n const trackedEvent = {\n name: 'didFilterEntries',\n properties: { useRelation: attribute.type === 'relation' },\n } as const;\n\n const { mainField, label } = metadatas[name].list;\n\n const filter: FilterData = {\n name,\n metadatas: { label: formatMessage({ id: label, defaultMessage: label }) },\n fieldSchema: {\n type: attribute.type,\n options: 'enum' in attribute ? attribute.enum : [],\n mainField,\n },\n trackedEvent,\n };\n\n if (\n attribute.type === 'relation' &&\n 'target' in attribute &&\n attribute.target === 'admin::user'\n ) {\n filter.metadatas = {\n ...filter.metadatas,\n customOperators: [\n {\n intlLabel: {\n id: 'components.FilterOptions.FILTER_TYPES.$eq',\n defaultMessage: 'is',\n },\n value: '$eq',\n },\n {\n intlLabel: {\n id: 'components.FilterOptions.FILTER_TYPES.$ne',\n defaultMessage: 'is not',\n },\n value: '$ne',\n },\n ],\n customInput: AdminUsersFilter,\n options: users.map((user) => ({\n label: getDisplayName(user, formatMessage),\n customValue: user.id.toString(),\n })),\n };\n\n filter.fieldSchema.mainField = {\n ...mainField,\n name: 'id',\n };\n }\n\n return filter;\n });\n\n const hasDraftAndPublish = options?.draftAndPublish ?? false;\n const hasReviewWorkflows = options?.reviewWorkflows ?? false;\n\n const reviewWorkflowColumns = useEnterprise(\n REVIEW_WORKFLOW_COLUMNS_CE,\n async () =>\n (await import('../../../../../ee/admin/src/content-manager/pages/ListView/constants'))\n .REVIEW_WORKFLOW_COLUMNS_EE,\n {\n enabled: !!options?.reviewWorkflows,\n }\n );\n const ReviewWorkflowsColumns = useEnterprise(\n REVIEW_WORKFLOW_COLUMNS_CELL_CE,\n async () => {\n const { ReviewWorkflowsStageEE, ReviewWorkflowsAssigneeEE } = await import(\n '../../../../../ee/admin/src/content-manager/pages/ListView/components/ReviewWorkflowsColumn'\n );\n\n return { ReviewWorkflowsStageEE, ReviewWorkflowsAssigneeEE };\n },\n {\n enabled: hasReviewWorkflows,\n }\n );\n\n const reviewWorkflowFilter = useEnterprise(\n REVIEW_WORKFLOW_FILTER_CE,\n async () =>\n (await import('../../../../../ee/admin/src/content-manager/pages/ListView/constants'))\n .REVIEW_WORKFLOW_FILTERS,\n {\n combine(ceFilters, eeFilters) {\n return [\n ...ceFilters,\n ...eeFilters\n .filter((eeFilter) => {\n // do not display the filter at all, if the current user does\n // not have permissions to read admin users\n if (eeFilter.name === 'strapi_assignee') {\n return (\n findMatchingPermissions(allPermissions, [\n {\n action: 'admin::users.read',\n subject: null,\n },\n ]).length > 0\n );\n }\n\n return true;\n })\n .map((eeFilter) => ({\n ...eeFilter,\n metadatas: {\n ...eeFilter.metadatas,\n // the stage filter needs the current content-type uid to fetch\n // the list of stages that can be assigned to this content-type\n ...(eeFilter.name === 'strapi_stage' ? { uid: contentType.uid } : {}),\n\n // translate the filter label\n label: formatMessage(eeFilter.metadatas.label),\n\n // `options` allows the filter-tag to render the displayname\n // of a user over a plain id\n options:\n eeFilter.name === 'strapi_assignee'\n ? users.map((user) => ({\n label: getDisplayName(user, formatMessage),\n customValue: user.id.toString(),\n }))\n : undefined,\n },\n })),\n ];\n },\n\n defaultValue: [],\n\n // we have to wait for admin users to be fully loaded, because otherwise\n // combine is called to early and does not contain the latest state of\n // the users array\n enabled: hasReviewWorkflows && !isLoadingAdminUsers,\n }\n /**\n * this is cast because the data returns MessageDescriptor\n * as `metadatas.label` _then_ we turn it to a string.\n */\n ) as FilterData[];\n\n const { refetch } = useQuery<\n Contracts.CollectionTypes.Find.Response,\n AxiosError<Required<Pick<Contracts.CollectionTypes.Find.Response, 'error'>>>\n >(\n ['content-manager', 'collection-types', slug, params],\n async () => {\n dispatch(getData());\n\n const { data } = await get<Contracts.CollectionTypes.Find.Response>(\n `/content-manager/collection-types/${slug}`,\n { params }\n );\n\n return data;\n },\n {\n enabled: canRead,\n onError(err) {\n const resStatus = err?.response?.status ?? null;\n\n if (resStatus === 403) {\n refetchPermissions();\n\n toggleNotification({\n type: 'info',\n message: { id: getTranslation('permissions.not-allowed.update') },\n });\n\n push('/');\n\n return;\n }\n\n toggleNotification({\n type: 'warning',\n message: { id: getTranslation('error.model.fetch') },\n });\n },\n onSuccess({ pagination, results }) {\n // If user enters a page number that doesn't exist, redirect him to the last page\n if (pagination.page && pagination.page > pagination.pageCount && pagination.pageCount > 0) {\n const query = {\n ...params,\n page: pagination.pageCount,\n };\n\n push({\n pathname,\n state: { from: pathname },\n search: stringify(query),\n });\n\n return;\n }\n\n notifyStatus(\n formatMessage(\n {\n id: getTranslation('utils.data-loaded'),\n defaultMessage:\n '{number, plural, =1 {# entry has} other {# entries have}} successfully been loaded',\n },\n // Using the plural form\n { number: pagination.pageSize }\n )\n );\n\n dispatch(getDataSucceeded(pagination, results));\n },\n }\n );\n\n const bulkUnpublishMutation = useMutation<\n Contracts.CollectionTypes.BulkUnpublish.Response,\n AxiosError<Required<Pick<Contracts.CollectionTypes.BulkUnpublish.Response, 'error'>>>,\n Contracts.CollectionTypes.BulkUnpublish.Request['body']\n >(\n async (body) => {\n const { data } = await post<\n Contracts.CollectionTypes.BulkUnpublish.Response,\n AxiosResponse<Contracts.CollectionTypes.BulkUnpublish.Response>,\n Contracts.CollectionTypes.BulkUnpublish.Request['body']\n >(`/content-manager/collection-types/${contentType.uid}/actions/bulkUnpublish`, body);\n\n return data;\n },\n {\n onSuccess() {\n toggleNotification({\n type: 'success',\n message: {\n id: 'content-manager.success.record.unpublish',\n defaultMessage: 'Unpublished',\n },\n });\n\n refetch();\n },\n onError(error) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(error),\n });\n },\n }\n );\n\n const handleConfirmDeleteAllData = React.useCallback(\n async (ids: Contracts.CollectionTypes.BulkDelete.Request['body']['ids']) => {\n try {\n await post<\n Contracts.CollectionTypes.BulkDelete.Response,\n AxiosResponse<Contracts.CollectionTypes.BulkDelete.Response>,\n Contracts.CollectionTypes.BulkDelete.Request['body']\n >(`/content-manager/collection-types/${slug}/actions/bulkDelete`, {\n ids,\n });\n\n await refetch();\n\n trackUsage('didBulkDeleteEntries');\n } catch (err) {\n if (err instanceof AxiosError) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(err),\n });\n }\n }\n },\n [post, slug, refetch, trackUsage, toggleNotification, formatAPIError]\n );\n\n const handleConfirmDeleteData = React.useCallback(\n async (idToDelete: Contracts.CollectionTypes.Delete.Params['id']) => {\n try {\n await del<Contracts.CollectionTypes.Delete.Response>(\n `/content-manager/collection-types/${slug}/${idToDelete}`\n );\n\n await refetch();\n\n toggleNotification({\n type: 'success',\n message: { id: getTranslation('success.record.delete') },\n });\n } catch (err) {\n if (err instanceof AxiosError) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(err),\n });\n }\n }\n },\n [slug, toggleNotification, formatAPIError, del, refetch]\n );\n\n const handleConfirmUnpublishAllData = async (\n selectedEntries: Contracts.CollectionTypes.BulkUnpublish.Request['body']['ids']\n ) => {\n await bulkUnpublishMutation.mutateAsync({ ids: selectedEntries });\n };\n\n const defaultHeaderLayoutTitle = formatMessage({\n id: getTranslation('header.name'),\n defaultMessage: 'Content',\n });\n const headerLayoutTitle = formatMessage({\n id: info.displayName,\n defaultMessage: info.displayName || defaultHeaderLayoutTitle,\n });\n\n const { runHookWaterfall } = useStrapiApp();\n const displayedHeaders = useTypedSelector(\n (state) => state['content-manager_listView'].displayedHeaders\n );\n\n const tableHeaders: TableHeader[] = React.useMemo(() => {\n const headers = runHookWaterfall(INJECT_COLUMN_IN_TABLE, {\n displayedHeaders,\n layout,\n });\n\n const formattedHeaders = headers.displayedHeaders.map((header) => {\n if (header.fieldSchema.type === 'relation') {\n return {\n ...header,\n metadatas: {\n ...header.metadatas,\n label: formatMessage({\n id: getTranslation(`containers.ListPage.table-headers.${header.name}`),\n defaultMessage: header.metadatas.label,\n }),\n },\n name: `${header.name}.${header.metadatas.mainField?.name ?? ''}`,\n } satisfies TableHeader;\n }\n\n return {\n ...header,\n metadatas: {\n ...header.metadatas,\n label: formatMessage({\n id: getTranslation(`containers.ListPage.table-headers.${header.name}`),\n defaultMessage: header.metadatas.label,\n }),\n },\n } satisfies TableHeader;\n });\n\n if (hasDraftAndPublish) {\n formattedHeaders.push({\n key: '__published_at_temp_key__',\n name: 'publishedAt',\n fieldSchema: {\n type: 'custom',\n },\n metadatas: {\n label: formatMessage({\n id: getTranslation(`containers.ListPage.table-headers.publishedAt`),\n defaultMessage: 'publishedAt',\n }),\n searchable: false,\n sortable: true,\n },\n } satisfies TableHeader);\n }\n\n if (reviewWorkflowColumns) {\n formattedHeaders.push(\n ...reviewWorkflowColumns.map((column) => {\n return {\n ...column,\n metadatas: {\n ...column.metadatas,\n label: formatMessage(column.metadatas.label),\n },\n } satisfies TableHeader;\n })\n );\n }\n\n return formattedHeaders;\n }, [\n runHookWaterfall,\n displayedHeaders,\n layout,\n reviewWorkflowColumns,\n hasDraftAndPublish,\n formatMessage,\n ]);\n\n const handleRowClick = (id: Entity.ID) => () => {\n trackUsage('willEditEntryFromList');\n push({\n pathname: `${pathname}/${id}`,\n state: { from: pathname },\n search: pluginsQueryParams,\n });\n };\n\n const [clonedEntryId, setClonedEntryId] = React.useState<Entity.ID | null>(null);\n const [prohibitedCloningFields, setProhibitedCloningFields] = React.useState<\n ProhibitedCloningField[]\n >([]);\n\n const handleCloneClick =\n (id: Contracts.CollectionTypes.AutoClone.Params['sourceId']) => async () => {\n try {\n const { data } = await post<Contracts.CollectionTypes.AutoClone.Response>(\n `/content-manager/collection-types/${contentType.uid}/auto-clone/${id}?${pluginsQueryParams}`\n );\n\n if ('id' in data) {\n push({\n pathname: `${pathname}/${data.id}`,\n state: { from: pathname },\n search: pluginsQueryParams,\n });\n }\n } catch (err) {\n if (err instanceof AxiosError) {\n const { prohibitedFields } = err.response?.data.error.details;\n setClonedEntryId(id);\n setProhibitedCloningFields(prohibitedFields);\n }\n }\n };\n\n // Add 1 column for the checkbox and 1 for the actions\n const colCount = tableHeaders.length + 2;\n\n // Block rendering until the review stage component is fully loaded in EE\n if (!ReviewWorkflowsColumns) {\n return null;\n }\n\n return (\n <Main aria-busy={isLoading}>\n <HeaderLayout\n primaryAction={\n canCreate ? (\n <CreateButton\n hasDraftAndPublish={hasDraftAndPublish}\n params={query.plugins ? pluginsQueryParams : ''}\n />\n ) : null\n }\n subtitle={\n canRead\n ? formatMessage(\n {\n id: getTranslation('pages.ListView.header-subtitle'),\n defaultMessage:\n '{number, plural, =0 {# entries} one {# entry} other {# entries}} found',\n },\n { number: total }\n )\n : undefined\n }\n title={headerLayoutTitle}\n navigationAction={\n <Link startIcon={<ArrowLeft />} to=\"/content-manager/\">\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n />\n {!canRead && (\n <ActionLayout endActions={<InjectionZone area=\"contentManager.listView.actions\" />} />\n )}\n {canRead && (\n <ActionLayout\n endActions={\n <>\n <InjectionZone area=\"contentManager.listView.actions\" />\n <ViewSettingsMenu slug={slug} />\n </>\n }\n startActions={\n <>\n {isSearchable && (\n <SearchURLQuery\n label={formatMessage(\n { id: 'app.component.search.label', defaultMessage: 'Search for {target}' },\n { target: headerLayoutTitle }\n )}\n placeholder={formatMessage({\n id: 'global.search',\n defaultMessage: 'Search',\n })}\n trackedEvent=\"didSearch\"\n />\n )}\n {isFilterable && !isLoadingAdminUsers && (\n <Filter\n displayedFilters={[...displayedAttributeFilters, ...reviewWorkflowFilter].sort(\n (a, b) => formatter.compare(a.metadatas.label, b.metadatas.label)\n )}\n />\n )}\n </>\n }\n />\n )}\n <ContentLayout>\n {canRead ? (\n <Flex gap={4} direction=\"column\" alignItems=\"stretch\">\n <HelperPluginTable.Root rows={data} isLoading={isLoading} colCount={colCount}>\n <HelperPluginTable.ActionBar>\n <BulkActionButtons\n showPublish={canPublish && hasDraftAndPublish}\n showDelete={canDelete}\n onConfirmDeleteAll={handleConfirmDeleteAllData}\n onConfirmUnpublishAll={handleConfirmUnpublishAllData}\n refetchData={refetch}\n />\n </HelperPluginTable.ActionBar>\n <HelperPluginTable.Content>\n <HelperPluginTable.Head>\n {/* Bulk action select all checkbox */}\n <HelperPluginTable.HeaderCheckboxCell />\n {/* Dynamic headers based on fields */}\n {tableHeaders.map(({ fieldSchema, key, name, metadatas }) => (\n <HelperPluginTable.HeaderCell\n key={key}\n name={name}\n fieldSchemaType={fieldSchema.type}\n relationFieldName={metadatas.mainField?.name}\n isSortable={metadatas.sortable}\n label={metadatas.label}\n />\n ))}\n {/* Visually hidden header for actions */}\n <HelperPluginTable.HeaderHiddenActionsCell />\n </HelperPluginTable.Head>\n {/* Loading content */}\n <HelperPluginTable.LoadingBody />\n {/* Empty content */}\n <HelperPluginTable.EmptyBody\n contentType={headerLayoutTitle}\n action={\n canCreate ? (\n <CreateButton\n variant=\"secondary\"\n hasDraftAndPublish={hasDraftAndPublish}\n params={query.plugins ? pluginsQueryParams : ''}\n />\n ) : null\n }\n />\n <AutoCloneFailureModal\n entryId={clonedEntryId}\n onClose={() => setClonedEntryId(null)}\n prohibitedFields={prohibitedCloningFields}\n pluginQueryParams={pluginsQueryParams}\n />\n {/* Content */}\n <Table.Root\n onConfirmDelete={handleConfirmDeleteData}\n isConfirmDeleteRowOpen={isConfirmDeleteRowOpen}\n setIsConfirmDeleteRowOpen={setIsConfirmDeleteRowOpen}\n >\n {data.map((rowData, index) => {\n return (\n <Tr cursor=\"pointer\" key={rowData.id} onClick={handleRowClick(rowData.id)}>\n {/* Bulk action row checkbox */}\n <Td>\n <Table.CheckboxDataCell rowId={rowData.id} index={index} />\n </Td>\n {/* Field data */}\n {tableHeaders.map(({ key, name, cellFormatter, ...rest }) => {\n if (hasDraftAndPublish && name === 'publishedAt') {\n return (\n <Td key={key}>\n <Status\n width=\"min-content\"\n showBullet={false}\n variant={rowData.publishedAt ? 'success' : 'secondary'}\n size=\"S\"\n >\n <Typography\n fontWeight=\"bold\"\n textColor={`${\n rowData.publishedAt ? 'success' : 'secondary'\n }700`}\n >\n {formatMessage({\n id: getTranslation(\n `containers.List.${\n rowData.publishedAt ? 'published' : 'draft'\n }`\n ),\n defaultMessage: rowData.publishedAt ? 'Published' : 'Draft',\n })}\n </Typography>\n </Status>\n </Td>\n );\n }\n\n if (hasReviewWorkflows) {\n if (name === 'strapi_stage') {\n return (\n <Td key={key}>\n {rowData.strapi_stage ? (\n <ReviewWorkflowsColumns.ReviewWorkflowsStageEE\n color={\n rowData.strapi_stage.color ?? lightTheme.colors.primary600\n }\n name={rowData.strapi_stage.name}\n />\n ) : (\n <Typography textColor=\"neutral800\">-</Typography>\n )}\n </Td>\n );\n }\n if (name === 'strapi_assignee') {\n return (\n <Td key={key}>\n {rowData.strapi_assignee ? (\n <ReviewWorkflowsColumns.ReviewWorkflowsAssigneeEE\n user={rowData.strapi_assignee}\n />\n ) : (\n <Typography textColor=\"neutral800\">-</Typography>\n )}\n </Td>\n );\n }\n }\n\n if (['createdBy', 'updatedBy'].includes(name.split('.')[0])) {\n // Display the users full name\n // Some entries doesn't have a user assigned as creator/updater (ex: entries created through content API)\n // In this case, we display a dash\n return (\n <Td key={key}>\n <Typography textColor=\"neutral800\">\n {rowData[name.split('.')[0]]\n ? getDisplayName(rowData[name.split('.')[0]], formatMessage)\n : '-'}\n </Typography>\n </Td>\n );\n }\n\n if (typeof cellFormatter === 'function') {\n return (\n <Td key={key}>{cellFormatter(rowData, { key, name, ...rest })}</Td>\n );\n }\n\n return (\n <Td key={key}>\n <CellContent\n content={rowData[name.split('.')[0]]}\n name={name}\n contentType={layout.contentType}\n rowId={rowData.id}\n {...rest}\n />\n </Td>\n );\n })}\n {/* Actions: edit, duplicate, delete */}\n {(canDelete || canPublish) && isBulkable && (\n <Td>\n <Table.EntityActionsDataCell\n rowId={rowData.id}\n index={index}\n setIsConfirmDeleteRowOpen={setIsConfirmDeleteRowOpen}\n canCreate={canCreate}\n canDelete={canDelete}\n handleCloneClick={handleCloneClick}\n />\n </Td>\n )}\n </Tr>\n );\n })}\n </Table.Root>\n </HelperPluginTable.Content>\n </HelperPluginTable.Root>\n <Flex alignItems=\"flex-end\" justifyContent=\"space-between\">\n <PageSizeURLQuery trackedEvent=\"willChangeNumberOfEntriesPerPage\" />\n <PaginationURLQuery pagination={{ pageCount: pagination?.pageCount || 1 }} />\n </Flex>\n </Flex>\n ) : (\n <NoPermissions />\n )}\n </ContentLayout>\n </Main>\n );\n};\n\ninterface CreateButtonProps extends Pick<ButtonProps, 'variant'> {\n hasDraftAndPublish?: boolean;\n params?: string;\n}\n\nconst CreateButton = ({ hasDraftAndPublish = false, params = '', variant }: CreateButtonProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { pathname } = useLocation();\n\n return (\n <Button\n variant={variant}\n forwardedAs={ReactRouterLink}\n onClick={() => {\n const trackerProperty = hasDraftAndPublish ? { status: 'draft' } : {};\n\n trackUsage('willCreateEntry', trackerProperty);\n }}\n startIcon={<Plus />}\n style={{ textDecoration: 'none' }}\n // @ts-expect-error – DS inference does not work with as or forwardedAs\n to={{\n pathname: `${pathname}/create`,\n search: params,\n }}\n >\n {formatMessage({\n id: getTranslation('HeaderLayout.button.label-add-entry'),\n defaultMessage: 'Create new entry',\n })}\n </Button>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedListViewPage\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ProtectedListViewPageProps extends ListViewPageProps {\n permissions?: Permission[] | null;\n}\n\nconst ProtectedListViewPage = ({ permissions, ...restProps }: ProtectedListViewPageProps) => {\n const viewPermissions = React.useMemo(\n () => generatePermissionsObject(restProps.slug),\n [restProps.slug]\n );\n\n const { isLoading, allowedActions } = useRBAC(viewPermissions, permissions ?? []);\n\n if (isLoading) {\n return <LoadingIndicatorPage />;\n }\n\n return <ListViewPage {...restProps} {...allowedActions} />;\n};\n\nexport { ListViewPage, ProtectedListViewPage };\nexport type { ListViewPageProps, ProtectedListViewPageProps, TableHeader };\n","import * as React from 'react';\n\nimport { useQueryParams } from '@strapi/helper-plugin';\nimport { Contracts } from '@strapi/plugin-content-manager/_internal/shared';\nimport produce from 'immer';\nimport { useHistory } from 'react-router-dom';\n\nimport { useTypedDispatch } from '../../core/store/hooks';\nimport { useFindRedirectionLink } from '../hooks/useFindRedirectionLink';\nimport { useSyncRbac } from '../hooks/useSyncRbac';\nimport { FormattedLayouts, ListLayoutRow } from '../utils/layouts';\n\nimport { ProtectedListViewPageProps, ProtectedListViewPage } from './ListView/ListViewPage';\n\n/* -------------------------------------------------------------------------------------------------\n * ListViewLayoutManager\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ListViewLayoutManagerProps extends ProtectedListViewPageProps {}\n\nconst ListViewLayoutManager = ({ layout, ...props }: ListViewLayoutManagerProps) => {\n const dispatch = useTypedDispatch();\n const { replace } = useHistory();\n const [{ query, rawQuery }] = useQueryParams();\n const { permissions, isValid: isValidPermissions } = useSyncRbac(query, props.slug, 'listView');\n const redirectionLink = useFindRedirectionLink(props.slug);\n\n React.useEffect(() => {\n if (!rawQuery) {\n replace(redirectionLink);\n }\n }, [rawQuery, replace, redirectionLink]);\n\n React.useEffect(() => {\n dispatch(setLayout(layout));\n }, [dispatch, layout]);\n\n React.useEffect(() => {\n return () => {\n dispatch(resetProps());\n };\n }, [dispatch]);\n\n if (!isValidPermissions) {\n return null;\n }\n\n return <ProtectedListViewPage {...props} layout={layout} permissions={permissions} />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Reducer\n * -----------------------------------------------------------------------------------------------*/\n\nconst GET_DATA = 'ContentManager/ListView/GET_DATA';\nconst GET_DATA_SUCCEEDED = 'ContentManager/ListView/GET_DATA_SUCCEEDED';\nconst RESET_PROPS = 'ContentManager/ListView/RESET_PROPS';\nconst ON_CHANGE_LIST_HEADERS = 'ContentManager/ListView/ON_CHANGE_LIST_HEADERS ';\nconst ON_RESET_LIST_HEADERS = 'ContentManager/ListView/ON_RESET_LIST_HEADERS ';\nconst SET_LIST_LAYOUT = 'ContentManager/ListView/SET_LIST_LAYOUT ';\n\ninterface ListViewLayoutManagerState {\n contentType: FormattedLayouts['contentType'] | null;\n components: FormattedLayouts['components'];\n data: Contracts.CollectionTypes.Find.Response['results'];\n displayedHeaders: ListLayoutRow[];\n initialDisplayedHeaders: ListLayoutRow[];\n isLoading: boolean;\n pagination: Contracts.CollectionTypes.Find.Response['pagination'];\n}\n\nconst initialState = {\n data: [],\n isLoading: true,\n components: {},\n contentType: null,\n initialDisplayedHeaders: [],\n displayedHeaders: [],\n pagination: {\n page: 0,\n pageCount: 0,\n pageSize: 0,\n total: 0,\n },\n} satisfies ListViewLayoutManagerState;\n\ninterface GetDataAction {\n type: typeof GET_DATA;\n}\n\nconst getData = () => ({ type: GET_DATA } satisfies GetDataAction);\n\ninterface GetDataSucceededAction extends Pick<ListViewLayoutManagerState, 'data' | 'pagination'> {\n type: typeof GET_DATA_SUCCEEDED;\n}\n\nconst getDataSucceeded = (\n pagination: GetDataSucceededAction['pagination'],\n data: GetDataSucceededAction['data']\n) =>\n ({\n type: GET_DATA_SUCCEEDED,\n pagination,\n data,\n } satisfies GetDataSucceededAction);\n\ninterface onResetListHeadersAction {\n type: typeof ON_RESET_LIST_HEADERS;\n}\n\nconst onResetListHeaders = () =>\n ({ type: ON_RESET_LIST_HEADERS } satisfies onResetListHeadersAction);\n\ninterface ResetPropsAction {\n type: typeof RESET_PROPS;\n}\n\nfunction resetProps() {\n return { type: RESET_PROPS } satisfies ResetPropsAction;\n}\n\ninterface SetLayoutAction\n extends Pick<ListViewLayoutManagerState, 'components' | 'displayedHeaders'> {\n type: typeof SET_LIST_LAYOUT;\n contentType: NonNullable<ListViewLayoutManagerState['contentType']>;\n}\n\nconst setLayout = ({\n components,\n contentType,\n}: Pick<SetLayoutAction, 'components' | 'contentType'>) =>\n ({\n contentType,\n components,\n displayedHeaders: contentType.layouts.list,\n type: SET_LIST_LAYOUT,\n } satisfies SetLayoutAction);\n\ninterface OnChangeListHeadersAction {\n type: typeof ON_CHANGE_LIST_HEADERS;\n target: {\n name: string;\n value: boolean;\n };\n}\n\nconst onChangeListHeaders = (target: OnChangeListHeadersAction['target']) =>\n ({ type: ON_CHANGE_LIST_HEADERS, target } satisfies OnChangeListHeadersAction);\n\ntype Action =\n | GetDataAction\n | GetDataSucceededAction\n | ResetPropsAction\n | SetLayoutAction\n | OnChangeListHeadersAction\n | onResetListHeadersAction;\n\nconst reducer = (state: ListViewLayoutManagerState = initialState, action: Action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case GET_DATA: {\n return {\n ...initialState,\n contentType: state.contentType,\n components: state.components,\n initialDisplayedHeaders: state.initialDisplayedHeaders,\n displayedHeaders: state.displayedHeaders,\n };\n }\n\n case GET_DATA_SUCCEEDED: {\n draftState.pagination = action.pagination;\n draftState.data = action.data;\n draftState.isLoading = false;\n break;\n }\n\n case ON_CHANGE_LIST_HEADERS: {\n const {\n target: { name, value },\n } = action;\n\n if (!value && state.contentType) {\n const { metadatas, attributes, uid } = state.contentType;\n const metas = metadatas[name].list;\n const header = {\n name,\n fieldSchema: attributes[name],\n metadatas: metas,\n key: `__${name}_key__`,\n } satisfies ListLayoutRow;\n\n const attribute = attributes[name];\n\n switch (attribute.type) {\n case 'component': {\n const componentName = attribute.component;\n\n const mainFieldName = state.components[componentName]?.settings.mainField ?? null;\n const mainFieldAttribute = state.components[componentName]?.attributes[mainFieldName];\n\n draftState.displayedHeaders.push({\n ...header,\n metadatas: {\n ...metas,\n mainField: {\n ...mainFieldAttribute,\n name: mainFieldName,\n },\n },\n });\n break;\n }\n\n case 'relation':\n draftState.displayedHeaders.push({\n ...header,\n // @ts-expect-error – i don't think we need this anymore...\n queryInfos: {\n defaultParams: {},\n endPoint: `collection-types/${uid}`,\n },\n });\n break;\n\n default:\n draftState.displayedHeaders.push(header);\n }\n } else {\n const headerIndexToRemove = state.displayedHeaders.findIndex(\n (head) => head.name === name\n );\n\n draftState.displayedHeaders.splice(headerIndexToRemove, 1);\n }\n\n break;\n }\n case ON_RESET_LIST_HEADERS: {\n draftState.displayedHeaders = state.initialDisplayedHeaders;\n break;\n }\n case RESET_PROPS: {\n return initialState;\n }\n case SET_LIST_LAYOUT: {\n const { contentType, components, displayedHeaders } = action;\n\n draftState.contentType = contentType;\n draftState.components = components;\n draftState.displayedHeaders = displayedHeaders;\n draftState.initialDisplayedHeaders = displayedHeaders;\n\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport {\n ListViewLayoutManager,\n reducer,\n getData,\n getDataSucceeded,\n onChangeListHeaders,\n onResetListHeaders,\n};\nexport type { ListViewLayoutManagerState, ListViewLayoutManagerProps };\n","/**\n * This component renders all the routes for either multiple or single content types\n * including the settings views available.\n */\n\nimport * as React from 'react';\n\nimport { CheckPagePermissions, LoadingIndicatorPage } from '@strapi/helper-plugin';\nimport { Route, RouteComponentProps, Switch } from 'react-router-dom';\n\nimport { useTypedSelector } from '../../core/store/hooks';\nimport { NotFoundPage } from '../../pages/NotFoundPage';\nimport { useContentTypeLayout } from '../hooks/useLayouts';\nimport {\n SettingsViewComponentLayout,\n SettingsViewContentTypeLayout,\n formatLayoutForSettingsView,\n} from '../utils/layouts';\n\n// @ts-expect-error – This will be done in CONTENT-1952\nimport EditSettingsView from './EditSettingsView';\nimport { EditViewLayoutManager } from './EditViewLayoutManager';\n// @ts-expect-error – This will be done in CONTENT-1953\nimport { ListSettingsView } from './ListSettingsView';\nimport { ListViewLayoutManager } from './ListViewLayoutManager';\n\ninterface CollectionTypePagesProps\n extends RouteComponentProps<{ collectionType: string; slug: string }> {}\n\nconst CollectionTypePages = (props: CollectionTypePagesProps) => {\n const {\n match: {\n params: { collectionType, slug },\n path,\n },\n } = props;\n\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n\n const { isLoading, layout, updateLayout } = useContentTypeLayout(slug);\n\n const { rawContentTypeLayout, rawComponentsLayouts } = React.useMemo(() => {\n let rawContentTypeLayout: SettingsViewContentTypeLayout | null = null;\n let rawComponentsLayouts: Record<string, SettingsViewComponentLayout> | null = null;\n\n if (layout?.contentType) {\n rawContentTypeLayout = formatLayoutForSettingsView(layout.contentType);\n }\n\n if (layout?.components) {\n rawComponentsLayouts = Object.keys(layout.components).reduce<\n Record<string, SettingsViewComponentLayout>\n >((acc, current) => {\n acc[current] = formatLayoutForSettingsView(layout.components[current]);\n\n return acc;\n }, {});\n }\n\n return { rawContentTypeLayout, rawComponentsLayouts };\n }, [layout]);\n\n /**\n * We only support two types of collections.\n */\n if (collectionType !== 'collection-types' && collectionType !== 'single-types') {\n return <NotFoundPage />;\n }\n\n if (isLoading || !layout) {\n return <LoadingIndicatorPage />;\n }\n\n /**\n * We do this cast so the params are correctly inferred on the render props.\n */\n const currentPath = path as `/content-manager/:collectionType/:slug`;\n\n return (\n <Switch>\n <Route\n path={currentPath}\n exact\n render={(props) =>\n collectionType === 'collection-types' ? (\n <ListViewLayoutManager slug={slug} layout={layout} />\n ) : (\n <EditViewLayoutManager layout={layout} {...props} />\n )\n }\n />\n <Route exact path={`${currentPath}/configurations/edit`}>\n <CheckPagePermissions\n permissions={permissions.contentManager?.collectionTypesConfigurations}\n >\n <EditSettingsView\n components={rawComponentsLayouts}\n isContentTypeView\n mainLayout={rawContentTypeLayout}\n slug={slug}\n updateLayout={updateLayout}\n />\n </CheckPagePermissions>\n </Route>\n {collectionType === 'collection-types' ? (\n <>\n <Route path={`${currentPath}/configurations/list`}>\n <CheckPagePermissions\n permissions={permissions.contentManager?.collectionTypesConfigurations}\n >\n <ListSettingsView\n layout={rawContentTypeLayout}\n slug={slug}\n updateLayout={updateLayout}\n />\n </CheckPagePermissions>\n </Route>\n <Route\n path={`${currentPath}/create/clone/:origin`}\n exact\n render={(props) => <EditViewLayoutManager layout={layout} {...props} />}\n />\n <Route\n path={[`${currentPath}/create`, `${currentPath}/:id`]}\n exact\n render={(props) => <EditViewLayoutManager layout={layout} {...props} />}\n />\n </>\n ) : null}\n </Switch>\n );\n};\n\nexport { CollectionTypePages };\n","import { Attribute } from '@strapi/types';\nimport produce from 'immer';\n\nimport {\n CLEAR_SET_MODIFIED_DATA_ONLY,\n GET_DATA,\n GET_DATA_SUCCEEDED,\n INIT_FORM,\n RESET_PROPS,\n SET_DATA_STRUCTURES,\n SET_STATUS,\n SUBMIT_SUCCEEDED,\n} from './constants';\n\nimport type { CrudAction } from './actions';\n\ninterface EntityData {\n [key: string]: Attribute.GetValue<Attribute.Any>;\n}\n\ninterface CrudState {\n componentsDataStructure: EntityData;\n contentTypeDataStructure: EntityData;\n isLoading: boolean;\n data: EntityData | null;\n status: string;\n setModifiedDataOnly: boolean;\n}\n\nconst initialState = {\n componentsDataStructure: {},\n contentTypeDataStructure: {},\n isLoading: true,\n data: null,\n status: 'resolved',\n setModifiedDataOnly: false,\n} satisfies CrudState;\n\nconst reducer = (state: CrudState = initialState, action: CrudAction) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case GET_DATA: {\n draftState.isLoading = true;\n draftState.data = null;\n break;\n }\n case GET_DATA_SUCCEEDED: {\n draftState.isLoading = false;\n draftState.data = action.data;\n draftState.setModifiedDataOnly = action.setModifiedDataOnly ?? false;\n break;\n }\n case INIT_FORM: {\n if (action.data) {\n draftState.isLoading = false;\n draftState.data = action.data;\n\n break;\n }\n\n draftState.isLoading = false;\n draftState.data = state.contentTypeDataStructure;\n break;\n }\n case RESET_PROPS: {\n return initialState;\n }\n case SET_DATA_STRUCTURES: {\n draftState.componentsDataStructure = action.componentsDataStructure;\n draftState.contentTypeDataStructure = action.contentTypeDataStructure;\n break;\n }\n case SET_STATUS: {\n draftState.status = action.status;\n break;\n }\n case SUBMIT_SUCCEEDED: {\n draftState.data = action.data;\n break;\n }\n case CLEAR_SET_MODIFIED_DATA_ONLY: {\n draftState.setModifiedDataOnly = false;\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport { reducer, initialState };\nexport type { CrudState, EntityData, CrudAction };\n","import * as React from 'react';\n\nimport { CheckPagePermissions, LoadingIndicatorPage, useFetchClient } from '@strapi/helper-plugin';\nimport axios, { CancelTokenSource } from 'axios';\nimport { useParams } from 'react-router-dom';\n\nimport { useTypedSelector } from '../../core/store/hooks';\nimport { getData, getDataSucceeded } from '../sharedReducers/crud/actions';\nimport { reducer, initialState } from '../sharedReducers/crud/reducer';\nimport { mergeMetasWithSchema } from '../utils/schemas';\n\nimport { selectSchemas } from './App';\n// @ts-expect-error – This will be done in CONTENT-1952\nimport EditSettingsView from './EditSettingsView';\n\nconst ComponentSettingsView = () => {\n const [{ isLoading, data: layout }, dispatch] = React.useReducer(reducer, initialState);\n const schemas = useTypedSelector(selectSchemas);\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const { uid } = useParams<{ uid: string }>();\n const { get } = useFetchClient();\n\n React.useEffect(() => {\n const CancelToken = axios.CancelToken;\n const source = CancelToken.source();\n const fetchData = async (source: CancelTokenSource) => {\n try {\n dispatch(getData());\n\n const {\n data: { data },\n } = await get(`/content-manager/components/${uid}/configuration`, {\n cancelToken: source.token,\n });\n dispatch(getDataSucceeded(mergeMetasWithSchema(data, schemas, 'component')));\n } catch (err) {\n if (axios.isCancel(err)) {\n return;\n }\n console.error(err);\n }\n };\n\n fetchData(source);\n\n return () => {\n source.cancel('Operation canceled by the user.');\n };\n }, [uid, schemas, get]);\n\n if (isLoading || !layout) {\n return <LoadingIndicatorPage />;\n }\n\n return (\n <CheckPagePermissions permissions={permissions.contentManager?.componentsConfigurations}>\n <EditSettingsView components={layout.components} mainLayout={layout.component} slug={uid} />\n </CheckPagePermissions>\n );\n};\n\nexport { ComponentSettingsView };\n","import { ContentLayout, EmptyStateLayout, HeaderLayout, Main } from '@strapi/design-system';\nimport { LinkButton } from '@strapi/design-system/v2';\nimport { useFocusWhenNavigate } from '@strapi/helper-plugin';\nimport { EmptyDocuments, Plus } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\n\nimport { getTranslation } from '../utils/translations';\n\nconst NoContentType = () => {\n const { formatMessage } = useIntl();\n useFocusWhenNavigate();\n\n return (\n <Main>\n <HeaderLayout\n title={formatMessage({\n id: getTranslation('header.name'),\n defaultMessage: 'Content',\n })}\n />\n <ContentLayout>\n <EmptyStateLayout\n action={\n <LinkButton\n as={NavLink}\n variant=\"secondary\"\n startIcon={<Plus />}\n // @ts-expect-error – DS inference does not work with the `as` prop.\n to=\"/plugins/content-type-builder/content-types/create-content-type\"\n >\n {formatMessage({\n id: 'app.components.HomePage.create',\n defaultMessage: 'Create your first Content-type',\n })}\n </LinkButton>\n }\n content={formatMessage({\n id: 'content-manager.pages.NoContentType.text',\n defaultMessage:\n \"You don't have any content yet, we recommend you to create your first Content-Type.\",\n })}\n hasRadius\n icon={<EmptyDocuments width=\"10rem\" />}\n shadow=\"tableShadow\"\n />\n </ContentLayout>\n </Main>\n );\n};\n\nexport { NoContentType };\n","import { ContentLayout, HeaderLayout, Main } from '@strapi/design-system';\nimport {\n NoPermissions as NoPermissionsComponent,\n useFocusWhenNavigate,\n} from '@strapi/helper-plugin';\nimport { useIntl } from 'react-intl';\n\nimport { getTranslation } from '../utils/translations';\n\nconst NoPermissions = () => {\n const { formatMessage } = useIntl();\n useFocusWhenNavigate();\n\n return (\n <Main>\n <HeaderLayout\n title={formatMessage({\n id: getTranslation('header.name'),\n defaultMessage: 'Content',\n })}\n />\n <ContentLayout>\n <NoPermissionsComponent />\n </ContentLayout>\n </Main>\n );\n};\n\nexport { NoPermissions };\n","import * as React from 'react';\n\nimport { createSelector } from '@reduxjs/toolkit';\nimport { HeaderLayout, Layout, Main } from '@strapi/design-system';\nimport {\n AnErrorOccurred,\n CheckPagePermissions,\n LoadingIndicatorPage,\n useGuidedTour,\n} from '@strapi/helper-plugin';\nimport produce from 'immer';\nimport { Helmet } from 'react-helmet';\nimport { useIntl } from 'react-intl';\nimport { Redirect, Route, Switch, useLocation, useRouteMatch } from 'react-router-dom';\n\nimport { DragLayer, DragLayerProps } from '../../components/DragLayer';\nimport { RootState } from '../../core/store/configure';\nimport { useTypedSelector } from '../../core/store/hooks';\nimport { CardDragPreview } from '../components/DragPreviews/CardDragPreview';\nimport { ComponentDragPreview } from '../components/DragPreviews/ComponentDragPreview';\nimport { RelationDragPreview } from '../components/DragPreviews/RelationDragPreview';\nimport { LeftMenu } from '../components/LeftMenu';\nimport { ModelsContext } from '../contexts/models';\nimport { useContentManagerInitData } from '../hooks/useContentManagerInitData';\nimport { ItemTypes } from '../utils/dragAndDrop';\nimport { getTranslation } from '../utils/translations';\n\nimport { CollectionTypePages } from './CollectionTypePages';\nimport { ComponentSettingsView } from './ComponentSettingsView';\nimport { NoContentType } from './NoContentTypePage';\nimport { NoPermissions } from './NoPermissionsPage';\n\nimport type { ContentManagerLink } from '../hooks/useContentManagerInitData';\nimport type { Contracts } from '@strapi/plugin-content-manager/_internal/shared';\n\n/* -------------------------------------------------------------------------------------------------\n * App\n * -----------------------------------------------------------------------------------------------*/\n\nconst App = () => {\n const contentTypeMatch = useRouteMatch(`/content-manager/:kind/:uid`);\n const { status, collectionTypeLinks, singleTypeLinks, models, refetchData } =\n useContentManagerInitData();\n const authorisedModels = [...collectionTypeLinks, ...singleTypeLinks].sort((a, b) =>\n a.title.localeCompare(b.title)\n );\n const { pathname } = useLocation();\n const { formatMessage } = useIntl();\n const { startSection } = useGuidedTour();\n const startSectionRef = React.useRef(startSection);\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n\n React.useEffect(() => {\n if (startSectionRef.current) {\n startSectionRef.current('contentManager');\n }\n }, []);\n\n if (status === 'loading') {\n return (\n <Main aria-busy=\"true\">\n <Helmet\n title={formatMessage({\n id: getTranslation('plugin.name'),\n defaultMessage: 'Content Manager',\n })}\n />\n <HeaderLayout\n title={formatMessage({\n id: getTranslation('header.name'),\n defaultMessage: 'Content',\n })}\n />\n <LoadingIndicatorPage />\n </Main>\n );\n }\n\n // Array of models that are displayed in the content manager\n const supportedModelsToDisplay = models.filter(({ isDisplayed }) => isDisplayed);\n\n // Redirect the user to the 403 page\n if (\n authorisedModels.length === 0 &&\n supportedModelsToDisplay.length > 0 &&\n pathname !== '/content-manager/403'\n ) {\n return <Redirect to=\"/content-manager/403\" />;\n }\n\n // Redirect the user to the create content type page\n if (supportedModelsToDisplay.length === 0 && pathname !== '/content-manager/no-content-types') {\n return <Redirect to=\"/content-manager/no-content-types\" />;\n }\n\n if (!contentTypeMatch && authorisedModels.length > 0) {\n return (\n <Redirect\n to={{\n pathname: authorisedModels[0].to,\n search: authorisedModels[0].search ?? '',\n }}\n />\n );\n }\n\n return (\n <>\n <Helmet\n title={formatMessage({\n id: getTranslation('plugin.name'),\n defaultMessage: 'Content Manager',\n })}\n />\n <Layout sideNav={<LeftMenu />}>\n <DragLayer renderItem={renderDraglayerItem} />\n <ModelsContext.Provider value={{ refetchData }}>\n <Switch>\n <Route path=\"/content-manager/components/:uid/configurations/edit\">\n <CheckPagePermissions\n permissions={permissions.contentManager?.componentsConfigurations}\n >\n <ComponentSettingsView />\n </CheckPagePermissions>\n </Route>\n {/* These redirects exist because we've changed to use the same term in `:collectionType` as the admin API for simplicity */}\n <Redirect\n from=\"/content-manager/collectionType/:slug\"\n to=\"/content-manager/collection-types/:slug\"\n />\n <Redirect\n from=\"/content-manager/singleType/:slug\"\n to=\"/content-manager/single-types/:slug\"\n />\n <Route path=\"/content-manager/:collectionType/:slug\" component={CollectionTypePages} />\n <Route path=\"/content-manager/403\">\n <NoPermissions />\n </Route>\n <Route path=\"/content-manager/no-content-types\">\n <NoContentType />\n </Route>\n <Route path=\"\" component={AnErrorOccurred} />\n </Switch>\n </ModelsContext.Provider>\n </Layout>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * renderDraglayerItem\n * -----------------------------------------------------------------------------------------------*/\n\nfunction renderDraglayerItem({ type, item }: Parameters<DragLayerProps['renderItem']>[0]) {\n if (!type || (type && typeof type !== 'string')) {\n return null;\n }\n\n /**\n * Because a user may have multiple relations / dynamic zones / repeable fields in the same content type,\n * we append the fieldName for the item type to make them unique, however, we then want to extract that\n * first type to apply the correct preview.\n */\n const [actualType] = type.split('_');\n\n switch (actualType) {\n case ItemTypes.EDIT_FIELD:\n case ItemTypes.FIELD:\n return <CardDragPreview labelField={item.labelField} />;\n case ItemTypes.COMPONENT:\n case ItemTypes.DYNAMIC_ZONE:\n return <ComponentDragPreview displayedValue={item.displayedValue} />;\n\n case ItemTypes.RELATION:\n return (\n <RelationDragPreview\n displayedValue={item.displayedValue}\n status={item.status}\n width={item.width}\n />\n );\n\n default:\n return null;\n }\n}\n\n/* -------------------------------------------------------------------------------------------------\n * reducer\n * -----------------------------------------------------------------------------------------------*/\n\nconst GET_INIT_DATA = 'ContentManager/App/GET_INIT_DATA';\nconst RESET_INIT_DATA = 'ContentManager/App/RESET_INIT_DATA';\nconst SET_INIT_DATA = 'ContentManager/App/SET_INIT_DATA';\n\ninterface GetInitDataAction {\n type: typeof GET_INIT_DATA;\n}\n\ninterface ResetInitDataAction {\n type: typeof RESET_INIT_DATA;\n}\n\ninterface SetInitDataAction {\n type: typeof SET_INIT_DATA;\n data: {\n authorizedCollectionTypeLinks: ContentManagerAppState['collectionTypeLinks'];\n authorizedSingleTypeLinks: ContentManagerAppState['singleTypeLinks'];\n components: ContentManagerAppState['components'];\n contentTypeSchemas: ContentManagerAppState['models'];\n fieldSizes: ContentManagerAppState['fieldSizes'];\n };\n}\n\ntype Action = GetInitDataAction | ResetInitDataAction | SetInitDataAction;\n\ninterface ContentManagerAppState {\n collectionTypeLinks: ContentManagerLink[];\n components: Contracts.Init.GetInitData.Response['data']['components'];\n fieldSizes: Contracts.Init.GetInitData.Response['data']['fieldSizes'];\n models: Contracts.Init.GetInitData.Response['data']['contentTypes'];\n singleTypeLinks: ContentManagerLink[];\n status: 'loading' | 'resolved' | 'error';\n}\n\nconst initialState = {\n collectionTypeLinks: [],\n components: [],\n fieldSizes: {},\n models: [],\n singleTypeLinks: [],\n status: 'loading',\n} satisfies ContentManagerAppState;\n\nconst selectSchemas = createSelector(\n (state: RootState) => state['content-manager_app'],\n ({ components, models }) => {\n return [...components, ...models];\n }\n);\n\nconst reducer = (state: ContentManagerAppState = initialState, action: Action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case GET_INIT_DATA: {\n draftState.status = 'loading';\n break;\n }\n case RESET_INIT_DATA: {\n return initialState;\n }\n case SET_INIT_DATA: {\n draftState.collectionTypeLinks = action.data.authorizedCollectionTypeLinks.filter(\n ({ isDisplayed }) => isDisplayed\n );\n draftState.singleTypeLinks = action.data.authorizedSingleTypeLinks.filter(\n ({ isDisplayed }) => isDisplayed\n );\n draftState.components = action.data.components;\n draftState.models = action.data.contentTypeSchemas;\n draftState.fieldSizes = action.data.fieldSizes;\n draftState.status = 'resolved';\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport { App, reducer, selectSchemas };\nexport type { ContentManagerAppState };\n","import {\n configureStore,\n StoreEnhancer,\n Middleware,\n Reducer,\n combineReducers,\n} from '@reduxjs/toolkit';\n\nimport { RBACReducer, RBACState } from '../../components/RBACProvider';\nimport { reducer as rbacManagerReducer } from '../../content-manager/hooks/useSyncRbac';\nimport { reducer as cmAppReducer } from '../../content-manager/pages/App';\nimport { reducer as editViewReducer } from '../../content-manager/pages/EditViewLayoutManager';\nimport { reducer as listViewReducer } from '../../content-manager/pages/ListViewLayoutManager';\nimport { reducer as crudReducer } from '../../content-manager/sharedReducers/crud/reducer';\nimport { reducer as appReducer, AppState } from '../../reducer';\nimport { adminApi } from '../../services/api';\n\n/**\n * @description Static reducers are ones we know, they live in the admin package.\n */\nconst staticReducers = {\n [adminApi.reducerPath]: adminApi.reducer,\n admin_app: appReducer,\n rbacProvider: RBACReducer,\n 'content-manager_app': cmAppReducer,\n 'content-manager_listView': listViewReducer,\n 'content-manager_rbacManager': rbacManagerReducer,\n 'content-manager_editViewLayoutManager': editViewReducer,\n 'content-manager_editViewCrudReducer': crudReducer,\n} as const;\n\nconst injectReducerStoreEnhancer: (appReducers: Record<string, Reducer>) => StoreEnhancer =\n (appReducers) =>\n (next) =>\n (...args) => {\n const store = next(...args);\n\n const asyncReducers: Record<string, Reducer> = {};\n\n return {\n ...store,\n asyncReducers,\n injectReducer: (key: string, asyncReducer: Reducer) => {\n asyncReducers[key] = asyncReducer;\n store.replaceReducer(\n // @ts-expect-error we dynamically add reducers which makes the types uncomfortable.\n combineReducers({\n ...appReducers,\n ...asyncReducers,\n })\n );\n },\n };\n };\n\ntype PreloadState = Partial<{\n admin_app: AppState;\n}>;\n\n/**\n * @description This is the main store configuration function, injected Reducers use our legacy app.addReducer API,\n * which we're trying to phase out. App Middlewares could potentially be improved...?\n */\nconst configureStoreImpl = (\n preloadedState: PreloadState = {},\n appMiddlewares: Array<() => Middleware> = [],\n injectedReducers: Record<string, Reducer> = {}\n) => {\n const coreReducers = { ...staticReducers, ...injectedReducers } as const;\n\n const defaultMiddlewareOptions = {} as any;\n\n // These are already disabled in 'production' env but we also need to disable it in test environments\n // However, we want to leave them on for development so any issues can still be caught\n if (process.env.NODE_ENV === 'test') {\n defaultMiddlewareOptions.serializableCheck = false;\n defaultMiddlewareOptions.immutableCheck = false;\n }\n\n const store = configureStore({\n preloadedState: {\n admin_app: preloadedState.admin_app,\n },\n reducer: coreReducers,\n devTools: process.env.NODE_ENV !== 'production',\n middleware: (getDefaultMiddleware) => [\n ...getDefaultMiddleware(defaultMiddlewareOptions),\n adminApi.middleware,\n ...appMiddlewares.map((m) => m()),\n ],\n enhancers: [injectReducerStoreEnhancer(coreReducers)],\n });\n\n return store;\n};\n\ntype Store = ReturnType<typeof configureStoreImpl> & {\n asyncReducers: Record<string, Reducer>;\n injectReducer: (key: string, asyncReducer: Reducer) => void;\n};\n\ntype RootState = ReturnType<Store['getState']>;\n\nexport { configureStoreImpl as configureStore };\nexport type { RootState, AppState, RBACState, Store, PreloadState };\n","export const getBasename = () => (process.env.ADMIN_PATH ?? '').replace(window.location.origin, '');\n","/* eslint-disable no-await-in-loop */\n/* eslint-disable no-restricted-syntax */\n\nimport type { Store } from '../store/configure';\n\nexport type Handler = (...args: any[]) => any;\n\nexport const createHook = () => {\n const _handlers: Handler[] = [];\n\n return {\n register(fn: Handler) {\n _handlers.push(fn);\n },\n delete(handler: Handler) {\n _handlers.splice(_handlers.indexOf(handler), 1);\n },\n runWaterfall<T>(args: T, store?: Store) {\n return _handlers.reduce((acc, fn) => fn(acc, store), args);\n },\n async runWaterfallAsync<T>(args: T, store?: Store) {\n let result = args;\n\n for (const fn of _handlers) {\n result = await fn(result, store);\n }\n\n return result;\n },\n runSeries<T extends any[]>(...args: T) {\n return _handlers.map((fn) => fn(...args));\n },\n async runSeriesAsync<T extends any[]>(...args: T) {\n const result = [];\n\n for (const fn of _handlers) {\n result.push(await fn(...args));\n }\n\n return result;\n },\n runParallel<T extends any[]>(...args: T) {\n return Promise.all(\n _handlers.map((fn) => {\n return fn(...args);\n })\n );\n },\n };\n};\n","export const languageNativeNames = {\n ar: 'العربية',\n ca: 'Català',\n cs: 'Čeština',\n de: 'Deutsch',\n dk: 'Dansk',\n en: 'English',\n es: 'Español',\n eu: 'Euskara',\n fr: 'Français',\n gu: 'Gujarati',\n he: 'עברית',\n hu: 'Magyar',\n id: 'Indonesian',\n it: 'Italiano',\n ja: '日本語',\n ko: '한국어',\n ml: 'Malayalam',\n ms: 'Melayu',\n nl: 'Nederlands',\n no: 'Norwegian',\n pl: 'Polski',\n 'pt-BR': 'Português (Brasil)',\n pt: 'Português (Portugal)',\n ru: 'Русский',\n sk: 'Slovenčina',\n sv: 'Swedish',\n th: 'ไทย',\n tr: 'Türkçe',\n uk: 'Українська',\n vi: 'Tiếng Việt',\n 'zh-Hans': '中文 (简体)',\n zh: '中文 (繁體)',\n sa: 'संस्कृत',\n hi: 'हिन्दी',\n} as const;\n","import { ReducersMapObject } from '@reduxjs/toolkit';\nimport { darkTheme, lightTheme } from '@strapi/design-system';\nimport { MenuItem, StrapiAppSetting, StrapiAppSettingLink } from '@strapi/helper-plugin';\nimport invariant from 'invariant';\nimport isFunction from 'lodash/isFunction';\nimport merge from 'lodash/merge';\nimport pick from 'lodash/pick';\nimport { Helmet } from 'react-helmet';\nimport { BrowserRouter } from 'react-router-dom';\nimport { DefaultTheme } from 'styled-components';\n\nimport { App } from './App';\nimport Logo from './assets/images/logo-strapi-2022.svg';\nimport {\n INJECTION_ZONES,\n InjectionZoneBlock,\n InjectionZoneComponent,\n InjectionZoneContainer,\n InjectionZoneModule,\n InjectionZones,\n} from './components/InjectionZone';\nimport { Providers } from './components/Providers';\nimport { HOOKS } from './constants';\nimport { Components, Component } from './core/apis/Components';\nimport { CustomFields } from './core/apis/CustomFields';\nimport { Field, Fields } from './core/apis/Fields';\nimport { Middleware, Middlewares } from './core/apis/Middlewares';\nimport { Plugin, PluginConfig } from './core/apis/Plugin';\nimport { Reducers } from './core/apis/Reducers';\nimport { PreloadState, Store, configureStore } from './core/store/configure';\nimport { getBasename } from './core/utils/basename';\nimport { Handler, createHook } from './core/utils/createHook';\nimport { THEME_LOCAL_STORAGE_KEY, LANGUAGE_LOCAL_STORAGE_KEY, ThemeName } from './reducer';\nimport { languageNativeNames } from './translations/languageNativeNames';\n\nconst {\n INJECT_COLUMN_IN_TABLE,\n MUTATE_COLLECTION_TYPES_LINKS,\n MUTATE_EDIT_VIEW_LAYOUT,\n MUTATE_SINGLE_TYPES_LINKS,\n} = HOOKS;\n\ninterface StrapiAppConstructorArgs extends Partial<Pick<StrapiApp, 'appPlugins'>> {\n adminConfig?: {\n config?: StrapiApp['customConfigurations'];\n bootstrap?: StrapiApp['customBootstrapConfiguration'];\n };\n}\n\ninterface StrapiAppPlugin {\n bootstrap: (\n args: Pick<\n StrapiApp,\n | 'addSettingsLink'\n | 'addSettingsLinks'\n | 'getPlugin'\n | 'injectContentManagerComponent'\n | 'injectAdminComponent'\n | 'registerHook'\n >\n ) => void;\n register: (app: StrapiApp) => void;\n registerTrads: (args: {\n locales: string[];\n }) => Promise<{ data: Record<string, string>; locale: string }[]>;\n}\n\nclass StrapiApp {\n admin: {\n injectionZones: InjectionZones;\n };\n appPlugins: Record<string, StrapiAppPlugin>;\n configurations: {\n authLogo: string;\n head: { favicon: string };\n locales: string[];\n menuLogo: string;\n notifications: { releases: boolean };\n themes: { light: DefaultTheme; dark: DefaultTheme };\n translations: Record<string, Record<string, string>>;\n tutorials: boolean;\n };\n customBootstrapConfiguration: unknown;\n customConfigurations: {\n auth?: { logo: string };\n head?: { favicon: string };\n locales?: string[];\n menu?: { logo: string };\n notifications?: { releases: boolean };\n theme?: { light: DefaultTheme; dark: DefaultTheme };\n translations?: Record<string, unknown>;\n tutorials?: boolean;\n };\n customFields: CustomFields;\n hooksDict: Record<string, ReturnType<typeof createHook>>;\n library: {\n components: Components;\n fields: Fields;\n };\n menu: MenuItem[];\n middlewares: Middlewares;\n plugins: Record<string, Plugin>;\n reducers: Reducers;\n settings: Record<string, StrapiAppSetting>;\n translations: StrapiApp['configurations']['translations'];\n\n constructor({ adminConfig, appPlugins }: StrapiAppConstructorArgs = {}) {\n this.customConfigurations = adminConfig?.config ?? {};\n this.customBootstrapConfiguration = adminConfig?.bootstrap;\n this.configurations = {\n authLogo: Logo,\n head: { favicon: '' },\n locales: ['en'],\n menuLogo: Logo,\n notifications: { releases: true },\n themes: { light: lightTheme, dark: darkTheme },\n translations: {},\n tutorials: true,\n };\n this.appPlugins = appPlugins || {};\n this.library = {\n components: new Components(),\n fields: new Fields(),\n };\n this.middlewares = new Middlewares();\n this.plugins = {};\n this.reducers = new Reducers();\n this.translations = {};\n this.hooksDict = {};\n this.admin = {\n injectionZones: INJECTION_ZONES,\n };\n this.customFields = new CustomFields();\n this.menu = [];\n this.settings = {\n global: {\n id: 'global',\n intlLabel: {\n id: 'Settings.global',\n defaultMessage: 'Global Settings',\n },\n links: [],\n },\n };\n }\n\n addComponents = (components: Component | Component[]) => {\n if (Array.isArray(components)) {\n components.map((compo) => this.library.components.add(compo));\n } else {\n this.library.components.add(components);\n }\n };\n\n addCorePluginMenuLink = (link: MenuItem) => {\n const stringifiedLink = JSON.stringify(link);\n\n invariant(link.to, `link.to should be defined for ${stringifiedLink}`);\n invariant(\n typeof link.to === 'string',\n `Expected link.to to be a string instead received ${typeof link.to}`\n );\n invariant(\n ['/plugins/content-type-builder', '/plugins/upload'].includes(link.to),\n 'This method is not available for your plugin'\n );\n invariant(\n link.intlLabel?.id && link.intlLabel?.defaultMessage,\n `link.intlLabel.id & link.intlLabel.defaultMessage for ${stringifiedLink}`\n );\n\n this.menu.push(link);\n };\n\n addFields = (fields: Field | Field[]) => {\n if (Array.isArray(fields)) {\n fields.map((field) => this.library.fields.add(field));\n } else {\n this.library.fields.add(fields);\n }\n };\n\n addMenuLink = (link: MenuItem) => {\n const stringifiedLink = JSON.stringify(link);\n\n invariant(link.to, `link.to should be defined for ${stringifiedLink}`);\n invariant(\n typeof link.to === 'string',\n `Expected link.to to be a string instead received ${typeof link.to}`\n );\n invariant(\n link.intlLabel?.id && link.intlLabel?.defaultMessage,\n `link.intlLabel.id & link.intlLabel.defaultMessage for ${stringifiedLink}`\n );\n invariant(\n link.Component && typeof link.Component === 'function',\n `link.Component should be a valid React Component`\n );\n invariant(\n link.icon && typeof link.icon === 'function',\n `link.Icon should be a valid React Component`\n );\n\n this.menu.push(link);\n };\n\n addMiddlewares = (middlewares: Middleware[]) => {\n middlewares.forEach((middleware) => {\n this.middlewares.add(middleware);\n });\n };\n\n addReducers = (reducers: ReducersMapObject) => {\n Object.keys(reducers).forEach((reducerName) => {\n this.reducers.add(reducerName, reducers[reducerName]);\n });\n };\n\n addSettingsLink = (sectionId: keyof StrapiApp['settings'], link: StrapiAppSettingLink) => {\n invariant(this.settings[sectionId], 'The section does not exist');\n\n const stringifiedLink = JSON.stringify(link);\n\n invariant(link.id, `link.id should be defined for ${stringifiedLink}`);\n invariant(\n link.intlLabel?.id && link.intlLabel?.defaultMessage,\n `link.intlLabel.id & link.intlLabel.defaultMessage for ${stringifiedLink}`\n );\n invariant(link.to, `link.to should be defined for ${stringifiedLink}`);\n invariant(\n link.Component && typeof link.Component === 'function',\n `link.Component should be a valid React Component`\n );\n\n this.settings[sectionId].links.push(link);\n };\n\n addSettingsLinks = (sectionId: keyof StrapiApp['settings'], links: StrapiAppSettingLink[]) => {\n invariant(this.settings[sectionId], 'The section does not exist');\n invariant(Array.isArray(links), 'TypeError expected links to be an array');\n\n links.forEach((link) => {\n this.addSettingsLink(sectionId, link);\n });\n };\n\n async bootstrap() {\n Object.keys(this.appPlugins).forEach((plugin) => {\n const bootstrap = this.appPlugins[plugin].bootstrap;\n\n if (bootstrap) {\n bootstrap({\n addSettingsLink: this.addSettingsLink,\n addSettingsLinks: this.addSettingsLinks,\n getPlugin: this.getPlugin,\n injectContentManagerComponent: this.injectContentManagerComponent,\n injectAdminComponent: this.injectAdminComponent,\n registerHook: this.registerHook,\n });\n }\n });\n\n if (isFunction(this.customBootstrapConfiguration)) {\n this.customBootstrapConfiguration({\n addComponents: this.addComponents,\n addFields: this.addFields,\n addMenuLink: this.addMenuLink,\n addReducers: this.addReducers,\n addSettingsLink: this.addSettingsLink,\n addSettingsLinks: this.addSettingsLinks,\n getPlugin: this.getPlugin,\n injectContentManagerComponent: this.injectContentManagerComponent,\n injectAdminComponent: this.injectAdminComponent,\n registerHook: this.registerHook,\n });\n }\n }\n\n bootstrapAdmin = async () => {\n await this.createCustomConfigurations();\n\n this.createHook(INJECT_COLUMN_IN_TABLE);\n this.createHook(MUTATE_COLLECTION_TYPES_LINKS);\n this.createHook(MUTATE_SINGLE_TYPES_LINKS);\n this.createHook(MUTATE_EDIT_VIEW_LAYOUT);\n\n return Promise.resolve();\n };\n\n createCustomConfigurations = async () => {\n if (this.customConfigurations?.locales) {\n this.configurations.locales = [\n 'en',\n ...(this.customConfigurations.locales?.filter((loc) => loc !== 'en') || []),\n ];\n }\n\n if (this.customConfigurations?.auth?.logo) {\n this.configurations.authLogo = this.customConfigurations.auth.logo;\n }\n\n if (this.customConfigurations?.menu?.logo) {\n this.configurations.menuLogo = this.customConfigurations.menu.logo;\n }\n\n if (this.customConfigurations?.head?.favicon) {\n this.configurations.head.favicon = this.customConfigurations.head.favicon;\n }\n\n if (this.customConfigurations?.theme) {\n const darkTheme = this.customConfigurations.theme.dark;\n const lightTheme = this.customConfigurations.theme.light;\n\n if (!darkTheme && !lightTheme) {\n console.warn(\n `[deprecated] In future versions, Strapi will stop supporting this theme customization syntax. The theme configuration accepts a light and a dark key to customize each theme separately. See https://docs.strapi.io/developer-docs/latest/development/admin-customization.html#theme-extension.`\n );\n merge(this.configurations.themes.light, this.customConfigurations.theme);\n }\n\n if (lightTheme) merge(this.configurations.themes.light, lightTheme);\n\n if (darkTheme) merge(this.configurations.themes.dark, darkTheme);\n }\n\n if (this.customConfigurations?.notifications?.releases !== undefined) {\n this.configurations.notifications.releases = this.customConfigurations.notifications.releases;\n }\n\n if (this.customConfigurations?.tutorials !== undefined) {\n this.configurations.tutorials = this.customConfigurations.tutorials;\n }\n };\n\n createHook = (name: string) => {\n this.hooksDict[name] = createHook();\n };\n\n createSettingSection = (section: StrapiAppSetting, links: StrapiAppSettingLink[]) => {\n invariant(section.id, 'section.id should be defined');\n invariant(\n section.intlLabel?.id && section.intlLabel?.defaultMessage,\n 'section.intlLabel should be defined'\n );\n\n invariant(Array.isArray(links), 'TypeError expected links to be an array');\n invariant(this.settings[section.id] === undefined, 'A similar section already exists');\n\n this.settings[section.id] = { ...section, links: [] };\n\n links.forEach((link) => {\n this.addSettingsLink(section.id, link);\n });\n };\n\n createStore = (preloadedState?: PreloadState) => {\n const store = configureStore(\n preloadedState,\n this.middlewares.middlewares,\n this.reducers.reducers\n );\n\n return store as Store;\n };\n\n getAdminInjectedComponents = (\n moduleName: InjectionZoneModule,\n containerName: InjectionZoneContainer,\n blockName: InjectionZoneBlock\n ): InjectionZoneComponent[] => {\n try {\n // @ts-expect-error – we have a catch block so if you don't pass it correctly we still return an array.\n return this.admin.injectionZones[moduleName][containerName][blockName] || [];\n } catch (err) {\n console.error('Cannot get injected component', err);\n\n return [];\n }\n };\n\n getPlugin = (pluginId: PluginConfig['id']) => {\n return this.plugins[pluginId];\n };\n\n async initialize() {\n Object.keys(this.appPlugins).forEach((plugin) => {\n this.appPlugins[plugin].register(this);\n });\n }\n\n injectContentManagerComponent = <TContainerName extends keyof InjectionZones['contentManager']>(\n containerName: TContainerName,\n blockName: keyof InjectionZones['contentManager'][TContainerName],\n component: InjectionZoneComponent\n ) => {\n invariant(\n this.admin.injectionZones.contentManager[containerName]?.[blockName],\n `The ${containerName} ${String(blockName)} zone is not defined in the content manager`\n );\n invariant(component, 'A Component must be provided');\n\n // @ts-expect-error – we've alredy checked above that the block exists.\n this.admin.injectionZones.contentManager[containerName][blockName].push(component);\n };\n\n injectAdminComponent = <TContainerName extends keyof InjectionZones['admin']>(\n containerName: TContainerName,\n blockName: keyof InjectionZones['admin'][TContainerName],\n component: InjectionZoneComponent\n ) => {\n invariant(\n this.admin.injectionZones.admin[containerName]?.[blockName],\n `The ${containerName} ${String(blockName)} zone is not defined in the admin`\n );\n invariant(component, 'A Component must be provided');\n\n // @ts-expect-error – we've alredy checked above that the block exists.\n this.admin.injectionZones.admin[containerName][blockName].push(component);\n };\n\n /**\n * Load the admin translations\n * @returns {Object} The imported admin translations\n */\n async loadAdminTrads() {\n const arrayOfPromises = this.configurations.locales.map((locale) => {\n return import(`./translations/${locale}.json`)\n .then(({ default: data }) => {\n return { data, locale };\n })\n .catch(() => {\n return { data: null, locale };\n });\n });\n const adminLocales = await Promise.all(arrayOfPromises);\n\n const translations = adminLocales.reduce<{ [locale: string]: Record<string, string> }>(\n (acc, current) => {\n if (current.data) {\n acc[current.locale] = current.data;\n }\n\n return acc;\n },\n {}\n );\n\n return translations;\n }\n\n /**\n * Load the application's translations and merged the custom translations\n * with the default ones.\n *\n */\n async loadTrads() {\n const adminTranslations = await this.loadAdminTrads();\n\n const arrayOfPromises = Object.keys(this.appPlugins)\n .map((plugin) => {\n const registerTrads = this.appPlugins[plugin].registerTrads;\n\n if (registerTrads) {\n return registerTrads({ locales: this.configurations.locales });\n }\n\n return null;\n })\n .filter((a) => a);\n\n type Translation = Awaited<ReturnType<StrapiAppPlugin['registerTrads']>>[number];\n\n const pluginsTrads = (await Promise.all(arrayOfPromises)) as Array<Translation[]>;\n const mergedTrads = pluginsTrads.reduce<{ [locale: string]: Translation['data'] }>(\n (acc, currentPluginTrads) => {\n const pluginTrads = currentPluginTrads.reduce<{ [locale: string]: Translation['data'] }>(\n (acc1, current) => {\n acc1[current.locale] = current.data;\n\n return acc1;\n },\n {}\n );\n\n Object.keys(pluginTrads).forEach((locale) => {\n acc[locale] = { ...acc[locale], ...pluginTrads[locale] };\n });\n\n return acc;\n },\n {}\n );\n\n const translations = this.configurations.locales.reduce<{\n [locale: string]: Translation['data'];\n }>((acc, current) => {\n acc[current] = {\n ...adminTranslations[current],\n ...(mergedTrads[current] || {}),\n ...(this.customConfigurations?.translations?.[current] ?? {}),\n };\n\n return acc;\n }, {});\n\n this.configurations.translations = translations;\n\n return Promise.resolve();\n }\n\n registerHook = (name: string, fn: Handler) => {\n invariant(\n this.hooksDict[name],\n `The hook ${name} is not defined. You are trying to register a hook that does not exist in the application.`\n );\n this.hooksDict[name].register(fn);\n };\n\n registerPlugin = (pluginConf: PluginConfig) => {\n const plugin = new Plugin(pluginConf);\n\n this.plugins[plugin.pluginId] = plugin;\n };\n\n runHookSeries = (name: string, asynchronous = false) =>\n asynchronous ? this.hooksDict[name].runSeriesAsync() : this.hooksDict[name].runSeries();\n\n runHookWaterfall = <T,>(name: string, initialValue: T, asynchronous = false, store?: Store) => {\n return asynchronous\n ? this.hooksDict[name].runWaterfallAsync(initialValue, store)\n : this.hooksDict[name].runWaterfall(initialValue, store);\n };\n\n runHookParallel = (name: string) => this.hooksDict[name].runParallel();\n\n render() {\n const localeNames = pick(languageNativeNames, this.configurations.locales || []);\n const locale = (localStorage.getItem(LANGUAGE_LOCAL_STORAGE_KEY) ||\n 'en') as keyof typeof localeNames;\n\n const store = this.createStore({\n admin_app: {\n permissions: {},\n theme: {\n availableThemes: [],\n currentTheme: (localStorage.getItem(THEME_LOCAL_STORAGE_KEY) || 'system') as ThemeName,\n },\n language: {\n locale: localeNames[locale] ? locale : 'en',\n localeNames,\n },\n },\n });\n\n const {\n components: { components },\n fields: { fields },\n } = this.library;\n\n return (\n <BrowserRouter basename={getBasename()}>\n <Providers\n components={components}\n fields={fields}\n customFields={this.customFields}\n localeNames={localeNames}\n getAdminInjectedComponents={this.getAdminInjectedComponents}\n getPlugin={this.getPlugin}\n messages={this.configurations.translations}\n menu={this.menu}\n plugins={this.plugins}\n runHookParallel={this.runHookParallel}\n runHookWaterfall={(name, initialValue, async = false) => {\n return this.runHookWaterfall(name, initialValue, async, store);\n }}\n // @ts-expect-error – context issue. TODO: fix this.\n runHookSeries={this.runHookSeries}\n themes={this.configurations.themes}\n settings={this.settings}\n store={store}\n >\n <Helmet\n htmlAttributes={{ lang: localStorage.getItem(LANGUAGE_LOCAL_STORAGE_KEY) || 'en' }}\n />\n <App\n authLogo={this.configurations.authLogo}\n menuLogo={this.configurations.menuLogo}\n showTutorials={this.configurations.tutorials}\n showReleaseNotification={this.configurations.notifications.releases}\n />\n </Providers>\n </BrowserRouter>\n );\n }\n}\n\nexport { StrapiApp, StrapiAppConstructorArgs };\n","/* eslint-disable no-undef */\nimport { getFetchClient } from '@strapi/helper-plugin';\nimport { createRoot } from 'react-dom/client';\n\nimport { StrapiApp, StrapiAppConstructorArgs } from './StrapiApp';\n\nimport type { FeaturesService } from '@strapi/types';\n\ninterface RenderAdminArgs {\n customisations: StrapiAppConstructorArgs['adminConfig'];\n plugins: StrapiAppConstructorArgs['appPlugins'];\n features?: FeaturesService['config'];\n}\n\nconst renderAdmin = async (\n mountNode: HTMLElement | null,\n { plugins, customisations, features }: RenderAdminArgs\n) => {\n if (!mountNode) {\n throw new Error('[@strapi/admin]: Could not find the root element to mount the admin app');\n }\n\n window.strapi = {\n /**\n * This ENV variable is passed from the strapi instance, by default no url is set\n * in the config and therefore the instance returns you an empty string so URLs are relative.\n *\n * To ensure that the backendURL is always set, we use the window.location.origin as a fallback.\n */\n backendURL: process.env.STRAPI_ADMIN_BACKEND_URL || window.location.origin,\n isEE: false,\n telemetryDisabled: process.env.STRAPI_TELEMETRY_DISABLED === 'true' ? true : false,\n future: {\n isEnabled: (name: keyof FeaturesService['config']) => {\n return features?.future?.[name] === true;\n },\n },\n // @ts-expect-error – there's pollution from the global scope of Node.\n features: {\n SSO: 'sso',\n AUDIT_LOGS: 'audit-logs',\n REVIEW_WORKFLOWS: 'review-workflows',\n /**\n * If we don't get the license then we know it's not EE\n * so no feature is enabled.\n */\n isEnabled: () => false,\n },\n projectType: 'Community',\n flags: {\n nps: false,\n promoteEE: true,\n },\n };\n\n const { get } = getFetchClient();\n\n interface ProjectType extends Pick<Window['strapi'], 'flags'> {\n isEE: boolean;\n features: {\n name: string;\n }[];\n }\n\n try {\n const {\n data: {\n data: { isEE, features, flags },\n },\n } = await get<{ data: ProjectType }>('/admin/project-type');\n\n window.strapi.isEE = isEE;\n window.strapi.flags = flags;\n window.strapi.features = {\n ...window.strapi.features,\n isEnabled: (featureName) => features.some((feature) => feature.name === featureName),\n };\n window.strapi.projectType = isEE ? 'Enterprise' : 'Community';\n } catch (err) {\n /**\n * If this fails, we simply don't activate any EE features.\n * Should we warn clearer in the UI?\n */\n console.error(err);\n }\n\n const app = new StrapiApp({\n adminConfig: customisations,\n appPlugins: plugins,\n });\n\n await app.bootstrapAdmin();\n await app.initialize();\n await app.bootstrap();\n await app.loadTrads();\n\n createRoot(mountNode).render(app.render());\n\n if (\n typeof module !== 'undefined' &&\n module &&\n 'hot' in module &&\n typeof module.hot === 'object' &&\n module.hot !== null &&\n 'accept' in module.hot &&\n typeof module.hot.accept === 'function'\n ) {\n module.hot.accept();\n }\n\n if (typeof import.meta.hot?.accept === 'function') {\n import.meta.hot.accept();\n }\n};\n\nexport { renderAdmin };\nexport type { RenderAdminArgs };\n","import { getYupInnerErrors } from '@strapi/helper-plugin';\nimport { Schema, Entity as StrapiEntity, Attribute } from '@strapi/types';\nimport { ValidationError } from 'yup';\n\nimport { createYupSchema } from '../content-manager/utils/validation';\n\nexport interface Entity {\n id: StrapiEntity.ID;\n createdAt: string;\n updatedAt: string;\n}\n\ninterface ValidateOptions {\n contentType: Schema.ContentType;\n components: {\n [key: Schema.Component['uid']]: Schema.Component;\n };\n isCreatingEntry?: boolean;\n}\n\n/**\n * @alpha - This hook is not stable and likely to change. Use at your own risk.\n */\nexport function useDocument() {\n /**\n * @TODO: Ideally, we should get the contentType and components schemas from the redux store\n * But at the moment the store is populated only inside the content-manager by useContentManagerInitData\n * So, we need to receive the content type schema and the components to use the function\n */\n const validate = (\n entry: Entity & { [key: string]: Attribute.Any },\n { contentType, components, isCreatingEntry = false }: ValidateOptions\n ) => {\n const schema = createYupSchema(\n // @ts-expect-error - @TODO: createYupSchema types need to be revisited\n contentType,\n { components },\n { isCreatingEntry, isDraft: false, isJSONTestDisabled: true }\n );\n\n try {\n schema.validateSync(entry, { abortEarly: false });\n\n return {\n errors: {},\n };\n } catch (error) {\n if (error instanceof ValidationError) {\n return {\n errors: getYupInnerErrors(error),\n };\n }\n\n throw error;\n }\n };\n\n return { validate };\n}\n","import * as React from 'react';\n\nimport { useGetLicenseLimitsQuery } from '../../../../admin/src/services/admin';\nimport { GetLicenseLimitInformation } from '../../../../shared/contracts/admin';\n\ninterface UseLicenseLimitsArgs {\n enabled?: boolean;\n}\n\nfunction useLicenseLimits({ enabled }: UseLicenseLimitsArgs = { enabled: true }) {\n const { data, isError, isLoading } = useGetLicenseLimitsQuery(undefined, {\n skip: !enabled,\n });\n\n type FeatureNames = GetLicenseLimitInformation.Response['data']['features'][number]['name'];\n\n type GetFeatureType = <T>(name: FeatureNames) => Record<string, T> | undefined;\n\n const getFeature = React.useCallback<GetFeatureType>(\n (name) => {\n const feature = data?.data?.features.find((feature) => feature.name === name);\n\n if (feature && 'options' in feature) {\n return feature.options;\n } else {\n return {};\n }\n },\n [data]\n );\n\n return { license: data?.data, getFeature, isError, isLoading };\n}\n\nexport { useLicenseLimits };\nexport type { UseLicenseLimitsArgs };\n"],"names":["Provider","reducer","get","result","token","createContext","auth","Wrapper","name","FieldActionWrapper","PasswordInput","Link","FieldWrapper","Form","Grid","Login","LoginCE","Component","LinkButton","Option","App","initialState","currentStep","GuidedTourProviderComponent","options","permissions","SET_PERMISSIONS","action","FieldContainer","DragButton","TypographyMaxWidth","item","size","List","data","shouldDisplayRelationLink","pick","search","MUTATE_COLLECTION_TYPES_LINKS","MUTATE_SINGLE_TYPES_LINKS","state","uid","useContentTypeLayout","useQuery","React","CustomIconButton","clientOffset","Number","Boolean","Date","DynamicZone","value","HeaderContainer","ModalForm","to","GET_DATA","GET_DATA_SUCCEEDED","RESET_PROPS","getData","getDataSucceeded","resetProps","queryClient","componentsDataStructure","contentTypeDataStructure","source","init","AccordionContent","isNaN","Editor","isText","node","SlateElement","isListNode","format","modifiers","block","editor","ExpandWrapper","EditorLayout","insertText","LabelAction","ExpandButton","Image","GenericInput","RepeatableComponent","ActionsFlex","Preview","DSAccordionContent","componentUid","allowedFields","icon","mainValue","componentSchema","errorsTrads","findAllAndReplace","browserState","serverState","acc","shouldCheckErrors","modifiedData","initialData","Root","Information","MUTATE_EDIT_VIEW_LAYOUT","setLayout","PropTypes","fieldToEdit","BoldChunk","HelperPluginTable","Loader","validationErrors","rows","FilterIcon","MenuTrigger","isOpen","INJECT_COLUMN_IN_TABLE","pagination","query","metadatas","NoPermissions","ReactRouterLink","rawContentTypeLayout","rawComponentsLayouts","props","NoPermissionsComponent","appReducer","cmAppReducer","listViewReducer","rbacManagerReducer","editViewReducer","crudReducer","Logo","darkTheme","lightTheme","configureStore","features","feature"],"mappings":"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"}