@strapi/admin 5.0.3 → 5.0.5

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 (164) hide show
  1. package/dist/admin/{ApplicationInfoPage-ExK1vktC.mjs → ApplicationInfoPage-BsWmhqDq.mjs} +2 -2
  2. package/dist/admin/{ApplicationInfoPage-ExK1vktC.mjs.map → ApplicationInfoPage-BsWmhqDq.mjs.map} +1 -1
  3. package/dist/admin/{ApplicationInfoPage-KGxVL-rm.js → ApplicationInfoPage-MGbrAjXu.js} +2 -2
  4. package/dist/admin/{ApplicationInfoPage-KGxVL-rm.js.map → ApplicationInfoPage-MGbrAjXu.js.map} +1 -1
  5. package/dist/admin/{AuthenticatedLayout-GHedQ62F.mjs → AuthenticatedLayout-6n9hYAUi.mjs} +6 -6
  6. package/dist/admin/AuthenticatedLayout-6n9hYAUi.mjs.map +1 -0
  7. package/dist/admin/{AuthenticatedLayout-DxyWXA7n.js → AuthenticatedLayout-DBJc2D_3.js} +6 -6
  8. package/dist/admin/AuthenticatedLayout-DBJc2D_3.js.map +1 -0
  9. package/dist/admin/{CreatePage-BrkmbwiI.js → CreatePage-DHpJlXLS.js} +2 -2
  10. package/dist/admin/{CreatePage-BrkmbwiI.js.map → CreatePage-DHpJlXLS.js.map} +1 -1
  11. package/dist/admin/{CreatePage-DdUGmRuB.js → CreatePage-Dio9Rn1o.js} +2 -2
  12. package/dist/admin/{CreatePage-DdUGmRuB.js.map → CreatePage-Dio9Rn1o.js.map} +1 -1
  13. package/dist/admin/{CreatePage-Begn-7bt.mjs → CreatePage-m-lAl7Xp.mjs} +2 -2
  14. package/dist/admin/{CreatePage-Begn-7bt.mjs.map → CreatePage-m-lAl7Xp.mjs.map} +1 -1
  15. package/dist/admin/{CreatePage-D_uPQwIO.mjs → CreatePage-qGxxEdXp.mjs} +2 -2
  16. package/dist/admin/{CreatePage-D_uPQwIO.mjs.map → CreatePage-qGxxEdXp.mjs.map} +1 -1
  17. package/dist/admin/{CreateView-BG7tOOr3.js → CreateView-B0SHslmU.js} +2 -2
  18. package/dist/admin/{CreateView-BG7tOOr3.js.map → CreateView-B0SHslmU.js.map} +1 -1
  19. package/dist/admin/{CreateView-C_iwqrUp.js → CreateView-DUtL5Qks.js} +2 -2
  20. package/dist/admin/{CreateView-C_iwqrUp.js.map → CreateView-DUtL5Qks.js.map} +1 -1
  21. package/dist/admin/{CreateView-BuSvt3Dz.mjs → CreateView-NumS4HKr.mjs} +2 -2
  22. package/dist/admin/{CreateView-BuSvt3Dz.mjs.map → CreateView-NumS4HKr.mjs.map} +1 -1
  23. package/dist/admin/{CreateView-CCrezexf.mjs → CreateView-vMzESYUv.mjs} +2 -2
  24. package/dist/admin/{CreateView-CCrezexf.mjs.map → CreateView-vMzESYUv.mjs.map} +1 -1
  25. package/dist/admin/{EditPage-DSz_5wcl.mjs → EditPage-4orwjiR5.mjs} +3 -3
  26. package/dist/admin/{EditPage-DSz_5wcl.mjs.map → EditPage-4orwjiR5.mjs.map} +1 -1
  27. package/dist/admin/{EditPage-C-gi2d0A.js → EditPage-BBKEYf_n.js} +5 -5
  28. package/dist/admin/{EditPage-C-gi2d0A.js.map → EditPage-BBKEYf_n.js.map} +1 -1
  29. package/dist/admin/{EditPage-5L7BJ8dA.js → EditPage-BSFE1F2L.js} +3 -3
  30. package/dist/admin/{EditPage-5L7BJ8dA.js.map → EditPage-BSFE1F2L.js.map} +1 -1
  31. package/dist/admin/{EditPage-CcJiL1DV.mjs → EditPage-ECBU2qqf.mjs} +5 -5
  32. package/dist/admin/{EditPage-CcJiL1DV.mjs.map → EditPage-ECBU2qqf.mjs.map} +1 -1
  33. package/dist/admin/{EditPage-DcWwhYDE.mjs → EditPage-gvDbFn1y.mjs} +3 -3
  34. package/dist/admin/{EditPage-DcWwhYDE.mjs.map → EditPage-gvDbFn1y.mjs.map} +1 -1
  35. package/dist/admin/{EditPage-DQFHvTB8.js → EditPage-iHZa5Nu5.js} +3 -3
  36. package/dist/admin/{EditPage-DQFHvTB8.js.map → EditPage-iHZa5Nu5.js.map} +1 -1
  37. package/dist/admin/{EditView-LDAyPGE2.js → EditView-CWik3eny.js} +3 -3
  38. package/dist/admin/{EditView-LDAyPGE2.js.map → EditView-CWik3eny.js.map} +1 -1
  39. package/dist/admin/{EditView-D_pJVBhQ.mjs → EditView-DKOOjBW0.mjs} +3 -3
  40. package/dist/admin/{EditView-D_pJVBhQ.mjs.map → EditView-DKOOjBW0.mjs.map} +1 -1
  41. package/dist/admin/{EditViewPage-Ciiu0Gnh.js → EditViewPage-CFCACYFa.js} +3 -3
  42. package/dist/admin/{EditViewPage-Ciiu0Gnh.js.map → EditViewPage-CFCACYFa.js.map} +1 -1
  43. package/dist/admin/{EditViewPage-BPHtINxR.mjs → EditViewPage-D8mKid9j.mjs} +3 -3
  44. package/dist/admin/{EditViewPage-BPHtINxR.mjs.map → EditViewPage-D8mKid9j.mjs.map} +1 -1
  45. package/dist/admin/{EventsTable-BGIFg3WE.mjs → EventsTable-C8oKlTd3.mjs} +2 -2
  46. package/dist/admin/{EventsTable-BGIFg3WE.mjs.map → EventsTable-C8oKlTd3.mjs.map} +1 -1
  47. package/dist/admin/{EventsTable-DdndH0LK.js → EventsTable-D8giZmBa.js} +2 -2
  48. package/dist/admin/{EventsTable-DdndH0LK.js.map → EventsTable-D8giZmBa.js.map} +1 -1
  49. package/dist/admin/{HomePage-BhbPpItK.mjs → HomePage-B-BofT2F.mjs} +3 -3
  50. package/dist/admin/{HomePage-BhbPpItK.mjs.map → HomePage-B-BofT2F.mjs.map} +1 -1
  51. package/dist/admin/{HomePage-C5hmptcm.js → HomePage-BaOPor0N.js} +2 -2
  52. package/dist/admin/{HomePage-C5hmptcm.js.map → HomePage-BaOPor0N.js.map} +1 -1
  53. package/dist/admin/{HomePage-DXzTpAZX.js → HomePage-CJjsu6yJ.js} +3 -3
  54. package/dist/admin/{HomePage-DXzTpAZX.js.map → HomePage-CJjsu6yJ.js.map} +1 -1
  55. package/dist/admin/{HomePage-B8vP9a18.mjs → HomePage-DftXMtXs.mjs} +2 -2
  56. package/dist/admin/{HomePage-B8vP9a18.mjs.map → HomePage-DftXMtXs.mjs.map} +1 -1
  57. package/dist/admin/{InstalledPlugins-DKiC8cuH.js → InstalledPlugins-C_WU42p3.js} +2 -2
  58. package/dist/admin/{InstalledPlugins-DKiC8cuH.js.map → InstalledPlugins-C_WU42p3.js.map} +1 -1
  59. package/dist/admin/{InstalledPlugins-4w7kYzQK.mjs → InstalledPlugins-D4XgqAE_.mjs} +2 -2
  60. package/dist/admin/{InstalledPlugins-4w7kYzQK.mjs.map → InstalledPlugins-D4XgqAE_.mjs.map} +1 -1
  61. package/dist/admin/{Layout-BW__Xc_t.js → Layout-CP-XfKda.js} +3 -3
  62. package/dist/admin/{Layout-BW__Xc_t.js.map → Layout-CP-XfKda.js.map} +1 -1
  63. package/dist/admin/{Layout-Cmas3lwV.mjs → Layout-PGrRt4g4.mjs} +3 -3
  64. package/dist/admin/{Layout-Cmas3lwV.mjs.map → Layout-PGrRt4g4.mjs.map} +1 -1
  65. package/dist/admin/{ListPage-D1LrT0ZH.js → ListPage-8ZpwGM0e.js} +5 -5
  66. package/dist/admin/{ListPage-D1LrT0ZH.js.map → ListPage-8ZpwGM0e.js.map} +1 -1
  67. package/dist/admin/{ListPage-BTtWvtXz.mjs → ListPage-B5tnzp6F.mjs} +2 -2
  68. package/dist/admin/{ListPage-BTtWvtXz.mjs.map → ListPage-B5tnzp6F.mjs.map} +1 -1
  69. package/dist/admin/{ListPage-BBMhpoBZ.mjs → ListPage-B8GpAjjo.mjs} +2 -2
  70. package/dist/admin/{ListPage-BBMhpoBZ.mjs.map → ListPage-B8GpAjjo.mjs.map} +1 -1
  71. package/dist/admin/{ListPage-DYsVULtS.js → ListPage-CB50Vpzh.js} +3 -3
  72. package/dist/admin/{ListPage-DYsVULtS.js.map → ListPage-CB50Vpzh.js.map} +1 -1
  73. package/dist/admin/{ListPage-CCXNmmwa.js → ListPage-Cm-yYhzz.js} +2 -2
  74. package/dist/admin/{ListPage-CCXNmmwa.js.map → ListPage-Cm-yYhzz.js.map} +1 -1
  75. package/dist/admin/{ListPage-B4vXPhNT.js → ListPage-Cq3mdJ9l.js} +2 -2
  76. package/dist/admin/{ListPage-B4vXPhNT.js.map → ListPage-Cq3mdJ9l.js.map} +1 -1
  77. package/dist/admin/{ListPage-C0Q36j35.js → ListPage-DboP5xvn.js} +2 -2
  78. package/dist/admin/{ListPage-C0Q36j35.js.map → ListPage-DboP5xvn.js.map} +1 -1
  79. package/dist/admin/{ListPage-fBfd-mur.mjs → ListPage-SLyhfNah.mjs} +5 -5
  80. package/dist/admin/{ListPage-fBfd-mur.mjs.map → ListPage-SLyhfNah.mjs.map} +1 -1
  81. package/dist/admin/{ListPage-OIbrNVQP.mjs → ListPage-TaQflXg5.mjs} +3 -3
  82. package/dist/admin/{ListPage-OIbrNVQP.mjs.map → ListPage-TaQflXg5.mjs.map} +1 -1
  83. package/dist/admin/{ListPage-D83DCZnE.mjs → ListPage-hGfH_9zI.mjs} +2 -2
  84. package/dist/admin/{ListPage-D83DCZnE.mjs.map → ListPage-hGfH_9zI.mjs.map} +1 -1
  85. package/dist/admin/{ListView-qufYUAFF.mjs → ListView-BJnflC9h.mjs} +3 -3
  86. package/dist/admin/{ListView-qufYUAFF.mjs.map → ListView-BJnflC9h.mjs.map} +1 -1
  87. package/dist/admin/{ListView-B93uYHCO.js → ListView-CYqhqQ5F.js} +3 -3
  88. package/dist/admin/{ListView-B93uYHCO.js.map → ListView-CYqhqQ5F.js.map} +1 -1
  89. package/dist/admin/{ListView-rBFAihm1.js → ListView-DD0JJANI.js} +3 -3
  90. package/dist/admin/{ListView-rBFAihm1.js.map → ListView-DD0JJANI.js.map} +1 -1
  91. package/dist/admin/{ListView-DweW2hC4.mjs → ListView-DW1TOj76.mjs} +3 -3
  92. package/dist/admin/{ListView-DweW2hC4.mjs.map → ListView-DW1TOj76.mjs.map} +1 -1
  93. package/dist/admin/{Login-BLLhLpjY.js → Login-BUKAGgYo.js} +2 -2
  94. package/dist/admin/{Login-BLLhLpjY.js.map → Login-BUKAGgYo.js.map} +1 -1
  95. package/dist/admin/{Login-BfY3qHT-.mjs → Login-C03cBo90.mjs} +2 -2
  96. package/dist/admin/{Login-BfY3qHT-.mjs.map → Login-C03cBo90.mjs.map} +1 -1
  97. package/dist/admin/{MagicLinkEE-tyAVVcrF.mjs → MagicLinkEE-BDUghPZR.mjs} +3 -3
  98. package/dist/admin/{MagicLinkEE-tyAVVcrF.mjs.map → MagicLinkEE-BDUghPZR.mjs.map} +1 -1
  99. package/dist/admin/{MagicLinkEE-DmJbRy16.js → MagicLinkEE-ChH11T9g.js} +3 -3
  100. package/dist/admin/{MagicLinkEE-DmJbRy16.js.map → MagicLinkEE-ChH11T9g.js.map} +1 -1
  101. package/dist/admin/{MarketplacePage-BjqbBfYn.js → MarketplacePage-DH3yG1LP.js} +4 -10
  102. package/dist/admin/MarketplacePage-DH3yG1LP.js.map +1 -0
  103. package/dist/admin/{MarketplacePage-Ce4cgMEU.mjs → MarketplacePage-nqklHBRT.mjs} +4 -10
  104. package/dist/admin/MarketplacePage-nqklHBRT.mjs.map +1 -0
  105. package/dist/admin/{ProfilePage-7k8cFYVH.js → ProfilePage-DAHD2joV.js} +3 -3
  106. package/dist/admin/{ProfilePage-7k8cFYVH.js.map → ProfilePage-DAHD2joV.js.map} +1 -1
  107. package/dist/admin/{ProfilePage-CX6Lwk1X.mjs → ProfilePage-kV_9teLb.mjs} +3 -3
  108. package/dist/admin/{ProfilePage-CX6Lwk1X.mjs.map → ProfilePage-kV_9teLb.mjs.map} +1 -1
  109. package/dist/admin/{PurchaseAuditLogs-Dh_RoXug.mjs → PurchaseAuditLogs-D0k9DTpT.mjs} +2 -2
  110. package/dist/admin/{PurchaseAuditLogs-Dh_RoXug.mjs.map → PurchaseAuditLogs-D0k9DTpT.mjs.map} +1 -1
  111. package/dist/admin/{PurchaseAuditLogs-80N7n97E.js → PurchaseAuditLogs-lp-DrWVM.js} +2 -2
  112. package/dist/admin/{PurchaseAuditLogs-80N7n97E.js.map → PurchaseAuditLogs-lp-DrWVM.js.map} +1 -1
  113. package/dist/admin/{PurchaseSingleSignOn-iWoN27DO.js → PurchaseSingleSignOn-C7Q4_S9b.js} +2 -2
  114. package/dist/admin/{PurchaseSingleSignOn-iWoN27DO.js.map → PurchaseSingleSignOn-C7Q4_S9b.js.map} +1 -1
  115. package/dist/admin/{PurchaseSingleSignOn-BbDXmLgD.mjs → PurchaseSingleSignOn-DCVtDAHy.mjs} +2 -2
  116. package/dist/admin/{PurchaseSingleSignOn-BbDXmLgD.mjs.map → PurchaseSingleSignOn-DCVtDAHy.mjs.map} +1 -1
  117. package/dist/admin/{SelectRoles-CCxu1S4k.mjs → SelectRoles-41l96-2X.mjs} +3 -3
  118. package/dist/admin/{SelectRoles-CCxu1S4k.mjs.map → SelectRoles-41l96-2X.mjs.map} +1 -1
  119. package/dist/admin/{SelectRoles-CQnu_yr5.js → SelectRoles-CAvI66nC.js} +3 -3
  120. package/dist/admin/{SelectRoles-CQnu_yr5.js.map → SelectRoles-CAvI66nC.js.map} +1 -1
  121. package/dist/admin/{SingleSignOnPage-B5bvxVii.js → SingleSignOnPage-CmKhH0D-.js} +3 -3
  122. package/dist/admin/{SingleSignOnPage-B5bvxVii.js.map → SingleSignOnPage-CmKhH0D-.js.map} +1 -1
  123. package/dist/admin/{SingleSignOnPage-EWjZ_2-i.mjs → SingleSignOnPage-WFivqAhu.mjs} +3 -3
  124. package/dist/admin/{SingleSignOnPage-EWjZ_2-i.mjs.map → SingleSignOnPage-WFivqAhu.mjs.map} +1 -1
  125. package/dist/admin/{Table-C8w728Ob.js → Table-BKFhuknL.js} +2 -2
  126. package/dist/admin/{Table-C8w728Ob.js.map → Table-BKFhuknL.js.map} +1 -1
  127. package/dist/admin/{Table-zgTdjYBv.mjs → Table-DbC9nEt6.mjs} +2 -2
  128. package/dist/admin/{Table-zgTdjYBv.mjs.map → Table-DbC9nEt6.mjs.map} +1 -1
  129. package/dist/admin/{TokenTypeSelect-B8cX28-g.js → TokenTypeSelect-CiLmxtYv.js} +2 -2
  130. package/dist/admin/{TokenTypeSelect-B8cX28-g.js.map → TokenTypeSelect-CiLmxtYv.js.map} +1 -1
  131. package/dist/admin/{TokenTypeSelect-Fwipw6kK.mjs → TokenTypeSelect-DjXGtS0f.mjs} +2 -2
  132. package/dist/admin/{TokenTypeSelect-Fwipw6kK.mjs.map → TokenTypeSelect-DjXGtS0f.mjs.map} +1 -1
  133. package/dist/admin/{UseCasePage-M7fTI694.js → UseCasePage-CJgKzfPO.js} +2 -2
  134. package/dist/admin/{UseCasePage-M7fTI694.js.map → UseCasePage-CJgKzfPO.js.map} +1 -1
  135. package/dist/admin/{UseCasePage-DfElOUHK.mjs → UseCasePage-uaQecKai.mjs} +2 -2
  136. package/dist/admin/{UseCasePage-DfElOUHK.mjs.map → UseCasePage-uaQecKai.mjs.map} +1 -1
  137. package/dist/admin/{constants-DLYBy6ok.js → constants-A7qPNH9R.js} +2 -2
  138. package/dist/admin/{constants-DLYBy6ok.js.map → constants-A7qPNH9R.js.map} +1 -1
  139. package/dist/admin/{constants-kiTswp4u.mjs → constants-B1ll13Cl.mjs} +2 -2
  140. package/dist/admin/{constants-kiTswp4u.mjs.map → constants-B1ll13Cl.mjs.map} +1 -1
  141. package/dist/admin/{index-BTbZqind.js → index-CkChgOuW.js} +30 -30
  142. package/dist/admin/{index-BTbZqind.js.map → index-CkChgOuW.js.map} +1 -1
  143. package/dist/admin/{index-O8wWF32N.mjs → index-DZqM9TPB.mjs} +30 -30
  144. package/dist/admin/{index-O8wWF32N.mjs.map → index-DZqM9TPB.mjs.map} +1 -1
  145. package/dist/admin/index.js +1 -1
  146. package/dist/admin/index.mjs +1 -1
  147. package/dist/admin/{useAdminRoles-DckmHD5S.mjs → useAdminRoles-5tDiNLn-.mjs} +2 -2
  148. package/dist/admin/{useAdminRoles-DckmHD5S.mjs.map → useAdminRoles-5tDiNLn-.mjs.map} +1 -1
  149. package/dist/admin/{useAdminRoles-B2bLCaRj.js → useAdminRoles-CHNxbXxY.js} +2 -2
  150. package/dist/admin/{useAdminRoles-B2bLCaRj.js.map → useAdminRoles-CHNxbXxY.js.map} +1 -1
  151. package/dist/admin/{validation-CDQ9YkqE.mjs → validation-DUbtPjIz.mjs} +2 -2
  152. package/dist/admin/{validation-CDQ9YkqE.mjs.map → validation-DUbtPjIz.mjs.map} +1 -1
  153. package/dist/admin/{validation-CjYeZe1-.js → validation-DX8xoo2f.js} +2 -2
  154. package/dist/admin/{validation-CjYeZe1-.js.map → validation-DX8xoo2f.js.map} +1 -1
  155. package/dist/package.json.d.ts +2 -2
  156. package/dist/server/src/domain/action/index.d.ts +71 -6
  157. package/dist/server/src/domain/action/index.d.ts.map +1 -1
  158. package/dist/server/src/services/permission.d.ts +23 -3
  159. package/dist/server/src/services/permission.d.ts.map +1 -1
  160. package/package.json +9 -9
  161. package/dist/admin/AuthenticatedLayout-DxyWXA7n.js.map +0 -1
  162. package/dist/admin/AuthenticatedLayout-GHedQ62F.mjs.map +0 -1
  163. package/dist/admin/MarketplacePage-BjqbBfYn.js.map +0 -1
  164. package/dist/admin/MarketplacePage-Ce4cgMEU.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"AuthenticatedLayout-GHedQ62F.mjs","sources":["../../admin/src/components/GuidedTour/Modal.tsx","../../admin/src/components/MainNav/MainNav.tsx","../../admin/src/components/MainNav/NavBrand.tsx","../../admin/src/components/MainNav/NavLink.tsx","../../admin/src/components/MainNav/NavUser.tsx","../../admin/src/components/LeftMenu.tsx","../../admin/src/assets/images/onboarding-preview.png","../../admin/src/components/Onboarding.tsx","../../admin/src/components/PluginsInitializer.tsx","../../admin/src/hooks/useMenu.ts","../../admin/src/layouts/AuthenticatedLayout.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Button,\n Flex,\n FlexComponent,\n FocusTrap,\n IconButton,\n Portal,\n Typography,\n LinkButton,\n} from '@strapi/design-system';\nimport { ArrowRight, Cross } from '@strapi/icons';\nimport get from 'lodash/get';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useTracking } from '../../features/Tracking';\n\nimport { LAYOUT_DATA, STATES } from './constants';\nimport { Number, VerticalDivider } from './Ornaments';\nimport { GuidedTourContextValue, useGuidedTour } from './Provider';\n\n/* -------------------------------------------------------------------------------------------------\n * GuidedTourModal\n * -----------------------------------------------------------------------------------------------*/\n\nconst GuidedTourModal = () => {\n const guidedTour = useGuidedTour('GuidedTourModal', (state) => state);\n\n const {\n currentStep,\n guidedTourState,\n setCurrentStep,\n setStepState,\n isGuidedTourVisible,\n setSkipped,\n } = guidedTour;\n\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n\n if (!currentStep || !isGuidedTourVisible) {\n return null;\n }\n\n const stepData = get(LAYOUT_DATA, currentStep);\n const sectionKeys = Object.keys(guidedTourState);\n const [sectionName, stepName] = currentStep.split('.') as [\n keyof GuidedTourContextValue['guidedTourState'],\n string,\n ];\n const sectionIndex = sectionKeys.indexOf(sectionName);\n const stepIndex = Object.keys(guidedTourState[sectionName]).indexOf(stepName);\n const hasSectionAfter = sectionIndex < sectionKeys.length - 1;\n const hasStepAfter = stepIndex < Object.keys(guidedTourState[sectionName]).length - 1;\n\n const handleCtaClick = () => {\n setStepState(currentStep, true);\n\n if (stepData) {\n trackUsage(stepData.trackingEvent);\n }\n\n setCurrentStep(null);\n };\n\n const handleSkip = () => {\n setSkipped(true);\n setCurrentStep(null);\n trackUsage('didSkipGuidedtour');\n };\n\n return (\n <Portal>\n <ModalWrapper onClick={handleCtaClick} padding={8} justifyContent=\"center\">\n <FocusTrap onEscape={handleCtaClick}>\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n background=\"neutral0\"\n width={`66rem`}\n shadow=\"popupShadow\"\n hasRadius\n padding={4}\n gap={8}\n role=\"dialog\"\n aria-modal\n onClick={(e) => e.stopPropagation()}\n >\n <Flex justifyContent=\"flex-end\">\n <IconButton\n onClick={handleCtaClick}\n withTooltip={false}\n label={formatMessage({\n id: 'app.utils.close-label',\n defaultMessage: 'Close',\n })}\n >\n <Cross />\n </IconButton>\n </Flex>\n <Box\n paddingLeft={7}\n paddingRight={7}\n paddingBottom={!hasStepAfter && !hasSectionAfter ? 8 : 0}\n >\n <GuidedTourStepper\n title={stepData && 'title' in stepData ? stepData.title : undefined}\n cta={stepData && 'cta' in stepData ? stepData.cta : undefined}\n onCtaClick={handleCtaClick}\n sectionIndex={sectionIndex}\n stepIndex={stepIndex}\n hasSectionAfter={hasSectionAfter}\n >\n {stepData && 'content' in stepData && <GuidedTourContent {...stepData.content} />}\n </GuidedTourStepper>\n </Box>\n {!(!hasStepAfter && !hasSectionAfter) && (\n <Flex justifyContent=\"flex-end\">\n <Button variant=\"tertiary\" onClick={handleSkip}>\n {formatMessage({\n id: 'app.components.GuidedTour.skip',\n defaultMessage: 'Skip the tour',\n })}\n </Button>\n </Flex>\n )}\n </Flex>\n </FocusTrap>\n </ModalWrapper>\n </Portal>\n );\n};\n\nconst ModalWrapper = styled<FlexComponent>(Flex)`\n position: fixed;\n z-index: 4;\n inset: 0;\n /* this is theme.colors.neutral800 with opacity */\n background: ${({ theme }) => `${theme.colors.neutral800}1F`};\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * GuidedTourStepper\n * -----------------------------------------------------------------------------------------------*/\n\ninterface GuidedTourStepperProps {\n title: MessageDescriptor | undefined;\n children: React.ReactNode;\n cta?: {\n title: MessageDescriptor;\n target?: string;\n };\n onCtaClick: () => void;\n sectionIndex: number;\n stepIndex: number;\n hasSectionAfter: boolean;\n}\n\nconst GuidedTourStepper = ({\n title,\n children,\n cta,\n onCtaClick,\n sectionIndex,\n stepIndex,\n hasSectionAfter,\n}: GuidedTourStepperProps) => {\n const { formatMessage } = useIntl();\n\n const hasSectionBefore = sectionIndex > 0;\n const hasStepsBefore = stepIndex > 0;\n const nextSectionIndex = sectionIndex + 1;\n\n return (\n <>\n <Flex alignItems=\"stretch\">\n <Flex marginRight={8} justifyContent=\"center\" minWidth={`3rem`}>\n {hasSectionBefore && <VerticalDivider state={STATES.IS_DONE} minHeight={`2.4rem`} />}\n </Flex>\n <Typography variant=\"sigma\" textColor=\"primary600\">\n {formatMessage({\n id: 'app.components.GuidedTour.title',\n defaultMessage: '3 steps to get started',\n })}\n </Typography>\n </Flex>\n <Flex>\n <Flex marginRight={8} minWidth={`3rem`}>\n <Number\n state={hasStepsBefore ? STATES.IS_DONE : STATES.IS_ACTIVE}\n paddingTop={3}\n paddingBottom={3}\n >\n {sectionIndex + 1}\n </Number>\n </Flex>\n {title && (\n <Typography variant=\"alpha\" fontWeight=\"bold\" textColor=\"neutral800\" tag=\"h3\" id=\"title\">\n {formatMessage(title)}\n </Typography>\n )}\n </Flex>\n <Flex alignItems=\"stretch\">\n <Flex marginRight={8} direction=\"column\" justifyContent=\"center\" minWidth={`3rem`}>\n {hasSectionAfter && (\n <>\n <VerticalDivider state={STATES.IS_DONE} />\n {hasStepsBefore && (\n <Number state={STATES.IS_ACTIVE} paddingTop={3}>\n {nextSectionIndex + 1}\n </Number>\n )}\n </>\n )}\n </Flex>\n <Box>\n {children}\n {cta &&\n (cta.target ? (\n <LinkButton\n tag={NavLink}\n endIcon={<ArrowRight />}\n onClick={onCtaClick}\n to={cta.target}\n >\n {formatMessage(cta.title)}\n </LinkButton>\n ) : (\n <Button endIcon={<ArrowRight />} onClick={onCtaClick}>\n {formatMessage(cta.title)}\n </Button>\n ))}\n </Box>\n </Flex>\n {hasStepsBefore && hasSectionAfter && (\n <Box paddingTop={3}>\n <Flex marginRight={8} justifyContent=\"center\" width={`3rem`}>\n <VerticalDivider state={STATES.IS_DONE} minHeight={`2.4rem`} />\n </Flex>\n </Box>\n )}\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * GuidedTourContent\n * -----------------------------------------------------------------------------------------------*/\n\ninterface GuidedTourContentProps\n extends Required<Pick<MessageDescriptor, 'defaultMessage' | 'id'>> {}\n\nconst GuidedTourContent = ({ id, defaultMessage }: GuidedTourContentProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4} paddingBottom={6}>\n {formatMessage(\n { id, defaultMessage },\n {\n documentationLink: DocumentationLink,\n b: Bold,\n p: Paragraph,\n light: Light,\n ul: List,\n li: ListItem,\n }\n )}\n </Flex>\n );\n};\n\nconst DocumentationLink = (children: React.ReactNode) => (\n <Typography\n tag=\"a\"\n textColor=\"primary600\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href=\"https://docs.strapi.io/developer-docs/latest/developer-resources/database-apis-reference/rest-api.html#api-parameters\"\n >\n {children}\n </Typography>\n);\n\nconst Bold = (children: React.ReactNode) => (\n <Typography fontWeight=\"semiBold\">{children}</Typography>\n);\n\nconst Paragraph = (children: React.ReactNode) => <Typography>{children}</Typography>;\n\nconst Light = (children: React.ReactNode) => (\n <Typography textColor=\"neutral600\">{children}</Typography>\n);\n\nconst List = (children: React.ReactNode) => (\n <Box paddingLeft={6}>\n <ul>{children}</ul>\n </Box>\n);\n\nconst LiStyled = styled.li`\n list-style: disc;\n &::marker {\n color: ${({ theme }) => theme.colors.neutral800};\n }\n`;\n\nconst ListItem = (children: React.ReactNode) => <LiStyled>{children}</LiStyled>;\n\nexport { GuidedTourModal };\n","import { Flex, FlexComponent, FlexProps } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nconst MainNavWrapper = styled<FlexComponent<'nav'>>(Flex)`\n border-right: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\nconst MainNav = (props: FlexProps<'nav'>) => (\n <MainNavWrapper\n alignItems=\"normal\"\n tag=\"nav\"\n background=\"neutral0\"\n direction=\"column\"\n height=\"100vh\"\n position=\"sticky\"\n top={0}\n zIndex={2}\n width={10}\n {...props}\n />\n);\n\nexport { MainNav };\n","import { Box, Flex, type FlexComponent, VisuallyHidden } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useConfiguration } from '../../features/Configuration';\n\nconst BrandIconWrapper = styled<FlexComponent>(Flex)`\n svg,\n img {\n border-radius: ${({ theme }) => theme.borderRadius};\n object-fit: contain;\n height: 2.4rem;\n width: 2.4rem;\n }\n`;\n\nexport const NavBrand = () => {\n const { formatMessage } = useIntl();\n const {\n logos: { menu },\n } = useConfiguration('LeftMenu');\n return (\n <Box padding={3}>\n <BrandIconWrapper direction=\"column\" justifyContent=\"center\" width=\"3.2rem\" height=\"3.2rem\">\n <img\n src={menu.custom?.url || menu.default}\n alt={formatMessage({\n id: 'app.components.LeftMenu.logo.alt',\n defaultMessage: 'Application logo',\n })}\n width=\"100%\"\n height=\"100%\"\n />\n <VisuallyHidden>\n <span>\n {formatMessage({\n id: 'app.components.LeftMenu.navbrand.title',\n defaultMessage: 'Strapi Dashboard',\n })}\n </span>\n <span>\n {formatMessage({\n id: 'app.components.LeftMenu.navbrand.workplace',\n defaultMessage: 'Workplace',\n })}\n </span>\n </VisuallyHidden>\n </BrandIconWrapper>\n </Box>\n );\n};\n","import * as React from 'react';\n\nimport {\n Tooltip,\n TooltipProps as DSTooltipProps,\n Badge,\n BadgeProps,\n AccessibleIcon,\n} from '@strapi/design-system';\nimport { NavLink as RouterLink, LinkProps } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\n/* -------------------------------------------------------------------------------------------------\n * Link\n * -----------------------------------------------------------------------------------------------*/\nconst MainNavLinkWrapper = styled(RouterLink)`\n text-decoration: none;\n display: flex;\n border-radius: ${({ theme }) => theme.borderRadius};\n background: ${({ theme }) => theme.colors.neutral0};\n color: ${({ theme }) => theme.colors.neutral500};\n position: relative;\n width: fit-content;\n padding-block: 0.6rem;\n padding-inline: 0.6rem;\n\n &:hover,\n &.active {\n background: ${({ theme }) => theme.colors.neutral100};\n }\n\n &:hover {\n svg path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n color: ${({ theme }) => theme.colors.neutral700};\n }\n\n &.active {\n svg path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n\n color: ${({ theme }) => theme.colors.primary600};\n font-weight: 500;\n }\n`;\n\nconst LinkImpl = ({ children, ...props }: LinkProps) => {\n return <MainNavLinkWrapper {...props}>{children}</MainNavLinkWrapper>;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Tooltip\n * -----------------------------------------------------------------------------------------------*/\nconst TooltipImpl = ({ children, label, position = 'right' }: NavLink.TooltipProps) => {\n return (\n <Tooltip side={position} label={label} delayDuration={0}>\n <span>{children}</span>\n </Tooltip>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Icon\n * -----------------------------------------------------------------------------------------------*/\nconst IconImpl = ({ label, children }: { label: string; children: React.ReactNode }) => {\n if (!children) {\n return null;\n }\n return <AccessibleIcon label={label}>{children}</AccessibleIcon>;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Badge\n * -----------------------------------------------------------------------------------------------*/\nconst CustomBadge = styled(Badge)`\n /* override default badge styles to change the border radius of the Base element in the Design System */\n border-radius: ${({ theme }) => theme.spaces[10]};\n height: 2rem;\n`;\n\nconst BadgeImpl = ({ children, label, ...props }: NavLink.NavBadgeProps) => {\n if (!children) {\n return null;\n }\n return (\n <CustomBadge\n position=\"absolute\"\n top=\"-0.8rem\"\n left=\"1.7rem\"\n aria-label={label}\n active={false}\n {...props}\n >\n {children}\n </CustomBadge>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EXPORTS\n * -----------------------------------------------------------------------------------------------*/\n\nconst NavLink = {\n Link: LinkImpl,\n Tooltip: TooltipImpl,\n Icon: IconImpl,\n Badge: BadgeImpl,\n};\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nnamespace NavLink {\n export interface NavBadgeProps extends BadgeProps {\n children: React.ReactNode;\n label: string;\n }\n\n export interface TooltipProps {\n children: React.ReactNode;\n label?: string;\n position?: DSTooltipProps['side'];\n }\n}\n\nexport { NavLink };\n","import * as React from 'react';\n\nimport { Flex, Menu, ButtonProps, VisuallyHidden, Avatar } from '@strapi/design-system';\nimport { SignOut } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useAuth } from '../../features/Auth';\n\nexport interface NavUserProps extends ButtonProps {\n initials: string;\n children?: React.ReactNode;\n}\n\nconst MenuTrigger = styled(Menu.Trigger)`\n height: 100%;\n border-radius: 0;\n border-width: 1px 0 0 0;\n border-color: ${({ theme }) => theme.colors.neutral150};\n border-style: solid;\n padding: ${({ theme }) => theme.spaces[3]};\n // padding 12px - 1px border width\n padding-top: 11px;\n // Prevent empty pixel from appearing below the main nav\n overflow: hidden;\n`;\n\nconst MenuContent = styled(Menu.Content)`\n left: ${({ theme }) => theme.spaces[5]};\n`;\n\nconst MenuItem = styled(Menu.Item)`\n & > span {\n width: 100%;\n display: flex;\n align-items: center;\n gap: ${({ theme }) => theme.spaces[3]};\n justify-content: space-between;\n }\n`;\n\nexport const NavUser = ({ children, initials, ...props }: NavUserProps) => {\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const logout = useAuth('Logout', (state) => state.logout);\n const handleProfile = () => {\n navigate('/me');\n };\n const handleLogout = () => {\n logout();\n navigate('/auth/login');\n };\n\n return (\n <Flex justifyContent=\"center\" {...props}>\n <Menu.Root>\n <MenuTrigger endIcon={null} fullWidth justifyContent=\"center\">\n <Avatar.Item delayMs={0} fallback={initials} />\n <VisuallyHidden tag=\"span\">{children}</VisuallyHidden>\n </MenuTrigger>\n <MenuContent popoverPlacement=\"top-center\" zIndex={3}>\n <MenuItem onSelect={handleProfile}>\n {formatMessage({\n id: 'global.profile',\n defaultMessage: 'Profile',\n })}\n </MenuItem>\n\n <MenuItem onSelect={handleLogout} color=\"danger600\">\n {formatMessage({\n id: 'app.components.LeftMenu.logout',\n defaultMessage: 'Logout',\n })}\n <SignOut />\n </MenuItem>\n </MenuContent>\n </Menu.Root>\n </Flex>\n );\n};\n","import * as React from 'react';\n\nimport { Divider, Flex, FlexComponent, useCollator } from '@strapi/design-system';\nimport { Lightning } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useLocation } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useAuth } from '../features/Auth';\nimport { useTracking } from '../features/Tracking';\nimport { Menu, MenuItem } from '../hooks/useMenu';\nimport { getDisplayName } from '../utils/users';\n\nimport { MainNav } from './MainNav/MainNav';\nimport { NavBrand } from './MainNav/NavBrand';\nimport { NavLink } from './MainNav/NavLink';\nimport { NavUser } from './MainNav/NavUser';\n\nconst sortLinks = (links: MenuItem[]) => {\n return links.sort((a, b) => {\n // if no position is defined, we put the link in the position of the external plugins, before the plugins list\n const positionA = a.position ?? 6;\n const positionB = b.position ?? 6;\n\n if (positionA < positionB) {\n return -1;\n } else {\n return 1;\n }\n });\n};\n\nconst NavLinkBadgeCounter = styled(NavLink.Badge)`\n span {\n color: ${({ theme }) => theme.colors.neutral0};\n }\n`;\n\nconst NavLinkBadgeLock = styled(NavLink.Badge)`\n background-color: transparent;\n`;\n\nconst NavListWrapper = styled<FlexComponent<'ul'>>(Flex)`\n overflow-y: auto;\n`;\n\ninterface LeftMenuProps extends Pick<Menu, 'generalSectionLinks' | 'pluginsSectionLinks'> {}\n\nconst LeftMenu = ({ generalSectionLinks, pluginsSectionLinks }: LeftMenuProps) => {\n const user = useAuth('AuthenticatedApp', (state) => state.user);\n const { trackUsage } = useTracking();\n const { pathname } = useLocation();\n const userDisplayName = getDisplayName(user);\n const { formatMessage, locale } = useIntl();\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const initials = userDisplayName\n .split(' ')\n .map((name) => name.substring(0, 1))\n .join('')\n .substring(0, 2);\n\n const handleClickOnLink = (destination: string) => {\n trackUsage('willNavigate', { from: pathname, to: destination });\n };\n\n const listLinksAlphabeticallySorted = [...pluginsSectionLinks, ...generalSectionLinks].sort(\n (a, b) => formatter.compare(formatMessage(a.intlLabel), formatMessage(b.intlLabel))\n );\n const listLinks = sortLinks(listLinksAlphabeticallySorted);\n\n return (\n <MainNav>\n <NavBrand />\n\n <Divider />\n\n <NavListWrapper tag=\"ul\" gap={3} direction=\"column\" flex={1} paddingTop={3} paddingBottom={3}>\n {listLinks.length > 0\n ? listLinks.map((link) => {\n const LinkIcon = link.icon;\n const badgeContentLock = link?.licenseOnly ? (\n <Lightning fill=\"warning500\" />\n ) : undefined;\n\n const badgeContentNumeric =\n link.notificationsCount && link.notificationsCount > 0\n ? link.notificationsCount.toString()\n : undefined;\n\n const labelValue = formatMessage(link.intlLabel);\n return (\n <Flex tag=\"li\" key={link.to}>\n <NavLink.Tooltip label={labelValue}>\n <NavLink.Link\n to={link.to}\n onClick={() => handleClickOnLink(link.to)}\n aria-label={labelValue}\n >\n <NavLink.Icon label={labelValue}>\n <LinkIcon width=\"2rem\" height=\"2rem\" fill=\"neutral500\" />\n </NavLink.Icon>\n {badgeContentLock ? (\n <NavLinkBadgeLock\n label=\"locked\"\n textColor=\"neutral500\"\n paddingLeft={0}\n paddingRight={0}\n >\n {badgeContentLock}\n </NavLinkBadgeLock>\n ) : badgeContentNumeric ? (\n <NavLinkBadgeCounter\n label={badgeContentNumeric}\n backgroundColor=\"primary600\"\n width=\"2.3rem\"\n color=\"neutral0\"\n >\n {badgeContentNumeric}\n </NavLinkBadgeCounter>\n ) : null}\n </NavLink.Link>\n </NavLink.Tooltip>\n </Flex>\n );\n })\n : null}\n </NavListWrapper>\n <NavUser initials={initials}>{userDisplayName}</NavUser>\n </MainNav>\n );\n};\n\nexport { LeftMenu };\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHAAAABQCAMAAAD2kgFPAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAL9UExURff3+fv7+/X19/Pz9/n5+fv7/f39//////39/UdwTPn5+/X1+fHx++/v8fn5/fHx8/Pz9eTk6e/v8/Hx9fHx/e3u7/X19e3t8evr7+fn6YuR96Gl+OLi59LS2dTU2uvr++nq7ff39+Tk697e4ufn6+vr7enq69ra3tDQ1uDg5/nv7+Dg5Nzc4Nzd4tTU2OTk5+fn7djY3tzc5M/Q1NjY3NLS1tbX3MzM0u/w9crK0unp7+np+/37+8rK0MjIzu/v78PEy9ra4djY4eLi6t7e5NbW2s7O1OLk5+/v/Ojp/dra5MPF9+3u89bX3mxz99DQ2fj4+OLi5PHx8dvb29ze+/f3/7C1+t7e5+vr69PX2OPk/Jydl/T09/f393R7+Gdw96ytuNTU3M7O2ODg6a6vumJq9+3u/dTW/PP19cXGzd7e4O3t7cnK+/f3+uLk683O+Z2h+dLU+9/h++no3/j39bq0pu/v7fv7+fHz9XF4911l93V8+bm5waGirffr7Kqrtq+z9qentF9o93mA+fj4+vr6++/v7/f3++vt+83N0/Pz8+vr8dbY+sjJ98zO1crM0vn5//Pz/ra6n/n59d/g4quvp9fa2OTn66Shm8C2prCuq+/r67Gxr9LLvbCwrcfEwK+vqZSahtPVw5WafKiknff5+ZqapvHw7fv4+YGH9dnb++Tn/Ly8xvfo6Oq5v////6WlsNrc3vPz+dLU2Ovr/eTn+drc4JWXo6Wp+cLE++nr74+T+enr4s7Q1m5098bArefk5Nze0ODc1Pf3/MC8tuDi0KWrh/n39+Tk4qmv+77Cqdjc3PX1/c7S0vv7/7ixo/Px7Z+jh62x+8rMtrS6pZebjY+Rn9bayKuvm+vp5+np6aWrjVJa9fX38bi895+fm1pk9620oevp6bS0r+fp6fv19VZg9fn19X6F+fnz89LS3MDAyPXi4uextvX1+vPW2OCVnYmJl9zc4Xh4iff3+mdy97y8xPf3977C96mpsbS29YeHlamv84qS87i89VXx8BYAAAD/dFJOU319fX19fX19fQB9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19bX19fX19fX19fX19Lwd9fX19fX19fX19fX19fX1lfX19fX19fX19fX19fX19fX19fX19fW1dED59fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0PfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1mfX19bX1eXn0/fX19fX0/fSWruQsAAAbiSURBVGje7VkFcBtHFD2SbnXO9UA56dRIiiRbFFlmiO3asWKIE0MYGrQbZmjDDA1T06RJ03DSJA2XMaWUmZmZmWm6ki3lTie59kTSlJ40p5nV//tud//b/28P0WiG/PgdkhBMHKzRaBDNyWXSRoqi4ki57CQk/MZsKna58pqa0N4gnoNcNgQZzBV8ml9aYMYaW4DQRKjvDC8MG7TkG0ff+gmobifD78gXYQZE0++8b08tXFg/4uf6H46VLh5Rf/P8TERtXG1ykkmtI7zmtZFLhtW9NWfOnCUjhy0Z+T2CJOFYJMOS+YtPzV884teDX8879sKIhfUHSxG1AzH0ajXhB3UjPxpaVzd37uyls5cunRv30Fx0vhxRDfXdLLbhZWU2W1mGGNtbEPuXdStz+2ycu/+kbmv4YLOWZ3merdEyNSweW0KMxXkW1+J4RwxeMeRfCIbhMsu7/LUd0QgkSYkW8TS5wznVlg93W8LnEiUooAIqFYBQkxBnSIxkMStJVLUPoah90cCqlSurWkSI6ijdGGv0v0Wv3iaIa1i9KLJ+QoR0Wk0l2YCo6jO5unpq9dTJkyesW7uu+oZp09q0iLDXvOQNG0r9uxbtNdU2hIcidV4YELTpt40C17WIsMk9oAyapxMbNxiCR4uRWAP2TNOZ3S/KCmdEyfggEORQ9Xh4kKPkM8O6AjbIS/BWfZLED+N5StmbisEZRttRTzVD2LZtUdW09gPbFx0tatuE0Y2E/YYeVYlI0E7ELYjET68vJJS9nZdRc1shq7dgzRIeKfrtj0W//LTojTDCOE2pMsjb3BiQhSo+gF3jOJNhKQwPUgqcBdqhER+Cc4efUOvL8nFKwhxn/tjKtNLTY12HO3z15ecnTiz4ODaEkUEBgoKqIRAdgR3u8NmC4wuOd3g/noSoWoILGgHU5w7/jGpxbQ28dJRl3/AoPfR6jKIUqcnKstkm2fpnZOlZGSFBqUgQtLt6/9vvSf0Y/19qENYbgIpHSQBvFk6ekgy2NZO9SIqk1Pag7Ttvvttb6pu3Ps9lTtvsqsiTtmLpnC83L8fpyjXlmpMVhDYS+IKbN6YkBNINaubunWiMphTh9d0L1tcqMj6IDwKdszgeYYR9u6old/bsi1SsRohhs3heVBK2mz1QLQTthOe3Xyj1q8xJ3uwZZ/A5jbI17GlPyUlNTk31jHN6DQoyhgLuQNVm7l7bWZkPb719FBnKCIcOTJ8h9bVi8GO16hCdLAxR1N9E6HSsDlOmDGjLNBOlcnR6KlY6RFitODzFlrCM799qyt1eZV1KEqhU+E+/5EiE8EML/8qgXVdIfbPHZhfkrrp2bL5J2sqmJptL8nOzi9fnFxekKgjLUOB/rub58obMCEGjVoGzI7x8986Z5zydsDcQkMXWQguPJG4No25tslXYt08Vs62N8TaYvUnKNVSh6tVBuxl798iE7/QYuRSO5jhB2koYGCHZ4PBwKV2MnF5BhlPqxsqC1uJshKChUDIk3qsOPPmy1LeXIIgMzToYWtqK6nS0vRNNC+P1gqgUPrwFfYuFP+DiWK5hCwhjFzSF/WuzOnd2uwt9fEcZ4dp+l52VxSWvPueQb4ugMc7lcY8GhA+iC5+CETqLhV8Ww5iwmmbKsD4glPHtg3bIhJ/mMpucuelpabK8jqVyqdkVOea0nOtzTR4FYQoKvM1MadcJfSUjvO+uB2MlfP+hgrtLAoUf5VAhzPCe++MepVD4gAmlw71bZMLvnZ5ucBhpe0+ZDokuUPgpnJETofDtkYSfEjhUKP8ks0G5eaOoVPjbpt8t9XUYOU+6gfZYZIUEytMOzmB39OzJGThaQZgBv1EPFeIr/AiHCnEMmmiHCgMnnJHI4oFNjGzySEBGVDZsD2g+ovChX3DzjpCeptT1AaEdf8CgHbKgcbnSXBUmoykvRyb8ZKMnrSIzz2Q2myKV+iHhY0laJeGRfhLhW/dcqWulxqOOkOFNp7v78IRm/BZkiztiF6WRDxX85zRFIKTDGfu3PCr1SxcEmGd1jMDKhD9+jE6kRZHWdrILSh3CTsVAXZqa5eWUhA8P7UqGuuu0bfpDso3fuJXjDILHIBc+LQgp6XaHMd1o4HpFyvgZzUzpE49Jn5563wv+qRk/ej6culFSCG96RBc74UcmnHJnH2A5K/xdj0t9S0oLirMrvSWrKmSlvvMmZ3GBuTI/u7IkX1nqW1BQ2wzh6FskNY11eyuFH2kC4DJRf581/B+tQHzfK4e9ZsIQBkFHbURgLQMfX9x4vAlh1sMhIYnAhxhYxVgSNE6C+E+F0KWJpZuIrEgs4WBkSI9E8vXQIJrlCWTssRwSajSDJyYoXFYM0Wj+BNjsk7mwYOwbAAAAAElFTkSuQmCC\"","import * as React from 'react';\n\nimport {\n Box,\n Button,\n Divider,\n Flex,\n FlexComponent,\n Popover,\n Typography,\n TypographyComponent,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { Cross, Message, Play, Question, Book, PaperPlane } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport onboardingPreview from '../assets/images/onboarding-preview.png';\nimport { useAppInfo } from '../features/AppInfo';\n\nconst Onboarding = () => {\n const [isOpen, setIsOpen] = React.useState(false);\n const { formatMessage } = useIntl();\n const communityEdition = useAppInfo('Onboarding', (state) => state.communityEdition);\n\n const docLinks = [\n ...DOCUMENTATION_LINKS,\n {\n label: { id: 'Settings.application.get-help', defaultMessage: 'Get help' },\n icon: Message,\n href: communityEdition\n ? 'https://discord.strapi.io'\n : 'https://support.strapi.io/support/home',\n },\n ];\n\n const Icon = isOpen ? Cross : Question;\n\n return (\n <Popover.Root onOpenChange={setIsOpen}>\n <Box position=\"fixed\" bottom={2} right={2}>\n <Popover.Trigger>\n <HelperButton\n aria-label={formatMessage(\n isOpen\n ? {\n id: 'app.components.Onboarding.help.button-close',\n defaultMessage: 'Close help menu',\n }\n : {\n id: 'app.components.Onboarding.help.button',\n defaultMessage: 'Open help menu',\n }\n )}\n >\n <Icon fill=\"buttonNeutral0\" />\n </HelperButton>\n </Popover.Trigger>\n <Popover.Content align=\"end\" side=\"top\" sideOffset={12}>\n <Flex\n justifyContent=\"space-between\"\n paddingBottom={5}\n paddingRight={6}\n paddingLeft={6}\n paddingTop={6}\n >\n <TypographyLineHeight fontWeight=\"bold\">\n {formatMessage({\n id: 'app.components.Onboarding.title',\n defaultMessage: 'Get started videos',\n })}\n </TypographyLineHeight>\n <TextLink\n tag=\"a\"\n href={WATCH_MORE.href}\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n variant=\"pi\"\n textColor=\"primary600\"\n >\n {formatMessage(WATCH_MORE.label)}\n </TextLink>\n </Flex>\n <Divider />\n {VIDEO_LINKS.map(({ href, duration, label }, index) => (\n <VideoLinkWrapper\n tag=\"a\"\n href={href}\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n key={href}\n hasRadius\n paddingTop={4}\n paddingBottom={4}\n paddingLeft={6}\n paddingRight={11}\n >\n <Box paddingRight={5}>\n <Number textColor=\"neutral200\" variant=\"alpha\">\n {index + 1}\n </Number>\n </Box>\n <Box position=\"relative\">\n <Preview src={onboardingPreview} alt=\"\" />\n <IconWrapper\n position=\"absolute\"\n top=\"50%\"\n left=\"50%\"\n background=\"primary600\"\n borderRadius=\"50%\"\n justifyContent=\"center\"\n width={6}\n height={6}\n >\n <Play fill=\"buttonNeutral0\" width=\"1.2rem\" height=\"1.2rem\" />\n </IconWrapper>\n </Box>\n <Flex direction=\"column\" alignItems=\"start\" paddingLeft={4}>\n <Label fontWeight=\"bold\">{formatMessage(label)}</Label>\n <VisuallyHidden>:</VisuallyHidden>\n <Typography textColor=\"neutral600\" variant=\"pi\">\n {duration}\n </Typography>\n </Flex>\n </VideoLinkWrapper>\n ))}\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n gap={2}\n paddingLeft={5}\n paddingTop={2}\n paddingBottom={5}\n >\n {docLinks.map(({ label, href, icon: Icon }) => (\n <Flex gap={3} key={href}>\n <Icon fill=\"primary600\" />\n <TextLink\n tag=\"a\"\n href={href}\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n variant=\"sigma\"\n textColor=\"primary700\"\n >\n {formatMessage(label)}\n </TextLink>\n </Flex>\n ))}\n </Flex>\n </Popover.Content>\n </Box>\n </Popover.Root>\n );\n};\n\n// TODO: use new Button props derived from Box props with next DS release\nconst HelperButton = styled(Button)`\n border-radius: 50%;\n padding: ${({ theme }) => theme.spaces[3]};\n /* Resetting 2rem height defined by Button component */\n height: unset;\n width: unset;\n\n & > span {\n display: flex;\n\n svg {\n width: 1.6rem;\n height: 1.6rem;\n }\n }\n`;\n\nconst IconWrapper = styled<FlexComponent>(Flex)`\n transform: translate(-50%, -50%);\n`;\n\nconst Number = styled<TypographyComponent>(Typography)``;\n\nconst Label = styled<TypographyComponent>(Typography)``;\n\nconst VideoLinkWrapper = styled<FlexComponent<'a'>>(Flex)`\n text-decoration: none;\n\n :focus-visible {\n outline-offset: ${({ theme }) => `-${theme.spaces[1]}`};\n }\n\n :hover {\n background: ${({ theme }) => theme.colors.primary100};\n\n /* Hover style for the number displayed */\n ${Number} {\n color: ${({ theme }) => theme.colors.primary500};\n }\n\n /* Hover style for the label */\n ${Label} {\n color: ${({ theme }) => theme.colors.primary600};\n }\n }\n`;\n\nconst Preview = styled.img`\n width: ${({ theme }) => theme.spaces[10]};\n height: ${({ theme }) => theme.spaces[8]};\n /* Same overlay used in ModalLayout */\n background: ${({ theme }) => `${theme.colors.neutral800}1F`};\n border-radius: ${({ theme }) => theme.borderRadius};\n`;\n\nconst TypographyLineHeight = styled<TypographyComponent>(Typography)`\n /* line height of label and watch more to 1 so they can be better aligned visually */\n line-height: 1;\n`;\n\nconst TextLink = styled<TypographyComponent<'a'>>(Typography)`\n text-decoration: none;\n line-height: 1;\n\n :hover {\n text-decoration: underline;\n }\n`;\n\nconst VIDEO_LINKS = [\n {\n label: {\n id: 'app.components.Onboarding.link.build-content',\n defaultMessage: 'Build a content architecture',\n },\n href: 'https://www.youtube.com/watch?v=G9GjN0RxhkE',\n duration: '5:48',\n },\n {\n label: {\n id: 'app.components.Onboarding.link.manage-content',\n defaultMessage: 'Add & manage content',\n },\n href: 'https://www.youtube.com/watch?v=DEZw4KbybAI',\n duration: '3:18',\n },\n {\n label: { id: 'app.components.Onboarding.link.manage-media', defaultMessage: 'Manage media' },\n href: 'https://www.youtube.com/watch?v=-61MuiMQb38',\n duration: '3:41',\n },\n];\n\nconst WATCH_MORE = {\n href: 'https://www.youtube.com/playlist?list=PL7Q0DQYATmvidz6lEmwE5nIcOAYagxWqq',\n label: {\n id: 'app.components.Onboarding.link.more-videos',\n defaultMessage: 'Watch more videos',\n },\n};\n\nconst DOCUMENTATION_LINKS = [\n {\n label: { id: 'global.documentation', defaultMessage: 'documentation' },\n href: 'https://docs.strapi.io',\n icon: Book,\n },\n {\n label: { id: 'app.static.links.cheatsheet', defaultMessage: 'cheatsheet' },\n href: 'https://strapi-showcase.s3-us-west-2.amazonaws.com/CheatSheet.pdf',\n icon: PaperPlane,\n },\n];\n\nexport { Onboarding };\n","import * as React from 'react';\n\nimport { produce } from 'immer';\nimport set from 'lodash/set';\n\nimport { Page } from '../components/PageHelpers';\nimport { StrapiAppContextValue, useStrapiApp } from '../features/StrapiApp';\n\n/**\n * TODO: this isn't great, and we really should focus on fixing this.\n */\nconst PluginsInitializer = ({ children }: { children: React.ReactNode }) => {\n const appPlugins = useStrapiApp('PluginsInitializer', (state) => state.plugins);\n const [{ plugins }, dispatch] = React.useReducer<React.Reducer<State, Action>, State>(\n reducer,\n initialState,\n () => init(appPlugins)\n );\n const setPlugin = React.useRef((pluginId: string) => {\n dispatch({ type: 'SET_PLUGIN_READY', pluginId });\n });\n\n const hasApluginNotReady = Object.keys(plugins).some(\n (plugin) => plugins[plugin].isReady === false\n );\n\n /**\n *\n * I have spent some time trying to understand what is happening here, and wanted to\n * leave that knowledge for my future me:\n *\n * `initializer` is an undocumented property of the `registerPlugin` API. At the time\n * of writing it seems only to be used by the i18n plugin.\n *\n * How does it work?\n *\n * Every plugin that has an `initializer` component defined, receives the\n * `setPlugin` function as a component prop. In the case of i18n the plugin fetches locales\n * first and calls `setPlugin` with `pluginId` once they are loaded, which then triggers the\n * reducer of the admin app defined above.\n *\n * Once all plugins are set to `isReady: true` the app renders.\n *\n * This API is used to block rendering of the admin app. We should remove that in v5 completely\n * and make sure plugins can inject data into the global store before they are initialized, to avoid\n * having a new prop-callback based communication channel between plugins and the core admin app.\n *\n */\n\n if (hasApluginNotReady) {\n const initializers = Object.keys(plugins).reduce((acc, current) => {\n const InitializerComponent = plugins[current].initializer;\n\n if (InitializerComponent) {\n const key = plugins[current].pluginId;\n\n acc.push(<InitializerComponent key={key} setPlugin={setPlugin.current} />);\n }\n\n return acc;\n }, [] as React.ReactNode[]);\n\n return (\n <>\n {initializers}\n <Page.Loading />\n </>\n );\n }\n\n return children;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Reducer\n * -----------------------------------------------------------------------------------------------*/\n\ninterface State {\n plugins: StrapiAppContextValue['plugins'];\n}\n\nconst initialState: State = {\n plugins: {},\n};\n\ntype SetPluginReadyAction = {\n type: 'SET_PLUGIN_READY';\n pluginId: string;\n};\n\ntype Action = SetPluginReadyAction;\n\nconst reducer: React.Reducer<State, Action> = (state = initialState, action: Action): State =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'SET_PLUGIN_READY': {\n set(draftState, ['plugins', action.pluginId, 'isReady'], true);\n break;\n }\n default:\n return draftState;\n }\n });\n\n/* -------------------------------------------------------------------------------------------------\n * Init state\n * -----------------------------------------------------------------------------------------------*/\n\nconst init = (plugins: State['plugins']): State => {\n return {\n plugins,\n };\n};\n\nexport { PluginsInitializer };\n","import * as React from 'react';\n\nimport { Cog, ShoppingCart, House } from '@strapi/icons';\nimport cloneDeep from 'lodash/cloneDeep';\n\nimport { useTypedSelector } from '../core/store/hooks';\nimport { useAuth, AuthContextValue } from '../features/Auth';\nimport { StrapiAppContextValue, useStrapiApp } from '../features/StrapiApp';\n\n/* -------------------------------------------------------------------------------------------------\n * useMenu\n * -----------------------------------------------------------------------------------------------*/\n\nexport type MenuItem = Omit<StrapiAppContextValue['menu'][number], 'Component'>;\n\nexport interface Menu {\n generalSectionLinks: MenuItem[];\n pluginsSectionLinks: MenuItem[];\n isLoading: boolean;\n}\n\nconst useMenu = (shouldUpdateStrapi: boolean) => {\n const checkUserHasPermissions = useAuth('useMenu', (state) => state.checkUserHasPermissions);\n const menu = useStrapiApp('useMenu', (state) => state.menu);\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const [menuWithUserPermissions, setMenuWithUserPermissions] = React.useState<Menu>({\n generalSectionLinks: [\n {\n icon: House,\n intlLabel: {\n id: 'global.home',\n defaultMessage: 'Home',\n },\n to: '/',\n permissions: [],\n position: 0,\n },\n {\n icon: ShoppingCart,\n intlLabel: {\n id: 'global.marketplace',\n defaultMessage: 'Marketplace',\n },\n to: '/marketplace',\n permissions: permissions.marketplace?.main ?? [],\n position: 7,\n },\n {\n icon: Cog,\n intlLabel: {\n id: 'global.settings',\n defaultMessage: 'Settings',\n },\n to: '/settings',\n // Permissions of this link are retrieved in the init phase\n // using the settings menu\n permissions: [],\n notificationsCount: 0,\n position: 9,\n },\n ],\n pluginsSectionLinks: [],\n isLoading: true,\n });\n const generalSectionLinksRef = React.useRef(menuWithUserPermissions.generalSectionLinks);\n\n React.useEffect(() => {\n async function applyMenuPermissions() {\n const authorizedPluginSectionLinks = await getPluginSectionLinks(\n menu,\n checkUserHasPermissions\n );\n\n const authorizedGeneralSectionLinks = await getGeneralLinks(\n generalSectionLinksRef.current,\n shouldUpdateStrapi,\n checkUserHasPermissions\n );\n\n setMenuWithUserPermissions((state) => ({\n ...state,\n generalSectionLinks: authorizedGeneralSectionLinks,\n pluginsSectionLinks: authorizedPluginSectionLinks,\n isLoading: false,\n }));\n }\n\n applyMenuPermissions();\n }, [\n setMenuWithUserPermissions,\n generalSectionLinksRef,\n menu,\n permissions,\n shouldUpdateStrapi,\n checkUserHasPermissions,\n ]);\n\n return menuWithUserPermissions;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Utils\n * -----------------------------------------------------------------------------------------------*/\n\nconst getGeneralLinks = async (\n generalSectionRawLinks: MenuItem[],\n shouldUpdateStrapi: boolean = false,\n checkUserHasPermissions: AuthContextValue['checkUserHasPermissions']\n) => {\n const generalSectionLinksPermissions = await Promise.all(\n generalSectionRawLinks.map(({ permissions }) => checkUserHasPermissions(permissions))\n );\n\n const authorizedGeneralSectionLinks = generalSectionRawLinks.filter(\n (_, index) => generalSectionLinksPermissions[index].length > 0\n );\n\n const settingsLinkIndex = authorizedGeneralSectionLinks.findIndex(\n (obj) => obj.to === '/settings'\n );\n\n if (settingsLinkIndex === -1) {\n return [];\n }\n\n const authorizedGeneralLinksClone = cloneDeep(authorizedGeneralSectionLinks);\n\n authorizedGeneralLinksClone[settingsLinkIndex].notificationsCount = shouldUpdateStrapi ? 1 : 0;\n\n return authorizedGeneralLinksClone;\n};\n\nconst getPluginSectionLinks = async (\n pluginsSectionRawLinks: MenuItem[],\n checkUserHasPermissions: AuthContextValue['checkUserHasPermissions']\n) => {\n const pluginSectionLinksPermissions = await Promise.all(\n pluginsSectionRawLinks.map(({ permissions }) => checkUserHasPermissions(permissions))\n );\n\n const authorizedPluginSectionLinks = pluginsSectionRawLinks.filter(\n (_, index) => pluginSectionLinksPermissions[index].length > 0\n );\n\n return authorizedPluginSectionLinks;\n};\n\nexport { useMenu };\n","import * as React from 'react';\n\nimport { Box, Flex, SkipToContent } from '@strapi/design-system';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport { Outlet } from 'react-router-dom';\nimport lt from 'semver/functions/lt';\nimport valid from 'semver/functions/valid';\n\nimport packageJSON from '../../../package.json';\nimport { GuidedTourModal } from '../components/GuidedTour/Modal';\nimport { useGuidedTour } from '../components/GuidedTour/Provider';\nimport { LeftMenu } from '../components/LeftMenu';\nimport { NpsSurvey } from '../components/NpsSurvey';\nimport { Onboarding } from '../components/Onboarding';\nimport { Page } from '../components/PageHelpers';\nimport { PluginsInitializer } from '../components/PluginsInitializer';\nimport { PrivateRoute } from '../components/PrivateRoute';\nimport { AppInfoProvider } from '../features/AppInfo';\nimport { useAuth } from '../features/Auth';\nimport { useConfiguration } from '../features/Configuration';\nimport { useTracking } from '../features/Tracking';\nimport { useMenu } from '../hooks/useMenu';\nimport { useOnce } from '../hooks/useOnce';\nimport { useInformationQuery } from '../services/admin';\nimport { hashAdminUserEmail } from '../utils/users';\n\nconst strapiVersion = packageJSON.version;\n\nconst AdminLayout = () => {\n const setGuidedTourVisibility = useGuidedTour(\n 'AdminLayout',\n (state) => state.setGuidedTourVisibility\n );\n const { formatMessage } = useIntl();\n const userInfo = useAuth('AuthenticatedApp', (state) => state.user);\n const [userId, setUserId] = React.useState<string>();\n const { showReleaseNotification } = useConfiguration('AuthenticatedApp');\n\n const { data: appInfo, isLoading: isLoadingAppInfo } = useInformationQuery();\n\n const [tagName, setTagName] = React.useState<string>(strapiVersion);\n\n React.useEffect(() => {\n if (showReleaseNotification) {\n fetch('https://api.github.com/repos/strapi/strapi/releases/latest')\n .then(async (res) => {\n if (!res.ok) {\n return;\n }\n\n const response = (await res.json()) as { tag_name: string | null | undefined };\n\n if (!response.tag_name) {\n throw new Error();\n }\n\n setTagName(response.tag_name);\n })\n .catch(() => {\n /**\n * silence is golden & we'll use the strapiVersion as a fallback\n */\n });\n }\n }, [showReleaseNotification]);\n\n const userRoles = useAuth('AuthenticatedApp', (state) => state.user?.roles);\n\n React.useEffect(() => {\n if (userRoles) {\n const isUserSuperAdmin = userRoles.find(({ code }) => code === 'strapi-super-admin');\n\n if (isUserSuperAdmin && appInfo?.autoReload) {\n setGuidedTourVisibility(true);\n }\n }\n }, [userRoles, appInfo?.autoReload, setGuidedTourVisibility]);\n\n React.useEffect(() => {\n hashAdminUserEmail(userInfo).then((id) => {\n if (id) {\n setUserId(id);\n }\n });\n }, [userInfo]);\n\n const { trackUsage } = useTracking();\n\n const {\n isLoading: isLoadingMenu,\n generalSectionLinks,\n pluginsSectionLinks,\n } = useMenu(checkLatestStrapiVersion(strapiVersion, tagName));\n const { showTutorials } = useConfiguration('Admin');\n\n /**\n * Make sure the event is only send once after accessing the admin panel\n * and not at runtime for example when regenerating the permissions with the ctb\n * or with i18n\n */\n useOnce(() => {\n trackUsage('didAccessAuthenticatedAdministration');\n });\n\n // We don't need to wait for the release query to be fetched before rendering the plugins\n // however, we need the appInfos and the permissions\n if (isLoadingMenu || isLoadingAppInfo) {\n return <Page.Loading />;\n }\n\n return (\n <AppInfoProvider\n {...appInfo}\n userId={userId}\n latestStrapiReleaseTag={tagName}\n shouldUpdateStrapi={checkLatestStrapiVersion(strapiVersion, tagName)}\n >\n <NpsSurvey />\n <PluginsInitializer>\n <DndProvider backend={HTML5Backend}>\n <Box background=\"neutral100\">\n <SkipToContent>\n {formatMessage({ id: 'skipToContent', defaultMessage: 'Skip to content' })}\n </SkipToContent>\n <Flex alignItems=\"flex-start\">\n <LeftMenu\n generalSectionLinks={generalSectionLinks}\n pluginsSectionLinks={pluginsSectionLinks}\n />\n <Box flex={1}>\n <Outlet />\n <GuidedTourModal />\n {showTutorials && <Onboarding />}\n </Box>\n </Flex>\n </Box>\n </DndProvider>\n </PluginsInitializer>\n </AppInfoProvider>\n );\n};\n\nconst PrivateAdminLayout = () => {\n return (\n <PrivateRoute>\n <AdminLayout />\n </PrivateRoute>\n );\n};\n\nconst checkLatestStrapiVersion = (\n currentPackageVersion: string,\n latestPublishedVersion: string = ''\n): boolean => {\n if (!valid(currentPackageVersion) || !valid(latestPublishedVersion)) {\n return false;\n }\n\n return lt(currentPackageVersion, latestPublishedVersion);\n};\n\nexport { AdminLayout, PrivateAdminLayout };\n"],"names":["Number","NavLink","RouterLink","Icon"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"MarketplacePage-BjqbBfYn.js","sources":["../../admin/src/hooks/useDebounce.ts","../../admin/src/pages/Marketplace/components/NpmPackagesFilters.tsx","../../admin/src/pages/Marketplace/components/NpmPackageCard.tsx","../../admin/src/pages/Marketplace/components/NpmPackagesGrid.tsx","../../admin/src/pages/Marketplace/components/PageHeader.tsx","../../admin/src/pages/Marketplace/components/OfflineLayout.tsx","../../admin/src/pages/Marketplace/components/SortSelect.tsx","../../admin/src/pages/Marketplace/hooks/useMarketplaceData.ts","../../admin/src/pages/Marketplace/hooks/useNavigatorOnline.ts","../../admin/src/pages/Marketplace/MarketplacePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nexport function useDebounce<TValue>(value: TValue, delay: number): TValue {\n const [debouncedValue, setDebouncedValue] = React.useState(value);\n\n React.useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n return () => {\n clearTimeout(handler);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}\n","import * as React from 'react';\n\nimport {\n Box,\n Button,\n Tag,\n MultiSelect,\n MultiSelectOption,\n MultiSelectProps,\n Popover,\n Flex,\n} from '@strapi/design-system';\nimport { Cross, Filter } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport type { Categories, Collections, FilterTypes } from '../hooks/useMarketplaceData';\nimport type { NpmPackageType, MarketplacePageQuery } from '../MarketplacePage';\n\ninterface NpmPackagesFiltersProps {\n handleSelectClear: (type: FilterTypes) => void;\n handleSelectChange: (update: Partial<MarketplacePageQuery>) => void;\n npmPackageType: NpmPackageType;\n possibleCategories: Partial<Record<Categories, number>>;\n possibleCollections: Partial<Record<Collections, number>>;\n query: MarketplacePageQuery;\n}\n\nconst NpmPackagesFilters = ({\n handleSelectClear,\n handleSelectChange,\n npmPackageType,\n possibleCategories,\n possibleCollections,\n query,\n}: NpmPackagesFiltersProps) => {\n const { formatMessage } = useIntl();\n\n const handleTagRemove = (tagToRemove: string, filterType: FilterTypes) => {\n const update = {\n [filterType]: (query[filterType] ?? []).filter((previousTag) => previousTag !== tagToRemove),\n };\n\n handleSelectChange(update);\n };\n\n return (\n <Popover.Root>\n <Popover.Trigger>\n <Button variant=\"tertiary\" startIcon={<Filter />}>\n {formatMessage({ id: 'app.utils.filters', defaultMessage: 'Filters' })}\n </Button>\n </Popover.Trigger>\n <Popover.Content sideOffset={4}>\n <Flex padding={3} direction=\"column\" alignItems=\"stretch\" gap={1}>\n <FilterSelect\n message={formatMessage({\n id: 'admin.pages.MarketPlacePage.filters.collections',\n defaultMessage: 'Collections',\n })}\n value={query?.collections || []}\n onChange={(newCollections) => {\n const update = { collections: newCollections };\n handleSelectChange(update);\n }}\n onClear={() => handleSelectClear('collections')}\n possibleFilters={possibleCollections}\n customizeContent={(values) =>\n formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.filters.collectionsSelected',\n defaultMessage:\n '{count, plural, =0 {No collections} one {# collection} other {# collections}} selected',\n },\n { count: values?.length ?? 0 }\n )\n }\n />\n {npmPackageType === 'plugin' && (\n <FilterSelect\n message={formatMessage({\n id: 'admin.pages.MarketPlacePage.filters.categories',\n defaultMessage: 'Categories',\n })}\n value={query?.categories || []}\n onChange={(newCategories) => {\n const update = { categories: newCategories };\n handleSelectChange(update);\n }}\n onClear={() => handleSelectClear('categories')}\n possibleFilters={possibleCategories}\n customizeContent={(values) =>\n formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.filters.categoriesSelected',\n defaultMessage:\n '{count, plural, =0 {No categories} one {# category} other {# categories}} selected',\n },\n { count: values?.length ?? 0 }\n )\n }\n />\n )}\n </Flex>\n </Popover.Content>\n\n {query.collections?.map((collection) => (\n <Box key={collection} padding={1}>\n <Tag icon={<Cross />} onClick={() => handleTagRemove(collection, 'collections')}>\n {collection}\n </Tag>\n </Box>\n ))}\n {npmPackageType === 'plugin' &&\n query.categories?.map((category) => (\n <Box key={category} padding={1}>\n <Tag icon={<Cross />} onClick={() => handleTagRemove(category, 'categories')}>\n {category}\n </Tag>\n </Box>\n ))}\n </Popover.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * FilterSelect\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FilterSelectProps\n extends Pick<MultiSelectProps, 'customizeContent' | 'onClear' | 'onChange' | 'value'> {\n message: string;\n possibleFilters:\n | NpmPackagesFiltersProps['possibleCategories']\n | NpmPackagesFiltersProps['possibleCollections'];\n}\n\nconst FilterSelect = ({\n message,\n value,\n onChange,\n possibleFilters,\n onClear,\n customizeContent,\n}: FilterSelectProps) => {\n return (\n <MultiSelect\n data-testid={`${message}-button`}\n aria-label={message}\n placeholder={message}\n onChange={onChange}\n onClear={onClear}\n value={value}\n customizeContent={customizeContent}\n >\n {Object.entries(possibleFilters).map(([filterName, count]) => {\n return (\n <MultiSelectOption\n data-testid={`${filterName}-${count}`}\n key={filterName}\n value={filterName}\n >\n {`${filterName} (${count})`}\n </MultiSelectOption>\n );\n })}\n </MultiSelect>\n );\n};\n\nexport { NpmPackagesFilters };\nexport type { NpmPackagesFiltersProps };\n","import {\n Box,\n Flex,\n Tooltip,\n Typography,\n Divider,\n Button,\n LinkButton,\n TypographyComponent,\n} from '@strapi/design-system';\nimport { CheckCircle, ExternalLink, Download, Star, Check, Duplicate } from '@strapi/icons';\nimport { GitHub } from '@strapi/icons/symbols';\nimport pluralize from 'pluralize';\nimport { useIntl } from 'react-intl';\nimport * as semver from 'semver';\nimport { styled } from 'styled-components';\n\nimport StrapiLogo from '../../../assets/images/logo-strapi-2022.svg';\nimport { AppInfoContextValue } from '../../../features/AppInfo';\nimport { useNotification } from '../../../features/Notifications';\nimport { useTracking } from '../../../features/Tracking';\nimport { useClipboard } from '../../../hooks/useClipboard';\n\nimport type { Plugin, Provider } from '../hooks/useMarketplaceData';\nimport type { NpmPackageType } from '../MarketplacePage';\n\n// Custom component to have an ellipsis after the 2nd line\nconst EllipsisText = styled<TypographyComponent<'p'>>(Typography)`\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n overflow: hidden;\n`;\n\ninterface NpmPackageCardProps extends Pick<AppInfoContextValue, 'useYarn'> {\n npmPackage: Plugin | Provider;\n isInstalled: boolean;\n isInDevelopmentMode: AppInfoContextValue['autoReload'];\n npmPackageType: NpmPackageType;\n strapiAppVersion: AppInfoContextValue['strapiVersion'];\n}\n\nconst NpmPackageCard = ({\n npmPackage,\n isInstalled,\n useYarn,\n isInDevelopmentMode,\n npmPackageType,\n strapiAppVersion,\n}: NpmPackageCardProps) => {\n const { attributes } = npmPackage;\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n\n const commandToCopy = useYarn\n ? `yarn add ${attributes.npmPackageName}`\n : `npm install ${attributes.npmPackageName}`;\n\n const madeByStrapiMessage = formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.tooltip.madeByStrapi',\n defaultMessage: 'Made by Strapi',\n });\n\n const npmPackageHref = `https://market.strapi.io/${pluralize.plural(npmPackageType)}/${\n attributes.slug\n }`;\n\n const versionRange = semver.validRange(attributes.strapiVersion);\n const isCompatible = semver.satisfies(strapiAppVersion ?? '', versionRange ?? '');\n\n return (\n <Flex\n direction=\"column\"\n justifyContent=\"space-between\"\n paddingTop={4}\n paddingRight={4}\n paddingBottom={4}\n paddingLeft={4}\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n height=\"100%\"\n alignItems=\"normal\"\n data-testid=\"npm-package-card\"\n >\n <Box>\n <Flex direction=\"row\" justifyContent=\"space-between\" alignItems=\"flex-start\">\n <Box\n tag=\"img\"\n src={attributes.logo.url}\n alt={`${attributes.name} logo`}\n hasRadius\n width={11}\n height={11}\n />\n <PackageStats\n githubStars={attributes.githubStars}\n npmDownloads={attributes.npmDownloads}\n npmPackageType={npmPackageType}\n />\n </Flex>\n <Box paddingTop={4}>\n <Typography tag=\"h3\" variant=\"delta\">\n <Flex\n alignItems=\"center\"\n gap={attributes.validated && !attributes.madeByStrapi ? 2 : 1}\n >\n {attributes.name}\n {attributes.validated && !attributes.madeByStrapi && (\n <Tooltip\n description={formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.tooltip.verified',\n defaultMessage: 'Plugin verified by Strapi',\n })}\n >\n <CheckCircle fill=\"success600\" />\n </Tooltip>\n )}\n {attributes.madeByStrapi && (\n <Tooltip description={madeByStrapiMessage}>\n <Box\n tag=\"img\"\n src={StrapiLogo}\n alt={madeByStrapiMessage}\n width={6}\n height=\"auto\"\n />\n </Tooltip>\n )}\n </Flex>\n </Typography>\n </Box>\n <Box paddingTop={2}>\n <EllipsisText tag=\"p\" variant=\"omega\" textColor=\"neutral600\">\n {attributes.description}\n </EllipsisText>\n </Box>\n </Box>\n\n <Flex gap={2} style={{ alignSelf: 'flex-end' }} paddingTop={6}>\n <LinkButton\n size=\"S\"\n href={npmPackageHref}\n isExternal\n endIcon={<ExternalLink />}\n aria-label={formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.plugin.info.label',\n defaultMessage: 'Learn more about {pluginName}',\n },\n { pluginName: attributes.name }\n )}\n variant=\"tertiary\"\n onClick={() => trackUsage('didPluginLearnMore')}\n >\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.info.text',\n defaultMessage: 'More',\n })}\n </LinkButton>\n <InstallPluginButton\n isInstalled={isInstalled}\n isInDevelopmentMode={isInDevelopmentMode}\n isCompatible={isCompatible}\n commandToCopy={commandToCopy}\n strapiAppVersion={strapiAppVersion}\n strapiPeerDepVersion={attributes.strapiVersion}\n pluginName={attributes.name}\n />\n </Flex>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * InstallPluginButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface InstallPluginButtonProps\n extends Pick<NpmPackageCardProps, 'isInstalled' | 'isInDevelopmentMode' | 'strapiAppVersion'> {\n commandToCopy: string;\n pluginName: string;\n strapiPeerDepVersion?: string;\n isCompatible?: boolean;\n}\n\nconst InstallPluginButton = ({\n isInstalled,\n isInDevelopmentMode,\n isCompatible,\n commandToCopy,\n strapiAppVersion,\n strapiPeerDepVersion,\n pluginName,\n}: InstallPluginButtonProps) => {\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { copy } = useClipboard();\n\n const handleCopy = async () => {\n const didCopy = await copy(commandToCopy);\n\n if (didCopy) {\n trackUsage('willInstallPlugin');\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'admin.pages.MarketPlacePage.plugin.copy.success' }),\n });\n }\n };\n\n // Already installed\n if (isInstalled) {\n return (\n <Flex gap={2} paddingLeft={4}>\n <Check width=\"1.2rem\" height=\"1.2rem\" color=\"success600\" />\n <Typography variant=\"omega\" textColor=\"success600\" fontWeight=\"bold\">\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.installed',\n defaultMessage: 'Installed',\n })}\n </Typography>\n </Flex>\n );\n }\n\n // In development, show install button\n if (isInDevelopmentMode && isCompatible !== false) {\n return (\n <CardButton\n strapiAppVersion={strapiAppVersion}\n strapiPeerDepVersion={strapiPeerDepVersion}\n handleCopy={handleCopy}\n pluginName={pluginName}\n />\n );\n }\n\n // Not in development and plugin not installed already. Show nothing\n return null;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * CardButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface CardButtonProps\n extends Pick<NpmPackageCardProps, 'strapiAppVersion'>,\n Pick<InstallPluginButtonProps, 'strapiPeerDepVersion' | 'pluginName'> {\n handleCopy: () => void;\n}\n\nconst CardButton = ({\n strapiPeerDepVersion,\n strapiAppVersion,\n handleCopy,\n pluginName,\n}: CardButtonProps) => {\n const { formatMessage } = useIntl();\n const versionRange = semver.validRange(strapiPeerDepVersion);\n const isCompatible = semver.satisfies(strapiAppVersion ?? '', versionRange ?? '');\n\n const installMessage = formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.copy',\n defaultMessage: 'Copy install command',\n });\n\n // Only plugins receive a strapiAppVersion\n if (strapiAppVersion) {\n if (!versionRange || !isCompatible) {\n return (\n <Tooltip\n data-testid={`tooltip-${pluginName}`}\n label={\n !versionRange\n ? formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.plugin.version.null',\n defaultMessage:\n 'Unable to verify compatibility with your Strapi version: \"{strapiAppVersion}\"',\n },\n { strapiAppVersion }\n )\n : formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.plugin.version',\n defaultMessage:\n 'Update your Strapi version: \"{strapiAppVersion}\" to: \"{versionRange}\"',\n },\n {\n strapiAppVersion,\n versionRange,\n }\n )\n }\n >\n <span>\n <Button\n size=\"S\"\n startIcon={<Duplicate />}\n variant=\"secondary\"\n onClick={handleCopy}\n disabled={!isCompatible}\n >\n {installMessage}\n </Button>\n </span>\n </Tooltip>\n );\n }\n }\n\n return (\n <Button size=\"S\" startIcon={<Duplicate />} variant=\"secondary\" onClick={handleCopy}>\n {installMessage}\n </Button>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PackageStats\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PackageStatsProps {\n githubStars?: number;\n npmDownloads?: number;\n npmPackageType: NpmPackageType;\n}\n\nconst PackageStats = ({ githubStars = 0, npmDownloads = 0, npmPackageType }: PackageStatsProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex gap={1}>\n {!!githubStars && (\n <>\n <GitHub height=\"1.2rem\" width=\"1.2rem\" aria-hidden />\n <Star height=\"1.2rem\" width=\"1.2rem\" fill=\"warning500\" aria-hidden />\n <p\n aria-label={formatMessage(\n {\n id: `admin.pages.MarketPlacePage.${npmPackageType}.githubStars`,\n defaultMessage: `This {package} was starred {starsCount} on GitHub`,\n },\n {\n starsCount: githubStars,\n package: npmPackageType,\n }\n )}\n >\n <Typography variant=\"pi\" textColor=\"neutral800\">\n {githubStars}\n </Typography>\n </p>\n <VerticalDivider />\n </>\n )}\n <Download height=\"1.2rem\" width=\"1.2rem\" aria-hidden />\n <p\n aria-label={formatMessage(\n {\n id: `admin.pages.MarketPlacePage.${npmPackageType}.downloads`,\n defaultMessage: `This {package} has {downloadsCount} weekly downloads`,\n },\n {\n downloadsCount: npmDownloads,\n package: npmPackageType,\n }\n )}\n >\n <Typography variant=\"pi\" textColor=\"neutral800\">\n {npmDownloads}\n </Typography>\n </p>\n </Flex>\n );\n};\n\nconst VerticalDivider = styled(Divider)`\n width: 1.2rem;\n transform: rotate(90deg);\n`;\n\nexport { NpmPackageCard };\nexport type { NpmPackageCardProps };\n","import { Box, BoxComponent, Flex, Grid, Typography } from '@strapi/design-system';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { Layouts } from '../../../components/Layouts/Layout';\nimport { Page } from '../../../components/PageHelpers';\nimport { AppInfoContextValue } from '../../../features/AppInfo';\n\nimport { NpmPackageCard, NpmPackageCardProps } from './NpmPackageCard';\n\nimport type { Plugin, Provider } from '../hooks/useMarketplaceData';\n\ninterface NpmPackagesGridProps extends Pick<NpmPackageCardProps, 'npmPackageType' | 'useYarn'> {\n debouncedSearch: string;\n installedPackageNames: string[];\n isInDevelopmentMode: AppInfoContextValue['autoReload'];\n npmPackages?: Array<Plugin | Provider>;\n status: 'idle' | 'loading' | 'error' | 'success';\n strapiAppVersion?: NpmPackageCardProps['strapiAppVersion'];\n}\n\nconst NpmPackagesGrid = ({\n status,\n npmPackages = [],\n installedPackageNames = [],\n useYarn,\n isInDevelopmentMode,\n npmPackageType,\n strapiAppVersion,\n debouncedSearch,\n}: NpmPackagesGridProps) => {\n const { formatMessage } = useIntl();\n\n if (status === 'error') {\n return <Page.Error />;\n }\n\n if (status === 'loading') {\n return <Page.Loading />;\n }\n\n const emptySearchMessage = formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.search.empty',\n defaultMessage: 'No result for \"{target}\"',\n },\n { target: debouncedSearch }\n );\n\n if (npmPackages.length === 0) {\n return (\n <Box position=\"relative\">\n <Layouts.Grid size=\"M\">\n {Array(12)\n .fill(null)\n .map((_, idx) => (\n <EmptyPluginCard key={idx} height=\"234px\" hasRadius />\n ))}\n </Layouts.Grid>\n <Box position=\"absolute\" top={11} width=\"100%\">\n <Flex alignItems=\"center\" justifyContent=\"center\" direction=\"column\">\n <EmptyDocuments width=\"160px\" height=\"88px\" />\n <Box paddingTop={6}>\n <Typography variant=\"delta\" tag=\"p\" textColor=\"neutral600\">\n {emptySearchMessage}\n </Typography>\n </Box>\n </Flex>\n </Box>\n </Box>\n );\n }\n\n return (\n <Grid.Root gap={4}>\n {npmPackages.map((npmPackage) => (\n <Grid.Item\n col={4}\n s={6}\n xs={12}\n style={{ height: '100%' }}\n key={npmPackage.id}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <NpmPackageCard\n npmPackage={npmPackage}\n isInstalled={installedPackageNames.includes(npmPackage.attributes.npmPackageName)}\n useYarn={useYarn}\n isInDevelopmentMode={isInDevelopmentMode}\n npmPackageType={npmPackageType}\n strapiAppVersion={strapiAppVersion}\n />\n </Grid.Item>\n ))}\n </Grid.Root>\n );\n};\n\nconst EmptyPluginCard = styled<BoxComponent>(Box)`\n background: ${({ theme }) =>\n `linear-gradient(180deg, rgba(234, 234, 239, 0) 0%, ${theme.colors.neutral150} 100%)`};\n opacity: 0.33;\n`;\n\nexport { NpmPackagesGrid };\n","import { LinkButton } from '@strapi/design-system';\nimport { Upload } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { Layouts } from '../../../components/Layouts/Layout';\nimport { useTracking } from '../../../features/Tracking';\n\nimport type { NpmPackageType } from '../MarketplacePage';\n\ninterface PageHeaderProps {\n isOnline?: boolean;\n npmPackageType?: NpmPackageType;\n}\n\nconst PageHeader = ({ isOnline, npmPackageType = 'plugin' }: PageHeaderProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n\n const tracking = npmPackageType === 'provider' ? 'didSubmitProvider' : 'didSubmitPlugin';\n\n return (\n <Layouts.Header\n title={formatMessage({\n id: 'global.marketplace',\n defaultMessage: 'Marketplace',\n })}\n subtitle={formatMessage({\n id: 'admin.pages.MarketPlacePage.subtitle',\n defaultMessage: 'Get more out of Strapi',\n })}\n primaryAction={\n isOnline && (\n <LinkButton\n startIcon={<Upload />}\n variant=\"tertiary\"\n href={`https://market.strapi.io/submit-${npmPackageType}`}\n onClick={() => trackUsage(tracking)}\n isExternal\n >\n {formatMessage({\n id: `admin.pages.MarketPlacePage.submit.${npmPackageType}.link`,\n defaultMessage: `Submit ${npmPackageType}`,\n })}\n </LinkButton>\n )\n }\n />\n );\n};\n\nexport { PageHeader };\nexport type { PageHeaderProps };\n","import { Box, Flex, Main, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { Layouts } from '../../../components/Layouts/Layout';\n\nimport { PageHeader } from './PageHeader';\n\nconst OfflineLayout = () => {\n const { formatMessage } = useIntl();\n\n return (\n <Layouts.Root>\n <Main>\n <PageHeader />\n <Flex\n width=\"100%\"\n direction=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n paddingTop={`12rem`}\n >\n <Box paddingBottom={2}>\n <Typography textColor=\"neutral700\" variant=\"alpha\">\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.offline.title',\n defaultMessage: 'You are offline',\n })}\n </Typography>\n </Box>\n <Box paddingBottom={6}>\n <Typography textColor=\"neutral700\" variant=\"epsilon\">\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.offline.subtitle',\n defaultMessage: 'You need to be connected to the Internet to access Strapi Market.',\n })}\n </Typography>\n </Box>\n <svg\n width=\"88\"\n height=\"88\"\n viewBox=\"0 0 88 88\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect x=\".5\" y=\".5\" width=\"87\" height=\"87\" rx=\"43.5\" fill=\"#F0F0FF\" />\n <path\n d=\"M34 39.3h-4c-2.6 0-4.7 1-6.6 2.8a9 9 0 0 0-2.7 6.6 9 9 0 0 0 2.7 6.6A9 9 0 0 0 30 58h22.8L34 39.3Zm-11-11 3-3 39 39-3 3-4.7-4.6H30a13.8 13.8 0 0 1-14-14c0-3.8 1.3-7 4-9.7 2.6-2.7 5.7-4.2 9.5-4.3L23 28.2Zm38.2 11.1c3 .2 5.5 1.5 7.6 3.7A11 11 0 0 1 72 51c0 4-1.6 7.2-5 9.5l-3.3-3.4a6.5 6.5 0 0 0 3.6-6.1c0-1.9-.7-3.5-2-5-1.5-1.3-3.1-2-5-2h-3.5v-1.2c0-3.6-1.2-6.6-3.7-9a13 13 0 0 0-15-2.3L34.6 28a17 17 0 0 1 20.3 1.5c3.5 2.7 5.5 6 6.3 10Z\"\n fill=\"#4945FF\"\n />\n <rect x=\".5\" y=\".5\" width=\"87\" height=\"87\" rx=\"43.5\" stroke=\"#D9D8FF\" />\n </svg>\n </Flex>\n </Main>\n </Layouts.Root>\n );\n};\n\nexport { OfflineLayout };\n","import { Box, SingleSelectOption, SingleSelect, BoxComponent } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nconst SORT_TYPES = {\n 'name:asc': {\n selected: {\n id: 'admin.pages.MarketPlacePage.sort.alphabetical.selected',\n defaultMessage: 'Sort by alphabetical order',\n },\n option: {\n id: 'admin.pages.MarketPlacePage.sort.alphabetical',\n defaultMessage: 'Alphabetical order',\n },\n },\n 'submissionDate:desc': {\n selected: {\n id: 'admin.pages.MarketPlacePage.sort.newest.selected',\n defaultMessage: 'Sort by newest',\n },\n option: {\n id: 'admin.pages.MarketPlacePage.sort.newest',\n defaultMessage: 'Newest',\n },\n },\n 'githubStars:desc': {\n selected: {\n id: 'admin.pages.MarketPlacePage.sort.githubStars.selected',\n defaultMessage: 'Sort by GitHub stars',\n },\n option: {\n id: 'admin.pages.MarketPlacePage.sort.githubStars',\n defaultMessage: 'Number of GitHub stars',\n },\n },\n 'npmDownloads:desc': {\n selected: {\n id: 'admin.pages.MarketPlacePage.sort.npmDownloads.selected',\n defaultMessage: 'Sort by npm downloads',\n },\n option: {\n id: 'admin.pages.MarketPlacePage.sort.npmDownloads',\n defaultMessage: 'Number of downloads',\n },\n },\n} as const;\n\ninterface SortSelectProps {\n sortQuery: keyof typeof SORT_TYPES;\n handleSelectChange: (payload: { sort: string }) => void;\n}\n\nconst SortSelect = ({ sortQuery, handleSelectChange }: SortSelectProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <SelectWrapper>\n <SingleSelect\n value={sortQuery}\n customizeContent={() => formatMessage(SORT_TYPES[sortQuery].selected)}\n onChange={(sortName) => {\n // @ts-expect-error – in V2 design-system we'll only ever return strings.\n handleSelectChange({ sort: sortName });\n }}\n aria-label={formatMessage({\n id: 'admin.pages.MarketPlacePage.sort.label',\n defaultMessage: 'Sort by',\n })}\n size=\"S\"\n >\n {Object.entries(SORT_TYPES).map(([sortName, messages]) => {\n return (\n <SingleSelectOption key={sortName} value={sortName}>\n {formatMessage(messages.option)}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n </SelectWrapper>\n );\n};\n\nconst SelectWrapper = styled<BoxComponent>(Box)`\n font-weight: ${({ theme }) => theme.fontWeights.semiBold};\n\n span {\n font-size: ${({ theme }) => theme.fontSizes[1]};\n }\n`;\n\nexport { SortSelect };\nexport type { SortSelectProps };\n","import { useNotifyAT } from '@strapi/design-system';\nimport * as qs from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useQuery } from 'react-query';\n\nimport { useNotification } from '../../../features/Notifications';\n\nimport type { MarketplacePageQuery, NpmPackageType, TabQuery } from '../MarketplacePage';\n\nconst MARKETPLACE_API_URL = 'https://market-api.strapi.io';\n\ninterface UseMarketplaceDataParams {\n npmPackageType: NpmPackageType;\n debouncedSearch: string;\n query?: MarketplacePageQuery;\n tabQuery: TabQuery;\n strapiVersion?: string | null;\n}\n\ntype Collections =\n | 'Verified'\n | 'Made by the community'\n | 'Made by Strapi'\n | 'Made by official partners';\n\ntype Categories = 'Custom fields' | 'Deployment' | 'Monitoring';\n\ntype FilterTypes = 'categories' | 'collections';\n\ninterface Plugin {\n id: string;\n attributes: {\n name: string;\n description: string;\n slug: string;\n npmPackageName: string;\n npmPackageUrl: string;\n npmDownloads: number;\n repositoryUrl: string;\n githubStars: number;\n logo: {\n url: string;\n };\n developerName: string;\n validated: boolean;\n madeByStrapi: boolean;\n strapiCompatibility: string;\n submissionDate: string;\n collections: Collections[];\n categories: Categories[];\n strapiVersion: string;\n screenshots: Array<{\n url: string;\n }>;\n };\n}\n\ninterface Provider {\n id: string;\n attributes: {\n name: string;\n description: string;\n slug: string;\n npmPackageName: string;\n npmPackageUrl: string;\n npmDownloads: number;\n repositoryUrl: string;\n githubStars: number;\n pluginName: string;\n logo: {\n url: string;\n };\n developerName: string;\n validated: boolean;\n madeByStrapi: boolean;\n strapiCompatibility: string;\n strapiVersion?: never;\n submissionDate: string;\n collections: Collections[];\n };\n}\n\ninterface MarketplaceMeta {\n collections: Record<Collections, number>;\n pagination: {\n page: number;\n pageSize: number;\n pageCount: number;\n total: number;\n };\n}\n\ninterface MarketplaceResponse<TData extends Plugin | Provider> {\n data: TData[];\n meta: TData extends Provider\n ? MarketplaceMeta\n : MarketplaceMeta & { categories: Record<Categories, number> };\n}\n\nfunction useMarketplaceData({\n npmPackageType,\n debouncedSearch,\n query,\n tabQuery,\n strapiVersion,\n}: UseMarketplaceDataParams) {\n const { notifyStatus } = useNotifyAT();\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const marketplaceTitle = formatMessage({\n id: 'global.marketplace',\n defaultMessage: 'Marketplace',\n });\n\n const notifyMarketplaceLoad = () => {\n notifyStatus(\n formatMessage(\n {\n id: 'app.utils.notify.data-loaded',\n defaultMessage: 'The {target} has loaded',\n },\n { target: marketplaceTitle }\n )\n );\n };\n\n const paginationParams = {\n page: query?.page || 1,\n pageSize: query?.pageSize || 24,\n };\n\n const pluginParams = {\n ...tabQuery.plugin,\n pagination: paginationParams,\n search: debouncedSearch,\n version: strapiVersion,\n };\n\n const { data: pluginsResponse, status: pluginsStatus } = useQuery(\n ['marketplace', 'plugins', pluginParams],\n async () => {\n try {\n const queryString = qs.stringify(pluginParams);\n const res = await fetch(`${MARKETPLACE_API_URL}/plugins?${queryString}`);\n\n if (!res.ok) {\n throw new Error('Failed to fetch marketplace plugins.');\n }\n\n const data = (await res.json()) as MarketplaceResponse<Plugin>;\n return data;\n } catch (error) {\n // silence\n }\n\n return null;\n },\n {\n onSuccess() {\n notifyMarketplaceLoad();\n },\n onError() {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occured' }),\n });\n },\n }\n );\n\n const providerParams = {\n ...tabQuery.provider,\n pagination: paginationParams,\n search: debouncedSearch,\n version: strapiVersion,\n };\n\n const { data: providersResponse, status: providersStatus } = useQuery(\n ['marketplace', 'providers', providerParams],\n async () => {\n const queryString = qs.stringify(providerParams);\n const res = await fetch(`${MARKETPLACE_API_URL}/providers?${queryString}`);\n\n if (!res.ok) {\n throw new Error('Failed to fetch marketplace providers.');\n }\n\n const data = (await res.json()) as MarketplaceResponse<Provider>;\n\n return data;\n },\n {\n onSuccess() {\n notifyMarketplaceLoad();\n },\n onError() {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occured' }),\n });\n },\n }\n );\n\n const npmPackageTypeResponse = npmPackageType === 'plugin' ? pluginsResponse : providersResponse;\n\n const possibleCollections = npmPackageTypeResponse?.meta.collections ?? {};\n const possibleCategories = pluginsResponse?.meta.categories ?? {};\n\n const { pagination } = npmPackageTypeResponse?.meta ?? {};\n\n return {\n pluginsResponse,\n providersResponse,\n pluginsStatus,\n providersStatus,\n possibleCollections,\n possibleCategories,\n pagination,\n };\n}\n\nexport { useMarketplaceData };\nexport type {\n MarketplaceResponse,\n Plugin,\n Provider,\n MarketplaceMeta,\n Collections,\n Categories,\n FilterTypes,\n UseMarketplaceDataParams,\n};\n","import * as React from 'react';\n\n/**\n * For more details about this hook see:\n * https://www.30secondsofcode.org/react/s/use-navigator-on-line\n */\nexport const useNavigatorOnline = (): boolean => {\n const onlineStatus =\n typeof navigator !== 'undefined' && typeof navigator.onLine === 'boolean'\n ? navigator.onLine\n : true;\n\n const [isOnline, setIsOnline] = React.useState(onlineStatus);\n\n const setOnline = () => setIsOnline(true);\n const setOffline = () => setIsOnline(false);\n\n React.useEffect(() => {\n window.addEventListener('online', setOnline);\n window.addEventListener('offline', setOffline);\n\n return () => {\n window.removeEventListener('online', setOnline);\n window.removeEventListener('offline', setOffline);\n };\n }, []);\n\n return isOnline;\n};\n","import * as React from 'react';\n\nimport { Box, Flex, Searchbar, Tabs } from '@strapi/design-system';\nimport { ExternalLink } from '@strapi/icons';\nimport { GlassesSquare } from '@strapi/icons/symbols';\nimport { useIntl } from 'react-intl';\n\nimport { ContentBox } from '../../components/ContentBox';\nimport { Layouts } from '../../components/Layouts/Layout';\nimport { Page } from '../../components/PageHelpers';\nimport { Pagination } from '../../components/Pagination';\nimport { useTypedSelector } from '../../core/store/hooks';\nimport { useAppInfo } from '../../features/AppInfo';\nimport { useNotification } from '../../features/Notifications';\nimport { useTracking } from '../../features/Tracking';\nimport { useDebounce } from '../../hooks/useDebounce';\nimport { useQueryParams } from '../../hooks/useQueryParams';\n\nimport { NpmPackagesFilters } from './components/NpmPackagesFilters';\nimport { NpmPackagesGrid } from './components/NpmPackagesGrid';\nimport { OfflineLayout } from './components/OfflineLayout';\nimport { PageHeader } from './components/PageHeader';\nimport { SortSelect, SortSelectProps } from './components/SortSelect';\nimport { FilterTypes, useMarketplaceData } from './hooks/useMarketplaceData';\nimport { useNavigatorOnline } from './hooks/useNavigatorOnline';\n\ntype NpmPackageType = 'plugin' | 'provider';\n\ninterface MarketplacePageQuery {\n collections?: string[];\n categories?: string[];\n npmPackageType?: NpmPackageType;\n page?: number;\n pageSize?: number;\n search?: string;\n sort?: SortSelectProps['sortQuery'];\n}\n\ninterface TabQuery {\n plugin: MarketplacePageQuery;\n provider: MarketplacePageQuery;\n}\n\nconst PLUGIN = 'plugin';\nconst PROVIDER = 'provider';\n\nconst MarketplacePage = () => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { toggleNotification } = useNotification();\n const [{ query }, setQuery] = useQueryParams<MarketplacePageQuery>();\n const debouncedSearch = useDebounce(query?.search, 500) || '';\n\n const {\n autoReload: isInDevelopmentMode,\n dependencies,\n useYarn,\n strapiVersion,\n } = useAppInfo('MarketplacePage', (state) => state);\n const isOnline = useNavigatorOnline();\n\n const npmPackageType = query?.npmPackageType || PLUGIN;\n\n const [tabQuery, setTabQuery] = React.useState<TabQuery>({\n plugin: npmPackageType === PLUGIN ? { ...query } : {},\n provider: npmPackageType === PROVIDER ? { ...query } : {},\n });\n\n React.useEffect(() => {\n trackUsage('didGoToMarketplace');\n }, [trackUsage]);\n\n React.useEffect(() => {\n if (!isInDevelopmentMode) {\n toggleNotification({\n type: 'info',\n message: formatMessage({\n id: 'admin.pages.MarketPlacePage.production',\n defaultMessage: 'Manage plugins from the development environment',\n }),\n });\n }\n }, [toggleNotification, isInDevelopmentMode, formatMessage]);\n\n const {\n pluginsResponse,\n providersResponse,\n pluginsStatus,\n providersStatus,\n possibleCollections,\n possibleCategories,\n pagination,\n } = useMarketplaceData({ npmPackageType, debouncedSearch, query, tabQuery, strapiVersion });\n\n if (!isOnline) {\n return <OfflineLayout />;\n }\n\n const handleTabChange = (tab: string) => {\n const selectedTab = tab === PLUGIN || tab === PROVIDER ? tab : PLUGIN;\n\n const hasTabQuery = tabQuery[selectedTab] && Object.keys(tabQuery[selectedTab]).length;\n\n if (hasTabQuery) {\n setQuery({\n // Keep filters and search\n ...tabQuery[selectedTab],\n search: query?.search || '',\n // Set tab and reset page\n npmPackageType: selectedTab,\n page: 1,\n });\n } else {\n setQuery({\n // Set tab\n npmPackageType: selectedTab,\n // Clear filters\n collections: [],\n categories: [],\n sort: 'name:asc',\n page: 1,\n // Keep search\n search: query?.search || '',\n });\n }\n };\n\n const handleSelectChange = (update: Partial<MarketplacePageQuery>) => {\n setQuery({ ...update, page: 1 });\n setTabQuery((prev) => ({\n ...prev,\n [npmPackageType]: { ...prev[npmPackageType], ...update },\n }));\n };\n\n const handleSelectClear = (filterType: FilterTypes) => {\n setQuery({ [filterType]: [], page: undefined }, 'remove');\n setTabQuery((prev) => ({ ...prev, [npmPackageType]: {} }));\n };\n\n const handleSortSelectChange: SortSelectProps['handleSelectChange'] = ({ sort }) =>\n // @ts-expect-error - this is a narrowing issue.\n handleSelectChange({ sort });\n\n // Check if plugins and providers are installed already\n const installedPackageNames = Object.keys(dependencies ?? {});\n\n return (\n <Layouts.Root>\n <Page.Main>\n <Page.Title>\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.head',\n defaultMessage: 'Marketplace - Plugins',\n })}\n </Page.Title>\n <PageHeader isOnline={isOnline} npmPackageType={npmPackageType} />\n <Layouts.Content>\n <Tabs.Root variant=\"simple\" onValueChange={handleTabChange} value={npmPackageType}>\n <Flex justifyContent=\"space-between\" paddingBottom={4}>\n <Tabs.List\n aria-label={formatMessage({\n id: 'admin.pages.MarketPlacePage.tab-group.label',\n defaultMessage: 'Plugins and Providers for Strapi',\n })}\n >\n <Tabs.Trigger value={PLUGIN}>\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.plugins',\n defaultMessage: 'Plugins',\n })}{' '}\n {pluginsResponse ? `(${pluginsResponse.meta.pagination.total})` : '...'}\n </Tabs.Trigger>\n <Tabs.Trigger value={PROVIDER}>\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.providers',\n defaultMessage: 'Providers',\n })}{' '}\n {providersResponse ? `(${providersResponse.meta.pagination.total})` : '...'}\n </Tabs.Trigger>\n </Tabs.List>\n\n <Box width=\"25%\">\n <Searchbar\n name=\"searchbar\"\n onClear={() => setQuery({ search: '', page: 1 })}\n value={query?.search}\n onChange={(e) => setQuery({ search: e.target.value, page: 1 })}\n clearLabel={formatMessage({\n id: 'admin.pages.MarketPlacePage.search.clear',\n defaultMessage: 'Clear the search',\n })}\n placeholder={formatMessage({\n id: 'admin.pages.MarketPlacePage.search.placeholder',\n defaultMessage: 'Search',\n })}\n >\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.search.placeholder',\n defaultMessage: 'Search',\n })}\n </Searchbar>\n </Box>\n </Flex>\n <Flex paddingBottom={4} gap={2}>\n <SortSelect\n sortQuery={query?.sort || 'name:asc'}\n handleSelectChange={handleSortSelectChange}\n />\n <NpmPackagesFilters\n npmPackageType={npmPackageType}\n possibleCollections={possibleCollections}\n possibleCategories={possibleCategories}\n query={query || {}}\n handleSelectChange={handleSelectChange}\n handleSelectClear={handleSelectClear}\n />\n </Flex>\n <Tabs.Content value={PLUGIN}>\n <NpmPackagesGrid\n npmPackages={pluginsResponse?.data}\n status={pluginsStatus}\n installedPackageNames={installedPackageNames}\n useYarn={useYarn}\n isInDevelopmentMode={isInDevelopmentMode}\n npmPackageType=\"plugin\"\n strapiAppVersion={strapiVersion}\n debouncedSearch={debouncedSearch}\n />\n </Tabs.Content>\n <Tabs.Content value={PROVIDER}>\n <NpmPackagesGrid\n npmPackages={providersResponse?.data}\n status={providersStatus}\n installedPackageNames={installedPackageNames}\n useYarn={useYarn}\n isInDevelopmentMode={isInDevelopmentMode}\n npmPackageType=\"provider\"\n debouncedSearch={debouncedSearch}\n />\n </Tabs.Content>\n <Pagination.Root {...pagination} defaultPageSize={24}>\n <Pagination.PageSize options={['12', '24', '50', '100']} />\n <Pagination.Links />\n </Pagination.Root>\n <Box paddingTop={8}>\n <a\n href=\"https://strapi.canny.io/plugin-requests\"\n target=\"_blank\"\n rel=\"noopener noreferrer nofollow\"\n style={{ textDecoration: 'none' }}\n onClick={() => trackUsage('didMissMarketplacePlugin')}\n >\n <ContentBox\n title={formatMessage({\n id: 'admin.pages.MarketPlacePage.missingPlugin.title',\n defaultMessage: 'Documentation',\n })}\n subtitle={formatMessage({\n id: 'admin.pages.MarketPlacePage.missingPlugin.description',\n defaultMessage:\n \"Tell us what plugin you are looking for and we'll let our community plugin developers know in case they are in search for inspiration!\",\n })}\n icon={<GlassesSquare />}\n iconBackground=\"alternative100\"\n endAction={\n <ExternalLink\n fill=\"neutral600\"\n width=\"1.2rem\"\n height=\"1.2rem\"\n style={{ marginLeft: '0.8rem' }}\n />\n }\n />\n </a>\n </Box>\n </Tabs.Root>\n </Layouts.Content>\n </Page.Main>\n </Layouts.Root>\n );\n};\n\nconst ProtectedMarketplacePage = () => {\n const permissions = useTypedSelector((state) => state.admin_app.permissions.marketplace?.main);\n\n return (\n <Page.Protect permissions={permissions}>\n <MarketplacePage />\n </Page.Protect>\n );\n};\n\nexport { MarketplacePage, ProtectedMarketplacePage };\nexport type { NpmPackageType, MarketplacePageQuery, TabQuery };\n"],"names":["React","useIntl","jsxs","Popover","jsx","Button","Filter","Flex","Box","Tag","Cross","MultiSelect","MultiSelectOption","styled","Typography","useTracking","pluralize","semver","Tooltip","CheckCircle","StrapiLogo","LinkButton","ExternalLink","useNotification","useClipboard","Check","Duplicate","Fragment","GitHub","Star","Download","Divider","Page","Layouts","EmptyDocuments","Grid","Upload","Main","SingleSelect","SingleSelectOption","useNotifyAT","useQuery","qs","useQueryParams","useAppInfo","Tabs","Searchbar","Pagination","ContentBox","GlassesSquare","useTypedSelector"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"MarketplacePage-Ce4cgMEU.mjs","sources":["../../admin/src/hooks/useDebounce.ts","../../admin/src/pages/Marketplace/components/NpmPackagesFilters.tsx","../../admin/src/pages/Marketplace/components/NpmPackageCard.tsx","../../admin/src/pages/Marketplace/components/NpmPackagesGrid.tsx","../../admin/src/pages/Marketplace/components/PageHeader.tsx","../../admin/src/pages/Marketplace/components/OfflineLayout.tsx","../../admin/src/pages/Marketplace/components/SortSelect.tsx","../../admin/src/pages/Marketplace/hooks/useMarketplaceData.ts","../../admin/src/pages/Marketplace/hooks/useNavigatorOnline.ts","../../admin/src/pages/Marketplace/MarketplacePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nexport function useDebounce<TValue>(value: TValue, delay: number): TValue {\n const [debouncedValue, setDebouncedValue] = React.useState(value);\n\n React.useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n return () => {\n clearTimeout(handler);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}\n","import * as React from 'react';\n\nimport {\n Box,\n Button,\n Tag,\n MultiSelect,\n MultiSelectOption,\n MultiSelectProps,\n Popover,\n Flex,\n} from '@strapi/design-system';\nimport { Cross, Filter } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport type { Categories, Collections, FilterTypes } from '../hooks/useMarketplaceData';\nimport type { NpmPackageType, MarketplacePageQuery } from '../MarketplacePage';\n\ninterface NpmPackagesFiltersProps {\n handleSelectClear: (type: FilterTypes) => void;\n handleSelectChange: (update: Partial<MarketplacePageQuery>) => void;\n npmPackageType: NpmPackageType;\n possibleCategories: Partial<Record<Categories, number>>;\n possibleCollections: Partial<Record<Collections, number>>;\n query: MarketplacePageQuery;\n}\n\nconst NpmPackagesFilters = ({\n handleSelectClear,\n handleSelectChange,\n npmPackageType,\n possibleCategories,\n possibleCollections,\n query,\n}: NpmPackagesFiltersProps) => {\n const { formatMessage } = useIntl();\n\n const handleTagRemove = (tagToRemove: string, filterType: FilterTypes) => {\n const update = {\n [filterType]: (query[filterType] ?? []).filter((previousTag) => previousTag !== tagToRemove),\n };\n\n handleSelectChange(update);\n };\n\n return (\n <Popover.Root>\n <Popover.Trigger>\n <Button variant=\"tertiary\" startIcon={<Filter />}>\n {formatMessage({ id: 'app.utils.filters', defaultMessage: 'Filters' })}\n </Button>\n </Popover.Trigger>\n <Popover.Content sideOffset={4}>\n <Flex padding={3} direction=\"column\" alignItems=\"stretch\" gap={1}>\n <FilterSelect\n message={formatMessage({\n id: 'admin.pages.MarketPlacePage.filters.collections',\n defaultMessage: 'Collections',\n })}\n value={query?.collections || []}\n onChange={(newCollections) => {\n const update = { collections: newCollections };\n handleSelectChange(update);\n }}\n onClear={() => handleSelectClear('collections')}\n possibleFilters={possibleCollections}\n customizeContent={(values) =>\n formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.filters.collectionsSelected',\n defaultMessage:\n '{count, plural, =0 {No collections} one {# collection} other {# collections}} selected',\n },\n { count: values?.length ?? 0 }\n )\n }\n />\n {npmPackageType === 'plugin' && (\n <FilterSelect\n message={formatMessage({\n id: 'admin.pages.MarketPlacePage.filters.categories',\n defaultMessage: 'Categories',\n })}\n value={query?.categories || []}\n onChange={(newCategories) => {\n const update = { categories: newCategories };\n handleSelectChange(update);\n }}\n onClear={() => handleSelectClear('categories')}\n possibleFilters={possibleCategories}\n customizeContent={(values) =>\n formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.filters.categoriesSelected',\n defaultMessage:\n '{count, plural, =0 {No categories} one {# category} other {# categories}} selected',\n },\n { count: values?.length ?? 0 }\n )\n }\n />\n )}\n </Flex>\n </Popover.Content>\n\n {query.collections?.map((collection) => (\n <Box key={collection} padding={1}>\n <Tag icon={<Cross />} onClick={() => handleTagRemove(collection, 'collections')}>\n {collection}\n </Tag>\n </Box>\n ))}\n {npmPackageType === 'plugin' &&\n query.categories?.map((category) => (\n <Box key={category} padding={1}>\n <Tag icon={<Cross />} onClick={() => handleTagRemove(category, 'categories')}>\n {category}\n </Tag>\n </Box>\n ))}\n </Popover.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * FilterSelect\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FilterSelectProps\n extends Pick<MultiSelectProps, 'customizeContent' | 'onClear' | 'onChange' | 'value'> {\n message: string;\n possibleFilters:\n | NpmPackagesFiltersProps['possibleCategories']\n | NpmPackagesFiltersProps['possibleCollections'];\n}\n\nconst FilterSelect = ({\n message,\n value,\n onChange,\n possibleFilters,\n onClear,\n customizeContent,\n}: FilterSelectProps) => {\n return (\n <MultiSelect\n data-testid={`${message}-button`}\n aria-label={message}\n placeholder={message}\n onChange={onChange}\n onClear={onClear}\n value={value}\n customizeContent={customizeContent}\n >\n {Object.entries(possibleFilters).map(([filterName, count]) => {\n return (\n <MultiSelectOption\n data-testid={`${filterName}-${count}`}\n key={filterName}\n value={filterName}\n >\n {`${filterName} (${count})`}\n </MultiSelectOption>\n );\n })}\n </MultiSelect>\n );\n};\n\nexport { NpmPackagesFilters };\nexport type { NpmPackagesFiltersProps };\n","import {\n Box,\n Flex,\n Tooltip,\n Typography,\n Divider,\n Button,\n LinkButton,\n TypographyComponent,\n} from '@strapi/design-system';\nimport { CheckCircle, ExternalLink, Download, Star, Check, Duplicate } from '@strapi/icons';\nimport { GitHub } from '@strapi/icons/symbols';\nimport pluralize from 'pluralize';\nimport { useIntl } from 'react-intl';\nimport * as semver from 'semver';\nimport { styled } from 'styled-components';\n\nimport StrapiLogo from '../../../assets/images/logo-strapi-2022.svg';\nimport { AppInfoContextValue } from '../../../features/AppInfo';\nimport { useNotification } from '../../../features/Notifications';\nimport { useTracking } from '../../../features/Tracking';\nimport { useClipboard } from '../../../hooks/useClipboard';\n\nimport type { Plugin, Provider } from '../hooks/useMarketplaceData';\nimport type { NpmPackageType } from '../MarketplacePage';\n\n// Custom component to have an ellipsis after the 2nd line\nconst EllipsisText = styled<TypographyComponent<'p'>>(Typography)`\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n overflow: hidden;\n`;\n\ninterface NpmPackageCardProps extends Pick<AppInfoContextValue, 'useYarn'> {\n npmPackage: Plugin | Provider;\n isInstalled: boolean;\n isInDevelopmentMode: AppInfoContextValue['autoReload'];\n npmPackageType: NpmPackageType;\n strapiAppVersion: AppInfoContextValue['strapiVersion'];\n}\n\nconst NpmPackageCard = ({\n npmPackage,\n isInstalled,\n useYarn,\n isInDevelopmentMode,\n npmPackageType,\n strapiAppVersion,\n}: NpmPackageCardProps) => {\n const { attributes } = npmPackage;\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n\n const commandToCopy = useYarn\n ? `yarn add ${attributes.npmPackageName}`\n : `npm install ${attributes.npmPackageName}`;\n\n const madeByStrapiMessage = formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.tooltip.madeByStrapi',\n defaultMessage: 'Made by Strapi',\n });\n\n const npmPackageHref = `https://market.strapi.io/${pluralize.plural(npmPackageType)}/${\n attributes.slug\n }`;\n\n const versionRange = semver.validRange(attributes.strapiVersion);\n const isCompatible = semver.satisfies(strapiAppVersion ?? '', versionRange ?? '');\n\n return (\n <Flex\n direction=\"column\"\n justifyContent=\"space-between\"\n paddingTop={4}\n paddingRight={4}\n paddingBottom={4}\n paddingLeft={4}\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n height=\"100%\"\n alignItems=\"normal\"\n data-testid=\"npm-package-card\"\n >\n <Box>\n <Flex direction=\"row\" justifyContent=\"space-between\" alignItems=\"flex-start\">\n <Box\n tag=\"img\"\n src={attributes.logo.url}\n alt={`${attributes.name} logo`}\n hasRadius\n width={11}\n height={11}\n />\n <PackageStats\n githubStars={attributes.githubStars}\n npmDownloads={attributes.npmDownloads}\n npmPackageType={npmPackageType}\n />\n </Flex>\n <Box paddingTop={4}>\n <Typography tag=\"h3\" variant=\"delta\">\n <Flex\n alignItems=\"center\"\n gap={attributes.validated && !attributes.madeByStrapi ? 2 : 1}\n >\n {attributes.name}\n {attributes.validated && !attributes.madeByStrapi && (\n <Tooltip\n description={formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.tooltip.verified',\n defaultMessage: 'Plugin verified by Strapi',\n })}\n >\n <CheckCircle fill=\"success600\" />\n </Tooltip>\n )}\n {attributes.madeByStrapi && (\n <Tooltip description={madeByStrapiMessage}>\n <Box\n tag=\"img\"\n src={StrapiLogo}\n alt={madeByStrapiMessage}\n width={6}\n height=\"auto\"\n />\n </Tooltip>\n )}\n </Flex>\n </Typography>\n </Box>\n <Box paddingTop={2}>\n <EllipsisText tag=\"p\" variant=\"omega\" textColor=\"neutral600\">\n {attributes.description}\n </EllipsisText>\n </Box>\n </Box>\n\n <Flex gap={2} style={{ alignSelf: 'flex-end' }} paddingTop={6}>\n <LinkButton\n size=\"S\"\n href={npmPackageHref}\n isExternal\n endIcon={<ExternalLink />}\n aria-label={formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.plugin.info.label',\n defaultMessage: 'Learn more about {pluginName}',\n },\n { pluginName: attributes.name }\n )}\n variant=\"tertiary\"\n onClick={() => trackUsage('didPluginLearnMore')}\n >\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.info.text',\n defaultMessage: 'More',\n })}\n </LinkButton>\n <InstallPluginButton\n isInstalled={isInstalled}\n isInDevelopmentMode={isInDevelopmentMode}\n isCompatible={isCompatible}\n commandToCopy={commandToCopy}\n strapiAppVersion={strapiAppVersion}\n strapiPeerDepVersion={attributes.strapiVersion}\n pluginName={attributes.name}\n />\n </Flex>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * InstallPluginButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface InstallPluginButtonProps\n extends Pick<NpmPackageCardProps, 'isInstalled' | 'isInDevelopmentMode' | 'strapiAppVersion'> {\n commandToCopy: string;\n pluginName: string;\n strapiPeerDepVersion?: string;\n isCompatible?: boolean;\n}\n\nconst InstallPluginButton = ({\n isInstalled,\n isInDevelopmentMode,\n isCompatible,\n commandToCopy,\n strapiAppVersion,\n strapiPeerDepVersion,\n pluginName,\n}: InstallPluginButtonProps) => {\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { copy } = useClipboard();\n\n const handleCopy = async () => {\n const didCopy = await copy(commandToCopy);\n\n if (didCopy) {\n trackUsage('willInstallPlugin');\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'admin.pages.MarketPlacePage.plugin.copy.success' }),\n });\n }\n };\n\n // Already installed\n if (isInstalled) {\n return (\n <Flex gap={2} paddingLeft={4}>\n <Check width=\"1.2rem\" height=\"1.2rem\" color=\"success600\" />\n <Typography variant=\"omega\" textColor=\"success600\" fontWeight=\"bold\">\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.installed',\n defaultMessage: 'Installed',\n })}\n </Typography>\n </Flex>\n );\n }\n\n // In development, show install button\n if (isInDevelopmentMode && isCompatible !== false) {\n return (\n <CardButton\n strapiAppVersion={strapiAppVersion}\n strapiPeerDepVersion={strapiPeerDepVersion}\n handleCopy={handleCopy}\n pluginName={pluginName}\n />\n );\n }\n\n // Not in development and plugin not installed already. Show nothing\n return null;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * CardButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface CardButtonProps\n extends Pick<NpmPackageCardProps, 'strapiAppVersion'>,\n Pick<InstallPluginButtonProps, 'strapiPeerDepVersion' | 'pluginName'> {\n handleCopy: () => void;\n}\n\nconst CardButton = ({\n strapiPeerDepVersion,\n strapiAppVersion,\n handleCopy,\n pluginName,\n}: CardButtonProps) => {\n const { formatMessage } = useIntl();\n const versionRange = semver.validRange(strapiPeerDepVersion);\n const isCompatible = semver.satisfies(strapiAppVersion ?? '', versionRange ?? '');\n\n const installMessage = formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.copy',\n defaultMessage: 'Copy install command',\n });\n\n // Only plugins receive a strapiAppVersion\n if (strapiAppVersion) {\n if (!versionRange || !isCompatible) {\n return (\n <Tooltip\n data-testid={`tooltip-${pluginName}`}\n label={\n !versionRange\n ? formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.plugin.version.null',\n defaultMessage:\n 'Unable to verify compatibility with your Strapi version: \"{strapiAppVersion}\"',\n },\n { strapiAppVersion }\n )\n : formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.plugin.version',\n defaultMessage:\n 'Update your Strapi version: \"{strapiAppVersion}\" to: \"{versionRange}\"',\n },\n {\n strapiAppVersion,\n versionRange,\n }\n )\n }\n >\n <span>\n <Button\n size=\"S\"\n startIcon={<Duplicate />}\n variant=\"secondary\"\n onClick={handleCopy}\n disabled={!isCompatible}\n >\n {installMessage}\n </Button>\n </span>\n </Tooltip>\n );\n }\n }\n\n return (\n <Button size=\"S\" startIcon={<Duplicate />} variant=\"secondary\" onClick={handleCopy}>\n {installMessage}\n </Button>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PackageStats\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PackageStatsProps {\n githubStars?: number;\n npmDownloads?: number;\n npmPackageType: NpmPackageType;\n}\n\nconst PackageStats = ({ githubStars = 0, npmDownloads = 0, npmPackageType }: PackageStatsProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex gap={1}>\n {!!githubStars && (\n <>\n <GitHub height=\"1.2rem\" width=\"1.2rem\" aria-hidden />\n <Star height=\"1.2rem\" width=\"1.2rem\" fill=\"warning500\" aria-hidden />\n <p\n aria-label={formatMessage(\n {\n id: `admin.pages.MarketPlacePage.${npmPackageType}.githubStars`,\n defaultMessage: `This {package} was starred {starsCount} on GitHub`,\n },\n {\n starsCount: githubStars,\n package: npmPackageType,\n }\n )}\n >\n <Typography variant=\"pi\" textColor=\"neutral800\">\n {githubStars}\n </Typography>\n </p>\n <VerticalDivider />\n </>\n )}\n <Download height=\"1.2rem\" width=\"1.2rem\" aria-hidden />\n <p\n aria-label={formatMessage(\n {\n id: `admin.pages.MarketPlacePage.${npmPackageType}.downloads`,\n defaultMessage: `This {package} has {downloadsCount} weekly downloads`,\n },\n {\n downloadsCount: npmDownloads,\n package: npmPackageType,\n }\n )}\n >\n <Typography variant=\"pi\" textColor=\"neutral800\">\n {npmDownloads}\n </Typography>\n </p>\n </Flex>\n );\n};\n\nconst VerticalDivider = styled(Divider)`\n width: 1.2rem;\n transform: rotate(90deg);\n`;\n\nexport { NpmPackageCard };\nexport type { NpmPackageCardProps };\n","import { Box, BoxComponent, Flex, Grid, Typography } from '@strapi/design-system';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { Layouts } from '../../../components/Layouts/Layout';\nimport { Page } from '../../../components/PageHelpers';\nimport { AppInfoContextValue } from '../../../features/AppInfo';\n\nimport { NpmPackageCard, NpmPackageCardProps } from './NpmPackageCard';\n\nimport type { Plugin, Provider } from '../hooks/useMarketplaceData';\n\ninterface NpmPackagesGridProps extends Pick<NpmPackageCardProps, 'npmPackageType' | 'useYarn'> {\n debouncedSearch: string;\n installedPackageNames: string[];\n isInDevelopmentMode: AppInfoContextValue['autoReload'];\n npmPackages?: Array<Plugin | Provider>;\n status: 'idle' | 'loading' | 'error' | 'success';\n strapiAppVersion?: NpmPackageCardProps['strapiAppVersion'];\n}\n\nconst NpmPackagesGrid = ({\n status,\n npmPackages = [],\n installedPackageNames = [],\n useYarn,\n isInDevelopmentMode,\n npmPackageType,\n strapiAppVersion,\n debouncedSearch,\n}: NpmPackagesGridProps) => {\n const { formatMessage } = useIntl();\n\n if (status === 'error') {\n return <Page.Error />;\n }\n\n if (status === 'loading') {\n return <Page.Loading />;\n }\n\n const emptySearchMessage = formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.search.empty',\n defaultMessage: 'No result for \"{target}\"',\n },\n { target: debouncedSearch }\n );\n\n if (npmPackages.length === 0) {\n return (\n <Box position=\"relative\">\n <Layouts.Grid size=\"M\">\n {Array(12)\n .fill(null)\n .map((_, idx) => (\n <EmptyPluginCard key={idx} height=\"234px\" hasRadius />\n ))}\n </Layouts.Grid>\n <Box position=\"absolute\" top={11} width=\"100%\">\n <Flex alignItems=\"center\" justifyContent=\"center\" direction=\"column\">\n <EmptyDocuments width=\"160px\" height=\"88px\" />\n <Box paddingTop={6}>\n <Typography variant=\"delta\" tag=\"p\" textColor=\"neutral600\">\n {emptySearchMessage}\n </Typography>\n </Box>\n </Flex>\n </Box>\n </Box>\n );\n }\n\n return (\n <Grid.Root gap={4}>\n {npmPackages.map((npmPackage) => (\n <Grid.Item\n col={4}\n s={6}\n xs={12}\n style={{ height: '100%' }}\n key={npmPackage.id}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <NpmPackageCard\n npmPackage={npmPackage}\n isInstalled={installedPackageNames.includes(npmPackage.attributes.npmPackageName)}\n useYarn={useYarn}\n isInDevelopmentMode={isInDevelopmentMode}\n npmPackageType={npmPackageType}\n strapiAppVersion={strapiAppVersion}\n />\n </Grid.Item>\n ))}\n </Grid.Root>\n );\n};\n\nconst EmptyPluginCard = styled<BoxComponent>(Box)`\n background: ${({ theme }) =>\n `linear-gradient(180deg, rgba(234, 234, 239, 0) 0%, ${theme.colors.neutral150} 100%)`};\n opacity: 0.33;\n`;\n\nexport { NpmPackagesGrid };\n","import { LinkButton } from '@strapi/design-system';\nimport { Upload } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { Layouts } from '../../../components/Layouts/Layout';\nimport { useTracking } from '../../../features/Tracking';\n\nimport type { NpmPackageType } from '../MarketplacePage';\n\ninterface PageHeaderProps {\n isOnline?: boolean;\n npmPackageType?: NpmPackageType;\n}\n\nconst PageHeader = ({ isOnline, npmPackageType = 'plugin' }: PageHeaderProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n\n const tracking = npmPackageType === 'provider' ? 'didSubmitProvider' : 'didSubmitPlugin';\n\n return (\n <Layouts.Header\n title={formatMessage({\n id: 'global.marketplace',\n defaultMessage: 'Marketplace',\n })}\n subtitle={formatMessage({\n id: 'admin.pages.MarketPlacePage.subtitle',\n defaultMessage: 'Get more out of Strapi',\n })}\n primaryAction={\n isOnline && (\n <LinkButton\n startIcon={<Upload />}\n variant=\"tertiary\"\n href={`https://market.strapi.io/submit-${npmPackageType}`}\n onClick={() => trackUsage(tracking)}\n isExternal\n >\n {formatMessage({\n id: `admin.pages.MarketPlacePage.submit.${npmPackageType}.link`,\n defaultMessage: `Submit ${npmPackageType}`,\n })}\n </LinkButton>\n )\n }\n />\n );\n};\n\nexport { PageHeader };\nexport type { PageHeaderProps };\n","import { Box, Flex, Main, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { Layouts } from '../../../components/Layouts/Layout';\n\nimport { PageHeader } from './PageHeader';\n\nconst OfflineLayout = () => {\n const { formatMessage } = useIntl();\n\n return (\n <Layouts.Root>\n <Main>\n <PageHeader />\n <Flex\n width=\"100%\"\n direction=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n paddingTop={`12rem`}\n >\n <Box paddingBottom={2}>\n <Typography textColor=\"neutral700\" variant=\"alpha\">\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.offline.title',\n defaultMessage: 'You are offline',\n })}\n </Typography>\n </Box>\n <Box paddingBottom={6}>\n <Typography textColor=\"neutral700\" variant=\"epsilon\">\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.offline.subtitle',\n defaultMessage: 'You need to be connected to the Internet to access Strapi Market.',\n })}\n </Typography>\n </Box>\n <svg\n width=\"88\"\n height=\"88\"\n viewBox=\"0 0 88 88\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect x=\".5\" y=\".5\" width=\"87\" height=\"87\" rx=\"43.5\" fill=\"#F0F0FF\" />\n <path\n d=\"M34 39.3h-4c-2.6 0-4.7 1-6.6 2.8a9 9 0 0 0-2.7 6.6 9 9 0 0 0 2.7 6.6A9 9 0 0 0 30 58h22.8L34 39.3Zm-11-11 3-3 39 39-3 3-4.7-4.6H30a13.8 13.8 0 0 1-14-14c0-3.8 1.3-7 4-9.7 2.6-2.7 5.7-4.2 9.5-4.3L23 28.2Zm38.2 11.1c3 .2 5.5 1.5 7.6 3.7A11 11 0 0 1 72 51c0 4-1.6 7.2-5 9.5l-3.3-3.4a6.5 6.5 0 0 0 3.6-6.1c0-1.9-.7-3.5-2-5-1.5-1.3-3.1-2-5-2h-3.5v-1.2c0-3.6-1.2-6.6-3.7-9a13 13 0 0 0-15-2.3L34.6 28a17 17 0 0 1 20.3 1.5c3.5 2.7 5.5 6 6.3 10Z\"\n fill=\"#4945FF\"\n />\n <rect x=\".5\" y=\".5\" width=\"87\" height=\"87\" rx=\"43.5\" stroke=\"#D9D8FF\" />\n </svg>\n </Flex>\n </Main>\n </Layouts.Root>\n );\n};\n\nexport { OfflineLayout };\n","import { Box, SingleSelectOption, SingleSelect, BoxComponent } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nconst SORT_TYPES = {\n 'name:asc': {\n selected: {\n id: 'admin.pages.MarketPlacePage.sort.alphabetical.selected',\n defaultMessage: 'Sort by alphabetical order',\n },\n option: {\n id: 'admin.pages.MarketPlacePage.sort.alphabetical',\n defaultMessage: 'Alphabetical order',\n },\n },\n 'submissionDate:desc': {\n selected: {\n id: 'admin.pages.MarketPlacePage.sort.newest.selected',\n defaultMessage: 'Sort by newest',\n },\n option: {\n id: 'admin.pages.MarketPlacePage.sort.newest',\n defaultMessage: 'Newest',\n },\n },\n 'githubStars:desc': {\n selected: {\n id: 'admin.pages.MarketPlacePage.sort.githubStars.selected',\n defaultMessage: 'Sort by GitHub stars',\n },\n option: {\n id: 'admin.pages.MarketPlacePage.sort.githubStars',\n defaultMessage: 'Number of GitHub stars',\n },\n },\n 'npmDownloads:desc': {\n selected: {\n id: 'admin.pages.MarketPlacePage.sort.npmDownloads.selected',\n defaultMessage: 'Sort by npm downloads',\n },\n option: {\n id: 'admin.pages.MarketPlacePage.sort.npmDownloads',\n defaultMessage: 'Number of downloads',\n },\n },\n} as const;\n\ninterface SortSelectProps {\n sortQuery: keyof typeof SORT_TYPES;\n handleSelectChange: (payload: { sort: string }) => void;\n}\n\nconst SortSelect = ({ sortQuery, handleSelectChange }: SortSelectProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <SelectWrapper>\n <SingleSelect\n value={sortQuery}\n customizeContent={() => formatMessage(SORT_TYPES[sortQuery].selected)}\n onChange={(sortName) => {\n // @ts-expect-error – in V2 design-system we'll only ever return strings.\n handleSelectChange({ sort: sortName });\n }}\n aria-label={formatMessage({\n id: 'admin.pages.MarketPlacePage.sort.label',\n defaultMessage: 'Sort by',\n })}\n size=\"S\"\n >\n {Object.entries(SORT_TYPES).map(([sortName, messages]) => {\n return (\n <SingleSelectOption key={sortName} value={sortName}>\n {formatMessage(messages.option)}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n </SelectWrapper>\n );\n};\n\nconst SelectWrapper = styled<BoxComponent>(Box)`\n font-weight: ${({ theme }) => theme.fontWeights.semiBold};\n\n span {\n font-size: ${({ theme }) => theme.fontSizes[1]};\n }\n`;\n\nexport { SortSelect };\nexport type { SortSelectProps };\n","import { useNotifyAT } from '@strapi/design-system';\nimport * as qs from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useQuery } from 'react-query';\n\nimport { useNotification } from '../../../features/Notifications';\n\nimport type { MarketplacePageQuery, NpmPackageType, TabQuery } from '../MarketplacePage';\n\nconst MARKETPLACE_API_URL = 'https://market-api.strapi.io';\n\ninterface UseMarketplaceDataParams {\n npmPackageType: NpmPackageType;\n debouncedSearch: string;\n query?: MarketplacePageQuery;\n tabQuery: TabQuery;\n strapiVersion?: string | null;\n}\n\ntype Collections =\n | 'Verified'\n | 'Made by the community'\n | 'Made by Strapi'\n | 'Made by official partners';\n\ntype Categories = 'Custom fields' | 'Deployment' | 'Monitoring';\n\ntype FilterTypes = 'categories' | 'collections';\n\ninterface Plugin {\n id: string;\n attributes: {\n name: string;\n description: string;\n slug: string;\n npmPackageName: string;\n npmPackageUrl: string;\n npmDownloads: number;\n repositoryUrl: string;\n githubStars: number;\n logo: {\n url: string;\n };\n developerName: string;\n validated: boolean;\n madeByStrapi: boolean;\n strapiCompatibility: string;\n submissionDate: string;\n collections: Collections[];\n categories: Categories[];\n strapiVersion: string;\n screenshots: Array<{\n url: string;\n }>;\n };\n}\n\ninterface Provider {\n id: string;\n attributes: {\n name: string;\n description: string;\n slug: string;\n npmPackageName: string;\n npmPackageUrl: string;\n npmDownloads: number;\n repositoryUrl: string;\n githubStars: number;\n pluginName: string;\n logo: {\n url: string;\n };\n developerName: string;\n validated: boolean;\n madeByStrapi: boolean;\n strapiCompatibility: string;\n strapiVersion?: never;\n submissionDate: string;\n collections: Collections[];\n };\n}\n\ninterface MarketplaceMeta {\n collections: Record<Collections, number>;\n pagination: {\n page: number;\n pageSize: number;\n pageCount: number;\n total: number;\n };\n}\n\ninterface MarketplaceResponse<TData extends Plugin | Provider> {\n data: TData[];\n meta: TData extends Provider\n ? MarketplaceMeta\n : MarketplaceMeta & { categories: Record<Categories, number> };\n}\n\nfunction useMarketplaceData({\n npmPackageType,\n debouncedSearch,\n query,\n tabQuery,\n strapiVersion,\n}: UseMarketplaceDataParams) {\n const { notifyStatus } = useNotifyAT();\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const marketplaceTitle = formatMessage({\n id: 'global.marketplace',\n defaultMessage: 'Marketplace',\n });\n\n const notifyMarketplaceLoad = () => {\n notifyStatus(\n formatMessage(\n {\n id: 'app.utils.notify.data-loaded',\n defaultMessage: 'The {target} has loaded',\n },\n { target: marketplaceTitle }\n )\n );\n };\n\n const paginationParams = {\n page: query?.page || 1,\n pageSize: query?.pageSize || 24,\n };\n\n const pluginParams = {\n ...tabQuery.plugin,\n pagination: paginationParams,\n search: debouncedSearch,\n version: strapiVersion,\n };\n\n const { data: pluginsResponse, status: pluginsStatus } = useQuery(\n ['marketplace', 'plugins', pluginParams],\n async () => {\n try {\n const queryString = qs.stringify(pluginParams);\n const res = await fetch(`${MARKETPLACE_API_URL}/plugins?${queryString}`);\n\n if (!res.ok) {\n throw new Error('Failed to fetch marketplace plugins.');\n }\n\n const data = (await res.json()) as MarketplaceResponse<Plugin>;\n return data;\n } catch (error) {\n // silence\n }\n\n return null;\n },\n {\n onSuccess() {\n notifyMarketplaceLoad();\n },\n onError() {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occured' }),\n });\n },\n }\n );\n\n const providerParams = {\n ...tabQuery.provider,\n pagination: paginationParams,\n search: debouncedSearch,\n version: strapiVersion,\n };\n\n const { data: providersResponse, status: providersStatus } = useQuery(\n ['marketplace', 'providers', providerParams],\n async () => {\n const queryString = qs.stringify(providerParams);\n const res = await fetch(`${MARKETPLACE_API_URL}/providers?${queryString}`);\n\n if (!res.ok) {\n throw new Error('Failed to fetch marketplace providers.');\n }\n\n const data = (await res.json()) as MarketplaceResponse<Provider>;\n\n return data;\n },\n {\n onSuccess() {\n notifyMarketplaceLoad();\n },\n onError() {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occured' }),\n });\n },\n }\n );\n\n const npmPackageTypeResponse = npmPackageType === 'plugin' ? pluginsResponse : providersResponse;\n\n const possibleCollections = npmPackageTypeResponse?.meta.collections ?? {};\n const possibleCategories = pluginsResponse?.meta.categories ?? {};\n\n const { pagination } = npmPackageTypeResponse?.meta ?? {};\n\n return {\n pluginsResponse,\n providersResponse,\n pluginsStatus,\n providersStatus,\n possibleCollections,\n possibleCategories,\n pagination,\n };\n}\n\nexport { useMarketplaceData };\nexport type {\n MarketplaceResponse,\n Plugin,\n Provider,\n MarketplaceMeta,\n Collections,\n Categories,\n FilterTypes,\n UseMarketplaceDataParams,\n};\n","import * as React from 'react';\n\n/**\n * For more details about this hook see:\n * https://www.30secondsofcode.org/react/s/use-navigator-on-line\n */\nexport const useNavigatorOnline = (): boolean => {\n const onlineStatus =\n typeof navigator !== 'undefined' && typeof navigator.onLine === 'boolean'\n ? navigator.onLine\n : true;\n\n const [isOnline, setIsOnline] = React.useState(onlineStatus);\n\n const setOnline = () => setIsOnline(true);\n const setOffline = () => setIsOnline(false);\n\n React.useEffect(() => {\n window.addEventListener('online', setOnline);\n window.addEventListener('offline', setOffline);\n\n return () => {\n window.removeEventListener('online', setOnline);\n window.removeEventListener('offline', setOffline);\n };\n }, []);\n\n return isOnline;\n};\n","import * as React from 'react';\n\nimport { Box, Flex, Searchbar, Tabs } from '@strapi/design-system';\nimport { ExternalLink } from '@strapi/icons';\nimport { GlassesSquare } from '@strapi/icons/symbols';\nimport { useIntl } from 'react-intl';\n\nimport { ContentBox } from '../../components/ContentBox';\nimport { Layouts } from '../../components/Layouts/Layout';\nimport { Page } from '../../components/PageHelpers';\nimport { Pagination } from '../../components/Pagination';\nimport { useTypedSelector } from '../../core/store/hooks';\nimport { useAppInfo } from '../../features/AppInfo';\nimport { useNotification } from '../../features/Notifications';\nimport { useTracking } from '../../features/Tracking';\nimport { useDebounce } from '../../hooks/useDebounce';\nimport { useQueryParams } from '../../hooks/useQueryParams';\n\nimport { NpmPackagesFilters } from './components/NpmPackagesFilters';\nimport { NpmPackagesGrid } from './components/NpmPackagesGrid';\nimport { OfflineLayout } from './components/OfflineLayout';\nimport { PageHeader } from './components/PageHeader';\nimport { SortSelect, SortSelectProps } from './components/SortSelect';\nimport { FilterTypes, useMarketplaceData } from './hooks/useMarketplaceData';\nimport { useNavigatorOnline } from './hooks/useNavigatorOnline';\n\ntype NpmPackageType = 'plugin' | 'provider';\n\ninterface MarketplacePageQuery {\n collections?: string[];\n categories?: string[];\n npmPackageType?: NpmPackageType;\n page?: number;\n pageSize?: number;\n search?: string;\n sort?: SortSelectProps['sortQuery'];\n}\n\ninterface TabQuery {\n plugin: MarketplacePageQuery;\n provider: MarketplacePageQuery;\n}\n\nconst PLUGIN = 'plugin';\nconst PROVIDER = 'provider';\n\nconst MarketplacePage = () => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { toggleNotification } = useNotification();\n const [{ query }, setQuery] = useQueryParams<MarketplacePageQuery>();\n const debouncedSearch = useDebounce(query?.search, 500) || '';\n\n const {\n autoReload: isInDevelopmentMode,\n dependencies,\n useYarn,\n strapiVersion,\n } = useAppInfo('MarketplacePage', (state) => state);\n const isOnline = useNavigatorOnline();\n\n const npmPackageType = query?.npmPackageType || PLUGIN;\n\n const [tabQuery, setTabQuery] = React.useState<TabQuery>({\n plugin: npmPackageType === PLUGIN ? { ...query } : {},\n provider: npmPackageType === PROVIDER ? { ...query } : {},\n });\n\n React.useEffect(() => {\n trackUsage('didGoToMarketplace');\n }, [trackUsage]);\n\n React.useEffect(() => {\n if (!isInDevelopmentMode) {\n toggleNotification({\n type: 'info',\n message: formatMessage({\n id: 'admin.pages.MarketPlacePage.production',\n defaultMessage: 'Manage plugins from the development environment',\n }),\n });\n }\n }, [toggleNotification, isInDevelopmentMode, formatMessage]);\n\n const {\n pluginsResponse,\n providersResponse,\n pluginsStatus,\n providersStatus,\n possibleCollections,\n possibleCategories,\n pagination,\n } = useMarketplaceData({ npmPackageType, debouncedSearch, query, tabQuery, strapiVersion });\n\n if (!isOnline) {\n return <OfflineLayout />;\n }\n\n const handleTabChange = (tab: string) => {\n const selectedTab = tab === PLUGIN || tab === PROVIDER ? tab : PLUGIN;\n\n const hasTabQuery = tabQuery[selectedTab] && Object.keys(tabQuery[selectedTab]).length;\n\n if (hasTabQuery) {\n setQuery({\n // Keep filters and search\n ...tabQuery[selectedTab],\n search: query?.search || '',\n // Set tab and reset page\n npmPackageType: selectedTab,\n page: 1,\n });\n } else {\n setQuery({\n // Set tab\n npmPackageType: selectedTab,\n // Clear filters\n collections: [],\n categories: [],\n sort: 'name:asc',\n page: 1,\n // Keep search\n search: query?.search || '',\n });\n }\n };\n\n const handleSelectChange = (update: Partial<MarketplacePageQuery>) => {\n setQuery({ ...update, page: 1 });\n setTabQuery((prev) => ({\n ...prev,\n [npmPackageType]: { ...prev[npmPackageType], ...update },\n }));\n };\n\n const handleSelectClear = (filterType: FilterTypes) => {\n setQuery({ [filterType]: [], page: undefined }, 'remove');\n setTabQuery((prev) => ({ ...prev, [npmPackageType]: {} }));\n };\n\n const handleSortSelectChange: SortSelectProps['handleSelectChange'] = ({ sort }) =>\n // @ts-expect-error - this is a narrowing issue.\n handleSelectChange({ sort });\n\n // Check if plugins and providers are installed already\n const installedPackageNames = Object.keys(dependencies ?? {});\n\n return (\n <Layouts.Root>\n <Page.Main>\n <Page.Title>\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.head',\n defaultMessage: 'Marketplace - Plugins',\n })}\n </Page.Title>\n <PageHeader isOnline={isOnline} npmPackageType={npmPackageType} />\n <Layouts.Content>\n <Tabs.Root variant=\"simple\" onValueChange={handleTabChange} value={npmPackageType}>\n <Flex justifyContent=\"space-between\" paddingBottom={4}>\n <Tabs.List\n aria-label={formatMessage({\n id: 'admin.pages.MarketPlacePage.tab-group.label',\n defaultMessage: 'Plugins and Providers for Strapi',\n })}\n >\n <Tabs.Trigger value={PLUGIN}>\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.plugins',\n defaultMessage: 'Plugins',\n })}{' '}\n {pluginsResponse ? `(${pluginsResponse.meta.pagination.total})` : '...'}\n </Tabs.Trigger>\n <Tabs.Trigger value={PROVIDER}>\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.providers',\n defaultMessage: 'Providers',\n })}{' '}\n {providersResponse ? `(${providersResponse.meta.pagination.total})` : '...'}\n </Tabs.Trigger>\n </Tabs.List>\n\n <Box width=\"25%\">\n <Searchbar\n name=\"searchbar\"\n onClear={() => setQuery({ search: '', page: 1 })}\n value={query?.search}\n onChange={(e) => setQuery({ search: e.target.value, page: 1 })}\n clearLabel={formatMessage({\n id: 'admin.pages.MarketPlacePage.search.clear',\n defaultMessage: 'Clear the search',\n })}\n placeholder={formatMessage({\n id: 'admin.pages.MarketPlacePage.search.placeholder',\n defaultMessage: 'Search',\n })}\n >\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.search.placeholder',\n defaultMessage: 'Search',\n })}\n </Searchbar>\n </Box>\n </Flex>\n <Flex paddingBottom={4} gap={2}>\n <SortSelect\n sortQuery={query?.sort || 'name:asc'}\n handleSelectChange={handleSortSelectChange}\n />\n <NpmPackagesFilters\n npmPackageType={npmPackageType}\n possibleCollections={possibleCollections}\n possibleCategories={possibleCategories}\n query={query || {}}\n handleSelectChange={handleSelectChange}\n handleSelectClear={handleSelectClear}\n />\n </Flex>\n <Tabs.Content value={PLUGIN}>\n <NpmPackagesGrid\n npmPackages={pluginsResponse?.data}\n status={pluginsStatus}\n installedPackageNames={installedPackageNames}\n useYarn={useYarn}\n isInDevelopmentMode={isInDevelopmentMode}\n npmPackageType=\"plugin\"\n strapiAppVersion={strapiVersion}\n debouncedSearch={debouncedSearch}\n />\n </Tabs.Content>\n <Tabs.Content value={PROVIDER}>\n <NpmPackagesGrid\n npmPackages={providersResponse?.data}\n status={providersStatus}\n installedPackageNames={installedPackageNames}\n useYarn={useYarn}\n isInDevelopmentMode={isInDevelopmentMode}\n npmPackageType=\"provider\"\n debouncedSearch={debouncedSearch}\n />\n </Tabs.Content>\n <Pagination.Root {...pagination} defaultPageSize={24}>\n <Pagination.PageSize options={['12', '24', '50', '100']} />\n <Pagination.Links />\n </Pagination.Root>\n <Box paddingTop={8}>\n <a\n href=\"https://strapi.canny.io/plugin-requests\"\n target=\"_blank\"\n rel=\"noopener noreferrer nofollow\"\n style={{ textDecoration: 'none' }}\n onClick={() => trackUsage('didMissMarketplacePlugin')}\n >\n <ContentBox\n title={formatMessage({\n id: 'admin.pages.MarketPlacePage.missingPlugin.title',\n defaultMessage: 'Documentation',\n })}\n subtitle={formatMessage({\n id: 'admin.pages.MarketPlacePage.missingPlugin.description',\n defaultMessage:\n \"Tell us what plugin you are looking for and we'll let our community plugin developers know in case they are in search for inspiration!\",\n })}\n icon={<GlassesSquare />}\n iconBackground=\"alternative100\"\n endAction={\n <ExternalLink\n fill=\"neutral600\"\n width=\"1.2rem\"\n height=\"1.2rem\"\n style={{ marginLeft: '0.8rem' }}\n />\n }\n />\n </a>\n </Box>\n </Tabs.Root>\n </Layouts.Content>\n </Page.Main>\n </Layouts.Root>\n );\n};\n\nconst ProtectedMarketplacePage = () => {\n const permissions = useTypedSelector((state) => state.admin_app.permissions.marketplace?.main);\n\n return (\n <Page.Protect permissions={permissions}>\n <MarketplacePage />\n </Page.Protect>\n );\n};\n\nexport { MarketplacePage, ProtectedMarketplacePage };\nexport type { NpmPackageType, MarketplacePageQuery, TabQuery };\n"],"names":[],"mappings":"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"}