@strapi/admin 4.19.1 → 4.20.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 (245) hide show
  1. package/dist/_chunks/{AdminSeatInfo-3pW16BUI.js → AdminSeatInfo-FYllM9Wr.js} +12 -13
  2. package/dist/_chunks/{AdminSeatInfo-3pW16BUI.js.map → AdminSeatInfo-FYllM9Wr.js.map} +1 -1
  3. package/dist/_chunks/{AdminSeatInfo-4jaGP5uF.mjs → AdminSeatInfo-jxPuC7sd.mjs} +11 -12
  4. package/dist/_chunks/{AdminSeatInfo-4jaGP5uF.mjs.map → AdminSeatInfo-jxPuC7sd.mjs.map} +1 -1
  5. package/dist/_chunks/{AuthenticatedApp-OOcwZ20K.mjs → AuthenticatedApp-KbXbG60H.mjs} +34 -28
  6. package/dist/_chunks/AuthenticatedApp-KbXbG60H.mjs.map +1 -0
  7. package/dist/_chunks/{AuthenticatedApp-_KGmPDjE.js → AuthenticatedApp-yPEMtCNB.js} +33 -27
  8. package/dist/_chunks/AuthenticatedApp-yPEMtCNB.js.map +1 -0
  9. package/dist/_chunks/{CreateActionEE-rrM1YiMQ.mjs → CreateActionEE-QgiUGwZe.mjs} +3 -4
  10. package/dist/_chunks/{CreateActionEE-rrM1YiMQ.mjs.map → CreateActionEE-QgiUGwZe.mjs.map} +1 -1
  11. package/dist/_chunks/{CreateActionEE-64QW6bR-.js → CreateActionEE-vQMfF4tL.js} +4 -5
  12. package/dist/_chunks/{CreateActionEE-64QW6bR-.js.map → CreateActionEE-vQMfF4tL.js.map} +1 -1
  13. package/dist/_chunks/{CreatePage-zr0KxeR0.mjs → CreatePage-CZmh0ryM.mjs} +16 -15
  14. package/dist/_chunks/CreatePage-CZmh0ryM.mjs.map +1 -0
  15. package/dist/_chunks/{CreatePage-P2b0bih-.mjs → CreatePage-WBwBU4qA.mjs} +6 -6
  16. package/dist/_chunks/{CreatePage-P2b0bih-.mjs.map → CreatePage-WBwBU4qA.mjs.map} +1 -1
  17. package/dist/_chunks/{CreatePage-3qIqLFap.js → CreatePage-a9C9ijzW.js} +17 -16
  18. package/dist/_chunks/CreatePage-a9C9ijzW.js.map +1 -0
  19. package/dist/_chunks/{CreatePage-QouT1Un0.mjs → CreatePage-bTc_jTC_.mjs} +3 -3
  20. package/dist/_chunks/{CreatePage-QouT1Un0.mjs.map → CreatePage-bTc_jTC_.mjs.map} +1 -1
  21. package/dist/_chunks/{CreatePage-mpdYi-qx.js → CreatePage-ubvG-TO4.js} +3 -3
  22. package/dist/_chunks/{CreatePage-mpdYi-qx.js.map → CreatePage-ubvG-TO4.js.map} +1 -1
  23. package/dist/_chunks/{CreatePage-DxDlEWAb.js → CreatePage-zotBOFnE.js} +6 -6
  24. package/dist/_chunks/{CreatePage-DxDlEWAb.js.map → CreatePage-zotBOFnE.js.map} +1 -1
  25. package/dist/_chunks/{CreateView-xzbb4nEi.js → CreateView-5YRPBxNm.js} +6 -6
  26. package/dist/_chunks/{CreateView-xzbb4nEi.js.map → CreateView-5YRPBxNm.js.map} +1 -1
  27. package/dist/_chunks/{CreateView-qosv6y7y.mjs → CreateView-DG2Xi_RG.mjs} +6 -6
  28. package/dist/_chunks/{CreateView-qosv6y7y.mjs.map → CreateView-DG2Xi_RG.mjs.map} +1 -1
  29. package/dist/_chunks/{CreateView-l7nt52UO.js → CreateView-dxLwgfdk.js} +6 -6
  30. package/dist/_chunks/{CreateView-l7nt52UO.js.map → CreateView-dxLwgfdk.js.map} +1 -1
  31. package/dist/_chunks/{CreateView-d6LuxjaY.mjs → CreateView-fWvg33IM.mjs} +6 -6
  32. package/dist/_chunks/{CreateView-d6LuxjaY.mjs.map → CreateView-fWvg33IM.mjs.map} +1 -1
  33. package/dist/_chunks/{EditPage-HRiJwAZB.mjs → EditPage-VyQhkl1U.mjs} +4 -4
  34. package/dist/_chunks/{EditPage-HRiJwAZB.mjs.map → EditPage-VyQhkl1U.mjs.map} +1 -1
  35. package/dist/_chunks/{EditPage-w4dwqlZh.js → EditPage-ZYqGLNGU.js} +6 -6
  36. package/dist/_chunks/{EditPage-w4dwqlZh.js.map → EditPage-ZYqGLNGU.js.map} +1 -1
  37. package/dist/_chunks/{EditPage-ddwlh5ln.js → EditPage-ZamBKJBm.js} +37 -36
  38. package/dist/_chunks/EditPage-ZamBKJBm.js.map +1 -0
  39. package/dist/_chunks/{EditPage-mCH3IDT4.mjs → EditPage-bquHSnU-.mjs} +6 -6
  40. package/dist/_chunks/{EditPage-mCH3IDT4.mjs.map → EditPage-bquHSnU-.mjs.map} +1 -1
  41. package/dist/_chunks/{EditPage-C9sLNQH8.mjs → EditPage-eZBoqRe8.mjs} +6 -6
  42. package/dist/_chunks/{EditPage-C9sLNQH8.mjs.map → EditPage-eZBoqRe8.mjs.map} +1 -1
  43. package/dist/_chunks/{EditPage-bZlMjB6A.js → EditPage-ts9lW8Jp.js} +4 -4
  44. package/dist/_chunks/{EditPage-bZlMjB6A.js.map → EditPage-ts9lW8Jp.js.map} +1 -1
  45. package/dist/_chunks/{EditPage-L2y_PJ4r.mjs → EditPage-v9qAJHhL.mjs} +36 -35
  46. package/dist/_chunks/EditPage-v9qAJHhL.mjs.map +1 -0
  47. package/dist/_chunks/{EditPage-pDaXcwr2.js → EditPage-zBNog_Do.js} +6 -6
  48. package/dist/_chunks/{EditPage-pDaXcwr2.js.map → EditPage-zBNog_Do.js.map} +1 -1
  49. package/dist/_chunks/{EditView-cWBJXUz7.mjs → EditView-H9TXdZxo.mjs} +4 -4
  50. package/dist/_chunks/{EditView-cWBJXUz7.mjs.map → EditView-H9TXdZxo.mjs.map} +1 -1
  51. package/dist/_chunks/{EditView-ItMzYqdS.js → EditView-RTA0igao.js} +4 -4
  52. package/dist/_chunks/{EditView-ItMzYqdS.js.map → EditView-RTA0igao.js.map} +1 -1
  53. package/dist/_chunks/{EditViewPage-LcgWsiF-.js → EditViewPage-1FpxFWQ-.js} +4 -4
  54. package/dist/_chunks/{EditViewPage-LcgWsiF-.js.map → EditViewPage-1FpxFWQ-.js.map} +1 -1
  55. package/dist/_chunks/{EditViewPage-n1MMkiJv.mjs → EditViewPage-M0xVcnNp.mjs} +4 -4
  56. package/dist/_chunks/{EditViewPage-n1MMkiJv.mjs.map → EditViewPage-M0xVcnNp.mjs.map} +1 -1
  57. package/dist/_chunks/{EventsTable-KCZ9Pb4n.mjs → EventsTable--um8UljY.mjs} +6 -6
  58. package/dist/_chunks/{EventsTable-KCZ9Pb4n.mjs.map → EventsTable--um8UljY.mjs.map} +1 -1
  59. package/dist/_chunks/{EventsTable-CfFE47U7.js → EventsTable-mrhO0K1Q.js} +6 -6
  60. package/dist/_chunks/{EventsTable-CfFE47U7.js.map → EventsTable-mrhO0K1Q.js.map} +1 -1
  61. package/dist/_chunks/{HomePage-cqeSxd_O.js → HomePage-7Ge6tK7b.js} +5 -5
  62. package/dist/_chunks/{HomePage-cqeSxd_O.js.map → HomePage-7Ge6tK7b.js.map} +1 -1
  63. package/dist/_chunks/{HomePage-kPtIRyQz.js → HomePage-HmF7GGfM.js} +6 -7
  64. package/dist/_chunks/{HomePage-kPtIRyQz.js.map → HomePage-HmF7GGfM.js.map} +1 -1
  65. package/dist/_chunks/{HomePage-aKSRvReY.mjs → HomePage-qtTyGTFw.mjs} +6 -7
  66. package/dist/_chunks/{HomePage-aKSRvReY.mjs.map → HomePage-qtTyGTFw.mjs.map} +1 -1
  67. package/dist/_chunks/{HomePage-GUFRYUDo.mjs → HomePage-rVmtVStB.mjs} +5 -5
  68. package/dist/_chunks/{HomePage-GUFRYUDo.mjs.map → HomePage-rVmtVStB.mjs.map} +1 -1
  69. package/dist/_chunks/{InformationBoxEE-IPW31ejf.mjs → InformationBoxEE-0hRrbMIL.mjs} +3 -4
  70. package/dist/_chunks/{InformationBoxEE-IPW31ejf.mjs.map → InformationBoxEE-0hRrbMIL.mjs.map} +1 -1
  71. package/dist/_chunks/{InformationBoxEE-mYmnrztj.js → InformationBoxEE-4etf9EMS.js} +4 -5
  72. package/dist/_chunks/{InformationBoxEE-mYmnrztj.js.map → InformationBoxEE-4etf9EMS.js.map} +1 -1
  73. package/dist/_chunks/{InstalledPluginsPage-2cTbV33R.mjs → InstalledPluginsPage--dfQ96ij.mjs} +3 -3
  74. package/dist/_chunks/{InstalledPluginsPage-2cTbV33R.mjs.map → InstalledPluginsPage--dfQ96ij.mjs.map} +1 -1
  75. package/dist/_chunks/{InstalledPluginsPage-cUAheVLh.js → InstalledPluginsPage-p94azL6s.js} +3 -3
  76. package/dist/_chunks/{InstalledPluginsPage-cUAheVLh.js.map → InstalledPluginsPage-p94azL6s.js.map} +1 -1
  77. package/dist/_chunks/{Layout-6dPmxIO4.js → Layout-bevQq1Q7.js} +2 -2
  78. package/dist/_chunks/{Layout-6dPmxIO4.js.map → Layout-bevQq1Q7.js.map} +1 -1
  79. package/dist/_chunks/{Layout-eB0Hstae.mjs → Layout-v8FJBzTa.mjs} +2 -2
  80. package/dist/_chunks/{Layout-eB0Hstae.mjs.map → Layout-v8FJBzTa.mjs.map} +1 -1
  81. package/dist/_chunks/{ListPage-gKDK8dXO.js → ListPage--BFNFixg.js} +4 -4
  82. package/dist/_chunks/{ListPage-gKDK8dXO.js.map → ListPage--BFNFixg.js.map} +1 -1
  83. package/dist/_chunks/{ListPage-HXbAJz5v.js → ListPage-2o3BsCCK.js} +8 -8
  84. package/dist/_chunks/{ListPage-HXbAJz5v.js.map → ListPage-2o3BsCCK.js.map} +1 -1
  85. package/dist/_chunks/{ListPage-rv-tiMI5.mjs → ListPage-3pk58RvL.mjs} +2 -2
  86. package/dist/_chunks/{ListPage-rv-tiMI5.mjs.map → ListPage-3pk58RvL.mjs.map} +1 -1
  87. package/dist/_chunks/{ListPage-YBXiLY6m.js → ListPage-3zXBK2Cg.js} +3 -3
  88. package/dist/_chunks/{ListPage-YBXiLY6m.js.map → ListPage-3zXBK2Cg.js.map} +1 -1
  89. package/dist/_chunks/{ListPage-lAqdYOW4.mjs → ListPage-4MVat-6x.mjs} +6 -7
  90. package/dist/_chunks/{ListPage-lAqdYOW4.mjs.map → ListPage-4MVat-6x.mjs.map} +1 -1
  91. package/dist/_chunks/{ListPage-8u5VLpym.mjs → ListPage-FcoGG60Q.mjs} +7 -8
  92. package/dist/_chunks/{ListPage-8u5VLpym.mjs.map → ListPage-FcoGG60Q.mjs.map} +1 -1
  93. package/dist/_chunks/{ListPage-w4_W3DGA.js → ListPage-IBRCTTxF.js} +2 -2
  94. package/dist/_chunks/{ListPage-w4_W3DGA.js.map → ListPage-IBRCTTxF.js.map} +1 -1
  95. package/dist/_chunks/{ListPage-E6L7u2g3.mjs → ListPage-Ktqb_Fnm.mjs} +3 -3
  96. package/dist/_chunks/{ListPage-E6L7u2g3.mjs.map → ListPage-Ktqb_Fnm.mjs.map} +1 -1
  97. package/dist/_chunks/{ListPage-R8H7Ngrl.js → ListPage-bEzkONf2.js} +7 -8
  98. package/dist/_chunks/{ListPage-R8H7Ngrl.js.map → ListPage-bEzkONf2.js.map} +1 -1
  99. package/dist/_chunks/{ListPage-Ns-5NDDI.mjs → ListPage-f9WPMzD_.mjs} +8 -8
  100. package/dist/_chunks/{ListPage-Ns-5NDDI.mjs.map → ListPage-f9WPMzD_.mjs.map} +1 -1
  101. package/dist/_chunks/{ListPage-P_t84wt3.js → ListPage-kL4w2DqG.js} +7 -8
  102. package/dist/_chunks/{ListPage-P_t84wt3.js.map → ListPage-kL4w2DqG.js.map} +1 -1
  103. package/dist/_chunks/{ListPage-KeKJ2tNP.mjs → ListPage-pV5BXOz4.mjs} +4 -4
  104. package/dist/_chunks/{ListPage-KeKJ2tNP.mjs.map → ListPage-pV5BXOz4.mjs.map} +1 -1
  105. package/dist/_chunks/{ListView-LSSr9m14.js → ListView-A1nKrQn4.js} +3 -3
  106. package/dist/_chunks/{ListView-LSSr9m14.js.map → ListView-A1nKrQn4.js.map} +1 -1
  107. package/dist/_chunks/{ListView-3xV18_1L.js → ListView-NluyrGcC.js} +3 -3
  108. package/dist/_chunks/{ListView-3xV18_1L.js.map → ListView-NluyrGcC.js.map} +1 -1
  109. package/dist/_chunks/{ListView-U0M-KcCy.mjs → ListView-rLjOwHmg.mjs} +3 -3
  110. package/dist/_chunks/{ListView-U0M-KcCy.mjs.map → ListView-rLjOwHmg.mjs.map} +1 -1
  111. package/dist/_chunks/{ListView-J6uIF3bq.mjs → ListView-ykCnucRL.mjs} +3 -3
  112. package/dist/_chunks/{ListView-J6uIF3bq.mjs.map → ListView-ykCnucRL.mjs.map} +1 -1
  113. package/dist/_chunks/{Login-Vr4FnBhc.js → Login-7WAjQzlh.js} +2 -2
  114. package/dist/_chunks/{Login-Vr4FnBhc.js.map → Login-7WAjQzlh.js.map} +1 -1
  115. package/dist/_chunks/{Login-nkiZWDmW.mjs → Login-LkMgFwj7.mjs} +2 -2
  116. package/dist/_chunks/{Login-nkiZWDmW.mjs.map → Login-LkMgFwj7.mjs.map} +1 -1
  117. package/dist/_chunks/{MagicLinkEE-spIe8hzG.mjs → MagicLinkEE-CzANDg8L.mjs} +4 -4
  118. package/dist/_chunks/{MagicLinkEE-spIe8hzG.mjs.map → MagicLinkEE-CzANDg8L.mjs.map} +1 -1
  119. package/dist/_chunks/{MagicLinkEE-xrfDA1kO.js → MagicLinkEE-iLZGq6sV.js} +4 -4
  120. package/dist/_chunks/{MagicLinkEE-xrfDA1kO.js.map → MagicLinkEE-iLZGq6sV.js.map} +1 -1
  121. package/dist/_chunks/{MarketplacePage-s3q3AP3I.mjs → MarketplacePage-0PF5qCum.mjs} +3 -3
  122. package/dist/_chunks/{MarketplacePage-s3q3AP3I.mjs.map → MarketplacePage-0PF5qCum.mjs.map} +1 -1
  123. package/dist/_chunks/{MarketplacePage-b_VNcY-F.js → MarketplacePage-6w_qC2IL.js} +3 -3
  124. package/dist/_chunks/{MarketplacePage-b_VNcY-F.js.map → MarketplacePage-6w_qC2IL.js.map} +1 -1
  125. package/dist/_chunks/{Permissions-peMqKbT5.mjs → Permissions-02K1nkv5.mjs} +2 -2
  126. package/dist/_chunks/{Permissions-peMqKbT5.mjs.map → Permissions-02K1nkv5.mjs.map} +1 -1
  127. package/dist/_chunks/{Permissions-wIZL6N1O.js → Permissions-CSvtoBMk.js} +2 -2
  128. package/dist/_chunks/{Permissions-wIZL6N1O.js.map → Permissions-CSvtoBMk.js.map} +1 -1
  129. package/dist/_chunks/{ProfilePage-3plHfNlq.js → ProfilePage-fBmlvTVt.js} +3 -3
  130. package/dist/_chunks/{ProfilePage-3plHfNlq.js.map → ProfilePage-fBmlvTVt.js.map} +1 -1
  131. package/dist/_chunks/{ProfilePage-qL4I2aww.mjs → ProfilePage-lLKkzUCW.mjs} +3 -3
  132. package/dist/_chunks/{ProfilePage-qL4I2aww.mjs.map → ProfilePage-lLKkzUCW.mjs.map} +1 -1
  133. package/dist/_chunks/{ReviewWorkflowsColumn-kbK7yRnx.mjs → ReviewWorkflowsColumn-0SrDLeVT.mjs} +2 -2
  134. package/dist/_chunks/{ReviewWorkflowsColumn-kbK7yRnx.mjs.map → ReviewWorkflowsColumn-0SrDLeVT.mjs.map} +1 -1
  135. package/dist/_chunks/{ReviewWorkflowsColumn-z1r1fj49.js → ReviewWorkflowsColumn-FblPzVJS.js} +2 -2
  136. package/dist/_chunks/{ReviewWorkflowsColumn-z1r1fj49.js.map → ReviewWorkflowsColumn-FblPzVJS.js.map} +1 -1
  137. package/dist/_chunks/{SelectRoles-waaq1SaU.js → SelectRoles--Hkx-duw.js} +3 -3
  138. package/dist/_chunks/{SelectRoles-waaq1SaU.js.map → SelectRoles--Hkx-duw.js.map} +1 -1
  139. package/dist/_chunks/{SelectRoles-KSuBIUs4.mjs → SelectRoles-A7KkrB4L.mjs} +3 -3
  140. package/dist/_chunks/{SelectRoles-KSuBIUs4.mjs.map → SelectRoles-A7KkrB4L.mjs.map} +1 -1
  141. package/dist/_chunks/{SettingsPage-sqyzPjHX.js → SettingsPage-7Rs7LOuF.js} +21 -21
  142. package/dist/_chunks/{SettingsPage-sqyzPjHX.js.map → SettingsPage-7Rs7LOuF.js.map} +1 -1
  143. package/dist/_chunks/{SettingsPage-GEaBCr73.mjs → SettingsPage-vOgSvtVD.mjs} +21 -21
  144. package/dist/_chunks/{SettingsPage-GEaBCr73.mjs.map → SettingsPage-vOgSvtVD.mjs.map} +1 -1
  145. package/dist/_chunks/{SingleSignOnPage-6cFnvgGj.mjs → SingleSignOnPage-0BBoDuiC.mjs} +3 -3
  146. package/dist/_chunks/{SingleSignOnPage-6cFnvgGj.mjs.map → SingleSignOnPage-0BBoDuiC.mjs.map} +1 -1
  147. package/dist/_chunks/{SingleSignOnPage-QWPRjbyo.js → SingleSignOnPage-tQgIX1-Y.js} +3 -3
  148. package/dist/_chunks/{SingleSignOnPage-QWPRjbyo.js.map → SingleSignOnPage-tQgIX1-Y.js.map} +1 -1
  149. package/dist/_chunks/{TokenTypeSelect-lClyXQM0.js → TokenTypeSelect-VTcmGJ3T.js} +2 -2
  150. package/dist/_chunks/{TokenTypeSelect-lClyXQM0.js.map → TokenTypeSelect-VTcmGJ3T.js.map} +1 -1
  151. package/dist/_chunks/{TokenTypeSelect-MUt0C4cT.mjs → TokenTypeSelect-f0dPl6bF.mjs} +2 -2
  152. package/dist/_chunks/{TokenTypeSelect-MUt0C4cT.mjs.map → TokenTypeSelect-f0dPl6bF.mjs.map} +1 -1
  153. package/dist/_chunks/{apiTokens-lRmTpFea.mjs → apiTokens-jiAtcOPK.mjs} +2 -2
  154. package/dist/_chunks/{apiTokens-lRmTpFea.mjs.map → apiTokens-jiAtcOPK.mjs.map} +1 -1
  155. package/dist/_chunks/{apiTokens-2wCnOsPU.js → apiTokens-lNhK6Eyr.js} +2 -2
  156. package/dist/_chunks/{apiTokens-2wCnOsPU.js.map → apiTokens-lNhK6Eyr.js.map} +1 -1
  157. package/dist/_chunks/{constants-5YB6pnhW.js → constants-2_a_PrR3.js} +4 -4
  158. package/dist/_chunks/{constants-5YB6pnhW.js.map → constants-2_a_PrR3.js.map} +1 -1
  159. package/dist/_chunks/{constants-dj1-_FX7.mjs → constants-Nzx-HYzd.mjs} +2 -2
  160. package/dist/_chunks/{constants-dj1-_FX7.mjs.map → constants-Nzx-HYzd.mjs.map} +1 -1
  161. package/dist/_chunks/{constants-2xhze4EW.js → constants-VeXFoE6h.js} +6 -6
  162. package/dist/_chunks/{constants-2xhze4EW.js.map → constants-VeXFoE6h.js.map} +1 -1
  163. package/dist/_chunks/{constants-Nt1Jcadb.js → constants-Z-tu-qfL.js} +2 -2
  164. package/dist/_chunks/{constants-Nt1Jcadb.js.map → constants-Z-tu-qfL.js.map} +1 -1
  165. package/dist/_chunks/{constants-eKDRAcnv.js → constants-_KHV_ADp.js} +2 -2
  166. package/dist/_chunks/{constants-eKDRAcnv.js.map → constants-_KHV_ADp.js.map} +1 -1
  167. package/dist/_chunks/{constants-jpi45NLl.mjs → constants-jQrPR8R5.mjs} +2 -2
  168. package/dist/_chunks/{constants-jpi45NLl.mjs.map → constants-jQrPR8R5.mjs.map} +1 -1
  169. package/dist/_chunks/{constants-8erDzi8j.mjs → constants-q8ASX-Zh.mjs} +6 -6
  170. package/dist/_chunks/{constants-8erDzi8j.mjs.map → constants-q8ASX-Zh.mjs.map} +1 -1
  171. package/dist/_chunks/{constants-25OlUs9A.mjs → constants-zrvjnprT.mjs} +4 -4
  172. package/dist/_chunks/{constants-25OlUs9A.mjs.map → constants-zrvjnprT.mjs.map} +1 -1
  173. package/dist/_chunks/{index-8XZny-tn.js → index-Cgd3dGa5.js} +314 -179
  174. package/dist/_chunks/index-Cgd3dGa5.js.map +1 -0
  175. package/dist/_chunks/{index-rZLvYBJ8.mjs → index-Sz0bqxDe.mjs} +316 -181
  176. package/dist/_chunks/index-Sz0bqxDe.mjs.map +1 -0
  177. package/dist/_chunks/{reviewWorkflows-NXiAT8fg.js → reviewWorkflows-AuX6nF1p.js} +12 -12
  178. package/dist/_chunks/reviewWorkflows-AuX6nF1p.js.map +1 -0
  179. package/dist/_chunks/{reviewWorkflows-a518rXfQ.mjs → reviewWorkflows-kl8pmnBb.mjs} +12 -12
  180. package/dist/_chunks/reviewWorkflows-kl8pmnBb.mjs.map +1 -0
  181. package/dist/_chunks/{transferTokens-TjHZT61v.js → transferTokens-ORIU_wuV.js} +2 -2
  182. package/dist/_chunks/{transferTokens-TjHZT61v.js.map → transferTokens-ORIU_wuV.js.map} +1 -1
  183. package/dist/_chunks/{transferTokens-XhbjvTBj.mjs → transferTokens-yy1TkqsE.mjs} +2 -2
  184. package/dist/_chunks/{transferTokens-XhbjvTBj.mjs.map → transferTokens-yy1TkqsE.mjs.map} +1 -1
  185. package/dist/_chunks/{useAdminRoles-nvYCMtmU.mjs → useAdminRoles-EpihNi47.mjs} +2 -2
  186. package/dist/_chunks/{useAdminRoles-nvYCMtmU.mjs.map → useAdminRoles-EpihNi47.mjs.map} +1 -1
  187. package/dist/_chunks/{useAdminRoles-FebQ4QqO.js → useAdminRoles-k-KvGhpX.js} +2 -2
  188. package/dist/_chunks/{useAdminRoles-FebQ4QqO.js.map → useAdminRoles-k-KvGhpX.js.map} +1 -1
  189. package/dist/_chunks/{useContentTypes-HdkToX3x.js → useContentTypes-bL0JHjqL.js} +2 -2
  190. package/dist/_chunks/{useContentTypes-HdkToX3x.js.map → useContentTypes-bL0JHjqL.js.map} +1 -1
  191. package/dist/_chunks/{useContentTypes-g-0ozsjU.mjs → useContentTypes-iT3IuYCm.mjs} +2 -2
  192. package/dist/_chunks/{useContentTypes-g-0ozsjU.mjs.map → useContentTypes-iT3IuYCm.mjs.map} +1 -1
  193. package/dist/_chunks/{useLicenseLimitNotification-HQ51kIXk.js → useLicenseLimitNotification-5L1bK71I.js} +3 -3
  194. package/dist/_chunks/{useLicenseLimitNotification-HQ51kIXk.js.map → useLicenseLimitNotification-5L1bK71I.js.map} +1 -1
  195. package/dist/_chunks/{useLicenseLimitNotification-I4aO56qe.mjs → useLicenseLimitNotification-qV5-YqpL.mjs} +2 -2
  196. package/dist/_chunks/{useLicenseLimitNotification-I4aO56qe.mjs.map → useLicenseLimitNotification-qV5-YqpL.mjs.map} +1 -1
  197. package/dist/_chunks/{useReviewWorkflows-gsPEvEHC.js → useReviewWorkflows-ILp3ZD_M.js} +2 -2
  198. package/dist/_chunks/{useReviewWorkflows-gsPEvEHC.js.map → useReviewWorkflows-ILp3ZD_M.js.map} +1 -1
  199. package/dist/_chunks/{useReviewWorkflows-IqmWutoK.mjs → useReviewWorkflows-W4sCUqUI.mjs} +2 -2
  200. package/dist/_chunks/{useReviewWorkflows-IqmWutoK.mjs.map → useReviewWorkflows-W4sCUqUI.mjs.map} +1 -1
  201. package/dist/_chunks/{useWebhooks-y9tdiVKX.mjs → useWebhooks-6gjatBnz.mjs} +2 -2
  202. package/dist/_chunks/{useWebhooks-y9tdiVKX.mjs.map → useWebhooks-6gjatBnz.mjs.map} +1 -1
  203. package/dist/_chunks/{useWebhooks-L5crY_WV.js → useWebhooks-g-u-eEUU.js} +2 -2
  204. package/dist/_chunks/{useWebhooks-L5crY_WV.js.map → useWebhooks-g-u-eEUU.js.map} +1 -1
  205. package/dist/_chunks/{validateWorkflow-wBPkMeR1.mjs → validateWorkflow-EtA_LzEo.mjs} +2 -2
  206. package/dist/_chunks/{validateWorkflow-wBPkMeR1.mjs.map → validateWorkflow-EtA_LzEo.mjs.map} +1 -1
  207. package/dist/_chunks/{validateWorkflow-ihdm5BiR.js → validateWorkflow-d781ZBtw.js} +2 -2
  208. package/dist/_chunks/{validateWorkflow-ihdm5BiR.js.map → validateWorkflow-d781ZBtw.js.map} +1 -1
  209. package/dist/admin/index.js +2 -1
  210. package/dist/admin/index.js.map +1 -1
  211. package/dist/admin/index.mjs +3 -2
  212. package/dist/admin/src/content-manager/components/BlocksInput/BlocksContent.d.ts +4 -3
  213. package/dist/admin/src/content-manager/components/BlocksInput/BlocksEditor.d.ts +3 -2
  214. package/dist/admin/src/content-manager/components/BlocksInput/BlocksInput.d.ts +2 -1
  215. package/dist/admin/src/index.d.ts +1 -0
  216. package/dist/ee/admin/src/hooks/useLicenseLimits.d.ts +2 -2
  217. package/dist/ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/hooks/useReviewWorkflows.d.ts +6 -2
  218. package/dist/ee/admin/src/services/reviewWorkflows.d.ts +5 -1
  219. package/dist/server/index.js +2 -12
  220. package/dist/server/index.js.map +1 -1
  221. package/dist/server/index.mjs +2 -12
  222. package/dist/server/index.mjs.map +1 -1
  223. package/dist/server/src/services/permission/permissions-manager/index.d.ts +2 -2
  224. package/dist/server/src/services/permission/permissions-manager/sanitize.d.ts.map +1 -1
  225. package/dist/server/src/services/permission/permissions-manager/validate.d.ts +2 -2
  226. package/dist/server/src/services/permission/permissions-manager/validate.d.ts.map +1 -1
  227. package/dist/shared/contracts/admin.d.ts +7 -1
  228. package/dist/shared/contracts/admin.d.ts.map +1 -1
  229. package/dist/shared/contracts/review-workflows.d.ts +6 -2
  230. package/dist/shared/contracts/review-workflows.d.ts.map +1 -1
  231. package/package.json +13 -13
  232. package/dist/_chunks/AuthenticatedApp-OOcwZ20K.mjs.map +0 -1
  233. package/dist/_chunks/AuthenticatedApp-_KGmPDjE.js.map +0 -1
  234. package/dist/_chunks/CreatePage-3qIqLFap.js.map +0 -1
  235. package/dist/_chunks/CreatePage-zr0KxeR0.mjs.map +0 -1
  236. package/dist/_chunks/EditPage-L2y_PJ4r.mjs.map +0 -1
  237. package/dist/_chunks/EditPage-ddwlh5ln.js.map +0 -1
  238. package/dist/_chunks/index-8XZny-tn.js.map +0 -1
  239. package/dist/_chunks/index-rZLvYBJ8.mjs.map +0 -1
  240. package/dist/_chunks/reviewWorkflows-NXiAT8fg.js.map +0 -1
  241. package/dist/_chunks/reviewWorkflows-a518rXfQ.mjs.map +0 -1
  242. package/dist/_chunks/useLicenseLimits-nV_z3fWn.js +0 -41
  243. package/dist/_chunks/useLicenseLimits-nV_z3fWn.js.map +0 -1
  244. package/dist/_chunks/useLicenseLimits-rGYOb9DE.mjs +0 -23
  245. package/dist/_chunks/useLicenseLimits-rGYOb9DE.mjs.map +0 -1
