@strapi/admin 4.16.0 → 4.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (183) hide show
  1. package/dist/_chunks/{AuthenticatedApp-2b5530b9.mjs → AuthenticatedApp-722b2e84.mjs} +21 -21
  2. package/dist/_chunks/{AuthenticatedApp-2b5530b9.mjs.map → AuthenticatedApp-722b2e84.mjs.map} +1 -1
  3. package/dist/_chunks/{AuthenticatedApp-12b0b80d.js → AuthenticatedApp-7e646400.js} +21 -21
  4. package/dist/_chunks/{AuthenticatedApp-12b0b80d.js.map → AuthenticatedApp-7e646400.js.map} +1 -1
  5. package/dist/_chunks/{HomePage-763d3a5f.js → HomePage-0e0dc215.js} +4 -4
  6. package/dist/_chunks/{HomePage-763d3a5f.js.map → HomePage-0e0dc215.js.map} +1 -1
  7. package/dist/_chunks/{HomePage-93e2ba01.mjs → HomePage-76bcd0cd.mjs} +4 -4
  8. package/dist/_chunks/{HomePage-93e2ba01.mjs.map → HomePage-76bcd0cd.mjs.map} +1 -1
  9. package/dist/_chunks/{HomePage-f6a78451.mjs → HomePage-8c98b31f.mjs} +4 -4
  10. package/dist/_chunks/{HomePage-f6a78451.mjs.map → HomePage-8c98b31f.mjs.map} +1 -1
  11. package/dist/_chunks/{HomePage-3ad80266.js → HomePage-ef787733.js} +4 -4
  12. package/dist/_chunks/{HomePage-3ad80266.js.map → HomePage-ef787733.js.map} +1 -1
  13. package/dist/_chunks/{InstalledPluginsPage-83eaebad.mjs → InstalledPluginsPage-67b5f9c2.mjs} +3 -3
  14. package/dist/_chunks/{InstalledPluginsPage-83eaebad.mjs.map → InstalledPluginsPage-67b5f9c2.mjs.map} +1 -1
  15. package/dist/_chunks/{InstalledPluginsPage-e3d10fcd.js → InstalledPluginsPage-6f0897e8.js} +3 -3
  16. package/dist/_chunks/{InstalledPluginsPage-e3d10fcd.js.map → InstalledPluginsPage-6f0897e8.js.map} +1 -1
  17. package/dist/_chunks/{Login-a48df094.js → Login-5b447dd2.js} +2 -2
  18. package/dist/_chunks/{Login-a48df094.js.map → Login-5b447dd2.js.map} +1 -1
  19. package/dist/_chunks/{Login-e12abb16.mjs → Login-8ade15b8.mjs} +2 -2
  20. package/dist/_chunks/{Login-e12abb16.mjs.map → Login-8ade15b8.mjs.map} +1 -1
  21. package/dist/_chunks/{MarketplacePage-193e4eca.js → MarketplacePage-1c954f9d.js} +3 -3
  22. package/dist/_chunks/{MarketplacePage-193e4eca.js.map → MarketplacePage-1c954f9d.js.map} +1 -1
  23. package/dist/_chunks/{MarketplacePage-b1679fa5.mjs → MarketplacePage-58fc8a9a.mjs} +3 -3
  24. package/dist/_chunks/{MarketplacePage-b1679fa5.mjs.map → MarketplacePage-58fc8a9a.mjs.map} +1 -1
  25. package/dist/_chunks/{ProfilePage-3858db75.mjs → ProfilePage-a2f0366d.mjs} +3 -3
  26. package/dist/_chunks/{ProfilePage-3858db75.mjs.map → ProfilePage-a2f0366d.mjs.map} +1 -1
  27. package/dist/_chunks/{ProfilePage-4a1eb00d.js → ProfilePage-a68483d3.js} +3 -3
  28. package/dist/_chunks/{ProfilePage-4a1eb00d.js.map → ProfilePage-a68483d3.js.map} +1 -1
  29. package/dist/_chunks/{constants-dd4a9742.js → constants-155022af.js} +3 -3
  30. package/dist/_chunks/{constants-dd4a9742.js.map → constants-155022af.js.map} +1 -1
  31. package/dist/_chunks/{constants-481b3914.mjs → constants-32d352b6.mjs} +3 -3
  32. package/dist/_chunks/{constants-481b3914.mjs.map → constants-32d352b6.mjs.map} +1 -1
  33. package/dist/_chunks/{constants-5fd54815.js → constants-3967338c.js} +5 -5
  34. package/dist/_chunks/{constants-5fd54815.js.map → constants-3967338c.js.map} +1 -1
  35. package/dist/_chunks/{constants-8bdc91a9.mjs → constants-6bf1c3c2.mjs} +5 -5
  36. package/dist/_chunks/{constants-8bdc91a9.mjs.map → constants-6bf1c3c2.mjs.map} +1 -1
  37. package/dist/_chunks/{constants-49d63c92.js → constants-d097f266.js} +6 -6
  38. package/dist/_chunks/{constants-49d63c92.js.map → constants-d097f266.js.map} +1 -1
  39. package/dist/_chunks/{constants-6876b155.mjs → constants-da1ff847.mjs} +6 -6
  40. package/dist/_chunks/{constants-6876b155.mjs.map → constants-da1ff847.mjs.map} +1 -1
  41. package/dist/_chunks/{constants-fac0ce8c.js → constants-eb77e47a.js} +2 -2
  42. package/dist/_chunks/{constants-fac0ce8c.js.map → constants-eb77e47a.js.map} +1 -1
  43. package/dist/_chunks/{constants-b0bc030f.mjs → constants-ecad1e20.mjs} +2 -2
  44. package/dist/_chunks/{constants-b0bc030f.mjs.map → constants-ecad1e20.mjs.map} +1 -1
  45. package/dist/_chunks/{index-1ddec644.mjs → index-061947f1.mjs} +20 -20
  46. package/dist/_chunks/{index-1ddec644.mjs.map → index-061947f1.mjs.map} +1 -1
  47. package/dist/_chunks/{index-6757c461.mjs → index-06e97c47.mjs} +5 -5
  48. package/dist/_chunks/{index-6757c461.mjs.map → index-06e97c47.mjs.map} +1 -1
  49. package/dist/_chunks/{index-526ea946.js → index-1482f542.js} +2 -2
  50. package/dist/_chunks/{index-526ea946.js.map → index-1482f542.js.map} +1 -1
  51. package/dist/_chunks/{index-8c5b4bda.mjs → index-14887b9d.mjs} +3 -3
  52. package/dist/_chunks/{index-8c5b4bda.mjs.map → index-14887b9d.mjs.map} +1 -1
  53. package/dist/_chunks/{index-e76dc085.js → index-1502dedd.js} +4 -4
  54. package/dist/_chunks/{index-e76dc085.js.map → index-1502dedd.js.map} +1 -1
  55. package/dist/_chunks/{index-c8f0ea8f.js → index-19bd1210.js} +6 -6
  56. package/dist/_chunks/{index-c8f0ea8f.js.map → index-19bd1210.js.map} +1 -1
  57. package/dist/_chunks/{index-4ff0e245.js → index-2064cfaf.js} +3 -3
  58. package/dist/_chunks/{index-4ff0e245.js.map → index-2064cfaf.js.map} +1 -1
  59. package/dist/_chunks/{index-0dcabbdd.mjs → index-209cca35.mjs} +3 -3
  60. package/dist/_chunks/{index-0dcabbdd.mjs.map → index-209cca35.mjs.map} +1 -1
  61. package/dist/_chunks/{index-b6e7426d.mjs → index-24c2627d.mjs} +3 -3
  62. package/dist/_chunks/{index-b6e7426d.mjs.map → index-24c2627d.mjs.map} +1 -1
  63. package/dist/_chunks/{index-cf24d5a0.js → index-24d1e175.js} +5 -5
  64. package/dist/_chunks/{index-cf24d5a0.js.map → index-24d1e175.js.map} +1 -1
  65. package/dist/_chunks/{index-4ac37d7c.js → index-272d8fb9.js} +3 -3
  66. package/dist/_chunks/{index-4ac37d7c.js.map → index-272d8fb9.js.map} +1 -1
  67. package/dist/_chunks/{index-5d14fd43.mjs → index-2cf8d1f6.mjs} +3 -3
  68. package/dist/_chunks/{index-5d14fd43.mjs.map → index-2cf8d1f6.mjs.map} +1 -1
  69. package/dist/_chunks/{index-ad85a00a.mjs → index-35c3f9f1.mjs} +4 -4
  70. package/dist/_chunks/{index-ad85a00a.mjs.map → index-35c3f9f1.mjs.map} +1 -1
  71. package/dist/_chunks/{index-95d9bcb0.mjs → index-391891ba.mjs} +3 -3
  72. package/dist/_chunks/{index-95d9bcb0.mjs.map → index-391891ba.mjs.map} +1 -1
  73. package/dist/_chunks/{index-5e9a93b3.mjs → index-3939f07e.mjs} +4 -4
  74. package/dist/_chunks/{index-5e9a93b3.mjs.map → index-3939f07e.mjs.map} +1 -1
  75. package/dist/_chunks/{index-bd42fb77.mjs → index-3aab6b0f.mjs} +6 -6
  76. package/dist/_chunks/{index-bd42fb77.mjs.map → index-3aab6b0f.mjs.map} +1 -1
  77. package/dist/_chunks/{index-9f08bcc3.mjs → index-3c67c00b.mjs} +4 -4
  78. package/dist/_chunks/{index-9f08bcc3.mjs.map → index-3c67c00b.mjs.map} +1 -1
  79. package/dist/_chunks/{index-20454411.mjs → index-48c35356.mjs} +5 -5
  80. package/dist/_chunks/{index-20454411.mjs.map → index-48c35356.mjs.map} +1 -1
  81. package/dist/_chunks/{index-da64448f.js → index-4a019067.js} +3 -3
  82. package/dist/_chunks/{index-da64448f.js.map → index-4a019067.js.map} +1 -1
  83. package/dist/_chunks/{index-69dbf2cf.mjs → index-55155d83.mjs} +2 -2
  84. package/dist/_chunks/{index-69dbf2cf.mjs.map → index-55155d83.mjs.map} +1 -1
  85. package/dist/_chunks/{index-9d98e8b2.js → index-57f9a06f.js} +8 -8
  86. package/dist/_chunks/{index-9d98e8b2.js.map → index-57f9a06f.js.map} +1 -1
  87. package/dist/_chunks/{index-7e31e982.mjs → index-61852c7a.mjs} +3 -3
  88. package/dist/_chunks/{index-7e31e982.mjs.map → index-61852c7a.mjs.map} +1 -1
  89. package/dist/_chunks/{index-56cc01e0.js → index-6685e5a8.js} +3 -3
  90. package/dist/_chunks/{index-56cc01e0.js.map → index-6685e5a8.js.map} +1 -1
  91. package/dist/_chunks/{index-eb720419.js → index-6731bae9.js} +5 -5
  92. package/dist/_chunks/{index-eb720419.js.map → index-6731bae9.js.map} +1 -1
  93. package/dist/_chunks/{index-296f0769.mjs → index-674778e2.mjs} +2 -2
  94. package/dist/_chunks/{index-296f0769.mjs.map → index-674778e2.mjs.map} +1 -1
  95. package/dist/_chunks/{index-eab05381.js → index-6a8a1f1d.js} +3 -3
  96. package/dist/_chunks/{index-eab05381.js.map → index-6a8a1f1d.js.map} +1 -1
  97. package/dist/_chunks/{index-faf78cfd.mjs → index-707e89df.mjs} +3 -3
  98. package/dist/_chunks/{index-faf78cfd.mjs.map → index-707e89df.mjs.map} +1 -1
  99. package/dist/_chunks/{index-947668f7.js → index-724169b2.js} +3 -3
  100. package/dist/_chunks/{index-947668f7.js.map → index-724169b2.js.map} +1 -1
  101. package/dist/_chunks/{index-42a0b19b.js → index-73971882.js} +3 -3
  102. package/dist/_chunks/{index-42a0b19b.js.map → index-73971882.js.map} +1 -1
  103. package/dist/_chunks/{index-f09ec538.js → index-78f4851e.js} +3 -3
  104. package/dist/_chunks/{index-f09ec538.js.map → index-78f4851e.js.map} +1 -1
  105. package/dist/_chunks/{index-89a1d72c.mjs → index-7a797b0f.mjs} +4 -4
  106. package/dist/_chunks/{index-89a1d72c.mjs.map → index-7a797b0f.mjs.map} +1 -1
  107. package/dist/_chunks/{index-f762b27d.js → index-7b174d49.js} +20 -20
  108. package/dist/_chunks/{index-f762b27d.js.map → index-7b174d49.js.map} +1 -1
  109. package/dist/_chunks/{index-912140fa.js → index-819443df.js} +4 -4
  110. package/dist/_chunks/{index-912140fa.js.map → index-819443df.js.map} +1 -1
  111. package/dist/_chunks/{index-9881aa54.mjs → index-82fca9fd.mjs} +3 -3
  112. package/dist/_chunks/{index-9881aa54.mjs.map → index-82fca9fd.mjs.map} +1 -1
  113. package/dist/_chunks/{index-c0f59e46.mjs → index-8609fab4.mjs} +8 -8
  114. package/dist/_chunks/{index-c0f59e46.mjs.map → index-8609fab4.mjs.map} +1 -1
  115. package/dist/_chunks/{index-5d044c87.mjs → index-86a4fbbf.mjs} +3 -3
  116. package/dist/_chunks/{index-5d044c87.mjs.map → index-86a4fbbf.mjs.map} +1 -1
  117. package/dist/_chunks/{index-8b79ee6c.js → index-8f8eaed6.js} +4 -4
  118. package/dist/_chunks/{index-8b79ee6c.js.map → index-8f8eaed6.js.map} +1 -1
  119. package/dist/_chunks/{index-ef2c6efd.js → index-91726188.js} +3 -3
  120. package/dist/_chunks/{index-ef2c6efd.js.map → index-91726188.js.map} +1 -1
  121. package/dist/_chunks/{index-bcafdc00.mjs → index-97c03ee2.mjs} +4 -4
  122. package/dist/_chunks/{index-bcafdc00.mjs.map → index-97c03ee2.mjs.map} +1 -1
  123. package/dist/_chunks/{index-e04aafb3.mjs → index-9b2501ca.mjs} +2 -2
  124. package/dist/_chunks/{index-e04aafb3.mjs.map → index-9b2501ca.mjs.map} +1 -1
  125. package/dist/_chunks/{index-1d2a74ca.mjs → index-aad003e4.mjs} +5 -5
  126. package/dist/_chunks/{index-1d2a74ca.mjs.map → index-aad003e4.mjs.map} +1 -1
  127. package/dist/_chunks/{index-60e19de0.js → index-ad0512f0.js} +4 -4
  128. package/dist/_chunks/{index-60e19de0.js.map → index-ad0512f0.js.map} +1 -1
  129. package/dist/_chunks/{index-a9574ead.js → index-b247e702.js} +3 -3
  130. package/dist/_chunks/{index-a9574ead.js.map → index-b247e702.js.map} +1 -1
  131. package/dist/_chunks/{index-f5a00b06.js → index-b3ad6e5f.js} +3 -3
  132. package/dist/_chunks/{index-f5a00b06.js.map → index-b3ad6e5f.js.map} +1 -1
  133. package/dist/_chunks/{index-8759f1d9.js → index-b5eec5e2.js} +5 -5
  134. package/dist/_chunks/{index-8759f1d9.js.map → index-b5eec5e2.js.map} +1 -1
  135. package/dist/_chunks/{index-71c88425.js → index-b6b2a306.js} +3 -3
  136. package/dist/_chunks/{index-71c88425.js.map → index-b6b2a306.js.map} +1 -1
  137. package/dist/_chunks/{index-ebd0c6b2.mjs → index-be9a9d91.mjs} +3 -3
  138. package/dist/_chunks/{index-ebd0c6b2.mjs.map → index-be9a9d91.mjs.map} +1 -1
  139. package/dist/_chunks/{index-98221317.mjs → index-c5fa9006.mjs} +5 -5
  140. package/dist/_chunks/{index-98221317.mjs.map → index-c5fa9006.mjs.map} +1 -1
  141. package/dist/_chunks/{index-caa6ed37.js → index-c6c83bb3.js} +2 -2
  142. package/dist/_chunks/{index-caa6ed37.js.map → index-c6c83bb3.js.map} +1 -1
  143. package/dist/_chunks/{index-9ebd4c75.js → index-c8b6afca.js} +4 -4
  144. package/dist/_chunks/{index-9ebd4c75.js.map → index-c8b6afca.js.map} +1 -1
  145. package/dist/_chunks/{index-c8be54b1.js → index-caab4b20.js} +2 -2
  146. package/dist/_chunks/{index-c8be54b1.js.map → index-caab4b20.js.map} +1 -1
  147. package/dist/_chunks/{index-d8d56664.mjs → index-cc38421b.mjs} +5 -5
  148. package/dist/_chunks/{index-d8d56664.mjs.map → index-cc38421b.mjs.map} +1 -1
  149. package/dist/_chunks/{index-a8c829e4.js → index-cdcf1a78.js} +5 -5
  150. package/dist/_chunks/{index-a8c829e4.js.map → index-cdcf1a78.js.map} +1 -1
  151. package/dist/_chunks/{index-a98002b5.mjs → index-cea88049.mjs} +4 -4
  152. package/dist/_chunks/{index-a98002b5.mjs.map → index-cea88049.mjs.map} +1 -1
  153. package/dist/_chunks/{index-ff413b1a.js → index-ceacb143.js} +5 -5
  154. package/dist/_chunks/{index-ff413b1a.js.map → index-ceacb143.js.map} +1 -1
  155. package/dist/_chunks/{index-34233ee7.mjs → index-d1219a93.mjs} +3 -3
  156. package/dist/_chunks/{index-34233ee7.mjs.map → index-d1219a93.mjs.map} +1 -1
  157. package/dist/_chunks/{index-a61e2ef0.mjs → index-d47fc57d.mjs} +4 -4
  158. package/dist/_chunks/{index-a61e2ef0.mjs.map → index-d47fc57d.mjs.map} +1 -1
  159. package/dist/_chunks/{index-60941eee.mjs → index-d844fbda.mjs} +3 -3
  160. package/dist/_chunks/{index-60941eee.mjs.map → index-d844fbda.mjs.map} +1 -1
  161. package/dist/_chunks/{index-bdb23c76.js → index-d9aae905.js} +5 -5
  162. package/dist/_chunks/{index-bdb23c76.js.map → index-d9aae905.js.map} +1 -1
  163. package/dist/_chunks/{index-ccae5f17.js → index-dab453d2.js} +4 -4
  164. package/dist/_chunks/{index-ccae5f17.js.map → index-dab453d2.js.map} +1 -1
  165. package/dist/_chunks/{index-55f565cf.mjs → index-dd897afb.mjs} +3 -3
  166. package/dist/_chunks/{index-55f565cf.mjs.map → index-dd897afb.mjs.map} +1 -1
  167. package/dist/_chunks/{index-74601a9b.js → index-ec2d87cb.js} +4 -4
  168. package/dist/_chunks/{index-74601a9b.js.map → index-ec2d87cb.js.map} +1 -1
  169. package/dist/_chunks/{index-a1707d3b.js → index-ecfaf6c1.js} +3 -3
  170. package/dist/_chunks/{index-a1707d3b.js.map → index-ecfaf6c1.js.map} +1 -1
  171. package/dist/_chunks/{index-1eef7482.mjs → index-ff4fb44c.mjs} +5 -5
  172. package/dist/_chunks/{index-1eef7482.mjs.map → index-ff4fb44c.mjs.map} +1 -1
  173. package/dist/_chunks/{schema-e8bfd9c4.js → schema-336f4dd6.js} +2 -2
  174. package/dist/_chunks/{schema-e8bfd9c4.js.map → schema-336f4dd6.js.map} +1 -1
  175. package/dist/_chunks/{schema-da392e23.mjs → schema-60d9880c.mjs} +2 -2
  176. package/dist/_chunks/{schema-da392e23.mjs.map → schema-60d9880c.mjs.map} +1 -1
  177. package/dist/_chunks/{validateWorkflow-67154f59.mjs → validateWorkflow-022b5005.mjs} +3 -3
  178. package/dist/_chunks/{validateWorkflow-67154f59.mjs.map → validateWorkflow-022b5005.mjs.map} +1 -1
  179. package/dist/_chunks/{validateWorkflow-34ccfb57.js → validateWorkflow-7f76e43f.js} +3 -3
  180. package/dist/_chunks/{validateWorkflow-34ccfb57.js.map → validateWorkflow-7f76e43f.js.map} +1 -1
  181. package/dist/admin/index.js +1 -1
  182. package/dist/admin/index.mjs +1 -1
  183. package/package.json +12 -12
@@ -1 +1 @@
1
- {"version":3,"file":"index-9f08bcc3.mjs","sources":["../../admin/src/components/NoJavascript.tsx","../../admin/src/components/DefaultDocument.tsx","../../admin/src/components/PrivateRoute.tsx","../../admin/src/constants.ts","../../admin/src/contexts/configuration.ts","../../admin/src/hooks/useEnterprise.ts","../../admin/src/components/LanguageProvider.tsx","../../admin/src/components/UnauthenticatedLogo.tsx","../../admin/src/layouts/UnauthenticatedLayout.tsx","../../admin/src/pages/Auth/components/FieldActionWrapper.tsx","../../admin/src/pages/Auth/components/Login.tsx","../../admin/src/pages/Auth/components/ForgotPassword.tsx","../../admin/src/pages/Auth/components/ForgotPasswordSuccess.tsx","../../admin/src/pages/Auth/components/Oops.tsx","../../admin/src/components/NpsSurvey.tsx","../../admin/src/pages/Auth/components/Register.tsx","../../admin/src/pages/Auth/components/ResetPassword.tsx","../../admin/src/pages/Auth/constants.ts","../../admin/src/pages/Auth/AuthPage.tsx","../../admin/src/pages/NotFoundPage.tsx","../../admin/src/pages/UseCasePage.tsx","../../admin/src/utils/createRoute.tsx","../../admin/src/App.tsx","../../admin/src/assets/images/logo-strapi-2022.svg","../../admin/src/contexts/admin.ts","../../admin/src/components/ConfigurationProvider.tsx","../../admin/src/components/GuidedTour/Provider.tsx","../../admin/src/contexts/themeToggle.ts","../../admin/src/components/Theme.tsx","../../admin/src/components/ThemeToggleProvider.tsx","../../admin/src/components/Providers.tsx","../../admin/src/core/apis/Components.ts","../../admin/src/core/apis/CustomFields.ts","../../admin/src/core/apis/Fields.ts","../../admin/src/core/apis/Middlewares.ts","../../admin/src/core/apis/Plugin.ts","../../admin/src/core/apis/Reducers.ts","../../admin/src/core/store/hooks.ts","../../admin/src/components/RBACProvider.tsx","../../admin/src/content-manager/hooks/useSyncRbac/constants.js","../../admin/src/content-manager/hooks/useSyncRbac/reducer.js","../../admin/src/content-manager/pages/App/constants.js","../../admin/src/content-manager/pages/App/reducer.js","../../admin/src/content-manager/pages/EditViewLayoutManager/constants.js","../../admin/src/content-manager/pages/EditViewLayoutManager/reducer.js","../../admin/src/content-manager/pages/ListView/constants.js","../../admin/src/content-manager/pages/ListView/reducer.js","../../admin/src/content-manager/sharedReducers/crudReducer/constants.js","../../admin/src/content-manager/sharedReducers/crudReducer/reducer.js","../../admin/src/reducer.ts","../../admin/src/core/store/configure.ts","../../admin/src/core/utils/basename.ts","../../admin/src/core/utils/createHook.ts","../../admin/src/shared/hooks/useInjectionZone.ts","../../admin/src/shared/components/InjectionZone.tsx","../../admin/src/translations/languageNativeNames.ts","../../admin/src/StrapiApp.tsx","../../admin/src/render.ts"],"sourcesContent":["const styles = `\n.strapi--root {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n bottom: 0;\n background: #fff;\n}\n\n.strapi--no-js {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n text-align: center;\n font-family: helvetica, arial, sans-serif;\n}\n`;\n\n/**\n * @internal\n *\n * @description this belongs to our default document that we render.\n */\nconst NoJavascript = () => {\n return (\n <noscript>\n <div className=\"strapi--root\">\n <div className=\"strapi--no-js\">\n <style type=\"text/css\">{styles}</style>\n <h1>JavaScript disabled</h1>\n <p>\n Please <a href=\"https://www.enable-javascript.com/\">enable JavaScript</a> in your\n browser and reload the page to proceed.\n </p>\n </div>\n </div>\n </noscript>\n );\n};\n\nexport { NoJavascript };\n","import { NoJavascript } from './NoJavascript';\n\n/**\n * TODO: add favicons.........\n */\n\nconst globalStyles = `\n html,\n body,\n #strapi {\n height: 100%;\n }\n body {\n margin: 0;\n -webkit-font-smoothing: antialiased;\n }\n`;\n\n/**\n * @internal\n */\nconst DefaultDocument = () => {\n return (\n <html lang=\"en\">\n <head>\n <meta charSet=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, viewport-fit=cover\" />\n <meta name=\"robots\" content=\"noindex\" />\n <meta name=\"referrer\" content=\"same-origin\" />\n\n <title>Strapi Admin</title>\n <style>{globalStyles}</style>\n </head>\n <body>\n <div id=\"strapi\" />\n <NoJavascript />\n </body>\n </html>\n );\n};\n\nexport { DefaultDocument };\n","import * as React from 'react';\n\nimport { auth } from '@strapi/helper-plugin';\nimport { Redirect, Route, useLocation } from 'react-router-dom';\n\ntype PropsOf<T> = T extends React.ComponentType<infer P> ? P : object;\n\ntype PrivateRouteProps<TComponent extends React.ElementType> = {\n component: TComponent;\n path: string;\n} & PropsOf<TComponent>;\n\nconst PrivateRoute = <TComponent extends React.ElementType>({\n component: Component,\n path,\n ...rest\n}: PrivateRouteProps<TComponent>) => {\n const { pathname, search } = useLocation();\n\n return (\n <Route\n path={path}\n render={(props) =>\n auth.getToken() !== null ? (\n <Component {...rest} {...props} />\n ) : (\n <Redirect\n to={{\n pathname: '/auth/login',\n search:\n pathname !== '/'\n ? `?redirectTo=${encodeURIComponent(`${pathname}${search}`)}`\n : undefined,\n }}\n />\n )\n }\n />\n );\n};\n\nexport { PrivateRoute };\n","import { StrapiAppSettingLink } from '@strapi/helper-plugin';\n\nexport const ADMIN_PERMISSIONS_CE = {\n contentManager: {\n main: [],\n collectionTypesConfigurations: [\n {\n action: 'plugin::content-manager.collection-types.configure-view',\n subject: null,\n },\n ],\n componentsConfigurations: [\n {\n action: 'plugin::content-manager.components.configure-layout',\n subject: null,\n },\n ],\n singleTypesConfigurations: [\n {\n action: 'plugin::content-manager.single-types.configure-view',\n subject: null,\n },\n ],\n },\n marketplace: {\n main: [{ action: 'admin::marketplace.read', subject: null }],\n read: [{ action: 'admin::marketplace.read', subject: null }],\n },\n settings: {\n roles: {\n main: [\n { action: 'admin::roles.create', subject: null },\n { action: 'admin::roles.update', subject: null },\n { action: 'admin::roles.read', subject: null },\n { action: 'admin::roles.delete', subject: null },\n ],\n create: [{ action: 'admin::roles.create', subject: null }],\n delete: [{ action: 'admin::roles.delete', subject: null }],\n read: [{ action: 'admin::roles.read', subject: null }],\n update: [{ action: 'admin::roles.update', subject: null }],\n },\n users: {\n main: [\n { action: 'admin::users.create', subject: null },\n { action: 'admin::users.read', subject: null },\n { action: 'admin::users.update', subject: null },\n { action: 'admin::users.delete', subject: null },\n ],\n create: [{ action: 'admin::users.create', subject: null }],\n delete: [{ action: 'admin::users.delete', subject: null }],\n read: [{ action: 'admin::users.read', subject: null }],\n update: [{ action: 'admin::users.update', subject: null }],\n },\n webhooks: {\n main: [\n { action: 'admin::webhooks.create', subject: null },\n { action: 'admin::webhooks.read', subject: null },\n { action: 'admin::webhooks.update', subject: null },\n { action: 'admin::webhooks.delete', subject: null },\n ],\n create: [{ action: 'admin::webhooks.create', subject: null }],\n delete: [{ action: 'admin::webhooks.delete', subject: null }],\n read: [\n { action: 'admin::webhooks.read', subject: null },\n // NOTE: We need to check with the API\n { action: 'admin::webhooks.update', subject: null },\n { action: 'admin::webhooks.delete', subject: null },\n ],\n update: [{ action: 'admin::webhooks.update', subject: null }],\n },\n 'api-tokens': {\n main: [{ action: 'admin::api-tokens.access', subject: null }],\n create: [{ action: 'admin::api-tokens.create', subject: null }],\n delete: [{ action: 'admin::api-tokens.delete', subject: null }],\n read: [{ action: 'admin::api-tokens.read', subject: null }],\n update: [{ action: 'admin::api-tokens.update', subject: null }],\n regenerate: [{ action: 'admin::api-tokens.regenerate', subject: null }],\n },\n 'transfer-tokens': {\n main: [{ action: 'admin::transfer.tokens.access', subject: null }],\n create: [{ action: 'admin::transfer.tokens.create', subject: null }],\n delete: [{ action: 'admin::transfer.tokens.delete', subject: null }],\n read: [{ action: 'admin::transfer.tokens.read', subject: null }],\n update: [{ action: 'admin::transfer.tokens.update', subject: null }],\n regenerate: [{ action: 'admin::transfer.tokens.regenerate', subject: null }],\n },\n 'project-settings': {\n read: [{ action: 'admin::project-settings.read', subject: null }],\n update: [{ action: 'admin::project-settings.update', subject: null }],\n },\n },\n};\n\nexport const HOOKS = {\n /**\n * Hook that allows to mutate the displayed headers of the list view table\n * @constant\n * @type {string}\n */\n INJECT_COLUMN_IN_TABLE: 'Admin/CM/pages/ListView/inject-column-in-table',\n\n /**\n * Hook that allows to mutate the CM's collection types links pre-set filters\n * @constant\n * @type {string}\n */\n MUTATE_COLLECTION_TYPES_LINKS: 'Admin/CM/pages/App/mutate-collection-types-links',\n\n /**\n * Hook that allows to mutate the CM's edit view layout\n * @constant\n * @type {string}\n */\n MUTATE_EDIT_VIEW_LAYOUT: 'Admin/CM/pages/EditView/mutate-edit-view-layout',\n\n /**\n * Hook that allows to mutate the CM's single types links pre-set filters\n * @constant\n * @type {string}\n */\n MUTATE_SINGLE_TYPES_LINKS: 'Admin/CM/pages/App/mutate-single-types-links',\n};\n\nexport const ACTION_SET_APP_RUNTIME_STATUS = 'StrapiAdmin/APP/SET_APP_RUNTIME_STATUS';\nexport const ACTION_SET_ADMIN_PERMISSIONS = 'StrapiAdmin/App/SET_ADMIN_PERMISSIONS';\n\nexport interface SettingsMenuLink extends Omit<StrapiAppSettingLink, 'Component' | 'permissions'> {\n Component?: never;\n lockIcon?: boolean;\n}\n\nexport type SettingsMenu = {\n admin: SettingsMenuLink[];\n global: SettingsMenuLink[];\n};\n\nexport const SETTINGS_LINKS_CE = (): SettingsMenu => ({\n global: [\n {\n intlLabel: { id: 'Settings.application.title', defaultMessage: 'Overview' },\n to: '/settings/application-infos',\n id: '000-application-infos',\n },\n {\n intlLabel: { id: 'Settings.webhooks.title', defaultMessage: 'Webhooks' },\n to: '/settings/webhooks',\n id: 'webhooks',\n },\n {\n intlLabel: { id: 'Settings.apiTokens.title', defaultMessage: 'API Tokens' },\n to: '/settings/api-tokens?sort=name:ASC',\n id: 'api-tokens',\n },\n {\n intlLabel: { id: 'Settings.transferTokens.title', defaultMessage: 'Transfer Tokens' },\n to: '/settings/transfer-tokens?sort=name:ASC',\n id: 'transfer-tokens',\n },\n // If the Enterprise feature is not enabled and if the config doesn't disable it, we promote the Enterprise feature by displaying them in the settings menu.\n // Disable this by adding \"promoteEE: false\" to your `./config/admin.js` file\n ...(!window.strapi.features.isEnabled(window.strapi.features.SSO) &&\n window.strapi?.flags?.promoteEE\n ? [\n {\n intlLabel: { id: 'Settings.sso.title', defaultMessage: 'Single Sign-On' },\n to: '/settings/purchase-single-sign-on',\n id: 'sso',\n lockIcon: true,\n },\n ]\n : []),\n\n ...(!window.strapi.features.isEnabled(window.strapi.features.REVIEW_WORKFLOWS) &&\n window.strapi?.flags?.promoteEE\n ? [\n {\n intlLabel: {\n id: 'Settings.review-workflows.page.title',\n defaultMessage: 'Review Workflows',\n },\n to: '/settings/purchase-review-workflows',\n id: 'review-workflows',\n lockIcon: true,\n },\n ]\n : []),\n ],\n\n admin: [\n {\n intlLabel: { id: 'global.roles', defaultMessage: 'Roles' },\n to: '/settings/roles',\n id: 'roles',\n },\n {\n intlLabel: { id: 'global.users', defaultMessage: 'Users' },\n // Init the search params directly\n to: '/settings/users?pageSize=10&page=1&sort=firstname',\n id: 'users',\n },\n ...(!window.strapi.features.isEnabled(window.strapi.features.AUDIT_LOGS) &&\n window.strapi?.flags?.promoteEE\n ? [\n {\n intlLabel: { id: 'global.auditLogs', defaultMessage: 'Audit Logs' },\n to: '/settings/purchase-audit-logs',\n id: 'auditLogs',\n lockIcon: true,\n },\n ]\n : []),\n ],\n});\n","import { createContext } from '@radix-ui/react-context';\n\nexport interface ConfigurationContextValue {\n logos: {\n auth: { custom?: string | null; default: string };\n menu: { custom?: string | null; default: string };\n };\n showTutorials: boolean;\n showReleaseNotification: boolean;\n updateProjectSettings: (settings: { authLogo?: string; menuLogo?: string }) => void;\n}\n\nconst [ConfigurationContextProvider, useConfigurationContext] =\n createContext<ConfigurationContextValue>('ConfigurationContext');\n\nconst useConfiguration = () => useConfigurationContext('useConfiguration');\n\nexport { ConfigurationContextProvider, useConfiguration };\n","import * as React from 'react';\n\nimport { useCallbackRef } from '@strapi/helper-plugin';\n\nfunction isEnterprise() {\n return window.strapi.isEE;\n}\n\nexport interface UseEnterpriseOptions<TCEData, TEEData, TDefaultValue, TCombinedValue> {\n defaultValue?: TDefaultValue;\n combine?: (ceData: TCEData, eeData: TEEData) => TCombinedValue;\n enabled?: boolean;\n}\n\ntype UseEnterpriseReturn<TCEData, TEEData, TDefaultValue, TCombinedValue> =\n TDefaultValue extends null\n ? TCEData | TEEData | TCombinedValue | null\n : TCEData | TEEData | TCombinedValue | TDefaultValue;\n\nexport const useEnterprise = <\n TCEData,\n TEEData = TCEData,\n TCombinedValue = TEEData,\n TDefaultValue = TCEData | null\n>(\n ceData: TCEData,\n eeCallback: () => Promise<TEEData>,\n opts: UseEnterpriseOptions<TCEData, TEEData, TDefaultValue, TCombinedValue> = {}\n): UseEnterpriseReturn<TCEData, TEEData, TDefaultValue, TCombinedValue> => {\n const { defaultValue = null, combine = (_ceData, eeData) => eeData, enabled = true } = opts;\n const eeCallbackRef = useCallbackRef(eeCallback);\n const combineCallbackRef = useCallbackRef(combine);\n\n // We have to use a nested object here, because functions (e.g. Components)\n // can not be stored as value directly\n const [{ data }, setData] = React.useState<{\n data: TCEData | TEEData | TDefaultValue | TCombinedValue | null;\n }>({\n data: isEnterprise() && enabled ? defaultValue : ceData,\n });\n\n React.useEffect(() => {\n async function importEE() {\n const eeData = await eeCallbackRef();\n const combinedValue = combineCallbackRef(ceData, eeData);\n\n setData({ data: combinedValue ? combinedValue : eeData });\n }\n\n if (isEnterprise() && enabled) {\n importEE();\n }\n }, [ceData, eeCallbackRef, combineCallbackRef, enabled]);\n\n // @ts-expect-error – the hook type assertion works in practice. But seems to have issues here...\n return data;\n};\n","/*\n *\n * LanguageProvider\n *\n * this component connects the redux state language locale to the\n * IntlProvider component and i18n messages (loaded from `app/translations`)\n */\n\nimport * as React from 'react';\n\nimport { createContext } from '@radix-ui/react-context';\nimport defaultsDeep from 'lodash/defaultsDeep';\nimport { IntlProvider } from 'react-intl';\n\n/* -------------------------------------------------------------------------------------------------\n * LocalesContext\n * -----------------------------------------------------------------------------------------------*/\n\ninterface LocalesContextValue {\n changeLocale: (locale: keyof State['localeNames']) => void;\n localeNames: Record<string, string>;\n}\n\nconst [LocalesContextProvider, useLocalesContext] =\n createContext<LocalesContextValue>('LocalesContext');\n\nconst useLocales = () => useLocalesContext('useLocales');\n\n/* -------------------------------------------------------------------------------------------------\n * LanguageProvider\n * -----------------------------------------------------------------------------------------------*/\n\nconst LANGUAGE_LOCAL_STORAGE_KEY = 'strapi-admin-language';\n\ninterface LanguageProviderProps {\n children: React.ReactNode;\n localeNames: Record<string, string>;\n messages: Record<string, Record<string, string>>;\n}\n\nconst LanguageProvider = ({ children, localeNames, messages }: LanguageProviderProps) => {\n const [{ locale }, dispatch] = React.useReducer<React.Reducer<State, Action>, State>(\n reducer,\n initialState,\n () => {\n const languageFromLocaleStorage = window.localStorage.getItem(LANGUAGE_LOCAL_STORAGE_KEY);\n if (languageFromLocaleStorage && localeNames[languageFromLocaleStorage]) {\n return {\n locale: languageFromLocaleStorage,\n localeNames,\n };\n } else {\n return {\n locale: 'en',\n localeNames,\n };\n }\n }\n );\n\n React.useEffect(() => {\n // Set user language in local storage.\n window.localStorage.setItem(LANGUAGE_LOCAL_STORAGE_KEY, locale);\n document.documentElement.setAttribute('lang', locale);\n }, [locale]);\n\n const changeLocale = React.useCallback((locale: keyof State['localeNames']) => {\n dispatch({\n type: 'CHANGE_LOCALE',\n locale,\n });\n }, []);\n\n const appMessages = defaultsDeep(messages[locale], messages.en);\n\n return (\n <IntlProvider locale={locale} defaultLocale=\"en\" messages={appMessages} textComponent=\"span\">\n <LocalesContextProvider changeLocale={changeLocale} localeNames={localeNames}>\n {children}\n </LocalesContextProvider>\n </IntlProvider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Reducer\n * -----------------------------------------------------------------------------------------------*/\n\ninterface State {\n localeNames: Record<string, string>;\n locale: keyof State['localeNames'];\n}\n\nconst initialState: State = {\n localeNames: { en: 'English' },\n locale: 'en',\n};\n\ninterface ChangeLocaleAction {\n type: 'CHANGE_LOCALE';\n locale: keyof State['localeNames'];\n}\n\ntype Action = ChangeLocaleAction;\n\nconst reducer = (state = initialState, action: Action) => {\n switch (action.type) {\n case 'CHANGE_LOCALE': {\n const { locale } = action;\n\n if (!state.localeNames[locale]) {\n return state;\n }\n\n return { ...state, locale };\n }\n default: {\n return state;\n }\n }\n};\n\nexport { LanguageProvider, useLocales, LANGUAGE_LOCAL_STORAGE_KEY };\nexport type { LanguageProviderProps, LocalesContextValue };\n","import styled from 'styled-components';\n\nimport { useConfiguration } from '../contexts/configuration';\n\nconst Img = styled.img`\n height: ${72 / 16}rem;\n`;\n\nconst Logo = () => {\n const {\n logos: { auth },\n } = useConfiguration();\n\n return <Img src={auth?.custom ?? auth.default} aria-hidden alt=\"\" />;\n};\n\nexport { Logo };\n","import * as React from 'react';\n\nimport { Box, Flex, SingleSelect, SingleSelectOption } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { useLocales } from '../components/LanguageProvider';\n\nconst Wrapper = styled(Box)`\n margin: 0 auto;\n width: 552px;\n`;\n\nexport const Column = styled(Flex)`\n flex-direction: column;\n`;\n\nconst LocaleToggle = () => {\n const { changeLocale, localeNames } = useLocales();\n const { formatMessage, locale } = useIntl();\n\n return (\n <SingleSelect\n aria-label={formatMessage({\n id: 'global.localeToggle.label',\n defaultMessage: 'Select interface language',\n })}\n value={locale}\n onChange={(language) => {\n changeLocale(language as string);\n }}\n >\n {Object.entries(localeNames).map(([language, name]) => (\n <SingleSelectOption key={language} value={language}>\n {name}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n );\n};\n\ninterface LayoutContentProps {\n children: React.ReactNode;\n}\n\nexport const LayoutContent = ({ children }: LayoutContentProps) => (\n <Wrapper\n shadow=\"tableShadow\"\n hasRadius\n paddingTop={9}\n paddingBottom={9}\n paddingLeft={10}\n paddingRight={10}\n background=\"neutral0\"\n >\n {children}\n </Wrapper>\n);\n\ninterface UnauthenticatedLayoutProps {\n children: React.ReactNode;\n}\n\nexport const UnauthenticatedLayout = ({ children }: UnauthenticatedLayoutProps) => {\n return (\n <div>\n <Flex as=\"header\" justifyContent=\"flex-end\">\n <Box paddingTop={6} paddingRight={8}>\n <LocaleToggle />\n </Box>\n </Flex>\n <Box paddingTop={2} paddingBottom={11}>\n {children}\n </Box>\n </div>\n );\n};\n","import { FieldAction } from '@strapi/design-system';\nimport styled from 'styled-components';\n\nconst FieldActionWrapper = styled(FieldAction)`\n svg {\n height: 1rem;\n width: 1rem;\n path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n }\n`;\n\nexport { FieldActionWrapper };\n","import * as React from 'react';\n\nimport { Box, Button, Checkbox, Flex, Main, TextInput, Typography } from '@strapi/design-system';\nimport { Link } from '@strapi/design-system/v2';\nimport { Form, auth, translatedErrors, useFetchClient, useQuery } from '@strapi/helper-plugin';\nimport { Eye, EyeStriked } from '@strapi/icons';\nimport { Formik } from 'formik';\nimport camelCase from 'lodash/camelCase';\nimport { useIntl } from 'react-intl';\nimport { useMutation } from 'react-query';\nimport { NavLink, useHistory } from 'react-router-dom';\nimport styled from 'styled-components';\nimport * as yup from 'yup';\n\nimport { Login } from '../../../../../shared/contracts/authentication';\nimport { useLocales } from '../../../components/LanguageProvider';\nimport { Logo } from '../../../components/UnauthenticatedLogo';\nimport {\n UnauthenticatedLayout,\n Column,\n LayoutContent,\n} from '../../../layouts/UnauthenticatedLayout';\n\nimport { FieldActionWrapper } from './FieldActionWrapper';\n\nimport type { AxiosError } from 'axios';\n\ninterface LoginProps {\n children?: React.ReactNode;\n}\n\nconst LOGIN_SCHEMA = yup.object().shape({\n email: yup.string().email(translatedErrors.email).required(translatedErrors.required),\n password: yup.string().required(translatedErrors.required),\n rememberMe: yup.bool().nullable(),\n});\n\nconst Login = ({ children }: LoginProps) => {\n const [apiError, setApiError] = React.useState<string>();\n const [passwordShown, setPasswordShown] = React.useState(false);\n const { formatMessage } = useIntl();\n const { post } = useFetchClient();\n const { changeLocale } = useLocales();\n const query = useQuery();\n const { push } = useHistory();\n\n const mutation = useMutation(\n async (body: Login.Request['body'] & { rememberMe: boolean }) => {\n const {\n data: { data },\n } = await post<Login.Response>('/admin/login', body);\n\n return { ...data, rememberMe: body.rememberMe };\n },\n {\n onSuccess(data) {\n if (data) {\n const { token, user } = data;\n\n if (user.preferedLanguage) {\n changeLocale(user.preferedLanguage);\n }\n\n auth.setToken(token, data.rememberMe);\n auth.setUserInfo(user, data.rememberMe);\n\n const redirectTo = query.get('redirectTo');\n const redirectUrl = redirectTo ? decodeURIComponent(redirectTo) : '/';\n\n push(redirectUrl);\n }\n },\n onError(err: AxiosError<{ error: Login.Response['errors'] }>) {\n const message = err.response?.data?.error?.message ?? 'Something went wrong';\n\n if (camelCase(message).toLowerCase() === 'usernotactive') {\n push('/auth/oops');\n return;\n }\n\n setApiError(message);\n },\n }\n );\n\n return (\n <UnauthenticatedLayout>\n <Main>\n <LayoutContent>\n <Column>\n <Logo />\n <Box paddingTop={6} paddingBottom={1}>\n <Typography variant=\"alpha\" as=\"h1\">\n {formatMessage({\n id: 'Auth.form.welcome.title',\n defaultMessage: 'Welcome!',\n })}\n </Typography>\n </Box>\n <Box paddingBottom={7}>\n <Typography variant=\"epsilon\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Auth.form.welcome.subtitle',\n defaultMessage: 'Log in to your Strapi account',\n })}\n </Typography>\n </Box>\n {mutation.isError && apiError ? (\n <Typography id=\"global-form-error\" role=\"alert\" tabIndex={-1} textColor=\"danger600\">\n {apiError}\n </Typography>\n ) : null}\n </Column>\n <Formik\n enableReinitialize\n initialValues={{\n email: '',\n password: '',\n rememberMe: false,\n }}\n onSubmit={(values) => {\n mutation.mutate(values);\n }}\n validationSchema={LOGIN_SCHEMA}\n validateOnChange={false}\n >\n {({ values, errors, handleChange }) => (\n <Form>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <TextInput\n error={\n errors.email\n ? formatMessage({\n id: errors.email,\n defaultMessage: 'This value is required.',\n })\n : ''\n }\n value={values.email}\n onChange={handleChange}\n label={formatMessage({ id: 'Auth.form.email.label', defaultMessage: 'Email' })}\n placeholder={formatMessage({\n id: 'Auth.form.email.placeholder',\n defaultMessage: 'kai@doe.com',\n })}\n name=\"email\"\n required\n />\n <PasswordInput\n error={\n errors.password\n ? formatMessage({\n id: errors.password,\n defaultMessage: 'This value is required.',\n })\n : ''\n }\n onChange={handleChange}\n value={values.password}\n label={formatMessage({\n id: 'global.password',\n defaultMessage: 'Password',\n })}\n name=\"password\"\n type={passwordShown ? 'text' : 'password'}\n endAction={\n <FieldActionWrapper\n onClick={(e) => {\n e.stopPropagation();\n setPasswordShown((prev) => !prev);\n }}\n label={formatMessage(\n passwordShown\n ? {\n id: 'Auth.form.password.show-password',\n defaultMessage: 'Show password',\n }\n : {\n id: 'Auth.form.password.hide-password',\n defaultMessage: 'Hide password',\n }\n )}\n >\n {passwordShown ? <Eye /> : <EyeStriked />}\n </FieldActionWrapper>\n }\n required\n />\n <Checkbox\n onValueChange={(checked) => {\n handleChange({ target: { value: checked, name: 'rememberMe' } });\n }}\n value={values.rememberMe}\n aria-label=\"rememberMe\"\n name=\"rememberMe\"\n >\n {formatMessage({\n id: 'Auth.form.rememberMe.label',\n defaultMessage: 'Remember me',\n })}\n </Checkbox>\n <Button fullWidth type=\"submit\">\n {formatMessage({ id: 'Auth.form.button.login', defaultMessage: 'Login' })}\n </Button>\n </Flex>\n </Form>\n )}\n </Formik>\n {children}\n </LayoutContent>\n <Flex justifyContent=\"center\">\n <Box paddingTop={4}>\n {/* @ts-expect-error – error with inferring the props from the as component */}\n <Link as={NavLink} to=\"/auth/forgot-password\">\n {formatMessage({\n id: 'Auth.link.forgot-password',\n defaultMessage: 'Forgot your password?',\n })}\n </Link>\n </Box>\n </Flex>\n </Main>\n </UnauthenticatedLayout>\n );\n};\n\nconst PasswordInput = styled(TextInput)`\n ::-ms-reveal {\n display: none;\n }\n`;\n\nexport { Login };\nexport type { LoginProps };\n","import { Box, Button, Flex, Main, TextInput, Typography } from '@strapi/design-system';\nimport { Link } from '@strapi/design-system/v2';\nimport { Form, translatedErrors, useFetchClient } from '@strapi/helper-plugin';\nimport { Formik } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useMutation } from 'react-query';\nimport { NavLink, useHistory } from 'react-router-dom';\nimport * as yup from 'yup';\n\nimport { ForgotPassword } from '../../../../../shared/contracts/authentication';\nimport { Logo } from '../../../components/UnauthenticatedLogo';\nimport {\n Column,\n LayoutContent,\n UnauthenticatedLayout,\n} from '../../../layouts/UnauthenticatedLayout';\n\nconst ForgotPassword = () => {\n const { push } = useHistory();\n const { post } = useFetchClient();\n const { formatMessage } = useIntl();\n\n const { mutate, isError } = useMutation(\n async (body: ForgotPassword.Request['body']) => {\n await post('/admin/forgot-password', body);\n },\n {\n onSuccess() {\n push('/auth/forgot-password-success');\n },\n }\n );\n\n return (\n <UnauthenticatedLayout>\n <Main>\n <LayoutContent>\n <Column>\n <Logo />\n <Box paddingTop={6} paddingBottom={7}>\n <Typography as=\"h1\" variant=\"alpha\">\n {formatMessage({\n id: 'Auth.form.button.password-recovery',\n defaultMessage: 'Password Recovery',\n })}\n </Typography>\n </Box>\n {isError ? (\n <Typography id=\"global-form-error\" role=\"alert\" tabIndex={-1} textColor=\"danger600\">\n {formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n })}\n </Typography>\n ) : null}\n </Column>\n <Formik\n enableReinitialize\n initialValues={{\n email: '',\n }}\n onSubmit={(values) => {\n mutate(values);\n }}\n validationSchema={yup.object().shape({\n email: yup.string().email(translatedErrors.email).required(translatedErrors.required),\n })}\n validateOnChange={false}\n >\n {({ values, errors, handleChange }) => (\n <Form>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <TextInput\n error={\n errors.email\n ? formatMessage({\n id: errors.email,\n defaultMessage: 'This email is invalid.',\n })\n : ''\n }\n value={values.email}\n onChange={handleChange}\n label={formatMessage({ id: 'Auth.form.email.label', defaultMessage: 'Email' })}\n placeholder={formatMessage({\n id: 'Auth.form.email.placeholder',\n defaultMessage: 'kai@doe.com',\n })}\n name=\"email\"\n required\n />\n <Button type=\"submit\" fullWidth>\n {formatMessage({\n id: 'Auth.form.button.forgot-password',\n defaultMessage: 'Send Email',\n })}\n </Button>\n </Flex>\n </Form>\n )}\n </Formik>\n </LayoutContent>\n <Flex justifyContent=\"center\">\n <Box paddingTop={4}>\n {/* @ts-expect-error – error with inferring the props from the as component */}\n <Link as={NavLink} to=\"/auth/login\">\n {formatMessage({ id: 'Auth.link.ready', defaultMessage: 'Ready to sign in?' })}\n </Link>\n </Box>\n </Flex>\n </Main>\n </UnauthenticatedLayout>\n );\n};\n\nexport { ForgotPassword };\n","import { Box, Flex, Main, Typography } from '@strapi/design-system';\nimport { Link } from '@strapi/design-system/v2';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\n\nimport { Logo } from '../../../components/UnauthenticatedLogo';\nimport {\n Column,\n LayoutContent,\n UnauthenticatedLayout,\n} from '../../../layouts/UnauthenticatedLayout';\n\nconst ForgotPasswordSuccess = () => {\n const { formatMessage } = useIntl();\n\n return (\n <UnauthenticatedLayout>\n <Main>\n <LayoutContent>\n <Column>\n <Logo />\n <Box paddingTop={6} paddingBottom={7}>\n <Typography as=\"h1\" variant=\"alpha\">\n {formatMessage({\n id: 'app.containers.AuthPage.ForgotPasswordSuccess.title',\n defaultMessage: 'Email sent',\n })}\n </Typography>\n </Box>\n <Typography>\n {formatMessage({\n id: 'app.containers.AuthPage.ForgotPasswordSuccess.text.email',\n defaultMessage: 'It can take a few minutes to receive your password recovery link.',\n })}\n </Typography>\n <Box paddingTop={4}>\n <Typography>\n {formatMessage({\n id: 'app.containers.AuthPage.ForgotPasswordSuccess.text.contact-admin',\n defaultMessage:\n 'If you do not receive this link, please contact your administrator.',\n })}\n </Typography>\n </Box>\n </Column>\n </LayoutContent>\n <Flex justifyContent=\"center\">\n <Box paddingTop={4}>\n {/* @ts-expect-error – error with inferring the props from the as component */}\n <Link as={NavLink} to=\"/auth/login\">\n {formatMessage({ id: 'Auth.link.signin', defaultMessage: 'Sign in' })}\n </Link>\n </Box>\n </Flex>\n </Main>\n </UnauthenticatedLayout>\n );\n};\n\nexport { ForgotPasswordSuccess };\n","import { Box, Flex, Main, Typography } from '@strapi/design-system';\nimport { Link } from '@strapi/design-system/v2';\nimport { useQuery } from '@strapi/helper-plugin';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\n\nimport { Logo } from '../../../components/UnauthenticatedLogo';\nimport {\n Column,\n LayoutContent,\n UnauthenticatedLayout,\n} from '../../../layouts/UnauthenticatedLayout';\n\nconst Oops = () => {\n const { formatMessage } = useIntl();\n const query = useQuery();\n\n const message =\n query.get('info') ||\n formatMessage({\n id: 'Auth.components.Oops.text',\n defaultMessage: 'Your account has been suspended.',\n });\n\n return (\n <UnauthenticatedLayout>\n <Main>\n <LayoutContent>\n <Column>\n <Logo />\n <Box paddingTop={6} paddingBottom={7}>\n <Typography as=\"h1\" variant=\"alpha\">\n {formatMessage({ id: 'Auth.components.Oops.title', defaultMessage: 'Oops...' })}\n </Typography>\n </Box>\n <Typography>{message}</Typography>\n <Box paddingTop={4}>\n <Typography>\n {formatMessage({\n id: 'Auth.components.Oops.text.admin',\n defaultMessage: 'If this is a mistake, please contact your administrator.',\n })}\n </Typography>\n </Box>\n </Column>\n </LayoutContent>\n <Flex justifyContent=\"center\">\n <Box paddingTop={4}>\n {/* @ts-expect-error – error with inferring the props from the as component */}\n <Link as={NavLink} to=\"/auth/login\">\n {formatMessage({ id: 'Auth.link.signin', defaultMessage: 'Sign in' })}\n </Link>\n </Box>\n </Flex>\n </Main>\n </UnauthenticatedLayout>\n );\n};\n\nexport { Oops };\n","import * as React from 'react';\n\nimport {\n Box,\n Flex,\n IconButton,\n Button,\n Typography,\n Textarea,\n Portal,\n Field,\n FieldLabel,\n FieldInput,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { auth, useNotification, useAppInfo, usePersistentState } from '@strapi/helper-plugin';\nimport { Cross } from '@strapi/icons';\nimport { Formik, Form } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useMutation } from 'react-query';\nimport styled, { useTheme } from 'styled-components';\nimport * as yup from 'yup';\n\nconst FieldWrapper = styled(Field)`\n height: ${32 / 16}rem;\n width: ${32 / 16}rem;\n\n > label,\n ~ input {\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n }\n\n > label {\n color: inherit;\n cursor: pointer;\n padding: ${({ theme }) => theme.spaces[2]};\n text-align: center;\n vertical-align: middle;\n }\n\n &:hover,\n &:focus-within {\n background-color: ${({ theme }) => theme.colors.neutral0};\n }\n\n &:active,\n &.selected {\n color: ${({ theme }) => theme.colors.primary700};\n background-color: ${({ theme }) => theme.colors.neutral0};\n border-color: ${({ theme }) => theme.colors.primary700};\n }\n`;\n\nconst delays = {\n postResponse: 90 * 24 * 60 * 60 * 1000, // 90 days in ms\n postFirstDismissal: 7 * 24 * 60 * 60 * 1000, // 7 days in ms\n postSubsequentDismissal: 90 * 24 * 60 * 60 * 1000, // 90 days in ms\n display: 5 * 60 * 1000, // 5 minutes in ms\n};\n\nconst ratingArray = [...Array(11).keys()];\n\nconst checkIfShouldShowSurvey = (settings: NpsSurveySettings) => {\n const { enabled, lastResponseDate, firstDismissalDate, lastDismissalDate } = settings;\n\n // This function goes through all the cases where we'd want to not show the survey:\n // 1. If the survey is disabled by strapi, abort mission, don't bother checking the other settings.\n // 2. If the survey is disabled by user, abort mission, don't bother checking the other settings.\n // 3. If the user has already responded to the survey, check if enough time has passed since the last response.\n // 4. If the user has dismissed the survey twice or more before, check if enough time has passed since the last dismissal.\n // 5. If the user has only dismissed the survey once before, check if enough time has passed since the first dismissal.\n // If none of these cases check out, then we show the survey.\n // Note that submitting a response resets the dismissal counts.\n // Checks 4 and 5 should not be reversed, since the first dismissal will also exist if the user has dismissed the survey twice or more before.\n\n // For users who had created an account before the NPS feature was introduced,\n // we assume that they would have enabled the NPS feature if they had the chance.\n\n // Global strapi disable for NSP.\n if (window.strapi.flags.nps === false) {\n return false;\n }\n\n // User chose not to enable the NPS feature when signing up\n if (enabled === false) {\n return false;\n }\n\n // The user has already responded to the survey\n if (lastResponseDate) {\n const timeSinceLastResponse = Date.now() - new Date(lastResponseDate).getTime();\n\n if (timeSinceLastResponse >= delays.postResponse) {\n return true;\n }\n\n return false;\n }\n\n // The user has dismissed the survey twice or more before\n if (lastDismissalDate) {\n const timeSinceLastDismissal = Date.now() - new Date(lastDismissalDate).getTime();\n\n if (timeSinceLastDismissal >= delays.postSubsequentDismissal) {\n return true;\n }\n\n return false;\n }\n\n // The user has only dismissed the survey once before\n if (firstDismissalDate) {\n const timeSinceFirstDismissal = Date.now() - new Date(firstDismissalDate).getTime();\n\n if (timeSinceFirstDismissal >= delays.postFirstDismissal) {\n return true;\n }\n\n return false;\n }\n\n // The user has not interacted with the survey before\n return true;\n};\n\nconst NpsSurvey = () => {\n const theme = useTheme();\n const { formatMessage } = useIntl();\n const { npsSurveySettings, setNpsSurveySettings } = useNpsSurveySettings();\n const [isFeedbackResponse, setIsFeedbackResponse] = React.useState(false);\n const toggleNotification = useNotification();\n const { currentEnvironment, strapiVersion } = useAppInfo();\n\n interface NpsSurveyMutationBody {\n email: string;\n rating: number | null;\n comment: string;\n environment?: string;\n version?: string;\n license: 'Enterprise' | 'Community';\n }\n\n const { mutate, isLoading } = useMutation<unknown, unknown, NpsSurveyMutationBody>(\n async (form) => {\n const res = await fetch('https://analytics.strapi.io/submit-nps', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(form),\n });\n\n if (!res.ok) {\n throw new Error('Failed to submit NPS survey');\n }\n\n return res;\n },\n {\n onSuccess() {\n setNpsSurveySettings((settings) => ({\n ...settings,\n lastResponseDate: new Date().toString(),\n firstDismissalDate: null,\n lastDismissalDate: null,\n }));\n setIsFeedbackResponse(true);\n // Thank you message displayed in the banner should disappear after few seconds.\n setTimeout(() => {\n setSurveyIsShown(false);\n }, 3000);\n },\n onError() {\n toggleNotification({\n type: 'warning',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n },\n }\n );\n\n // Only check on first render if the survey should be shown\n const [surveyIsShown, setSurveyIsShown] = React.useState(\n checkIfShouldShowSurvey(npsSurveySettings)\n );\n\n // Set a cooldown to show the survey when session begins\n const [displaySurvey, setDisplaySurvey] = React.useState(false);\n\n React.useEffect(() => {\n const displayTime = setTimeout(() => {\n setDisplaySurvey(true);\n }, delays.display);\n\n return () => {\n clearTimeout(displayTime);\n };\n }, []);\n\n if (!displaySurvey) {\n return null;\n }\n\n if (!surveyIsShown) {\n return null;\n }\n\n const handleSubmitResponse = ({\n npsSurveyRating,\n npsSurveyFeedback,\n }: {\n npsSurveyRating: NpsSurveyMutationBody['rating'];\n npsSurveyFeedback: NpsSurveyMutationBody['comment'];\n }) => {\n const userInfo = auth.getUserInfo();\n mutate({\n email: typeof userInfo === 'object' && userInfo !== null ? userInfo.email : '',\n rating: npsSurveyRating,\n comment: npsSurveyFeedback,\n environment: currentEnvironment,\n version: strapiVersion ?? undefined,\n license: window.strapi.projectType,\n });\n };\n\n const handleDismiss = () => {\n setNpsSurveySettings((settings) => {\n const nextSettings = {\n ...settings,\n lastResponseDate: null,\n };\n\n if (settings.firstDismissalDate) {\n // If the user dismisses the survey for the second time\n nextSettings.lastDismissalDate = new Date().toString();\n } else {\n // If the user dismisses the survey for the first time\n nextSettings.firstDismissalDate = new Date().toString();\n }\n\n return nextSettings;\n });\n\n setSurveyIsShown(false);\n };\n\n return (\n <Portal>\n <Formik\n initialValues={{ npsSurveyFeedback: '', npsSurveyRating: null }}\n onSubmit={handleSubmitResponse}\n validationSchema={yup.object({\n npsSurveyFeedback: yup.string(),\n npsSurveyRating: yup.number().required(),\n })}\n >\n {({ values, handleChange, setFieldValue }) => (\n <Form name=\"npsSurveyForm\">\n <Flex\n hasRadius\n direction=\"column\"\n padding={4}\n borderColor=\"primary200\"\n background=\"neutral0\"\n shadow=\"popupShadow\"\n position=\"fixed\"\n bottom={0}\n left=\"50%\"\n transform=\"translateX(-50%)\"\n zIndex={theme.zIndices[2]}\n width=\"50%\"\n >\n {isFeedbackResponse ? (\n <Typography fontWeight=\"semiBold\">\n {formatMessage({\n id: 'app.components.NpsSurvey.feedback-response',\n defaultMessage: 'Thank you very much for your feedback!',\n })}\n </Typography>\n ) : (\n <Box as=\"fieldset\" width=\"100%\">\n <Flex justifyContent=\"space-between\" width=\"100%\">\n <Box marginLeft=\"auto\" marginRight=\"auto\">\n <Typography fontWeight=\"semiBold\" as=\"legend\">\n {formatMessage({\n id: 'app.components.NpsSurvey.banner-title',\n defaultMessage:\n 'How likely are you to recommend Strapi to a friend or colleague?',\n })}\n </Typography>\n </Box>\n <IconButton\n onClick={handleDismiss}\n aria-label={formatMessage({\n id: 'app.components.NpsSurvey.dismiss-survey-label',\n defaultMessage: 'Dismiss survey',\n })}\n icon={<Cross />}\n />\n </Flex>\n <Flex gap={2} marginTop={2} marginBottom={2} justifyContent=\"center\">\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'app.components.NpsSurvey.no-recommendation',\n defaultMessage: 'Not at all likely',\n })}\n </Typography>\n {ratingArray.map((number) => {\n return (\n <FieldWrapper\n key={number}\n className={values.npsSurveyRating === number ? 'selected' : undefined} // \"selected\" class added when child radio button is checked\n hasRadius\n background=\"primary100\"\n borderColor=\"primary200\"\n color=\"primary600\"\n position=\"relative\"\n cursor=\"pointer\"\n >\n <FieldLabel htmlFor={`nps-survey-rating-${number}-input`}>\n <VisuallyHidden>\n <FieldInput\n type=\"radio\"\n id={`nps-survey-rating-${number}-input`}\n name=\"npsSurveyRating\"\n checked={values.npsSurveyRating === number}\n onChange={(e) =>\n setFieldValue('npsSurveyRating', parseInt(e.target.value, 10))\n }\n value={number}\n />\n </VisuallyHidden>\n {number}\n </FieldLabel>\n </FieldWrapper>\n );\n })}\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'app.components.NpsSurvey.happy-to-recommend',\n defaultMessage: 'Extremely likely',\n })}\n </Typography>\n </Flex>\n {values.npsSurveyRating !== null && (\n <Flex direction=\"column\">\n <Box marginTop={2}>\n <FieldLabel htmlFor=\"npsSurveyFeedback\" fontWeight=\"semiBold\" fontSize={2}>\n {formatMessage({\n id: 'app.components.NpsSurvey.feedback-question',\n defaultMessage: 'Do you have any suggestion for improvements?',\n })}\n </FieldLabel>\n </Box>\n <Box width=\"62%\" marginTop={3} marginBottom={4}>\n <Textarea\n id=\"npsSurveyFeedback\" // formik element attribute \"id\" should be same as the values key to work\n width=\"100%\"\n onChange={handleChange}\n >\n {values.npsSurveyFeedback}\n </Textarea>\n </Box>\n <Button marginBottom={2} type=\"submit\" loading={isLoading}>\n {formatMessage({\n id: 'app.components.NpsSurvey.submit-feedback',\n defaultMessage: 'Submit Feedback',\n })}\n </Button>\n </Flex>\n )}\n </Box>\n )}\n </Flex>\n </Form>\n )}\n </Formik>\n </Portal>\n );\n};\n\ninterface NpsSurveySettings {\n enabled: boolean;\n lastResponseDate: string | null;\n firstDismissalDate: string | null;\n lastDismissalDate: string | null;\n}\n\n/**\n * We exported to make it available during admin user registration.\n * Because we only enable the NPS for users who subscribe to the newsletter when signing up\n */\nfunction useNpsSurveySettings() {\n const [npsSurveySettings, setNpsSurveySettings] = usePersistentState<NpsSurveySettings>(\n 'STRAPI_NPS_SURVEY_SETTINGS',\n {\n enabled: true,\n lastResponseDate: null,\n firstDismissalDate: null,\n lastDismissalDate: null,\n }\n );\n\n /**\n * TODO: should this just be an array so we can alias the `usePersistentState` hook?\n */\n return { npsSurveySettings, setNpsSurveySettings };\n}\n\nexport { NpsSurvey, useNpsSurveySettings };\n","import * as React from 'react';\n\nimport {\n Box,\n Button,\n Checkbox,\n Flex,\n Grid,\n GridItem,\n Main,\n TextInput,\n Typography,\n} from '@strapi/design-system';\nimport { Link } from '@strapi/design-system/v2';\nimport {\n Form,\n auth,\n getYupInnerErrors,\n translatedErrors,\n useAPIErrorHandler,\n useFetchClient,\n useGuidedTour,\n useNotification,\n useQuery,\n useTracking,\n} from '@strapi/helper-plugin';\nimport { Eye, EyeStriked } from '@strapi/icons';\nimport { Formik } from 'formik';\nimport omit from 'lodash/omit';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { useQuery as useReactQuery, useMutation } from 'react-query';\nimport { NavLink, Redirect, useHistory, useRouteMatch } from 'react-router-dom';\nimport styled from 'styled-components';\nimport * as yup from 'yup';\nimport { ValidationError } from 'yup';\n\nimport {\n Register,\n RegisterAdmin,\n RegistrationInfo,\n} from '../../../../../shared/contracts/authentication';\nimport { useNpsSurveySettings } from '../../../components/NpsSurvey';\nimport { Logo } from '../../../components/UnauthenticatedLogo';\nimport { LayoutContent, UnauthenticatedLayout } from '../../../layouts/UnauthenticatedLayout';\nimport { AuthType } from '../constants';\n\nimport { FieldActionWrapper } from './FieldActionWrapper';\n\nimport type { AxiosError } from 'axios';\n\nconst REGISTER_USER_SCHEMA = yup.object().shape({\n firstname: yup.string().trim().required(translatedErrors.required),\n lastname: yup.string().nullable(),\n password: yup\n .string()\n .min(8, translatedErrors.minLength)\n .matches(/[a-z]/, 'components.Input.error.contain.lowercase')\n .matches(/[A-Z]/, 'components.Input.error.contain.uppercase')\n .matches(/\\d/, 'components.Input.error.contain.number')\n .required(translatedErrors.required),\n confirmPassword: yup\n .string()\n .oneOf([yup.ref('password'), null], 'components.Input.error.password.noMatch')\n .required(translatedErrors.required),\n registrationToken: yup.string().required(translatedErrors.required),\n});\n\nconst REGISTER_ADMIN_SCHEMA = yup.object().shape({\n firstname: yup.string().trim().required(translatedErrors.required),\n lastname: yup.string().nullable(),\n password: yup\n .string()\n .min(8, translatedErrors.minLength)\n .matches(/[a-z]/, 'components.Input.error.contain.lowercase')\n .matches(/[A-Z]/, 'components.Input.error.contain.uppercase')\n .matches(/\\d/, 'components.Input.error.contain.number')\n .required(translatedErrors.required),\n email: yup\n .string()\n .email(translatedErrors.email)\n .strict()\n .lowercase(translatedErrors.lowercase)\n .required(translatedErrors.required),\n confirmPassword: yup\n .string()\n .oneOf([yup.ref('password'), null], 'components.Input.error.password.noMatch')\n .required(translatedErrors.required),\n});\n\ninterface RegisterProps {\n hasAdmin?: boolean;\n}\n\nconst Register = ({ hasAdmin }: RegisterProps) => {\n const toggleNotification = useNotification();\n const { push } = useHistory();\n const [passwordShown, setPasswordShown] = React.useState(false);\n const [confirmPasswordShown, setConfirmPasswordShown] = React.useState(false);\n const [submitCount, setSubmitCount] = React.useState(0);\n const [apiError, setApiError] = React.useState<string>();\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const { setSkipped } = useGuidedTour();\n const query = useQuery();\n const match = useRouteMatch<{ authType: Extract<AuthType, `register${string}`> }>(\n '/auth/:authType'\n );\n const { formatAPIError } = useAPIErrorHandler();\n const { get, post } = useFetchClient();\n const { setNpsSurveySettings } = useNpsSurveySettings();\n\n const registrationToken = query.get('registrationToken');\n\n const { data: userInfo } = useReactQuery({\n queryKey: ['admin', 'registration-info', registrationToken],\n async queryFn() {\n const {\n data: { data },\n } = await get<RegistrationInfo.Response>(`/admin/registration-info`, {\n params: {\n registrationToken,\n },\n });\n\n return data;\n },\n enabled: !!registrationToken,\n initialData: {},\n onError(err: AxiosError<{ error: Exclude<RegistrationInfo.Response['errors'], undefined> }>) {\n const message = formatAPIError(err);\n\n toggleNotification({\n type: 'warning',\n message,\n });\n\n push(`/auth/oops?info=${encodeURIComponent(message)}`);\n },\n });\n\n const registerAdminMutation = useMutation(\n async (body: RegisterAdmin.Request['body'] & { news: boolean }) => {\n const { news, ...restBody } = body;\n const { data } = await post<RegisterAdmin.Response>('/admin/register-admin', restBody);\n\n return { ...data.data, news };\n },\n {\n onSuccess(data) {\n const { token, user, news } = data;\n\n auth.setToken(token, false);\n auth.setUserInfo(user, false);\n\n const { roles } = user;\n\n if (roles) {\n const isUserSuperAdmin = roles.find(({ code }) => code === 'strapi-super-admin');\n\n if (isUserSuperAdmin) {\n auth.set(false, 'GUIDED_TOUR_SKIPPED', true);\n setSkipped(false);\n trackUsage('didLaunchGuidedtour');\n }\n }\n\n if (news) {\n // Only enable EE survey if user accepted the newsletter\n setNpsSurveySettings((s) => ({ ...s, enabled: true }));\n\n push({\n pathname: '/usecase',\n search: `?hasAdmin=${true}`,\n });\n } else {\n push('/');\n }\n },\n onError(err: AxiosError<{ error: Exclude<RegisterAdmin.Response['errors'], undefined> }>) {\n trackUsage('didNotCreateFirstAdmin');\n\n const error = formatAPIError(err);\n setApiError(error);\n },\n }\n );\n\n const registerUserMutation = useMutation(\n async (body: Register.Request['body'] & { news: boolean }) => {\n const { news, ...restBody } = body;\n const { data } = await post<Register.Response>('/admin/register', restBody);\n\n return { ...data.data, news };\n },\n {\n onSuccess(data) {\n const { token, user, news } = data;\n\n auth.setToken(token, false);\n auth.setUserInfo(user, false);\n\n if (news) {\n // Only enable EE survey if user accepted the newsletter\n setNpsSurveySettings((s) => ({ ...s, enabled: true }));\n\n push({\n pathname: '/usecase',\n search: `?hasAdmin=${hasAdmin}`,\n });\n } else {\n push('/');\n }\n },\n onError(err: AxiosError<{ error: Exclude<RegisterAdmin.Response['errors'], undefined> }>) {\n trackUsage('didNotCreateFirstAdmin');\n\n const error = formatAPIError(err);\n setApiError(error);\n },\n }\n );\n\n if (\n !match ||\n (match.params.authType !== 'register' && match.params.authType !== 'register-admin')\n ) {\n return <Redirect to=\"/\" />;\n }\n\n const isAdminRegistration = match.params.authType === 'register-admin';\n\n const schema = isAdminRegistration ? REGISTER_ADMIN_SCHEMA : REGISTER_USER_SCHEMA;\n\n return (\n <UnauthenticatedLayout>\n <LayoutContent>\n <Flex direction=\"column\" alignItems=\"center\" gap={3}>\n <Logo />\n\n <Typography as=\"h1\" variant=\"alpha\" textAlign=\"center\">\n {formatMessage({\n id: 'Auth.form.welcome.title',\n defaultMessage: 'Welcome to Strapi!',\n })}\n </Typography>\n <Typography variant=\"epsilon\" textColor=\"neutral600\" textAlign=\"center\">\n {formatMessage({\n id: 'Auth.form.register.subtitle',\n defaultMessage:\n 'Credentials are only used to authenticate in Strapi. All saved data will be stored in your database.',\n })}\n </Typography>\n {apiError ? (\n <Typography id=\"global-form-error\" role=\"alert\" tabIndex={-1} textColor=\"danger600\">\n {apiError}\n </Typography>\n ) : null}\n </Flex>\n <Formik\n enableReinitialize\n initialValues={{\n firstname: userInfo?.firstname || '',\n lastname: userInfo?.lastname || '',\n email: userInfo?.email || '',\n password: '',\n confirmPassword: '',\n registrationToken: registrationToken || undefined,\n news: false,\n }}\n onSubmit={async (data, formik) => {\n const normalizedData = normalizeData(data);\n\n try {\n await schema.validate(normalizedData, { abortEarly: false });\n\n if (submitCount > 0 && isAdminRegistration) {\n trackUsage('didSubmitWithErrorsFirstAdmin', { count: submitCount.toString() });\n }\n\n if (normalizedData.registrationToken) {\n registerUserMutation.mutate({\n userInfo: omit(normalizedData, [\n 'registrationToken',\n 'confirmPassword',\n 'email',\n 'news',\n ]),\n registrationToken: normalizedData.registrationToken,\n news: normalizedData.news,\n });\n } else {\n registerAdminMutation.mutate(\n omit(normalizedData, ['registrationToken', 'confirmPassword'])\n );\n }\n } catch (err) {\n if (err instanceof ValidationError) {\n const errors = getYupInnerErrors(err);\n\n formik.setErrors(errors);\n }\n setSubmitCount(submitCount + 1);\n }\n }}\n validateOnChange={false}\n >\n {({ values, errors, handleChange }) => {\n return (\n <Form>\n <Main>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6} marginTop={7}>\n <Grid gap={4}>\n <GridItem col={6}>\n <TextInput\n name=\"firstname\"\n required\n value={values.firstname}\n error={\n errors.firstname\n ? formatMessage(errors.firstname as MessageDescriptor)\n : undefined\n }\n onChange={handleChange}\n label={formatMessage({\n id: 'Auth.form.firstname.label',\n defaultMessage: 'Firstname',\n })}\n />\n </GridItem>\n <GridItem col={6}>\n <TextInput\n name=\"lastname\"\n value={values.lastname}\n onChange={handleChange}\n label={formatMessage({\n id: 'Auth.form.lastname.label',\n defaultMessage: 'Lastname',\n })}\n />\n </GridItem>\n </Grid>\n <TextInput\n name=\"email\"\n disabled={!isAdminRegistration}\n value={values.email}\n onChange={handleChange}\n error={\n errors.email ? formatMessage(errors.email as MessageDescriptor) : undefined\n }\n required\n label={formatMessage({\n id: 'Auth.form.email.label',\n defaultMessage: 'Email',\n })}\n type=\"email\"\n />\n <PasswordInput\n name=\"password\"\n onChange={handleChange}\n value={values.password}\n error={\n errors.password\n ? formatMessage(errors.password as MessageDescriptor)\n : undefined\n }\n endAction={\n <FieldActionWrapper\n onClick={(e) => {\n e.preventDefault();\n setPasswordShown((prev) => !prev);\n }}\n label={formatMessage(\n passwordShown\n ? {\n id: 'Auth.form.password.show-password',\n defaultMessage: 'Show password',\n }\n : {\n id: 'Auth.form.password.hide-password',\n defaultMessage: 'Hide password',\n }\n )}\n >\n {passwordShown ? <Eye /> : <EyeStriked />}\n </FieldActionWrapper>\n }\n hint={formatMessage({\n id: 'Auth.form.password.hint',\n defaultMessage:\n 'Must be at least 8 characters, 1 uppercase, 1 lowercase & 1 number',\n })}\n required\n label={formatMessage({\n id: 'global.password',\n defaultMessage: 'Password',\n })}\n type={passwordShown ? 'text' : 'password'}\n />\n <PasswordInput\n name=\"confirmPassword\"\n onChange={handleChange}\n value={values.confirmPassword}\n error={\n errors.confirmPassword\n ? formatMessage(errors.confirmPassword as MessageDescriptor)\n : undefined\n }\n endAction={\n <FieldActionWrapper\n onClick={(e) => {\n e.preventDefault();\n setConfirmPasswordShown((prev) => !prev);\n }}\n label={formatMessage(\n confirmPasswordShown\n ? {\n id: 'Auth.form.password.show-password',\n defaultMessage: 'Show password',\n }\n : {\n id: 'Auth.form.password.hide-password',\n defaultMessage: 'Hide password',\n }\n )}\n >\n {confirmPasswordShown ? <Eye /> : <EyeStriked />}\n </FieldActionWrapper>\n }\n required\n label={formatMessage({\n id: 'Auth.form.confirmPassword.label',\n defaultMessage: 'Confirm Password',\n })}\n type={confirmPasswordShown ? 'text' : 'password'}\n />\n <Checkbox\n onValueChange={(checked) => {\n handleChange({ target: { value: checked, name: 'news' } });\n }}\n value={values.news}\n name=\"news\"\n aria-label=\"news\"\n >\n {formatMessage(\n {\n id: 'Auth.form.register.news.label',\n defaultMessage:\n 'Keep me updated about new features & upcoming improvements (by doing this you accept the {terms} and the {policy}).',\n },\n {\n terms: (\n <A target=\"_blank\" href=\"https://strapi.io/terms\" rel=\"noreferrer\">\n {formatMessage({\n id: 'Auth.privacy-policy-agreement.terms',\n defaultMessage: 'terms',\n })}\n </A>\n ),\n policy: (\n <A target=\"_blank\" href=\"https://strapi.io/privacy\" rel=\"noreferrer\">\n {formatMessage({\n id: 'Auth.privacy-policy-agreement.policy',\n defaultMessage: 'policy',\n })}\n </A>\n ),\n }\n )}\n </Checkbox>\n <Button fullWidth size=\"L\" type=\"submit\">\n {formatMessage({\n id: 'Auth.form.button.register',\n defaultMessage: \"Let's start\",\n })}\n </Button>\n </Flex>\n </Main>\n </Form>\n );\n }}\n </Formik>\n {match?.params.authType === 'register' && (\n <Box paddingTop={4}>\n <Flex justifyContent=\"center\">\n {/* @ts-expect-error – error with inferring the props from the as component */}\n <Link as={NavLink} to=\"/auth/login\">\n {formatMessage({\n id: 'Auth.link.signin.account',\n defaultMessage: 'Already have an account?',\n })}\n </Link>\n </Flex>\n </Box>\n )}\n </LayoutContent>\n </UnauthenticatedLayout>\n );\n};\n\ninterface RegisterFormValues {\n firstname: string;\n lastname: string;\n email: string;\n password: string;\n confirmPassword: string;\n registrationToken: string | undefined;\n news: boolean;\n}\n\ntype StringKeys<T> = {\n [K in keyof T]: T[K] extends string | undefined ? K : never;\n}[keyof T];\n\n/**\n * @description Trims all values but the password & sets lastName to null if it's a falsey value.\n */\nfunction normalizeData(data: RegisterFormValues) {\n return Object.entries(data).reduce(\n (acc, [key, value]) => {\n type PasswordKeys = Extract<keyof RegisterFormValues, 'password' | 'confirmPassword'>;\n type RegisterFormStringValues = Exclude<\n keyof Pick<RegisterFormValues, StringKeys<RegisterFormValues>>,\n PasswordKeys\n >;\n\n if (!['password', 'confirmPassword'].includes(key) && typeof value === 'string') {\n acc[key as RegisterFormStringValues] = value.trim();\n\n if (key === 'lastname') {\n acc[key] = value || undefined;\n }\n } else {\n acc[key as PasswordKeys] = value;\n }\n\n return acc;\n },\n {} as {\n firstname: string;\n lastname: string | undefined;\n email: string;\n password: string;\n confirmPassword: string;\n registrationToken: string | undefined;\n news: boolean;\n }\n );\n}\n\nconst A = styled.a`\n color: ${({ theme }) => theme.colors.primary600};\n`;\n\nconst PasswordInput = styled(TextInput)`\n ::-ms-reveal {\n display: none;\n }\n`;\n\nexport { Register };\nexport type { RegisterProps };\n","import * as React from 'react';\n\nimport { Box, Button, Flex, Main, TextInput, Typography } from '@strapi/design-system';\nimport { Link } from '@strapi/design-system/v2';\nimport { Form, auth, translatedErrors, useFetchClient, useQuery } from '@strapi/helper-plugin';\nimport { Eye, EyeStriked } from '@strapi/icons';\nimport { Formik } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useMutation } from 'react-query';\nimport { NavLink, useHistory } from 'react-router-dom';\nimport styled from 'styled-components';\nimport * as yup from 'yup';\n\nimport { ResetPassword } from '../../../../../shared/contracts/authentication';\nimport { Logo } from '../../../components/UnauthenticatedLogo';\nimport {\n Column,\n LayoutContent,\n UnauthenticatedLayout,\n} from '../../../layouts/UnauthenticatedLayout';\n\nimport { FieldActionWrapper } from './FieldActionWrapper';\n\nconst RESET_PASSWORD_SCHEMA = yup.object().shape({\n password: yup\n .string()\n .min(8, translatedErrors.minLength)\n .matches(/[a-z]/, 'components.Input.error.contain.lowercase')\n .matches(/[A-Z]/, 'components.Input.error.contain.uppercase')\n .matches(/\\d/, 'components.Input.error.contain.number')\n .required(translatedErrors.required),\n confirmPassword: yup\n .string()\n .oneOf([yup.ref('password'), null], 'components.Input.error.password.noMatch')\n .required(translatedErrors.required),\n});\n\nconst ResetPassword = () => {\n const [passwordShown, setPasswordShown] = React.useState(false);\n const [confirmPasswordShown, setConfirmPasswordShown] = React.useState(false);\n const { formatMessage } = useIntl();\n const { post } = useFetchClient();\n const { push } = useHistory();\n const query = useQuery();\n\n const { mutate, isError } = useMutation(\n async (body: Pick<ResetPassword.Request['body'], 'password'>) => {\n const {\n data: { data },\n } = await post<ResetPassword.Response>('/admin/reset-password', {\n ...body,\n resetPasswordToken: query.get('code'),\n });\n\n return data;\n },\n {\n onSuccess(data) {\n if (data) {\n const { token, user } = data;\n auth.setToken(token, false);\n auth.setUserInfo(user, false);\n\n // Redirect to the homePage\n push('/');\n }\n },\n }\n );\n\n return (\n <UnauthenticatedLayout>\n <Main>\n <LayoutContent>\n <Column>\n <Logo />\n <Box paddingTop={6} paddingBottom={7}>\n <Typography as=\"h1\" variant=\"alpha\">\n {formatMessage({\n id: 'global.reset-password',\n defaultMessage: 'Reset password',\n })}\n </Typography>\n </Box>\n {isError ? (\n <Typography id=\"global-form-error\" role=\"alert\" tabIndex={-1} textColor=\"danger600\">\n {formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n })}\n </Typography>\n ) : null}\n </Column>\n <Formik\n enableReinitialize\n initialValues={{\n password: '',\n confirmPassword: '',\n }}\n onSubmit={(values) => {\n mutate({ password: values.password });\n }}\n validationSchema={RESET_PASSWORD_SCHEMA}\n validateOnChange={false}\n >\n {({ values, errors, handleChange }) => (\n <Form>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <PasswordInput\n name=\"password\"\n onChange={handleChange}\n value={values.password}\n error={\n errors.password\n ? formatMessage(\n {\n id: errors.password,\n defaultMessage: 'This field is required.',\n },\n {\n min: 8,\n }\n )\n : undefined\n }\n endAction={\n <FieldActionWrapper\n onClick={(e) => {\n e.preventDefault();\n setPasswordShown((prev) => !prev);\n }}\n label={formatMessage(\n passwordShown\n ? {\n id: 'Auth.form.password.show-password',\n defaultMessage: 'Show password',\n }\n : {\n id: 'Auth.form.password.hide-password',\n defaultMessage: 'Hide password',\n }\n )}\n >\n {passwordShown ? <Eye /> : <EyeStriked />}\n </FieldActionWrapper>\n }\n hint={formatMessage({\n id: 'Auth.form.password.hint',\n defaultMessage:\n 'Password must contain at least 8 characters, 1 uppercase, 1 lowercase and 1 number',\n })}\n required\n label={formatMessage({\n id: 'global.password',\n defaultMessage: 'Password',\n })}\n type={passwordShown ? 'text' : 'password'}\n />\n <PasswordInput\n name=\"confirmPassword\"\n onChange={handleChange}\n value={values.confirmPassword}\n error={\n errors.confirmPassword\n ? formatMessage({\n id: errors.confirmPassword,\n defaultMessage: 'This value is required.',\n })\n : undefined\n }\n endAction={\n <FieldActionWrapper\n onClick={(e) => {\n e.preventDefault();\n setConfirmPasswordShown((prev) => !prev);\n }}\n label={formatMessage(\n passwordShown\n ? {\n id: 'Auth.form.password.show-password',\n defaultMessage: 'Show password',\n }\n : {\n id: 'Auth.form.password.hide-password',\n defaultMessage: 'Hide password',\n }\n )}\n >\n {confirmPasswordShown ? <Eye /> : <EyeStriked />}\n </FieldActionWrapper>\n }\n required\n label={formatMessage({\n id: 'Auth.form.confirmPassword.label',\n defaultMessage: 'Confirm Password',\n })}\n type={confirmPasswordShown ? 'text' : 'password'}\n />\n <Button fullWidth type=\"submit\">\n {formatMessage({\n id: 'global.change-password',\n defaultMessage: 'Change password',\n })}\n </Button>\n </Flex>\n </Form>\n )}\n </Formik>\n </LayoutContent>\n <Flex justifyContent=\"center\">\n <Box paddingTop={4}>\n {/* @ts-expect-error – error with inferring the props from the as component */}\n <Link as={NavLink} to=\"/auth/login\">\n {formatMessage({ id: 'Auth.link.ready', defaultMessage: 'Ready to sign in?' })}\n </Link>\n </Box>\n </Flex>\n </Main>\n </UnauthenticatedLayout>\n );\n};\n\nconst PasswordInput = styled(TextInput)`\n ::-ms-reveal {\n display: none;\n }\n`;\n\nexport { ResetPassword };\n","import type { ComponentType } from 'react';\n\nimport { ForgotPassword } from './components/ForgotPassword';\nimport { ForgotPasswordSuccess } from './components/ForgotPasswordSuccess';\nimport { Oops } from './components/Oops';\nimport { Register, RegisterProps } from './components/Register';\nimport { ResetPassword } from './components/ResetPassword';\n\nexport type AuthType =\n | 'login'\n | 'register'\n | 'register-admin'\n | 'forgot-password'\n | 'reset-password'\n | 'forgot-password-success'\n | 'oops'\n | 'providers';\n\nexport type FormDictionary = Record<AuthType, ComponentType | ComponentType<RegisterProps>>;\n\nexport const FORMS = {\n 'forgot-password': ForgotPassword,\n 'forgot-password-success': ForgotPasswordSuccess,\n // the `Component` attribute is set after all forms and CE/EE components are loaded, but since we\n // are here outside of a React component we can not use the hook directly\n login: () => null,\n oops: Oops,\n register: Register,\n 'register-admin': Register,\n 'reset-password': ResetPassword,\n providers: () => null,\n} satisfies FormDictionary;\n","import { auth } from '@strapi/helper-plugin';\nimport { Redirect, useHistory, useRouteMatch } from 'react-router-dom';\n\nimport { useEnterprise } from '../../hooks/useEnterprise';\n\nimport { Login as LoginCE } from './components/Login';\nimport { AuthType, FORMS, FormDictionary } from './constants';\n\n/* -------------------------------------------------------------------------------------------------\n * AuthPage\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AuthPageProps {\n hasAdmin: boolean;\n}\n\nconst AuthPage = ({ hasAdmin }: AuthPageProps) => {\n const {\n location: { search },\n } = useHistory();\n const match = useRouteMatch<{ authType: AuthType }>('/auth/:authType');\n const authType = match?.params.authType;\n const Login = useEnterprise(\n LoginCE,\n async () => (await import('../../../../ee/admin/src/pages/AuthPage/components/Login')).LoginEE\n );\n const forms = useEnterprise<FormDictionary, Partial<FormDictionary>>(\n FORMS,\n async () => (await import('../../../../ee/admin/src/pages/AuthPage/constants')).FORMS,\n {\n combine(ceForms, eeForms) {\n return {\n ...ceForms,\n ...eeForms,\n };\n },\n defaultValue: FORMS,\n }\n );\n\n if (!authType || !forms) {\n return <Redirect to=\"/\" />;\n }\n\n const Component = forms[authType];\n\n // Redirect the user to the login page if\n // the endpoint does not exist or\n // there is already an admin user oo\n // the user is already logged in\n if (!Component || (hasAdmin && authType === 'register-admin') || auth.getToken()) {\n return <Redirect to=\"/\" />;\n }\n\n // Redirect the user to the register-admin if it is the first user\n if (!hasAdmin && authType !== 'register-admin') {\n return (\n <Redirect\n to={{\n pathname: '/auth/register-admin',\n // Forward the `?redirectTo` from /auth/login\n // /abc => /auth/login?redirectTo=%2Fabc => /auth/register-admin?redirectTo=%2Fabc\n search,\n }}\n />\n );\n }\n\n if (Login && authType === 'login') {\n // Assign the component to render for the login form\n return <Login />;\n } else if (authType === 'login' && !Login) {\n // block rendering until the Login EE component is fully loaded\n return null;\n }\n\n return <Component hasAdmin={hasAdmin} />;\n};\n\nexport { AuthPage };\nexport type { AuthPageProps };\n","/**\n * NotFoundPage\n *\n * This is the page we show when the user visits a url that doesn't have a route\n *\n */\nimport {\n ContentLayout,\n EmptyStateLayout,\n HeaderLayout,\n LinkButton,\n Main,\n} from '@strapi/design-system';\nimport { useFocusWhenNavigate } from '@strapi/helper-plugin';\nimport { ArrowRight, EmptyPictures } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nexport const NotFoundPage = () => {\n const { formatMessage } = useIntl();\n useFocusWhenNavigate();\n\n return (\n <Main labelledBy=\"title\">\n <HeaderLayout\n id=\"title\"\n title={formatMessage({\n id: 'content-manager.pageNotFound',\n defaultMessage: 'Page not found',\n })}\n />\n <ContentLayout>\n <EmptyStateLayout\n action={\n <LinkButton variant=\"secondary\" endIcon={<ArrowRight />} to=\"/\">\n {formatMessage({\n id: 'app.components.NotFoundPage.back',\n defaultMessage: 'Back to homepage',\n })}\n </LinkButton>\n }\n content={formatMessage({\n id: 'app.page.not.found',\n defaultMessage: \"Oops! We can't seem to find the page you're looging for...\",\n })}\n hasRadius\n icon={<EmptyPictures width=\"10rem\" />}\n shadow=\"tableShadow\"\n />\n </ContentLayout>\n </Main>\n );\n};\n","import * as React from 'react';\n\nimport {\n Box,\n Button,\n Flex,\n Main,\n Option,\n Select,\n TextButton,\n TextInput,\n Typography,\n} from '@strapi/design-system';\nimport { auth, pxToRem, useFetchClient, useNotification } from '@strapi/helper-plugin';\nimport { parse } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useHistory } from 'react-router-dom';\nimport styled from 'styled-components';\n\nimport { Logo } from '../components/UnauthenticatedLogo';\nimport { LayoutContent, UnauthenticatedLayout } from '../layouts/UnauthenticatedLayout';\n\nexport const options = [\n {\n intlLabel: {\n id: 'Usecase.front-end',\n defaultMessage: 'Front-end developer',\n },\n value: 'front_end_developer',\n },\n {\n intlLabel: {\n id: 'Usecase.back-end',\n defaultMessage: 'Back-end developer',\n },\n value: 'back_end_developer',\n },\n {\n intlLabel: {\n id: 'Usecase.full-stack',\n defaultMessage: 'Full-stack developer',\n },\n value: 'full_stack_developer',\n },\n {\n intlLabel: {\n id: 'global.content-manager',\n defaultMessage: 'Content Manager',\n },\n value: 'content_manager',\n },\n {\n intlLabel: {\n id: 'Usecase.content-creator',\n defaultMessage: 'Content Creator',\n },\n value: 'content_creator',\n },\n {\n intlLabel: {\n id: 'Usecase.other',\n defaultMessage: 'Other',\n },\n value: 'other',\n },\n];\n\nconst TypographyCenter = styled(Typography)`\n text-align: center;\n`;\n\nexport const UseCasePage = () => {\n const toggleNotification = useNotification();\n const { push, location } = useHistory();\n const { formatMessage } = useIntl();\n const [role, setRole] = React.useState<string | number | null>(null);\n const [otherRole, setOtherRole] = React.useState('');\n const { post } = useFetchClient();\n\n const { firstname, email } = auth.get('userInfo') ?? {};\n const { hasAdmin } = parse(location?.search, { ignoreQueryPrefix: true });\n const isOther = role === 'other';\n\n const handleSubmit = async (event: React.FormEvent, skipPersona: boolean) => {\n event.preventDefault();\n try {\n await post('https://analytics.strapi.io/register', {\n email,\n username: firstname,\n firstAdmin: Boolean(!hasAdmin),\n persona: {\n role: skipPersona ? undefined : role,\n otherRole: skipPersona ? undefined : otherRole,\n },\n });\n\n toggleNotification({\n type: 'success',\n message: {\n id: 'Usecase.notification.success.project-created',\n defaultMessage: 'Project has been successfully created',\n },\n });\n push('/');\n } catch (err) {\n // Silent\n }\n };\n\n return (\n <UnauthenticatedLayout>\n <Main labelledBy=\"usecase-title\">\n <LayoutContent>\n <form onSubmit={(e) => handleSubmit(e, false)}>\n <Flex direction=\"column\" paddingBottom={7}>\n <Logo />\n <Box paddingTop={6} paddingBottom={1} width={pxToRem(250)}>\n <TypographyCenter variant=\"alpha\" as=\"h1\" id=\"usecase-title\">\n {formatMessage({\n id: 'Usecase.title',\n defaultMessage: 'Tell us a bit more about yourself',\n })}\n </TypographyCenter>\n </Box>\n </Flex>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Select\n id=\"usecase\"\n data-testid=\"usecase\"\n label={formatMessage({\n id: 'Usecase.input.work-type',\n defaultMessage: 'What type of work do you do?',\n })}\n // onClear={() => setRole(null)}\n // clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}\n onChange={(value) => setRole(value)}\n value={role}\n >\n {options.map(({ intlLabel, value }) => (\n <Option key={value} value={value}>\n {formatMessage(intlLabel)}\n </Option>\n ))}\n </Select>\n {isOther && (\n <TextInput\n name=\"other\"\n label={formatMessage({ id: 'Usecase.other', defaultMessage: 'Other' })}\n value={otherRole}\n onChange={(e) => setOtherRole(e.target.value)}\n data-testid=\"other\"\n />\n )}\n <Button type=\"submit\" size=\"L\" fullWidth disabled={!role}>\n {formatMessage({ id: 'global.finish', defaultMessage: 'Finish' })}\n </Button>\n </Flex>\n </form>\n </LayoutContent>\n <Flex justifyContent=\"center\">\n <Box paddingTop={4}>\n <TextButton onClick={(event) => handleSubmit(event, true)}>\n {formatMessage({\n id: 'Usecase.button.skip',\n defaultMessage: 'Skip this question',\n })}\n </TextButton>\n </Box>\n </Flex>\n </Main>\n </UnauthenticatedLayout>\n );\n};\n","/* eslint-disable check-file/filename-naming-convention */\n\nimport * as React from 'react';\n\nimport { LoadingIndicatorPage, MenuItem } from '@strapi/helper-plugin';\nimport { Route } from 'react-router-dom';\n\ninterface LazyCompoProps {\n loadComponent: Required<MenuItem>['Component'];\n}\n\nconst LazyCompo = ({ loadComponent }: LazyCompoProps) => {\n const [Compo, setCompo] = React.useState<React.ComponentType | null>(null);\n\n React.useEffect(() => {\n const loadCompo = async () => {\n try {\n const loadedCompo = await loadComponent();\n\n // TODO the loaded component provided can currently come from a default or named export\n // We will move the entire codebase to use named exports only\n // Until then we support both cases with priority given to the existing default exports\n if (typeof loadedCompo === 'function') {\n setCompo(() => loadedCompo);\n } else if (loadedCompo.default) {\n setCompo(() => loadedCompo.default!);\n }\n } catch (err) {}\n };\n\n loadCompo();\n }, [loadComponent]);\n\n if (Compo) {\n return <Compo />;\n }\n\n return <LoadingIndicatorPage />;\n};\n\nexport const createRoute = (\n loadComponent: LazyCompoProps['loadComponent'],\n to: MenuItem['to'],\n exact: MenuItem['exact'] = false\n) => {\n return (\n <Route\n render={() => <LazyCompo loadComponent={loadComponent} />}\n key={to}\n path={to}\n exact={exact || false}\n />\n );\n};\n","/**\n *\n * App.js\n *\n */\n\nimport * as React from 'react';\n\nimport { SkipToContent } from '@strapi/design-system';\nimport {\n auth,\n LoadingIndicatorPage,\n MenuItem,\n prefixFileUrlWithBackendUrl,\n TrackingProvider,\n useAppInfo,\n useFetchClient,\n useNotification,\n} from '@strapi/helper-plugin';\nimport merge from 'lodash/merge';\nimport { useIntl } from 'react-intl';\nimport { useDispatch } from 'react-redux';\nimport { Route, Switch } from 'react-router-dom';\n\nimport { PrivateRoute } from './components/PrivateRoute';\nimport { ADMIN_PERMISSIONS_CE, ACTION_SET_ADMIN_PERMISSIONS } from './constants';\nimport { useConfiguration } from './contexts/configuration';\nimport { useEnterprise } from './hooks/useEnterprise';\nimport { AuthPage } from './pages/Auth/AuthPage';\nimport { NotFoundPage } from './pages/NotFoundPage';\nimport { UseCasePage } from './pages/UseCasePage';\nimport { createRoute } from './utils/createRoute';\n\ntype StrapiRoute = Pick<MenuItem, 'exact' | 'to'> & Required<Pick<MenuItem, 'Component'>>;\n\nconst ROUTES_CE: StrapiRoute[] | null = null;\n\nconst AuthenticatedApp = React.lazy(() =>\n import('./components/AuthenticatedApp').then((mod) => ({ default: mod.AuthenticatedApp }))\n);\n\nexport const App = () => {\n const adminPermissions = useEnterprise(\n ADMIN_PERMISSIONS_CE,\n async () => (await import('../../ee/admin/src/constants')).ADMIN_PERMISSIONS_EE,\n {\n combine(cePermissions, eePermissions) {\n // the `settings` NS e.g. are deep nested objects, that need a deep merge\n return merge({}, cePermissions, eePermissions);\n },\n\n defaultValue: ADMIN_PERMISSIONS_CE,\n }\n );\n const routes = useEnterprise(\n ROUTES_CE,\n async () => (await import('../../ee/admin/src/constants')).ROUTES_EE,\n {\n defaultValue: [],\n }\n );\n const toggleNotification = useNotification();\n const { updateProjectSettings } = useConfiguration();\n const { formatMessage } = useIntl();\n const [{ isLoading, hasAdmin, uuid, deviceId }, setState] = React.useState({\n isLoading: true,\n deviceId: undefined,\n hasAdmin: false,\n uuid: false,\n });\n const dispatch = useDispatch();\n const appInfo = useAppInfo();\n const { get, post } = useFetchClient();\n\n const authRoutes = React.useMemo(() => {\n if (!routes) {\n return null;\n }\n\n return routes.map(({ to, Component, exact }) => createRoute(Component, to, exact));\n }, [routes]);\n\n const [telemetryProperties, setTelemetryProperties] = React.useState(undefined);\n\n React.useEffect(() => {\n dispatch({ type: ACTION_SET_ADMIN_PERMISSIONS, payload: adminPermissions });\n }, [adminPermissions, dispatch]);\n\n React.useEffect(() => {\n const currentToken = auth.getToken();\n\n const renewToken = async () => {\n try {\n const {\n data: {\n data: { token },\n },\n } = await post('/admin/renew-token', { token: currentToken });\n auth.updateToken(token);\n } catch (err) {\n // Refresh app\n auth.clearAppStorage();\n window.location.reload();\n }\n };\n\n if (currentToken) {\n renewToken();\n }\n }, [post]);\n\n React.useEffect(() => {\n const getData = async () => {\n try {\n const {\n data: {\n data: { hasAdmin, uuid, menuLogo, authLogo },\n },\n } = await get(`/admin/init`);\n\n updateProjectSettings({\n menuLogo: prefixFileUrlWithBackendUrl(menuLogo),\n authLogo: prefixFileUrlWithBackendUrl(authLogo),\n });\n\n if (uuid) {\n const {\n data: { data: properties },\n } = await get(`/admin/telemetry-properties`, {\n // NOTE: needed because the interceptors of the fetchClient redirect to /login when receive a 401 and it would end up in an infinite loop when the user doesn't have a session.\n validateStatus: (status) => status < 500,\n });\n\n setTelemetryProperties(properties);\n\n try {\n const event = 'didInitializeAdministration';\n await post(\n 'https://analytics.strapi.io/api/v2/track',\n {\n // This event is anonymous\n event,\n userId: '',\n deviceId,\n eventPropeties: {},\n userProperties: { environment: appInfo.currentEnvironment },\n groupProperties: { ...properties, projectId: uuid },\n },\n {\n headers: {\n 'X-Strapi-Event': event,\n },\n }\n );\n } catch (e) {\n // Silent.\n }\n }\n\n setState({ isLoading: false, hasAdmin, uuid, deviceId });\n } catch (err) {\n toggleNotification({\n type: 'warning',\n message: { id: 'app.containers.App.notification.error.init' },\n });\n }\n };\n\n getData();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [toggleNotification, updateProjectSettings]);\n\n const trackingInfo = React.useMemo(\n () => ({\n uuid,\n telemetryProperties,\n deviceId,\n }),\n [uuid, telemetryProperties, deviceId]\n );\n\n if (isLoading) {\n return <LoadingIndicatorPage />;\n }\n\n return (\n <React.Suspense fallback={<LoadingIndicatorPage />}>\n <SkipToContent>\n {formatMessage({ id: 'skipToContent', defaultMessage: 'Skip to content' })}\n </SkipToContent>\n <TrackingProvider value={trackingInfo}>\n <Switch>\n {authRoutes}\n <Route\n path=\"/auth/:authType\"\n render={(routerProps) => <AuthPage {...routerProps} hasAdmin={hasAdmin} />}\n exact\n />\n <PrivateRoute path=\"/usecase\" component={UseCasePage} />\n <PrivateRoute path=\"/\" component={AuthenticatedApp} />\n <Route path=\"\" component={NotFoundPage} />\n </Switch>\n </TrackingProvider>\n </React.Suspense>\n );\n};\n","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODAwIiBoZWlnaHQ9IjgwMCIgdmlld0JveD0iMCAwIDgwMCA4MDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8cGF0aCBkPSJNMzkgMjgyYzAtMTE4IDAtMTc2LjkgMzYuNi0yMTMuNUMxMTIuMiAzMiAxNzEuMSAzMiAyODguOSAzMmgyMjEuMmMxMTcuOCAwIDE3Ni43IDAgMjEzLjMgMzYuNkM3NjAgMTA1LjIgNzYwIDE2NC4xIDc2MCAyODEuOXYyMjEuMmMwIDExNy44IDAgMTc2LjctMzYuNiAyMTMuM0M2ODYuOCA3NTMgNjI3LjkgNzUzIDUxMC4xIDc1M0gyODguOWMtMTE3LjggMC0xNzYuNyAwLTIxMy4zLTM2LjZDMzkgNjc5LjggMzkgNjIwLjkgMzkgNTAzLjFWMjgxLjlaIiBmaWxsPSIjNDk0NUZGIi8+CiAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTUzNi40IDI1MC43SDI5My43djEyMy44aDEyMy44djEyMy43aDEyMy44VjI1NS41YzAtMi42LTIuMi00LjgtNC45LTQuOFoiIGZpbGw9IiNmZmYiLz4KICAgIDxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik00MTIuNyAzNzQuNWg0Ljh2NC44aC00Ljh6Ii8+CiAgICA8cGF0aCBkPSJNMjkzLjggMzc0LjVoMTE5YzIuNiAwIDQuOCAyLjEgNC44IDQuOHYxMTloLTExOWE0LjggNC44IDAgMCAxLTQuOC00Ljl2LTExOVoiIGZpbGw9IiM5NTkzRkYiLz4KICAgIDxwYXRoIGQ9Ik00MTcuNSA0OTguMmgxMjMuOEw0MjEuNiA2MThhMi40IDIuNCAwIDAgMS00LTEuN3YtMTE4Wk0yOTMuOCAzNzQuNWgtMTE4YTIuNCAyLjQgMCAwIDEtMS43LTQuMWwxMTkuNy0xMTkuN3YxMjMuOFoiIGZpbGw9IiM5NTkzRkYiLz4KPC9zdmc+Cg==\"","import { createContext } from '@radix-ui/react-context';\n\nimport type { StrapiApp } from '../StrapiApp';\ninterface AdminContextValue {\n getAdminInjectedComponents: StrapiApp['getAdminInjectedComponents'];\n}\n\nconst [AdminContextProvider, useAdminContext] = createContext<AdminContextValue>('AdminContext');\n\nconst useAdmin = () => useAdminContext('useAdmin');\n\nexport { AdminContextProvider, useAdmin };\nexport type { AdminContextValue };\n","import * as React from 'react';\n\nimport { ConfigurationContextProvider, ConfigurationContextValue } from '../contexts/configuration';\n\ninterface ConfigurationProviderProps {\n children: React.ReactNode;\n authLogo: string;\n menuLogo: string;\n showReleaseNotification?: boolean;\n showTutorials?: boolean;\n}\n\ntype LogoKeys = keyof ConfigurationContextValue['logos'];\n\nconst ConfigurationProvider = ({\n children,\n authLogo: defaultAuthLogo,\n menuLogo: defaultMenuLogo,\n showReleaseNotification = false,\n showTutorials = false,\n}: ConfigurationProviderProps) => {\n const [{ menuLogo, authLogo }, setLogos] = React.useState<{\n [_Key in `${LogoKeys}Logo`]?: ConfigurationContextValue['logos'][LogoKeys]['custom'];\n }>({\n menuLogo: null,\n authLogo: null,\n });\n\n const updateProjectSettings: ConfigurationContextValue['updateProjectSettings'] =\n React.useCallback(\n ({ menuLogo, authLogo }) => {\n setLogos({\n menuLogo: menuLogo || defaultMenuLogo,\n authLogo: authLogo || defaultAuthLogo,\n });\n },\n [defaultAuthLogo, defaultMenuLogo]\n );\n\n return (\n <ConfigurationContextProvider\n updateProjectSettings={updateProjectSettings}\n showReleaseNotification={showReleaseNotification}\n showTutorials={showTutorials}\n logos={{\n menu: { custom: menuLogo, default: defaultMenuLogo },\n auth: { custom: authLogo, default: defaultAuthLogo },\n }}\n >\n {children}\n </ConfigurationContextProvider>\n );\n};\n\nexport { ConfigurationProvider };\nexport type { ConfigurationProviderProps };\n","import * as React from 'react';\n\nimport {\n GuidedTourContextValue,\n GuidedTourProvider as GuidedTourProviderComponent,\n GuidedTourSectionKey,\n GuidedTourStep,\n GuidedTourStepKey,\n auth,\n} from '@strapi/helper-plugin';\nimport produce from 'immer';\nimport get from 'lodash/get';\nimport set from 'lodash/set';\n\n/* -------------------------------------------------------------------------------------------------\n * GuidedTourProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface GuidedTourProviderProps {\n children: React.ReactNode;\n}\n\nconst GuidedTourProvider = ({ children }: GuidedTourProviderProps) => {\n const [{ currentStep, guidedTourState, isGuidedTourVisible, isSkipped }, dispatch] =\n React.useReducer(reducer, initialState, initialiseState);\n\n const setCurrentStep = (step: SetCurrentStepAction['step']) => {\n // if step is null it is intentional, we need to dispatch it\n if (step !== null) {\n const isStepAlreadyDone = get(guidedTourState, step);\n const [sectionName, stepName] = step.split('.') as [GuidedTourSectionKey, GuidedTourStepKey];\n const sectionArray = Object.entries(guidedTourState[sectionName]);\n\n const currentStepIndex = sectionArray.findIndex(([key]) => key === stepName);\n const previousSteps = sectionArray.slice(0, currentStepIndex);\n\n const isStepToShow = previousSteps.every(([, sectionValue]) => sectionValue);\n\n if (isStepAlreadyDone || isSkipped || !isStepToShow) {\n return null;\n }\n }\n\n auth.set(null, 'GUIDED_TOUR_CURRENT_STEP', true);\n\n return dispatch({\n type: 'SET_CURRENT_STEP',\n step,\n });\n };\n\n const setGuidedTourVisibility = (value: SetGuidedTourVisibilityAction['value']) => {\n dispatch({\n type: 'SET_GUIDED_TOUR_VISIBILITY',\n value,\n });\n };\n\n const setStepState = (currentStep: GuidedTourStep, value: SetStepStateAction['value']) => {\n addCompletedStep(currentStep);\n\n dispatch({\n type: 'SET_STEP_STATE',\n currentStep,\n value,\n });\n };\n\n const startSection = (sectionName: GuidedTourSectionKey) => {\n const sectionSteps = guidedTourState[sectionName];\n\n if (sectionSteps) {\n const guidedTourArray = Object.entries(guidedTourState);\n\n // Find current section position in the guidedTourArray\n // Get only previous sections based on current section position\n const currentSectionIndex = guidedTourArray.findIndex(([key]) => key === sectionName);\n const previousSections = guidedTourArray.slice(0, currentSectionIndex);\n\n // Check if every steps from previous section are done\n const isSectionToShow = previousSections.every(([, sectionValue]) =>\n Object.values(sectionValue).every(Boolean)\n );\n\n const [firstStep] = Object.keys(sectionSteps) as [GuidedTourStepKey];\n const isFirstStepDone = sectionSteps[firstStep];\n\n if (isSectionToShow && !currentStep && !isFirstStepDone) {\n setCurrentStep(`${sectionName}.${firstStep}`);\n }\n }\n };\n\n const setSkipped = (value: SetSkippedAction['value']) => {\n auth.set(value, 'GUIDED_TOUR_SKIPPED', true);\n\n dispatch({\n type: 'SET_SKIPPED',\n value,\n });\n };\n\n return (\n <GuidedTourProviderComponent\n guidedTourState={guidedTourState}\n currentStep={currentStep}\n setCurrentStep={setCurrentStep}\n setGuidedTourVisibility={setGuidedTourVisibility}\n setSkipped={setSkipped}\n setStepState={setStepState}\n startSection={startSection}\n isGuidedTourVisible={isGuidedTourVisible}\n isSkipped={isSkipped}\n >\n {children}\n </GuidedTourProviderComponent>\n );\n};\n\ntype State = Pick<\n GuidedTourContextValue,\n 'guidedTourState' | 'currentStep' | 'isGuidedTourVisible' | 'isSkipped'\n>;\n\nconst initialState = {\n currentStep: null,\n guidedTourState: {\n contentTypeBuilder: {\n create: false,\n success: false,\n },\n contentManager: {\n create: false,\n success: false,\n },\n apiTokens: {\n create: false,\n success: false,\n },\n },\n isGuidedTourVisible: false,\n isSkipped: false,\n} satisfies State;\n\ninterface SetCurrentStepAction {\n type: 'SET_CURRENT_STEP';\n step: GuidedTourStep | null;\n}\n\ninterface SetStepStateAction {\n type: 'SET_STEP_STATE';\n currentStep: GuidedTourStep;\n value: boolean;\n}\n\ninterface SetSkippedAction {\n type: 'SET_SKIPPED';\n value: boolean;\n}\n\ninterface SetGuidedTourVisibilityAction {\n type: 'SET_GUIDED_TOUR_VISIBILITY';\n value: boolean;\n}\n\ntype Action =\n | SetCurrentStepAction\n | SetStepStateAction\n | SetSkippedAction\n | SetGuidedTourVisibilityAction;\n\nconst reducer: React.Reducer<State, Action> = (state: State = initialState, action: Action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'SET_CURRENT_STEP': {\n draftState.currentStep = action.step;\n break;\n }\n case 'SET_STEP_STATE': {\n const [section, step] = action.currentStep.split('.') as [\n GuidedTourSectionKey,\n GuidedTourStepKey\n ];\n draftState.guidedTourState[section][step] = action.value;\n break;\n }\n case 'SET_SKIPPED': {\n draftState.isSkipped = action.value;\n break;\n }\n case 'SET_GUIDED_TOUR_VISIBILITY': {\n draftState.isGuidedTourVisible = action.value;\n break;\n }\n default: {\n return draftState;\n }\n }\n });\n\nconst initialiseState = (initialState: State) => {\n const copyInitialState = { ...initialState };\n const guidedTourLocaleStorage = auth.get('GUIDED_TOUR_COMPLETED_STEPS');\n const currentStepLocaleStorage = auth.get('GUIDED_TOUR_CURRENT_STEP');\n const skippedLocaleStorage = auth.get('GUIDED_TOUR_SKIPPED');\n\n if (Array.isArray(guidedTourLocaleStorage)) {\n guidedTourLocaleStorage.forEach((step) => {\n const [sectionName, stepName] = step.split('.');\n set(copyInitialState, ['guidedTourState', sectionName, stepName], true);\n });\n }\n\n // if current step when initializing mark it as done\n if (currentStepLocaleStorage) {\n const [sectionName, stepName] = currentStepLocaleStorage.split('.') as [\n GuidedTourSectionKey,\n GuidedTourStepKey\n ];\n set(copyInitialState, ['guidedTourState', sectionName, stepName], true);\n\n addCompletedStep(currentStepLocaleStorage as GuidedTourStep);\n\n auth.set(null, 'GUIDED_TOUR_CURRENT_STEP', true);\n }\n\n if (skippedLocaleStorage !== null) {\n set(copyInitialState, 'isSkipped', skippedLocaleStorage);\n }\n\n return copyInitialState;\n};\n\n/**\n * @description Add a completed step to the local storage if it does not already exist.\n */\nconst addCompletedStep = (completedStep: GuidedTourStep) => {\n const currentSteps = auth.get('GUIDED_TOUR_COMPLETED_STEPS') ?? [];\n\n if (!Array.isArray(currentSteps)) {\n return;\n }\n\n const isAlreadyStored = currentSteps.includes(completedStep);\n\n if (isAlreadyStored) {\n return;\n }\n\n auth.set([...currentSteps, completedStep], 'GUIDED_TOUR_COMPLETED_STEPS', true);\n};\n\nexport { GuidedTourProvider };\n","import { createContext } from '@radix-ui/react-context';\nimport { DefaultTheme } from 'styled-components';\n\ntype ThemeName = 'light' | 'dark' | 'system';\ntype NonSystemThemeName = Exclude<ThemeName, 'system'>;\n\ninterface ThemeToggleContextContextValue {\n currentTheme?: ThemeName;\n onChangeTheme?: (nextTheme: ThemeName) => void;\n themes?: {\n dark: DefaultTheme;\n light: DefaultTheme;\n };\n systemTheme?: NonSystemThemeName;\n}\n\nconst [ThemeToggleContextProvider, useThemeToggleContext] =\n createContext<ThemeToggleContextContextValue>('ThemeToggleContext');\n\nconst useThemeToggle = () => useThemeToggleContext('useThemeToggle');\n\nexport { ThemeToggleContextProvider, useThemeToggle };\nexport type { ThemeName, NonSystemThemeName, ThemeToggleContextContextValue };\n","import * as React from 'react';\n\nimport { DesignSystemProvider } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { createGlobalStyle } from 'styled-components';\n\nimport { useThemeToggle } from '../contexts/themeToggle';\n\ninterface ThemeProps {\n children: React.ReactNode;\n}\n\nconst Theme = ({ children }: ThemeProps) => {\n const { currentTheme, themes, systemTheme } = useThemeToggle();\n const { locale } = useIntl();\n\n const computedThemeName = currentTheme === 'system' ? systemTheme : currentTheme;\n\n return (\n <DesignSystemProvider\n locale={locale}\n /**\n * TODO: could we make this neater i.e. by setting up the context to throw\n * if it can't find it, that way the type is always fully defined and we're\n * not checking it all the time...\n */\n theme={themes?.[computedThemeName || 'light']}\n >\n {children}\n <GlobalStyle />\n </DesignSystemProvider>\n );\n};\n\nconst GlobalStyle = createGlobalStyle`\n body {\n background: ${({ theme }) => theme.colors.neutral100};\n }\n`;\n\nexport { Theme };\n","import * as React from 'react';\n\nimport { DefaultTheme } from 'styled-components';\n\nimport { ThemeToggleContextProvider, ThemeName, NonSystemThemeName } from '../contexts/themeToggle';\n\nconst THEME_KEY = 'STRAPI_THEME';\n\nconst getDefaultTheme = () => {\n const persistedTheme = localStorage.getItem(THEME_KEY) as ThemeName | null;\n\n return persistedTheme || 'system';\n};\n\ninterface ThemeToggleProviderProps {\n children: React.ReactNode;\n themes: {\n light: DefaultTheme;\n dark: DefaultTheme;\n };\n}\n\nconst ThemeToggleProvider = ({ children, themes }: ThemeToggleProviderProps) => {\n const [currentTheme, setCurrentTheme] = React.useState<ThemeName>(getDefaultTheme());\n const [systemTheme, setSystemTheme] = React.useState<NonSystemThemeName>();\n\n const handleChangeTheme = React.useCallback(\n (nextTheme: ThemeName) => {\n setCurrentTheme(nextTheme);\n localStorage.setItem(THEME_KEY, nextTheme);\n },\n [setCurrentTheme]\n );\n\n // Listen to changes in the system theme\n React.useEffect(() => {\n const themeWatcher = window.matchMedia('(prefers-color-scheme: dark)');\n setSystemTheme(themeWatcher.matches ? 'dark' : 'light');\n\n const listener = (event: MediaQueryListEvent) => {\n setSystemTheme(event.matches ? 'dark' : 'light');\n };\n themeWatcher.addEventListener('change', listener);\n\n // Remove listener on cleanup\n return () => {\n themeWatcher.removeEventListener('change', listener);\n };\n }, []);\n\n return (\n <ThemeToggleContextProvider\n currentTheme={currentTheme}\n onChangeTheme={handleChangeTheme}\n themes={themes}\n systemTheme={systemTheme}\n >\n {children}\n </ThemeToggleContextProvider>\n );\n};\n\nexport { ThemeToggleProvider };\nexport type { ThemeToggleProviderProps };\n","import * as React from 'react';\n\nimport {\n AutoReloadOverlayBlockerProvider,\n CustomFieldsProvider,\n CustomFieldsProviderProps,\n LibraryProvider,\n LibraryProviderProps,\n NotificationsProvider,\n OverlayBlockerProvider,\n StrapiAppProvider,\n StrapiAppProviderProps,\n} from '@strapi/helper-plugin';\nimport { QueryClient, QueryClientProvider } from 'react-query';\nimport { Provider } from 'react-redux';\n\nimport { AdminContextProvider, AdminContextValue } from '../contexts/admin';\n\nimport { ConfigurationProvider, ConfigurationProviderProps } from './ConfigurationProvider';\nimport { GuidedTourProvider } from './GuidedTour/Provider';\nimport { LanguageProvider, LanguageProviderProps } from './LanguageProvider';\nimport { Theme } from './Theme';\nimport { ThemeToggleProvider, ThemeToggleProviderProps } from './ThemeToggleProvider';\n\nimport type { Store } from '../core/store/configure';\n\nconst queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n refetchOnWindowFocus: false,\n },\n },\n});\n\ninterface ProvidersProps\n extends Pick<ThemeToggleProviderProps, 'themes'>,\n Pick<LanguageProviderProps, 'messages' | 'localeNames'>,\n Pick<\n ConfigurationProviderProps,\n 'authLogo' | 'menuLogo' | 'showReleaseNotification' | 'showTutorials'\n >,\n Pick<AdminContextValue, 'getAdminInjectedComponents'>,\n Pick<CustomFieldsProviderProps, 'customFields'>,\n Pick<LibraryProviderProps, 'components' | 'fields'>,\n Pick<\n StrapiAppProviderProps,\n | 'getPlugin'\n | 'menu'\n | 'plugins'\n | 'runHookParallel'\n | 'runHookSeries'\n | 'runHookWaterfall'\n | 'settings'\n > {\n children: React.ReactNode;\n store: Store;\n}\n\nconst Providers = ({\n authLogo,\n children,\n components,\n customFields,\n fields,\n getAdminInjectedComponents,\n getPlugin,\n localeNames,\n menu,\n menuLogo,\n messages,\n plugins,\n runHookParallel,\n runHookSeries,\n runHookWaterfall,\n settings,\n showReleaseNotification,\n showTutorials,\n store,\n themes,\n}: ProvidersProps) => {\n return (\n <LanguageProvider messages={messages} localeNames={localeNames}>\n <ThemeToggleProvider themes={themes}>\n <Theme>\n <QueryClientProvider client={queryClient}>\n <Provider store={store}>\n <AdminContextProvider getAdminInjectedComponents={getAdminInjectedComponents}>\n <ConfigurationProvider\n authLogo={authLogo}\n menuLogo={menuLogo}\n showReleaseNotification={showReleaseNotification}\n showTutorials={showTutorials}\n >\n <StrapiAppProvider\n getPlugin={getPlugin}\n menu={menu}\n plugins={plugins}\n runHookParallel={runHookParallel}\n runHookWaterfall={runHookWaterfall}\n runHookSeries={runHookSeries}\n settings={settings}\n >\n <LibraryProvider components={components} fields={fields}>\n <CustomFieldsProvider customFields={customFields}>\n <AutoReloadOverlayBlockerProvider>\n <OverlayBlockerProvider>\n <GuidedTourProvider>\n <NotificationsProvider>{children}</NotificationsProvider>\n </GuidedTourProvider>\n </OverlayBlockerProvider>\n </AutoReloadOverlayBlockerProvider>\n </CustomFieldsProvider>\n </LibraryProvider>\n </StrapiAppProvider>\n </ConfigurationProvider>\n </AdminContextProvider>\n </Provider>\n </QueryClientProvider>\n </Theme>\n </ThemeToggleProvider>\n </LanguageProvider>\n );\n};\n\nexport { Providers };\n","/* eslint-disable check-file/filename-naming-convention */\nimport * as React from 'react';\n\nimport invariant from 'invariant';\n\nexport interface Component {\n name: string;\n Component: React.ComponentType;\n}\n\nexport class Components {\n components: Record<Component['name'], Component['Component']>;\n\n constructor() {\n this.components = {};\n }\n\n add(component: Component) {\n const { name, Component } = component;\n\n invariant(Component, 'A Component must be provided');\n invariant(name, 'A name must be provided');\n invariant(this.components[name] === undefined, 'A similar field already exists');\n\n this.components[name] = Component;\n }\n}\n","/* eslint-disable check-file/filename-naming-convention */\nimport invariant from 'invariant';\n\nimport type {\n CustomField,\n CustomFieldOption,\n CustomFieldOptionSection,\n CustomFieldUID,\n} from '@strapi/helper-plugin';\n\nconst ALLOWED_TYPES = [\n 'biginteger',\n 'boolean',\n 'date',\n 'datetime',\n 'decimal',\n 'email',\n 'enumeration',\n 'float',\n 'integer',\n 'json',\n 'password',\n 'richtext',\n 'string',\n 'text',\n 'time',\n 'uid',\n] as const;\n\nconst ALLOWED_ROOT_LEVEL_OPTIONS = [\n 'min',\n 'minLength',\n 'max',\n 'maxLength',\n 'required',\n 'regex',\n 'enum',\n 'unique',\n 'private',\n 'default',\n] as const;\n\nexport class CustomFields {\n customFields: Record<CustomFieldUID, CustomField>;\n\n constructor() {\n this.customFields = {};\n }\n\n register(customFields: CustomField | CustomField[]) {\n if (Array.isArray(customFields)) {\n // If several custom fields are passed, register them one by one\n customFields.forEach((customField) => {\n this.register(customField);\n });\n } else {\n // Handle individual custom field\n const { name, pluginId, type, intlLabel, intlDescription, components, options } =\n customFields;\n\n // Ensure required attributes are provided\n invariant(name, 'A name must be provided');\n invariant(type, 'A type must be provided');\n invariant(intlLabel, 'An intlLabel must be provided');\n invariant(intlDescription, 'An intlDescription must be provided');\n invariant(components, 'A components object must be provided');\n invariant(components.Input, 'An Input component must be provided');\n\n // Ensure the type is valid\n invariant(\n ALLOWED_TYPES.includes(type),\n `Custom field type: '${type}' is not a valid Strapi type or it can't be used with a Custom Field`\n );\n\n // Ensure name has no special characters\n const isValidObjectKey = /^(?![0-9])[a-zA-Z0-9$_-]+$/g;\n invariant(\n isValidObjectKey.test(name),\n `Custom field name: '${name}' is not a valid object key`\n );\n\n // Ensure options have valid name paths\n const allFormOptions = [...(options?.base || []), ...(options?.advanced || [])];\n\n if (allFormOptions.length) {\n const optionPathValidations = allFormOptions.reduce(optionsValidationReducer, []);\n\n optionPathValidations.forEach(({ isValidOptionPath, errorMessage }) => {\n invariant(isValidOptionPath, errorMessage);\n });\n }\n\n // When no plugin is specified, default to the global namespace\n const uid: CustomFieldUID = pluginId ? `plugin::${pluginId}.${name}` : `global::${name}`;\n\n // Ensure the uid is unique\n const uidAlreadyUsed = Object.prototype.hasOwnProperty.call(this.customFields, uid);\n invariant(!uidAlreadyUsed, `Custom field: '${uid}' has already been registered`);\n\n this.customFields[uid] = customFields;\n }\n }\n\n getAll() {\n return this.customFields;\n }\n\n get(uid: CustomFieldUID): CustomField | undefined {\n return this.customFields[uid];\n }\n}\n\ninterface OptionValidation {\n isValidOptionPath: boolean;\n errorMessage: string;\n}\n\nconst optionsValidationReducer = (\n acc: OptionValidation[],\n option: CustomFieldOptionSection | CustomFieldOption\n): OptionValidation[] => {\n if ('items' in option) {\n return option.items.reduce(optionsValidationReducer, acc);\n }\n\n if (!option.name) {\n acc.push({\n isValidOptionPath: false,\n errorMessage: \"The 'name' property is required on an options object\",\n });\n } else {\n acc.push({\n isValidOptionPath:\n option.name.startsWith('options') || ALLOWED_ROOT_LEVEL_OPTIONS.includes(option.name),\n errorMessage: `'${option.name}' must be prefixed with 'options.'`,\n });\n }\n\n return acc;\n};\n","/* eslint-disable check-file/filename-naming-convention */\nimport * as React from 'react';\n\nimport invariant from 'invariant';\n\nexport interface Field {\n type: string;\n Component: React.ComponentType;\n}\n\nexport class Fields {\n fields: Record<Field['type'], Field['Component']>;\n\n constructor() {\n this.fields = {};\n }\n\n add(field: Field) {\n const { type, Component } = field;\n\n invariant(Component, 'A Component must be provided');\n invariant(type, 'A type must be provided');\n\n this.fields[type] = Component;\n }\n}\n","/* eslint-disable check-file/filename-naming-convention */\nimport { Middleware } from '@reduxjs/toolkit';\n\nimport { RootState } from '../store/configure';\n\ntype TypedMiddleware = () => Middleware<object, RootState>;\n\nclass Middlewares {\n middlewares: Array<TypedMiddleware>;\n\n constructor() {\n this.middlewares = [];\n }\n\n add(middleware: TypedMiddleware) {\n this.middlewares.push(middleware);\n }\n}\n\nexport { Middlewares, TypedMiddleware as Middleware };\n","/* eslint-disable check-file/filename-naming-convention */\nimport { Plugin as IPlugin } from '@strapi/helper-plugin';\n\nexport interface PluginConfig\n extends Pick<IPlugin, 'apis' | 'initializer' | 'injectionZones' | 'isReady' | 'name'> {\n id: string;\n}\n\nexport class Plugin implements IPlugin {\n apis: PluginConfig['apis'];\n initializer: PluginConfig['initializer'];\n injectionZones: PluginConfig['injectionZones'];\n isReady: PluginConfig['isReady'];\n name: PluginConfig['name'];\n pluginId: PluginConfig['id'];\n\n constructor(pluginConf: PluginConfig) {\n this.apis = pluginConf.apis || {};\n this.initializer = pluginConf.initializer || null;\n this.injectionZones = pluginConf.injectionZones || {};\n this.isReady = pluginConf.isReady !== undefined ? pluginConf.isReady : true;\n this.name = pluginConf.name;\n this.pluginId = pluginConf.id;\n }\n\n getInjectedComponents(containerName: string, blockName: string) {\n try {\n return this.injectionZones[containerName][blockName] || [];\n } catch (err) {\n console.error('Cannot get injected component', err);\n\n return [];\n }\n }\n\n injectComponent(\n containerName: string,\n blockName: string,\n component: ReturnType<IPlugin['getInjectedComponents']>[number]\n ) {\n try {\n this.injectionZones[containerName][blockName].push(component);\n } catch (err) {\n console.error('Cannot inject component', err);\n }\n }\n}\n","/* eslint-disable check-file/filename-naming-convention */\n\nimport { Reducer, ReducersMapObject } from '@reduxjs/toolkit';\n\ninterface ReducerConstructorArgs {\n appReducers?: ReducersMapObject;\n}\n\nexport class Reducers {\n reducers: ReducersMapObject;\n\n constructor({ appReducers = {} }: ReducerConstructorArgs = {}) {\n this.reducers = { ...appReducers };\n }\n\n add(reducerName: string, reducer: Reducer) {\n this.reducers[reducerName] = reducer;\n }\n}\n","import { createSelector, Selector } from '@reduxjs/toolkit';\nimport { useDispatch, useStore, TypedUseSelectorHook, useSelector } from 'react-redux';\n\nimport type { RootState, Store } from './configure';\n\ntype AppDispatch = Store['dispatch'];\n\nconst useTypedDispatch: () => AppDispatch = useDispatch;\nconst useTypedStore = useStore as () => Store;\nconst useTypedSelector: TypedUseSelectorHook<RootState> = useSelector;\n\nconst createTypedSelector = <TResult>(selector: Selector<RootState, TResult>) =>\n createSelector((state: RootState) => state, selector);\n\nexport { useTypedDispatch, useTypedStore, useTypedSelector, createTypedSelector };\n","import * as React from 'react';\n\nimport {\n LoadingIndicatorPage,\n Permission,\n RBACContext,\n RBACContextValue,\n} from '@strapi/helper-plugin';\nimport produce from 'immer';\n\nimport { useTypedSelector, useTypedDispatch } from '../core/store/hooks';\n\n/* -------------------------------------------------------------------------------------------------\n * RBACProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RBACProviderProps {\n children: React.ReactNode;\n permissions: Permission[];\n refetchPermissions: RBACContextValue['refetchPermissions'];\n}\n\nconst RBACProvider = ({ children, permissions, refetchPermissions }: RBACProviderProps) => {\n const allPermissions = useTypedSelector((state) => state.rbacProvider.allPermissions);\n\n const dispatch = useTypedDispatch();\n\n React.useEffect(() => {\n dispatch(setPermissionsAction(permissions));\n\n return () => {\n dispatch(resetStoreAction());\n };\n }, [permissions, dispatch]);\n\n if (!allPermissions) {\n return <LoadingIndicatorPage />;\n }\n\n return (\n <RBACContext.Provider value={{ allPermissions, refetchPermissions }}>\n {children}\n </RBACContext.Provider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * RBACReducer\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RBACState {\n allPermissions: null | Permission[];\n collectionTypesRelatedPermissions: Record<string, Record<string, Permission[]>>;\n}\n\nconst initialState = {\n allPermissions: null,\n collectionTypesRelatedPermissions: {},\n};\n\nconst RESET_STORE = 'StrapiAdmin/RBACProvider/RESET_STORE';\nconst SET_PERMISSIONS = 'StrapiAdmin/RBACProvider/SET_PERMISSIONS';\n\ninterface ResetStoreAction {\n type: typeof RESET_STORE;\n}\n\nconst resetStoreAction = (): ResetStoreAction => ({ type: RESET_STORE });\n\ninterface SetPermissionsAction {\n type: typeof SET_PERMISSIONS;\n permissions: Permission[];\n}\n\nconst setPermissionsAction = (\n permissions: SetPermissionsAction['permissions']\n): SetPermissionsAction => ({\n type: SET_PERMISSIONS,\n permissions,\n});\n\ntype Actions = ResetStoreAction | SetPermissionsAction;\n\nconst RBACReducer = (state: RBACState = initialState, action: Actions) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case SET_PERMISSIONS: {\n draftState.allPermissions = action.permissions;\n draftState.collectionTypesRelatedPermissions = action.permissions\n .filter((perm) => perm.subject)\n .reduce<Record<string, Record<string, Permission[]>>>((acc, current) => {\n const { subject, action } = current;\n\n if (!subject) return acc;\n\n if (!acc[subject]) {\n acc[subject] = {};\n }\n\n acc[subject] = acc[subject][action]\n ? { ...acc[subject], [action]: [...acc[subject][action], current] }\n : { ...acc[subject], [action]: [current] };\n\n return acc;\n }, {});\n break;\n }\n case RESET_STORE: {\n return initialState;\n }\n default:\n return state;\n }\n });\n\nexport { RBACProvider, RBACReducer, resetStoreAction, setPermissionsAction };\nexport type {\n RBACState,\n Actions,\n RBACProviderProps,\n ResetStoreAction,\n SetPermissionsAction,\n Permission,\n};\n","export const SET_PERMISSIONS = 'ContentManager/RBACManager/SET_PERMISSIONS';\nexport const RESET_PERMISSIONS = 'ContentManager/RBACManager/RESET_PERMISSIONS';\n","/**\n *\n * RBACManager reducer\n */\n\nimport produce from 'immer';\n\nimport { RESET_PERMISSIONS, SET_PERMISSIONS } from './constants';\n\nexport const initialState = {\n permissions: null,\n};\n\nconst rbacManagerReducer = (state = initialState, action) =>\n // eslint-disable-next-line consistent-return\n produce(state, (draftState) => {\n switch (action.type) {\n case SET_PERMISSIONS: {\n draftState.permissions = Object.entries(action.permissions).reduce((acc, current) => {\n return [...acc, ...current[1]];\n }, []);\n break;\n }\n case RESET_PERMISSIONS: {\n draftState.permissions = null;\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport default rbacManagerReducer;\n","export const GET_INIT_DATA = 'ContentManager/App/GET_INIT_DATA';\nexport const RESET_INIT_DATA = 'ContentManager/App/RESET_INIT_DATA';\nexport const SET_INIT_DATA = 'ContentManager/App/SET_INIT_DATA';\n","/**\n *\n * main reducer\n */\n/* eslint-disable consistent-return */\nimport produce from 'immer';\n\nimport { GET_INIT_DATA, RESET_INIT_DATA, SET_INIT_DATA } from './constants';\n\nconst initialState = {\n components: [],\n status: 'loading',\n models: [],\n collectionTypeLinks: [],\n singleTypeLinks: [],\n};\n\n/**\n * Known as content-manager_app in the redux store\n */\nconst mainReducer = (state = initialState, action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case GET_INIT_DATA: {\n draftState.status = 'loading';\n break;\n }\n case RESET_INIT_DATA: {\n return initialState;\n }\n case SET_INIT_DATA: {\n draftState.collectionTypeLinks = action.data.authorizedCollectionTypeLinks.filter(\n ({ isDisplayed }) => isDisplayed\n );\n draftState.singleTypeLinks = action.data.authorizedSingleTypeLinks.filter(\n ({ isDisplayed }) => isDisplayed\n );\n draftState.components = action.data.components;\n draftState.models = action.data.contentTypeSchemas;\n draftState.fieldSizes = action.data.fieldSizes;\n draftState.status = 'resolved';\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport default mainReducer;\nexport { initialState };\n","export const SET_LAYOUT = 'ContentManager/EditViewLayoutManager/SET_LAYOUT';\nexport const RESET_PROPS = 'ContentManager/EditViewLayoutManager/RESET_PROPS';\n","/**\n *\n * EditViewLayoutManager reducer\n */\n\nimport produce from 'immer';\n\nimport { RESET_PROPS, SET_LAYOUT } from './constants';\n\nexport const initialState = {\n currentLayout: null,\n};\n\nconst editViewManagerReducer = (state = initialState, action) =>\n // eslint-disable-next-line consistent-return\n produce(state, (draftState) => {\n switch (action.type) {\n case RESET_PROPS: {\n draftState.currentLayout = null;\n break;\n }\n case SET_LAYOUT: {\n draftState.currentLayout = action.layout;\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport default editViewManagerReducer;\n","export const GET_DATA = 'ContentManager/ListView/GET_DATA';\nexport const GET_DATA_SUCCEEDED = 'ContentManager/ListView/GET_DATA_SUCCEEDED';\nexport const RESET_PROPS = 'ContentManager/ListView/RESET_PROPS';\nexport const ON_CHANGE_LIST_HEADERS = 'ContentManager/ListView/ON_CHANGE_LIST_HEADERS ';\nexport const ON_RESET_LIST_HEADERS = 'ContentManager/ListView/ON_RESET_LIST_HEADERS ';\nexport const SET_LIST_LAYOUT = 'ContentManager/ListView/SET_LIST_LAYOUT ';\n","/**\n *\n * listView reducer\n */\n\nimport produce from 'immer';\nimport get from 'lodash/get';\n\nimport {\n GET_DATA,\n GET_DATA_SUCCEEDED,\n ON_CHANGE_LIST_HEADERS,\n ON_RESET_LIST_HEADERS,\n RESET_PROPS,\n SET_LIST_LAYOUT,\n} from './constants';\n\nexport const initialState = {\n data: [],\n isLoading: true,\n contentType: {},\n components: [],\n initialDisplayedHeaders: [],\n displayedHeaders: [],\n pagination: {\n total: 0,\n },\n};\n\nconst listViewReducer = (state = initialState, action) =>\n // eslint-disable-next-line consistent-return\n produce(state, (draftState) => {\n switch (action.type) {\n case GET_DATA: {\n return {\n ...initialState,\n contentType: state.contentType,\n components: state.components,\n initialDisplayedHeaders: state.initialDisplayedHeaders,\n displayedHeaders: state.displayedHeaders,\n };\n }\n\n case GET_DATA_SUCCEEDED: {\n draftState.pagination = action.pagination;\n draftState.data = action.data;\n draftState.isLoading = false;\n break;\n }\n\n case ON_CHANGE_LIST_HEADERS: {\n const {\n target: { name, value },\n } = action;\n\n if (!value) {\n const { metadatas, attributes, uid } = state.contentType;\n const metas = metadatas[name].list;\n const header = {\n name,\n fieldSchema: attributes[name],\n metadatas: metas,\n key: `__${name}_key__`,\n };\n\n switch (attributes[name].type) {\n case 'component': {\n const componentName = attributes[name].component;\n const mainFieldName = get(\n state,\n ['components', componentName, 'settings', 'mainField'],\n null\n );\n const mainFieldAttribute = get(state, [\n 'components',\n componentName,\n 'attributes',\n mainFieldName,\n ]);\n\n draftState.displayedHeaders.push({\n ...header,\n metadatas: {\n ...metas,\n mainField: {\n ...mainFieldAttribute,\n name: mainFieldName,\n },\n },\n });\n break;\n }\n\n case 'relation':\n draftState.displayedHeaders.push({\n ...header,\n queryInfos: {\n defaultParams: {},\n endPoint: `collection-types/${uid}`,\n },\n });\n break;\n\n default:\n draftState.displayedHeaders.push(header);\n }\n } else {\n draftState.displayedHeaders = state.displayedHeaders.filter(\n (header) => header.name !== name\n );\n }\n\n break;\n }\n case ON_RESET_LIST_HEADERS: {\n draftState.displayedHeaders = state.initialDisplayedHeaders;\n break;\n }\n case RESET_PROPS: {\n return initialState;\n }\n case SET_LIST_LAYOUT: {\n const { contentType, components, displayedHeaders } = action;\n\n draftState.contentType = contentType;\n draftState.components = components;\n draftState.displayedHeaders = displayedHeaders;\n draftState.initialDisplayedHeaders = displayedHeaders;\n\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport default listViewReducer;\n","export const GET_DATA = 'ContentManager/CrudReducer/GET_DATA';\nexport const GET_DATA_SUCCEEDED = 'ContentManager/CrudReducer/GET_DATA_SUCCEEDED';\nexport const INIT_FORM = 'ContentManager/CrudReducer/INIT_FORM';\nexport const RESET_PROPS = 'ContentManager/CrudReducer/RESET_PROPS';\nexport const SET_DATA_STRUCTURES = 'ContentManager/CrudReducer/SET_DATA_STRUCTURES';\nexport const SET_STATUS = 'ContentManager/CrudReducer/SET_STATUS';\nexport const SUBMIT_SUCCEEDED = 'ContentManager/CrudReducer/SUBMIT_SUCCEEDED';\nexport const CLEAR_SET_MODIFIED_DATA_ONLY =\n 'ContentManager/CrudReducer/CLEAR_SET_MODIFIED_DATA_ONLY';\n","/* eslint-disable consistent-return */\nimport produce from 'immer';\n\n// NOTE: instead of creating a shared reducer here, we could also create a hook\n// that returns the dispatch and the state, however it will mess with the linter\n// and force us to either disable the linter for the hooks dependencies array rule or\n// require us to add the dispatch to the array which is not wanted. This refacto does not require us to\n// to do any of this.\nimport {\n CLEAR_SET_MODIFIED_DATA_ONLY,\n GET_DATA,\n GET_DATA_SUCCEEDED,\n INIT_FORM,\n RESET_PROPS,\n SET_DATA_STRUCTURES,\n SET_STATUS,\n SUBMIT_SUCCEEDED,\n} from './constants';\n\nconst crudInitialState = {\n componentsDataStructure: {},\n contentTypeDataStructure: {},\n isLoading: true,\n data: null,\n status: 'resolved',\n setModifiedDataOnly: false,\n};\n\nconst crudReducer = (state = crudInitialState, action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case GET_DATA: {\n draftState.isLoading = true;\n draftState.data = null;\n break;\n }\n case GET_DATA_SUCCEEDED: {\n draftState.isLoading = false;\n draftState.data = action.data;\n draftState.setModifiedDataOnly = action.setModifiedDataOnly ?? false;\n break;\n }\n case INIT_FORM: {\n if (action.data) {\n draftState.isLoading = false;\n draftState.data = action.data;\n\n break;\n }\n\n draftState.isLoading = false;\n draftState.data = state.contentTypeDataStructure;\n break;\n }\n case RESET_PROPS: {\n return crudInitialState;\n }\n case SET_DATA_STRUCTURES: {\n draftState.componentsDataStructure = action.componentsDataStructure;\n draftState.contentTypeDataStructure = action.contentTypeDataStructure;\n break;\n }\n case SET_STATUS: {\n draftState.status = action.status;\n break;\n }\n case SUBMIT_SUCCEEDED: {\n draftState.data = action.data;\n break;\n }\n case CLEAR_SET_MODIFIED_DATA_ONLY: {\n draftState.setModifiedDataOnly = false;\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport default crudReducer;\nexport { crudInitialState };\n","import produce from 'immer';\n\nimport { ACTION_SET_APP_RUNTIME_STATUS, ACTION_SET_ADMIN_PERMISSIONS } from './constants';\nimport { PermissionMap } from './types/permissions';\n\ninterface State {\n status: 'init' | 'runtime';\n permissions: Partial<PermissionMap>;\n}\n\nconst initialState = {\n permissions: {},\n status: 'init',\n} satisfies State;\n\ninterface SetAppRuntimeStatusAction {\n type: typeof ACTION_SET_APP_RUNTIME_STATUS;\n}\n\ninterface SetAdminPermissionsAction {\n type: typeof ACTION_SET_ADMIN_PERMISSIONS;\n payload: Record<string, unknown>;\n}\n\ntype Action = SetAppRuntimeStatusAction | SetAdminPermissionsAction;\n\nconst reducer = (state: State = initialState, action: Action) =>\n /* eslint-disable-next-line consistent-return */\n produce(state, (draftState) => {\n switch (action.type) {\n case ACTION_SET_APP_RUNTIME_STATUS: {\n draftState.status = 'runtime';\n break;\n }\n\n case ACTION_SET_ADMIN_PERMISSIONS: {\n draftState.permissions = action.payload;\n break;\n }\n\n default:\n return draftState;\n }\n });\n\nexport { reducer, initialState };\nexport type { State, Action, SetAppRuntimeStatusAction, SetAdminPermissionsAction };\n","import {\n configureStore,\n StoreEnhancer,\n Middleware,\n Reducer,\n combineReducers,\n} from '@reduxjs/toolkit';\n\nimport { RBACReducer } from '../../components/RBACProvider';\n// @ts-expect-error no types, yet.\nimport rbacManagerReducer from '../../content-manager/hooks/useSyncRbac/reducer';\n// @ts-expect-error no types, yet.\nimport cmAppReducer from '../../content-manager/pages/App/reducer';\n// @ts-expect-error no types, yet.\nimport editViewLayoutManagerReducer from '../../content-manager/pages/EditViewLayoutManager/reducer';\n// @ts-expect-error no types, yet.\nimport listViewReducer from '../../content-manager/pages/ListView/reducer';\n// @ts-expect-error no types, yet.\nimport editViewCrudReducer from '../../content-manager/sharedReducers/crudReducer/reducer';\nimport { reducer as appReducer } from '../../reducer';\n\n/**\n * @description Static reducers are ones we know, they live in the admin package.\n */\nconst staticReducers = {\n admin_app: appReducer,\n rbacProvider: RBACReducer,\n 'content-manager_app': cmAppReducer,\n 'content-manager_listView': listViewReducer,\n 'content-manager_rbacManager': rbacManagerReducer,\n 'content-manager_editViewLayoutManager': editViewLayoutManagerReducer,\n 'content-manager_editViewCrudReducer': editViewCrudReducer,\n} as const;\n\nconst injectReducerStoreEnhancer: (appReducers: Record<string, Reducer>) => StoreEnhancer =\n (appReducers) =>\n (next) =>\n (...args) => {\n const store = next(...args);\n\n const asyncReducers: Record<string, Reducer> = {};\n\n return {\n ...store,\n asyncReducers,\n injectReducer: (key: string, asyncReducer: Reducer) => {\n asyncReducers[key] = asyncReducer;\n store.replaceReducer(\n // @ts-expect-error we dynamically add reducers which makes the types uncomfortable.\n combineReducers({\n ...appReducers,\n ...asyncReducers,\n })\n );\n },\n };\n };\n\n/**\n * @description This is the main store configuration function, injected Reducers use our legacy app.addReducer API,\n * which we're trying to phase out. App Middlewares could potentially be improved...?\n */\nconst configureStoreImpl = (\n appMiddlewares: Array<() => Middleware> = [],\n injectedReducers: Record<string, Reducer> = {}\n) => {\n const coreReducers = { ...staticReducers, ...injectedReducers } as const;\n\n const store = configureStore({\n reducer: coreReducers,\n devTools: process.env.NODE_ENV !== 'production',\n middleware: (getDefaultMiddleware) => [\n ...getDefaultMiddleware(),\n ...appMiddlewares.map((m) => m()),\n ],\n enhancers: [injectReducerStoreEnhancer(coreReducers)],\n });\n\n return store;\n};\n\ntype Store = ReturnType<typeof configureStoreImpl> & {\n asyncReducers: Record<string, Reducer>;\n injectReducer: (key: string, asyncReducer: Reducer) => void;\n};\n\ntype RootState = ReturnType<Store['getState']>;\n\nexport { configureStoreImpl as configureStore };\nexport type { RootState, Store };\n","export const getBasename = () => (process.env.ADMIN_PATH ?? '').replace(window.location.origin, '');\n","/* eslint-disable no-await-in-loop */\n/* eslint-disable no-restricted-syntax */\n\nexport type Handler = (...args: any[]) => any;\n\nexport const createHook = () => {\n const _handlers: Handler[] = [];\n\n return {\n register(fn: Handler) {\n _handlers.push(fn);\n },\n delete(handler: Handler) {\n _handlers.splice(_handlers.indexOf(handler), 1);\n },\n runWaterfall<T>(args: T, store?: any) {\n return _handlers.reduce((acc, fn) => fn(acc, store), args);\n },\n async runWaterfallAsync<T>(args: T, store?: any) {\n let result = args;\n\n for (const fn of _handlers) {\n result = await fn(result, store);\n }\n\n return result;\n },\n runSeries<T extends any[]>(...args: T) {\n return _handlers.map((fn) => fn(...args));\n },\n async runSeriesAsync<T extends any[]>(...args: T) {\n const result = [];\n\n for (const fn of _handlers) {\n result.push(await fn(...args));\n }\n\n return result;\n },\n runParallel<T extends any[]>(...args: T) {\n return Promise.all(\n _handlers.map((fn) => {\n return fn(...args);\n })\n );\n },\n };\n};\n","import { useAdmin } from '../../contexts/admin';\nimport {\n InjectionZoneArea,\n InjectionZoneBlock,\n InjectionZoneContainer,\n InjectionZoneModule,\n} from '../components/InjectionZone';\n\nexport const useInjectionZone = (area: InjectionZoneArea) => {\n const { getAdminInjectedComponents } = useAdmin();\n\n const [moduleName, page, position] = area.split('.') as [\n InjectionZoneModule,\n InjectionZoneContainer,\n InjectionZoneBlock\n ];\n\n return getAdminInjectedComponents(moduleName, page, position);\n};\n","import * as React from 'react';\n\nimport { useInjectionZone } from '../hooks/useInjectionZone';\n\nconst INJECTION_ZONES = {\n admin: {\n // Temporary injection zone, support for the react-tour plugin in foodadvisor\n tutorials: {\n links: [],\n },\n },\n contentManager: {\n editView: { informations: [], 'right-links': [] },\n listView: {\n actions: [],\n deleteModalAdditionalInfos: [],\n publishModalAdditionalInfos: [],\n unpublishModalAdditionalInfos: [],\n },\n },\n} satisfies InjectionZones;\n\ninterface InjectionZoneComponent {\n Component: React.ComponentType;\n name: string;\n // TODO: in theory this could receive and forward any React component prop\n // but in practice there only seems to be once instance, where `slug` is\n // forwarded. The type needs to become either more generic or we disallow\n // prop spreading and offer a different way to access context data.\n slug: string;\n}\n\ninterface InjectionZones {\n admin: {\n tutorials: {\n links: InjectionZoneComponent[];\n };\n };\n contentManager: {\n editView: {\n informations: InjectionZoneComponent[];\n 'right-links': InjectionZoneComponent[];\n };\n listView: {\n actions: InjectionZoneComponent[];\n deleteModalAdditionalInfos: InjectionZoneComponent[];\n publishModalAdditionalInfos: InjectionZoneComponent[];\n unpublishModalAdditionalInfos: InjectionZoneComponent[];\n };\n };\n}\n\ntype InjectionZoneArea =\n | 'admin.tutorials.links'\n | 'contentManager.editView.informations'\n | 'contentManager.editView.right-links'\n | 'contentManager.listView.actions'\n | 'contentManager.listView.unpublishModalAdditionalInfos'\n | 'contentManager.listView.deleteModalAdditionalInfos'\n | 'contentManager.listView.publishModalAdditionalInfos'\n | 'contentManager.listView.deleteModalAdditionalInfos';\n\ntype InjectionZoneModule = InjectionZoneArea extends `${infer Word}.${string}` ? Word : never;\ntype InjectionZoneContainer = InjectionZoneArea extends `${string}.${infer Word}.${string}`\n ? Word\n : never;\ntype InjectionZoneBlock = InjectionZoneArea extends `${string}.${string}.${infer Word}`\n ? Word\n : never;\n\nconst InjectionZone = ({ area, ...props }: { area: InjectionZoneArea }) => {\n const components = useInjectionZone(area);\n\n return components.map((component) => <component.Component key={component.name} {...props} />);\n};\n\nexport { InjectionZone, INJECTION_ZONES };\n\nexport type {\n InjectionZoneArea,\n InjectionZoneComponent,\n InjectionZones,\n InjectionZoneModule,\n InjectionZoneContainer,\n InjectionZoneBlock,\n};\n","export const languageNativeNames = {\n ar: 'العربية',\n ca: 'Català',\n cs: 'Čeština',\n de: 'Deutsch',\n dk: 'Dansk',\n en: 'English',\n es: 'Español',\n eu: 'Euskara',\n fr: 'Français',\n gu: 'Gujarati',\n he: 'עברית',\n hu: 'Magyar',\n id: 'Indonesian',\n it: 'Italiano',\n ja: '日本語',\n ko: '한국어',\n ml: 'Malayalam',\n ms: 'Melayu',\n nl: 'Nederlands',\n no: 'Norwegian',\n pl: 'Polski',\n 'pt-BR': 'Português (Brasil)',\n pt: 'Português (Portugal)',\n ru: 'Русский',\n sk: 'Slovenčina',\n sv: 'Swedish',\n th: 'ไทย',\n tr: 'Türkçe',\n uk: 'Українська',\n vi: 'Tiếng Việt',\n 'zh-Hans': '中文 (简体)',\n zh: '中文 (繁體)',\n sa: 'संस्कृत',\n hi: 'हिन्दी',\n} as const;\n","import { ReducersMapObject } from '@reduxjs/toolkit';\nimport { darkTheme, lightTheme } from '@strapi/design-system';\nimport { MenuItem, StrapiAppSetting, StrapiAppSettingLink } from '@strapi/helper-plugin';\nimport invariant from 'invariant';\nimport isFunction from 'lodash/isFunction';\nimport merge from 'lodash/merge';\nimport pick from 'lodash/pick';\nimport { Helmet } from 'react-helmet';\nimport { BrowserRouter } from 'react-router-dom';\nimport { DefaultTheme } from 'styled-components';\n\nimport { App } from './App';\nimport Logo from './assets/images/logo-strapi-2022.svg';\nimport { LANGUAGE_LOCAL_STORAGE_KEY } from './components/LanguageProvider';\nimport { Providers } from './components/Providers';\nimport { HOOKS } from './constants';\nimport { Components, Component } from './core/apis/Components';\nimport { CustomFields } from './core/apis/CustomFields';\nimport { Field, Fields } from './core/apis/Fields';\nimport { Middleware, Middlewares } from './core/apis/Middlewares';\nimport { Plugin, PluginConfig } from './core/apis/Plugin';\nimport { Reducers } from './core/apis/Reducers';\nimport { Store, configureStore } from './core/store/configure';\nimport { getBasename } from './core/utils/basename';\nimport { Handler, createHook } from './core/utils/createHook';\nimport {\n INJECTION_ZONES,\n InjectionZoneBlock,\n InjectionZoneComponent,\n InjectionZoneContainer,\n InjectionZoneModule,\n InjectionZones,\n} from './shared/components/InjectionZone';\nimport { languageNativeNames } from './translations/languageNativeNames';\n\nconst {\n INJECT_COLUMN_IN_TABLE,\n MUTATE_COLLECTION_TYPES_LINKS,\n MUTATE_EDIT_VIEW_LAYOUT,\n MUTATE_SINGLE_TYPES_LINKS,\n} = HOOKS;\n\ninterface StrapiAppConstructorArgs extends Partial<Pick<StrapiApp, 'appPlugins'>> {\n adminConfig?: {\n config?: StrapiApp['customConfigurations'];\n bootstrap?: StrapiApp['customBootstrapConfiguration'];\n };\n}\n\ninterface StrapiAppPlugin {\n bootstrap: (\n args: Pick<\n StrapiApp,\n | 'addSettingsLink'\n | 'addSettingsLinks'\n | 'getPlugin'\n | 'injectContentManagerComponent'\n | 'injectAdminComponent'\n | 'registerHook'\n >\n ) => void;\n register: (app: StrapiApp) => void;\n registerTrads: (args: {\n locales: string[];\n }) => Promise<{ data: Record<string, string>; locale: string }[]>;\n}\n\nclass StrapiApp {\n admin: {\n injectionZones: InjectionZones;\n };\n appPlugins: Record<string, StrapiAppPlugin>;\n configurations: {\n authLogo: string;\n head: { favicon: string };\n locales: string[];\n menuLogo: string;\n notifications: { releases: boolean };\n themes: { light: DefaultTheme; dark: DefaultTheme };\n translations: Record<string, Record<string, string>>;\n tutorials: boolean;\n };\n customBootstrapConfiguration: unknown;\n customConfigurations: {\n auth?: { logo: string };\n head?: { favicon: string };\n locales?: string[];\n menu?: { logo: string };\n notifications?: { releases: boolean };\n theme?: { light: DefaultTheme; dark: DefaultTheme };\n translations?: Record<string, unknown>;\n tutorials?: boolean;\n };\n customFields: CustomFields;\n hooksDict: Record<string, ReturnType<typeof createHook>>;\n library: {\n components: Components;\n fields: Fields;\n };\n menu: MenuItem[];\n middlewares: Middlewares;\n plugins: Record<string, Plugin>;\n reducers: Reducers;\n settings: Record<string, StrapiAppSetting>;\n translations: StrapiApp['configurations']['translations'];\n\n constructor({ adminConfig, appPlugins }: StrapiAppConstructorArgs = {}) {\n this.customConfigurations = adminConfig?.config ?? {};\n this.customBootstrapConfiguration = adminConfig?.bootstrap;\n this.configurations = {\n authLogo: Logo,\n head: { favicon: '' },\n locales: ['en'],\n menuLogo: Logo,\n notifications: { releases: true },\n themes: { light: lightTheme, dark: darkTheme },\n translations: {},\n tutorials: true,\n };\n this.appPlugins = appPlugins || {};\n this.library = {\n components: new Components(),\n fields: new Fields(),\n };\n this.middlewares = new Middlewares();\n this.plugins = {};\n this.reducers = new Reducers();\n this.translations = {};\n this.hooksDict = {};\n this.admin = {\n injectionZones: INJECTION_ZONES,\n };\n this.customFields = new CustomFields();\n this.menu = [];\n this.settings = {\n global: {\n id: 'global',\n intlLabel: {\n id: 'Settings.global',\n defaultMessage: 'Global Settings',\n },\n links: [],\n },\n };\n }\n\n addComponents = (components: Component | Component[]) => {\n if (Array.isArray(components)) {\n components.map((compo) => this.library.components.add(compo));\n } else {\n this.library.components.add(components);\n }\n };\n\n addCorePluginMenuLink = (link: MenuItem) => {\n const stringifiedLink = JSON.stringify(link);\n\n invariant(link.to, `link.to should be defined for ${stringifiedLink}`);\n invariant(\n typeof link.to === 'string',\n `Expected link.to to be a string instead received ${typeof link.to}`\n );\n invariant(\n ['/plugins/content-type-builder', '/plugins/upload'].includes(link.to),\n 'This method is not available for your plugin'\n );\n invariant(\n link.intlLabel?.id && link.intlLabel?.defaultMessage,\n `link.intlLabel.id & link.intlLabel.defaultMessage for ${stringifiedLink}`\n );\n\n this.menu.push(link);\n };\n\n addFields = (fields: Field | Field[]) => {\n if (Array.isArray(fields)) {\n fields.map((field) => this.library.fields.add(field));\n } else {\n this.library.fields.add(fields);\n }\n };\n\n addMenuLink = (link: MenuItem) => {\n const stringifiedLink = JSON.stringify(link);\n\n invariant(link.to, `link.to should be defined for ${stringifiedLink}`);\n invariant(\n typeof link.to === 'string',\n `Expected link.to to be a string instead received ${typeof link.to}`\n );\n invariant(\n link.intlLabel?.id && link.intlLabel?.defaultMessage,\n `link.intlLabel.id & link.intlLabel.defaultMessage for ${stringifiedLink}`\n );\n invariant(\n link.Component && typeof link.Component === 'function',\n `link.Component should be a valid React Component`\n );\n invariant(\n link.icon && typeof link.icon === 'function',\n `link.Icon should be a valid React Component`\n );\n\n this.menu.push(link);\n };\n\n addMiddlewares = (middlewares: Middleware[]) => {\n middlewares.forEach((middleware) => {\n this.middlewares.add(middleware);\n });\n };\n\n addReducers = (reducers: ReducersMapObject) => {\n Object.keys(reducers).forEach((reducerName) => {\n this.reducers.add(reducerName, reducers[reducerName]);\n });\n };\n\n addSettingsLink = (sectionId: keyof StrapiApp['settings'], link: StrapiAppSettingLink) => {\n invariant(this.settings[sectionId], 'The section does not exist');\n\n const stringifiedLink = JSON.stringify(link);\n\n invariant(link.id, `link.id should be defined for ${stringifiedLink}`);\n invariant(\n link.intlLabel?.id && link.intlLabel?.defaultMessage,\n `link.intlLabel.id & link.intlLabel.defaultMessage for ${stringifiedLink}`\n );\n invariant(link.to, `link.to should be defined for ${stringifiedLink}`);\n invariant(\n link.Component && typeof link.Component === 'function',\n `link.Component should be a valid React Component`\n );\n\n this.settings[sectionId].links.push(link);\n };\n\n addSettingsLinks = (sectionId: keyof StrapiApp['settings'], links: StrapiAppSettingLink[]) => {\n invariant(this.settings[sectionId], 'The section does not exist');\n invariant(Array.isArray(links), 'TypeError expected links to be an array');\n\n links.forEach((link) => {\n this.addSettingsLink(sectionId, link);\n });\n };\n\n async bootstrap() {\n Object.keys(this.appPlugins).forEach((plugin) => {\n const bootstrap = this.appPlugins[plugin].bootstrap;\n\n if (bootstrap) {\n bootstrap({\n addSettingsLink: this.addSettingsLink,\n addSettingsLinks: this.addSettingsLinks,\n getPlugin: this.getPlugin,\n injectContentManagerComponent: this.injectContentManagerComponent,\n injectAdminComponent: this.injectAdminComponent,\n registerHook: this.registerHook,\n });\n }\n });\n\n if (isFunction(this.customBootstrapConfiguration)) {\n this.customBootstrapConfiguration({\n addComponents: this.addComponents,\n addFields: this.addFields,\n addMenuLink: this.addMenuLink,\n addReducers: this.addReducers,\n addSettingsLink: this.addSettingsLink,\n addSettingsLinks: this.addSettingsLinks,\n getPlugin: this.getPlugin,\n injectContentManagerComponent: this.injectContentManagerComponent,\n injectAdminComponent: this.injectAdminComponent,\n registerHook: this.registerHook,\n });\n }\n }\n\n bootstrapAdmin = async () => {\n await this.createCustomConfigurations();\n\n this.createHook(INJECT_COLUMN_IN_TABLE);\n this.createHook(MUTATE_COLLECTION_TYPES_LINKS);\n this.createHook(MUTATE_SINGLE_TYPES_LINKS);\n this.createHook(MUTATE_EDIT_VIEW_LAYOUT);\n\n return Promise.resolve();\n };\n\n createCustomConfigurations = async () => {\n if (this.customConfigurations?.locales) {\n this.configurations.locales = [\n 'en',\n ...(this.customConfigurations.locales?.filter((loc) => loc !== 'en') || []),\n ];\n }\n\n if (this.customConfigurations?.auth?.logo) {\n this.configurations.authLogo = this.customConfigurations.auth.logo;\n }\n\n if (this.customConfigurations?.menu?.logo) {\n this.configurations.menuLogo = this.customConfigurations.menu.logo;\n }\n\n if (this.customConfigurations?.head?.favicon) {\n this.configurations.head.favicon = this.customConfigurations.head.favicon;\n }\n\n if (this.customConfigurations?.theme) {\n const darkTheme = this.customConfigurations.theme.dark;\n const lightTheme = this.customConfigurations.theme.light;\n\n if (!darkTheme && !lightTheme) {\n console.warn(\n `[deprecated] In future versions, Strapi will stop supporting this theme customization syntax. The theme configuration accepts a light and a dark key to customize each theme separately. See https://docs.strapi.io/developer-docs/latest/development/admin-customization.html#theme-extension.`\n );\n merge(this.configurations.themes.light, this.customConfigurations.theme);\n }\n\n if (lightTheme) merge(this.configurations.themes.light, lightTheme);\n\n if (darkTheme) merge(this.configurations.themes.dark, darkTheme);\n }\n\n if (this.customConfigurations?.notifications?.releases !== undefined) {\n this.configurations.notifications.releases = this.customConfigurations.notifications.releases;\n }\n\n if (this.customConfigurations?.tutorials !== undefined) {\n this.configurations.tutorials = this.customConfigurations.tutorials;\n }\n };\n\n createHook = (name: string) => {\n this.hooksDict[name] = createHook();\n };\n\n createSettingSection = (section: StrapiAppSetting, links: StrapiAppSettingLink[]) => {\n invariant(section.id, 'section.id should be defined');\n invariant(\n section.intlLabel?.id && section.intlLabel?.defaultMessage,\n 'section.intlLabel should be defined'\n );\n\n invariant(Array.isArray(links), 'TypeError expected links to be an array');\n invariant(this.settings[section.id] === undefined, 'A similar section already exists');\n\n this.settings[section.id] = { ...section, links: [] };\n\n links.forEach((link) => {\n this.addSettingsLink(section.id, link);\n });\n };\n\n createStore = () => {\n const store = configureStore(this.middlewares.middlewares, this.reducers.reducers);\n\n return store as Store;\n };\n\n getAdminInjectedComponents = (\n moduleName: InjectionZoneModule,\n containerName: InjectionZoneContainer,\n blockName: InjectionZoneBlock\n ): InjectionZoneComponent[] => {\n try {\n // @ts-expect-error – we have a catch block so if you don't pass it correctly we still return an array.\n return this.admin.injectionZones[moduleName][containerName][blockName] || [];\n } catch (err) {\n console.error('Cannot get injected component', err);\n\n return [];\n }\n };\n\n getPlugin = (pluginId: PluginConfig['id']) => {\n return this.plugins[pluginId];\n };\n\n async initialize() {\n Object.keys(this.appPlugins).forEach((plugin) => {\n this.appPlugins[plugin].register(this);\n });\n }\n\n injectContentManagerComponent = <TContainerName extends keyof InjectionZones['contentManager']>(\n containerName: TContainerName,\n blockName: keyof InjectionZones['contentManager'][TContainerName],\n component: InjectionZoneComponent\n ) => {\n invariant(\n this.admin.injectionZones.contentManager[containerName]?.[blockName],\n `The ${containerName} ${String(blockName)} zone is not defined in the content manager`\n );\n invariant(component, 'A Component must be provided');\n\n // @ts-expect-error – we've alredy checked above that the block exists.\n this.admin.injectionZones.contentManager[containerName][blockName].push(component);\n };\n\n injectAdminComponent = <TContainerName extends keyof InjectionZones['admin']>(\n containerName: TContainerName,\n blockName: keyof InjectionZones['admin'][TContainerName],\n component: InjectionZoneComponent\n ) => {\n invariant(\n this.admin.injectionZones.admin[containerName]?.[blockName],\n `The ${containerName} ${String(blockName)} zone is not defined in the admin`\n );\n invariant(component, 'A Component must be provided');\n\n // @ts-expect-error – we've alredy checked above that the block exists.\n this.admin.injectionZones.admin[containerName][blockName].push(component);\n };\n\n /**\n * Load the admin translations\n * @returns {Object} The imported admin translations\n */\n async loadAdminTrads() {\n const arrayOfPromises = this.configurations.locales.map((locale) => {\n return import(`./translations/${locale}.json`)\n .then(({ default: data }) => {\n return { data, locale };\n })\n .catch(() => {\n return { data: null, locale };\n });\n });\n const adminLocales = await Promise.all(arrayOfPromises);\n\n const translations = adminLocales.reduce<{ [locale: string]: Record<string, string> }>(\n (acc, current) => {\n if (current.data) {\n acc[current.locale] = current.data;\n }\n\n return acc;\n },\n {}\n );\n\n return translations;\n }\n\n /**\n * Load the application's translations and merged the custom translations\n * with the default ones.\n *\n */\n async loadTrads() {\n const adminTranslations = await this.loadAdminTrads();\n\n const arrayOfPromises = Object.keys(this.appPlugins)\n .map((plugin) => {\n const registerTrads = this.appPlugins[plugin].registerTrads;\n\n if (registerTrads) {\n return registerTrads({ locales: this.configurations.locales });\n }\n\n return null;\n })\n .filter((a) => a);\n\n type Translation = Awaited<ReturnType<StrapiAppPlugin['registerTrads']>>[number];\n\n const pluginsTrads = (await Promise.all(arrayOfPromises)) as Array<Translation[]>;\n const mergedTrads = pluginsTrads.reduce<{ [locale: string]: Translation['data'] }>(\n (acc, currentPluginTrads) => {\n const pluginTrads = currentPluginTrads.reduce<{ [locale: string]: Translation['data'] }>(\n (acc1, current) => {\n acc1[current.locale] = current.data;\n\n return acc1;\n },\n {}\n );\n\n Object.keys(pluginTrads).forEach((locale) => {\n acc[locale] = { ...acc[locale], ...pluginTrads[locale] };\n });\n\n return acc;\n },\n {}\n );\n\n const translations = this.configurations.locales.reduce<{\n [locale: string]: Translation['data'];\n }>((acc, current) => {\n acc[current] = {\n ...adminTranslations[current],\n ...(mergedTrads[current] || {}),\n ...(this.customConfigurations?.translations?.[current] ?? {}),\n };\n\n return acc;\n }, {});\n\n this.configurations.translations = translations;\n\n return Promise.resolve();\n }\n\n registerHook = (name: string, fn: Handler) => {\n invariant(\n this.hooksDict[name],\n `The hook ${name} is not defined. You are trying to register a hook that does not exist in the application.`\n );\n this.hooksDict[name].register(fn);\n };\n\n registerPlugin = (pluginConf: PluginConfig) => {\n const plugin = new Plugin(pluginConf);\n\n this.plugins[plugin.pluginId] = plugin;\n };\n\n runHookSeries = (name: string, asynchronous = false) =>\n asynchronous ? this.hooksDict[name].runSeriesAsync() : this.hooksDict[name].runSeries();\n\n runHookWaterfall = (\n name: string,\n initialValue: unknown,\n asynchronous = false,\n store?: unknown\n ) => {\n return asynchronous\n ? this.hooksDict[name].runWaterfallAsync(initialValue, store)\n : this.hooksDict[name].runWaterfall(initialValue, store);\n };\n\n runHookParallel = (name: string) => this.hooksDict[name].runParallel();\n\n render() {\n const store = this.createStore();\n const localeNames = pick(languageNativeNames, this.configurations.locales || []);\n\n const {\n components: { components },\n fields: { fields },\n } = this.library;\n\n return (\n <Providers\n authLogo={this.configurations.authLogo}\n components={components}\n fields={fields}\n customFields={this.customFields}\n localeNames={localeNames}\n getAdminInjectedComponents={this.getAdminInjectedComponents}\n getPlugin={this.getPlugin}\n messages={this.configurations.translations}\n menu={this.menu}\n menuLogo={this.configurations.menuLogo}\n plugins={this.plugins}\n runHookParallel={this.runHookParallel}\n runHookWaterfall={(name, initialValue, async = false) => {\n return this.runHookWaterfall(name, initialValue, async, store);\n }}\n runHookSeries={this.runHookSeries}\n themes={this.configurations.themes}\n settings={this.settings}\n showTutorials={this.configurations.tutorials}\n showReleaseNotification={this.configurations.notifications.releases}\n store={store}\n >\n <Helmet\n htmlAttributes={{ lang: localStorage.getItem(LANGUAGE_LOCAL_STORAGE_KEY) || 'en' }}\n />\n <BrowserRouter basename={getBasename()}>\n <App />\n </BrowserRouter>\n </Providers>\n );\n }\n}\n\nexport { StrapiApp, StrapiAppConstructorArgs };\n","/* eslint-disable no-undef */\nimport { getFetchClient } from '@strapi/helper-plugin';\nimport { createRoot } from 'react-dom/client';\n\nimport { StrapiApp, StrapiAppConstructorArgs } from './StrapiApp';\n\nimport type { FeaturesService } from '@strapi/types';\n\ninterface RenderAdminArgs {\n customisations: StrapiAppConstructorArgs['adminConfig'];\n plugins: StrapiAppConstructorArgs['appPlugins'];\n features?: FeaturesService['config'];\n}\n\nconst renderAdmin = async (\n mountNode: HTMLElement | null,\n { plugins, customisations, features }: RenderAdminArgs\n) => {\n if (!mountNode) {\n throw new Error('[@strapi/admin]: Could not find the root element to mount the admin app');\n }\n\n window.strapi = {\n /**\n * This ENV variable is passed from the strapi instance, by default no url is set\n * in the config and therefore the instance returns you an empty string so URLs are relative.\n *\n * To ensure that the backendURL is always set, we use the window.location.origin as a fallback.\n */\n backendURL: process.env.STRAPI_ADMIN_BACKEND_URL || window.location.origin,\n isEE: false,\n telemetryDisabled: process.env.STRAPI_TELEMETRY_DISABLED === 'true' ? true : false,\n future: {\n isEnabled: (name: keyof FeaturesService['config']) => {\n return features?.future?.[name] === true;\n },\n },\n // @ts-expect-error – there's pollution from the global scope of Node.\n features: {\n SSO: 'sso',\n AUDIT_LOGS: 'audit-logs',\n REVIEW_WORKFLOWS: 'review-workflows',\n /**\n * If we don't get the license then we know it's not EE\n * so no feature is enabled.\n */\n isEnabled: () => false,\n },\n projectType: 'Community',\n flags: {\n nps: false,\n promoteEE: true,\n },\n };\n\n const { get } = getFetchClient();\n\n interface ProjectType extends Pick<Window['strapi'], 'flags'> {\n isEE: boolean;\n features: {\n name: string;\n }[];\n }\n\n try {\n const {\n data: {\n data: { isEE, features, flags },\n },\n } = await get<{ data: ProjectType }>('/admin/project-type');\n\n window.strapi.isEE = isEE;\n window.strapi.flags = flags;\n window.strapi.features = {\n ...window.strapi.features,\n isEnabled: (featureName) => features.some((feature) => feature.name === featureName),\n };\n window.strapi.projectType = isEE ? 'Enterprise' : 'Community';\n } catch (err) {\n /**\n * If this fails, we simply don't activate any EE features.\n * Should we warn clearer in the UI?\n */\n console.error(err);\n }\n\n const app = new StrapiApp({\n adminConfig: customisations,\n appPlugins: plugins,\n });\n\n await app.bootstrapAdmin();\n await app.initialize();\n await app.bootstrap();\n await app.loadTrads();\n\n createRoot(mountNode).render(app.render());\n\n if (\n typeof module !== 'undefined' &&\n module &&\n 'hot' in module &&\n typeof module.hot === 'object' &&\n module.hot !== null &&\n 'accept' in module.hot &&\n typeof module.hot.accept === 'function'\n ) {\n module.hot.accept();\n }\n};\n\nexport { renderAdmin };\nexport type { RenderAdminArgs };\n"],"names":["reducer","initialState","locale","auth","PasswordInput","Form","get","useReactQuery","Login","LoginCE","hasAdmin","uuid","menuLogo","authLogo","currentStep","GuidedTourProviderComponent","options","SET_PERMISSIONS","action","RESET_PROPS","GET_DATA","GET_DATA_SUCCEEDED","appReducer","cmAppReducer","editViewLayoutManagerReducer","editViewCrudReducer","Logo","darkTheme","lightTheme","configureStore","features"],"mappings":"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"}
1
+ {"version":3,"file":"index-3c67c00b.mjs","sources":["../../admin/src/components/NoJavascript.tsx","../../admin/src/components/DefaultDocument.tsx","../../admin/src/components/PrivateRoute.tsx","../../admin/src/constants.ts","../../admin/src/contexts/configuration.ts","../../admin/src/hooks/useEnterprise.ts","../../admin/src/components/LanguageProvider.tsx","../../admin/src/components/UnauthenticatedLogo.tsx","../../admin/src/layouts/UnauthenticatedLayout.tsx","../../admin/src/pages/Auth/components/FieldActionWrapper.tsx","../../admin/src/pages/Auth/components/Login.tsx","../../admin/src/pages/Auth/components/ForgotPassword.tsx","../../admin/src/pages/Auth/components/ForgotPasswordSuccess.tsx","../../admin/src/pages/Auth/components/Oops.tsx","../../admin/src/components/NpsSurvey.tsx","../../admin/src/pages/Auth/components/Register.tsx","../../admin/src/pages/Auth/components/ResetPassword.tsx","../../admin/src/pages/Auth/constants.ts","../../admin/src/pages/Auth/AuthPage.tsx","../../admin/src/pages/NotFoundPage.tsx","../../admin/src/pages/UseCasePage.tsx","../../admin/src/utils/createRoute.tsx","../../admin/src/App.tsx","../../admin/src/assets/images/logo-strapi-2022.svg","../../admin/src/contexts/admin.ts","../../admin/src/components/ConfigurationProvider.tsx","../../admin/src/components/GuidedTour/Provider.tsx","../../admin/src/contexts/themeToggle.ts","../../admin/src/components/Theme.tsx","../../admin/src/components/ThemeToggleProvider.tsx","../../admin/src/components/Providers.tsx","../../admin/src/core/apis/Components.ts","../../admin/src/core/apis/CustomFields.ts","../../admin/src/core/apis/Fields.ts","../../admin/src/core/apis/Middlewares.ts","../../admin/src/core/apis/Plugin.ts","../../admin/src/core/apis/Reducers.ts","../../admin/src/core/store/hooks.ts","../../admin/src/components/RBACProvider.tsx","../../admin/src/content-manager/hooks/useSyncRbac/constants.js","../../admin/src/content-manager/hooks/useSyncRbac/reducer.js","../../admin/src/content-manager/pages/App/constants.js","../../admin/src/content-manager/pages/App/reducer.js","../../admin/src/content-manager/pages/EditViewLayoutManager/constants.js","../../admin/src/content-manager/pages/EditViewLayoutManager/reducer.js","../../admin/src/content-manager/pages/ListView/constants.js","../../admin/src/content-manager/pages/ListView/reducer.js","../../admin/src/content-manager/sharedReducers/crudReducer/constants.js","../../admin/src/content-manager/sharedReducers/crudReducer/reducer.js","../../admin/src/reducer.ts","../../admin/src/core/store/configure.ts","../../admin/src/core/utils/basename.ts","../../admin/src/core/utils/createHook.ts","../../admin/src/shared/hooks/useInjectionZone.ts","../../admin/src/shared/components/InjectionZone.tsx","../../admin/src/translations/languageNativeNames.ts","../../admin/src/StrapiApp.tsx","../../admin/src/render.ts"],"sourcesContent":["const styles = `\n.strapi--root {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n bottom: 0;\n background: #fff;\n}\n\n.strapi--no-js {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n text-align: center;\n font-family: helvetica, arial, sans-serif;\n}\n`;\n\n/**\n * @internal\n *\n * @description this belongs to our default document that we render.\n */\nconst NoJavascript = () => {\n return (\n <noscript>\n <div className=\"strapi--root\">\n <div className=\"strapi--no-js\">\n <style type=\"text/css\">{styles}</style>\n <h1>JavaScript disabled</h1>\n <p>\n Please <a href=\"https://www.enable-javascript.com/\">enable JavaScript</a> in your\n browser and reload the page to proceed.\n </p>\n </div>\n </div>\n </noscript>\n );\n};\n\nexport { NoJavascript };\n","import { NoJavascript } from './NoJavascript';\n\n/**\n * TODO: add favicons.........\n */\n\nconst globalStyles = `\n html,\n body,\n #strapi {\n height: 100%;\n }\n body {\n margin: 0;\n -webkit-font-smoothing: antialiased;\n }\n`;\n\n/**\n * @internal\n */\nconst DefaultDocument = () => {\n return (\n <html lang=\"en\">\n <head>\n <meta charSet=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, viewport-fit=cover\" />\n <meta name=\"robots\" content=\"noindex\" />\n <meta name=\"referrer\" content=\"same-origin\" />\n\n <title>Strapi Admin</title>\n <style>{globalStyles}</style>\n </head>\n <body>\n <div id=\"strapi\" />\n <NoJavascript />\n </body>\n </html>\n );\n};\n\nexport { DefaultDocument };\n","import * as React from 'react';\n\nimport { auth } from '@strapi/helper-plugin';\nimport { Redirect, Route, useLocation } from 'react-router-dom';\n\ntype PropsOf<T> = T extends React.ComponentType<infer P> ? P : object;\n\ntype PrivateRouteProps<TComponent extends React.ElementType> = {\n component: TComponent;\n path: string;\n} & PropsOf<TComponent>;\n\nconst PrivateRoute = <TComponent extends React.ElementType>({\n component: Component,\n path,\n ...rest\n}: PrivateRouteProps<TComponent>) => {\n const { pathname, search } = useLocation();\n\n return (\n <Route\n path={path}\n render={(props) =>\n auth.getToken() !== null ? (\n <Component {...rest} {...props} />\n ) : (\n <Redirect\n to={{\n pathname: '/auth/login',\n search:\n pathname !== '/'\n ? `?redirectTo=${encodeURIComponent(`${pathname}${search}`)}`\n : undefined,\n }}\n />\n )\n }\n />\n );\n};\n\nexport { PrivateRoute };\n","import { StrapiAppSettingLink } from '@strapi/helper-plugin';\n\nexport const ADMIN_PERMISSIONS_CE = {\n contentManager: {\n main: [],\n collectionTypesConfigurations: [\n {\n action: 'plugin::content-manager.collection-types.configure-view',\n subject: null,\n },\n ],\n componentsConfigurations: [\n {\n action: 'plugin::content-manager.components.configure-layout',\n subject: null,\n },\n ],\n singleTypesConfigurations: [\n {\n action: 'plugin::content-manager.single-types.configure-view',\n subject: null,\n },\n ],\n },\n marketplace: {\n main: [{ action: 'admin::marketplace.read', subject: null }],\n read: [{ action: 'admin::marketplace.read', subject: null }],\n },\n settings: {\n roles: {\n main: [\n { action: 'admin::roles.create', subject: null },\n { action: 'admin::roles.update', subject: null },\n { action: 'admin::roles.read', subject: null },\n { action: 'admin::roles.delete', subject: null },\n ],\n create: [{ action: 'admin::roles.create', subject: null }],\n delete: [{ action: 'admin::roles.delete', subject: null }],\n read: [{ action: 'admin::roles.read', subject: null }],\n update: [{ action: 'admin::roles.update', subject: null }],\n },\n users: {\n main: [\n { action: 'admin::users.create', subject: null },\n { action: 'admin::users.read', subject: null },\n { action: 'admin::users.update', subject: null },\n { action: 'admin::users.delete', subject: null },\n ],\n create: [{ action: 'admin::users.create', subject: null }],\n delete: [{ action: 'admin::users.delete', subject: null }],\n read: [{ action: 'admin::users.read', subject: null }],\n update: [{ action: 'admin::users.update', subject: null }],\n },\n webhooks: {\n main: [\n { action: 'admin::webhooks.create', subject: null },\n { action: 'admin::webhooks.read', subject: null },\n { action: 'admin::webhooks.update', subject: null },\n { action: 'admin::webhooks.delete', subject: null },\n ],\n create: [{ action: 'admin::webhooks.create', subject: null }],\n delete: [{ action: 'admin::webhooks.delete', subject: null }],\n read: [\n { action: 'admin::webhooks.read', subject: null },\n // NOTE: We need to check with the API\n { action: 'admin::webhooks.update', subject: null },\n { action: 'admin::webhooks.delete', subject: null },\n ],\n update: [{ action: 'admin::webhooks.update', subject: null }],\n },\n 'api-tokens': {\n main: [{ action: 'admin::api-tokens.access', subject: null }],\n create: [{ action: 'admin::api-tokens.create', subject: null }],\n delete: [{ action: 'admin::api-tokens.delete', subject: null }],\n read: [{ action: 'admin::api-tokens.read', subject: null }],\n update: [{ action: 'admin::api-tokens.update', subject: null }],\n regenerate: [{ action: 'admin::api-tokens.regenerate', subject: null }],\n },\n 'transfer-tokens': {\n main: [{ action: 'admin::transfer.tokens.access', subject: null }],\n create: [{ action: 'admin::transfer.tokens.create', subject: null }],\n delete: [{ action: 'admin::transfer.tokens.delete', subject: null }],\n read: [{ action: 'admin::transfer.tokens.read', subject: null }],\n update: [{ action: 'admin::transfer.tokens.update', subject: null }],\n regenerate: [{ action: 'admin::transfer.tokens.regenerate', subject: null }],\n },\n 'project-settings': {\n read: [{ action: 'admin::project-settings.read', subject: null }],\n update: [{ action: 'admin::project-settings.update', subject: null }],\n },\n },\n};\n\nexport const HOOKS = {\n /**\n * Hook that allows to mutate the displayed headers of the list view table\n * @constant\n * @type {string}\n */\n INJECT_COLUMN_IN_TABLE: 'Admin/CM/pages/ListView/inject-column-in-table',\n\n /**\n * Hook that allows to mutate the CM's collection types links pre-set filters\n * @constant\n * @type {string}\n */\n MUTATE_COLLECTION_TYPES_LINKS: 'Admin/CM/pages/App/mutate-collection-types-links',\n\n /**\n * Hook that allows to mutate the CM's edit view layout\n * @constant\n * @type {string}\n */\n MUTATE_EDIT_VIEW_LAYOUT: 'Admin/CM/pages/EditView/mutate-edit-view-layout',\n\n /**\n * Hook that allows to mutate the CM's single types links pre-set filters\n * @constant\n * @type {string}\n */\n MUTATE_SINGLE_TYPES_LINKS: 'Admin/CM/pages/App/mutate-single-types-links',\n};\n\nexport const ACTION_SET_APP_RUNTIME_STATUS = 'StrapiAdmin/APP/SET_APP_RUNTIME_STATUS';\nexport const ACTION_SET_ADMIN_PERMISSIONS = 'StrapiAdmin/App/SET_ADMIN_PERMISSIONS';\n\nexport interface SettingsMenuLink extends Omit<StrapiAppSettingLink, 'Component' | 'permissions'> {\n Component?: never;\n lockIcon?: boolean;\n}\n\nexport type SettingsMenu = {\n admin: SettingsMenuLink[];\n global: SettingsMenuLink[];\n};\n\nexport const SETTINGS_LINKS_CE = (): SettingsMenu => ({\n global: [\n {\n intlLabel: { id: 'Settings.application.title', defaultMessage: 'Overview' },\n to: '/settings/application-infos',\n id: '000-application-infos',\n },\n {\n intlLabel: { id: 'Settings.webhooks.title', defaultMessage: 'Webhooks' },\n to: '/settings/webhooks',\n id: 'webhooks',\n },\n {\n intlLabel: { id: 'Settings.apiTokens.title', defaultMessage: 'API Tokens' },\n to: '/settings/api-tokens?sort=name:ASC',\n id: 'api-tokens',\n },\n {\n intlLabel: { id: 'Settings.transferTokens.title', defaultMessage: 'Transfer Tokens' },\n to: '/settings/transfer-tokens?sort=name:ASC',\n id: 'transfer-tokens',\n },\n // If the Enterprise feature is not enabled and if the config doesn't disable it, we promote the Enterprise feature by displaying them in the settings menu.\n // Disable this by adding \"promoteEE: false\" to your `./config/admin.js` file\n ...(!window.strapi.features.isEnabled(window.strapi.features.SSO) &&\n window.strapi?.flags?.promoteEE\n ? [\n {\n intlLabel: { id: 'Settings.sso.title', defaultMessage: 'Single Sign-On' },\n to: '/settings/purchase-single-sign-on',\n id: 'sso',\n lockIcon: true,\n },\n ]\n : []),\n\n ...(!window.strapi.features.isEnabled(window.strapi.features.REVIEW_WORKFLOWS) &&\n window.strapi?.flags?.promoteEE\n ? [\n {\n intlLabel: {\n id: 'Settings.review-workflows.page.title',\n defaultMessage: 'Review Workflows',\n },\n to: '/settings/purchase-review-workflows',\n id: 'review-workflows',\n lockIcon: true,\n },\n ]\n : []),\n ],\n\n admin: [\n {\n intlLabel: { id: 'global.roles', defaultMessage: 'Roles' },\n to: '/settings/roles',\n id: 'roles',\n },\n {\n intlLabel: { id: 'global.users', defaultMessage: 'Users' },\n // Init the search params directly\n to: '/settings/users?pageSize=10&page=1&sort=firstname',\n id: 'users',\n },\n ...(!window.strapi.features.isEnabled(window.strapi.features.AUDIT_LOGS) &&\n window.strapi?.flags?.promoteEE\n ? [\n {\n intlLabel: { id: 'global.auditLogs', defaultMessage: 'Audit Logs' },\n to: '/settings/purchase-audit-logs',\n id: 'auditLogs',\n lockIcon: true,\n },\n ]\n : []),\n ],\n});\n","import { createContext } from '@radix-ui/react-context';\n\nexport interface ConfigurationContextValue {\n logos: {\n auth: { custom?: string | null; default: string };\n menu: { custom?: string | null; default: string };\n };\n showTutorials: boolean;\n showReleaseNotification: boolean;\n updateProjectSettings: (settings: { authLogo?: string; menuLogo?: string }) => void;\n}\n\nconst [ConfigurationContextProvider, useConfigurationContext] =\n createContext<ConfigurationContextValue>('ConfigurationContext');\n\nconst useConfiguration = () => useConfigurationContext('useConfiguration');\n\nexport { ConfigurationContextProvider, useConfiguration };\n","import * as React from 'react';\n\nimport { useCallbackRef } from '@strapi/helper-plugin';\n\nfunction isEnterprise() {\n return window.strapi.isEE;\n}\n\nexport interface UseEnterpriseOptions<TCEData, TEEData, TDefaultValue, TCombinedValue> {\n defaultValue?: TDefaultValue;\n combine?: (ceData: TCEData, eeData: TEEData) => TCombinedValue;\n enabled?: boolean;\n}\n\ntype UseEnterpriseReturn<TCEData, TEEData, TDefaultValue, TCombinedValue> =\n TDefaultValue extends null\n ? TCEData | TEEData | TCombinedValue | null\n : TCEData | TEEData | TCombinedValue | TDefaultValue;\n\nexport const useEnterprise = <\n TCEData,\n TEEData = TCEData,\n TCombinedValue = TEEData,\n TDefaultValue = TCEData | null\n>(\n ceData: TCEData,\n eeCallback: () => Promise<TEEData>,\n opts: UseEnterpriseOptions<TCEData, TEEData, TDefaultValue, TCombinedValue> = {}\n): UseEnterpriseReturn<TCEData, TEEData, TDefaultValue, TCombinedValue> => {\n const { defaultValue = null, combine = (_ceData, eeData) => eeData, enabled = true } = opts;\n const eeCallbackRef = useCallbackRef(eeCallback);\n const combineCallbackRef = useCallbackRef(combine);\n\n // We have to use a nested object here, because functions (e.g. Components)\n // can not be stored as value directly\n const [{ data }, setData] = React.useState<{\n data: TCEData | TEEData | TDefaultValue | TCombinedValue | null;\n }>({\n data: isEnterprise() && enabled ? defaultValue : ceData,\n });\n\n React.useEffect(() => {\n async function importEE() {\n const eeData = await eeCallbackRef();\n const combinedValue = combineCallbackRef(ceData, eeData);\n\n setData({ data: combinedValue ? combinedValue : eeData });\n }\n\n if (isEnterprise() && enabled) {\n importEE();\n }\n }, [ceData, eeCallbackRef, combineCallbackRef, enabled]);\n\n // @ts-expect-error – the hook type assertion works in practice. But seems to have issues here...\n return data;\n};\n","/*\n *\n * LanguageProvider\n *\n * this component connects the redux state language locale to the\n * IntlProvider component and i18n messages (loaded from `app/translations`)\n */\n\nimport * as React from 'react';\n\nimport { createContext } from '@radix-ui/react-context';\nimport defaultsDeep from 'lodash/defaultsDeep';\nimport { IntlProvider } from 'react-intl';\n\n/* -------------------------------------------------------------------------------------------------\n * LocalesContext\n * -----------------------------------------------------------------------------------------------*/\n\ninterface LocalesContextValue {\n changeLocale: (locale: keyof State['localeNames']) => void;\n localeNames: Record<string, string>;\n}\n\nconst [LocalesContextProvider, useLocalesContext] =\n createContext<LocalesContextValue>('LocalesContext');\n\nconst useLocales = () => useLocalesContext('useLocales');\n\n/* -------------------------------------------------------------------------------------------------\n * LanguageProvider\n * -----------------------------------------------------------------------------------------------*/\n\nconst LANGUAGE_LOCAL_STORAGE_KEY = 'strapi-admin-language';\n\ninterface LanguageProviderProps {\n children: React.ReactNode;\n localeNames: Record<string, string>;\n messages: Record<string, Record<string, string>>;\n}\n\nconst LanguageProvider = ({ children, localeNames, messages }: LanguageProviderProps) => {\n const [{ locale }, dispatch] = React.useReducer<React.Reducer<State, Action>, State>(\n reducer,\n initialState,\n () => {\n const languageFromLocaleStorage = window.localStorage.getItem(LANGUAGE_LOCAL_STORAGE_KEY);\n if (languageFromLocaleStorage && localeNames[languageFromLocaleStorage]) {\n return {\n locale: languageFromLocaleStorage,\n localeNames,\n };\n } else {\n return {\n locale: 'en',\n localeNames,\n };\n }\n }\n );\n\n React.useEffect(() => {\n // Set user language in local storage.\n window.localStorage.setItem(LANGUAGE_LOCAL_STORAGE_KEY, locale);\n document.documentElement.setAttribute('lang', locale);\n }, [locale]);\n\n const changeLocale = React.useCallback((locale: keyof State['localeNames']) => {\n dispatch({\n type: 'CHANGE_LOCALE',\n locale,\n });\n }, []);\n\n const appMessages = defaultsDeep(messages[locale], messages.en);\n\n return (\n <IntlProvider locale={locale} defaultLocale=\"en\" messages={appMessages} textComponent=\"span\">\n <LocalesContextProvider changeLocale={changeLocale} localeNames={localeNames}>\n {children}\n </LocalesContextProvider>\n </IntlProvider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Reducer\n * -----------------------------------------------------------------------------------------------*/\n\ninterface State {\n localeNames: Record<string, string>;\n locale: keyof State['localeNames'];\n}\n\nconst initialState: State = {\n localeNames: { en: 'English' },\n locale: 'en',\n};\n\ninterface ChangeLocaleAction {\n type: 'CHANGE_LOCALE';\n locale: keyof State['localeNames'];\n}\n\ntype Action = ChangeLocaleAction;\n\nconst reducer = (state = initialState, action: Action) => {\n switch (action.type) {\n case 'CHANGE_LOCALE': {\n const { locale } = action;\n\n if (!state.localeNames[locale]) {\n return state;\n }\n\n return { ...state, locale };\n }\n default: {\n return state;\n }\n }\n};\n\nexport { LanguageProvider, useLocales, LANGUAGE_LOCAL_STORAGE_KEY };\nexport type { LanguageProviderProps, LocalesContextValue };\n","import styled from 'styled-components';\n\nimport { useConfiguration } from '../contexts/configuration';\n\nconst Img = styled.img`\n height: ${72 / 16}rem;\n`;\n\nconst Logo = () => {\n const {\n logos: { auth },\n } = useConfiguration();\n\n return <Img src={auth?.custom ?? auth.default} aria-hidden alt=\"\" />;\n};\n\nexport { Logo };\n","import * as React from 'react';\n\nimport { Box, Flex, SingleSelect, SingleSelectOption } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { useLocales } from '../components/LanguageProvider';\n\nconst Wrapper = styled(Box)`\n margin: 0 auto;\n width: 552px;\n`;\n\nexport const Column = styled(Flex)`\n flex-direction: column;\n`;\n\nconst LocaleToggle = () => {\n const { changeLocale, localeNames } = useLocales();\n const { formatMessage, locale } = useIntl();\n\n return (\n <SingleSelect\n aria-label={formatMessage({\n id: 'global.localeToggle.label',\n defaultMessage: 'Select interface language',\n })}\n value={locale}\n onChange={(language) => {\n changeLocale(language as string);\n }}\n >\n {Object.entries(localeNames).map(([language, name]) => (\n <SingleSelectOption key={language} value={language}>\n {name}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n );\n};\n\ninterface LayoutContentProps {\n children: React.ReactNode;\n}\n\nexport const LayoutContent = ({ children }: LayoutContentProps) => (\n <Wrapper\n shadow=\"tableShadow\"\n hasRadius\n paddingTop={9}\n paddingBottom={9}\n paddingLeft={10}\n paddingRight={10}\n background=\"neutral0\"\n >\n {children}\n </Wrapper>\n);\n\ninterface UnauthenticatedLayoutProps {\n children: React.ReactNode;\n}\n\nexport const UnauthenticatedLayout = ({ children }: UnauthenticatedLayoutProps) => {\n return (\n <div>\n <Flex as=\"header\" justifyContent=\"flex-end\">\n <Box paddingTop={6} paddingRight={8}>\n <LocaleToggle />\n </Box>\n </Flex>\n <Box paddingTop={2} paddingBottom={11}>\n {children}\n </Box>\n </div>\n );\n};\n","import { FieldAction } from '@strapi/design-system';\nimport styled from 'styled-components';\n\nconst FieldActionWrapper = styled(FieldAction)`\n svg {\n height: 1rem;\n width: 1rem;\n path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n }\n`;\n\nexport { FieldActionWrapper };\n","import * as React from 'react';\n\nimport { Box, Button, Checkbox, Flex, Main, TextInput, Typography } from '@strapi/design-system';\nimport { Link } from '@strapi/design-system/v2';\nimport { Form, auth, translatedErrors, useFetchClient, useQuery } from '@strapi/helper-plugin';\nimport { Eye, EyeStriked } from '@strapi/icons';\nimport { Formik } from 'formik';\nimport camelCase from 'lodash/camelCase';\nimport { useIntl } from 'react-intl';\nimport { useMutation } from 'react-query';\nimport { NavLink, useHistory } from 'react-router-dom';\nimport styled from 'styled-components';\nimport * as yup from 'yup';\n\nimport { Login } from '../../../../../shared/contracts/authentication';\nimport { useLocales } from '../../../components/LanguageProvider';\nimport { Logo } from '../../../components/UnauthenticatedLogo';\nimport {\n UnauthenticatedLayout,\n Column,\n LayoutContent,\n} from '../../../layouts/UnauthenticatedLayout';\n\nimport { FieldActionWrapper } from './FieldActionWrapper';\n\nimport type { AxiosError } from 'axios';\n\ninterface LoginProps {\n children?: React.ReactNode;\n}\n\nconst LOGIN_SCHEMA = yup.object().shape({\n email: yup.string().email(translatedErrors.email).required(translatedErrors.required),\n password: yup.string().required(translatedErrors.required),\n rememberMe: yup.bool().nullable(),\n});\n\nconst Login = ({ children }: LoginProps) => {\n const [apiError, setApiError] = React.useState<string>();\n const [passwordShown, setPasswordShown] = React.useState(false);\n const { formatMessage } = useIntl();\n const { post } = useFetchClient();\n const { changeLocale } = useLocales();\n const query = useQuery();\n const { push } = useHistory();\n\n const mutation = useMutation(\n async (body: Login.Request['body'] & { rememberMe: boolean }) => {\n const {\n data: { data },\n } = await post<Login.Response>('/admin/login', body);\n\n return { ...data, rememberMe: body.rememberMe };\n },\n {\n onSuccess(data) {\n if (data) {\n const { token, user } = data;\n\n if (user.preferedLanguage) {\n changeLocale(user.preferedLanguage);\n }\n\n auth.setToken(token, data.rememberMe);\n auth.setUserInfo(user, data.rememberMe);\n\n const redirectTo = query.get('redirectTo');\n const redirectUrl = redirectTo ? decodeURIComponent(redirectTo) : '/';\n\n push(redirectUrl);\n }\n },\n onError(err: AxiosError<{ error: Login.Response['errors'] }>) {\n const message = err.response?.data?.error?.message ?? 'Something went wrong';\n\n if (camelCase(message).toLowerCase() === 'usernotactive') {\n push('/auth/oops');\n return;\n }\n\n setApiError(message);\n },\n }\n );\n\n return (\n <UnauthenticatedLayout>\n <Main>\n <LayoutContent>\n <Column>\n <Logo />\n <Box paddingTop={6} paddingBottom={1}>\n <Typography variant=\"alpha\" as=\"h1\">\n {formatMessage({\n id: 'Auth.form.welcome.title',\n defaultMessage: 'Welcome!',\n })}\n </Typography>\n </Box>\n <Box paddingBottom={7}>\n <Typography variant=\"epsilon\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Auth.form.welcome.subtitle',\n defaultMessage: 'Log in to your Strapi account',\n })}\n </Typography>\n </Box>\n {mutation.isError && apiError ? (\n <Typography id=\"global-form-error\" role=\"alert\" tabIndex={-1} textColor=\"danger600\">\n {apiError}\n </Typography>\n ) : null}\n </Column>\n <Formik\n enableReinitialize\n initialValues={{\n email: '',\n password: '',\n rememberMe: false,\n }}\n onSubmit={(values) => {\n mutation.mutate(values);\n }}\n validationSchema={LOGIN_SCHEMA}\n validateOnChange={false}\n >\n {({ values, errors, handleChange }) => (\n <Form>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <TextInput\n error={\n errors.email\n ? formatMessage({\n id: errors.email,\n defaultMessage: 'This value is required.',\n })\n : ''\n }\n value={values.email}\n onChange={handleChange}\n label={formatMessage({ id: 'Auth.form.email.label', defaultMessage: 'Email' })}\n placeholder={formatMessage({\n id: 'Auth.form.email.placeholder',\n defaultMessage: 'kai@doe.com',\n })}\n name=\"email\"\n required\n />\n <PasswordInput\n error={\n errors.password\n ? formatMessage({\n id: errors.password,\n defaultMessage: 'This value is required.',\n })\n : ''\n }\n onChange={handleChange}\n value={values.password}\n label={formatMessage({\n id: 'global.password',\n defaultMessage: 'Password',\n })}\n name=\"password\"\n type={passwordShown ? 'text' : 'password'}\n endAction={\n <FieldActionWrapper\n onClick={(e) => {\n e.stopPropagation();\n setPasswordShown((prev) => !prev);\n }}\n label={formatMessage(\n passwordShown\n ? {\n id: 'Auth.form.password.show-password',\n defaultMessage: 'Show password',\n }\n : {\n id: 'Auth.form.password.hide-password',\n defaultMessage: 'Hide password',\n }\n )}\n >\n {passwordShown ? <Eye /> : <EyeStriked />}\n </FieldActionWrapper>\n }\n required\n />\n <Checkbox\n onValueChange={(checked) => {\n handleChange({ target: { value: checked, name: 'rememberMe' } });\n }}\n value={values.rememberMe}\n aria-label=\"rememberMe\"\n name=\"rememberMe\"\n >\n {formatMessage({\n id: 'Auth.form.rememberMe.label',\n defaultMessage: 'Remember me',\n })}\n </Checkbox>\n <Button fullWidth type=\"submit\">\n {formatMessage({ id: 'Auth.form.button.login', defaultMessage: 'Login' })}\n </Button>\n </Flex>\n </Form>\n )}\n </Formik>\n {children}\n </LayoutContent>\n <Flex justifyContent=\"center\">\n <Box paddingTop={4}>\n {/* @ts-expect-error – error with inferring the props from the as component */}\n <Link as={NavLink} to=\"/auth/forgot-password\">\n {formatMessage({\n id: 'Auth.link.forgot-password',\n defaultMessage: 'Forgot your password?',\n })}\n </Link>\n </Box>\n </Flex>\n </Main>\n </UnauthenticatedLayout>\n );\n};\n\nconst PasswordInput = styled(TextInput)`\n ::-ms-reveal {\n display: none;\n }\n`;\n\nexport { Login };\nexport type { LoginProps };\n","import { Box, Button, Flex, Main, TextInput, Typography } from '@strapi/design-system';\nimport { Link } from '@strapi/design-system/v2';\nimport { Form, translatedErrors, useFetchClient } from '@strapi/helper-plugin';\nimport { Formik } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useMutation } from 'react-query';\nimport { NavLink, useHistory } from 'react-router-dom';\nimport * as yup from 'yup';\n\nimport { ForgotPassword } from '../../../../../shared/contracts/authentication';\nimport { Logo } from '../../../components/UnauthenticatedLogo';\nimport {\n Column,\n LayoutContent,\n UnauthenticatedLayout,\n} from '../../../layouts/UnauthenticatedLayout';\n\nconst ForgotPassword = () => {\n const { push } = useHistory();\n const { post } = useFetchClient();\n const { formatMessage } = useIntl();\n\n const { mutate, isError } = useMutation(\n async (body: ForgotPassword.Request['body']) => {\n await post('/admin/forgot-password', body);\n },\n {\n onSuccess() {\n push('/auth/forgot-password-success');\n },\n }\n );\n\n return (\n <UnauthenticatedLayout>\n <Main>\n <LayoutContent>\n <Column>\n <Logo />\n <Box paddingTop={6} paddingBottom={7}>\n <Typography as=\"h1\" variant=\"alpha\">\n {formatMessage({\n id: 'Auth.form.button.password-recovery',\n defaultMessage: 'Password Recovery',\n })}\n </Typography>\n </Box>\n {isError ? (\n <Typography id=\"global-form-error\" role=\"alert\" tabIndex={-1} textColor=\"danger600\">\n {formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n })}\n </Typography>\n ) : null}\n </Column>\n <Formik\n enableReinitialize\n initialValues={{\n email: '',\n }}\n onSubmit={(values) => {\n mutate(values);\n }}\n validationSchema={yup.object().shape({\n email: yup.string().email(translatedErrors.email).required(translatedErrors.required),\n })}\n validateOnChange={false}\n >\n {({ values, errors, handleChange }) => (\n <Form>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <TextInput\n error={\n errors.email\n ? formatMessage({\n id: errors.email,\n defaultMessage: 'This email is invalid.',\n })\n : ''\n }\n value={values.email}\n onChange={handleChange}\n label={formatMessage({ id: 'Auth.form.email.label', defaultMessage: 'Email' })}\n placeholder={formatMessage({\n id: 'Auth.form.email.placeholder',\n defaultMessage: 'kai@doe.com',\n })}\n name=\"email\"\n required\n />\n <Button type=\"submit\" fullWidth>\n {formatMessage({\n id: 'Auth.form.button.forgot-password',\n defaultMessage: 'Send Email',\n })}\n </Button>\n </Flex>\n </Form>\n )}\n </Formik>\n </LayoutContent>\n <Flex justifyContent=\"center\">\n <Box paddingTop={4}>\n {/* @ts-expect-error – error with inferring the props from the as component */}\n <Link as={NavLink} to=\"/auth/login\">\n {formatMessage({ id: 'Auth.link.ready', defaultMessage: 'Ready to sign in?' })}\n </Link>\n </Box>\n </Flex>\n </Main>\n </UnauthenticatedLayout>\n );\n};\n\nexport { ForgotPassword };\n","import { Box, Flex, Main, Typography } from '@strapi/design-system';\nimport { Link } from '@strapi/design-system/v2';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\n\nimport { Logo } from '../../../components/UnauthenticatedLogo';\nimport {\n Column,\n LayoutContent,\n UnauthenticatedLayout,\n} from '../../../layouts/UnauthenticatedLayout';\n\nconst ForgotPasswordSuccess = () => {\n const { formatMessage } = useIntl();\n\n return (\n <UnauthenticatedLayout>\n <Main>\n <LayoutContent>\n <Column>\n <Logo />\n <Box paddingTop={6} paddingBottom={7}>\n <Typography as=\"h1\" variant=\"alpha\">\n {formatMessage({\n id: 'app.containers.AuthPage.ForgotPasswordSuccess.title',\n defaultMessage: 'Email sent',\n })}\n </Typography>\n </Box>\n <Typography>\n {formatMessage({\n id: 'app.containers.AuthPage.ForgotPasswordSuccess.text.email',\n defaultMessage: 'It can take a few minutes to receive your password recovery link.',\n })}\n </Typography>\n <Box paddingTop={4}>\n <Typography>\n {formatMessage({\n id: 'app.containers.AuthPage.ForgotPasswordSuccess.text.contact-admin',\n defaultMessage:\n 'If you do not receive this link, please contact your administrator.',\n })}\n </Typography>\n </Box>\n </Column>\n </LayoutContent>\n <Flex justifyContent=\"center\">\n <Box paddingTop={4}>\n {/* @ts-expect-error – error with inferring the props from the as component */}\n <Link as={NavLink} to=\"/auth/login\">\n {formatMessage({ id: 'Auth.link.signin', defaultMessage: 'Sign in' })}\n </Link>\n </Box>\n </Flex>\n </Main>\n </UnauthenticatedLayout>\n );\n};\n\nexport { ForgotPasswordSuccess };\n","import { Box, Flex, Main, Typography } from '@strapi/design-system';\nimport { Link } from '@strapi/design-system/v2';\nimport { useQuery } from '@strapi/helper-plugin';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\n\nimport { Logo } from '../../../components/UnauthenticatedLogo';\nimport {\n Column,\n LayoutContent,\n UnauthenticatedLayout,\n} from '../../../layouts/UnauthenticatedLayout';\n\nconst Oops = () => {\n const { formatMessage } = useIntl();\n const query = useQuery();\n\n const message =\n query.get('info') ||\n formatMessage({\n id: 'Auth.components.Oops.text',\n defaultMessage: 'Your account has been suspended.',\n });\n\n return (\n <UnauthenticatedLayout>\n <Main>\n <LayoutContent>\n <Column>\n <Logo />\n <Box paddingTop={6} paddingBottom={7}>\n <Typography as=\"h1\" variant=\"alpha\">\n {formatMessage({ id: 'Auth.components.Oops.title', defaultMessage: 'Oops...' })}\n </Typography>\n </Box>\n <Typography>{message}</Typography>\n <Box paddingTop={4}>\n <Typography>\n {formatMessage({\n id: 'Auth.components.Oops.text.admin',\n defaultMessage: 'If this is a mistake, please contact your administrator.',\n })}\n </Typography>\n </Box>\n </Column>\n </LayoutContent>\n <Flex justifyContent=\"center\">\n <Box paddingTop={4}>\n {/* @ts-expect-error – error with inferring the props from the as component */}\n <Link as={NavLink} to=\"/auth/login\">\n {formatMessage({ id: 'Auth.link.signin', defaultMessage: 'Sign in' })}\n </Link>\n </Box>\n </Flex>\n </Main>\n </UnauthenticatedLayout>\n );\n};\n\nexport { Oops };\n","import * as React from 'react';\n\nimport {\n Box,\n Flex,\n IconButton,\n Button,\n Typography,\n Textarea,\n Portal,\n Field,\n FieldLabel,\n FieldInput,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { auth, useNotification, useAppInfo, usePersistentState } from '@strapi/helper-plugin';\nimport { Cross } from '@strapi/icons';\nimport { Formik, Form } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useMutation } from 'react-query';\nimport styled, { useTheme } from 'styled-components';\nimport * as yup from 'yup';\n\nconst FieldWrapper = styled(Field)`\n height: ${32 / 16}rem;\n width: ${32 / 16}rem;\n\n > label,\n ~ input {\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n }\n\n > label {\n color: inherit;\n cursor: pointer;\n padding: ${({ theme }) => theme.spaces[2]};\n text-align: center;\n vertical-align: middle;\n }\n\n &:hover,\n &:focus-within {\n background-color: ${({ theme }) => theme.colors.neutral0};\n }\n\n &:active,\n &.selected {\n color: ${({ theme }) => theme.colors.primary700};\n background-color: ${({ theme }) => theme.colors.neutral0};\n border-color: ${({ theme }) => theme.colors.primary700};\n }\n`;\n\nconst delays = {\n postResponse: 90 * 24 * 60 * 60 * 1000, // 90 days in ms\n postFirstDismissal: 7 * 24 * 60 * 60 * 1000, // 7 days in ms\n postSubsequentDismissal: 90 * 24 * 60 * 60 * 1000, // 90 days in ms\n display: 5 * 60 * 1000, // 5 minutes in ms\n};\n\nconst ratingArray = [...Array(11).keys()];\n\nconst checkIfShouldShowSurvey = (settings: NpsSurveySettings) => {\n const { enabled, lastResponseDate, firstDismissalDate, lastDismissalDate } = settings;\n\n // This function goes through all the cases where we'd want to not show the survey:\n // 1. If the survey is disabled by strapi, abort mission, don't bother checking the other settings.\n // 2. If the survey is disabled by user, abort mission, don't bother checking the other settings.\n // 3. If the user has already responded to the survey, check if enough time has passed since the last response.\n // 4. If the user has dismissed the survey twice or more before, check if enough time has passed since the last dismissal.\n // 5. If the user has only dismissed the survey once before, check if enough time has passed since the first dismissal.\n // If none of these cases check out, then we show the survey.\n // Note that submitting a response resets the dismissal counts.\n // Checks 4 and 5 should not be reversed, since the first dismissal will also exist if the user has dismissed the survey twice or more before.\n\n // For users who had created an account before the NPS feature was introduced,\n // we assume that they would have enabled the NPS feature if they had the chance.\n\n // Global strapi disable for NSP.\n if (window.strapi.flags.nps === false) {\n return false;\n }\n\n // User chose not to enable the NPS feature when signing up\n if (enabled === false) {\n return false;\n }\n\n // The user has already responded to the survey\n if (lastResponseDate) {\n const timeSinceLastResponse = Date.now() - new Date(lastResponseDate).getTime();\n\n if (timeSinceLastResponse >= delays.postResponse) {\n return true;\n }\n\n return false;\n }\n\n // The user has dismissed the survey twice or more before\n if (lastDismissalDate) {\n const timeSinceLastDismissal = Date.now() - new Date(lastDismissalDate).getTime();\n\n if (timeSinceLastDismissal >= delays.postSubsequentDismissal) {\n return true;\n }\n\n return false;\n }\n\n // The user has only dismissed the survey once before\n if (firstDismissalDate) {\n const timeSinceFirstDismissal = Date.now() - new Date(firstDismissalDate).getTime();\n\n if (timeSinceFirstDismissal >= delays.postFirstDismissal) {\n return true;\n }\n\n return false;\n }\n\n // The user has not interacted with the survey before\n return true;\n};\n\nconst NpsSurvey = () => {\n const theme = useTheme();\n const { formatMessage } = useIntl();\n const { npsSurveySettings, setNpsSurveySettings } = useNpsSurveySettings();\n const [isFeedbackResponse, setIsFeedbackResponse] = React.useState(false);\n const toggleNotification = useNotification();\n const { currentEnvironment, strapiVersion } = useAppInfo();\n\n interface NpsSurveyMutationBody {\n email: string;\n rating: number | null;\n comment: string;\n environment?: string;\n version?: string;\n license: 'Enterprise' | 'Community';\n }\n\n const { mutate, isLoading } = useMutation<unknown, unknown, NpsSurveyMutationBody>(\n async (form) => {\n const res = await fetch('https://analytics.strapi.io/submit-nps', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(form),\n });\n\n if (!res.ok) {\n throw new Error('Failed to submit NPS survey');\n }\n\n return res;\n },\n {\n onSuccess() {\n setNpsSurveySettings((settings) => ({\n ...settings,\n lastResponseDate: new Date().toString(),\n firstDismissalDate: null,\n lastDismissalDate: null,\n }));\n setIsFeedbackResponse(true);\n // Thank you message displayed in the banner should disappear after few seconds.\n setTimeout(() => {\n setSurveyIsShown(false);\n }, 3000);\n },\n onError() {\n toggleNotification({\n type: 'warning',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n },\n }\n );\n\n // Only check on first render if the survey should be shown\n const [surveyIsShown, setSurveyIsShown] = React.useState(\n checkIfShouldShowSurvey(npsSurveySettings)\n );\n\n // Set a cooldown to show the survey when session begins\n const [displaySurvey, setDisplaySurvey] = React.useState(false);\n\n React.useEffect(() => {\n const displayTime = setTimeout(() => {\n setDisplaySurvey(true);\n }, delays.display);\n\n return () => {\n clearTimeout(displayTime);\n };\n }, []);\n\n if (!displaySurvey) {\n return null;\n }\n\n if (!surveyIsShown) {\n return null;\n }\n\n const handleSubmitResponse = ({\n npsSurveyRating,\n npsSurveyFeedback,\n }: {\n npsSurveyRating: NpsSurveyMutationBody['rating'];\n npsSurveyFeedback: NpsSurveyMutationBody['comment'];\n }) => {\n const userInfo = auth.getUserInfo();\n mutate({\n email: typeof userInfo === 'object' && userInfo !== null ? userInfo.email : '',\n rating: npsSurveyRating,\n comment: npsSurveyFeedback,\n environment: currentEnvironment,\n version: strapiVersion ?? undefined,\n license: window.strapi.projectType,\n });\n };\n\n const handleDismiss = () => {\n setNpsSurveySettings((settings) => {\n const nextSettings = {\n ...settings,\n lastResponseDate: null,\n };\n\n if (settings.firstDismissalDate) {\n // If the user dismisses the survey for the second time\n nextSettings.lastDismissalDate = new Date().toString();\n } else {\n // If the user dismisses the survey for the first time\n nextSettings.firstDismissalDate = new Date().toString();\n }\n\n return nextSettings;\n });\n\n setSurveyIsShown(false);\n };\n\n return (\n <Portal>\n <Formik\n initialValues={{ npsSurveyFeedback: '', npsSurveyRating: null }}\n onSubmit={handleSubmitResponse}\n validationSchema={yup.object({\n npsSurveyFeedback: yup.string(),\n npsSurveyRating: yup.number().required(),\n })}\n >\n {({ values, handleChange, setFieldValue }) => (\n <Form name=\"npsSurveyForm\">\n <Flex\n hasRadius\n direction=\"column\"\n padding={4}\n borderColor=\"primary200\"\n background=\"neutral0\"\n shadow=\"popupShadow\"\n position=\"fixed\"\n bottom={0}\n left=\"50%\"\n transform=\"translateX(-50%)\"\n zIndex={theme.zIndices[2]}\n width=\"50%\"\n >\n {isFeedbackResponse ? (\n <Typography fontWeight=\"semiBold\">\n {formatMessage({\n id: 'app.components.NpsSurvey.feedback-response',\n defaultMessage: 'Thank you very much for your feedback!',\n })}\n </Typography>\n ) : (\n <Box as=\"fieldset\" width=\"100%\">\n <Flex justifyContent=\"space-between\" width=\"100%\">\n <Box marginLeft=\"auto\" marginRight=\"auto\">\n <Typography fontWeight=\"semiBold\" as=\"legend\">\n {formatMessage({\n id: 'app.components.NpsSurvey.banner-title',\n defaultMessage:\n 'How likely are you to recommend Strapi to a friend or colleague?',\n })}\n </Typography>\n </Box>\n <IconButton\n onClick={handleDismiss}\n aria-label={formatMessage({\n id: 'app.components.NpsSurvey.dismiss-survey-label',\n defaultMessage: 'Dismiss survey',\n })}\n icon={<Cross />}\n />\n </Flex>\n <Flex gap={2} marginTop={2} marginBottom={2} justifyContent=\"center\">\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'app.components.NpsSurvey.no-recommendation',\n defaultMessage: 'Not at all likely',\n })}\n </Typography>\n {ratingArray.map((number) => {\n return (\n <FieldWrapper\n key={number}\n className={values.npsSurveyRating === number ? 'selected' : undefined} // \"selected\" class added when child radio button is checked\n hasRadius\n background=\"primary100\"\n borderColor=\"primary200\"\n color=\"primary600\"\n position=\"relative\"\n cursor=\"pointer\"\n >\n <FieldLabel htmlFor={`nps-survey-rating-${number}-input`}>\n <VisuallyHidden>\n <FieldInput\n type=\"radio\"\n id={`nps-survey-rating-${number}-input`}\n name=\"npsSurveyRating\"\n checked={values.npsSurveyRating === number}\n onChange={(e) =>\n setFieldValue('npsSurveyRating', parseInt(e.target.value, 10))\n }\n value={number}\n />\n </VisuallyHidden>\n {number}\n </FieldLabel>\n </FieldWrapper>\n );\n })}\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'app.components.NpsSurvey.happy-to-recommend',\n defaultMessage: 'Extremely likely',\n })}\n </Typography>\n </Flex>\n {values.npsSurveyRating !== null && (\n <Flex direction=\"column\">\n <Box marginTop={2}>\n <FieldLabel htmlFor=\"npsSurveyFeedback\" fontWeight=\"semiBold\" fontSize={2}>\n {formatMessage({\n id: 'app.components.NpsSurvey.feedback-question',\n defaultMessage: 'Do you have any suggestion for improvements?',\n })}\n </FieldLabel>\n </Box>\n <Box width=\"62%\" marginTop={3} marginBottom={4}>\n <Textarea\n id=\"npsSurveyFeedback\" // formik element attribute \"id\" should be same as the values key to work\n width=\"100%\"\n onChange={handleChange}\n >\n {values.npsSurveyFeedback}\n </Textarea>\n </Box>\n <Button marginBottom={2} type=\"submit\" loading={isLoading}>\n {formatMessage({\n id: 'app.components.NpsSurvey.submit-feedback',\n defaultMessage: 'Submit Feedback',\n })}\n </Button>\n </Flex>\n )}\n </Box>\n )}\n </Flex>\n </Form>\n )}\n </Formik>\n </Portal>\n );\n};\n\ninterface NpsSurveySettings {\n enabled: boolean;\n lastResponseDate: string | null;\n firstDismissalDate: string | null;\n lastDismissalDate: string | null;\n}\n\n/**\n * We exported to make it available during admin user registration.\n * Because we only enable the NPS for users who subscribe to the newsletter when signing up\n */\nfunction useNpsSurveySettings() {\n const [npsSurveySettings, setNpsSurveySettings] = usePersistentState<NpsSurveySettings>(\n 'STRAPI_NPS_SURVEY_SETTINGS',\n {\n enabled: true,\n lastResponseDate: null,\n firstDismissalDate: null,\n lastDismissalDate: null,\n }\n );\n\n /**\n * TODO: should this just be an array so we can alias the `usePersistentState` hook?\n */\n return { npsSurveySettings, setNpsSurveySettings };\n}\n\nexport { NpsSurvey, useNpsSurveySettings };\n","import * as React from 'react';\n\nimport {\n Box,\n Button,\n Checkbox,\n Flex,\n Grid,\n GridItem,\n Main,\n TextInput,\n Typography,\n} from '@strapi/design-system';\nimport { Link } from '@strapi/design-system/v2';\nimport {\n Form,\n auth,\n getYupInnerErrors,\n translatedErrors,\n useAPIErrorHandler,\n useFetchClient,\n useGuidedTour,\n useNotification,\n useQuery,\n useTracking,\n} from '@strapi/helper-plugin';\nimport { Eye, EyeStriked } from '@strapi/icons';\nimport { Formik } from 'formik';\nimport omit from 'lodash/omit';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { useQuery as useReactQuery, useMutation } from 'react-query';\nimport { NavLink, Redirect, useHistory, useRouteMatch } from 'react-router-dom';\nimport styled from 'styled-components';\nimport * as yup from 'yup';\nimport { ValidationError } from 'yup';\n\nimport {\n Register,\n RegisterAdmin,\n RegistrationInfo,\n} from '../../../../../shared/contracts/authentication';\nimport { useNpsSurveySettings } from '../../../components/NpsSurvey';\nimport { Logo } from '../../../components/UnauthenticatedLogo';\nimport { LayoutContent, UnauthenticatedLayout } from '../../../layouts/UnauthenticatedLayout';\nimport { AuthType } from '../constants';\n\nimport { FieldActionWrapper } from './FieldActionWrapper';\n\nimport type { AxiosError } from 'axios';\n\nconst REGISTER_USER_SCHEMA = yup.object().shape({\n firstname: yup.string().trim().required(translatedErrors.required),\n lastname: yup.string().nullable(),\n password: yup\n .string()\n .min(8, translatedErrors.minLength)\n .matches(/[a-z]/, 'components.Input.error.contain.lowercase')\n .matches(/[A-Z]/, 'components.Input.error.contain.uppercase')\n .matches(/\\d/, 'components.Input.error.contain.number')\n .required(translatedErrors.required),\n confirmPassword: yup\n .string()\n .oneOf([yup.ref('password'), null], 'components.Input.error.password.noMatch')\n .required(translatedErrors.required),\n registrationToken: yup.string().required(translatedErrors.required),\n});\n\nconst REGISTER_ADMIN_SCHEMA = yup.object().shape({\n firstname: yup.string().trim().required(translatedErrors.required),\n lastname: yup.string().nullable(),\n password: yup\n .string()\n .min(8, translatedErrors.minLength)\n .matches(/[a-z]/, 'components.Input.error.contain.lowercase')\n .matches(/[A-Z]/, 'components.Input.error.contain.uppercase')\n .matches(/\\d/, 'components.Input.error.contain.number')\n .required(translatedErrors.required),\n email: yup\n .string()\n .email(translatedErrors.email)\n .strict()\n .lowercase(translatedErrors.lowercase)\n .required(translatedErrors.required),\n confirmPassword: yup\n .string()\n .oneOf([yup.ref('password'), null], 'components.Input.error.password.noMatch')\n .required(translatedErrors.required),\n});\n\ninterface RegisterProps {\n hasAdmin?: boolean;\n}\n\nconst Register = ({ hasAdmin }: RegisterProps) => {\n const toggleNotification = useNotification();\n const { push } = useHistory();\n const [passwordShown, setPasswordShown] = React.useState(false);\n const [confirmPasswordShown, setConfirmPasswordShown] = React.useState(false);\n const [submitCount, setSubmitCount] = React.useState(0);\n const [apiError, setApiError] = React.useState<string>();\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const { setSkipped } = useGuidedTour();\n const query = useQuery();\n const match = useRouteMatch<{ authType: Extract<AuthType, `register${string}`> }>(\n '/auth/:authType'\n );\n const { formatAPIError } = useAPIErrorHandler();\n const { get, post } = useFetchClient();\n const { setNpsSurveySettings } = useNpsSurveySettings();\n\n const registrationToken = query.get('registrationToken');\n\n const { data: userInfo } = useReactQuery({\n queryKey: ['admin', 'registration-info', registrationToken],\n async queryFn() {\n const {\n data: { data },\n } = await get<RegistrationInfo.Response>(`/admin/registration-info`, {\n params: {\n registrationToken,\n },\n });\n\n return data;\n },\n enabled: !!registrationToken,\n initialData: {},\n onError(err: AxiosError<{ error: Exclude<RegistrationInfo.Response['errors'], undefined> }>) {\n const message = formatAPIError(err);\n\n toggleNotification({\n type: 'warning',\n message,\n });\n\n push(`/auth/oops?info=${encodeURIComponent(message)}`);\n },\n });\n\n const registerAdminMutation = useMutation(\n async (body: RegisterAdmin.Request['body'] & { news: boolean }) => {\n const { news, ...restBody } = body;\n const { data } = await post<RegisterAdmin.Response>('/admin/register-admin', restBody);\n\n return { ...data.data, news };\n },\n {\n onSuccess(data) {\n const { token, user, news } = data;\n\n auth.setToken(token, false);\n auth.setUserInfo(user, false);\n\n const { roles } = user;\n\n if (roles) {\n const isUserSuperAdmin = roles.find(({ code }) => code === 'strapi-super-admin');\n\n if (isUserSuperAdmin) {\n auth.set(false, 'GUIDED_TOUR_SKIPPED', true);\n setSkipped(false);\n trackUsage('didLaunchGuidedtour');\n }\n }\n\n if (news) {\n // Only enable EE survey if user accepted the newsletter\n setNpsSurveySettings((s) => ({ ...s, enabled: true }));\n\n push({\n pathname: '/usecase',\n search: `?hasAdmin=${true}`,\n });\n } else {\n push('/');\n }\n },\n onError(err: AxiosError<{ error: Exclude<RegisterAdmin.Response['errors'], undefined> }>) {\n trackUsage('didNotCreateFirstAdmin');\n\n const error = formatAPIError(err);\n setApiError(error);\n },\n }\n );\n\n const registerUserMutation = useMutation(\n async (body: Register.Request['body'] & { news: boolean }) => {\n const { news, ...restBody } = body;\n const { data } = await post<Register.Response>('/admin/register', restBody);\n\n return { ...data.data, news };\n },\n {\n onSuccess(data) {\n const { token, user, news } = data;\n\n auth.setToken(token, false);\n auth.setUserInfo(user, false);\n\n if (news) {\n // Only enable EE survey if user accepted the newsletter\n setNpsSurveySettings((s) => ({ ...s, enabled: true }));\n\n push({\n pathname: '/usecase',\n search: `?hasAdmin=${hasAdmin}`,\n });\n } else {\n push('/');\n }\n },\n onError(err: AxiosError<{ error: Exclude<RegisterAdmin.Response['errors'], undefined> }>) {\n trackUsage('didNotCreateFirstAdmin');\n\n const error = formatAPIError(err);\n setApiError(error);\n },\n }\n );\n\n if (\n !match ||\n (match.params.authType !== 'register' && match.params.authType !== 'register-admin')\n ) {\n return <Redirect to=\"/\" />;\n }\n\n const isAdminRegistration = match.params.authType === 'register-admin';\n\n const schema = isAdminRegistration ? REGISTER_ADMIN_SCHEMA : REGISTER_USER_SCHEMA;\n\n return (\n <UnauthenticatedLayout>\n <LayoutContent>\n <Flex direction=\"column\" alignItems=\"center\" gap={3}>\n <Logo />\n\n <Typography as=\"h1\" variant=\"alpha\" textAlign=\"center\">\n {formatMessage({\n id: 'Auth.form.welcome.title',\n defaultMessage: 'Welcome to Strapi!',\n })}\n </Typography>\n <Typography variant=\"epsilon\" textColor=\"neutral600\" textAlign=\"center\">\n {formatMessage({\n id: 'Auth.form.register.subtitle',\n defaultMessage:\n 'Credentials are only used to authenticate in Strapi. All saved data will be stored in your database.',\n })}\n </Typography>\n {apiError ? (\n <Typography id=\"global-form-error\" role=\"alert\" tabIndex={-1} textColor=\"danger600\">\n {apiError}\n </Typography>\n ) : null}\n </Flex>\n <Formik\n enableReinitialize\n initialValues={{\n firstname: userInfo?.firstname || '',\n lastname: userInfo?.lastname || '',\n email: userInfo?.email || '',\n password: '',\n confirmPassword: '',\n registrationToken: registrationToken || undefined,\n news: false,\n }}\n onSubmit={async (data, formik) => {\n const normalizedData = normalizeData(data);\n\n try {\n await schema.validate(normalizedData, { abortEarly: false });\n\n if (submitCount > 0 && isAdminRegistration) {\n trackUsage('didSubmitWithErrorsFirstAdmin', { count: submitCount.toString() });\n }\n\n if (normalizedData.registrationToken) {\n registerUserMutation.mutate({\n userInfo: omit(normalizedData, [\n 'registrationToken',\n 'confirmPassword',\n 'email',\n 'news',\n ]),\n registrationToken: normalizedData.registrationToken,\n news: normalizedData.news,\n });\n } else {\n registerAdminMutation.mutate(\n omit(normalizedData, ['registrationToken', 'confirmPassword'])\n );\n }\n } catch (err) {\n if (err instanceof ValidationError) {\n const errors = getYupInnerErrors(err);\n\n formik.setErrors(errors);\n }\n setSubmitCount(submitCount + 1);\n }\n }}\n validateOnChange={false}\n >\n {({ values, errors, handleChange }) => {\n return (\n <Form>\n <Main>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6} marginTop={7}>\n <Grid gap={4}>\n <GridItem col={6}>\n <TextInput\n name=\"firstname\"\n required\n value={values.firstname}\n error={\n errors.firstname\n ? formatMessage(errors.firstname as MessageDescriptor)\n : undefined\n }\n onChange={handleChange}\n label={formatMessage({\n id: 'Auth.form.firstname.label',\n defaultMessage: 'Firstname',\n })}\n />\n </GridItem>\n <GridItem col={6}>\n <TextInput\n name=\"lastname\"\n value={values.lastname}\n onChange={handleChange}\n label={formatMessage({\n id: 'Auth.form.lastname.label',\n defaultMessage: 'Lastname',\n })}\n />\n </GridItem>\n </Grid>\n <TextInput\n name=\"email\"\n disabled={!isAdminRegistration}\n value={values.email}\n onChange={handleChange}\n error={\n errors.email ? formatMessage(errors.email as MessageDescriptor) : undefined\n }\n required\n label={formatMessage({\n id: 'Auth.form.email.label',\n defaultMessage: 'Email',\n })}\n type=\"email\"\n />\n <PasswordInput\n name=\"password\"\n onChange={handleChange}\n value={values.password}\n error={\n errors.password\n ? formatMessage(errors.password as MessageDescriptor)\n : undefined\n }\n endAction={\n <FieldActionWrapper\n onClick={(e) => {\n e.preventDefault();\n setPasswordShown((prev) => !prev);\n }}\n label={formatMessage(\n passwordShown\n ? {\n id: 'Auth.form.password.show-password',\n defaultMessage: 'Show password',\n }\n : {\n id: 'Auth.form.password.hide-password',\n defaultMessage: 'Hide password',\n }\n )}\n >\n {passwordShown ? <Eye /> : <EyeStriked />}\n </FieldActionWrapper>\n }\n hint={formatMessage({\n id: 'Auth.form.password.hint',\n defaultMessage:\n 'Must be at least 8 characters, 1 uppercase, 1 lowercase & 1 number',\n })}\n required\n label={formatMessage({\n id: 'global.password',\n defaultMessage: 'Password',\n })}\n type={passwordShown ? 'text' : 'password'}\n />\n <PasswordInput\n name=\"confirmPassword\"\n onChange={handleChange}\n value={values.confirmPassword}\n error={\n errors.confirmPassword\n ? formatMessage(errors.confirmPassword as MessageDescriptor)\n : undefined\n }\n endAction={\n <FieldActionWrapper\n onClick={(e) => {\n e.preventDefault();\n setConfirmPasswordShown((prev) => !prev);\n }}\n label={formatMessage(\n confirmPasswordShown\n ? {\n id: 'Auth.form.password.show-password',\n defaultMessage: 'Show password',\n }\n : {\n id: 'Auth.form.password.hide-password',\n defaultMessage: 'Hide password',\n }\n )}\n >\n {confirmPasswordShown ? <Eye /> : <EyeStriked />}\n </FieldActionWrapper>\n }\n required\n label={formatMessage({\n id: 'Auth.form.confirmPassword.label',\n defaultMessage: 'Confirm Password',\n })}\n type={confirmPasswordShown ? 'text' : 'password'}\n />\n <Checkbox\n onValueChange={(checked) => {\n handleChange({ target: { value: checked, name: 'news' } });\n }}\n value={values.news}\n name=\"news\"\n aria-label=\"news\"\n >\n {formatMessage(\n {\n id: 'Auth.form.register.news.label',\n defaultMessage:\n 'Keep me updated about new features & upcoming improvements (by doing this you accept the {terms} and the {policy}).',\n },\n {\n terms: (\n <A target=\"_blank\" href=\"https://strapi.io/terms\" rel=\"noreferrer\">\n {formatMessage({\n id: 'Auth.privacy-policy-agreement.terms',\n defaultMessage: 'terms',\n })}\n </A>\n ),\n policy: (\n <A target=\"_blank\" href=\"https://strapi.io/privacy\" rel=\"noreferrer\">\n {formatMessage({\n id: 'Auth.privacy-policy-agreement.policy',\n defaultMessage: 'policy',\n })}\n </A>\n ),\n }\n )}\n </Checkbox>\n <Button fullWidth size=\"L\" type=\"submit\">\n {formatMessage({\n id: 'Auth.form.button.register',\n defaultMessage: \"Let's start\",\n })}\n </Button>\n </Flex>\n </Main>\n </Form>\n );\n }}\n </Formik>\n {match?.params.authType === 'register' && (\n <Box paddingTop={4}>\n <Flex justifyContent=\"center\">\n {/* @ts-expect-error – error with inferring the props from the as component */}\n <Link as={NavLink} to=\"/auth/login\">\n {formatMessage({\n id: 'Auth.link.signin.account',\n defaultMessage: 'Already have an account?',\n })}\n </Link>\n </Flex>\n </Box>\n )}\n </LayoutContent>\n </UnauthenticatedLayout>\n );\n};\n\ninterface RegisterFormValues {\n firstname: string;\n lastname: string;\n email: string;\n password: string;\n confirmPassword: string;\n registrationToken: string | undefined;\n news: boolean;\n}\n\ntype StringKeys<T> = {\n [K in keyof T]: T[K] extends string | undefined ? K : never;\n}[keyof T];\n\n/**\n * @description Trims all values but the password & sets lastName to null if it's a falsey value.\n */\nfunction normalizeData(data: RegisterFormValues) {\n return Object.entries(data).reduce(\n (acc, [key, value]) => {\n type PasswordKeys = Extract<keyof RegisterFormValues, 'password' | 'confirmPassword'>;\n type RegisterFormStringValues = Exclude<\n keyof Pick<RegisterFormValues, StringKeys<RegisterFormValues>>,\n PasswordKeys\n >;\n\n if (!['password', 'confirmPassword'].includes(key) && typeof value === 'string') {\n acc[key as RegisterFormStringValues] = value.trim();\n\n if (key === 'lastname') {\n acc[key] = value || undefined;\n }\n } else {\n acc[key as PasswordKeys] = value;\n }\n\n return acc;\n },\n {} as {\n firstname: string;\n lastname: string | undefined;\n email: string;\n password: string;\n confirmPassword: string;\n registrationToken: string | undefined;\n news: boolean;\n }\n );\n}\n\nconst A = styled.a`\n color: ${({ theme }) => theme.colors.primary600};\n`;\n\nconst PasswordInput = styled(TextInput)`\n ::-ms-reveal {\n display: none;\n }\n`;\n\nexport { Register };\nexport type { RegisterProps };\n","import * as React from 'react';\n\nimport { Box, Button, Flex, Main, TextInput, Typography } from '@strapi/design-system';\nimport { Link } from '@strapi/design-system/v2';\nimport { Form, auth, translatedErrors, useFetchClient, useQuery } from '@strapi/helper-plugin';\nimport { Eye, EyeStriked } from '@strapi/icons';\nimport { Formik } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useMutation } from 'react-query';\nimport { NavLink, useHistory } from 'react-router-dom';\nimport styled from 'styled-components';\nimport * as yup from 'yup';\n\nimport { ResetPassword } from '../../../../../shared/contracts/authentication';\nimport { Logo } from '../../../components/UnauthenticatedLogo';\nimport {\n Column,\n LayoutContent,\n UnauthenticatedLayout,\n} from '../../../layouts/UnauthenticatedLayout';\n\nimport { FieldActionWrapper } from './FieldActionWrapper';\n\nconst RESET_PASSWORD_SCHEMA = yup.object().shape({\n password: yup\n .string()\n .min(8, translatedErrors.minLength)\n .matches(/[a-z]/, 'components.Input.error.contain.lowercase')\n .matches(/[A-Z]/, 'components.Input.error.contain.uppercase')\n .matches(/\\d/, 'components.Input.error.contain.number')\n .required(translatedErrors.required),\n confirmPassword: yup\n .string()\n .oneOf([yup.ref('password'), null], 'components.Input.error.password.noMatch')\n .required(translatedErrors.required),\n});\n\nconst ResetPassword = () => {\n const [passwordShown, setPasswordShown] = React.useState(false);\n const [confirmPasswordShown, setConfirmPasswordShown] = React.useState(false);\n const { formatMessage } = useIntl();\n const { post } = useFetchClient();\n const { push } = useHistory();\n const query = useQuery();\n\n const { mutate, isError } = useMutation(\n async (body: Pick<ResetPassword.Request['body'], 'password'>) => {\n const {\n data: { data },\n } = await post<ResetPassword.Response>('/admin/reset-password', {\n ...body,\n resetPasswordToken: query.get('code'),\n });\n\n return data;\n },\n {\n onSuccess(data) {\n if (data) {\n const { token, user } = data;\n auth.setToken(token, false);\n auth.setUserInfo(user, false);\n\n // Redirect to the homePage\n push('/');\n }\n },\n }\n );\n\n return (\n <UnauthenticatedLayout>\n <Main>\n <LayoutContent>\n <Column>\n <Logo />\n <Box paddingTop={6} paddingBottom={7}>\n <Typography as=\"h1\" variant=\"alpha\">\n {formatMessage({\n id: 'global.reset-password',\n defaultMessage: 'Reset password',\n })}\n </Typography>\n </Box>\n {isError ? (\n <Typography id=\"global-form-error\" role=\"alert\" tabIndex={-1} textColor=\"danger600\">\n {formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n })}\n </Typography>\n ) : null}\n </Column>\n <Formik\n enableReinitialize\n initialValues={{\n password: '',\n confirmPassword: '',\n }}\n onSubmit={(values) => {\n mutate({ password: values.password });\n }}\n validationSchema={RESET_PASSWORD_SCHEMA}\n validateOnChange={false}\n >\n {({ values, errors, handleChange }) => (\n <Form>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <PasswordInput\n name=\"password\"\n onChange={handleChange}\n value={values.password}\n error={\n errors.password\n ? formatMessage(\n {\n id: errors.password,\n defaultMessage: 'This field is required.',\n },\n {\n min: 8,\n }\n )\n : undefined\n }\n endAction={\n <FieldActionWrapper\n onClick={(e) => {\n e.preventDefault();\n setPasswordShown((prev) => !prev);\n }}\n label={formatMessage(\n passwordShown\n ? {\n id: 'Auth.form.password.show-password',\n defaultMessage: 'Show password',\n }\n : {\n id: 'Auth.form.password.hide-password',\n defaultMessage: 'Hide password',\n }\n )}\n >\n {passwordShown ? <Eye /> : <EyeStriked />}\n </FieldActionWrapper>\n }\n hint={formatMessage({\n id: 'Auth.form.password.hint',\n defaultMessage:\n 'Password must contain at least 8 characters, 1 uppercase, 1 lowercase and 1 number',\n })}\n required\n label={formatMessage({\n id: 'global.password',\n defaultMessage: 'Password',\n })}\n type={passwordShown ? 'text' : 'password'}\n />\n <PasswordInput\n name=\"confirmPassword\"\n onChange={handleChange}\n value={values.confirmPassword}\n error={\n errors.confirmPassword\n ? formatMessage({\n id: errors.confirmPassword,\n defaultMessage: 'This value is required.',\n })\n : undefined\n }\n endAction={\n <FieldActionWrapper\n onClick={(e) => {\n e.preventDefault();\n setConfirmPasswordShown((prev) => !prev);\n }}\n label={formatMessage(\n passwordShown\n ? {\n id: 'Auth.form.password.show-password',\n defaultMessage: 'Show password',\n }\n : {\n id: 'Auth.form.password.hide-password',\n defaultMessage: 'Hide password',\n }\n )}\n >\n {confirmPasswordShown ? <Eye /> : <EyeStriked />}\n </FieldActionWrapper>\n }\n required\n label={formatMessage({\n id: 'Auth.form.confirmPassword.label',\n defaultMessage: 'Confirm Password',\n })}\n type={confirmPasswordShown ? 'text' : 'password'}\n />\n <Button fullWidth type=\"submit\">\n {formatMessage({\n id: 'global.change-password',\n defaultMessage: 'Change password',\n })}\n </Button>\n </Flex>\n </Form>\n )}\n </Formik>\n </LayoutContent>\n <Flex justifyContent=\"center\">\n <Box paddingTop={4}>\n {/* @ts-expect-error – error with inferring the props from the as component */}\n <Link as={NavLink} to=\"/auth/login\">\n {formatMessage({ id: 'Auth.link.ready', defaultMessage: 'Ready to sign in?' })}\n </Link>\n </Box>\n </Flex>\n </Main>\n </UnauthenticatedLayout>\n );\n};\n\nconst PasswordInput = styled(TextInput)`\n ::-ms-reveal {\n display: none;\n }\n`;\n\nexport { ResetPassword };\n","import type { ComponentType } from 'react';\n\nimport { ForgotPassword } from './components/ForgotPassword';\nimport { ForgotPasswordSuccess } from './components/ForgotPasswordSuccess';\nimport { Oops } from './components/Oops';\nimport { Register, RegisterProps } from './components/Register';\nimport { ResetPassword } from './components/ResetPassword';\n\nexport type AuthType =\n | 'login'\n | 'register'\n | 'register-admin'\n | 'forgot-password'\n | 'reset-password'\n | 'forgot-password-success'\n | 'oops'\n | 'providers';\n\nexport type FormDictionary = Record<AuthType, ComponentType | ComponentType<RegisterProps>>;\n\nexport const FORMS = {\n 'forgot-password': ForgotPassword,\n 'forgot-password-success': ForgotPasswordSuccess,\n // the `Component` attribute is set after all forms and CE/EE components are loaded, but since we\n // are here outside of a React component we can not use the hook directly\n login: () => null,\n oops: Oops,\n register: Register,\n 'register-admin': Register,\n 'reset-password': ResetPassword,\n providers: () => null,\n} satisfies FormDictionary;\n","import { auth } from '@strapi/helper-plugin';\nimport { Redirect, useHistory, useRouteMatch } from 'react-router-dom';\n\nimport { useEnterprise } from '../../hooks/useEnterprise';\n\nimport { Login as LoginCE } from './components/Login';\nimport { AuthType, FORMS, FormDictionary } from './constants';\n\n/* -------------------------------------------------------------------------------------------------\n * AuthPage\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AuthPageProps {\n hasAdmin: boolean;\n}\n\nconst AuthPage = ({ hasAdmin }: AuthPageProps) => {\n const {\n location: { search },\n } = useHistory();\n const match = useRouteMatch<{ authType: AuthType }>('/auth/:authType');\n const authType = match?.params.authType;\n const Login = useEnterprise(\n LoginCE,\n async () => (await import('../../../../ee/admin/src/pages/AuthPage/components/Login')).LoginEE\n );\n const forms = useEnterprise<FormDictionary, Partial<FormDictionary>>(\n FORMS,\n async () => (await import('../../../../ee/admin/src/pages/AuthPage/constants')).FORMS,\n {\n combine(ceForms, eeForms) {\n return {\n ...ceForms,\n ...eeForms,\n };\n },\n defaultValue: FORMS,\n }\n );\n\n if (!authType || !forms) {\n return <Redirect to=\"/\" />;\n }\n\n const Component = forms[authType];\n\n // Redirect the user to the login page if\n // the endpoint does not exist or\n // there is already an admin user oo\n // the user is already logged in\n if (!Component || (hasAdmin && authType === 'register-admin') || auth.getToken()) {\n return <Redirect to=\"/\" />;\n }\n\n // Redirect the user to the register-admin if it is the first user\n if (!hasAdmin && authType !== 'register-admin') {\n return (\n <Redirect\n to={{\n pathname: '/auth/register-admin',\n // Forward the `?redirectTo` from /auth/login\n // /abc => /auth/login?redirectTo=%2Fabc => /auth/register-admin?redirectTo=%2Fabc\n search,\n }}\n />\n );\n }\n\n if (Login && authType === 'login') {\n // Assign the component to render for the login form\n return <Login />;\n } else if (authType === 'login' && !Login) {\n // block rendering until the Login EE component is fully loaded\n return null;\n }\n\n return <Component hasAdmin={hasAdmin} />;\n};\n\nexport { AuthPage };\nexport type { AuthPageProps };\n","/**\n * NotFoundPage\n *\n * This is the page we show when the user visits a url that doesn't have a route\n *\n */\nimport {\n ContentLayout,\n EmptyStateLayout,\n HeaderLayout,\n LinkButton,\n Main,\n} from '@strapi/design-system';\nimport { useFocusWhenNavigate } from '@strapi/helper-plugin';\nimport { ArrowRight, EmptyPictures } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nexport const NotFoundPage = () => {\n const { formatMessage } = useIntl();\n useFocusWhenNavigate();\n\n return (\n <Main labelledBy=\"title\">\n <HeaderLayout\n id=\"title\"\n title={formatMessage({\n id: 'content-manager.pageNotFound',\n defaultMessage: 'Page not found',\n })}\n />\n <ContentLayout>\n <EmptyStateLayout\n action={\n <LinkButton variant=\"secondary\" endIcon={<ArrowRight />} to=\"/\">\n {formatMessage({\n id: 'app.components.NotFoundPage.back',\n defaultMessage: 'Back to homepage',\n })}\n </LinkButton>\n }\n content={formatMessage({\n id: 'app.page.not.found',\n defaultMessage: \"Oops! We can't seem to find the page you're looging for...\",\n })}\n hasRadius\n icon={<EmptyPictures width=\"10rem\" />}\n shadow=\"tableShadow\"\n />\n </ContentLayout>\n </Main>\n );\n};\n","import * as React from 'react';\n\nimport {\n Box,\n Button,\n Flex,\n Main,\n Option,\n Select,\n TextButton,\n TextInput,\n Typography,\n} from '@strapi/design-system';\nimport { auth, pxToRem, useFetchClient, useNotification } from '@strapi/helper-plugin';\nimport { parse } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useHistory } from 'react-router-dom';\nimport styled from 'styled-components';\n\nimport { Logo } from '../components/UnauthenticatedLogo';\nimport { LayoutContent, UnauthenticatedLayout } from '../layouts/UnauthenticatedLayout';\n\nexport const options = [\n {\n intlLabel: {\n id: 'Usecase.front-end',\n defaultMessage: 'Front-end developer',\n },\n value: 'front_end_developer',\n },\n {\n intlLabel: {\n id: 'Usecase.back-end',\n defaultMessage: 'Back-end developer',\n },\n value: 'back_end_developer',\n },\n {\n intlLabel: {\n id: 'Usecase.full-stack',\n defaultMessage: 'Full-stack developer',\n },\n value: 'full_stack_developer',\n },\n {\n intlLabel: {\n id: 'global.content-manager',\n defaultMessage: 'Content Manager',\n },\n value: 'content_manager',\n },\n {\n intlLabel: {\n id: 'Usecase.content-creator',\n defaultMessage: 'Content Creator',\n },\n value: 'content_creator',\n },\n {\n intlLabel: {\n id: 'Usecase.other',\n defaultMessage: 'Other',\n },\n value: 'other',\n },\n];\n\nconst TypographyCenter = styled(Typography)`\n text-align: center;\n`;\n\nexport const UseCasePage = () => {\n const toggleNotification = useNotification();\n const { push, location } = useHistory();\n const { formatMessage } = useIntl();\n const [role, setRole] = React.useState<string | number | null>(null);\n const [otherRole, setOtherRole] = React.useState('');\n const { post } = useFetchClient();\n\n const { firstname, email } = auth.get('userInfo') ?? {};\n const { hasAdmin } = parse(location?.search, { ignoreQueryPrefix: true });\n const isOther = role === 'other';\n\n const handleSubmit = async (event: React.FormEvent, skipPersona: boolean) => {\n event.preventDefault();\n try {\n await post('https://analytics.strapi.io/register', {\n email,\n username: firstname,\n firstAdmin: Boolean(!hasAdmin),\n persona: {\n role: skipPersona ? undefined : role,\n otherRole: skipPersona ? undefined : otherRole,\n },\n });\n\n toggleNotification({\n type: 'success',\n message: {\n id: 'Usecase.notification.success.project-created',\n defaultMessage: 'Project has been successfully created',\n },\n });\n push('/');\n } catch (err) {\n // Silent\n }\n };\n\n return (\n <UnauthenticatedLayout>\n <Main labelledBy=\"usecase-title\">\n <LayoutContent>\n <form onSubmit={(e) => handleSubmit(e, false)}>\n <Flex direction=\"column\" paddingBottom={7}>\n <Logo />\n <Box paddingTop={6} paddingBottom={1} width={pxToRem(250)}>\n <TypographyCenter variant=\"alpha\" as=\"h1\" id=\"usecase-title\">\n {formatMessage({\n id: 'Usecase.title',\n defaultMessage: 'Tell us a bit more about yourself',\n })}\n </TypographyCenter>\n </Box>\n </Flex>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Select\n id=\"usecase\"\n data-testid=\"usecase\"\n label={formatMessage({\n id: 'Usecase.input.work-type',\n defaultMessage: 'What type of work do you do?',\n })}\n // onClear={() => setRole(null)}\n // clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}\n onChange={(value) => setRole(value)}\n value={role}\n >\n {options.map(({ intlLabel, value }) => (\n <Option key={value} value={value}>\n {formatMessage(intlLabel)}\n </Option>\n ))}\n </Select>\n {isOther && (\n <TextInput\n name=\"other\"\n label={formatMessage({ id: 'Usecase.other', defaultMessage: 'Other' })}\n value={otherRole}\n onChange={(e) => setOtherRole(e.target.value)}\n data-testid=\"other\"\n />\n )}\n <Button type=\"submit\" size=\"L\" fullWidth disabled={!role}>\n {formatMessage({ id: 'global.finish', defaultMessage: 'Finish' })}\n </Button>\n </Flex>\n </form>\n </LayoutContent>\n <Flex justifyContent=\"center\">\n <Box paddingTop={4}>\n <TextButton onClick={(event) => handleSubmit(event, true)}>\n {formatMessage({\n id: 'Usecase.button.skip',\n defaultMessage: 'Skip this question',\n })}\n </TextButton>\n </Box>\n </Flex>\n </Main>\n </UnauthenticatedLayout>\n );\n};\n","/* eslint-disable check-file/filename-naming-convention */\n\nimport * as React from 'react';\n\nimport { LoadingIndicatorPage, MenuItem } from '@strapi/helper-plugin';\nimport { Route } from 'react-router-dom';\n\ninterface LazyCompoProps {\n loadComponent: Required<MenuItem>['Component'];\n}\n\nconst LazyCompo = ({ loadComponent }: LazyCompoProps) => {\n const [Compo, setCompo] = React.useState<React.ComponentType | null>(null);\n\n React.useEffect(() => {\n const loadCompo = async () => {\n try {\n const loadedCompo = await loadComponent();\n\n // TODO the loaded component provided can currently come from a default or named export\n // We will move the entire codebase to use named exports only\n // Until then we support both cases with priority given to the existing default exports\n if (typeof loadedCompo === 'function') {\n setCompo(() => loadedCompo);\n } else if (loadedCompo.default) {\n setCompo(() => loadedCompo.default!);\n }\n } catch (err) {}\n };\n\n loadCompo();\n }, [loadComponent]);\n\n if (Compo) {\n return <Compo />;\n }\n\n return <LoadingIndicatorPage />;\n};\n\nexport const createRoute = (\n loadComponent: LazyCompoProps['loadComponent'],\n to: MenuItem['to'],\n exact: MenuItem['exact'] = false\n) => {\n return (\n <Route\n render={() => <LazyCompo loadComponent={loadComponent} />}\n key={to}\n path={to}\n exact={exact || false}\n />\n );\n};\n","/**\n *\n * App.js\n *\n */\n\nimport * as React from 'react';\n\nimport { SkipToContent } from '@strapi/design-system';\nimport {\n auth,\n LoadingIndicatorPage,\n MenuItem,\n prefixFileUrlWithBackendUrl,\n TrackingProvider,\n useAppInfo,\n useFetchClient,\n useNotification,\n} from '@strapi/helper-plugin';\nimport merge from 'lodash/merge';\nimport { useIntl } from 'react-intl';\nimport { useDispatch } from 'react-redux';\nimport { Route, Switch } from 'react-router-dom';\n\nimport { PrivateRoute } from './components/PrivateRoute';\nimport { ADMIN_PERMISSIONS_CE, ACTION_SET_ADMIN_PERMISSIONS } from './constants';\nimport { useConfiguration } from './contexts/configuration';\nimport { useEnterprise } from './hooks/useEnterprise';\nimport { AuthPage } from './pages/Auth/AuthPage';\nimport { NotFoundPage } from './pages/NotFoundPage';\nimport { UseCasePage } from './pages/UseCasePage';\nimport { createRoute } from './utils/createRoute';\n\ntype StrapiRoute = Pick<MenuItem, 'exact' | 'to'> & Required<Pick<MenuItem, 'Component'>>;\n\nconst ROUTES_CE: StrapiRoute[] | null = null;\n\nconst AuthenticatedApp = React.lazy(() =>\n import('./components/AuthenticatedApp').then((mod) => ({ default: mod.AuthenticatedApp }))\n);\n\nexport const App = () => {\n const adminPermissions = useEnterprise(\n ADMIN_PERMISSIONS_CE,\n async () => (await import('../../ee/admin/src/constants')).ADMIN_PERMISSIONS_EE,\n {\n combine(cePermissions, eePermissions) {\n // the `settings` NS e.g. are deep nested objects, that need a deep merge\n return merge({}, cePermissions, eePermissions);\n },\n\n defaultValue: ADMIN_PERMISSIONS_CE,\n }\n );\n const routes = useEnterprise(\n ROUTES_CE,\n async () => (await import('../../ee/admin/src/constants')).ROUTES_EE,\n {\n defaultValue: [],\n }\n );\n const toggleNotification = useNotification();\n const { updateProjectSettings } = useConfiguration();\n const { formatMessage } = useIntl();\n const [{ isLoading, hasAdmin, uuid, deviceId }, setState] = React.useState({\n isLoading: true,\n deviceId: undefined,\n hasAdmin: false,\n uuid: false,\n });\n const dispatch = useDispatch();\n const appInfo = useAppInfo();\n const { get, post } = useFetchClient();\n\n const authRoutes = React.useMemo(() => {\n if (!routes) {\n return null;\n }\n\n return routes.map(({ to, Component, exact }) => createRoute(Component, to, exact));\n }, [routes]);\n\n const [telemetryProperties, setTelemetryProperties] = React.useState(undefined);\n\n React.useEffect(() => {\n dispatch({ type: ACTION_SET_ADMIN_PERMISSIONS, payload: adminPermissions });\n }, [adminPermissions, dispatch]);\n\n React.useEffect(() => {\n const currentToken = auth.getToken();\n\n const renewToken = async () => {\n try {\n const {\n data: {\n data: { token },\n },\n } = await post('/admin/renew-token', { token: currentToken });\n auth.updateToken(token);\n } catch (err) {\n // Refresh app\n auth.clearAppStorage();\n window.location.reload();\n }\n };\n\n if (currentToken) {\n renewToken();\n }\n }, [post]);\n\n React.useEffect(() => {\n const getData = async () => {\n try {\n const {\n data: {\n data: { hasAdmin, uuid, menuLogo, authLogo },\n },\n } = await get(`/admin/init`);\n\n updateProjectSettings({\n menuLogo: prefixFileUrlWithBackendUrl(menuLogo),\n authLogo: prefixFileUrlWithBackendUrl(authLogo),\n });\n\n if (uuid) {\n const {\n data: { data: properties },\n } = await get(`/admin/telemetry-properties`, {\n // NOTE: needed because the interceptors of the fetchClient redirect to /login when receive a 401 and it would end up in an infinite loop when the user doesn't have a session.\n validateStatus: (status) => status < 500,\n });\n\n setTelemetryProperties(properties);\n\n try {\n const event = 'didInitializeAdministration';\n await post(\n 'https://analytics.strapi.io/api/v2/track',\n {\n // This event is anonymous\n event,\n userId: '',\n deviceId,\n eventPropeties: {},\n userProperties: { environment: appInfo.currentEnvironment },\n groupProperties: { ...properties, projectId: uuid },\n },\n {\n headers: {\n 'X-Strapi-Event': event,\n },\n }\n );\n } catch (e) {\n // Silent.\n }\n }\n\n setState({ isLoading: false, hasAdmin, uuid, deviceId });\n } catch (err) {\n toggleNotification({\n type: 'warning',\n message: { id: 'app.containers.App.notification.error.init' },\n });\n }\n };\n\n getData();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [toggleNotification, updateProjectSettings]);\n\n const trackingInfo = React.useMemo(\n () => ({\n uuid,\n telemetryProperties,\n deviceId,\n }),\n [uuid, telemetryProperties, deviceId]\n );\n\n if (isLoading) {\n return <LoadingIndicatorPage />;\n }\n\n return (\n <React.Suspense fallback={<LoadingIndicatorPage />}>\n <SkipToContent>\n {formatMessage({ id: 'skipToContent', defaultMessage: 'Skip to content' })}\n </SkipToContent>\n <TrackingProvider value={trackingInfo}>\n <Switch>\n {authRoutes}\n <Route\n path=\"/auth/:authType\"\n render={(routerProps) => <AuthPage {...routerProps} hasAdmin={hasAdmin} />}\n exact\n />\n <PrivateRoute path=\"/usecase\" component={UseCasePage} />\n <PrivateRoute path=\"/\" component={AuthenticatedApp} />\n <Route path=\"\" component={NotFoundPage} />\n </Switch>\n </TrackingProvider>\n </React.Suspense>\n );\n};\n","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODAwIiBoZWlnaHQ9IjgwMCIgdmlld0JveD0iMCAwIDgwMCA4MDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8cGF0aCBkPSJNMzkgMjgyYzAtMTE4IDAtMTc2LjkgMzYuNi0yMTMuNUMxMTIuMiAzMiAxNzEuMSAzMiAyODguOSAzMmgyMjEuMmMxMTcuOCAwIDE3Ni43IDAgMjEzLjMgMzYuNkM3NjAgMTA1LjIgNzYwIDE2NC4xIDc2MCAyODEuOXYyMjEuMmMwIDExNy44IDAgMTc2LjctMzYuNiAyMTMuM0M2ODYuOCA3NTMgNjI3LjkgNzUzIDUxMC4xIDc1M0gyODguOWMtMTE3LjggMC0xNzYuNyAwLTIxMy4zLTM2LjZDMzkgNjc5LjggMzkgNjIwLjkgMzkgNTAzLjFWMjgxLjlaIiBmaWxsPSIjNDk0NUZGIi8+CiAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTUzNi40IDI1MC43SDI5My43djEyMy44aDEyMy44djEyMy43aDEyMy44VjI1NS41YzAtMi42LTIuMi00LjgtNC45LTQuOFoiIGZpbGw9IiNmZmYiLz4KICAgIDxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik00MTIuNyAzNzQuNWg0Ljh2NC44aC00Ljh6Ii8+CiAgICA8cGF0aCBkPSJNMjkzLjggMzc0LjVoMTE5YzIuNiAwIDQuOCAyLjEgNC44IDQuOHYxMTloLTExOWE0LjggNC44IDAgMCAxLTQuOC00Ljl2LTExOVoiIGZpbGw9IiM5NTkzRkYiLz4KICAgIDxwYXRoIGQ9Ik00MTcuNSA0OTguMmgxMjMuOEw0MjEuNiA2MThhMi40IDIuNCAwIDAgMS00LTEuN3YtMTE4Wk0yOTMuOCAzNzQuNWgtMTE4YTIuNCAyLjQgMCAwIDEtMS43LTQuMWwxMTkuNy0xMTkuN3YxMjMuOFoiIGZpbGw9IiM5NTkzRkYiLz4KPC9zdmc+Cg==\"","import { createContext } from '@radix-ui/react-context';\n\nimport type { StrapiApp } from '../StrapiApp';\ninterface AdminContextValue {\n getAdminInjectedComponents: StrapiApp['getAdminInjectedComponents'];\n}\n\nconst [AdminContextProvider, useAdminContext] = createContext<AdminContextValue>('AdminContext');\n\nconst useAdmin = () => useAdminContext('useAdmin');\n\nexport { AdminContextProvider, useAdmin };\nexport type { AdminContextValue };\n","import * as React from 'react';\n\nimport { ConfigurationContextProvider, ConfigurationContextValue } from '../contexts/configuration';\n\ninterface ConfigurationProviderProps {\n children: React.ReactNode;\n authLogo: string;\n menuLogo: string;\n showReleaseNotification?: boolean;\n showTutorials?: boolean;\n}\n\ntype LogoKeys = keyof ConfigurationContextValue['logos'];\n\nconst ConfigurationProvider = ({\n children,\n authLogo: defaultAuthLogo,\n menuLogo: defaultMenuLogo,\n showReleaseNotification = false,\n showTutorials = false,\n}: ConfigurationProviderProps) => {\n const [{ menuLogo, authLogo }, setLogos] = React.useState<{\n [_Key in `${LogoKeys}Logo`]?: ConfigurationContextValue['logos'][LogoKeys]['custom'];\n }>({\n menuLogo: null,\n authLogo: null,\n });\n\n const updateProjectSettings: ConfigurationContextValue['updateProjectSettings'] =\n React.useCallback(\n ({ menuLogo, authLogo }) => {\n setLogos({\n menuLogo: menuLogo || defaultMenuLogo,\n authLogo: authLogo || defaultAuthLogo,\n });\n },\n [defaultAuthLogo, defaultMenuLogo]\n );\n\n return (\n <ConfigurationContextProvider\n updateProjectSettings={updateProjectSettings}\n showReleaseNotification={showReleaseNotification}\n showTutorials={showTutorials}\n logos={{\n menu: { custom: menuLogo, default: defaultMenuLogo },\n auth: { custom: authLogo, default: defaultAuthLogo },\n }}\n >\n {children}\n </ConfigurationContextProvider>\n );\n};\n\nexport { ConfigurationProvider };\nexport type { ConfigurationProviderProps };\n","import * as React from 'react';\n\nimport {\n GuidedTourContextValue,\n GuidedTourProvider as GuidedTourProviderComponent,\n GuidedTourSectionKey,\n GuidedTourStep,\n GuidedTourStepKey,\n auth,\n} from '@strapi/helper-plugin';\nimport produce from 'immer';\nimport get from 'lodash/get';\nimport set from 'lodash/set';\n\n/* -------------------------------------------------------------------------------------------------\n * GuidedTourProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface GuidedTourProviderProps {\n children: React.ReactNode;\n}\n\nconst GuidedTourProvider = ({ children }: GuidedTourProviderProps) => {\n const [{ currentStep, guidedTourState, isGuidedTourVisible, isSkipped }, dispatch] =\n React.useReducer(reducer, initialState, initialiseState);\n\n const setCurrentStep = (step: SetCurrentStepAction['step']) => {\n // if step is null it is intentional, we need to dispatch it\n if (step !== null) {\n const isStepAlreadyDone = get(guidedTourState, step);\n const [sectionName, stepName] = step.split('.') as [GuidedTourSectionKey, GuidedTourStepKey];\n const sectionArray = Object.entries(guidedTourState[sectionName]);\n\n const currentStepIndex = sectionArray.findIndex(([key]) => key === stepName);\n const previousSteps = sectionArray.slice(0, currentStepIndex);\n\n const isStepToShow = previousSteps.every(([, sectionValue]) => sectionValue);\n\n if (isStepAlreadyDone || isSkipped || !isStepToShow) {\n return null;\n }\n }\n\n auth.set(null, 'GUIDED_TOUR_CURRENT_STEP', true);\n\n return dispatch({\n type: 'SET_CURRENT_STEP',\n step,\n });\n };\n\n const setGuidedTourVisibility = (value: SetGuidedTourVisibilityAction['value']) => {\n dispatch({\n type: 'SET_GUIDED_TOUR_VISIBILITY',\n value,\n });\n };\n\n const setStepState = (currentStep: GuidedTourStep, value: SetStepStateAction['value']) => {\n addCompletedStep(currentStep);\n\n dispatch({\n type: 'SET_STEP_STATE',\n currentStep,\n value,\n });\n };\n\n const startSection = (sectionName: GuidedTourSectionKey) => {\n const sectionSteps = guidedTourState[sectionName];\n\n if (sectionSteps) {\n const guidedTourArray = Object.entries(guidedTourState);\n\n // Find current section position in the guidedTourArray\n // Get only previous sections based on current section position\n const currentSectionIndex = guidedTourArray.findIndex(([key]) => key === sectionName);\n const previousSections = guidedTourArray.slice(0, currentSectionIndex);\n\n // Check if every steps from previous section are done\n const isSectionToShow = previousSections.every(([, sectionValue]) =>\n Object.values(sectionValue).every(Boolean)\n );\n\n const [firstStep] = Object.keys(sectionSteps) as [GuidedTourStepKey];\n const isFirstStepDone = sectionSteps[firstStep];\n\n if (isSectionToShow && !currentStep && !isFirstStepDone) {\n setCurrentStep(`${sectionName}.${firstStep}`);\n }\n }\n };\n\n const setSkipped = (value: SetSkippedAction['value']) => {\n auth.set(value, 'GUIDED_TOUR_SKIPPED', true);\n\n dispatch({\n type: 'SET_SKIPPED',\n value,\n });\n };\n\n return (\n <GuidedTourProviderComponent\n guidedTourState={guidedTourState}\n currentStep={currentStep}\n setCurrentStep={setCurrentStep}\n setGuidedTourVisibility={setGuidedTourVisibility}\n setSkipped={setSkipped}\n setStepState={setStepState}\n startSection={startSection}\n isGuidedTourVisible={isGuidedTourVisible}\n isSkipped={isSkipped}\n >\n {children}\n </GuidedTourProviderComponent>\n );\n};\n\ntype State = Pick<\n GuidedTourContextValue,\n 'guidedTourState' | 'currentStep' | 'isGuidedTourVisible' | 'isSkipped'\n>;\n\nconst initialState = {\n currentStep: null,\n guidedTourState: {\n contentTypeBuilder: {\n create: false,\n success: false,\n },\n contentManager: {\n create: false,\n success: false,\n },\n apiTokens: {\n create: false,\n success: false,\n },\n },\n isGuidedTourVisible: false,\n isSkipped: false,\n} satisfies State;\n\ninterface SetCurrentStepAction {\n type: 'SET_CURRENT_STEP';\n step: GuidedTourStep | null;\n}\n\ninterface SetStepStateAction {\n type: 'SET_STEP_STATE';\n currentStep: GuidedTourStep;\n value: boolean;\n}\n\ninterface SetSkippedAction {\n type: 'SET_SKIPPED';\n value: boolean;\n}\n\ninterface SetGuidedTourVisibilityAction {\n type: 'SET_GUIDED_TOUR_VISIBILITY';\n value: boolean;\n}\n\ntype Action =\n | SetCurrentStepAction\n | SetStepStateAction\n | SetSkippedAction\n | SetGuidedTourVisibilityAction;\n\nconst reducer: React.Reducer<State, Action> = (state: State = initialState, action: Action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'SET_CURRENT_STEP': {\n draftState.currentStep = action.step;\n break;\n }\n case 'SET_STEP_STATE': {\n const [section, step] = action.currentStep.split('.') as [\n GuidedTourSectionKey,\n GuidedTourStepKey\n ];\n draftState.guidedTourState[section][step] = action.value;\n break;\n }\n case 'SET_SKIPPED': {\n draftState.isSkipped = action.value;\n break;\n }\n case 'SET_GUIDED_TOUR_VISIBILITY': {\n draftState.isGuidedTourVisible = action.value;\n break;\n }\n default: {\n return draftState;\n }\n }\n });\n\nconst initialiseState = (initialState: State) => {\n const copyInitialState = { ...initialState };\n const guidedTourLocaleStorage = auth.get('GUIDED_TOUR_COMPLETED_STEPS');\n const currentStepLocaleStorage = auth.get('GUIDED_TOUR_CURRENT_STEP');\n const skippedLocaleStorage = auth.get('GUIDED_TOUR_SKIPPED');\n\n if (Array.isArray(guidedTourLocaleStorage)) {\n guidedTourLocaleStorage.forEach((step) => {\n const [sectionName, stepName] = step.split('.');\n set(copyInitialState, ['guidedTourState', sectionName, stepName], true);\n });\n }\n\n // if current step when initializing mark it as done\n if (currentStepLocaleStorage) {\n const [sectionName, stepName] = currentStepLocaleStorage.split('.') as [\n GuidedTourSectionKey,\n GuidedTourStepKey\n ];\n set(copyInitialState, ['guidedTourState', sectionName, stepName], true);\n\n addCompletedStep(currentStepLocaleStorage as GuidedTourStep);\n\n auth.set(null, 'GUIDED_TOUR_CURRENT_STEP', true);\n }\n\n if (skippedLocaleStorage !== null) {\n set(copyInitialState, 'isSkipped', skippedLocaleStorage);\n }\n\n return copyInitialState;\n};\n\n/**\n * @description Add a completed step to the local storage if it does not already exist.\n */\nconst addCompletedStep = (completedStep: GuidedTourStep) => {\n const currentSteps = auth.get('GUIDED_TOUR_COMPLETED_STEPS') ?? [];\n\n if (!Array.isArray(currentSteps)) {\n return;\n }\n\n const isAlreadyStored = currentSteps.includes(completedStep);\n\n if (isAlreadyStored) {\n return;\n }\n\n auth.set([...currentSteps, completedStep], 'GUIDED_TOUR_COMPLETED_STEPS', true);\n};\n\nexport { GuidedTourProvider };\n","import { createContext } from '@radix-ui/react-context';\nimport { DefaultTheme } from 'styled-components';\n\ntype ThemeName = 'light' | 'dark' | 'system';\ntype NonSystemThemeName = Exclude<ThemeName, 'system'>;\n\ninterface ThemeToggleContextContextValue {\n currentTheme?: ThemeName;\n onChangeTheme?: (nextTheme: ThemeName) => void;\n themes?: {\n dark: DefaultTheme;\n light: DefaultTheme;\n };\n systemTheme?: NonSystemThemeName;\n}\n\nconst [ThemeToggleContextProvider, useThemeToggleContext] =\n createContext<ThemeToggleContextContextValue>('ThemeToggleContext');\n\nconst useThemeToggle = () => useThemeToggleContext('useThemeToggle');\n\nexport { ThemeToggleContextProvider, useThemeToggle };\nexport type { ThemeName, NonSystemThemeName, ThemeToggleContextContextValue };\n","import * as React from 'react';\n\nimport { DesignSystemProvider } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { createGlobalStyle } from 'styled-components';\n\nimport { useThemeToggle } from '../contexts/themeToggle';\n\ninterface ThemeProps {\n children: React.ReactNode;\n}\n\nconst Theme = ({ children }: ThemeProps) => {\n const { currentTheme, themes, systemTheme } = useThemeToggle();\n const { locale } = useIntl();\n\n const computedThemeName = currentTheme === 'system' ? systemTheme : currentTheme;\n\n return (\n <DesignSystemProvider\n locale={locale}\n /**\n * TODO: could we make this neater i.e. by setting up the context to throw\n * if it can't find it, that way the type is always fully defined and we're\n * not checking it all the time...\n */\n theme={themes?.[computedThemeName || 'light']}\n >\n {children}\n <GlobalStyle />\n </DesignSystemProvider>\n );\n};\n\nconst GlobalStyle = createGlobalStyle`\n body {\n background: ${({ theme }) => theme.colors.neutral100};\n }\n`;\n\nexport { Theme };\n","import * as React from 'react';\n\nimport { DefaultTheme } from 'styled-components';\n\nimport { ThemeToggleContextProvider, ThemeName, NonSystemThemeName } from '../contexts/themeToggle';\n\nconst THEME_KEY = 'STRAPI_THEME';\n\nconst getDefaultTheme = () => {\n const persistedTheme = localStorage.getItem(THEME_KEY) as ThemeName | null;\n\n return persistedTheme || 'system';\n};\n\ninterface ThemeToggleProviderProps {\n children: React.ReactNode;\n themes: {\n light: DefaultTheme;\n dark: DefaultTheme;\n };\n}\n\nconst ThemeToggleProvider = ({ children, themes }: ThemeToggleProviderProps) => {\n const [currentTheme, setCurrentTheme] = React.useState<ThemeName>(getDefaultTheme());\n const [systemTheme, setSystemTheme] = React.useState<NonSystemThemeName>();\n\n const handleChangeTheme = React.useCallback(\n (nextTheme: ThemeName) => {\n setCurrentTheme(nextTheme);\n localStorage.setItem(THEME_KEY, nextTheme);\n },\n [setCurrentTheme]\n );\n\n // Listen to changes in the system theme\n React.useEffect(() => {\n const themeWatcher = window.matchMedia('(prefers-color-scheme: dark)');\n setSystemTheme(themeWatcher.matches ? 'dark' : 'light');\n\n const listener = (event: MediaQueryListEvent) => {\n setSystemTheme(event.matches ? 'dark' : 'light');\n };\n themeWatcher.addEventListener('change', listener);\n\n // Remove listener on cleanup\n return () => {\n themeWatcher.removeEventListener('change', listener);\n };\n }, []);\n\n return (\n <ThemeToggleContextProvider\n currentTheme={currentTheme}\n onChangeTheme={handleChangeTheme}\n themes={themes}\n systemTheme={systemTheme}\n >\n {children}\n </ThemeToggleContextProvider>\n );\n};\n\nexport { ThemeToggleProvider };\nexport type { ThemeToggleProviderProps };\n","import * as React from 'react';\n\nimport {\n AutoReloadOverlayBlockerProvider,\n CustomFieldsProvider,\n CustomFieldsProviderProps,\n LibraryProvider,\n LibraryProviderProps,\n NotificationsProvider,\n OverlayBlockerProvider,\n StrapiAppProvider,\n StrapiAppProviderProps,\n} from '@strapi/helper-plugin';\nimport { QueryClient, QueryClientProvider } from 'react-query';\nimport { Provider } from 'react-redux';\n\nimport { AdminContextProvider, AdminContextValue } from '../contexts/admin';\n\nimport { ConfigurationProvider, ConfigurationProviderProps } from './ConfigurationProvider';\nimport { GuidedTourProvider } from './GuidedTour/Provider';\nimport { LanguageProvider, LanguageProviderProps } from './LanguageProvider';\nimport { Theme } from './Theme';\nimport { ThemeToggleProvider, ThemeToggleProviderProps } from './ThemeToggleProvider';\n\nimport type { Store } from '../core/store/configure';\n\nconst queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n refetchOnWindowFocus: false,\n },\n },\n});\n\ninterface ProvidersProps\n extends Pick<ThemeToggleProviderProps, 'themes'>,\n Pick<LanguageProviderProps, 'messages' | 'localeNames'>,\n Pick<\n ConfigurationProviderProps,\n 'authLogo' | 'menuLogo' | 'showReleaseNotification' | 'showTutorials'\n >,\n Pick<AdminContextValue, 'getAdminInjectedComponents'>,\n Pick<CustomFieldsProviderProps, 'customFields'>,\n Pick<LibraryProviderProps, 'components' | 'fields'>,\n Pick<\n StrapiAppProviderProps,\n | 'getPlugin'\n | 'menu'\n | 'plugins'\n | 'runHookParallel'\n | 'runHookSeries'\n | 'runHookWaterfall'\n | 'settings'\n > {\n children: React.ReactNode;\n store: Store;\n}\n\nconst Providers = ({\n authLogo,\n children,\n components,\n customFields,\n fields,\n getAdminInjectedComponents,\n getPlugin,\n localeNames,\n menu,\n menuLogo,\n messages,\n plugins,\n runHookParallel,\n runHookSeries,\n runHookWaterfall,\n settings,\n showReleaseNotification,\n showTutorials,\n store,\n themes,\n}: ProvidersProps) => {\n return (\n <LanguageProvider messages={messages} localeNames={localeNames}>\n <ThemeToggleProvider themes={themes}>\n <Theme>\n <QueryClientProvider client={queryClient}>\n <Provider store={store}>\n <AdminContextProvider getAdminInjectedComponents={getAdminInjectedComponents}>\n <ConfigurationProvider\n authLogo={authLogo}\n menuLogo={menuLogo}\n showReleaseNotification={showReleaseNotification}\n showTutorials={showTutorials}\n >\n <StrapiAppProvider\n getPlugin={getPlugin}\n menu={menu}\n plugins={plugins}\n runHookParallel={runHookParallel}\n runHookWaterfall={runHookWaterfall}\n runHookSeries={runHookSeries}\n settings={settings}\n >\n <LibraryProvider components={components} fields={fields}>\n <CustomFieldsProvider customFields={customFields}>\n <AutoReloadOverlayBlockerProvider>\n <OverlayBlockerProvider>\n <GuidedTourProvider>\n <NotificationsProvider>{children}</NotificationsProvider>\n </GuidedTourProvider>\n </OverlayBlockerProvider>\n </AutoReloadOverlayBlockerProvider>\n </CustomFieldsProvider>\n </LibraryProvider>\n </StrapiAppProvider>\n </ConfigurationProvider>\n </AdminContextProvider>\n </Provider>\n </QueryClientProvider>\n </Theme>\n </ThemeToggleProvider>\n </LanguageProvider>\n );\n};\n\nexport { Providers };\n","/* eslint-disable check-file/filename-naming-convention */\nimport * as React from 'react';\n\nimport invariant from 'invariant';\n\nexport interface Component {\n name: string;\n Component: React.ComponentType;\n}\n\nexport class Components {\n components: Record<Component['name'], Component['Component']>;\n\n constructor() {\n this.components = {};\n }\n\n add(component: Component) {\n const { name, Component } = component;\n\n invariant(Component, 'A Component must be provided');\n invariant(name, 'A name must be provided');\n invariant(this.components[name] === undefined, 'A similar field already exists');\n\n this.components[name] = Component;\n }\n}\n","/* eslint-disable check-file/filename-naming-convention */\nimport invariant from 'invariant';\n\nimport type {\n CustomField,\n CustomFieldOption,\n CustomFieldOptionSection,\n CustomFieldUID,\n} from '@strapi/helper-plugin';\n\nconst ALLOWED_TYPES = [\n 'biginteger',\n 'boolean',\n 'date',\n 'datetime',\n 'decimal',\n 'email',\n 'enumeration',\n 'float',\n 'integer',\n 'json',\n 'password',\n 'richtext',\n 'string',\n 'text',\n 'time',\n 'uid',\n] as const;\n\nconst ALLOWED_ROOT_LEVEL_OPTIONS = [\n 'min',\n 'minLength',\n 'max',\n 'maxLength',\n 'required',\n 'regex',\n 'enum',\n 'unique',\n 'private',\n 'default',\n] as const;\n\nexport class CustomFields {\n customFields: Record<CustomFieldUID, CustomField>;\n\n constructor() {\n this.customFields = {};\n }\n\n register(customFields: CustomField | CustomField[]) {\n if (Array.isArray(customFields)) {\n // If several custom fields are passed, register them one by one\n customFields.forEach((customField) => {\n this.register(customField);\n });\n } else {\n // Handle individual custom field\n const { name, pluginId, type, intlLabel, intlDescription, components, options } =\n customFields;\n\n // Ensure required attributes are provided\n invariant(name, 'A name must be provided');\n invariant(type, 'A type must be provided');\n invariant(intlLabel, 'An intlLabel must be provided');\n invariant(intlDescription, 'An intlDescription must be provided');\n invariant(components, 'A components object must be provided');\n invariant(components.Input, 'An Input component must be provided');\n\n // Ensure the type is valid\n invariant(\n ALLOWED_TYPES.includes(type),\n `Custom field type: '${type}' is not a valid Strapi type or it can't be used with a Custom Field`\n );\n\n // Ensure name has no special characters\n const isValidObjectKey = /^(?![0-9])[a-zA-Z0-9$_-]+$/g;\n invariant(\n isValidObjectKey.test(name),\n `Custom field name: '${name}' is not a valid object key`\n );\n\n // Ensure options have valid name paths\n const allFormOptions = [...(options?.base || []), ...(options?.advanced || [])];\n\n if (allFormOptions.length) {\n const optionPathValidations = allFormOptions.reduce(optionsValidationReducer, []);\n\n optionPathValidations.forEach(({ isValidOptionPath, errorMessage }) => {\n invariant(isValidOptionPath, errorMessage);\n });\n }\n\n // When no plugin is specified, default to the global namespace\n const uid: CustomFieldUID = pluginId ? `plugin::${pluginId}.${name}` : `global::${name}`;\n\n // Ensure the uid is unique\n const uidAlreadyUsed = Object.prototype.hasOwnProperty.call(this.customFields, uid);\n invariant(!uidAlreadyUsed, `Custom field: '${uid}' has already been registered`);\n\n this.customFields[uid] = customFields;\n }\n }\n\n getAll() {\n return this.customFields;\n }\n\n get(uid: CustomFieldUID): CustomField | undefined {\n return this.customFields[uid];\n }\n}\n\ninterface OptionValidation {\n isValidOptionPath: boolean;\n errorMessage: string;\n}\n\nconst optionsValidationReducer = (\n acc: OptionValidation[],\n option: CustomFieldOptionSection | CustomFieldOption\n): OptionValidation[] => {\n if ('items' in option) {\n return option.items.reduce(optionsValidationReducer, acc);\n }\n\n if (!option.name) {\n acc.push({\n isValidOptionPath: false,\n errorMessage: \"The 'name' property is required on an options object\",\n });\n } else {\n acc.push({\n isValidOptionPath:\n option.name.startsWith('options') || ALLOWED_ROOT_LEVEL_OPTIONS.includes(option.name),\n errorMessage: `'${option.name}' must be prefixed with 'options.'`,\n });\n }\n\n return acc;\n};\n","/* eslint-disable check-file/filename-naming-convention */\nimport * as React from 'react';\n\nimport invariant from 'invariant';\n\nexport interface Field {\n type: string;\n Component: React.ComponentType;\n}\n\nexport class Fields {\n fields: Record<Field['type'], Field['Component']>;\n\n constructor() {\n this.fields = {};\n }\n\n add(field: Field) {\n const { type, Component } = field;\n\n invariant(Component, 'A Component must be provided');\n invariant(type, 'A type must be provided');\n\n this.fields[type] = Component;\n }\n}\n","/* eslint-disable check-file/filename-naming-convention */\nimport { Middleware } from '@reduxjs/toolkit';\n\nimport { RootState } from '../store/configure';\n\ntype TypedMiddleware = () => Middleware<object, RootState>;\n\nclass Middlewares {\n middlewares: Array<TypedMiddleware>;\n\n constructor() {\n this.middlewares = [];\n }\n\n add(middleware: TypedMiddleware) {\n this.middlewares.push(middleware);\n }\n}\n\nexport { Middlewares, TypedMiddleware as Middleware };\n","/* eslint-disable check-file/filename-naming-convention */\nimport { Plugin as IPlugin } from '@strapi/helper-plugin';\n\nexport interface PluginConfig\n extends Pick<IPlugin, 'apis' | 'initializer' | 'injectionZones' | 'isReady' | 'name'> {\n id: string;\n}\n\nexport class Plugin implements IPlugin {\n apis: PluginConfig['apis'];\n initializer: PluginConfig['initializer'];\n injectionZones: PluginConfig['injectionZones'];\n isReady: PluginConfig['isReady'];\n name: PluginConfig['name'];\n pluginId: PluginConfig['id'];\n\n constructor(pluginConf: PluginConfig) {\n this.apis = pluginConf.apis || {};\n this.initializer = pluginConf.initializer || null;\n this.injectionZones = pluginConf.injectionZones || {};\n this.isReady = pluginConf.isReady !== undefined ? pluginConf.isReady : true;\n this.name = pluginConf.name;\n this.pluginId = pluginConf.id;\n }\n\n getInjectedComponents(containerName: string, blockName: string) {\n try {\n return this.injectionZones[containerName][blockName] || [];\n } catch (err) {\n console.error('Cannot get injected component', err);\n\n return [];\n }\n }\n\n injectComponent(\n containerName: string,\n blockName: string,\n component: ReturnType<IPlugin['getInjectedComponents']>[number]\n ) {\n try {\n this.injectionZones[containerName][blockName].push(component);\n } catch (err) {\n console.error('Cannot inject component', err);\n }\n }\n}\n","/* eslint-disable check-file/filename-naming-convention */\n\nimport { Reducer, ReducersMapObject } from '@reduxjs/toolkit';\n\ninterface ReducerConstructorArgs {\n appReducers?: ReducersMapObject;\n}\n\nexport class Reducers {\n reducers: ReducersMapObject;\n\n constructor({ appReducers = {} }: ReducerConstructorArgs = {}) {\n this.reducers = { ...appReducers };\n }\n\n add(reducerName: string, reducer: Reducer) {\n this.reducers[reducerName] = reducer;\n }\n}\n","import { createSelector, Selector } from '@reduxjs/toolkit';\nimport { useDispatch, useStore, TypedUseSelectorHook, useSelector } from 'react-redux';\n\nimport type { RootState, Store } from './configure';\n\ntype AppDispatch = Store['dispatch'];\n\nconst useTypedDispatch: () => AppDispatch = useDispatch;\nconst useTypedStore = useStore as () => Store;\nconst useTypedSelector: TypedUseSelectorHook<RootState> = useSelector;\n\nconst createTypedSelector = <TResult>(selector: Selector<RootState, TResult>) =>\n createSelector((state: RootState) => state, selector);\n\nexport { useTypedDispatch, useTypedStore, useTypedSelector, createTypedSelector };\n","import * as React from 'react';\n\nimport {\n LoadingIndicatorPage,\n Permission,\n RBACContext,\n RBACContextValue,\n} from '@strapi/helper-plugin';\nimport produce from 'immer';\n\nimport { useTypedSelector, useTypedDispatch } from '../core/store/hooks';\n\n/* -------------------------------------------------------------------------------------------------\n * RBACProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RBACProviderProps {\n children: React.ReactNode;\n permissions: Permission[];\n refetchPermissions: RBACContextValue['refetchPermissions'];\n}\n\nconst RBACProvider = ({ children, permissions, refetchPermissions }: RBACProviderProps) => {\n const allPermissions = useTypedSelector((state) => state.rbacProvider.allPermissions);\n\n const dispatch = useTypedDispatch();\n\n React.useEffect(() => {\n dispatch(setPermissionsAction(permissions));\n\n return () => {\n dispatch(resetStoreAction());\n };\n }, [permissions, dispatch]);\n\n if (!allPermissions) {\n return <LoadingIndicatorPage />;\n }\n\n return (\n <RBACContext.Provider value={{ allPermissions, refetchPermissions }}>\n {children}\n </RBACContext.Provider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * RBACReducer\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RBACState {\n allPermissions: null | Permission[];\n collectionTypesRelatedPermissions: Record<string, Record<string, Permission[]>>;\n}\n\nconst initialState = {\n allPermissions: null,\n collectionTypesRelatedPermissions: {},\n};\n\nconst RESET_STORE = 'StrapiAdmin/RBACProvider/RESET_STORE';\nconst SET_PERMISSIONS = 'StrapiAdmin/RBACProvider/SET_PERMISSIONS';\n\ninterface ResetStoreAction {\n type: typeof RESET_STORE;\n}\n\nconst resetStoreAction = (): ResetStoreAction => ({ type: RESET_STORE });\n\ninterface SetPermissionsAction {\n type: typeof SET_PERMISSIONS;\n permissions: Permission[];\n}\n\nconst setPermissionsAction = (\n permissions: SetPermissionsAction['permissions']\n): SetPermissionsAction => ({\n type: SET_PERMISSIONS,\n permissions,\n});\n\ntype Actions = ResetStoreAction | SetPermissionsAction;\n\nconst RBACReducer = (state: RBACState = initialState, action: Actions) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case SET_PERMISSIONS: {\n draftState.allPermissions = action.permissions;\n draftState.collectionTypesRelatedPermissions = action.permissions\n .filter((perm) => perm.subject)\n .reduce<Record<string, Record<string, Permission[]>>>((acc, current) => {\n const { subject, action } = current;\n\n if (!subject) return acc;\n\n if (!acc[subject]) {\n acc[subject] = {};\n }\n\n acc[subject] = acc[subject][action]\n ? { ...acc[subject], [action]: [...acc[subject][action], current] }\n : { ...acc[subject], [action]: [current] };\n\n return acc;\n }, {});\n break;\n }\n case RESET_STORE: {\n return initialState;\n }\n default:\n return state;\n }\n });\n\nexport { RBACProvider, RBACReducer, resetStoreAction, setPermissionsAction };\nexport type {\n RBACState,\n Actions,\n RBACProviderProps,\n ResetStoreAction,\n SetPermissionsAction,\n Permission,\n};\n","export const SET_PERMISSIONS = 'ContentManager/RBACManager/SET_PERMISSIONS';\nexport const RESET_PERMISSIONS = 'ContentManager/RBACManager/RESET_PERMISSIONS';\n","/**\n *\n * RBACManager reducer\n */\n\nimport produce from 'immer';\n\nimport { RESET_PERMISSIONS, SET_PERMISSIONS } from './constants';\n\nexport const initialState = {\n permissions: null,\n};\n\nconst rbacManagerReducer = (state = initialState, action) =>\n // eslint-disable-next-line consistent-return\n produce(state, (draftState) => {\n switch (action.type) {\n case SET_PERMISSIONS: {\n draftState.permissions = Object.entries(action.permissions).reduce((acc, current) => {\n return [...acc, ...current[1]];\n }, []);\n break;\n }\n case RESET_PERMISSIONS: {\n draftState.permissions = null;\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport default rbacManagerReducer;\n","export const GET_INIT_DATA = 'ContentManager/App/GET_INIT_DATA';\nexport const RESET_INIT_DATA = 'ContentManager/App/RESET_INIT_DATA';\nexport const SET_INIT_DATA = 'ContentManager/App/SET_INIT_DATA';\n","/**\n *\n * main reducer\n */\n/* eslint-disable consistent-return */\nimport produce from 'immer';\n\nimport { GET_INIT_DATA, RESET_INIT_DATA, SET_INIT_DATA } from './constants';\n\nconst initialState = {\n components: [],\n status: 'loading',\n models: [],\n collectionTypeLinks: [],\n singleTypeLinks: [],\n};\n\n/**\n * Known as content-manager_app in the redux store\n */\nconst mainReducer = (state = initialState, action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case GET_INIT_DATA: {\n draftState.status = 'loading';\n break;\n }\n case RESET_INIT_DATA: {\n return initialState;\n }\n case SET_INIT_DATA: {\n draftState.collectionTypeLinks = action.data.authorizedCollectionTypeLinks.filter(\n ({ isDisplayed }) => isDisplayed\n );\n draftState.singleTypeLinks = action.data.authorizedSingleTypeLinks.filter(\n ({ isDisplayed }) => isDisplayed\n );\n draftState.components = action.data.components;\n draftState.models = action.data.contentTypeSchemas;\n draftState.fieldSizes = action.data.fieldSizes;\n draftState.status = 'resolved';\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport default mainReducer;\nexport { initialState };\n","export const SET_LAYOUT = 'ContentManager/EditViewLayoutManager/SET_LAYOUT';\nexport const RESET_PROPS = 'ContentManager/EditViewLayoutManager/RESET_PROPS';\n","/**\n *\n * EditViewLayoutManager reducer\n */\n\nimport produce from 'immer';\n\nimport { RESET_PROPS, SET_LAYOUT } from './constants';\n\nexport const initialState = {\n currentLayout: null,\n};\n\nconst editViewManagerReducer = (state = initialState, action) =>\n // eslint-disable-next-line consistent-return\n produce(state, (draftState) => {\n switch (action.type) {\n case RESET_PROPS: {\n draftState.currentLayout = null;\n break;\n }\n case SET_LAYOUT: {\n draftState.currentLayout = action.layout;\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport default editViewManagerReducer;\n","export const GET_DATA = 'ContentManager/ListView/GET_DATA';\nexport const GET_DATA_SUCCEEDED = 'ContentManager/ListView/GET_DATA_SUCCEEDED';\nexport const RESET_PROPS = 'ContentManager/ListView/RESET_PROPS';\nexport const ON_CHANGE_LIST_HEADERS = 'ContentManager/ListView/ON_CHANGE_LIST_HEADERS ';\nexport const ON_RESET_LIST_HEADERS = 'ContentManager/ListView/ON_RESET_LIST_HEADERS ';\nexport const SET_LIST_LAYOUT = 'ContentManager/ListView/SET_LIST_LAYOUT ';\n","/**\n *\n * listView reducer\n */\n\nimport produce from 'immer';\nimport get from 'lodash/get';\n\nimport {\n GET_DATA,\n GET_DATA_SUCCEEDED,\n ON_CHANGE_LIST_HEADERS,\n ON_RESET_LIST_HEADERS,\n RESET_PROPS,\n SET_LIST_LAYOUT,\n} from './constants';\n\nexport const initialState = {\n data: [],\n isLoading: true,\n contentType: {},\n components: [],\n initialDisplayedHeaders: [],\n displayedHeaders: [],\n pagination: {\n total: 0,\n },\n};\n\nconst listViewReducer = (state = initialState, action) =>\n // eslint-disable-next-line consistent-return\n produce(state, (draftState) => {\n switch (action.type) {\n case GET_DATA: {\n return {\n ...initialState,\n contentType: state.contentType,\n components: state.components,\n initialDisplayedHeaders: state.initialDisplayedHeaders,\n displayedHeaders: state.displayedHeaders,\n };\n }\n\n case GET_DATA_SUCCEEDED: {\n draftState.pagination = action.pagination;\n draftState.data = action.data;\n draftState.isLoading = false;\n break;\n }\n\n case ON_CHANGE_LIST_HEADERS: {\n const {\n target: { name, value },\n } = action;\n\n if (!value) {\n const { metadatas, attributes, uid } = state.contentType;\n const metas = metadatas[name].list;\n const header = {\n name,\n fieldSchema: attributes[name],\n metadatas: metas,\n key: `__${name}_key__`,\n };\n\n switch (attributes[name].type) {\n case 'component': {\n const componentName = attributes[name].component;\n const mainFieldName = get(\n state,\n ['components', componentName, 'settings', 'mainField'],\n null\n );\n const mainFieldAttribute = get(state, [\n 'components',\n componentName,\n 'attributes',\n mainFieldName,\n ]);\n\n draftState.displayedHeaders.push({\n ...header,\n metadatas: {\n ...metas,\n mainField: {\n ...mainFieldAttribute,\n name: mainFieldName,\n },\n },\n });\n break;\n }\n\n case 'relation':\n draftState.displayedHeaders.push({\n ...header,\n queryInfos: {\n defaultParams: {},\n endPoint: `collection-types/${uid}`,\n },\n });\n break;\n\n default:\n draftState.displayedHeaders.push(header);\n }\n } else {\n draftState.displayedHeaders = state.displayedHeaders.filter(\n (header) => header.name !== name\n );\n }\n\n break;\n }\n case ON_RESET_LIST_HEADERS: {\n draftState.displayedHeaders = state.initialDisplayedHeaders;\n break;\n }\n case RESET_PROPS: {\n return initialState;\n }\n case SET_LIST_LAYOUT: {\n const { contentType, components, displayedHeaders } = action;\n\n draftState.contentType = contentType;\n draftState.components = components;\n draftState.displayedHeaders = displayedHeaders;\n draftState.initialDisplayedHeaders = displayedHeaders;\n\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport default listViewReducer;\n","export const GET_DATA = 'ContentManager/CrudReducer/GET_DATA';\nexport const GET_DATA_SUCCEEDED = 'ContentManager/CrudReducer/GET_DATA_SUCCEEDED';\nexport const INIT_FORM = 'ContentManager/CrudReducer/INIT_FORM';\nexport const RESET_PROPS = 'ContentManager/CrudReducer/RESET_PROPS';\nexport const SET_DATA_STRUCTURES = 'ContentManager/CrudReducer/SET_DATA_STRUCTURES';\nexport const SET_STATUS = 'ContentManager/CrudReducer/SET_STATUS';\nexport const SUBMIT_SUCCEEDED = 'ContentManager/CrudReducer/SUBMIT_SUCCEEDED';\nexport const CLEAR_SET_MODIFIED_DATA_ONLY =\n 'ContentManager/CrudReducer/CLEAR_SET_MODIFIED_DATA_ONLY';\n","/* eslint-disable consistent-return */\nimport produce from 'immer';\n\n// NOTE: instead of creating a shared reducer here, we could also create a hook\n// that returns the dispatch and the state, however it will mess with the linter\n// and force us to either disable the linter for the hooks dependencies array rule or\n// require us to add the dispatch to the array which is not wanted. This refacto does not require us to\n// to do any of this.\nimport {\n CLEAR_SET_MODIFIED_DATA_ONLY,\n GET_DATA,\n GET_DATA_SUCCEEDED,\n INIT_FORM,\n RESET_PROPS,\n SET_DATA_STRUCTURES,\n SET_STATUS,\n SUBMIT_SUCCEEDED,\n} from './constants';\n\nconst crudInitialState = {\n componentsDataStructure: {},\n contentTypeDataStructure: {},\n isLoading: true,\n data: null,\n status: 'resolved',\n setModifiedDataOnly: false,\n};\n\nconst crudReducer = (state = crudInitialState, action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case GET_DATA: {\n draftState.isLoading = true;\n draftState.data = null;\n break;\n }\n case GET_DATA_SUCCEEDED: {\n draftState.isLoading = false;\n draftState.data = action.data;\n draftState.setModifiedDataOnly = action.setModifiedDataOnly ?? false;\n break;\n }\n case INIT_FORM: {\n if (action.data) {\n draftState.isLoading = false;\n draftState.data = action.data;\n\n break;\n }\n\n draftState.isLoading = false;\n draftState.data = state.contentTypeDataStructure;\n break;\n }\n case RESET_PROPS: {\n return crudInitialState;\n }\n case SET_DATA_STRUCTURES: {\n draftState.componentsDataStructure = action.componentsDataStructure;\n draftState.contentTypeDataStructure = action.contentTypeDataStructure;\n break;\n }\n case SET_STATUS: {\n draftState.status = action.status;\n break;\n }\n case SUBMIT_SUCCEEDED: {\n draftState.data = action.data;\n break;\n }\n case CLEAR_SET_MODIFIED_DATA_ONLY: {\n draftState.setModifiedDataOnly = false;\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport default crudReducer;\nexport { crudInitialState };\n","import produce from 'immer';\n\nimport { ACTION_SET_APP_RUNTIME_STATUS, ACTION_SET_ADMIN_PERMISSIONS } from './constants';\nimport { PermissionMap } from './types/permissions';\n\ninterface State {\n status: 'init' | 'runtime';\n permissions: Partial<PermissionMap>;\n}\n\nconst initialState = {\n permissions: {},\n status: 'init',\n} satisfies State;\n\ninterface SetAppRuntimeStatusAction {\n type: typeof ACTION_SET_APP_RUNTIME_STATUS;\n}\n\ninterface SetAdminPermissionsAction {\n type: typeof ACTION_SET_ADMIN_PERMISSIONS;\n payload: Record<string, unknown>;\n}\n\ntype Action = SetAppRuntimeStatusAction | SetAdminPermissionsAction;\n\nconst reducer = (state: State = initialState, action: Action) =>\n /* eslint-disable-next-line consistent-return */\n produce(state, (draftState) => {\n switch (action.type) {\n case ACTION_SET_APP_RUNTIME_STATUS: {\n draftState.status = 'runtime';\n break;\n }\n\n case ACTION_SET_ADMIN_PERMISSIONS: {\n draftState.permissions = action.payload;\n break;\n }\n\n default:\n return draftState;\n }\n });\n\nexport { reducer, initialState };\nexport type { State, Action, SetAppRuntimeStatusAction, SetAdminPermissionsAction };\n","import {\n configureStore,\n StoreEnhancer,\n Middleware,\n Reducer,\n combineReducers,\n} from '@reduxjs/toolkit';\n\nimport { RBACReducer } from '../../components/RBACProvider';\n// @ts-expect-error no types, yet.\nimport rbacManagerReducer from '../../content-manager/hooks/useSyncRbac/reducer';\n// @ts-expect-error no types, yet.\nimport cmAppReducer from '../../content-manager/pages/App/reducer';\n// @ts-expect-error no types, yet.\nimport editViewLayoutManagerReducer from '../../content-manager/pages/EditViewLayoutManager/reducer';\n// @ts-expect-error no types, yet.\nimport listViewReducer from '../../content-manager/pages/ListView/reducer';\n// @ts-expect-error no types, yet.\nimport editViewCrudReducer from '../../content-manager/sharedReducers/crudReducer/reducer';\nimport { reducer as appReducer } from '../../reducer';\n\n/**\n * @description Static reducers are ones we know, they live in the admin package.\n */\nconst staticReducers = {\n admin_app: appReducer,\n rbacProvider: RBACReducer,\n 'content-manager_app': cmAppReducer,\n 'content-manager_listView': listViewReducer,\n 'content-manager_rbacManager': rbacManagerReducer,\n 'content-manager_editViewLayoutManager': editViewLayoutManagerReducer,\n 'content-manager_editViewCrudReducer': editViewCrudReducer,\n} as const;\n\nconst injectReducerStoreEnhancer: (appReducers: Record<string, Reducer>) => StoreEnhancer =\n (appReducers) =>\n (next) =>\n (...args) => {\n const store = next(...args);\n\n const asyncReducers: Record<string, Reducer> = {};\n\n return {\n ...store,\n asyncReducers,\n injectReducer: (key: string, asyncReducer: Reducer) => {\n asyncReducers[key] = asyncReducer;\n store.replaceReducer(\n // @ts-expect-error we dynamically add reducers which makes the types uncomfortable.\n combineReducers({\n ...appReducers,\n ...asyncReducers,\n })\n );\n },\n };\n };\n\n/**\n * @description This is the main store configuration function, injected Reducers use our legacy app.addReducer API,\n * which we're trying to phase out. App Middlewares could potentially be improved...?\n */\nconst configureStoreImpl = (\n appMiddlewares: Array<() => Middleware> = [],\n injectedReducers: Record<string, Reducer> = {}\n) => {\n const coreReducers = { ...staticReducers, ...injectedReducers } as const;\n\n const store = configureStore({\n reducer: coreReducers,\n devTools: process.env.NODE_ENV !== 'production',\n middleware: (getDefaultMiddleware) => [\n ...getDefaultMiddleware(),\n ...appMiddlewares.map((m) => m()),\n ],\n enhancers: [injectReducerStoreEnhancer(coreReducers)],\n });\n\n return store;\n};\n\ntype Store = ReturnType<typeof configureStoreImpl> & {\n asyncReducers: Record<string, Reducer>;\n injectReducer: (key: string, asyncReducer: Reducer) => void;\n};\n\ntype RootState = ReturnType<Store['getState']>;\n\nexport { configureStoreImpl as configureStore };\nexport type { RootState, Store };\n","export const getBasename = () => (process.env.ADMIN_PATH ?? '').replace(window.location.origin, '');\n","/* eslint-disable no-await-in-loop */\n/* eslint-disable no-restricted-syntax */\n\nexport type Handler = (...args: any[]) => any;\n\nexport const createHook = () => {\n const _handlers: Handler[] = [];\n\n return {\n register(fn: Handler) {\n _handlers.push(fn);\n },\n delete(handler: Handler) {\n _handlers.splice(_handlers.indexOf(handler), 1);\n },\n runWaterfall<T>(args: T, store?: any) {\n return _handlers.reduce((acc, fn) => fn(acc, store), args);\n },\n async runWaterfallAsync<T>(args: T, store?: any) {\n let result = args;\n\n for (const fn of _handlers) {\n result = await fn(result, store);\n }\n\n return result;\n },\n runSeries<T extends any[]>(...args: T) {\n return _handlers.map((fn) => fn(...args));\n },\n async runSeriesAsync<T extends any[]>(...args: T) {\n const result = [];\n\n for (const fn of _handlers) {\n result.push(await fn(...args));\n }\n\n return result;\n },\n runParallel<T extends any[]>(...args: T) {\n return Promise.all(\n _handlers.map((fn) => {\n return fn(...args);\n })\n );\n },\n };\n};\n","import { useAdmin } from '../../contexts/admin';\nimport {\n InjectionZoneArea,\n InjectionZoneBlock,\n InjectionZoneContainer,\n InjectionZoneModule,\n} from '../components/InjectionZone';\n\nexport const useInjectionZone = (area: InjectionZoneArea) => {\n const { getAdminInjectedComponents } = useAdmin();\n\n const [moduleName, page, position] = area.split('.') as [\n InjectionZoneModule,\n InjectionZoneContainer,\n InjectionZoneBlock\n ];\n\n return getAdminInjectedComponents(moduleName, page, position);\n};\n","import * as React from 'react';\n\nimport { useInjectionZone } from '../hooks/useInjectionZone';\n\nconst INJECTION_ZONES = {\n admin: {\n // Temporary injection zone, support for the react-tour plugin in foodadvisor\n tutorials: {\n links: [],\n },\n },\n contentManager: {\n editView: { informations: [], 'right-links': [] },\n listView: {\n actions: [],\n deleteModalAdditionalInfos: [],\n publishModalAdditionalInfos: [],\n unpublishModalAdditionalInfos: [],\n },\n },\n} satisfies InjectionZones;\n\ninterface InjectionZoneComponent {\n Component: React.ComponentType;\n name: string;\n // TODO: in theory this could receive and forward any React component prop\n // but in practice there only seems to be once instance, where `slug` is\n // forwarded. The type needs to become either more generic or we disallow\n // prop spreading and offer a different way to access context data.\n slug: string;\n}\n\ninterface InjectionZones {\n admin: {\n tutorials: {\n links: InjectionZoneComponent[];\n };\n };\n contentManager: {\n editView: {\n informations: InjectionZoneComponent[];\n 'right-links': InjectionZoneComponent[];\n };\n listView: {\n actions: InjectionZoneComponent[];\n deleteModalAdditionalInfos: InjectionZoneComponent[];\n publishModalAdditionalInfos: InjectionZoneComponent[];\n unpublishModalAdditionalInfos: InjectionZoneComponent[];\n };\n };\n}\n\ntype InjectionZoneArea =\n | 'admin.tutorials.links'\n | 'contentManager.editView.informations'\n | 'contentManager.editView.right-links'\n | 'contentManager.listView.actions'\n | 'contentManager.listView.unpublishModalAdditionalInfos'\n | 'contentManager.listView.deleteModalAdditionalInfos'\n | 'contentManager.listView.publishModalAdditionalInfos'\n | 'contentManager.listView.deleteModalAdditionalInfos';\n\ntype InjectionZoneModule = InjectionZoneArea extends `${infer Word}.${string}` ? Word : never;\ntype InjectionZoneContainer = InjectionZoneArea extends `${string}.${infer Word}.${string}`\n ? Word\n : never;\ntype InjectionZoneBlock = InjectionZoneArea extends `${string}.${string}.${infer Word}`\n ? Word\n : never;\n\nconst InjectionZone = ({ area, ...props }: { area: InjectionZoneArea }) => {\n const components = useInjectionZone(area);\n\n return components.map((component) => <component.Component key={component.name} {...props} />);\n};\n\nexport { InjectionZone, INJECTION_ZONES };\n\nexport type {\n InjectionZoneArea,\n InjectionZoneComponent,\n InjectionZones,\n InjectionZoneModule,\n InjectionZoneContainer,\n InjectionZoneBlock,\n};\n","export const languageNativeNames = {\n ar: 'العربية',\n ca: 'Català',\n cs: 'Čeština',\n de: 'Deutsch',\n dk: 'Dansk',\n en: 'English',\n es: 'Español',\n eu: 'Euskara',\n fr: 'Français',\n gu: 'Gujarati',\n he: 'עברית',\n hu: 'Magyar',\n id: 'Indonesian',\n it: 'Italiano',\n ja: '日本語',\n ko: '한국어',\n ml: 'Malayalam',\n ms: 'Melayu',\n nl: 'Nederlands',\n no: 'Norwegian',\n pl: 'Polski',\n 'pt-BR': 'Português (Brasil)',\n pt: 'Português (Portugal)',\n ru: 'Русский',\n sk: 'Slovenčina',\n sv: 'Swedish',\n th: 'ไทย',\n tr: 'Türkçe',\n uk: 'Українська',\n vi: 'Tiếng Việt',\n 'zh-Hans': '中文 (简体)',\n zh: '中文 (繁體)',\n sa: 'संस्कृत',\n hi: 'हिन्दी',\n} as const;\n","import { ReducersMapObject } from '@reduxjs/toolkit';\nimport { darkTheme, lightTheme } from '@strapi/design-system';\nimport { MenuItem, StrapiAppSetting, StrapiAppSettingLink } from '@strapi/helper-plugin';\nimport invariant from 'invariant';\nimport isFunction from 'lodash/isFunction';\nimport merge from 'lodash/merge';\nimport pick from 'lodash/pick';\nimport { Helmet } from 'react-helmet';\nimport { BrowserRouter } from 'react-router-dom';\nimport { DefaultTheme } from 'styled-components';\n\nimport { App } from './App';\nimport Logo from './assets/images/logo-strapi-2022.svg';\nimport { LANGUAGE_LOCAL_STORAGE_KEY } from './components/LanguageProvider';\nimport { Providers } from './components/Providers';\nimport { HOOKS } from './constants';\nimport { Components, Component } from './core/apis/Components';\nimport { CustomFields } from './core/apis/CustomFields';\nimport { Field, Fields } from './core/apis/Fields';\nimport { Middleware, Middlewares } from './core/apis/Middlewares';\nimport { Plugin, PluginConfig } from './core/apis/Plugin';\nimport { Reducers } from './core/apis/Reducers';\nimport { Store, configureStore } from './core/store/configure';\nimport { getBasename } from './core/utils/basename';\nimport { Handler, createHook } from './core/utils/createHook';\nimport {\n INJECTION_ZONES,\n InjectionZoneBlock,\n InjectionZoneComponent,\n InjectionZoneContainer,\n InjectionZoneModule,\n InjectionZones,\n} from './shared/components/InjectionZone';\nimport { languageNativeNames } from './translations/languageNativeNames';\n\nconst {\n INJECT_COLUMN_IN_TABLE,\n MUTATE_COLLECTION_TYPES_LINKS,\n MUTATE_EDIT_VIEW_LAYOUT,\n MUTATE_SINGLE_TYPES_LINKS,\n} = HOOKS;\n\ninterface StrapiAppConstructorArgs extends Partial<Pick<StrapiApp, 'appPlugins'>> {\n adminConfig?: {\n config?: StrapiApp['customConfigurations'];\n bootstrap?: StrapiApp['customBootstrapConfiguration'];\n };\n}\n\ninterface StrapiAppPlugin {\n bootstrap: (\n args: Pick<\n StrapiApp,\n | 'addSettingsLink'\n | 'addSettingsLinks'\n | 'getPlugin'\n | 'injectContentManagerComponent'\n | 'injectAdminComponent'\n | 'registerHook'\n >\n ) => void;\n register: (app: StrapiApp) => void;\n registerTrads: (args: {\n locales: string[];\n }) => Promise<{ data: Record<string, string>; locale: string }[]>;\n}\n\nclass StrapiApp {\n admin: {\n injectionZones: InjectionZones;\n };\n appPlugins: Record<string, StrapiAppPlugin>;\n configurations: {\n authLogo: string;\n head: { favicon: string };\n locales: string[];\n menuLogo: string;\n notifications: { releases: boolean };\n themes: { light: DefaultTheme; dark: DefaultTheme };\n translations: Record<string, Record<string, string>>;\n tutorials: boolean;\n };\n customBootstrapConfiguration: unknown;\n customConfigurations: {\n auth?: { logo: string };\n head?: { favicon: string };\n locales?: string[];\n menu?: { logo: string };\n notifications?: { releases: boolean };\n theme?: { light: DefaultTheme; dark: DefaultTheme };\n translations?: Record<string, unknown>;\n tutorials?: boolean;\n };\n customFields: CustomFields;\n hooksDict: Record<string, ReturnType<typeof createHook>>;\n library: {\n components: Components;\n fields: Fields;\n };\n menu: MenuItem[];\n middlewares: Middlewares;\n plugins: Record<string, Plugin>;\n reducers: Reducers;\n settings: Record<string, StrapiAppSetting>;\n translations: StrapiApp['configurations']['translations'];\n\n constructor({ adminConfig, appPlugins }: StrapiAppConstructorArgs = {}) {\n this.customConfigurations = adminConfig?.config ?? {};\n this.customBootstrapConfiguration = adminConfig?.bootstrap;\n this.configurations = {\n authLogo: Logo,\n head: { favicon: '' },\n locales: ['en'],\n menuLogo: Logo,\n notifications: { releases: true },\n themes: { light: lightTheme, dark: darkTheme },\n translations: {},\n tutorials: true,\n };\n this.appPlugins = appPlugins || {};\n this.library = {\n components: new Components(),\n fields: new Fields(),\n };\n this.middlewares = new Middlewares();\n this.plugins = {};\n this.reducers = new Reducers();\n this.translations = {};\n this.hooksDict = {};\n this.admin = {\n injectionZones: INJECTION_ZONES,\n };\n this.customFields = new CustomFields();\n this.menu = [];\n this.settings = {\n global: {\n id: 'global',\n intlLabel: {\n id: 'Settings.global',\n defaultMessage: 'Global Settings',\n },\n links: [],\n },\n };\n }\n\n addComponents = (components: Component | Component[]) => {\n if (Array.isArray(components)) {\n components.map((compo) => this.library.components.add(compo));\n } else {\n this.library.components.add(components);\n }\n };\n\n addCorePluginMenuLink = (link: MenuItem) => {\n const stringifiedLink = JSON.stringify(link);\n\n invariant(link.to, `link.to should be defined for ${stringifiedLink}`);\n invariant(\n typeof link.to === 'string',\n `Expected link.to to be a string instead received ${typeof link.to}`\n );\n invariant(\n ['/plugins/content-type-builder', '/plugins/upload'].includes(link.to),\n 'This method is not available for your plugin'\n );\n invariant(\n link.intlLabel?.id && link.intlLabel?.defaultMessage,\n `link.intlLabel.id & link.intlLabel.defaultMessage for ${stringifiedLink}`\n );\n\n this.menu.push(link);\n };\n\n addFields = (fields: Field | Field[]) => {\n if (Array.isArray(fields)) {\n fields.map((field) => this.library.fields.add(field));\n } else {\n this.library.fields.add(fields);\n }\n };\n\n addMenuLink = (link: MenuItem) => {\n const stringifiedLink = JSON.stringify(link);\n\n invariant(link.to, `link.to should be defined for ${stringifiedLink}`);\n invariant(\n typeof link.to === 'string',\n `Expected link.to to be a string instead received ${typeof link.to}`\n );\n invariant(\n link.intlLabel?.id && link.intlLabel?.defaultMessage,\n `link.intlLabel.id & link.intlLabel.defaultMessage for ${stringifiedLink}`\n );\n invariant(\n link.Component && typeof link.Component === 'function',\n `link.Component should be a valid React Component`\n );\n invariant(\n link.icon && typeof link.icon === 'function',\n `link.Icon should be a valid React Component`\n );\n\n this.menu.push(link);\n };\n\n addMiddlewares = (middlewares: Middleware[]) => {\n middlewares.forEach((middleware) => {\n this.middlewares.add(middleware);\n });\n };\n\n addReducers = (reducers: ReducersMapObject) => {\n Object.keys(reducers).forEach((reducerName) => {\n this.reducers.add(reducerName, reducers[reducerName]);\n });\n };\n\n addSettingsLink = (sectionId: keyof StrapiApp['settings'], link: StrapiAppSettingLink) => {\n invariant(this.settings[sectionId], 'The section does not exist');\n\n const stringifiedLink = JSON.stringify(link);\n\n invariant(link.id, `link.id should be defined for ${stringifiedLink}`);\n invariant(\n link.intlLabel?.id && link.intlLabel?.defaultMessage,\n `link.intlLabel.id & link.intlLabel.defaultMessage for ${stringifiedLink}`\n );\n invariant(link.to, `link.to should be defined for ${stringifiedLink}`);\n invariant(\n link.Component && typeof link.Component === 'function',\n `link.Component should be a valid React Component`\n );\n\n this.settings[sectionId].links.push(link);\n };\n\n addSettingsLinks = (sectionId: keyof StrapiApp['settings'], links: StrapiAppSettingLink[]) => {\n invariant(this.settings[sectionId], 'The section does not exist');\n invariant(Array.isArray(links), 'TypeError expected links to be an array');\n\n links.forEach((link) => {\n this.addSettingsLink(sectionId, link);\n });\n };\n\n async bootstrap() {\n Object.keys(this.appPlugins).forEach((plugin) => {\n const bootstrap = this.appPlugins[plugin].bootstrap;\n\n if (bootstrap) {\n bootstrap({\n addSettingsLink: this.addSettingsLink,\n addSettingsLinks: this.addSettingsLinks,\n getPlugin: this.getPlugin,\n injectContentManagerComponent: this.injectContentManagerComponent,\n injectAdminComponent: this.injectAdminComponent,\n registerHook: this.registerHook,\n });\n }\n });\n\n if (isFunction(this.customBootstrapConfiguration)) {\n this.customBootstrapConfiguration({\n addComponents: this.addComponents,\n addFields: this.addFields,\n addMenuLink: this.addMenuLink,\n addReducers: this.addReducers,\n addSettingsLink: this.addSettingsLink,\n addSettingsLinks: this.addSettingsLinks,\n getPlugin: this.getPlugin,\n injectContentManagerComponent: this.injectContentManagerComponent,\n injectAdminComponent: this.injectAdminComponent,\n registerHook: this.registerHook,\n });\n }\n }\n\n bootstrapAdmin = async () => {\n await this.createCustomConfigurations();\n\n this.createHook(INJECT_COLUMN_IN_TABLE);\n this.createHook(MUTATE_COLLECTION_TYPES_LINKS);\n this.createHook(MUTATE_SINGLE_TYPES_LINKS);\n this.createHook(MUTATE_EDIT_VIEW_LAYOUT);\n\n return Promise.resolve();\n };\n\n createCustomConfigurations = async () => {\n if (this.customConfigurations?.locales) {\n this.configurations.locales = [\n 'en',\n ...(this.customConfigurations.locales?.filter((loc) => loc !== 'en') || []),\n ];\n }\n\n if (this.customConfigurations?.auth?.logo) {\n this.configurations.authLogo = this.customConfigurations.auth.logo;\n }\n\n if (this.customConfigurations?.menu?.logo) {\n this.configurations.menuLogo = this.customConfigurations.menu.logo;\n }\n\n if (this.customConfigurations?.head?.favicon) {\n this.configurations.head.favicon = this.customConfigurations.head.favicon;\n }\n\n if (this.customConfigurations?.theme) {\n const darkTheme = this.customConfigurations.theme.dark;\n const lightTheme = this.customConfigurations.theme.light;\n\n if (!darkTheme && !lightTheme) {\n console.warn(\n `[deprecated] In future versions, Strapi will stop supporting this theme customization syntax. The theme configuration accepts a light and a dark key to customize each theme separately. See https://docs.strapi.io/developer-docs/latest/development/admin-customization.html#theme-extension.`\n );\n merge(this.configurations.themes.light, this.customConfigurations.theme);\n }\n\n if (lightTheme) merge(this.configurations.themes.light, lightTheme);\n\n if (darkTheme) merge(this.configurations.themes.dark, darkTheme);\n }\n\n if (this.customConfigurations?.notifications?.releases !== undefined) {\n this.configurations.notifications.releases = this.customConfigurations.notifications.releases;\n }\n\n if (this.customConfigurations?.tutorials !== undefined) {\n this.configurations.tutorials = this.customConfigurations.tutorials;\n }\n };\n\n createHook = (name: string) => {\n this.hooksDict[name] = createHook();\n };\n\n createSettingSection = (section: StrapiAppSetting, links: StrapiAppSettingLink[]) => {\n invariant(section.id, 'section.id should be defined');\n invariant(\n section.intlLabel?.id && section.intlLabel?.defaultMessage,\n 'section.intlLabel should be defined'\n );\n\n invariant(Array.isArray(links), 'TypeError expected links to be an array');\n invariant(this.settings[section.id] === undefined, 'A similar section already exists');\n\n this.settings[section.id] = { ...section, links: [] };\n\n links.forEach((link) => {\n this.addSettingsLink(section.id, link);\n });\n };\n\n createStore = () => {\n const store = configureStore(this.middlewares.middlewares, this.reducers.reducers);\n\n return store as Store;\n };\n\n getAdminInjectedComponents = (\n moduleName: InjectionZoneModule,\n containerName: InjectionZoneContainer,\n blockName: InjectionZoneBlock\n ): InjectionZoneComponent[] => {\n try {\n // @ts-expect-error – we have a catch block so if you don't pass it correctly we still return an array.\n return this.admin.injectionZones[moduleName][containerName][blockName] || [];\n } catch (err) {\n console.error('Cannot get injected component', err);\n\n return [];\n }\n };\n\n getPlugin = (pluginId: PluginConfig['id']) => {\n return this.plugins[pluginId];\n };\n\n async initialize() {\n Object.keys(this.appPlugins).forEach((plugin) => {\n this.appPlugins[plugin].register(this);\n });\n }\n\n injectContentManagerComponent = <TContainerName extends keyof InjectionZones['contentManager']>(\n containerName: TContainerName,\n blockName: keyof InjectionZones['contentManager'][TContainerName],\n component: InjectionZoneComponent\n ) => {\n invariant(\n this.admin.injectionZones.contentManager[containerName]?.[blockName],\n `The ${containerName} ${String(blockName)} zone is not defined in the content manager`\n );\n invariant(component, 'A Component must be provided');\n\n // @ts-expect-error – we've alredy checked above that the block exists.\n this.admin.injectionZones.contentManager[containerName][blockName].push(component);\n };\n\n injectAdminComponent = <TContainerName extends keyof InjectionZones['admin']>(\n containerName: TContainerName,\n blockName: keyof InjectionZones['admin'][TContainerName],\n component: InjectionZoneComponent\n ) => {\n invariant(\n this.admin.injectionZones.admin[containerName]?.[blockName],\n `The ${containerName} ${String(blockName)} zone is not defined in the admin`\n );\n invariant(component, 'A Component must be provided');\n\n // @ts-expect-error – we've alredy checked above that the block exists.\n this.admin.injectionZones.admin[containerName][blockName].push(component);\n };\n\n /**\n * Load the admin translations\n * @returns {Object} The imported admin translations\n */\n async loadAdminTrads() {\n const arrayOfPromises = this.configurations.locales.map((locale) => {\n return import(`./translations/${locale}.json`)\n .then(({ default: data }) => {\n return { data, locale };\n })\n .catch(() => {\n return { data: null, locale };\n });\n });\n const adminLocales = await Promise.all(arrayOfPromises);\n\n const translations = adminLocales.reduce<{ [locale: string]: Record<string, string> }>(\n (acc, current) => {\n if (current.data) {\n acc[current.locale] = current.data;\n }\n\n return acc;\n },\n {}\n );\n\n return translations;\n }\n\n /**\n * Load the application's translations and merged the custom translations\n * with the default ones.\n *\n */\n async loadTrads() {\n const adminTranslations = await this.loadAdminTrads();\n\n const arrayOfPromises = Object.keys(this.appPlugins)\n .map((plugin) => {\n const registerTrads = this.appPlugins[plugin].registerTrads;\n\n if (registerTrads) {\n return registerTrads({ locales: this.configurations.locales });\n }\n\n return null;\n })\n .filter((a) => a);\n\n type Translation = Awaited<ReturnType<StrapiAppPlugin['registerTrads']>>[number];\n\n const pluginsTrads = (await Promise.all(arrayOfPromises)) as Array<Translation[]>;\n const mergedTrads = pluginsTrads.reduce<{ [locale: string]: Translation['data'] }>(\n (acc, currentPluginTrads) => {\n const pluginTrads = currentPluginTrads.reduce<{ [locale: string]: Translation['data'] }>(\n (acc1, current) => {\n acc1[current.locale] = current.data;\n\n return acc1;\n },\n {}\n );\n\n Object.keys(pluginTrads).forEach((locale) => {\n acc[locale] = { ...acc[locale], ...pluginTrads[locale] };\n });\n\n return acc;\n },\n {}\n );\n\n const translations = this.configurations.locales.reduce<{\n [locale: string]: Translation['data'];\n }>((acc, current) => {\n acc[current] = {\n ...adminTranslations[current],\n ...(mergedTrads[current] || {}),\n ...(this.customConfigurations?.translations?.[current] ?? {}),\n };\n\n return acc;\n }, {});\n\n this.configurations.translations = translations;\n\n return Promise.resolve();\n }\n\n registerHook = (name: string, fn: Handler) => {\n invariant(\n this.hooksDict[name],\n `The hook ${name} is not defined. You are trying to register a hook that does not exist in the application.`\n );\n this.hooksDict[name].register(fn);\n };\n\n registerPlugin = (pluginConf: PluginConfig) => {\n const plugin = new Plugin(pluginConf);\n\n this.plugins[plugin.pluginId] = plugin;\n };\n\n runHookSeries = (name: string, asynchronous = false) =>\n asynchronous ? this.hooksDict[name].runSeriesAsync() : this.hooksDict[name].runSeries();\n\n runHookWaterfall = (\n name: string,\n initialValue: unknown,\n asynchronous = false,\n store?: unknown\n ) => {\n return asynchronous\n ? this.hooksDict[name].runWaterfallAsync(initialValue, store)\n : this.hooksDict[name].runWaterfall(initialValue, store);\n };\n\n runHookParallel = (name: string) => this.hooksDict[name].runParallel();\n\n render() {\n const store = this.createStore();\n const localeNames = pick(languageNativeNames, this.configurations.locales || []);\n\n const {\n components: { components },\n fields: { fields },\n } = this.library;\n\n return (\n <Providers\n authLogo={this.configurations.authLogo}\n components={components}\n fields={fields}\n customFields={this.customFields}\n localeNames={localeNames}\n getAdminInjectedComponents={this.getAdminInjectedComponents}\n getPlugin={this.getPlugin}\n messages={this.configurations.translations}\n menu={this.menu}\n menuLogo={this.configurations.menuLogo}\n plugins={this.plugins}\n runHookParallel={this.runHookParallel}\n runHookWaterfall={(name, initialValue, async = false) => {\n return this.runHookWaterfall(name, initialValue, async, store);\n }}\n runHookSeries={this.runHookSeries}\n themes={this.configurations.themes}\n settings={this.settings}\n showTutorials={this.configurations.tutorials}\n showReleaseNotification={this.configurations.notifications.releases}\n store={store}\n >\n <Helmet\n htmlAttributes={{ lang: localStorage.getItem(LANGUAGE_LOCAL_STORAGE_KEY) || 'en' }}\n />\n <BrowserRouter basename={getBasename()}>\n <App />\n </BrowserRouter>\n </Providers>\n );\n }\n}\n\nexport { StrapiApp, StrapiAppConstructorArgs };\n","/* eslint-disable no-undef */\nimport { getFetchClient } from '@strapi/helper-plugin';\nimport { createRoot } from 'react-dom/client';\n\nimport { StrapiApp, StrapiAppConstructorArgs } from './StrapiApp';\n\nimport type { FeaturesService } from '@strapi/types';\n\ninterface RenderAdminArgs {\n customisations: StrapiAppConstructorArgs['adminConfig'];\n plugins: StrapiAppConstructorArgs['appPlugins'];\n features?: FeaturesService['config'];\n}\n\nconst renderAdmin = async (\n mountNode: HTMLElement | null,\n { plugins, customisations, features }: RenderAdminArgs\n) => {\n if (!mountNode) {\n throw new Error('[@strapi/admin]: Could not find the root element to mount the admin app');\n }\n\n window.strapi = {\n /**\n * This ENV variable is passed from the strapi instance, by default no url is set\n * in the config and therefore the instance returns you an empty string so URLs are relative.\n *\n * To ensure that the backendURL is always set, we use the window.location.origin as a fallback.\n */\n backendURL: process.env.STRAPI_ADMIN_BACKEND_URL || window.location.origin,\n isEE: false,\n telemetryDisabled: process.env.STRAPI_TELEMETRY_DISABLED === 'true' ? true : false,\n future: {\n isEnabled: (name: keyof FeaturesService['config']) => {\n return features?.future?.[name] === true;\n },\n },\n // @ts-expect-error – there's pollution from the global scope of Node.\n features: {\n SSO: 'sso',\n AUDIT_LOGS: 'audit-logs',\n REVIEW_WORKFLOWS: 'review-workflows',\n /**\n * If we don't get the license then we know it's not EE\n * so no feature is enabled.\n */\n isEnabled: () => false,\n },\n projectType: 'Community',\n flags: {\n nps: false,\n promoteEE: true,\n },\n };\n\n const { get } = getFetchClient();\n\n interface ProjectType extends Pick<Window['strapi'], 'flags'> {\n isEE: boolean;\n features: {\n name: string;\n }[];\n }\n\n try {\n const {\n data: {\n data: { isEE, features, flags },\n },\n } = await get<{ data: ProjectType }>('/admin/project-type');\n\n window.strapi.isEE = isEE;\n window.strapi.flags = flags;\n window.strapi.features = {\n ...window.strapi.features,\n isEnabled: (featureName) => features.some((feature) => feature.name === featureName),\n };\n window.strapi.projectType = isEE ? 'Enterprise' : 'Community';\n } catch (err) {\n /**\n * If this fails, we simply don't activate any EE features.\n * Should we warn clearer in the UI?\n */\n console.error(err);\n }\n\n const app = new StrapiApp({\n adminConfig: customisations,\n appPlugins: plugins,\n });\n\n await app.bootstrapAdmin();\n await app.initialize();\n await app.bootstrap();\n await app.loadTrads();\n\n createRoot(mountNode).render(app.render());\n\n if (\n typeof module !== 'undefined' &&\n module &&\n 'hot' in module &&\n typeof module.hot === 'object' &&\n module.hot !== null &&\n 'accept' in module.hot &&\n typeof module.hot.accept === 'function'\n ) {\n module.hot.accept();\n }\n};\n\nexport { renderAdmin };\nexport type { RenderAdminArgs };\n"],"names":["reducer","initialState","locale","auth","PasswordInput","Form","get","useReactQuery","Login","LoginCE","hasAdmin","uuid","menuLogo","authLogo","currentStep","GuidedTourProviderComponent","options","SET_PERMISSIONS","action","RESET_PROPS","GET_DATA","GET_DATA_SUCCEEDED","appReducer","cmAppReducer","editViewLayoutManagerReducer","editViewCrudReducer","Logo","darkTheme","lightTheme","configureStore","features"],"mappings":"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"}