@strapi/admin 4.21.0 → 4.22.0

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 (250) hide show
  1. package/dist/_chunks/{AdminSeatInfo-mjxcHmrg.mjs → AdminSeatInfo-m8yR8BMU.mjs} +9 -8
  2. package/dist/_chunks/{AdminSeatInfo-mjxcHmrg.mjs.map → AdminSeatInfo-m8yR8BMU.mjs.map} +1 -1
  3. package/dist/_chunks/{AdminSeatInfo-0cO28eY4.js → AdminSeatInfo-yRn58FAM.js} +9 -8
  4. package/dist/_chunks/{AdminSeatInfo-0cO28eY4.js.map → AdminSeatInfo-yRn58FAM.js.map} +1 -1
  5. package/dist/_chunks/{AuthenticatedApp-YqvHVjWe.js → AuthenticatedApp-40B8pbAx.js} +23 -23
  6. package/dist/_chunks/{AuthenticatedApp-YqvHVjWe.js.map → AuthenticatedApp-40B8pbAx.js.map} +1 -1
  7. package/dist/_chunks/{AuthenticatedApp-kwdjs_S0.mjs → AuthenticatedApp-riaX0bqk.mjs} +23 -23
  8. package/dist/_chunks/{AuthenticatedApp-kwdjs_S0.mjs.map → AuthenticatedApp-riaX0bqk.mjs.map} +1 -1
  9. package/dist/_chunks/{CreateActionEE-_uYlQhyX.mjs → CreateActionEE-31jk3GR0.mjs} +8 -7
  10. package/dist/_chunks/{CreateActionEE-_uYlQhyX.mjs.map → CreateActionEE-31jk3GR0.mjs.map} +1 -1
  11. package/dist/_chunks/{CreateActionEE-W6-7uSGv.js → CreateActionEE-TbB2Bi8_.js} +8 -7
  12. package/dist/_chunks/{CreateActionEE-W6-7uSGv.js.map → CreateActionEE-TbB2Bi8_.js.map} +1 -1
  13. package/dist/_chunks/{CreatePage-nk4rR_Lo.js → CreatePage--eZR2Rlc.js} +12 -11
  14. package/dist/_chunks/{CreatePage-nk4rR_Lo.js.map → CreatePage--eZR2Rlc.js.map} +1 -1
  15. package/dist/_chunks/{CreatePage-AJOrHWAz.js → CreatePage-6pCP6Gow.js} +9 -8
  16. package/dist/_chunks/{CreatePage-AJOrHWAz.js.map → CreatePage-6pCP6Gow.js.map} +1 -1
  17. package/dist/_chunks/{CreatePage-d-1uabiQ.mjs → CreatePage-EXRlBeTU.mjs} +9 -8
  18. package/dist/_chunks/{CreatePage-d-1uabiQ.mjs.map → CreatePage-EXRlBeTU.mjs.map} +1 -1
  19. package/dist/_chunks/{CreatePage-gkLnzJM5.mjs → CreatePage-KinJzBfK.mjs} +12 -11
  20. package/dist/_chunks/{CreatePage-gkLnzJM5.mjs.map → CreatePage-KinJzBfK.mjs.map} +1 -1
  21. package/dist/_chunks/{CreatePage-80fIYaTs.mjs → CreatePage-MO8H7ldB.mjs} +13 -12
  22. package/dist/_chunks/{CreatePage-80fIYaTs.mjs.map → CreatePage-MO8H7ldB.mjs.map} +1 -1
  23. package/dist/_chunks/{CreatePage-hZTEAj3p.js → CreatePage-OKcpQGVK.js} +13 -12
  24. package/dist/_chunks/{CreatePage-hZTEAj3p.js.map → CreatePage-OKcpQGVK.js.map} +1 -1
  25. package/dist/_chunks/{CreateView-IJFkZ9ya.js → CreateView-1fOUboob.js} +12 -11
  26. package/dist/_chunks/{CreateView-IJFkZ9ya.js.map → CreateView-1fOUboob.js.map} +1 -1
  27. package/dist/_chunks/{CreateView-fD5On04e.mjs → CreateView-JQtnFUlZ.mjs} +12 -11
  28. package/dist/_chunks/{CreateView-fD5On04e.mjs.map → CreateView-JQtnFUlZ.mjs.map} +1 -1
  29. package/dist/_chunks/{CreateView-rsZvKS7A.mjs → CreateView-XkGXb6jg.mjs} +12 -11
  30. package/dist/_chunks/{CreateView-rsZvKS7A.mjs.map → CreateView-XkGXb6jg.mjs.map} +1 -1
  31. package/dist/_chunks/{CreateView-8BCw7Olc.js → CreateView-gcc3yBbT.js} +12 -11
  32. package/dist/_chunks/{CreateView-8BCw7Olc.js.map → CreateView-gcc3yBbT.js.map} +1 -1
  33. package/dist/_chunks/{EditPage-pgD1DzOE.mjs → EditPage-0Z8TqXxY.mjs} +6 -6
  34. package/dist/_chunks/{EditPage-pgD1DzOE.mjs.map → EditPage-0Z8TqXxY.mjs.map} +1 -1
  35. package/dist/_chunks/{EditPage-7scuwbPj.js → EditPage-GCvZOqYt.js} +10 -9
  36. package/dist/_chunks/{EditPage-7scuwbPj.js.map → EditPage-GCvZOqYt.js.map} +1 -1
  37. package/dist/_chunks/{EditPage-yMvPm2Nx.mjs → EditPage-HkXcYEMR.mjs} +14 -13
  38. package/dist/_chunks/{EditPage-yMvPm2Nx.mjs.map → EditPage-HkXcYEMR.mjs.map} +1 -1
  39. package/dist/_chunks/{EditPage-d2rOG_1W.mjs → EditPage-IpoJS5rO.mjs} +10 -9
  40. package/dist/_chunks/{EditPage-d2rOG_1W.mjs.map → EditPage-IpoJS5rO.mjs.map} +1 -1
  41. package/dist/_chunks/{EditPage-J6zVHasr.js → EditPage-dCToL-TT.js} +12 -11
  42. package/dist/_chunks/{EditPage-J6zVHasr.js.map → EditPage-dCToL-TT.js.map} +1 -1
  43. package/dist/_chunks/{EditPage-tdmuOKSb.mjs → EditPage-drzNgxSE.mjs} +12 -11
  44. package/dist/_chunks/{EditPage-tdmuOKSb.mjs.map → EditPage-drzNgxSE.mjs.map} +1 -1
  45. package/dist/_chunks/{EditPage-_PINxFhm.js → EditPage-pZ98kQBc.js} +6 -6
  46. package/dist/_chunks/{EditPage-_PINxFhm.js.map → EditPage-pZ98kQBc.js.map} +1 -1
  47. package/dist/_chunks/{EditPage-Fpm69oEe.js → EditPage-w4l_Tv9y.js} +14 -13
  48. package/dist/_chunks/{EditPage-Fpm69oEe.js.map → EditPage-w4l_Tv9y.js.map} +1 -1
  49. package/dist/_chunks/{EditView-g7WobiS9.js → EditView-p3ow5F_w.js} +10 -9
  50. package/dist/_chunks/{EditView-g7WobiS9.js.map → EditView-p3ow5F_w.js.map} +1 -1
  51. package/dist/_chunks/{EditView-_am4shhk.mjs → EditView-t_-XGK_U.mjs} +10 -9
  52. package/dist/_chunks/{EditView-_am4shhk.mjs.map → EditView-t_-XGK_U.mjs.map} +1 -1
  53. package/dist/_chunks/{EditViewPage-Vkd1qJui.js → EditViewPage-94CJJG-H.js} +10 -9
  54. package/dist/_chunks/{EditViewPage-Vkd1qJui.js.map → EditViewPage-94CJJG-H.js.map} +1 -1
  55. package/dist/_chunks/{EditViewPage-v2VcQV_Y.mjs → EditViewPage-QA7Fd5u9.mjs} +10 -9
  56. package/dist/_chunks/{EditViewPage-v2VcQV_Y.mjs.map → EditViewPage-QA7Fd5u9.mjs.map} +1 -1
  57. package/dist/_chunks/{EventsTable-8U1cTmXv.mjs → EventsTable-6aWzlRZm.mjs} +12 -11
  58. package/dist/_chunks/{EventsTable-8U1cTmXv.mjs.map → EventsTable-6aWzlRZm.mjs.map} +1 -1
  59. package/dist/_chunks/{EventsTable-7jWjBOCM.js → EventsTable-iRT4M25A.js} +12 -11
  60. package/dist/_chunks/{EventsTable-7jWjBOCM.js.map → EventsTable-iRT4M25A.js.map} +1 -1
  61. package/dist/_chunks/{HomePage-YUUf2m0i.js → HomePage-0Ob3Zf1A.js} +12 -11
  62. package/dist/_chunks/{HomePage-YUUf2m0i.js.map → HomePage-0Ob3Zf1A.js.map} +1 -1
  63. package/dist/_chunks/{HomePage-KVErLS68.mjs → HomePage-1GvHEUW-.mjs} +11 -10
  64. package/dist/_chunks/{HomePage-KVErLS68.mjs.map → HomePage-1GvHEUW-.mjs.map} +1 -1
  65. package/dist/_chunks/{HomePage-r-Q_KO54.mjs → HomePage-BxkJ4sBN.mjs} +12 -11
  66. package/dist/_chunks/{HomePage-r-Q_KO54.mjs.map → HomePage-BxkJ4sBN.mjs.map} +1 -1
  67. package/dist/_chunks/{HomePage-u73HVyVG.js → HomePage-ZE5wGUy6.js} +11 -10
  68. package/dist/_chunks/{HomePage-u73HVyVG.js.map → HomePage-ZE5wGUy6.js.map} +1 -1
  69. package/dist/_chunks/{InformationBoxEE-vGk1T9_V.js → InformationBoxEE-APxJ1-vp.js} +9 -8
  70. package/dist/_chunks/{InformationBoxEE-vGk1T9_V.js.map → InformationBoxEE-APxJ1-vp.js.map} +1 -1
  71. package/dist/_chunks/{InformationBoxEE-WzZx0xfC.mjs → InformationBoxEE-fSDf1ANf.mjs} +9 -8
  72. package/dist/_chunks/{InformationBoxEE-WzZx0xfC.mjs.map → InformationBoxEE-fSDf1ANf.mjs.map} +1 -1
  73. package/dist/_chunks/{InstalledPluginsPage-eNyidkBW.js → InstalledPluginsPage-Fm2befbY.js} +9 -8
  74. package/dist/_chunks/{InstalledPluginsPage-eNyidkBW.js.map → InstalledPluginsPage-Fm2befbY.js.map} +1 -1
  75. package/dist/_chunks/{InstalledPluginsPage-4ekFFFnc.mjs → InstalledPluginsPage-h-dyOjRX.mjs} +9 -8
  76. package/dist/_chunks/{InstalledPluginsPage-4ekFFFnc.mjs.map → InstalledPluginsPage-h-dyOjRX.mjs.map} +1 -1
  77. package/dist/_chunks/{Layout-m03mlKAn.js → Layout-bm9e7Awl.js} +2 -2
  78. package/dist/_chunks/{Layout-m03mlKAn.js.map → Layout-bm9e7Awl.js.map} +1 -1
  79. package/dist/_chunks/{Layout-B87oCQCm.mjs → Layout-gjencEwX.mjs} +2 -2
  80. package/dist/_chunks/{Layout-B87oCQCm.mjs.map → Layout-gjencEwX.mjs.map} +1 -1
  81. package/dist/_chunks/{ListPage-81zGxguD.js → ListPage-5qFM49ea.js} +12 -11
  82. package/dist/_chunks/{ListPage-81zGxguD.js.map → ListPage-5qFM49ea.js.map} +1 -1
  83. package/dist/_chunks/{ListPage-rB8_0NLu.js → ListPage-7dHyWED6.js} +13 -12
  84. package/dist/_chunks/{ListPage-rB8_0NLu.js.map → ListPage-7dHyWED6.js.map} +1 -1
  85. package/dist/_chunks/{ListPage-Zl1MvQPk.mjs → ListPage-GzgYYtmk.mjs} +10 -9
  86. package/dist/_chunks/{ListPage-Zl1MvQPk.mjs.map → ListPage-GzgYYtmk.mjs.map} +1 -1
  87. package/dist/_chunks/{ListPage-mNR6sIt1.mjs → ListPage-QtyDWzMK.mjs} +12 -11
  88. package/dist/_chunks/{ListPage-mNR6sIt1.mjs.map → ListPage-QtyDWzMK.mjs.map} +1 -1
  89. package/dist/_chunks/{ListPage-BHozpI7e.js → ListPage-SHHCKtV0.js} +8 -7
  90. package/dist/_chunks/{ListPage-BHozpI7e.js.map → ListPage-SHHCKtV0.js.map} +1 -1
  91. package/dist/_chunks/{ListPage-7DYIHq-E.js → ListPage-Uwx4nSP1.js} +10 -9
  92. package/dist/_chunks/{ListPage-7DYIHq-E.js.map → ListPage-Uwx4nSP1.js.map} +1 -1
  93. package/dist/_chunks/{ListPage-XSy4U_Wx.js → ListPage-Xj6fyS--.js} +14 -13
  94. package/dist/_chunks/{ListPage-XSy4U_Wx.js.map → ListPage-Xj6fyS--.js.map} +1 -1
  95. package/dist/_chunks/{ListPage-rLn1O-6J.js → ListPage-Y0XWXXNc.js} +9 -8
  96. package/dist/_chunks/{ListPage-rLn1O-6J.js.map → ListPage-Y0XWXXNc.js.map} +1 -1
  97. package/dist/_chunks/{ListPage-yUSPSU5S.mjs → ListPage-ah3DuyB3.mjs} +13 -12
  98. package/dist/_chunks/{ListPage-yUSPSU5S.mjs.map → ListPage-ah3DuyB3.mjs.map} +1 -1
  99. package/dist/_chunks/{ListPage-aXOKmOXc.mjs → ListPage-bKxvH7z1.mjs} +9 -8
  100. package/dist/_chunks/{ListPage-aXOKmOXc.mjs.map → ListPage-bKxvH7z1.mjs.map} +1 -1
  101. package/dist/_chunks/{ListPage-8UEc6X8O.mjs → ListPage-bYTHiweO.mjs} +14 -13
  102. package/dist/_chunks/{ListPage-8UEc6X8O.mjs.map → ListPage-bYTHiweO.mjs.map} +1 -1
  103. package/dist/_chunks/{ListPage-xdRLSoa6.mjs → ListPage-x7gTjJEO.mjs} +8 -7
  104. package/dist/_chunks/{ListPage-xdRLSoa6.mjs.map → ListPage-x7gTjJEO.mjs.map} +1 -1
  105. package/dist/_chunks/{ListView-RLPQGwfo.mjs → ListView-eWw9mvz0.mjs} +9 -8
  106. package/dist/_chunks/{ListView-RLPQGwfo.mjs.map → ListView-eWw9mvz0.mjs.map} +1 -1
  107. package/dist/_chunks/{ListView-ehfFWy27.js → ListView-vHjIK0vP.js} +9 -8
  108. package/dist/_chunks/{ListView-ehfFWy27.js.map → ListView-vHjIK0vP.js.map} +1 -1
  109. package/dist/_chunks/{ListView-YA5QXiq4.mjs → ListView-vXmZKMHu.mjs} +9 -8
  110. package/dist/_chunks/{ListView-YA5QXiq4.mjs.map → ListView-vXmZKMHu.mjs.map} +1 -1
  111. package/dist/_chunks/{ListView-OTSwUf1i.js → ListView-vqb9TIM2.js} +9 -8
  112. package/dist/_chunks/{ListView-OTSwUf1i.js.map → ListView-vqb9TIM2.js.map} +1 -1
  113. package/dist/_chunks/{Login-NBWPTGii.js → Login-8FsvHGO3.js} +8 -7
  114. package/dist/_chunks/{Login-NBWPTGii.js.map → Login-8FsvHGO3.js.map} +1 -1
  115. package/dist/_chunks/{Login-e1_GFndv.mjs → Login-RkD0XYgK.mjs} +8 -7
  116. package/dist/_chunks/{Login-e1_GFndv.mjs.map → Login-RkD0XYgK.mjs.map} +1 -1
  117. package/dist/_chunks/{MagicLinkEE-LwIotwLh.js → MagicLinkEE-iGw666Dk.js} +10 -9
  118. package/dist/_chunks/{MagicLinkEE-LwIotwLh.js.map → MagicLinkEE-iGw666Dk.js.map} +1 -1
  119. package/dist/_chunks/{MagicLinkEE-KOvooF20.mjs → MagicLinkEE-kc2RKT81.mjs} +10 -9
  120. package/dist/_chunks/{MagicLinkEE-KOvooF20.mjs.map → MagicLinkEE-kc2RKT81.mjs.map} +1 -1
  121. package/dist/_chunks/{MarketplacePage-3SjeOIl9.mjs → MarketplacePage-CNG2hEAc.mjs} +9 -8
  122. package/dist/_chunks/{MarketplacePage-3SjeOIl9.mjs.map → MarketplacePage-CNG2hEAc.mjs.map} +1 -1
  123. package/dist/_chunks/{MarketplacePage-Kqg4doOi.js → MarketplacePage-S8kkMjj_.js} +9 -8
  124. package/dist/_chunks/{MarketplacePage-Kqg4doOi.js.map → MarketplacePage-S8kkMjj_.js.map} +1 -1
  125. package/dist/_chunks/{Permissions-RQidBUvg.mjs → Permissions-hEcGO7Iz.mjs} +2 -2
  126. package/dist/_chunks/{Permissions-RQidBUvg.mjs.map → Permissions-hEcGO7Iz.mjs.map} +1 -1
  127. package/dist/_chunks/{Permissions-9D-OrmKB.js → Permissions-yXgqJ6LF.js} +2 -2
  128. package/dist/_chunks/{Permissions-9D-OrmKB.js.map → Permissions-yXgqJ6LF.js.map} +1 -1
  129. package/dist/_chunks/{ProfilePage-NHYSDob0.js → ProfilePage-RKjbmtZV.js} +9 -8
  130. package/dist/_chunks/{ProfilePage-NHYSDob0.js.map → ProfilePage-RKjbmtZV.js.map} +1 -1
  131. package/dist/_chunks/{ProfilePage-p-ihQgkq.mjs → ProfilePage-f6X9jyKm.mjs} +9 -8
  132. package/dist/_chunks/{ProfilePage-p-ihQgkq.mjs.map → ProfilePage-f6X9jyKm.mjs.map} +1 -1
  133. package/dist/_chunks/{PurchaseAuditLogs-zQio54Q3.mjs → PurchaseAuditLogs-KILCZp5x.mjs} +2 -2
  134. package/dist/_chunks/PurchaseAuditLogs-KILCZp5x.mjs.map +1 -0
  135. package/dist/_chunks/{PurchaseAuditLogs--hjsKHHW.js → PurchaseAuditLogs-bs-tiD4M.js} +2 -2
  136. package/dist/_chunks/PurchaseAuditLogs-bs-tiD4M.js.map +1 -0
  137. package/dist/_chunks/{PurchaseReviewWorkflows-P-FACd5s.js → PurchaseReviewWorkflows-cdGh-HED.js} +2 -2
  138. package/dist/_chunks/PurchaseReviewWorkflows-cdGh-HED.js.map +1 -0
  139. package/dist/_chunks/{PurchaseReviewWorkflows-zGnRRqrC.mjs → PurchaseReviewWorkflows-rVcCufNv.mjs} +2 -2
  140. package/dist/_chunks/PurchaseReviewWorkflows-rVcCufNv.mjs.map +1 -0
  141. package/dist/_chunks/{PurchaseSingleSignOn-BQ5PU-6E.mjs → PurchaseSingleSignOn-H8KWtk1K.mjs} +2 -2
  142. package/dist/_chunks/PurchaseSingleSignOn-H8KWtk1K.mjs.map +1 -0
  143. package/dist/_chunks/{PurchaseSingleSignOn-m2pnP9Ou.js → PurchaseSingleSignOn-OqlM4WkQ.js} +2 -2
  144. package/dist/_chunks/PurchaseSingleSignOn-OqlM4WkQ.js.map +1 -0
  145. package/dist/_chunks/{ReviewWorkflowsColumn-fV_jrZaM.mjs → ReviewWorkflowsColumn-TvUJSP2h.mjs} +8 -7
  146. package/dist/_chunks/{ReviewWorkflowsColumn-fV_jrZaM.mjs.map → ReviewWorkflowsColumn-TvUJSP2h.mjs.map} +1 -1
  147. package/dist/_chunks/{ReviewWorkflowsColumn-tao-_Nrx.js → ReviewWorkflowsColumn-h28wUQpH.js} +8 -7
  148. package/dist/_chunks/{ReviewWorkflowsColumn-tao-_Nrx.js.map → ReviewWorkflowsColumn-h28wUQpH.js.map} +1 -1
  149. package/dist/_chunks/{SelectRoles-3M7Lm8IQ.mjs → SelectRoles-Qg2ZzhCA.mjs} +3 -3
  150. package/dist/_chunks/{SelectRoles-3M7Lm8IQ.mjs.map → SelectRoles-Qg2ZzhCA.mjs.map} +1 -1
  151. package/dist/_chunks/{SelectRoles-I4YcfYDL.js → SelectRoles-j81zHmh5.js} +3 -3
  152. package/dist/_chunks/{SelectRoles-I4YcfYDL.js.map → SelectRoles-j81zHmh5.js.map} +1 -1
  153. package/dist/_chunks/{SettingsPage-uZJ0TQ2j.js → SettingsPage-NgNDx5m4.js} +30 -29
  154. package/dist/_chunks/{SettingsPage-uZJ0TQ2j.js.map → SettingsPage-NgNDx5m4.js.map} +1 -1
  155. package/dist/_chunks/{SettingsPage-Ib7N7CWP.mjs → SettingsPage-hIdNLgyU.mjs} +30 -29
  156. package/dist/_chunks/{SettingsPage-Ib7N7CWP.mjs.map → SettingsPage-hIdNLgyU.mjs.map} +1 -1
  157. package/dist/_chunks/{SingleSignOnPage-haO4QYIZ.mjs → SingleSignOnPage-5oIMWxyv.mjs} +9 -8
  158. package/dist/_chunks/{SingleSignOnPage-haO4QYIZ.mjs.map → SingleSignOnPage-5oIMWxyv.mjs.map} +1 -1
  159. package/dist/_chunks/{SingleSignOnPage-9shy4b5V.js → SingleSignOnPage-EGZSUkO1.js} +9 -8
  160. package/dist/_chunks/{SingleSignOnPage-9shy4b5V.js.map → SingleSignOnPage-EGZSUkO1.js.map} +1 -1
  161. package/dist/_chunks/{TokenTypeSelect-vW7D0ueA.mjs → TokenTypeSelect--DUjoOrW.mjs} +2 -2
  162. package/dist/_chunks/{TokenTypeSelect-vW7D0ueA.mjs.map → TokenTypeSelect--DUjoOrW.mjs.map} +1 -1
  163. package/dist/_chunks/{TokenTypeSelect-6dKaAxNw.js → TokenTypeSelect-G3NEonpw.js} +2 -2
  164. package/dist/_chunks/{TokenTypeSelect-6dKaAxNw.js.map → TokenTypeSelect-G3NEonpw.js.map} +1 -1
  165. package/dist/_chunks/{apiTokens-MX89ShkN.mjs → apiTokens-oVnDJCq-.mjs} +2 -2
  166. package/dist/_chunks/{apiTokens-MX89ShkN.mjs.map → apiTokens-oVnDJCq-.mjs.map} +1 -1
  167. package/dist/_chunks/{apiTokens-OFJ2wELt.js → apiTokens-v0TUOh01.js} +2 -2
  168. package/dist/_chunks/{apiTokens-OFJ2wELt.js.map → apiTokens-v0TUOh01.js.map} +1 -1
  169. package/dist/_chunks/{constants-VvofwTIc.mjs → constants-2kr88Xd8.mjs} +8 -7
  170. package/dist/_chunks/{constants-VvofwTIc.mjs.map → constants-2kr88Xd8.mjs.map} +1 -1
  171. package/dist/_chunks/{constants-d_g76JgI.mjs → constants-NOkv_GMt.mjs} +10 -9
  172. package/dist/_chunks/{constants-d_g76JgI.mjs.map → constants-NOkv_GMt.mjs.map} +1 -1
  173. package/dist/_chunks/{constants-ERzqKCqP.js → constants-UO0DfA__.js} +8 -7
  174. package/dist/_chunks/{constants-ERzqKCqP.js.map → constants-UO0DfA__.js.map} +1 -1
  175. package/dist/_chunks/{constants-Hbt2Ap8U.js → constants-ZuFN09ZE.js} +8 -7
  176. package/dist/_chunks/{constants-Hbt2Ap8U.js.map → constants-ZuFN09ZE.js.map} +1 -1
  177. package/dist/_chunks/{constants-QP7CzvHM.js → constants-gnkiD2ds.js} +6 -6
  178. package/dist/_chunks/{constants-QP7CzvHM.js.map → constants-gnkiD2ds.js.map} +1 -1
  179. package/dist/_chunks/{constants-phoWsshc.js → constants-hhUpU706.js} +10 -9
  180. package/dist/_chunks/{constants-phoWsshc.js.map → constants-hhUpU706.js.map} +1 -1
  181. package/dist/_chunks/{constants-Dc5jQV8s.mjs → constants-yGtTecAp.mjs} +8 -7
  182. package/dist/_chunks/{constants-Dc5jQV8s.mjs.map → constants-yGtTecAp.mjs.map} +1 -1
  183. package/dist/_chunks/{constants-dP7nNukG.mjs → constants-zSvUC_X3.mjs} +6 -6
  184. package/dist/_chunks/{constants-dP7nNukG.mjs.map → constants-zSvUC_X3.mjs.map} +1 -1
  185. package/dist/_chunks/{en-ZBAy2GQ0.mjs → en-ZwaF4t5c.mjs} +4 -4
  186. package/dist/_chunks/{en-ZBAy2GQ0.mjs.map → en-ZwaF4t5c.mjs.map} +1 -1
  187. package/dist/_chunks/{en-l5S8Gv-y.js → en-sP8T18rk.js} +4 -4
  188. package/dist/_chunks/{en-l5S8Gv-y.js.map → en-sP8T18rk.js.map} +1 -1
  189. package/dist/_chunks/{index-XBOTBNuC.mjs → index-b9TUtGUa.mjs} +13576 -13285
  190. package/dist/_chunks/index-b9TUtGUa.mjs.map +1 -0
  191. package/dist/_chunks/{index-pLv4RVFT.js → index-m2gBEZMe.js} +13593 -13301
  192. package/dist/_chunks/index-m2gBEZMe.js.map +1 -0
  193. package/dist/_chunks/{reviewWorkflows-sIRrdSIc.js → reviewWorkflows-87DMA6aD.js} +2 -2
  194. package/dist/_chunks/{reviewWorkflows-sIRrdSIc.js.map → reviewWorkflows-87DMA6aD.js.map} +1 -1
  195. package/dist/_chunks/{reviewWorkflows-t1LyvpuK.mjs → reviewWorkflows-PDghomsv.mjs} +2 -2
  196. package/dist/_chunks/{reviewWorkflows-t1LyvpuK.mjs.map → reviewWorkflows-PDghomsv.mjs.map} +1 -1
  197. package/dist/_chunks/{transferTokens-WEaXK93i.js → transferTokens-2sUoVn5p.js} +2 -2
  198. package/dist/_chunks/{transferTokens-WEaXK93i.js.map → transferTokens-2sUoVn5p.js.map} +1 -1
  199. package/dist/_chunks/{transferTokens-UY0XTF15.mjs → transferTokens-7e0rJJm9.mjs} +2 -2
  200. package/dist/_chunks/{transferTokens-UY0XTF15.mjs.map → transferTokens-7e0rJJm9.mjs.map} +1 -1
  201. package/dist/_chunks/{useAdminRoles-8j_Rc44Z.mjs → useAdminRoles-LpJIna56.mjs} +2 -2
  202. package/dist/_chunks/{useAdminRoles-8j_Rc44Z.mjs.map → useAdminRoles-LpJIna56.mjs.map} +1 -1
  203. package/dist/_chunks/{useAdminRoles-IiHPVeUo.js → useAdminRoles-iBGfDVeJ.js} +2 -2
  204. package/dist/_chunks/{useAdminRoles-IiHPVeUo.js.map → useAdminRoles-iBGfDVeJ.js.map} +1 -1
  205. package/dist/_chunks/{useContentTypes-Madr3L1H.mjs → useContentTypes-DPj5vvTL.mjs} +2 -2
  206. package/dist/_chunks/{useContentTypes-Madr3L1H.mjs.map → useContentTypes-DPj5vvTL.mjs.map} +1 -1
  207. package/dist/_chunks/{useContentTypes-Bk1Y2UmU.js → useContentTypes-ZTdoLYEb.js} +2 -2
  208. package/dist/_chunks/{useContentTypes-Bk1Y2UmU.js.map → useContentTypes-ZTdoLYEb.js.map} +1 -1
  209. package/dist/_chunks/{useLicenseLimitNotification-rN5MNuOy.mjs → useLicenseLimitNotification-XZ7hbImo.mjs} +2 -2
  210. package/dist/_chunks/{useLicenseLimitNotification-rN5MNuOy.mjs.map → useLicenseLimitNotification-XZ7hbImo.mjs.map} +1 -1
  211. package/dist/_chunks/{useLicenseLimitNotification-lU6tLg8T.js → useLicenseLimitNotification-eLkXaQMp.js} +2 -2
  212. package/dist/_chunks/{useLicenseLimitNotification-lU6tLg8T.js.map → useLicenseLimitNotification-eLkXaQMp.js.map} +1 -1
  213. package/dist/_chunks/{useReviewWorkflows-zEtut4MA.mjs → useReviewWorkflows-BGk_yVg-.mjs} +2 -2
  214. package/dist/_chunks/{useReviewWorkflows-zEtut4MA.mjs.map → useReviewWorkflows-BGk_yVg-.mjs.map} +1 -1
  215. package/dist/_chunks/{useReviewWorkflows-bzq0E6aV.js → useReviewWorkflows-nYB24j1P.js} +2 -2
  216. package/dist/_chunks/{useReviewWorkflows-bzq0E6aV.js.map → useReviewWorkflows-nYB24j1P.js.map} +1 -1
  217. package/dist/_chunks/{useWebhooks-0L1K3yUR.mjs → useWebhooks-hAlBKBl-.mjs} +2 -2
  218. package/dist/_chunks/{useWebhooks-0L1K3yUR.mjs.map → useWebhooks-hAlBKBl-.mjs.map} +1 -1
  219. package/dist/_chunks/{useWebhooks--d-jYykj.js → useWebhooks-nsgBYKuT.js} +2 -2
  220. package/dist/_chunks/{useWebhooks--d-jYykj.js.map → useWebhooks-nsgBYKuT.js.map} +1 -1
  221. package/dist/_chunks/{validateWorkflow-qMNO_vCC.js → validateWorkflow-gk004jTp.js} +2 -2
  222. package/dist/_chunks/{validateWorkflow-qMNO_vCC.js.map → validateWorkflow-gk004jTp.js.map} +1 -1
  223. package/dist/_chunks/{validateWorkflow-2FnomUH9.mjs → validateWorkflow-kPKVUJL9.mjs} +2 -2
  224. package/dist/_chunks/{validateWorkflow-2FnomUH9.mjs.map → validateWorkflow-kPKVUJL9.mjs.map} +1 -1
  225. package/dist/admin/index.js +7 -6
  226. package/dist/admin/index.js.map +1 -1
  227. package/dist/admin/index.mjs +7 -6
  228. package/dist/admin/index.mjs.map +1 -1
  229. package/dist/admin/src/StrapiApp.d.ts +4 -0
  230. package/dist/admin/src/components/DescriptionComponentRenderer.d.ts +31 -0
  231. package/dist/admin/src/content-manager/pages/ListView/components/BulkActions/Actions.d.ts +50 -0
  232. package/dist/admin/src/content-manager/pages/ListView/components/BulkActions/{SelectedEntriesModal.d.ts → PublishAction.d.ts} +4 -5
  233. package/dist/admin/src/content-manager/pages/ListView/hooks/useAllowedActions.d.ts +2 -0
  234. package/dist/admin/src/core/apis/Plugin.d.ts +7 -6
  235. package/dist/admin/src/core/apis/content-manager.d.ts +58 -0
  236. package/dist/admin/src/hooks/useForceUpdate.d.ts +7 -0
  237. package/dist/admin/src/hooks/useIsMounted.d.ts +3 -0
  238. package/dist/admin/src/hooks/useThrottledCallback.d.ts +22 -0
  239. package/dist/admin/src/index.d.ts +1 -0
  240. package/dist/admin/src/utils/shims.d.ts +4 -0
  241. package/package.json +15 -15
  242. package/dist/_chunks/PurchaseAuditLogs--hjsKHHW.js.map +0 -1
  243. package/dist/_chunks/PurchaseAuditLogs-zQio54Q3.mjs.map +0 -1
  244. package/dist/_chunks/PurchaseReviewWorkflows-P-FACd5s.js.map +0 -1
  245. package/dist/_chunks/PurchaseReviewWorkflows-zGnRRqrC.mjs.map +0 -1
  246. package/dist/_chunks/PurchaseSingleSignOn-BQ5PU-6E.mjs.map +0 -1
  247. package/dist/_chunks/PurchaseSingleSignOn-m2pnP9Ou.js.map +0 -1
  248. package/dist/_chunks/index-XBOTBNuC.mjs.map +0 -1
  249. package/dist/_chunks/index-pLv4RVFT.js.map +0 -1
  250. package/dist/admin/src/content-manager/pages/ListView/components/BulkActions/Buttons.d.ts +0 -27