@@ -7,10 +7,10 @@ const helperPlugin = require("@strapi/helper-plugin");
7
7
  const reactHelmet = require("react-helmet");
8
8
  const reactIntl = require("react-intl");
9
9
  const reactRouterDom = require("react-router-dom");
10
- const index = require("./index-8XZny-tn.js");
10
+ const index = require("./index-Cgd3dGa5.js");
11
11
  const sortBy = require("lodash/sortBy");
12
12
  const reactRedux = require("react-redux");
13
- const AuthenticatedApp = require("./AuthenticatedApp-_KGmPDjE.js");
13
+ const AuthenticatedApp = require("./AuthenticatedApp-yPEMtCNB.js");
14
14
  const v2 = require("@strapi/design-system/v2");
15
15
  const Icons = require("@strapi/icons");
16
16
  const styled = require("styled-components");
@@ -117,7 +117,7 @@ const useSettingsMenu = () => {
117
117
  const ceLinks = React__namespace.useMemo(() => index.SETTINGS_LINKS_CE(), []);
118
118
  const { admin: adminLinks, global: globalLinks } = index.useEnterprise(
119
119
  ceLinks,
120
- async () => (await Promise.resolve().then(() => require("./constants-eKDRAcnv.js"))).SETTINGS_LINKS_EE(),
120
+ async () => (await Promise.resolve().then(() => require("./constants-_KHV_ADp.js"))).SETTINGS_LINKS_EE(),
121
121
  {
122
122
  combine(ceLinks2, eeLinks) {
123
123
  return {
@@ -257,7 +257,7 @@ const SettingsNav = ({ menu }) => {
257
257
  const ROUTES_CE = [
258
258
  {
259
259
  async Component() {
260
- const { ProtectedListPage } = await Promise.resolve().then(() => require("./ListPage-gKDK8dXO.js"));
260
+ const { ProtectedListPage } = await Promise.resolve().then(() => require("./ListPage--BFNFixg.js"));
261
261
  return ProtectedListPage;
262
262
  },
263
263
  to: "/settings/roles",
@@ -265,7 +265,7 @@ const ROUTES_CE = [
265
265
  },
266
266
  {
267
267
  async Component() {
268
- const { ProtectedCreatePage } = await Promise.resolve().then(() => require("./CreatePage-mpdYi-qx.js"));
268
+ const { ProtectedCreatePage } = await Promise.resolve().then(() => require("./CreatePage-ubvG-TO4.js"));
269
269
  return ProtectedCreatePage;
270
270
  },
271
271
  to: "/settings/roles/duplicate/:id",
@@ -273,7 +273,7 @@ const ROUTES_CE = [
273
273
  },
274
274
  {
275
275
  async Component() {
276
- const { ProtectedCreatePage } = await Promise.resolve().then(() => require("./CreatePage-mpdYi-qx.js"));
276
+ const { ProtectedCreatePage } = await Promise.resolve().then(() => require("./CreatePage-ubvG-TO4.js"));
277
277
  return ProtectedCreatePage;
278
278
  },
279
279
  to: "/settings/roles/new",
@@ -281,7 +281,7 @@ const ROUTES_CE = [
281
281
  },
282
282
  {
283
283
  async Component() {
284
- const { ProtectedEditPage } = await Promise.resolve().then(() => require("./EditPage-bZlMjB6A.js"));
284
+ const { ProtectedEditPage } = await Promise.resolve().then(() => require("./EditPage-ts9lW8Jp.js"));
285
285
  return ProtectedEditPage;
286
286
  },
287
287
  to: "/settings/roles/:id",
@@ -289,7 +289,7 @@ const ROUTES_CE = [
289
289
  },
290
290
  {
291
291
  async Component() {
292
- const { ProtectedListPage } = await Promise.resolve().then(() => require("./ListPage-HXbAJz5v.js"));
292
+ const { ProtectedListPage } = await Promise.resolve().then(() => require("./ListPage-2o3BsCCK.js"));
293
293
  return ProtectedListPage;
294
294
  },
295
295
  to: "/settings/users",
@@ -297,7 +297,7 @@ const ROUTES_CE = [
297
297
  },
298
298
  {
299
299
  async Component() {
300
- const { ProtectedEditPage } = await Promise.resolve().then(() => require("./EditPage-pDaXcwr2.js"));
300
+ const { ProtectedEditPage } = await Promise.resolve().then(() => require("./EditPage-zBNog_Do.js"));
301
301
  return ProtectedEditPage;
302
302
  },
303
303
  to: "/settings/users/:id",
@@ -305,7 +305,7 @@ const ROUTES_CE = [
305
305
  },
306
306
  {
307
307
  async Component() {
308
- const { ProtectedCreatePage } = await Promise.resolve().then(() => require("./CreatePage-DxDlEWAb.js"));
308
+ const { ProtectedCreatePage } = await Promise.resolve().then(() => require("./CreatePage-zotBOFnE.js"));
309
309
  return ProtectedCreatePage;
310
310
  },
311
311
  to: "/settings/webhooks/create",
@@ -313,7 +313,7 @@ const ROUTES_CE = [
313
313
  },
314
314
  {
315
315
  async Component() {
316
- const { ProtectedEditPage } = await Promise.resolve().then(() => require("./EditPage-w4dwqlZh.js")).then((n) => n.EditPage$1);
316
+ const { ProtectedEditPage } = await Promise.resolve().then(() => require("./EditPage-ZYqGLNGU.js")).then((n) => n.EditPage$1);
317
317
  return ProtectedEditPage;
318
318
  },
319
319
  to: "/settings/webhooks/:id",
@@ -321,7 +321,7 @@ const ROUTES_CE = [
321
321
  },
322
322
  {
323
323
  async Component() {
324
- const { ProtectedListPage } = await Promise.resolve().then(() => require("./ListPage-YBXiLY6m.js"));
324
+ const { ProtectedListPage } = await Promise.resolve().then(() => require("./ListPage-3zXBK2Cg.js"));
325
325
  return ProtectedListPage;
326
326
  },
327
327
  to: "/settings/webhooks",
@@ -329,7 +329,7 @@ const ROUTES_CE = [
329
329
  },
330
330
  {
331
331
  async Component() {
332
- const { ProtectedListView } = await Promise.resolve().then(() => require("./ListView-3xV18_1L.js"));
332
+ const { ProtectedListView } = await Promise.resolve().then(() => require("./ListView-NluyrGcC.js"));
333
333
  return ProtectedListView;
334
334
  },
335
335
  to: "/settings/api-tokens",
@@ -337,7 +337,7 @@ const ROUTES_CE = [
337
337
  },
338
338
  {
339
339
  async Component() {
340
- const { ProtectedCreateView } = await Promise.resolve().then(() => require("./CreateView-l7nt52UO.js"));
340
+ const { ProtectedCreateView } = await Promise.resolve().then(() => require("./CreateView-dxLwgfdk.js"));
341
341
  return ProtectedCreateView;
342
342
  },
343
343
  to: "/settings/api-tokens/create",
@@ -345,7 +345,7 @@ const ROUTES_CE = [
345
345
  },
346
346
  {
347
347
  async Component() {
348
- const { ProtectedEditView } = await Promise.resolve().then(() => require("./EditViewPage-LcgWsiF-.js"));
348
+ const { ProtectedEditView } = await Promise.resolve().then(() => require("./EditViewPage-1FpxFWQ-.js"));
349
349
  return ProtectedEditView;
350
350
  },
351
351
  to: "/settings/api-tokens/:id",
@@ -353,7 +353,7 @@ const ROUTES_CE = [
353
353
  },
354
354
  {
355
355
  async Component() {
356
- const { ProtectedCreateView } = await Promise.resolve().then(() => require("./CreateView-xzbb4nEi.js"));
356
+ const { ProtectedCreateView } = await Promise.resolve().then(() => require("./CreateView-5YRPBxNm.js"));
357
357
  return ProtectedCreateView;
358
358
  },
359
359
  to: "/settings/transfer-tokens/create",
@@ -361,7 +361,7 @@ const ROUTES_CE = [
361
361
  },
362
362
  {
363
363
  async Component() {
364
- const { ProtectedListView } = await Promise.resolve().then(() => require("./ListView-LSSr9m14.js"));
364
+ const { ProtectedListView } = await Promise.resolve().then(() => require("./ListView-A1nKrQn4.js"));
365
365
  return ProtectedListView;
366
366
  },
367
367
  to: "/settings/transfer-tokens",
@@ -369,7 +369,7 @@ const ROUTES_CE = [
369
369
  },
370
370
  {
371
371
  async Component() {
372
- const { ProtectedEditView } = await Promise.resolve().then(() => require("./EditView-ItMzYqdS.js"));
372
+ const { ProtectedEditView } = await Promise.resolve().then(() => require("./EditView-RTA0igao.js"));
373
373
  return ProtectedEditView;
374
374
  },
375
375
  to: "/settings/transfer-tokens/:id",
@@ -844,7 +844,7 @@ const ApplicationInfoPage = () => {
844
844
  } = helperPlugin.useAppInfo();
845
845
  const AdminSeatInfo = index.useEnterprise(
846
846
  AdminSeatInfoCE,
847
- async () => (await Promise.resolve().then(() => require("./AdminSeatInfo-3pW16BUI.js"))).AdminSeatInfoEE
847
+ async () => (await Promise.resolve().then(() => require("./AdminSeatInfo-FYllM9Wr.js"))).AdminSeatInfoEE
848
848
  );
849
849
  const {
850
850
  allowedActions: { canRead, canUpdate }
@@ -1052,7 +1052,7 @@ const SettingsPage = () => {
1052
1052
  const { isLoading, menu } = useSettingsMenu();
1053
1053
  const routes = index.useEnterprise(
1054
1054
  ROUTES_CE,
1055
- async () => (await Promise.resolve().then(() => require("./constants-2xhze4EW.js"))).ROUTES_EE,
1055
+ async () => (await Promise.resolve().then(() => require("./constants-VeXFoE6h.js"))).ROUTES_EE,
1056
1056
  {
1057
1057
  combine(ceRoutes, eeRoutes) {
1058
1058
  return [...ceRoutes, ...eeRoutes];
@@ -1097,4 +1097,4 @@ const makeUniqueRoutes = (routes) => routes.filter(
1097
1097
  );
1098
1098
  exports.SettingsPage = SettingsPage;
1099
1099
  exports.makeUniqueRoutes = makeUniqueRoutes;
1100
- //# sourceMappingURL=SettingsPage-sqyzPjHX.js.map
1100
+ //# sourceMappingURL=SettingsPage-7Rs7LOuF.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SettingsPage-sqyzPjHX.js","sources":["../../admin/src/hooks/useSettingsMenu.ts","../../admin/src/pages/Settings/components/SettingsNav.tsx","../../admin/src/pages/Settings/constants.ts","../../admin/src/pages/Settings/pages/ApplicationInfo/utils/constants.ts","../../admin/src/pages/Settings/pages/ApplicationInfo/utils/files.ts","../../admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.tsx","../../admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.tsx","../../admin/src/pages/Settings/SettingsPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n hasPermissions,\n StrapiAppSetting,\n StrapiAppSettingLink as IStrapiAppSettingLink,\n useRBACProvider,\n useStrapiApp,\n useAppInfo,\n} from '@strapi/helper-plugin';\nimport sortBy from 'lodash/sortBy';\nimport { useSelector } from 'react-redux';\n\nimport { SETTINGS_LINKS_CE, SettingsMenuLink } from '../constants';\nimport { selectAdminPermissions } from '../selectors';\nimport { PermissionMap } from '../types/permissions';\n\nimport { useEnterprise } from './useEnterprise';\n\nconst formatLinks = (menu: SettingsMenuSection[]): SettingsMenuSectionWithDisplayedLinks[] =>\n menu.map((menuSection) => {\n const formattedLinks = menuSection.links.map((link) => ({\n ...link,\n isDisplayed: false,\n }));\n\n return { ...menuSection, links: formattedLinks };\n });\n\ninterface SettingsMenuLinkWithPermissions extends SettingsMenuLink {\n permissions: IStrapiAppSettingLink['permissions'];\n hasNotification?: boolean;\n}\n\ninterface StrapiAppSettingsLink extends IStrapiAppSettingLink {\n lockIcon?: never;\n hasNotification?: never;\n}\n\ninterface SettingsMenuSection extends Omit<StrapiAppSetting, 'links'> {\n links: Array<SettingsMenuLinkWithPermissions | StrapiAppSettingsLink>;\n}\n\ninterface SettingsMenuLinkWithPermissionsAndDisplayed extends SettingsMenuLinkWithPermissions {\n isDisplayed: boolean;\n}\n\ninterface StrapiAppSettingLinkWithDisplayed extends StrapiAppSettingsLink {\n isDisplayed: boolean;\n}\n\ninterface SettingsMenuSectionWithDisplayedLinks extends Omit<SettingsMenuSection, 'links'> {\n links: Array<SettingsMenuLinkWithPermissionsAndDisplayed | StrapiAppSettingLinkWithDisplayed>;\n}\n\ntype SettingsMenu = SettingsMenuSectionWithDisplayedLinks[];\n\nconst useSettingsMenu = (): {\n isLoading: boolean;\n menu: SettingsMenu;\n} => {\n const [{ isLoading, menu }, setData] = React.useState<{\n isLoading: boolean;\n menu: SettingsMenu;\n }>({\n isLoading: true,\n menu: [],\n });\n const { allPermissions: userPermissions } = useRBACProvider();\n const { shouldUpdateStrapi } = useAppInfo();\n const { settings } = useStrapiApp();\n const permissions = useSelector(selectAdminPermissions);\n\n /**\n * memoize the return value of this function to avoid re-computing it on every render\n * because it's used in an effect it ends up re-running recursively.\n */\n const ceLinks = React.useMemo(() => SETTINGS_LINKS_CE(), []);\n\n const { admin: adminLinks, global: globalLinks } = useEnterprise(\n ceLinks,\n async () => (await import('../../../ee/admin/src/constants')).SETTINGS_LINKS_EE(),\n {\n combine(ceLinks, eeLinks) {\n return {\n admin: [...eeLinks.admin, ...ceLinks.admin],\n global: [...ceLinks.global, ...eeLinks.global],\n };\n },\n defaultValue: {\n admin: [],\n global: [],\n },\n }\n );\n\n const addPermissions = React.useCallback(\n (link: SettingsMenuLink) => {\n if (!link.id) {\n throw new Error('The settings menu item must have an id attribute.');\n }\n\n return {\n ...link,\n permissions: permissions.settings?.[link.id as keyof PermissionMap['settings']]?.main ?? [],\n } satisfies SettingsMenuLinkWithPermissions;\n },\n [permissions.settings]\n );\n\n React.useEffect(() => {\n const getData = async () => {\n interface MenuLinkPermission {\n hasPermission: boolean;\n sectionIndex: number;\n linkIndex: number;\n }\n\n const buildMenuPermissions = (sections: SettingsMenuSectionWithDisplayedLinks[]) =>\n Promise.all(\n sections.reduce<Promise<MenuLinkPermission>[]>((acc, section, sectionIndex) => {\n const linksWithPermissions = section.links.map(async (link, linkIndex) => ({\n hasPermission: await hasPermissions(userPermissions, link.permissions),\n sectionIndex,\n linkIndex,\n }));\n\n return [...acc, ...linksWithPermissions];\n }, [])\n );\n\n const menuPermissions = await buildMenuPermissions(sections);\n\n setData((prev) => {\n return {\n ...prev,\n isLoading: false,\n menu: sections.map((section, sectionIndex) => ({\n ...section,\n links: section.links.map((link, linkIndex) => {\n const permission = menuPermissions.find(\n (permission) =>\n permission.sectionIndex === sectionIndex && permission.linkIndex === linkIndex\n );\n\n return {\n ...link,\n isDisplayed: Boolean(permission?.hasPermission),\n };\n }),\n })),\n };\n });\n };\n\n const { global, ...otherSections } = settings;\n const sections = formatLinks([\n {\n ...global,\n links: sortBy([...global.links, ...globalLinks.map(addPermissions)], (link) => link.id).map(\n (link) => ({\n ...link,\n hasNotification: link.id === '000-application-infos' && shouldUpdateStrapi,\n })\n ),\n },\n {\n id: 'permissions',\n intlLabel: { id: 'Settings.permissions', defaultMessage: 'Administration Panel' },\n links: adminLinks.map(addPermissions),\n },\n ...Object.values(otherSections),\n ]);\n\n getData();\n }, [adminLinks, globalLinks, userPermissions, settings, shouldUpdateStrapi, addPermissions]);\n\n return {\n isLoading,\n menu: menu.map((menuItem) => ({\n ...menuItem,\n links: menuItem.links.filter((link) => link.isDisplayed),\n })),\n };\n};\n\nexport { useSettingsMenu };\nexport type { SettingsMenu };\n","import { Icon } from '@strapi/design-system';\nimport {\n SubNav,\n SubNavHeader,\n SubNavLink,\n SubNavSection,\n SubNavSections,\n} from '@strapi/design-system/v2';\nimport { useTracking } from '@strapi/helper-plugin';\nimport { Lock } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useLocation } from 'react-router-dom';\nimport styled from 'styled-components';\n\nimport { SettingsMenu } from '../../../hooks/useSettingsMenu';\n\n/**\n * TODO: refactor the SubNav entirely, we shouldn't have\n * to do this hack to work a lock at the end. It's a bit hacky.\n */\n\nconst CustomIcon = styled(Icon)`\n right: 15px;\n position: absolute;\n`;\n\ninterface SettingsNavProps {\n menu: SettingsMenu;\n}\n\nconst SettingsNav = ({ menu }: SettingsNavProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { pathname } = useLocation();\n\n const filteredMenu = menu.filter(\n (section) => !section.links.every((link) => link.isDisplayed === false)\n );\n\n const sections = filteredMenu.map((section) => {\n return {\n ...section,\n title: section.intlLabel,\n links: section.links.map((link) => {\n return {\n ...link,\n title: link.intlLabel,\n name: link.id,\n };\n }),\n };\n });\n\n const label = formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n });\n\n const handleClickOnLink = (destination: string) => () => {\n trackUsage('willNavigate', { from: pathname, to: destination });\n };\n\n return (\n <SubNav ariaLabel={label}>\n <SubNavHeader label={label} />\n <SubNavSections>\n {sections.map((section) => (\n <SubNavSection key={section.id} label={formatMessage(section.intlLabel)}>\n {section.links.map((link) => {\n return (\n <SubNavLink\n as={NavLink}\n withBullet={link.hasNotification}\n // @ts-expect-error – this is an issue with the DS where as props are not inferred\n to={link.to}\n onClick={handleClickOnLink(link.to)}\n key={link.id}\n >\n {formatMessage(link.intlLabel)}\n {link?.lockIcon && (\n <CustomIcon width={`${15 / 16}rem`} height={`${15 / 16}rem`} as={Lock} />\n )}\n </SubNavLink>\n );\n })}\n </SubNavSection>\n ))}\n </SubNavSections>\n </SubNav>\n );\n};\n\nexport { SettingsNav };\nexport type { SettingsNavProps };\n","import { MenuItem } from '@strapi/helper-plugin';\n\nexport interface Route\n extends Pick<MenuItem, 'exact' | 'to'>,\n Required<Pick<MenuItem, 'Component'>> {}\n\nexport const ROUTES_CE: Route[] = [\n {\n async Component() {\n const { ProtectedListPage } = await import('./pages/Roles/ListPage');\n\n return ProtectedListPage;\n },\n to: '/settings/roles',\n exact: true,\n },\n {\n async Component() {\n const { ProtectedCreatePage } = await import('./pages/Roles/CreatePage');\n\n return ProtectedCreatePage;\n },\n to: '/settings/roles/duplicate/:id',\n exact: true,\n },\n {\n async Component() {\n const { ProtectedCreatePage } = await import('./pages/Roles/CreatePage');\n\n return ProtectedCreatePage;\n },\n to: '/settings/roles/new',\n exact: true,\n },\n {\n async Component() {\n const { ProtectedEditPage } = await import('./pages/Roles/EditPage');\n\n return ProtectedEditPage;\n },\n to: '/settings/roles/:id',\n exact: true,\n },\n {\n async Component() {\n const { ProtectedListPage } = await import('./pages/Users/ListPage');\n\n return ProtectedListPage;\n },\n to: '/settings/users',\n exact: true,\n },\n {\n async Component() {\n const { ProtectedEditPage } = await import('./pages/Users/EditPage');\n\n return ProtectedEditPage;\n },\n to: '/settings/users/:id',\n exact: true,\n },\n {\n async Component() {\n const { ProtectedCreatePage } = await import('./pages/Webhooks/CreatePage');\n\n return ProtectedCreatePage;\n },\n to: '/settings/webhooks/create',\n exact: true,\n },\n {\n async Component() {\n const { ProtectedEditPage } = await import('./pages/Webhooks/EditPage');\n\n return ProtectedEditPage;\n },\n to: '/settings/webhooks/:id',\n exact: true,\n },\n {\n async Component() {\n const { ProtectedListPage } = await import('./pages/Webhooks/ListPage');\n\n return ProtectedListPage;\n },\n to: '/settings/webhooks',\n exact: true,\n },\n {\n async Component() {\n const { ProtectedListView } = await import('./pages/ApiTokens/ListView');\n\n return ProtectedListView;\n },\n to: '/settings/api-tokens',\n exact: true,\n },\n {\n async Component() {\n const { ProtectedCreateView } = await import('./pages/ApiTokens/CreateView');\n\n return ProtectedCreateView;\n },\n to: '/settings/api-tokens/create',\n exact: true,\n },\n {\n async Component() {\n const { ProtectedEditView } = await import('./pages/ApiTokens/EditView/EditViewPage');\n\n return ProtectedEditView;\n },\n to: '/settings/api-tokens/:id',\n exact: true,\n },\n {\n async Component() {\n const { ProtectedCreateView } = await import('./pages/TransferTokens/CreateView');\n\n return ProtectedCreateView;\n },\n to: '/settings/transfer-tokens/create',\n exact: true,\n },\n {\n async Component() {\n const { ProtectedListView } = await import('./pages/TransferTokens/ListView');\n\n return ProtectedListView;\n },\n to: '/settings/transfer-tokens',\n exact: true,\n },\n {\n async Component() {\n const { ProtectedEditView } = await import('./pages/TransferTokens/EditView');\n\n return ProtectedEditView;\n },\n to: '/settings/transfer-tokens/:id',\n exact: true,\n },\n {\n async Component() {\n const { PurchaseAuditLogs } = await import('./pages/PurchaseAuditLogs');\n\n return PurchaseAuditLogs;\n },\n to: '/settings/purchase-audit-logs',\n exact: true,\n },\n {\n async Component() {\n const { PurchaseReviewWorkflows } = await import('./pages/PurchaseReviewWorkflows');\n\n return PurchaseReviewWorkflows;\n },\n to: '/settings/purchase-review-workflows',\n exact: true,\n },\n {\n async Component() {\n const { PurchaseSingleSignOn } = await import('./pages/PurchaseSingleSignOn');\n\n return PurchaseSingleSignOn;\n },\n to: '/settings/purchase-single-sign-on',\n exact: true,\n },\n];\n","export const DIMENSION = 750;\nexport const SIZE = 100;\nexport const ACCEPTED_FORMAT = ['image/jpeg', 'image/png', 'image/svg+xml'];\n","import { ACCEPTED_FORMAT, DIMENSION, SIZE } from './constants';\n\nimport type { MessageDescriptor } from 'react-intl';\n\nconst FILE_FORMAT_ERROR_MESSAGE = {\n id: 'Settings.application.customization.modal.upload.error-format',\n defaultMessage: 'Wrong format uploaded (accepted formats only: jpeg, jpg, png, svg).',\n};\n\nconst FILE_SIZING_ERROR_MESSAGE = {\n id: 'Settings.application.customization.modal.upload.error-size',\n defaultMessage:\n 'The file uploaded is too large (max dimension: {dimension}x{dimension}, max file size: {size}KB)',\n};\n\ninterface ImageDimensions {\n height: number;\n width: number;\n}\n\ninterface ImageAsset extends ImageDimensions {\n ext: string | undefined;\n size: number;\n name: string;\n url: string;\n rawFile: File;\n}\n\nconst parseFileMetadatas = async (file: File): Promise<ImageAsset> => {\n const isFormatAuthorized = ACCEPTED_FORMAT.includes(file.type);\n\n if (!isFormatAuthorized) {\n throw new ParsingFileError('File format', FILE_FORMAT_ERROR_MESSAGE);\n }\n\n const fileDimensions = await new Promise<ImageDimensions>((resolve) => {\n const reader = new FileReader();\n reader.onload = () => {\n const img = new Image();\n img.onload = () => {\n resolve({ width: img.width, height: img.height });\n };\n img.src = reader.result as string;\n };\n reader.readAsDataURL(file);\n });\n\n const areDimensionsAuthorized =\n fileDimensions.width <= DIMENSION && fileDimensions.height <= DIMENSION;\n\n if (!areDimensionsAuthorized) {\n throw new ParsingFileError('File sizing', FILE_SIZING_ERROR_MESSAGE);\n }\n\n const asset = {\n ext: file.name.split('.').pop(),\n size: file.size / 1000,\n name: file.name,\n url: URL.createObjectURL(file),\n rawFile: file,\n width: fileDimensions.width,\n height: fileDimensions.height,\n };\n\n const isSizeAuthorized = asset.size <= SIZE;\n\n if (!isSizeAuthorized) {\n throw new ParsingFileError('File sizing', FILE_SIZING_ERROR_MESSAGE);\n }\n\n return asset;\n};\n\nclass ParsingFileError extends Error {\n displayMessage: MessageDescriptor;\n\n constructor(message: string, displayMessage: MessageDescriptor, options?: ErrorOptions) {\n super(message, options);\n this.displayMessage = displayMessage;\n }\n}\n\nexport { parseFileMetadatas, ParsingFileError };\nexport type { ImageAsset };\n","import * as React from 'react';\n\nimport { createContext } from '@radix-ui/react-context';\nimport {\n Box,\n Button,\n ButtonProps,\n Card,\n CardAsset,\n CardBadge,\n CardBody,\n CardContent,\n CardHeader,\n CardSubtitle,\n CardTitle,\n CarouselActions,\n CarouselInput,\n CarouselInputProps,\n CarouselSlide,\n Divider,\n Field,\n FieldError,\n FieldInput,\n Flex,\n Icon,\n IconButton,\n ModalFooter,\n ModalHeader,\n ModalLayout,\n Tab,\n TabGroup,\n TabPanel,\n TabPanels,\n Tabs,\n TextInput,\n TextInputProps,\n Typography,\n} from '@strapi/design-system';\nimport { pxToRem } from '@strapi/helper-plugin';\nimport { PicturePlus, Plus, Refresh } from '@strapi/icons';\nimport axios, { AxiosError } from 'axios';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { ConfigurationProviderProps } from '../../../../../features/Configuration';\nimport { ACCEPTED_FORMAT, DIMENSION, SIZE } from '../utils/constants';\nimport { ImageAsset, ParsingFileError, parseFileMetadatas } from '../utils/files';\n\n/* -------------------------------------------------------------------------------------------------\n * LogoInputContext\n * -----------------------------------------------------------------------------------------------*/\n\ninterface LogoInputContextValue {\n localImage: ImageAsset | undefined;\n goToStep: (step: Step) => void;\n onClose: () => void;\n setLocalImage: (asset: ImageAsset | undefined) => void;\n}\n\nconst [LogoInputContextProvider, useLogoInputContext] =\n createContext<LogoInputContextValue>('LogoInput');\n\n/* -------------------------------------------------------------------------------------------------\n * LogoInput\n * -----------------------------------------------------------------------------------------------*/\n\ninterface LogoInputProps\n extends Pick<PendingLogoDialogProps, 'onChangeLogo'>,\n Pick<CarouselInputProps, 'label' | 'hint'> {\n canUpdate: boolean;\n customLogo?: ConfigurationProviderProps['authLogo']['custom'];\n defaultLogo: string;\n}\n\ntype Step = 'pending' | 'upload' | undefined;\n\nconst LogoInput = ({\n canUpdate,\n customLogo,\n defaultLogo,\n hint,\n label,\n onChangeLogo,\n}: LogoInputProps) => {\n const [localImage, setLocalImage] = React.useState<ImageAsset | undefined>();\n const [currentStep, setCurrentStep] = React.useState<Step>();\n const { formatMessage } = useIntl();\n\n const handleClose = () => {\n setLocalImage(undefined);\n setCurrentStep(undefined);\n };\n\n return (\n <LogoInputContextProvider\n setLocalImage={setLocalImage}\n localImage={localImage}\n goToStep={setCurrentStep}\n onClose={handleClose}\n >\n <CarouselInput\n label={label}\n selectedSlide={0}\n hint={hint}\n // Carousel is used here for a single media,\n // we don't need previous and next labels but these props are required\n previousLabel=\"\"\n nextLabel=\"\"\n onNext={() => {}}\n onPrevious={() => {}}\n secondaryLabel={customLogo?.name || 'logo.png'}\n actions={\n <CarouselActions>\n <IconButton\n disabled={!canUpdate}\n onClick={() => setCurrentStep('upload')}\n label={formatMessage({\n id: 'Settings.application.customization.carousel.change-action',\n defaultMessage: 'Change logo',\n })}\n icon={<Plus />}\n />\n {customLogo?.url && (\n <IconButton\n disabled={!canUpdate}\n onClick={() => onChangeLogo(null)}\n label={formatMessage({\n id: 'Settings.application.customization.carousel.reset-action',\n defaultMessage: 'Reset logo',\n })}\n icon={<Refresh />}\n />\n )}\n </CarouselActions>\n }\n >\n <CarouselSlide\n label={formatMessage({\n id: 'Settings.application.customization.carousel-slide.label',\n defaultMessage: 'Logo slide',\n })}\n >\n <Box\n maxHeight=\"40%\"\n maxWidth=\"40%\"\n as=\"img\"\n src={customLogo?.url || defaultLogo}\n alt={formatMessage({\n id: 'Settings.application.customization.carousel.title',\n defaultMessage: 'Logo',\n })}\n />\n </CarouselSlide>\n </CarouselInput>\n {currentStep ? (\n <ModalLayout labelledBy=\"modal\" onClose={handleClose}>\n <ModalHeader>\n <Typography fontWeight=\"bold\" as=\"h2\" id=\"modal\">\n {formatMessage(\n currentStep === 'upload'\n ? {\n id: 'Settings.application.customization.modal.upload',\n defaultMessage: 'Upload logo',\n }\n : {\n id: 'Settings.application.customization.modal.pending',\n defaultMessage: 'Pending logo',\n }\n )}\n </Typography>\n </ModalHeader>\n {currentStep === 'upload' ? (\n <AddLogoDialog />\n ) : (\n <PendingLogoDialog onChangeLogo={onChangeLogo} />\n )}\n </ModalLayout>\n ) : null}\n </LogoInputContextProvider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AddLogoDialog\n * -----------------------------------------------------------------------------------------------*/\n\nconst AddLogoDialog = () => {\n const { formatMessage } = useIntl();\n\n return (\n <TabGroup\n label={formatMessage({\n id: 'Settings.application.customization.modal.tab.label',\n defaultMessage: 'How do you want to upload your assets?',\n })}\n variant=\"simple\"\n >\n <Box paddingLeft={8} paddingRight={8}>\n <Tabs>\n <Tab>\n {formatMessage({\n id: 'Settings.application.customization.modal.upload.from-computer',\n defaultMessage: 'From computer',\n })}\n </Tab>\n <Tab>\n {formatMessage({\n id: 'Settings.application.customization.modal.upload.from-url',\n defaultMessage: 'From url',\n })}\n </Tab>\n </Tabs>\n <Divider />\n </Box>\n <TabPanels>\n <TabPanel>\n <ComputerForm />\n </TabPanel>\n <TabPanel>\n <URLForm />\n </TabPanel>\n </TabPanels>\n </TabGroup>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * URLForm\n * -----------------------------------------------------------------------------------------------*/\n\nconst URLForm = () => {\n const { formatMessage } = useIntl();\n const [logoUrl, setLogoUrl] = React.useState('');\n const [error, setError] = React.useState<string>();\n const { setLocalImage, goToStep, onClose } = useLogoInputContext('URLForm');\n\n const handleChange: TextInputProps['onChange'] = (e) => {\n setLogoUrl(e.target.value);\n };\n\n const handleSubmit: React.FormEventHandler<HTMLFormElement> = async (event) => {\n event.preventDefault();\n\n const data = new FormData(event.target as HTMLFormElement);\n\n const url = data.get('logo-url');\n\n if (!url) {\n return;\n }\n\n try {\n const res = await axios.get(url.toString(), { responseType: 'blob', timeout: 8000 });\n\n const file = new File([res.data], res.config.url ?? '', {\n type: res.headers['content-type'],\n });\n\n const asset = await parseFileMetadatas(file);\n\n setLocalImage(asset);\n goToStep('pending');\n } catch (err) {\n if (err instanceof AxiosError) {\n setError(\n formatMessage({\n id: 'Settings.application.customization.modal.upload.error-network',\n defaultMessage: 'Network error',\n })\n );\n } else if (err instanceof ParsingFileError) {\n setError(formatMessage(err.displayMessage, { size: SIZE, dimension: DIMENSION }));\n } else {\n throw err;\n }\n }\n };\n\n return (\n <form onSubmit={handleSubmit}>\n <Box paddingLeft={8} paddingRight={8} paddingTop={6} paddingBottom={6}>\n <TextInput\n label={formatMessage({\n id: 'Settings.application.customization.modal.upload.from-url.input-label',\n defaultMessage: 'URL',\n })}\n error={error}\n onChange={handleChange}\n value={logoUrl}\n name=\"logo-url\"\n />\n </Box>\n <ModalFooter\n startActions={\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'Cancel' })}\n </Button>\n }\n endActions={\n <Button type=\"submit\">\n {formatMessage({\n id: 'Settings.application.customization.modal.upload.next',\n defaultMessage: 'Next',\n })}\n </Button>\n }\n />\n </form>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ComputerForm\n * -----------------------------------------------------------------------------------------------*/\n\nconst ComputerForm = () => {\n const { formatMessage } = useIntl();\n const [dragOver, setDragOver] = React.useState(false);\n const [fileError, setFileError] = React.useState<string>();\n const inputRef = React.useRef<HTMLInputElement>(null!);\n const id = React.useId();\n\n const { setLocalImage, goToStep, onClose } = useLogoInputContext('ComputerForm');\n\n const handleDragEnter = () => setDragOver(true);\n const handleDragLeave = () => setDragOver(false);\n\n const handleClick: ButtonProps['onClick'] = (e) => {\n e.preventDefault();\n inputRef.current.click();\n };\n\n const handleChange = async () => {\n handleDragLeave();\n\n if (!inputRef.current.files) {\n return;\n }\n\n const [file] = inputRef.current.files;\n\n try {\n const asset = await parseFileMetadatas(file);\n setLocalImage(asset);\n goToStep('pending');\n } catch (err) {\n if (err instanceof ParsingFileError) {\n setFileError(formatMessage(err.displayMessage, { size: SIZE, dimension: DIMENSION }));\n inputRef.current.focus();\n } else {\n throw err;\n }\n }\n };\n\n return (\n <>\n <form>\n <Box paddingLeft={8} paddingRight={8} paddingTop={6} paddingBottom={6}>\n <Field name={id} error={fileError}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Flex\n paddingTop={9}\n paddingBottom={7}\n hasRadius\n justifyContent=\"center\"\n direction=\"column\"\n background={dragOver ? 'primary100' : 'neutral100'}\n borderColor={dragOver ? 'primary500' : fileError ? 'danger600' : 'neutral300'}\n borderStyle=\"dashed\"\n borderWidth=\"1px\"\n position=\"relative\"\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n >\n <Icon\n color=\"primary600\"\n width={pxToRem(60)}\n height={pxToRem(60)}\n as={PicturePlus}\n aria-hidden\n />\n <Box paddingTop={3} paddingBottom={5}>\n <Typography variant=\"delta\" as=\"label\" htmlFor={id}>\n {formatMessage({\n id: 'Settings.application.customization.modal.upload.drag-drop',\n defaultMessage: 'Drag and Drop here or',\n })}\n </Typography>\n </Box>\n <FileInput\n accept={ACCEPTED_FORMAT.join(', ')}\n type=\"file\"\n name=\"files\"\n tabIndex={-1}\n onChange={handleChange}\n ref={inputRef}\n id={id}\n />\n <Button type=\"button\" onClick={handleClick}>\n {formatMessage({\n id: 'Settings.application.customization.modal.upload.cta.browse',\n defaultMessage: 'Browse files',\n })}\n </Button>\n <Box paddingTop={6}>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: 'Settings.application.customization.modal.upload.file-validation',\n defaultMessage:\n 'Max dimension: {dimension}x{dimension}, Max size: {size}KB',\n },\n { size: SIZE, dimension: DIMENSION }\n )}\n </Typography>\n </Box>\n </Flex>\n <FieldError />\n </Flex>\n </Field>\n </Box>\n </form>\n <ModalFooter\n startActions={\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({\n id: 'Settings.application.customization.modal.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n }\n />\n </>\n );\n};\n\nconst FileInput = styled(FieldInput)`\n opacity: 0;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 1;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * PendingLogoDialog\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PendingLogoDialogProps {\n onChangeLogo: (file: ImageAsset | null) => void;\n}\n\nconst PendingLogoDialog = ({ onChangeLogo }: PendingLogoDialogProps) => {\n const { formatMessage } = useIntl();\n const { localImage, setLocalImage, goToStep, onClose } = useLogoInputContext('PendingLogoDialog');\n\n const handleGoBack = () => {\n setLocalImage(undefined);\n goToStep('upload');\n };\n\n const handleUpload = () => {\n if (localImage) {\n onChangeLogo(localImage);\n }\n onClose();\n };\n\n return (\n <>\n <Box paddingLeft={8} paddingRight={8} paddingTop={6} paddingBottom={6}>\n <Flex justifyContent=\"space-between\" paddingBottom={6}>\n <Flex direction=\"column\" alignItems=\"flex-start\">\n <Typography variant=\"pi\" fontWeight=\"bold\">\n {formatMessage({\n id: 'Settings.application.customization.modal.pending.title',\n defaultMessage: 'Logo ready to upload',\n })}\n </Typography>\n <Typography variant=\"pi\" textColor=\"neutral500\">\n {formatMessage({\n id: 'Settings.application.customization.modal.pending.subtitle',\n defaultMessage: 'Manage the chosen logo before uploading it',\n })}\n </Typography>\n </Flex>\n <Button onClick={handleGoBack} variant=\"secondary\">\n {formatMessage({\n id: 'Settings.application.customization.modal.pending.choose-another',\n defaultMessage: 'Choose another logo',\n })}\n </Button>\n </Flex>\n <Box maxWidth={pxToRem(180)}>\n {localImage?.url ? <ImageCardAsset asset={localImage} /> : null}\n </Box>\n </Box>\n <ModalFooter\n startActions={\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({\n id: 'Settings.application.customization.modal.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n }\n endActions={\n <Button onClick={handleUpload}>\n {formatMessage({\n id: 'Settings.application.customization.modal.pending.upload',\n defaultMessage: 'Upload logo',\n })}\n </Button>\n }\n />\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ImageCardAsset\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ImageCardAssetProps {\n asset: ImageAsset;\n}\n\nconst ImageCardAsset = ({ asset }: ImageCardAssetProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Card>\n <CardHeader>\n <CardAsset size=\"S\" src={asset.url} />\n </CardHeader>\n <CardBody>\n <CardContent>\n <CardTitle>{asset.name}</CardTitle>\n <CardSubtitle>\n {`${asset.ext?.toUpperCase()} - ${asset.width}✕${asset.height}`}\n </CardSubtitle>\n </CardContent>\n <CardBadge>\n {formatMessage({\n id: 'Settings.application.customization.modal.pending.card-badge',\n defaultMessage: 'image',\n })}\n </CardBadge>\n </CardBody>\n </Card>\n );\n};\n\nexport { LogoInput };\nexport type { LogoInputProps };\n","import * as React from 'react';\n\nimport {\n Box,\n Button,\n ContentLayout,\n Flex,\n Grid,\n GridItem,\n HeaderLayout,\n Layout,\n Link,\n Main,\n Typography,\n} from '@strapi/design-system';\nimport {\n SettingsPageTitle,\n useAppInfo,\n useFocusWhenNavigate,\n useRBAC,\n useTracking,\n} from '@strapi/helper-plugin';\nimport { Check, ExternalLink } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useSelector } from 'react-redux';\n\nimport { useConfiguration } from '../../../../features/Configuration';\nimport { useEnterprise } from '../../../../hooks/useEnterprise';\nimport { selectAdminPermissions } from '../../../../selectors';\n\nimport { LogoInput, LogoInputProps } from './components/LogoInput';\nimport { DIMENSION, SIZE } from './utils/constants';\n\nconst AdminSeatInfoCE = () => null;\n\n/* -------------------------------------------------------------------------------------------------\n * ApplicationInfoPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ApplicationInfoPage = () => {\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const { logos: serverLogos, updateProjectSettings } = useConfiguration('ApplicationInfoPage');\n const [logos, setLogos] = React.useState({ menu: serverLogos.menu, auth: serverLogos.auth });\n const { settings } = useSelector(selectAdminPermissions);\n\n const {\n communityEdition,\n latestStrapiReleaseTag,\n nodeVersion,\n shouldUpdateStrapi,\n strapiVersion,\n } = useAppInfo();\n\n const AdminSeatInfo = useEnterprise(\n AdminSeatInfoCE,\n async () =>\n (\n await import(\n '../../../../../../ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo'\n )\n ).AdminSeatInfoEE\n );\n\n const {\n allowedActions: { canRead, canUpdate },\n } = useRBAC(settings ? settings['project-settings'] : {});\n\n useFocusWhenNavigate();\n\n const handleSubmit: React.FormEventHandler<HTMLFormElement> = (e) => {\n e.preventDefault();\n\n updateProjectSettings({\n authLogo: logos.auth.custom ?? null,\n menuLogo: logos.menu.custom ?? null,\n });\n };\n\n const handleChangeLogo =\n (logo: 'menu' | 'auth'): LogoInputProps['onChangeLogo'] =>\n (newLogo) => {\n /**\n * If there's no newLogo value we can assume we're reseting.\n */\n if (newLogo === null) {\n trackUsage('didClickResetLogo', {\n logo,\n });\n }\n\n setLogos((prev) => ({\n ...prev,\n [logo]: {\n ...prev[logo],\n custom: newLogo,\n },\n }));\n };\n\n React.useEffect(() => {\n setLogos({\n menu: serverLogos.menu,\n auth: serverLogos.auth,\n });\n }, [serverLogos]);\n\n // block rendering until the EE component is fully loaded\n if (!AdminSeatInfo) {\n return null;\n }\n\n const isSaveDisabled =\n logos.auth.custom === serverLogos.auth.custom && logos.menu.custom === serverLogos.menu.custom;\n\n return (\n <Layout>\n <SettingsPageTitle\n name={formatMessage({\n id: 'Settings.application.header',\n defaultMessage: 'Application',\n })}\n />\n <Main>\n <form onSubmit={handleSubmit}>\n <HeaderLayout\n title={formatMessage({\n id: 'Settings.application.title',\n defaultMessage: 'Overview',\n })}\n subtitle={formatMessage({\n id: 'Settings.application.description',\n defaultMessage: 'Administration panel’s global information',\n })}\n primaryAction={\n canUpdate && (\n <Button disabled={isSaveDisabled} type=\"submit\" startIcon={<Check />}>\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n )\n }\n />\n <ContentLayout>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n gap={4}\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingRight={7}\n paddingLeft={7}\n >\n <Typography variant=\"delta\" as=\"h3\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n\n <Grid gap={5} as=\"dl\">\n <GridItem col={6} s={12}>\n <Typography variant=\"sigma\" textColor=\"neutral600\" as=\"dt\">\n {formatMessage({\n id: 'Settings.application.strapiVersion',\n defaultMessage: 'strapi version',\n })}\n </Typography>\n <Flex gap={3} direction=\"column\" alignItems=\"start\" as=\"dd\">\n <Typography>v{strapiVersion}</Typography>\n {shouldUpdateStrapi && (\n <Link\n href={`https://github.com/strapi/strapi/releases/tag/${latestStrapiReleaseTag}`}\n endIcon={<ExternalLink />}\n >\n {formatMessage({\n id: 'Settings.application.link-upgrade',\n defaultMessage: 'Upgrade your admin panel',\n })}\n </Link>\n )}\n </Flex>\n </GridItem>\n <GridItem col={6} s={12}>\n <Typography variant=\"sigma\" textColor=\"neutral600\" as=\"dt\">\n {formatMessage({\n id: 'Settings.application.edition-title',\n defaultMessage: 'current plan',\n })}\n </Typography>\n <Flex gap={3} direction=\"column\" alignItems=\"start\" as=\"dd\">\n <Typography>\n {formatMessage(\n {\n id: 'Settings.application.ee-or-ce',\n defaultMessage:\n '{communityEdition, select, true {Community Edition} other {Enterprise Edition}}',\n },\n { communityEdition }\n )}\n </Typography>\n <Link href=\"https://strapi.io/pricing-self-hosted\" endIcon={<ExternalLink />}>\n {formatMessage({\n id: 'Settings.application.link-pricing',\n defaultMessage: 'See all pricing plans',\n })}\n </Link>\n </Flex>\n </GridItem>\n\n <GridItem col={6} s={12}>\n <Typography variant=\"sigma\" textColor=\"neutral600\" as=\"dt\">\n {formatMessage({\n id: 'Settings.application.node-version',\n defaultMessage: 'node version',\n })}\n </Typography>\n <Typography as=\"dd\">{nodeVersion}</Typography>\n </GridItem>\n <AdminSeatInfo />\n </Grid>\n </Flex>\n {canRead && (\n <Box\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingRight={7}\n paddingLeft={7}\n >\n <Typography variant=\"delta\" as=\"h3\">\n {formatMessage({\n id: 'Settings.application.customization',\n defaultMessage: 'Customization',\n })}\n </Typography>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: 'Settings.application.customization.size-details',\n defaultMessage:\n 'Max dimension: {dimension}×{dimension}, Max file size: {size}KB',\n },\n { dimension: DIMENSION, size: SIZE }\n )}\n </Typography>\n <Grid paddingTop={4} gap={4}>\n <GridItem col={6} s={12}>\n <LogoInput\n canUpdate={canUpdate}\n customLogo={logos.menu.custom}\n defaultLogo={logos.menu.default}\n hint={formatMessage({\n id: 'Settings.application.customization.menu-logo.carousel-hint',\n defaultMessage: 'Replace the logo in the main navigation',\n })}\n label={formatMessage({\n id: 'Settings.application.customization.carousel.menu-logo.title',\n defaultMessage: 'Menu logo',\n })}\n onChangeLogo={handleChangeLogo('menu')}\n />\n </GridItem>\n <GridItem col={6} s={12}>\n <LogoInput\n canUpdate={canUpdate}\n customLogo={logos.auth.custom}\n defaultLogo={logos.auth.default}\n hint={formatMessage({\n id: 'Settings.application.customization.auth-logo.carousel-hint',\n defaultMessage: 'Replace the logo in the authentication pages',\n })}\n label={formatMessage({\n id: 'Settings.application.customization.carousel.auth-logo.title',\n defaultMessage: 'Auth logo',\n })}\n onChangeLogo={handleChangeLogo('auth')}\n />\n </GridItem>\n </Grid>\n </Box>\n )}\n </Flex>\n </ContentLayout>\n </form>\n </Main>\n </Layout>\n );\n};\n\nexport { ApplicationInfoPage };\n","import * as React from 'react';\n\nimport { Layout } from '@strapi/design-system';\nimport { LoadingIndicatorPage, useStrapiApp } from '@strapi/helper-plugin';\nimport { Helmet } from 'react-helmet';\nimport { useIntl } from 'react-intl';\nimport { Redirect, Route, Switch, useParams } from 'react-router-dom';\n\nimport { useEnterprise } from '../../hooks/useEnterprise';\nimport { useSettingsMenu } from '../../hooks/useSettingsMenu';\nimport { createRoute } from '../../utils/createRoute';\n\nimport { SettingsNav } from './components/SettingsNav';\nimport { ROUTES_CE, Route as IRoute } from './constants';\nimport { ApplicationInfoPage } from './pages/ApplicationInfo/ApplicationInfoPage';\n\nconst SettingsPage = () => {\n const { settingId } = useParams<{ settingId: string }>();\n const { settings } = useStrapiApp();\n const { formatMessage } = useIntl();\n const { isLoading, menu } = useSettingsMenu();\n const routes = useEnterprise(\n ROUTES_CE,\n async () => (await import('../../../../ee/admin/src/pages/SettingsPage/constants')).ROUTES_EE,\n {\n combine(ceRoutes, eeRoutes) {\n return [...ceRoutes, ...eeRoutes];\n },\n defaultValue: [],\n }\n );\n\n // Creates the admin routes\n const adminRoutes = React.useMemo(() => {\n return makeUniqueRoutes(routes).map(({ to, Component, exact }) =>\n createRoute(Component, to, exact)\n );\n }, [routes]);\n\n const pluginsRoutes = Object.values(settings).flatMap((section) => {\n const { links } = section;\n\n return links.map((link) => createRoute(link.Component, link.to, link.exact || false));\n });\n\n // Since the useSettingsMenu hook can make API calls in order to check the links permissions\n // We need to add a loading state to prevent redirecting the user while permissions are being checked\n if (isLoading) {\n return <LoadingIndicatorPage />;\n }\n\n if (!settingId) {\n return <Redirect to=\"/settings/application-infos\" />;\n }\n\n return (\n <Layout sideNav={<SettingsNav menu={menu} />}>\n <Helmet\n title={formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n })}\n />\n\n <Switch>\n <Route path=\"/settings/application-infos\" component={ApplicationInfoPage} exact />\n {adminRoutes}\n {pluginsRoutes}\n </Switch>\n </Layout>\n );\n};\n\nexport const makeUniqueRoutes = (routes: IRoute[]) =>\n routes.filter(\n (route, index, refArray) => refArray.findIndex((obj) => obj.to === route.to) === index\n );\n\nexport { SettingsPage };\n"],"names":["React","useRBACProvider","useAppInfo","useStrapiApp","useSelector","selectAdminPermissions","SETTINGS_LINKS_CE","useEnterprise","ceLinks","sections","hasPermissions","permission","sortBy","styled","Icon","useIntl","useTracking","useLocation","jsxs","SubNav","jsx","SubNavHeader","SubNavSections","SubNavSection","SubNavLink","NavLink","Lock","createContext","CarouselInput","CarouselActions","IconButton","Plus","Refresh","CarouselSlide","Box","ModalLayout","ModalHeader","Typography","TabGroup","Tabs","Tab","Divider","TabPanels","TabPanel","axios","AxiosError","TextInput","ModalFooter","Button","Fragment","Field","Flex","pxToRem","PicturePlus","FieldError","FieldInput","Card","CardHeader","CardAsset","CardBody","CardContent","CardTitle","CardSubtitle","CardBadge","useConfiguration","useRBAC","useFocusWhenNavigate","Layout","SettingsPageTitle","Main","HeaderLayout","Check","ContentLayout","Grid","GridItem","Link","ExternalLink","useParams","createRoute","LoadingIndicatorPage","Redirect","Helmet","Switch","Route","index"],"mappings":"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"}
1
+ {"version":3,"file":"SettingsPage-7Rs7LOuF.js","sources":["../../admin/src/hooks/useSettingsMenu.ts","../../admin/src/pages/Settings/components/SettingsNav.tsx","../../admin/src/pages/Settings/constants.ts","../../admin/src/pages/Settings/pages/ApplicationInfo/utils/constants.ts","../../admin/src/pages/Settings/pages/ApplicationInfo/utils/files.ts","../../admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.tsx","../../admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.tsx","../../admin/src/pages/Settings/SettingsPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n hasPermissions,\n StrapiAppSetting,\n StrapiAppSettingLink as IStrapiAppSettingLink,\n useRBACProvider,\n useStrapiApp,\n useAppInfo,\n} from '@strapi/helper-plugin';\nimport sortBy from 'lodash/sortBy';\nimport { useSelector } from 'react-redux';\n\nimport { SETTINGS_LINKS_CE, SettingsMenuLink } from '../constants';\nimport { selectAdminPermissions } from '../selectors';\nimport { PermissionMap } from '../types/permissions';\n\nimport { useEnterprise } from './useEnterprise';\n\nconst formatLinks = (menu: SettingsMenuSection[]): SettingsMenuSectionWithDisplayedLinks[] =>\n menu.map((menuSection) => {\n const formattedLinks = menuSection.links.map((link) => ({\n ...link,\n isDisplayed: false,\n }));\n\n return { ...menuSection, links: formattedLinks };\n });\n\ninterface SettingsMenuLinkWithPermissions extends SettingsMenuLink {\n permissions: IStrapiAppSettingLink['permissions'];\n hasNotification?: boolean;\n}\n\ninterface StrapiAppSettingsLink extends IStrapiAppSettingLink {\n lockIcon?: never;\n hasNotification?: never;\n}\n\ninterface SettingsMenuSection extends Omit<StrapiAppSetting, 'links'> {\n links: Array<SettingsMenuLinkWithPermissions | StrapiAppSettingsLink>;\n}\n\ninterface SettingsMenuLinkWithPermissionsAndDisplayed extends SettingsMenuLinkWithPermissions {\n isDisplayed: boolean;\n}\n\ninterface StrapiAppSettingLinkWithDisplayed extends StrapiAppSettingsLink {\n isDisplayed: boolean;\n}\n\ninterface SettingsMenuSectionWithDisplayedLinks extends Omit<SettingsMenuSection, 'links'> {\n links: Array<SettingsMenuLinkWithPermissionsAndDisplayed | StrapiAppSettingLinkWithDisplayed>;\n}\n\ntype SettingsMenu = SettingsMenuSectionWithDisplayedLinks[];\n\nconst useSettingsMenu = (): {\n isLoading: boolean;\n menu: SettingsMenu;\n} => {\n const [{ isLoading, menu }, setData] = React.useState<{\n isLoading: boolean;\n menu: SettingsMenu;\n }>({\n isLoading: true,\n menu: [],\n });\n const { allPermissions: userPermissions } = useRBACProvider();\n const { shouldUpdateStrapi } = useAppInfo();\n const { settings } = useStrapiApp();\n const permissions = useSelector(selectAdminPermissions);\n\n /**\n * memoize the return value of this function to avoid re-computing it on every render\n * because it's used in an effect it ends up re-running recursively.\n */\n const ceLinks = React.useMemo(() => SETTINGS_LINKS_CE(), []);\n\n const { admin: adminLinks, global: globalLinks } = useEnterprise(\n ceLinks,\n async () => (await import('../../../ee/admin/src/constants')).SETTINGS_LINKS_EE(),\n {\n combine(ceLinks, eeLinks) {\n return {\n admin: [...eeLinks.admin, ...ceLinks.admin],\n global: [...ceLinks.global, ...eeLinks.global],\n };\n },\n defaultValue: {\n admin: [],\n global: [],\n },\n }\n );\n\n const addPermissions = React.useCallback(\n (link: SettingsMenuLink) => {\n if (!link.id) {\n throw new Error('The settings menu item must have an id attribute.');\n }\n\n return {\n ...link,\n permissions: permissions.settings?.[link.id as keyof PermissionMap['settings']]?.main ?? [],\n } satisfies SettingsMenuLinkWithPermissions;\n },\n [permissions.settings]\n );\n\n React.useEffect(() => {\n const getData = async () => {\n interface MenuLinkPermission {\n hasPermission: boolean;\n sectionIndex: number;\n linkIndex: number;\n }\n\n const buildMenuPermissions = (sections: SettingsMenuSectionWithDisplayedLinks[]) =>\n Promise.all(\n sections.reduce<Promise<MenuLinkPermission>[]>((acc, section, sectionIndex) => {\n const linksWithPermissions = section.links.map(async (link, linkIndex) => ({\n hasPermission: await hasPermissions(userPermissions, link.permissions),\n sectionIndex,\n linkIndex,\n }));\n\n return [...acc, ...linksWithPermissions];\n }, [])\n );\n\n const menuPermissions = await buildMenuPermissions(sections);\n\n setData((prev) => {\n return {\n ...prev,\n isLoading: false,\n menu: sections.map((section, sectionIndex) => ({\n ...section,\n links: section.links.map((link, linkIndex) => {\n const permission = menuPermissions.find(\n (permission) =>\n permission.sectionIndex === sectionIndex && permission.linkIndex === linkIndex\n );\n\n return {\n ...link,\n isDisplayed: Boolean(permission?.hasPermission),\n };\n }),\n })),\n };\n });\n };\n\n const { global, ...otherSections } = settings;\n const sections = formatLinks([\n {\n ...global,\n links: sortBy([...global.links, ...globalLinks.map(addPermissions)], (link) => link.id).map(\n (link) => ({\n ...link,\n hasNotification: link.id === '000-application-infos' && shouldUpdateStrapi,\n })\n ),\n },\n {\n id: 'permissions',\n intlLabel: { id: 'Settings.permissions', defaultMessage: 'Administration Panel' },\n links: adminLinks.map(addPermissions),\n },\n ...Object.values(otherSections),\n ]);\n\n getData();\n }, [adminLinks, globalLinks, userPermissions, settings, shouldUpdateStrapi, addPermissions]);\n\n return {\n isLoading,\n menu: menu.map((menuItem) => ({\n ...menuItem,\n links: menuItem.links.filter((link) => link.isDisplayed),\n })),\n };\n};\n\nexport { useSettingsMenu };\nexport type { SettingsMenu };\n","import { Icon } from '@strapi/design-system';\nimport {\n SubNav,\n SubNavHeader,\n SubNavLink,\n SubNavSection,\n SubNavSections,\n} from '@strapi/design-system/v2';\nimport { useTracking } from '@strapi/helper-plugin';\nimport { Lock } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useLocation } from 'react-router-dom';\nimport styled from 'styled-components';\n\nimport { SettingsMenu } from '../../../hooks/useSettingsMenu';\n\n/**\n * TODO: refactor the SubNav entirely, we shouldn't have\n * to do this hack to work a lock at the end. It's a bit hacky.\n */\n\nconst CustomIcon = styled(Icon)`\n right: 15px;\n position: absolute;\n`;\n\ninterface SettingsNavProps {\n menu: SettingsMenu;\n}\n\nconst SettingsNav = ({ menu }: SettingsNavProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { pathname } = useLocation();\n\n const filteredMenu = menu.filter(\n (section) => !section.links.every((link) => link.isDisplayed === false)\n );\n\n const sections = filteredMenu.map((section) => {\n return {\n ...section,\n title: section.intlLabel,\n links: section.links.map((link) => {\n return {\n ...link,\n title: link.intlLabel,\n name: link.id,\n };\n }),\n };\n });\n\n const label = formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n });\n\n const handleClickOnLink = (destination: string) => () => {\n trackUsage('willNavigate', { from: pathname, to: destination });\n };\n\n return (\n <SubNav ariaLabel={label}>\n <SubNavHeader label={label} />\n <SubNavSections>\n {sections.map((section) => (\n <SubNavSection key={section.id} label={formatMessage(section.intlLabel)}>\n {section.links.map((link) => {\n return (\n <SubNavLink\n as={NavLink}\n withBullet={link.hasNotification}\n // @ts-expect-error – this is an issue with the DS where as props are not inferred\n to={link.to}\n onClick={handleClickOnLink(link.to)}\n key={link.id}\n >\n {formatMessage(link.intlLabel)}\n {link?.lockIcon && (\n <CustomIcon width={`${15 / 16}rem`} height={`${15 / 16}rem`} as={Lock} />\n )}\n </SubNavLink>\n );\n })}\n </SubNavSection>\n ))}\n </SubNavSections>\n </SubNav>\n );\n};\n\nexport { SettingsNav };\nexport type { SettingsNavProps };\n","import { MenuItem } from '@strapi/helper-plugin';\n\nexport interface Route\n extends Pick<MenuItem, 'exact' | 'to'>,\n Required<Pick<MenuItem, 'Component'>> {}\n\nexport const ROUTES_CE: Route[] = [\n {\n async Component() {\n const { ProtectedListPage } = await import('./pages/Roles/ListPage');\n\n return ProtectedListPage;\n },\n to: '/settings/roles',\n exact: true,\n },\n {\n async Component() {\n const { ProtectedCreatePage } = await import('./pages/Roles/CreatePage');\n\n return ProtectedCreatePage;\n },\n to: '/settings/roles/duplicate/:id',\n exact: true,\n },\n {\n async Component() {\n const { ProtectedCreatePage } = await import('./pages/Roles/CreatePage');\n\n return ProtectedCreatePage;\n },\n to: '/settings/roles/new',\n exact: true,\n },\n {\n async Component() {\n const { ProtectedEditPage } = await import('./pages/Roles/EditPage');\n\n return ProtectedEditPage;\n },\n to: '/settings/roles/:id',\n exact: true,\n },\n {\n async Component() {\n const { ProtectedListPage } = await import('./pages/Users/ListPage');\n\n return ProtectedListPage;\n },\n to: '/settings/users',\n exact: true,\n },\n {\n async Component() {\n const { ProtectedEditPage } = await import('./pages/Users/EditPage');\n\n return ProtectedEditPage;\n },\n to: '/settings/users/:id',\n exact: true,\n },\n {\n async Component() {\n const { ProtectedCreatePage } = await import('./pages/Webhooks/CreatePage');\n\n return ProtectedCreatePage;\n },\n to: '/settings/webhooks/create',\n exact: true,\n },\n {\n async Component() {\n const { ProtectedEditPage } = await import('./pages/Webhooks/EditPage');\n\n return ProtectedEditPage;\n },\n to: '/settings/webhooks/:id',\n exact: true,\n },\n {\n async Component() {\n const { ProtectedListPage } = await import('./pages/Webhooks/ListPage');\n\n return ProtectedListPage;\n },\n to: '/settings/webhooks',\n exact: true,\n },\n {\n async Component() {\n const { ProtectedListView } = await import('./pages/ApiTokens/ListView');\n\n return ProtectedListView;\n },\n to: '/settings/api-tokens',\n exact: true,\n },\n {\n async Component() {\n const { ProtectedCreateView } = await import('./pages/ApiTokens/CreateView');\n\n return ProtectedCreateView;\n },\n to: '/settings/api-tokens/create',\n exact: true,\n },\n {\n async Component() {\n const { ProtectedEditView } = await import('./pages/ApiTokens/EditView/EditViewPage');\n\n return ProtectedEditView;\n },\n to: '/settings/api-tokens/:id',\n exact: true,\n },\n {\n async Component() {\n const { ProtectedCreateView } = await import('./pages/TransferTokens/CreateView');\n\n return ProtectedCreateView;\n },\n to: '/settings/transfer-tokens/create',\n exact: true,\n },\n {\n async Component() {\n const { ProtectedListView } = await import('./pages/TransferTokens/ListView');\n\n return ProtectedListView;\n },\n to: '/settings/transfer-tokens',\n exact: true,\n },\n {\n async Component() {\n const { ProtectedEditView } = await import('./pages/TransferTokens/EditView');\n\n return ProtectedEditView;\n },\n to: '/settings/transfer-tokens/:id',\n exact: true,\n },\n {\n async Component() {\n const { PurchaseAuditLogs } = await import('./pages/PurchaseAuditLogs');\n\n return PurchaseAuditLogs;\n },\n to: '/settings/purchase-audit-logs',\n exact: true,\n },\n {\n async Component() {\n const { PurchaseReviewWorkflows } = await import('./pages/PurchaseReviewWorkflows');\n\n return PurchaseReviewWorkflows;\n },\n to: '/settings/purchase-review-workflows',\n exact: true,\n },\n {\n async Component() {\n const { PurchaseSingleSignOn } = await import('./pages/PurchaseSingleSignOn');\n\n return PurchaseSingleSignOn;\n },\n to: '/settings/purchase-single-sign-on',\n exact: true,\n },\n];\n","export const DIMENSION = 750;\nexport const SIZE = 100;\nexport const ACCEPTED_FORMAT = ['image/jpeg', 'image/png', 'image/svg+xml'];\n","import { ACCEPTED_FORMAT, DIMENSION, SIZE } from './constants';\n\nimport type { MessageDescriptor } from 'react-intl';\n\nconst FILE_FORMAT_ERROR_MESSAGE = {\n id: 'Settings.application.customization.modal.upload.error-format',\n defaultMessage: 'Wrong format uploaded (accepted formats only: jpeg, jpg, png, svg).',\n};\n\nconst FILE_SIZING_ERROR_MESSAGE = {\n id: 'Settings.application.customization.modal.upload.error-size',\n defaultMessage:\n 'The file uploaded is too large (max dimension: {dimension}x{dimension}, max file size: {size}KB)',\n};\n\ninterface ImageDimensions {\n height: number;\n width: number;\n}\n\ninterface ImageAsset extends ImageDimensions {\n ext: string | undefined;\n size: number;\n name: string;\n url: string;\n rawFile: File;\n}\n\nconst parseFileMetadatas = async (file: File): Promise<ImageAsset> => {\n const isFormatAuthorized = ACCEPTED_FORMAT.includes(file.type);\n\n if (!isFormatAuthorized) {\n throw new ParsingFileError('File format', FILE_FORMAT_ERROR_MESSAGE);\n }\n\n const fileDimensions = await new Promise<ImageDimensions>((resolve) => {\n const reader = new FileReader();\n reader.onload = () => {\n const img = new Image();\n img.onload = () => {\n resolve({ width: img.width, height: img.height });\n };\n img.src = reader.result as string;\n };\n reader.readAsDataURL(file);\n });\n\n const areDimensionsAuthorized =\n fileDimensions.width <= DIMENSION && fileDimensions.height <= DIMENSION;\n\n if (!areDimensionsAuthorized) {\n throw new ParsingFileError('File sizing', FILE_SIZING_ERROR_MESSAGE);\n }\n\n const asset = {\n ext: file.name.split('.').pop(),\n size: file.size / 1000,\n name: file.name,\n url: URL.createObjectURL(file),\n rawFile: file,\n width: fileDimensions.width,\n height: fileDimensions.height,\n };\n\n const isSizeAuthorized = asset.size <= SIZE;\n\n if (!isSizeAuthorized) {\n throw new ParsingFileError('File sizing', FILE_SIZING_ERROR_MESSAGE);\n }\n\n return asset;\n};\n\nclass ParsingFileError extends Error {\n displayMessage: MessageDescriptor;\n\n constructor(message: string, displayMessage: MessageDescriptor, options?: ErrorOptions) {\n super(message, options);\n this.displayMessage = displayMessage;\n }\n}\n\nexport { parseFileMetadatas, ParsingFileError };\nexport type { ImageAsset };\n","import * as React from 'react';\n\nimport { createContext } from '@radix-ui/react-context';\nimport {\n Box,\n Button,\n ButtonProps,\n Card,\n CardAsset,\n CardBadge,\n CardBody,\n CardContent,\n CardHeader,\n CardSubtitle,\n CardTitle,\n CarouselActions,\n CarouselInput,\n CarouselInputProps,\n CarouselSlide,\n Divider,\n Field,\n FieldError,\n FieldInput,\n Flex,\n Icon,\n IconButton,\n ModalFooter,\n ModalHeader,\n ModalLayout,\n Tab,\n TabGroup,\n TabPanel,\n TabPanels,\n Tabs,\n TextInput,\n TextInputProps,\n Typography,\n} from '@strapi/design-system';\nimport { pxToRem } from '@strapi/helper-plugin';\nimport { PicturePlus, Plus, Refresh } from '@strapi/icons';\nimport axios, { AxiosError } from 'axios';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { ConfigurationProviderProps } from '../../../../../features/Configuration';\nimport { ACCEPTED_FORMAT, DIMENSION, SIZE } from '../utils/constants';\nimport { ImageAsset, ParsingFileError, parseFileMetadatas } from '../utils/files';\n\n/* -------------------------------------------------------------------------------------------------\n * LogoInputContext\n * -----------------------------------------------------------------------------------------------*/\n\ninterface LogoInputContextValue {\n localImage: ImageAsset | undefined;\n goToStep: (step: Step) => void;\n onClose: () => void;\n setLocalImage: (asset: ImageAsset | undefined) => void;\n}\n\nconst [LogoInputContextProvider, useLogoInputContext] =\n createContext<LogoInputContextValue>('LogoInput');\n\n/* -------------------------------------------------------------------------------------------------\n * LogoInput\n * -----------------------------------------------------------------------------------------------*/\n\ninterface LogoInputProps\n extends Pick<PendingLogoDialogProps, 'onChangeLogo'>,\n Pick<CarouselInputProps, 'label' | 'hint'> {\n canUpdate: boolean;\n customLogo?: ConfigurationProviderProps['authLogo']['custom'];\n defaultLogo: string;\n}\n\ntype Step = 'pending' | 'upload' | undefined;\n\nconst LogoInput = ({\n canUpdate,\n customLogo,\n defaultLogo,\n hint,\n label,\n onChangeLogo,\n}: LogoInputProps) => {\n const [localImage, setLocalImage] = React.useState<ImageAsset | undefined>();\n const [currentStep, setCurrentStep] = React.useState<Step>();\n const { formatMessage } = useIntl();\n\n const handleClose = () => {\n setLocalImage(undefined);\n setCurrentStep(undefined);\n };\n\n return (\n <LogoInputContextProvider\n setLocalImage={setLocalImage}\n localImage={localImage}\n goToStep={setCurrentStep}\n onClose={handleClose}\n >\n <CarouselInput\n label={label}\n selectedSlide={0}\n hint={hint}\n // Carousel is used here for a single media,\n // we don't need previous and next labels but these props are required\n previousLabel=\"\"\n nextLabel=\"\"\n onNext={() => {}}\n onPrevious={() => {}}\n secondaryLabel={customLogo?.name || 'logo.png'}\n actions={\n <CarouselActions>\n <IconButton\n disabled={!canUpdate}\n onClick={() => setCurrentStep('upload')}\n label={formatMessage({\n id: 'Settings.application.customization.carousel.change-action',\n defaultMessage: 'Change logo',\n })}\n icon={<Plus />}\n />\n {customLogo?.url && (\n <IconButton\n disabled={!canUpdate}\n onClick={() => onChangeLogo(null)}\n label={formatMessage({\n id: 'Settings.application.customization.carousel.reset-action',\n defaultMessage: 'Reset logo',\n })}\n icon={<Refresh />}\n />\n )}\n </CarouselActions>\n }\n >\n <CarouselSlide\n label={formatMessage({\n id: 'Settings.application.customization.carousel-slide.label',\n defaultMessage: 'Logo slide',\n })}\n >\n <Box\n maxHeight=\"40%\"\n maxWidth=\"40%\"\n as=\"img\"\n src={customLogo?.url || defaultLogo}\n alt={formatMessage({\n id: 'Settings.application.customization.carousel.title',\n defaultMessage: 'Logo',\n })}\n />\n </CarouselSlide>\n </CarouselInput>\n {currentStep ? (\n <ModalLayout labelledBy=\"modal\" onClose={handleClose}>\n <ModalHeader>\n <Typography fontWeight=\"bold\" as=\"h2\" id=\"modal\">\n {formatMessage(\n currentStep === 'upload'\n ? {\n id: 'Settings.application.customization.modal.upload',\n defaultMessage: 'Upload logo',\n }\n : {\n id: 'Settings.application.customization.modal.pending',\n defaultMessage: 'Pending logo',\n }\n )}\n </Typography>\n </ModalHeader>\n {currentStep === 'upload' ? (\n <AddLogoDialog />\n ) : (\n <PendingLogoDialog onChangeLogo={onChangeLogo} />\n )}\n </ModalLayout>\n ) : null}\n </LogoInputContextProvider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AddLogoDialog\n * -----------------------------------------------------------------------------------------------*/\n\nconst AddLogoDialog = () => {\n const { formatMessage } = useIntl();\n\n return (\n <TabGroup\n label={formatMessage({\n id: 'Settings.application.customization.modal.tab.label',\n defaultMessage: 'How do you want to upload your assets?',\n })}\n variant=\"simple\"\n >\n <Box paddingLeft={8} paddingRight={8}>\n <Tabs>\n <Tab>\n {formatMessage({\n id: 'Settings.application.customization.modal.upload.from-computer',\n defaultMessage: 'From computer',\n })}\n </Tab>\n <Tab>\n {formatMessage({\n id: 'Settings.application.customization.modal.upload.from-url',\n defaultMessage: 'From url',\n })}\n </Tab>\n </Tabs>\n <Divider />\n </Box>\n <TabPanels>\n <TabPanel>\n <ComputerForm />\n </TabPanel>\n <TabPanel>\n <URLForm />\n </TabPanel>\n </TabPanels>\n </TabGroup>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * URLForm\n * -----------------------------------------------------------------------------------------------*/\n\nconst URLForm = () => {\n const { formatMessage } = useIntl();\n const [logoUrl, setLogoUrl] = React.useState('');\n const [error, setError] = React.useState<string>();\n const { setLocalImage, goToStep, onClose } = useLogoInputContext('URLForm');\n\n const handleChange: TextInputProps['onChange'] = (e) => {\n setLogoUrl(e.target.value);\n };\n\n const handleSubmit: React.FormEventHandler<HTMLFormElement> = async (event) => {\n event.preventDefault();\n\n const data = new FormData(event.target as HTMLFormElement);\n\n const url = data.get('logo-url');\n\n if (!url) {\n return;\n }\n\n try {\n const res = await axios.get(url.toString(), { responseType: 'blob', timeout: 8000 });\n\n const file = new File([res.data], res.config.url ?? '', {\n type: res.headers['content-type'],\n });\n\n const asset = await parseFileMetadatas(file);\n\n setLocalImage(asset);\n goToStep('pending');\n } catch (err) {\n if (err instanceof AxiosError) {\n setError(\n formatMessage({\n id: 'Settings.application.customization.modal.upload.error-network',\n defaultMessage: 'Network error',\n })\n );\n } else if (err instanceof ParsingFileError) {\n setError(formatMessage(err.displayMessage, { size: SIZE, dimension: DIMENSION }));\n } else {\n throw err;\n }\n }\n };\n\n return (\n <form onSubmit={handleSubmit}>\n <Box paddingLeft={8} paddingRight={8} paddingTop={6} paddingBottom={6}>\n <TextInput\n label={formatMessage({\n id: 'Settings.application.customization.modal.upload.from-url.input-label',\n defaultMessage: 'URL',\n })}\n error={error}\n onChange={handleChange}\n value={logoUrl}\n name=\"logo-url\"\n />\n </Box>\n <ModalFooter\n startActions={\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'Cancel' })}\n </Button>\n }\n endActions={\n <Button type=\"submit\">\n {formatMessage({\n id: 'Settings.application.customization.modal.upload.next',\n defaultMessage: 'Next',\n })}\n </Button>\n }\n />\n </form>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ComputerForm\n * -----------------------------------------------------------------------------------------------*/\n\nconst ComputerForm = () => {\n const { formatMessage } = useIntl();\n const [dragOver, setDragOver] = React.useState(false);\n const [fileError, setFileError] = React.useState<string>();\n const inputRef = React.useRef<HTMLInputElement>(null!);\n const id = React.useId();\n\n const { setLocalImage, goToStep, onClose } = useLogoInputContext('ComputerForm');\n\n const handleDragEnter = () => setDragOver(true);\n const handleDragLeave = () => setDragOver(false);\n\n const handleClick: ButtonProps['onClick'] = (e) => {\n e.preventDefault();\n inputRef.current.click();\n };\n\n const handleChange = async () => {\n handleDragLeave();\n\n if (!inputRef.current.files) {\n return;\n }\n\n const [file] = inputRef.current.files;\n\n try {\n const asset = await parseFileMetadatas(file);\n setLocalImage(asset);\n goToStep('pending');\n } catch (err) {\n if (err instanceof ParsingFileError) {\n setFileError(formatMessage(err.displayMessage, { size: SIZE, dimension: DIMENSION }));\n inputRef.current.focus();\n } else {\n throw err;\n }\n }\n };\n\n return (\n <>\n <form>\n <Box paddingLeft={8} paddingRight={8} paddingTop={6} paddingBottom={6}>\n <Field name={id} error={fileError}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Flex\n paddingTop={9}\n paddingBottom={7}\n hasRadius\n justifyContent=\"center\"\n direction=\"column\"\n background={dragOver ? 'primary100' : 'neutral100'}\n borderColor={dragOver ? 'primary500' : fileError ? 'danger600' : 'neutral300'}\n borderStyle=\"dashed\"\n borderWidth=\"1px\"\n position=\"relative\"\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n >\n <Icon\n color=\"primary600\"\n width={pxToRem(60)}\n height={pxToRem(60)}\n as={PicturePlus}\n aria-hidden\n />\n <Box paddingTop={3} paddingBottom={5}>\n <Typography variant=\"delta\" as=\"label\" htmlFor={id}>\n {formatMessage({\n id: 'Settings.application.customization.modal.upload.drag-drop',\n defaultMessage: 'Drag and Drop here or',\n })}\n </Typography>\n </Box>\n <FileInput\n accept={ACCEPTED_FORMAT.join(', ')}\n type=\"file\"\n name=\"files\"\n tabIndex={-1}\n onChange={handleChange}\n ref={inputRef}\n id={id}\n />\n <Button type=\"button\" onClick={handleClick}>\n {formatMessage({\n id: 'Settings.application.customization.modal.upload.cta.browse',\n defaultMessage: 'Browse files',\n })}\n </Button>\n <Box paddingTop={6}>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: 'Settings.application.customization.modal.upload.file-validation',\n defaultMessage:\n 'Max dimension: {dimension}x{dimension}, Max size: {size}KB',\n },\n { size: SIZE, dimension: DIMENSION }\n )}\n </Typography>\n </Box>\n </Flex>\n <FieldError />\n </Flex>\n </Field>\n </Box>\n </form>\n <ModalFooter\n startActions={\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({\n id: 'Settings.application.customization.modal.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n }\n />\n </>\n );\n};\n\nconst FileInput = styled(FieldInput)`\n opacity: 0;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 1;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * PendingLogoDialog\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PendingLogoDialogProps {\n onChangeLogo: (file: ImageAsset | null) => void;\n}\n\nconst PendingLogoDialog = ({ onChangeLogo }: PendingLogoDialogProps) => {\n const { formatMessage } = useIntl();\n const { localImage, setLocalImage, goToStep, onClose } = useLogoInputContext('PendingLogoDialog');\n\n const handleGoBack = () => {\n setLocalImage(undefined);\n goToStep('upload');\n };\n\n const handleUpload = () => {\n if (localImage) {\n onChangeLogo(localImage);\n }\n onClose();\n };\n\n return (\n <>\n <Box paddingLeft={8} paddingRight={8} paddingTop={6} paddingBottom={6}>\n <Flex justifyContent=\"space-between\" paddingBottom={6}>\n <Flex direction=\"column\" alignItems=\"flex-start\">\n <Typography variant=\"pi\" fontWeight=\"bold\">\n {formatMessage({\n id: 'Settings.application.customization.modal.pending.title',\n defaultMessage: 'Logo ready to upload',\n })}\n </Typography>\n <Typography variant=\"pi\" textColor=\"neutral500\">\n {formatMessage({\n id: 'Settings.application.customization.modal.pending.subtitle',\n defaultMessage: 'Manage the chosen logo before uploading it',\n })}\n </Typography>\n </Flex>\n <Button onClick={handleGoBack} variant=\"secondary\">\n {formatMessage({\n id: 'Settings.application.customization.modal.pending.choose-another',\n defaultMessage: 'Choose another logo',\n })}\n </Button>\n </Flex>\n <Box maxWidth={pxToRem(180)}>\n {localImage?.url ? <ImageCardAsset asset={localImage} /> : null}\n </Box>\n </Box>\n <ModalFooter\n startActions={\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({\n id: 'Settings.application.customization.modal.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n }\n endActions={\n <Button onClick={handleUpload}>\n {formatMessage({\n id: 'Settings.application.customization.modal.pending.upload',\n defaultMessage: 'Upload logo',\n })}\n </Button>\n }\n />\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ImageCardAsset\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ImageCardAssetProps {\n asset: ImageAsset;\n}\n\nconst ImageCardAsset = ({ asset }: ImageCardAssetProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Card>\n <CardHeader>\n <CardAsset size=\"S\" src={asset.url} />\n </CardHeader>\n <CardBody>\n <CardContent>\n <CardTitle>{asset.name}</CardTitle>\n <CardSubtitle>\n {`${asset.ext?.toUpperCase()} - ${asset.width}✕${asset.height}`}\n </CardSubtitle>\n </CardContent>\n <CardBadge>\n {formatMessage({\n id: 'Settings.application.customization.modal.pending.card-badge',\n defaultMessage: 'image',\n })}\n </CardBadge>\n </CardBody>\n </Card>\n );\n};\n\nexport { LogoInput };\nexport type { LogoInputProps };\n","import * as React from 'react';\n\nimport {\n Box,\n Button,\n ContentLayout,\n Flex,\n Grid,\n GridItem,\n HeaderLayout,\n Layout,\n Link,\n Main,\n Typography,\n} from '@strapi/design-system';\nimport {\n SettingsPageTitle,\n useAppInfo,\n useFocusWhenNavigate,\n useRBAC,\n useTracking,\n} from '@strapi/helper-plugin';\nimport { Check, ExternalLink } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useSelector } from 'react-redux';\n\nimport { useConfiguration } from '../../../../features/Configuration';\nimport { useEnterprise } from '../../../../hooks/useEnterprise';\nimport { selectAdminPermissions } from '../../../../selectors';\n\nimport { LogoInput, LogoInputProps } from './components/LogoInput';\nimport { DIMENSION, SIZE } from './utils/constants';\n\nconst AdminSeatInfoCE = () => null;\n\n/* -------------------------------------------------------------------------------------------------\n * ApplicationInfoPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ApplicationInfoPage = () => {\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const { logos: serverLogos, updateProjectSettings } = useConfiguration('ApplicationInfoPage');\n const [logos, setLogos] = React.useState({ menu: serverLogos.menu, auth: serverLogos.auth });\n const { settings } = useSelector(selectAdminPermissions);\n\n const {\n communityEdition,\n latestStrapiReleaseTag,\n nodeVersion,\n shouldUpdateStrapi,\n strapiVersion,\n } = useAppInfo();\n\n const AdminSeatInfo = useEnterprise(\n AdminSeatInfoCE,\n async () =>\n (\n await import(\n '../../../../../../ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo'\n )\n ).AdminSeatInfoEE\n );\n\n const {\n allowedActions: { canRead, canUpdate },\n } = useRBAC(settings ? settings['project-settings'] : {});\n\n useFocusWhenNavigate();\n\n const handleSubmit: React.FormEventHandler<HTMLFormElement> = (e) => {\n e.preventDefault();\n\n updateProjectSettings({\n authLogo: logos.auth.custom ?? null,\n menuLogo: logos.menu.custom ?? null,\n });\n };\n\n const handleChangeLogo =\n (logo: 'menu' | 'auth'): LogoInputProps['onChangeLogo'] =>\n (newLogo) => {\n /**\n * If there's no newLogo value we can assume we're reseting.\n */\n if (newLogo === null) {\n trackUsage('didClickResetLogo', {\n logo,\n });\n }\n\n setLogos((prev) => ({\n ...prev,\n [logo]: {\n ...prev[logo],\n custom: newLogo,\n },\n }));\n };\n\n React.useEffect(() => {\n setLogos({\n menu: serverLogos.menu,\n auth: serverLogos.auth,\n });\n }, [serverLogos]);\n\n // block rendering until the EE component is fully loaded\n if (!AdminSeatInfo) {\n return null;\n }\n\n const isSaveDisabled =\n logos.auth.custom === serverLogos.auth.custom && logos.menu.custom === serverLogos.menu.custom;\n\n return (\n <Layout>\n <SettingsPageTitle\n name={formatMessage({\n id: 'Settings.application.header',\n defaultMessage: 'Application',\n })}\n />\n <Main>\n <form onSubmit={handleSubmit}>\n <HeaderLayout\n title={formatMessage({\n id: 'Settings.application.title',\n defaultMessage: 'Overview',\n })}\n subtitle={formatMessage({\n id: 'Settings.application.description',\n defaultMessage: 'Administration panel’s global information',\n })}\n primaryAction={\n canUpdate && (\n <Button disabled={isSaveDisabled} type=\"submit\" startIcon={<Check />}>\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n )\n }\n />\n <ContentLayout>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n gap={4}\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingRight={7}\n paddingLeft={7}\n >\n <Typography variant=\"delta\" as=\"h3\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n\n <Grid gap={5} as=\"dl\">\n <GridItem col={6} s={12}>\n <Typography variant=\"sigma\" textColor=\"neutral600\" as=\"dt\">\n {formatMessage({\n id: 'Settings.application.strapiVersion',\n defaultMessage: 'strapi version',\n })}\n </Typography>\n <Flex gap={3} direction=\"column\" alignItems=\"start\" as=\"dd\">\n <Typography>v{strapiVersion}</Typography>\n {shouldUpdateStrapi && (\n <Link\n href={`https://github.com/strapi/strapi/releases/tag/${latestStrapiReleaseTag}`}\n endIcon={<ExternalLink />}\n >\n {formatMessage({\n id: 'Settings.application.link-upgrade',\n defaultMessage: 'Upgrade your admin panel',\n })}\n </Link>\n )}\n </Flex>\n </GridItem>\n <GridItem col={6} s={12}>\n <Typography variant=\"sigma\" textColor=\"neutral600\" as=\"dt\">\n {formatMessage({\n id: 'Settings.application.edition-title',\n defaultMessage: 'current plan',\n })}\n </Typography>\n <Flex gap={3} direction=\"column\" alignItems=\"start\" as=\"dd\">\n <Typography>\n {formatMessage(\n {\n id: 'Settings.application.ee-or-ce',\n defaultMessage:\n '{communityEdition, select, true {Community Edition} other {Enterprise Edition}}',\n },\n { communityEdition }\n )}\n </Typography>\n <Link href=\"https://strapi.io/pricing-self-hosted\" endIcon={<ExternalLink />}>\n {formatMessage({\n id: 'Settings.application.link-pricing',\n defaultMessage: 'See all pricing plans',\n })}\n </Link>\n </Flex>\n </GridItem>\n\n <GridItem col={6} s={12}>\n <Typography variant=\"sigma\" textColor=\"neutral600\" as=\"dt\">\n {formatMessage({\n id: 'Settings.application.node-version',\n defaultMessage: 'node version',\n })}\n </Typography>\n <Typography as=\"dd\">{nodeVersion}</Typography>\n </GridItem>\n <AdminSeatInfo />\n </Grid>\n </Flex>\n {canRead && (\n <Box\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingRight={7}\n paddingLeft={7}\n >\n <Typography variant=\"delta\" as=\"h3\">\n {formatMessage({\n id: 'Settings.application.customization',\n defaultMessage: 'Customization',\n })}\n </Typography>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: 'Settings.application.customization.size-details',\n defaultMessage:\n 'Max dimension: {dimension}×{dimension}, Max file size: {size}KB',\n },\n { dimension: DIMENSION, size: SIZE }\n )}\n </Typography>\n <Grid paddingTop={4} gap={4}>\n <GridItem col={6} s={12}>\n <LogoInput\n canUpdate={canUpdate}\n customLogo={logos.menu.custom}\n defaultLogo={logos.menu.default}\n hint={formatMessage({\n id: 'Settings.application.customization.menu-logo.carousel-hint',\n defaultMessage: 'Replace the logo in the main navigation',\n })}\n label={formatMessage({\n id: 'Settings.application.customization.carousel.menu-logo.title',\n defaultMessage: 'Menu logo',\n })}\n onChangeLogo={handleChangeLogo('menu')}\n />\n </GridItem>\n <GridItem col={6} s={12}>\n <LogoInput\n canUpdate={canUpdate}\n customLogo={logos.auth.custom}\n defaultLogo={logos.auth.default}\n hint={formatMessage({\n id: 'Settings.application.customization.auth-logo.carousel-hint',\n defaultMessage: 'Replace the logo in the authentication pages',\n })}\n label={formatMessage({\n id: 'Settings.application.customization.carousel.auth-logo.title',\n defaultMessage: 'Auth logo',\n })}\n onChangeLogo={handleChangeLogo('auth')}\n />\n </GridItem>\n </Grid>\n </Box>\n )}\n </Flex>\n </ContentLayout>\n </form>\n </Main>\n </Layout>\n );\n};\n\nexport { ApplicationInfoPage };\n","import * as React from 'react';\n\nimport { Layout } from '@strapi/design-system';\nimport { LoadingIndicatorPage, useStrapiApp } from '@strapi/helper-plugin';\nimport { Helmet } from 'react-helmet';\nimport { useIntl } from 'react-intl';\nimport { Redirect, Route, Switch, useParams } from 'react-router-dom';\n\nimport { useEnterprise } from '../../hooks/useEnterprise';\nimport { useSettingsMenu } from '../../hooks/useSettingsMenu';\nimport { createRoute } from '../../utils/createRoute';\n\nimport { SettingsNav } from './components/SettingsNav';\nimport { ROUTES_CE, Route as IRoute } from './constants';\nimport { ApplicationInfoPage } from './pages/ApplicationInfo/ApplicationInfoPage';\n\nconst SettingsPage = () => {\n const { settingId } = useParams<{ settingId: string }>();\n const { settings } = useStrapiApp();\n const { formatMessage } = useIntl();\n const { isLoading, menu } = useSettingsMenu();\n const routes = useEnterprise(\n ROUTES_CE,\n async () => (await import('../../../../ee/admin/src/pages/SettingsPage/constants')).ROUTES_EE,\n {\n combine(ceRoutes, eeRoutes) {\n return [...ceRoutes, ...eeRoutes];\n },\n defaultValue: [],\n }\n );\n\n // Creates the admin routes\n const adminRoutes = React.useMemo(() => {\n return makeUniqueRoutes(routes).map(({ to, Component, exact }) =>\n createRoute(Component, to, exact)\n );\n }, [routes]);\n\n const pluginsRoutes = Object.values(settings).flatMap((section) => {\n const { links } = section;\n\n return links.map((link) => createRoute(link.Component, link.to, link.exact || false));\n });\n\n // Since the useSettingsMenu hook can make API calls in order to check the links permissions\n // We need to add a loading state to prevent redirecting the user while permissions are being checked\n if (isLoading) {\n return <LoadingIndicatorPage />;\n }\n\n if (!settingId) {\n return <Redirect to=\"/settings/application-infos\" />;\n }\n\n return (\n <Layout sideNav={<SettingsNav menu={menu} />}>\n <Helmet\n title={formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n })}\n />\n\n <Switch>\n <Route path=\"/settings/application-infos\" component={ApplicationInfoPage} exact />\n {adminRoutes}\n {pluginsRoutes}\n </Switch>\n </Layout>\n );\n};\n\nexport const makeUniqueRoutes = (routes: IRoute[]) =>\n routes.filter(\n (route, index, refArray) => refArray.findIndex((obj) => obj.to === route.to) === index\n );\n\nexport { SettingsPage };\n"],"names":["React","useRBACProvider","useAppInfo","useStrapiApp","useSelector","selectAdminPermissions","SETTINGS_LINKS_CE","useEnterprise","ceLinks","sections","hasPermissions","permission","sortBy","styled","Icon","useIntl","useTracking","useLocation","jsxs","SubNav","jsx","SubNavHeader","SubNavSections","SubNavSection","SubNavLink","NavLink","Lock","createContext","CarouselInput","CarouselActions","IconButton","Plus","Refresh","CarouselSlide","Box","ModalLayout","ModalHeader","Typography","TabGroup","Tabs","Tab","Divider","TabPanels","TabPanel","axios","AxiosError","TextInput","ModalFooter","Button","Fragment","Field","Flex","pxToRem","PicturePlus","FieldError","FieldInput","Card","CardHeader","CardAsset","CardBody","CardContent","CardTitle","CardSubtitle","CardBadge","useConfiguration","useRBAC","useFocusWhenNavigate","Layout","SettingsPageTitle","Main","HeaderLayout","Check","ContentLayout","Grid","GridItem","Link","ExternalLink","useParams","createRoute","LoadingIndicatorPage","Redirect","Helmet","Switch","Route","index"],"mappings":"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"}