@@ -1 +1 @@
1
- {"version":3,"file":"SettingsPage-uZJ0TQ2j.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-NgNDx5m4.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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,MAAM,cAAc,CAAC,SACnB,KAAK,IAAI,CAAC,gBAAgB;AACxB,QAAM,iBAAiB,YAAY,MAAM,IAAI,CAAC,UAAU;AAAA,IACtD,GAAG;AAAA,IACH,aAAa;AAAA,EACb,EAAA;AAEF,SAAO,EAAE,GAAG,aAAa,OAAO,eAAe;AACjD,CAAC;AA8BH,MAAM,kBAAkB,MAGnB;AACG,QAAA,CAAC,EAAE,WAAW,KAAA,GAAQ,OAAO,IAAIA,iBAAM,SAG1C;AAAA,IACD,WAAW;AAAA,IACX,MAAM,CAAC;AAAA,EAAA,CACR;AACD,QAAM,EAAE,gBAAgB,gBAAgB,IAAIC,aAAgB,gBAAA;AACtD,QAAA,EAAE,uBAAuBC,aAAAA;AACzB,QAAA,EAAE,aAAaC,aAAAA;AACf,QAAA,cAAcC,uBAAYC,iBAAAA,sBAAsB;AAMtD,QAAM,UAAUL,iBAAM,QAAQ,MAAMM,MAAkB,kBAAA,GAAG,CAAA,CAAE;AAE3D,QAAM,EAAE,OAAO,YAAY,QAAQ,YAAgB,IAAAC,MAAA;AAAA,IACjD;AAAA,IACA,aAAa,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,QAAO,yBAAiC,IAAG,kBAAkB;AAAA,IAChF;AAAA,MACE,QAAQC,UAAS,SAAS;AACjB,eAAA;AAAA,UACL,OAAO,CAAC,GAAG,QAAQ,OAAO,GAAGA,SAAQ,KAAK;AAAA,UAC1C,QAAQ,CAAC,GAAGA,SAAQ,QAAQ,GAAG,QAAQ,MAAM;AAAA,QAAA;AAAA,MAEjD;AAAA,MACA,cAAc;AAAA,QACZ,OAAO,CAAC;AAAA,QACR,QAAQ,CAAC;AAAA,MACX;AAAA,IACF;AAAA,EAAA;AAGF,QAAM,iBAAiBR,iBAAM;AAAA,IAC3B,CAAC,SAA2B;AACtB,UAAA,CAAC,KAAK,IAAI;AACN,cAAA,IAAI,MAAM,mDAAmD;AAAA,MACrE;AAEO,aAAA;AAAA,QACL,GAAG;AAAA,QACH,aAAa,YAAY,WAAW,KAAK,EAAqC,GAAG,QAAQ,CAAC;AAAA,MAAA;AAAA,IAE9F;AAAA,IACA,CAAC,YAAY,QAAQ;AAAA,EAAA;AAGvBA,mBAAM,UAAU,MAAM;AACpB,UAAM,UAAU,YAAY;AAOpB,YAAA,uBAAuB,CAACS,cAC5B,QAAQ;AAAA,QACNA,UAAS,OAAsC,CAAC,KAAK,SAAS,iBAAiB;AAC7E,gBAAM,uBAAuB,QAAQ,MAAM,IAAI,OAAO,MAAM,eAAe;AAAA,YACzE,eAAe,MAAMC,aAAe,eAAA,iBAAiB,KAAK,WAAW;AAAA,YACrE;AAAA,YACA;AAAA,UACA,EAAA;AAEF,iBAAO,CAAC,GAAG,KAAK,GAAG,oBAAoB;AAAA,QACzC,GAAG,EAAE;AAAA,MAAA;AAGH,YAAA,kBAAkB,MAAM,qBAAqB,QAAQ;AAE3D,cAAQ,CAAC,SAAS;AACT,eAAA;AAAA,UACL,GAAG;AAAA,UACH,WAAW;AAAA,UACX,MAAM,SAAS,IAAI,CAAC,SAAS,kBAAkB;AAAA,YAC7C,GAAG;AAAA,YACH,OAAO,QAAQ,MAAM,IAAI,CAAC,MAAM,cAAc;AAC5C,oBAAM,aAAa,gBAAgB;AAAA,gBACjC,CAACC,gBACCA,YAAW,iBAAiB,gBAAgBA,YAAW,cAAc;AAAA,cAAA;AAGlE,qBAAA;AAAA,gBACL,GAAG;AAAA,gBACH,aAAa,QAAQ,YAAY,aAAa;AAAA,cAAA;AAAA,YAChD,CACD;AAAA,UAAA,EACD;AAAA,QAAA;AAAA,MACJ,CACD;AAAA,IAAA;AAGH,UAAM,EAAE,QAAQ,GAAG,cAAA,IAAkB;AACrC,UAAM,WAAW,YAAY;AAAA,MAC3B;AAAA,QACE,GAAG;AAAA,QACH,OAAOC,gBAAAA,QAAO,CAAC,GAAG,OAAO,OAAO,GAAG,YAAY,IAAI,cAAc,CAAC,GAAG,CAAC,SAAS,KAAK,EAAE,EAAE;AAAA,UACtF,CAAC,UAAU;AAAA,YACT,GAAG;AAAA,YACH,iBAAiB,KAAK,OAAO,2BAA2B;AAAA,UAAA;AAAA,QAE5D;AAAA,MACF;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,WAAW,EAAE,IAAI,wBAAwB,gBAAgB,uBAAuB;AAAA,QAChF,OAAO,WAAW,IAAI,cAAc;AAAA,MACtC;AAAA,MACA,GAAG,OAAO,OAAO,aAAa;AAAA,IAAA,CAC/B;AAEO;EAAA,GACP,CAAC,YAAY,aAAa,iBAAiB,UAAU,oBAAoB,cAAc,CAAC;AAEpF,SAAA;AAAA,IACL;AAAA,IACA,MAAM,KAAK,IAAI,CAAC,cAAc;AAAA,MAC5B,GAAG;AAAA,MACH,OAAO,SAAS,MAAM,OAAO,CAAC,SAAS,KAAK,WAAW;AAAA,IAAA,EACvD;AAAA,EAAA;AAEN;ACnKA,MAAM,aAAaC,gBAAAA,QAAOC,aAAAA,IAAI;AAAA;AAAA;AAAA;AAS9B,MAAM,cAAc,CAAC,EAAE,WAA6B;AAC5C,QAAA,EAAE,kBAAkBC,UAAAA;AACpB,QAAA,EAAE,eAAeC,aAAAA;AACjB,QAAA,EAAE,aAAaC,eAAAA;AAErB,QAAM,eAAe,KAAK;AAAA,IACxB,CAAC,YAAY,CAAC,QAAQ,MAAM,MAAM,CAAC,SAAS,KAAK,gBAAgB,KAAK;AAAA,EAAA;AAGxE,QAAM,WAAW,aAAa,IAAI,CAAC,YAAY;AACtC,WAAA;AAAA,MACL,GAAG;AAAA,MACH,OAAO,QAAQ;AAAA,MACf,OAAO,QAAQ,MAAM,IAAI,CAAC,SAAS;AAC1B,eAAA;AAAA,UACL,GAAG;AAAA,UACH,OAAO,KAAK;AAAA,UACZ,MAAM,KAAK;AAAA,QAAA;AAAA,MACb,CACD;AAAA,IAAA;AAAA,EACH,CACD;AAED,QAAM,QAAQ,cAAc;AAAA,IAC1B,IAAI;AAAA,IACJ,gBAAgB;AAAA,EAAA,CACjB;AAEK,QAAA,oBAAoB,CAAC,gBAAwB,MAAM;AACvD,eAAW,gBAAgB,EAAE,MAAM,UAAU,IAAI,aAAa;AAAA,EAAA;AAI9D,SAAAC,2BAAA,KAACC,GAAO,QAAA,EAAA,WAAW,OACjB,UAAA;AAAA,IAAAC,+BAACC,GAAAA,gBAAa,OAAc;AAAA,mCAC3BC,GAAAA,gBACE,EAAA,UAAA,SAAS,IAAI,CAAC,YACZF,2BAAA,IAAAG,kBAAA,EAA+B,OAAO,cAAc,QAAQ,SAAS,GACnE,kBAAQ,MAAM,IAAI,CAAC,SAAS;AAEzB,aAAAL,2BAAA;AAAA,QAACM,GAAA;AAAA,QAAA;AAAA,UACC,IAAIC,eAAA;AAAA,UACJ,YAAY,KAAK;AAAA,UAEjB,IAAI,KAAK;AAAA,UACT,SAAS,kBAAkB,KAAK,EAAE;AAAA,UAGjC,UAAA;AAAA,YAAA,cAAc,KAAK,SAAS;AAAA,YAC5B,MAAM,YACJL,+BAAA,YAAA,EAAW,OAAO,GAAG,KAAK,EAAE,OAAO,QAAQ,GAAG,KAAK,EAAE,OAAO,IAAIM,MAAAA,MAAM;AAAA,UAAA;AAAA,QAAA;AAAA,QAJpE,KAAK;AAAA,MAAA;AAAA,IAQf,CAAA,KAjBiB,QAAQ,EAkB5B,CACD,EACH,CAAA;AAAA,EACF,EAAA,CAAA;AAEJ;ACpFO,MAAM,YAAqB;AAAA,EAChC;AAAA,IACE,MAAM,YAAY;AAChB,YAAM,EAAE,kBAAA,IAAsB,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,QAAO,wBAAwB,CAAA;AAE5D,aAAA;AAAA,IACT;AAAA,IACA,IAAI;AAAA,IACJ,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,MAAM,YAAY;AAChB,YAAM,EAAE,oBAAA,IAAwB,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,QAAO,0BAA0B,CAAA;AAEhE,aAAA;AAAA,IACT;AAAA,IACA,IAAI;AAAA,IACJ,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,MAAM,YAAY;AAChB,YAAM,EAAE,oBAAA,IAAwB,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,QAAO,0BAA0B,CAAA;AAEhE,aAAA;AAAA,IACT;AAAA,IACA,IAAI;AAAA,IACJ,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,MAAM,YAAY;AAChB,YAAM,EAAE,kBAAA,IAAsB,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,QAAO,wBAAwB,CAAA;AAE5D,aAAA;AAAA,IACT;AAAA,IACA,IAAI;AAAA,IACJ,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,MAAM,YAAY;AAChB,YAAM,EAAE,kBAAA,IAAsB,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,QAAO,wBAAwB,CAAA;AAE5D,aAAA;AAAA,IACT;AAAA,IACA,IAAI;AAAA,IACJ,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,MAAM,YAAY;AAChB,YAAM,EAAE,kBAAA,IAAsB,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,QAAO,wBAAwB,CAAA;AAE5D,aAAA;AAAA,IACT;AAAA,IACA,IAAI;AAAA,IACJ,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,MAAM,YAAY;AAChB,YAAM,EAAE,oBAAA,IAAwB,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,QAAO,0BAA6B,CAAA;AAEnE,aAAA;AAAA,IACT;AAAA,IACA,IAAI;AAAA,IACJ,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,MAAM,YAAY;AAChB,YAAM,EAAE,kBAAA,IAAsB,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,QAAO,wBAA2B,CAAA,EAAA,KAAA,OAAA,EAAA,UAAA;AAE/D,aAAA;AAAA,IACT;AAAA,IACA,IAAI;AAAA,IACJ,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,MAAM,YAAY;AAChB,YAAM,EAAE,kBAAA,IAAsB,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,QAAO,wBAA2B,CAAA;AAE/D,aAAA;AAAA,IACT;AAAA,IACA,IAAI;AAAA,IACJ,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,MAAM,YAAY;AAChB,YAAM,EAAE,kBAAA,IAAsB,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,QAAO,wBAA4B,CAAA;AAEhE,aAAA;AAAA,IACT;AAAA,IACA,IAAI;AAAA,IACJ,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,MAAM,YAAY;AAChB,YAAM,EAAE,oBAAA,IAAwB,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,QAAO,0BAA8B,CAAA;AAEpE,aAAA;AAAA,IACT;AAAA,IACA,IAAI;AAAA,IACJ,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,MAAM,YAAY;AAChB,YAAM,EAAE,kBAAA,IAAsB,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,QAAO,4BAAyC,CAAA;AAE7E,aAAA;AAAA,IACT;AAAA,IACA,IAAI;AAAA,IACJ,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,MAAM,YAAY;AAChB,YAAM,EAAE,oBAAA,IAAwB,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,QAAO,0BAAmC,CAAA;AAEzE,aAAA;AAAA,IACT;AAAA,IACA,IAAI;AAAA,IACJ,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,MAAM,YAAY;AAChB,YAAM,EAAE,kBAAA,IAAsB,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,QAAO,wBAAiC,CAAA;AAErE,aAAA;AAAA,IACT;AAAA,IACA,IAAI;AAAA,IACJ,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,MAAM,YAAY;AAChB,YAAM,EAAE,kBAAA,IAAsB,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,QAAO,wBAAiC,CAAA;AAErE,aAAA;AAAA,IACT;AAAA,IACA,IAAI;AAAA,IACJ,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,MAAM,YAAY;AAChB,YAAM,EAAE,kBAAA,IAAsB,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,QAAO,iCAA2B,CAAA;AAE/D,aAAA;AAAA,IACT;AAAA,IACA,IAAI;AAAA,IACJ,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,MAAM,YAAY;AAChB,YAAM,EAAE,wBAAA,IAA4B,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,QAAO,uCAAiC,CAAA;AAE3E,aAAA;AAAA,IACT;AAAA,IACA,IAAI;AAAA,IACJ,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,MAAM,YAAY;AAChB,YAAM,EAAE,qBAAA,IAAyB,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,QAAO,oCAA8B,CAAA;AAErE,aAAA;AAAA,IACT;AAAA,IACA,IAAI;AAAA,IACJ,OAAO;AAAA,EACT;AACF;ACzKO,MAAM,YAAY;AAClB,MAAM,OAAO;AACb,MAAM,kBAAkB,CAAC,cAAc,aAAa,eAAe;ACE1E,MAAM,4BAA4B;AAAA,EAChC,IAAI;AAAA,EACJ,gBAAgB;AAClB;AAEA,MAAM,4BAA4B;AAAA,EAChC,IAAI;AAAA,EACJ,gBACE;AACJ;AAeA,MAAM,qBAAqB,OAAO,SAAoC;AACpE,QAAM,qBAAqB,gBAAgB,SAAS,KAAK,IAAI;AAE7D,MAAI,CAAC,oBAAoB;AACjB,UAAA,IAAI,iBAAiB,eAAe,yBAAyB;AAAA,EACrE;AAEA,QAAM,iBAAiB,MAAM,IAAI,QAAyB,CAAC,YAAY;AAC/D,UAAA,SAAS,IAAI;AACnB,WAAO,SAAS,MAAM;AACd,YAAA,MAAM,IAAI;AAChB,UAAI,SAAS,MAAM;AACjB,gBAAQ,EAAE,OAAO,IAAI,OAAO,QAAQ,IAAI,QAAQ;AAAA,MAAA;AAElD,UAAI,MAAM,OAAO;AAAA,IAAA;AAEnB,WAAO,cAAc,IAAI;AAAA,EAAA,CAC1B;AAED,QAAM,0BACJ,eAAe,SAAS,aAAa,eAAe,UAAU;AAEhE,MAAI,CAAC,yBAAyB;AACtB,UAAA,IAAI,iBAAiB,eAAe,yBAAyB;AAAA,EACrE;AAEA,QAAM,QAAQ;AAAA,IACZ,KAAK,KAAK,KAAK,MAAM,GAAG,EAAE,IAAI;AAAA,IAC9B,MAAM,KAAK,OAAO;AAAA,IAClB,MAAM,KAAK;AAAA,IACX,KAAK,IAAI,gBAAgB,IAAI;AAAA,IAC7B,SAAS;AAAA,IACT,OAAO,eAAe;AAAA,IACtB,QAAQ,eAAe;AAAA,EAAA;AAGnB,QAAA,mBAAmB,MAAM,QAAQ;AAEvC,MAAI,CAAC,kBAAkB;AACf,UAAA,IAAI,iBAAiB,eAAe,yBAAyB;AAAA,EACrE;AAEO,SAAA;AACT;AAEA,MAAM,yBAAyB,MAAM;AAAA,EACnC;AAAA,EAEA,YAAY,SAAiB,gBAAmC,SAAwB;AACtF,UAAM,SAAS,OAAO;AACtB,SAAK,iBAAiB;AAAA,EACxB;AACF;ACrBA,MAAM,CAAC,0BAA0B,mBAAmB,IAClDC,2BAAqC,WAAW;AAgBlD,MAAM,YAAY,CAAC;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAsB;AACpB,QAAM,CAAC,YAAY,aAAa,IAAI3B,iBAAM,SAAiC;AAC3E,QAAM,CAAC,aAAa,cAAc,IAAIA,iBAAM,SAAe;AACrD,QAAA,EAAE,kBAAkBe,UAAAA;AAE1B,QAAM,cAAc,MAAM;AACxB,kBAAc,MAAS;AACvB,mBAAe,MAAS;AAAA,EAAA;AAIxB,SAAAG,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,UAAU;AAAA,MACV,SAAS;AAAA,MAET,UAAA;AAAA,QAAAE,2BAAA;AAAA,UAACQ,aAAA;AAAA,UAAA;AAAA,YACC;AAAA,YACA,eAAe;AAAA,YACf;AAAA,YAGA,eAAc;AAAA,YACd,WAAU;AAAA,YACV,QAAQ,MAAM;AAAA,YAAC;AAAA,YACf,YAAY,MAAM;AAAA,YAAC;AAAA,YACnB,gBAAgB,YAAY,QAAQ;AAAA,YACpC,yCACGC,8BACC,EAAA,UAAA;AAAA,cAAAT,2BAAA;AAAA,gBAACU,aAAA;AAAA,gBAAA;AAAA,kBACC,UAAU,CAAC;AAAA,kBACX,SAAS,MAAM,eAAe,QAAQ;AAAA,kBACtC,OAAO,cAAc;AAAA,oBACnB,IAAI;AAAA,oBACJ,gBAAgB;AAAA,kBAAA,CACjB;AAAA,kBACD,qCAAOC,MAAK,MAAA,EAAA;AAAA,gBAAA;AAAA,cACd;AAAA,cACC,YAAY,OACXX,2BAAA;AAAA,gBAACU,aAAA;AAAA,gBAAA;AAAA,kBACC,UAAU,CAAC;AAAA,kBACX,SAAS,MAAM,aAAa,IAAI;AAAA,kBAChC,OAAO,cAAc;AAAA,oBACnB,IAAI;AAAA,oBACJ,gBAAgB;AAAA,kBAAA,CACjB;AAAA,kBACD,qCAAOE,MAAQ,SAAA,EAAA;AAAA,gBAAA;AAAA,cACjB;AAAA,YAAA,GAEJ;AAAA,YAGF,UAAAZ,2BAAA;AAAA,cAACa,aAAA;AAAA,cAAA;AAAA,gBACC,OAAO,cAAc;AAAA,kBACnB,IAAI;AAAA,kBACJ,gBAAgB;AAAA,gBAAA,CACjB;AAAA,gBAED,UAAAb,2BAAA;AAAA,kBAACc,aAAA;AAAA,kBAAA;AAAA,oBACC,WAAU;AAAA,oBACV,UAAS;AAAA,oBACT,IAAG;AAAA,oBACH,KAAK,YAAY,OAAO;AAAA,oBACxB,KAAK,cAAc;AAAA,sBACjB,IAAI;AAAA,sBACJ,gBAAgB;AAAA,oBAAA,CACjB;AAAA,kBAAA;AAAA,gBACH;AAAA,cAAA;AAAA,YACF;AAAA,UAAA;AAAA,QACF;AAAA,QACC,cACEhB,2BAAAA,KAAAiB,aAAAA,aAAA,EAAY,YAAW,SAAQ,SAAS,aACvC,UAAA;AAAA,UAACf,2BAAAA,IAAAgB,aAAAA,aAAA,EACC,yCAACC,aAAW,YAAA,EAAA,YAAW,QAAO,IAAG,MAAK,IAAG,SACtC,UAAA;AAAA,YACC,gBAAgB,WACZ;AAAA,cACE,IAAI;AAAA,cACJ,gBAAgB;AAAA,YAAA,IAElB;AAAA,cACE,IAAI;AAAA,cACJ,gBAAgB;AAAA,YAClB;AAAA,aAER,EACF,CAAA;AAAA,UACC,gBAAgB,WACfjB,2BAAA,IAAC,iBAAc,IAEfA,+BAAC,qBAAkB,cAA4B;AAAA,QAAA,EAAA,CAEnD,IACE;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGV;AAMA,MAAM,gBAAgB,MAAM;AACpB,QAAA,EAAE,kBAAkBL,UAAAA;AAGxB,SAAAG,2BAAA;AAAA,IAACoB,aAAA;AAAA,IAAA;AAAA,MACC,OAAO,cAAc;AAAA,QACnB,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAAA,CACjB;AAAA,MACD,SAAQ;AAAA,MAER,UAAA;AAAA,QAAApB,2BAAA,KAACgB,aAAI,KAAA,EAAA,aAAa,GAAG,cAAc,GACjC,UAAA;AAAA,UAAAhB,gCAACqB,aAAAA,MACC,EAAA,UAAA;AAAA,YAAAnB,2BAAAA,IAACoB,oBACE,UAAc,cAAA;AAAA,cACb,IAAI;AAAA,cACJ,gBAAgB;AAAA,YACjB,CAAA,GACH;AAAA,YACApB,2BAAAA,IAACoB,oBACE,UAAc,cAAA;AAAA,cACb,IAAI;AAAA,cACJ,gBAAgB;AAAA,YACjB,CAAA,GACH;AAAA,UAAA,GACF;AAAA,yCACCC,aAAQ,SAAA,EAAA;AAAA,QAAA,GACX;AAAA,wCACCC,aAAAA,WACC,EAAA,UAAA;AAAA,UAACtB,2BAAA,IAAAuB,aAAA,UAAA,EACC,UAACvB,2BAAA,IAAA,cAAA,CAAa,CAAA,GAChB;AAAA,UACCA,2BAAA,IAAAuB,aAAA,UAAA,EACC,UAACvB,2BAAA,IAAA,SAAA,CAAQ,CAAA,GACX;AAAA,QAAA,GACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AAMA,MAAM,UAAU,MAAM;AACd,QAAA,EAAE,kBAAkBL,UAAAA;AAC1B,QAAM,CAAC,SAAS,UAAU,IAAIf,iBAAM,SAAS,EAAE;AAC/C,QAAM,CAAC,OAAO,QAAQ,IAAIA,iBAAM,SAAiB;AACjD,QAAM,EAAE,eAAe,UAAU,QAAQ,IAAI,oBAAoB,SAAS;AAEpE,QAAA,eAA2C,CAAC,MAAM;AAC3C,eAAA,EAAE,OAAO,KAAK;AAAA,EAAA;AAGrB,QAAA,eAAwD,OAAO,UAAU;AAC7E,UAAM,eAAe;AAErB,UAAM,OAAO,IAAI,SAAS,MAAM,MAAyB;AAEnD,UAAA,MAAM,KAAK,IAAI,UAAU;AAE/B,QAAI,CAAC,KAAK;AACR;AAAA,IACF;AAEI,QAAA;AACF,YAAM,MAAM,MAAM4C,uBAAM,IAAI,IAAI,YAAY,EAAE,cAAc,QAAQ,SAAS,IAAM,CAAA;AAE7E,YAAA,OAAO,IAAI,KAAK,CAAC,IAAI,IAAI,GAAG,IAAI,OAAO,OAAO,IAAI;AAAA,QACtD,MAAM,IAAI,QAAQ,cAAc;AAAA,MAAA,CACjC;AAEK,YAAA,QAAQ,MAAM,mBAAmB,IAAI;AAE3C,oBAAc,KAAK;AACnB,eAAS,SAAS;AAAA,aACX,KAAK;AACZ,UAAI,eAAeC,MAAAA,YAAY;AAC7B;AAAA,UACE,cAAc;AAAA,YACZ,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAAA,CACjB;AAAA,QAAA;AAAA,MACH,WACS,eAAe,kBAAkB;AACjC,iBAAA,cAAc,IAAI,gBAAgB,EAAE,MAAM,MAAM,WAAW,UAAW,CAAA,CAAC;AAAA,MAAA,OAC3E;AACC,cAAA;AAAA,MACR;AAAA,IACF;AAAA,EAAA;AAIA,SAAA3B,2BAAA,KAAC,QAAK,EAAA,UAAU,cACd,UAAA;AAAA,IAACE,2BAAAA,IAAAc,aAAA,KAAA,EAAI,aAAa,GAAG,cAAc,GAAG,YAAY,GAAG,eAAe,GAClE,UAAAd,2BAAA;AAAA,MAAC0B,aAAA;AAAA,MAAA;AAAA,QACC,OAAO,cAAc;AAAA,UACnB,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAAA,CACjB;AAAA,QACD;AAAA,QACA,UAAU;AAAA,QACV,OAAO;AAAA,QACP,MAAK;AAAA,MAAA;AAAA,IAAA,GAET;AAAA,IACA1B,2BAAA;AAAA,MAAC2B,aAAA;AAAA,MAAA;AAAA,QACC,cACE3B,2BAAA,IAAC4B,aAAO,QAAA,EAAA,SAAS,SAAS,SAAQ,YAC/B,UAAc,cAAA,EAAE,IAAI,gCAAgC,gBAAgB,SAAU,CAAA,GACjF;AAAA,QAEF,YACE5B,2BAAA,IAAC4B,qBAAO,EAAA,MAAK,UACV,UAAc,cAAA;AAAA,UACb,IAAI;AAAA,UACJ,gBAAgB;AAAA,QACjB,CAAA,GACH;AAAA,MAAA;AAAA,IAEJ;AAAA,EACF,EAAA,CAAA;AAEJ;AAMA,MAAM,eAAe,MAAM;AACnB,QAAA,EAAE,kBAAkBjC,UAAAA;AAC1B,QAAM,CAAC,UAAU,WAAW,IAAIf,iBAAM,SAAS,KAAK;AACpD,QAAM,CAAC,WAAW,YAAY,IAAIA,iBAAM,SAAiB;AACnD,QAAA,WAAWA,iBAAM,OAAyB,IAAK;AAC/C,QAAA,KAAKA,iBAAM;AAEjB,QAAM,EAAE,eAAe,UAAU,QAAQ,IAAI,oBAAoB,cAAc;AAEzE,QAAA,kBAAkB,MAAM,YAAY,IAAI;AACxC,QAAA,kBAAkB,MAAM,YAAY,KAAK;AAEzC,QAAA,cAAsC,CAAC,MAAM;AACjD,MAAE,eAAe;AACjB,aAAS,QAAQ;EAAM;AAGzB,QAAM,eAAe,YAAY;AACf;AAEZ,QAAA,CAAC,SAAS,QAAQ,OAAO;AAC3B;AAAA,IACF;AAEA,UAAM,CAAC,IAAI,IAAI,SAAS,QAAQ;AAE5B,QAAA;AACI,YAAA,QAAQ,MAAM,mBAAmB,IAAI;AAC3C,oBAAc,KAAK;AACnB,eAAS,SAAS;AAAA,aACX,KAAK;AACZ,UAAI,eAAe,kBAAkB;AACtB,qBAAA,cAAc,IAAI,gBAAgB,EAAE,MAAM,MAAM,WAAW,UAAW,CAAA,CAAC;AACpF,iBAAS,QAAQ;MAAM,OAClB;AACC,cAAA;AAAA,MACR;AAAA,IACF;AAAA,EAAA;AAGF,SAEIkB,2BAAA,KAAA+B,qBAAA,EAAA,UAAA;AAAA,IAAC7B,2BAAA,IAAA,QAAA,EACC,UAACA,2BAAAA,IAAAc,aAAAA,KAAA,EAAI,aAAa,GAAG,cAAc,GAAG,YAAY,GAAG,eAAe,GAClE,UAAAd,2BAAAA,IAAC8B,aAAAA,SAAM,MAAM,IAAI,OAAO,WACtB,UAAChC,gCAAAiC,aAAAA,MAAA,EAAK,WAAU,UAAS,YAAW,WAAU,KAAK,GACjD,UAAA;AAAA,MAAAjC,2BAAA;AAAA,QAACiC,aAAA;AAAA,QAAA;AAAA,UACC,YAAY;AAAA,UACZ,eAAe;AAAA,UACf,WAAS;AAAA,UACT,gBAAe;AAAA,UACf,WAAU;AAAA,UACV,YAAY,WAAW,eAAe;AAAA,UACtC,aAAa,WAAW,eAAe,YAAY,cAAc;AAAA,UACjE,aAAY;AAAA,UACZ,aAAY;AAAA,UACZ,UAAS;AAAA,UACT,aAAa;AAAA,UACb,aAAa;AAAA,UAEb,UAAA;AAAA,YAAA/B,2BAAA;AAAA,cAACN,aAAA;AAAA,cAAA;AAAA,gBACC,OAAM;AAAA,gBACN,OAAOsC,qBAAQ,EAAE;AAAA,gBACjB,QAAQA,qBAAQ,EAAE;AAAA,gBAClB,IAAIC,MAAA;AAAA,gBACJ,eAAW;AAAA,cAAA;AAAA,YACb;AAAA,YACCjC,2BAAA,IAAAc,aAAA,KAAA,EAAI,YAAY,GAAG,eAAe,GACjC,UAAAd,2BAAA,IAACiB,aAAW,YAAA,EAAA,SAAQ,SAAQ,IAAG,SAAQ,SAAS,IAC7C,UAAc,cAAA;AAAA,cACb,IAAI;AAAA,cACJ,gBAAgB;AAAA,YAAA,CACjB,GACH,EACF,CAAA;AAAA,YACAjB,2BAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,QAAQ,gBAAgB,KAAK,IAAI;AAAA,gBACjC,MAAK;AAAA,gBACL,MAAK;AAAA,gBACL,UAAU;AAAA,gBACV,UAAU;AAAA,gBACV,KAAK;AAAA,gBACL;AAAA,cAAA;AAAA,YACF;AAAA,2CACC4B,aAAAA,QAAO,EAAA,MAAK,UAAS,SAAS,aAC5B,UAAc,cAAA;AAAA,cACb,IAAI;AAAA,cACJ,gBAAgB;AAAA,YACjB,CAAA,GACH;AAAA,YACA5B,2BAAAA,IAACc,aAAAA,OAAI,YAAY,GACf,yCAACG,yBAAW,EAAA,SAAQ,MAAK,WAAU,cAChC,UAAA;AAAA,cACC;AAAA,gBACE,IAAI;AAAA,gBACJ,gBACE;AAAA,cACJ;AAAA,cACA,EAAE,MAAM,MAAM,WAAW,UAAU;AAAA,eAEvC,EACF,CAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,qCACCiB,aAAW,YAAA,EAAA;AAAA,IAAA,GACd,EAAA,CACF,EACF,CAAA,GACF;AAAA,IACAlC,2BAAA;AAAA,MAAC2B,aAAA;AAAA,MAAA;AAAA,QACC,cACG3B,2BAAAA,IAAA4B,aAAA,QAAA,EAAO,SAAS,SAAS,SAAQ,YAC/B,UAAc,cAAA;AAAA,UACb,IAAI;AAAA,UACJ,gBAAgB;AAAA,QACjB,CAAA,GACH;AAAA,MAAA;AAAA,IAEJ;AAAA,EACF,EAAA,CAAA;AAEJ;AAEA,MAAM,YAAYnC,gBAAAA,QAAO0C,aAAAA,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBnC,MAAM,oBAAoB,CAAC,EAAE,mBAA2C;AAChE,QAAA,EAAE,kBAAkBxC,UAAAA;AAC1B,QAAM,EAAE,YAAY,eAAe,UAAU,YAAY,oBAAoB,mBAAmB;AAEhG,QAAM,eAAe,MAAM;AACzB,kBAAc,MAAS;AACvB,aAAS,QAAQ;AAAA,EAAA;AAGnB,QAAM,eAAe,MAAM;AACzB,QAAI,YAAY;AACd,mBAAa,UAAU;AAAA,IACzB;AACQ;EAAA;AAGV,SAEIG,2BAAA,KAAA+B,qBAAA,EAAA,UAAA;AAAA,IAAC/B,2BAAAA,KAAAgB,aAAA,KAAA,EAAI,aAAa,GAAG,cAAc,GAAG,YAAY,GAAG,eAAe,GAClE,UAAA;AAAA,MAAAhB,2BAAA,KAACiC,aAAK,MAAA,EAAA,gBAAe,iBAAgB,eAAe,GAClD,UAAA;AAAA,QAAAjC,2BAAA,KAACiC,aAAK,MAAA,EAAA,WAAU,UAAS,YAAW,cAClC,UAAA;AAAA,UAAA/B,+BAACiB,aAAAA,YAAW,EAAA,SAAQ,MAAK,YAAW,QACjC,UAAc,cAAA;AAAA,YACb,IAAI;AAAA,YACJ,gBAAgB;AAAA,UACjB,CAAA,GACH;AAAA,yCACCA,aAAAA,YAAW,EAAA,SAAQ,MAAK,WAAU,cAChC,UAAc,cAAA;AAAA,YACb,IAAI;AAAA,YACJ,gBAAgB;AAAA,UACjB,CAAA,GACH;AAAA,QAAA,GACF;AAAA,uCACCW,aAAAA,QAAO,EAAA,SAAS,cAAc,SAAQ,aACpC,UAAc,cAAA;AAAA,UACb,IAAI;AAAA,UACJ,gBAAgB;AAAA,QACjB,CAAA,GACH;AAAA,MAAA,GACF;AAAA,MACC5B,2BAAA,IAAAc,aAAA,KAAA,EAAI,UAAUkB,aAAAA,QAAQ,GAAG,GACvB,UAAY,YAAA,MAAOhC,2BAAAA,IAAA,gBAAA,EAAe,OAAO,WAAY,CAAA,IAAK,MAC7D;AAAA,IAAA,GACF;AAAA,IACAA,2BAAA;AAAA,MAAC2B,aAAA;AAAA,MAAA;AAAA,QACC,cACG3B,2BAAAA,IAAA4B,aAAA,QAAA,EAAO,SAAS,SAAS,SAAQ,YAC/B,UAAc,cAAA;AAAA,UACb,IAAI;AAAA,UACJ,gBAAgB;AAAA,QACjB,CAAA,GACH;AAAA,QAEF,YACE5B,2BAAA,IAAC4B,qBAAO,EAAA,SAAS,cACd,UAAc,cAAA;AAAA,UACb,IAAI;AAAA,UACJ,gBAAgB;AAAA,QACjB,CAAA,GACH;AAAA,MAAA;AAAA,IAEJ;AAAA,EACF,EAAA,CAAA;AAEJ;AAUA,MAAM,iBAAiB,CAAC,EAAE,YAAiC;AACnD,QAAA,EAAE,kBAAkBjC,UAAAA;AAE1B,yCACGyC,mBACC,EAAA,UAAA;AAAA,IAACpC,2BAAAA,IAAAqC,aAAAA,YAAA,EACC,yCAACC,aAAAA,WAAU,EAAA,MAAK,KAAI,KAAK,MAAM,KAAK,EACtC,CAAA;AAAA,oCACCC,aAAAA,UACC,EAAA,UAAA;AAAA,MAAAzC,gCAAC0C,aAAAA,aACC,EAAA,UAAA;AAAA,QAACxC,2BAAAA,IAAAyC,aAAAA,WAAA,EAAW,gBAAM,KAAK,CAAA;AAAA,QACtBzC,2BAAA,IAAA0C,aAAA,cAAA,EACE,UAAG,GAAA,MAAM,KAAK,YAAA,CAAa,MAAM,MAAM,KAAK,IAAI,MAAM,MAAM,IAC/D;AAAA,MAAA,GACF;AAAA,MACA1C,2BAAAA,IAAC2C,0BACE,UAAc,cAAA;AAAA,QACb,IAAI;AAAA,QACJ,gBAAgB;AAAA,MACjB,CAAA,GACH;AAAA,IAAA,GACF;AAAA,EACF,EAAA,CAAA;AAEJ;ACzgBA,MAAM,kBAAkB,MAAM;AAM9B,MAAM,sBAAsB,MAAM;AAC1B,QAAA,EAAE,eAAe/C,aAAAA;AACjB,QAAA,EAAE,kBAAkBD,UAAAA;AAC1B,QAAM,EAAE,OAAO,aAAa,sBAAsB,IAAIiD,MAAAA,iBAAiB,qBAAqB;AAC5F,QAAM,CAAC,OAAO,QAAQ,IAAIhE,iBAAM,SAAS,EAAE,MAAM,YAAY,MAAM,MAAM,YAAY,KAAM,CAAA;AAC3F,QAAM,EAAE,SAAA,IAAaI,WAAA,YAAYC,iBAAsB,sBAAA;AAEjD,QAAA;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,MACEH,aAAW,WAAA;AAEf,QAAM,gBAAgBK,MAAA;AAAA,IACpB;AAAA,IACA,aAEI,MAAM,qCACJ,6BACF,CAAA,GACA;AAAA,EAAA;AAGA,QAAA;AAAA,IACJ,gBAAgB,EAAE,SAAS,UAAU;AAAA,EAAA,IACnC0D,aAAAA,QAAQ,WAAW,SAAS,kBAAkB,IAAI,CAAE,CAAA;AAEnCC,eAAAA;AAEf,QAAA,eAAwD,CAAC,MAAM;AACnE,MAAE,eAAe;AAEK,0BAAA;AAAA,MACpB,UAAU,MAAM,KAAK,UAAU;AAAA,MAC/B,UAAU,MAAM,KAAK,UAAU;AAAA,IAAA,CAChC;AAAA,EAAA;AAGH,QAAM,mBACJ,CAAC,SACD,CAAC,YAAY;AAIX,QAAI,YAAY,MAAM;AACpB,iBAAW,qBAAqB;AAAA,QAC9B;AAAA,MAAA,CACD;AAAA,IACH;AAEA,aAAS,CAAC,UAAU;AAAA,MAClB,GAAG;AAAA,MACH,CAAC,IAAI,GAAG;AAAA,QACN,GAAG,KAAK,IAAI;AAAA,QACZ,QAAQ;AAAA,MACV;AAAA,IACA,EAAA;AAAA,EAAA;AAGNlE,mBAAM,UAAU,MAAM;AACX,aAAA;AAAA,MACP,MAAM,YAAY;AAAA,MAClB,MAAM,YAAY;AAAA,IAAA,CACnB;AAAA,EAAA,GACA,CAAC,WAAW,CAAC;AAGhB,MAAI,CAAC,eAAe;AACX,WAAA;AAAA,EACT;AAEM,QAAA,iBACJ,MAAM,KAAK,WAAW,YAAY,KAAK,UAAU,MAAM,KAAK,WAAW,YAAY,KAAK;AAE1F,yCACGmE,qBACC,EAAA,UAAA;AAAA,IAAA/C,2BAAA;AAAA,MAACgD,aAAA;AAAA,MAAA;AAAA,QACC,MAAM,cAAc;AAAA,UAClB,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAAA,CACjB;AAAA,MAAA;AAAA,IACH;AAAA,IACChD,+BAAAiD,aAAAA,MAAA,EACC,UAACnD,2BAAAA,KAAA,QAAA,EAAK,UAAU,cACd,UAAA;AAAA,MAAAE,2BAAA;AAAA,QAACkD,aAAA;AAAA,QAAA;AAAA,UACC,OAAO,cAAc;AAAA,YACnB,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAAA,CACjB;AAAA,UACD,UAAU,cAAc;AAAA,YACtB,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAAA,CACjB;AAAA,UACD,eACE,aACElD,2BAAA,IAAC4B,uBAAO,UAAU,gBAAgB,MAAK,UAAS,0CAAYuB,MAAAA,OAAM,CAAA,CAAA,GAC/D,wBAAc,EAAE,IAAI,eAAe,gBAAgB,OAAQ,CAAA,GAC9D;AAAA,QAAA;AAAA,MAGN;AAAA,MACAnD,2BAAAA,IAACoD,aAAAA,iBACC,UAACtD,2BAAAA,KAAAiC,aAAAA,MAAA,EAAK,WAAU,UAAS,YAAW,WAAU,KAAK,GACjD,UAAA;AAAA,QAAAjC,2BAAA;AAAA,UAACiC,aAAA;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,YAAW;AAAA,YACX,KAAK;AAAA,YACL,WAAS;AAAA,YACT,YAAW;AAAA,YACX,QAAO;AAAA,YACP,YAAY;AAAA,YACZ,eAAe;AAAA,YACf,cAAc;AAAA,YACd,aAAa;AAAA,YAEb,UAAA;AAAA,cAAA/B,+BAACiB,aAAAA,YAAW,EAAA,SAAQ,SAAQ,IAAG,MAC5B,UAAc,cAAA;AAAA,gBACb,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cACjB,CAAA,GACH;AAAA,cAECnB,2BAAA,KAAAuD,aAAA,MAAA,EAAK,KAAK,GAAG,IAAG,MACf,UAAA;AAAA,gBAAAvD,2BAAA,KAACwD,aAAS,UAAA,EAAA,KAAK,GAAG,GAAG,IACnB,UAAA;AAAA,kBAAAtD,2BAAAA,IAACiB,2BAAW,SAAQ,SAAQ,WAAU,cAAa,IAAG,MACnD,UAAc,cAAA;AAAA,oBACb,IAAI;AAAA,oBACJ,gBAAgB;AAAA,kBACjB,CAAA,GACH;AAAA,kBACAnB,2BAAAA,KAACiC,qBAAK,KAAK,GAAG,WAAU,UAAS,YAAW,SAAQ,IAAG,MACrD,UAAA;AAAA,oBAAAjC,gCAACmB,aAAAA,YAAW,EAAA,UAAA;AAAA,sBAAA;AAAA,sBAAE;AAAA,oBAAA,GAAc;AAAA,oBAC3B,sBACCjB,2BAAA;AAAA,sBAACuD,aAAA;AAAA,sBAAA;AAAA,wBACC,MAAM,iDAAiD,sBAAsB;AAAA,wBAC7E,wCAAUC,MAAa,cAAA,EAAA;AAAA,wBAEtB,UAAc,cAAA;AAAA,0BACb,IAAI;AAAA,0BACJ,gBAAgB;AAAA,wBAAA,CACjB;AAAA,sBAAA;AAAA,oBACH;AAAA,kBAAA,GAEJ;AAAA,gBAAA,GACF;AAAA,gBACC1D,2BAAA,KAAAwD,aAAA,UAAA,EAAS,KAAK,GAAG,GAAG,IACnB,UAAA;AAAA,kBAAAtD,2BAAAA,IAACiB,2BAAW,SAAQ,SAAQ,WAAU,cAAa,IAAG,MACnD,UAAc,cAAA;AAAA,oBACb,IAAI;AAAA,oBACJ,gBAAgB;AAAA,kBACjB,CAAA,GACH;AAAA,kBACAnB,2BAAAA,KAACiC,qBAAK,KAAK,GAAG,WAAU,UAAS,YAAW,SAAQ,IAAG,MACrD,UAAA;AAAA,oBAAA/B,+BAACiB,aAAAA,YACE,EAAA,UAAA;AAAA,sBACC;AAAA,wBACE,IAAI;AAAA,wBACJ,gBACE;AAAA,sBACJ;AAAA,sBACA,EAAE,iBAAiB;AAAA,oBAAA,GAEvB;AAAA,oBACAjB,2BAAAA,IAACuD,qBAAK,MAAK,yCAAwC,SAAUvD,2BAAA,IAAAwD,oBAAA,CAAA,CAAa,GACvE,UAAc,cAAA;AAAA,sBACb,IAAI;AAAA,sBACJ,gBAAgB;AAAA,oBACjB,CAAA,GACH;AAAA,kBAAA,GACF;AAAA,gBAAA,GACF;AAAA,gBAEC1D,2BAAA,KAAAwD,aAAA,UAAA,EAAS,KAAK,GAAG,GAAG,IACnB,UAAA;AAAA,kBAAAtD,2BAAAA,IAACiB,2BAAW,SAAQ,SAAQ,WAAU,cAAa,IAAG,MACnD,UAAc,cAAA;AAAA,oBACb,IAAI;AAAA,oBACJ,gBAAgB;AAAA,kBACjB,CAAA,GACH;AAAA,kBACCjB,2BAAA,IAAAiB,aAAA,YAAA,EAAW,IAAG,MAAM,UAAY,aAAA;AAAA,gBAAA,GACnC;AAAA,+CACC,eAAc,EAAA;AAAA,cAAA,GACjB;AAAA,YAAA;AAAA,UAAA;AAAA,QACF;AAAA,QACC,WACCnB,2BAAA;AAAA,UAACgB,aAAA;AAAA,UAAA;AAAA,YACC,WAAS;AAAA,YACT,YAAW;AAAA,YACX,QAAO;AAAA,YACP,YAAY;AAAA,YACZ,eAAe;AAAA,YACf,cAAc;AAAA,YACd,aAAa;AAAA,YAEb,UAAA;AAAA,cAAAd,+BAACiB,aAAAA,YAAW,EAAA,SAAQ,SAAQ,IAAG,MAC5B,UAAc,cAAA;AAAA,gBACb,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cACjB,CAAA,GACH;AAAA,cACCjB,2BAAA,IAAAiB,aAAA,YAAA,EAAW,SAAQ,MAAK,WAAU,cAChC,UAAA;AAAA,gBACC;AAAA,kBACE,IAAI;AAAA,kBACJ,gBACE;AAAA,gBACJ;AAAA,gBACA,EAAE,WAAW,WAAW,MAAM,KAAK;AAAA,cAAA,GAEvC;AAAA,cACCnB,2BAAA,KAAAuD,aAAA,MAAA,EAAK,YAAY,GAAG,KAAK,GACxB,UAAA;AAAA,gBAAArD,2BAAA,IAACsD,aAAS,UAAA,EAAA,KAAK,GAAG,GAAG,IACnB,UAAAtD,2BAAA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC;AAAA,oBACA,YAAY,MAAM,KAAK;AAAA,oBACvB,aAAa,MAAM,KAAK;AAAA,oBACxB,MAAM,cAAc;AAAA,sBAClB,IAAI;AAAA,sBACJ,gBAAgB;AAAA,oBAAA,CACjB;AAAA,oBACD,OAAO,cAAc;AAAA,sBACnB,IAAI;AAAA,sBACJ,gBAAgB;AAAA,oBAAA,CACjB;AAAA,oBACD,cAAc,iBAAiB,MAAM;AAAA,kBAAA;AAAA,gBAAA,GAEzC;AAAA,gBACCA,2BAAA,IAAAsD,aAAA,UAAA,EAAS,KAAK,GAAG,GAAG,IACnB,UAAAtD,2BAAA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC;AAAA,oBACA,YAAY,MAAM,KAAK;AAAA,oBACvB,aAAa,MAAM,KAAK;AAAA,oBACxB,MAAM,cAAc;AAAA,sBAClB,IAAI;AAAA,sBACJ,gBAAgB;AAAA,oBAAA,CACjB;AAAA,oBACD,OAAO,cAAc;AAAA,sBACnB,IAAI;AAAA,sBACJ,gBAAgB;AAAA,oBAAA,CACjB;AAAA,oBACD,cAAc,iBAAiB,MAAM;AAAA,kBAAA;AAAA,gBAAA,GAEzC;AAAA,cAAA,GACF;AAAA,YAAA;AAAA,UAAA;AAAA,QACF;AAAA,MAAA,EAAA,CAEJ,EACF,CAAA;AAAA,IAAA,EAAA,CACF,EACF,CAAA;AAAA,EACF,EAAA,CAAA;AAEJ;ACrRA,MAAM,eAAe,MAAM;AACnB,QAAA,EAAE,cAAcyD,eAAAA;AAChB,QAAA,EAAE,aAAa1E,aAAAA;AACf,QAAA,EAAE,kBAAkBY,UAAAA;AAC1B,QAAM,EAAE,WAAW,KAAK,IAAI,gBAAgB;AAC5C,QAAM,SAASR,MAAA;AAAA,IACb;AAAA,IACA,aAAa,MAAM,qCAAO,yBAAuD,CAAA,GAAG;AAAA,IACpF;AAAA,MACE,QAAQ,UAAU,UAAU;AAC1B,eAAO,CAAC,GAAG,UAAU,GAAG,QAAQ;AAAA,MAClC;AAAA,MACA,cAAc,CAAC;AAAA,IACjB;AAAA,EAAA;AAII,QAAA,cAAcP,iBAAM,QAAQ,MAAM;AAC/B,WAAA,iBAAiB,MAAM,EAAE;AAAA,MAAI,CAAC,EAAE,IAAI,WAAW,YACpD8E,MAAAA,YAAY,WAAW,IAAI,KAAK;AAAA,IAAA;AAAA,EAClC,GACC,CAAC,MAAM,CAAC;AAEX,QAAM,gBAAgB,OAAO,OAAO,QAAQ,EAAE,QAAQ,CAAC,YAAY;AAC3D,UAAA,EAAE,MAAU,IAAA;AAElB,WAAO,MAAM,IAAI,CAAC,SAASA,MAAY,YAAA,KAAK,WAAW,KAAK,IAAI,KAAK,SAAS,KAAK,CAAC;AAAA,EAAA,CACrF;AAID,MAAI,WAAW;AACb,0CAAQC,mCAAqB,CAAA,CAAA;AAAA,EAC/B;AAEA,MAAI,CAAC,WAAW;AACP,WAAA3D,2BAAA,IAAC4D,eAAS,UAAA,EAAA,IAAG,8BAA8B,CAAA;AAAA,EACpD;AAEA,yCACGb,qBAAO,EAAA,SAAU/C,2BAAAA,IAAA,aAAA,EAAY,MAAY,GACxC,UAAA;AAAA,IAAAA,2BAAA;AAAA,MAAC6D,YAAA;AAAA,MAAA;AAAA,QACC,OAAO,cAAc;AAAA,UACnB,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAAA,CACjB;AAAA,MAAA;AAAA,IACH;AAAA,oCAECC,eAAAA,QACC,EAAA,UAAA;AAAA,MAAA9D,+BAAC+D,eAAAA,SAAM,MAAK,+BAA8B,WAAW,qBAAqB,OAAK,MAAC;AAAA,MAC/E;AAAA,MACA;AAAA,IAAA,GACH;AAAA,EACF,EAAA,CAAA;AAEJ;AAEa,MAAA,mBAAmB,CAAC,WAC/B,OAAO;AAAA,EACL,CAAC,OAAOC,QAAO,aAAa,SAAS,UAAU,CAAC,QAAQ,IAAI,OAAO,MAAM,EAAE,MAAMA;AACnF;;;"}
@@ -5,10 +5,10 @@ import { useRBACProvider, useAppInfo, useStrapiApp, hasPermissions, useTracking,
5
5
  import { Helmet } from "react-helmet";
6
6
  import { useIntl } from "react-intl";
7
7
  import { useLocation, NavLink, useParams, Redirect, Switch, Route } from "react-router-dom";
8
- import { y as SETTINGS_LINKS_CE, p as useEnterprise, u as useConfiguration, d as createRoute } from "./index-XBOTBNuC.mjs";
8
+ import { y as SETTINGS_LINKS_CE, p as useEnterprise, u as useConfiguration, d as createRoute } from "./index-b9TUtGUa.mjs";
9
9
  import sortBy from "lodash/sortBy";
10
10
  import { useSelector } from "react-redux";
11
- import { s as selectAdminPermissions } from "./AuthenticatedApp-kwdjs_S0.mjs";
11
+ import { s as selectAdminPermissions } from "./AuthenticatedApp-riaX0bqk.mjs";
12
12
  import { SubNav, SubNavHeader, SubNavSections, SubNavSection, SubNavLink } from "@strapi/design-system/v2";
13
13
  import { Lock, Plus, Refresh, PicturePlus, Check, ExternalLink } from "@strapi/icons";
14
14
  import styled from "styled-components";
@@ -32,15 +32,19 @@ import "immer";
32
32
  import "lodash/get";
33
33
  import "lodash/set";
34
34
  import "lodash/defaultsDeep";
35
+ import "lodash/isEqual";
36
+ import "lodash/throttle";
37
+ import "lodash/isBoolean";
38
+ import "lodash/isEmpty";
39
+ import "lodash/isNaN";
40
+ import "lodash/toNumber";
35
41
  import "react-dnd";
36
42
  import "react-dnd-html5-backend";
37
43
  import "react-window";
38
44
  import "lodash/cloneDeep";
39
- import "lodash/isEqual";
40
45
  import "lodash/upperFirst";
41
46
  import "prop-types";
42
47
  import "lodash/fp";
43
- import "lodash/isNaN";
44
48
  import "lodash/take";
45
49
  import "slate";
46
50
  import "slate-history";
@@ -62,10 +66,7 @@ import "markdown-it-sup";
62
66
  import "highlight.js/styles/solarized-dark.css";
63
67
  import "codemirror5/addon/display/placeholder";
64
68
  import "lodash/toString";
65
- import "lodash/isEmpty";
66
69
  import "react-dom";
67
- import "lodash/isBoolean";
68
- import "lodash/toNumber";
69
70
  import "fractional-indexing";
70
71
  import "lodash/uniqBy";
71
72
  import "lodash/unset";
@@ -92,7 +93,7 @@ const useSettingsMenu = () => {
92
93
  const ceLinks = React.useMemo(() => SETTINGS_LINKS_CE(), []);
93
94
  const { admin: adminLinks, global: globalLinks } = useEnterprise(
94
95
  ceLinks,
95
- async () => (await import("./constants-Dc5jQV8s.mjs")).SETTINGS_LINKS_EE(),
96
+ async () => (await import("./constants-yGtTecAp.mjs")).SETTINGS_LINKS_EE(),
96
97
  {
97
98
  combine(ceLinks2, eeLinks) {
98
99
  return {
@@ -232,7 +233,7 @@ const SettingsNav = ({ menu }) => {
232
233
  const ROUTES_CE = [
233
234
  {
234
235
  async Component() {
235
- const { ProtectedListPage } = await import("./ListPage-Zl1MvQPk.mjs");
236
+ const { ProtectedListPage } = await import("./ListPage-GzgYYtmk.mjs");
236
237
  return ProtectedListPage;
237
238
  },
238
239
  to: "/settings/roles",
@@ -240,7 +241,7 @@ const ROUTES_CE = [
240
241
  },
241
242
  {
242
243
  async Component() {
243
- const { ProtectedCreatePage } = await import("./CreatePage-d-1uabiQ.mjs");
244
+ const { ProtectedCreatePage } = await import("./CreatePage-EXRlBeTU.mjs");
244
245
  return ProtectedCreatePage;
245
246
  },
246
247
  to: "/settings/roles/duplicate/:id",
@@ -248,7 +249,7 @@ const ROUTES_CE = [
248
249
  },
249
250
  {
250
251
  async Component() {
251
- const { ProtectedCreatePage } = await import("./CreatePage-d-1uabiQ.mjs");
252
+ const { ProtectedCreatePage } = await import("./CreatePage-EXRlBeTU.mjs");
252
253
  return ProtectedCreatePage;
253
254
  },
254
255
  to: "/settings/roles/new",
@@ -256,7 +257,7 @@ const ROUTES_CE = [
256
257
  },
257
258
  {
258
259
  async Component() {
259
- const { ProtectedEditPage } = await import("./EditPage-d2rOG_1W.mjs");
260
+ const { ProtectedEditPage } = await import("./EditPage-IpoJS5rO.mjs");
260
261
  return ProtectedEditPage;
261
262
  },
262
263
  to: "/settings/roles/:id",
@@ -264,7 +265,7 @@ const ROUTES_CE = [
264
265
  },
265
266
  {
266
267
  async Component() {
267
- const { ProtectedListPage } = await import("./ListPage-8UEc6X8O.mjs");
268
+ const { ProtectedListPage } = await import("./ListPage-bYTHiweO.mjs");
268
269
  return ProtectedListPage;
269
270
  },
270
271
  to: "/settings/users",
@@ -272,7 +273,7 @@ const ROUTES_CE = [
272
273
  },
273
274
  {
274
275
  async Component() {
275
- const { ProtectedEditPage } = await import("./EditPage-tdmuOKSb.mjs");
276
+ const { ProtectedEditPage } = await import("./EditPage-drzNgxSE.mjs");
276
277
  return ProtectedEditPage;
277
278
  },
278
279
  to: "/settings/users/:id",
@@ -280,7 +281,7 @@ const ROUTES_CE = [
280
281
  },
281
282
  {
282
283
  async Component() {
283
- const { ProtectedCreatePage } = await import("./CreatePage-gkLnzJM5.mjs");
284
+ const { ProtectedCreatePage } = await import("./CreatePage-KinJzBfK.mjs");
284
285
  return ProtectedCreatePage;
285
286
  },
286
287
  to: "/settings/webhooks/create",
@@ -288,7 +289,7 @@ const ROUTES_CE = [
288
289
  },
289
290
  {
290
291
  async Component() {
291
- const { ProtectedEditPage } = await import("./EditPage-pgD1DzOE.mjs").then((n) => n.b);
292
+ const { ProtectedEditPage } = await import("./EditPage-0Z8TqXxY.mjs").then((n) => n.b);
292
293
  return ProtectedEditPage;
293
294
  },
294
295
  to: "/settings/webhooks/:id",
@@ -296,7 +297,7 @@ const ROUTES_CE = [
296
297
  },
297
298
  {
298
299
  async Component() {
299
- const { ProtectedListPage } = await import("./ListPage-aXOKmOXc.mjs");
300
+ const { ProtectedListPage } = await import("./ListPage-bKxvH7z1.mjs");
300
301
  return ProtectedListPage;
301
302
  },
302
303
  to: "/settings/webhooks",
@@ -304,7 +305,7 @@ const ROUTES_CE = [
304
305
  },
305
306
  {
306
307
  async Component() {
307
- const { ProtectedListView } = await import("./ListView-YA5QXiq4.mjs");
308
+ const { ProtectedListView } = await import("./ListView-vXmZKMHu.mjs");
308
309
  return ProtectedListView;
309
310
  },
310
311
  to: "/settings/api-tokens",
@@ -312,7 +313,7 @@ const ROUTES_CE = [
312
313
  },
313
314
  {
314
315
  async Component() {
315
- const { ProtectedCreateView } = await import("./CreateView-rsZvKS7A.mjs");
316
+ const { ProtectedCreateView } = await import("./CreateView-XkGXb6jg.mjs");
316
317
  return ProtectedCreateView;
317
318
  },
318
319
  to: "/settings/api-tokens/create",
@@ -320,7 +321,7 @@ const ROUTES_CE = [
320
321
  },
321
322
  {
322
323
  async Component() {
323
- const { ProtectedEditView } = await import("./EditViewPage-v2VcQV_Y.mjs");
324
+ const { ProtectedEditView } = await import("./EditViewPage-QA7Fd5u9.mjs");
324
325
  return ProtectedEditView;
325
326
  },
326
327
  to: "/settings/api-tokens/:id",
@@ -328,7 +329,7 @@ const ROUTES_CE = [
328
329
  },
329
330
  {
330
331
  async Component() {
331
- const { ProtectedCreateView } = await import("./CreateView-fD5On04e.mjs");
332
+ const { ProtectedCreateView } = await import("./CreateView-JQtnFUlZ.mjs");
332
333
  return ProtectedCreateView;
333
334
  },
334
335
  to: "/settings/transfer-tokens/create",
@@ -336,7 +337,7 @@ const ROUTES_CE = [
336
337
  },
337
338
  {
338
339
  async Component() {
339
- const { ProtectedListView } = await import("./ListView-RLPQGwfo.mjs");
340
+ const { ProtectedListView } = await import("./ListView-eWw9mvz0.mjs");
340
341
  return ProtectedListView;
341
342
  },
342
343
  to: "/settings/transfer-tokens",
@@ -344,7 +345,7 @@ const ROUTES_CE = [
344
345
  },
345
346
  {
346
347
  async Component() {
347
- const { ProtectedEditView } = await import("./EditView-_am4shhk.mjs");
348
+ const { ProtectedEditView } = await import("./EditView-t_-XGK_U.mjs");
348
349
  return ProtectedEditView;
349
350
  },
350
351
  to: "/settings/transfer-tokens/:id",
@@ -352,7 +353,7 @@ const ROUTES_CE = [
352
353
  },
353
354
  {
354
355
  async Component() {
355
- const { PurchaseAuditLogs } = await import("./PurchaseAuditLogs-zQio54Q3.mjs");
356
+ const { PurchaseAuditLogs } = await import("./PurchaseAuditLogs-KILCZp5x.mjs");
356
357
  return PurchaseAuditLogs;
357
358
  },
358
359
  to: "/settings/purchase-audit-logs",
@@ -360,7 +361,7 @@ const ROUTES_CE = [
360
361
  },
361
362
  {
362
363
  async Component() {
363
- const { PurchaseReviewWorkflows } = await import("./PurchaseReviewWorkflows-zGnRRqrC.mjs");
364
+ const { PurchaseReviewWorkflows } = await import("./PurchaseReviewWorkflows-rVcCufNv.mjs");
364
365
  return PurchaseReviewWorkflows;
365
366
  },
366
367
  to: "/settings/purchase-review-workflows",
@@ -368,7 +369,7 @@ const ROUTES_CE = [
368
369
  },
369
370
  {
370
371
  async Component() {
371
- const { PurchaseSingleSignOn } = await import("./PurchaseSingleSignOn-BQ5PU-6E.mjs");
372
+ const { PurchaseSingleSignOn } = await import("./PurchaseSingleSignOn-H8KWtk1K.mjs");
372
373
  return PurchaseSingleSignOn;
373
374
  },
374
375
  to: "/settings/purchase-single-sign-on",
@@ -819,7 +820,7 @@ const ApplicationInfoPage = () => {
819
820
  } = useAppInfo();
820
821
  const AdminSeatInfo = useEnterprise(
821
822
  AdminSeatInfoCE,
822
- async () => (await import("./AdminSeatInfo-mjxcHmrg.mjs")).AdminSeatInfoEE
823
+ async () => (await import("./AdminSeatInfo-m8yR8BMU.mjs")).AdminSeatInfoEE
823
824
  );
824
825
  const {
825
826
  allowedActions: { canRead, canUpdate }
@@ -1027,7 +1028,7 @@ const SettingsPage = () => {
1027
1028
  const { isLoading, menu } = useSettingsMenu();
1028
1029
  const routes = useEnterprise(
1029
1030
  ROUTES_CE,
1030
- async () => (await import("./constants-dP7nNukG.mjs")).ROUTES_EE,
1031
+ async () => (await import("./constants-zSvUC_X3.mjs")).ROUTES_EE,
1031
1032
  {
1032
1033
  combine(ceRoutes, eeRoutes) {
1033
1034
  return [...ceRoutes, ...eeRoutes];
@@ -1074,4 +1075,4 @@ export {
1074
1075
  SettingsPage,
1075
1076
  makeUniqueRoutes
1076
1077
  };
1077
- //# sourceMappingURL=SettingsPage-Ib7N7CWP.mjs.map
1078
+ //# sourceMappingURL=SettingsPage-hIdNLgyU.mjs.map