@strapi/admin 4.20.5 → 4.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (211) hide show
  1. package/dist/_chunks/{AdminSeatInfo-VeqDpwGV.js → AdminSeatInfo-0cO28eY4.js} +3 -3
  2. package/dist/_chunks/{AdminSeatInfo-VeqDpwGV.js.map → AdminSeatInfo-0cO28eY4.js.map} +1 -1
  3. package/dist/_chunks/{AdminSeatInfo-0PZPHqsd.mjs → AdminSeatInfo-mjxcHmrg.mjs} +3 -3
  4. package/dist/_chunks/{AdminSeatInfo-0PZPHqsd.mjs.map → AdminSeatInfo-mjxcHmrg.mjs.map} +1 -1
  5. package/dist/_chunks/{AuthenticatedApp-3loM1zPQ.js → AuthenticatedApp-YqvHVjWe.js} +21 -21
  6. package/dist/_chunks/{AuthenticatedApp-3loM1zPQ.js.map → AuthenticatedApp-YqvHVjWe.js.map} +1 -1
  7. package/dist/_chunks/{AuthenticatedApp-p_Hoz4w0.mjs → AuthenticatedApp-kwdjs_S0.mjs} +21 -21
  8. package/dist/_chunks/{AuthenticatedApp-p_Hoz4w0.mjs.map → AuthenticatedApp-kwdjs_S0.mjs.map} +1 -1
  9. package/dist/_chunks/{CreateActionEE-msdEHH2t.js → CreateActionEE-W6-7uSGv.js} +2 -2
  10. package/dist/_chunks/{CreateActionEE-msdEHH2t.js.map → CreateActionEE-W6-7uSGv.js.map} +1 -1
  11. package/dist/_chunks/{CreateActionEE-BvBzN3ej.mjs → CreateActionEE-_uYlQhyX.mjs} +2 -2
  12. package/dist/_chunks/{CreateActionEE-BvBzN3ej.mjs.map → CreateActionEE-_uYlQhyX.mjs.map} +1 -1
  13. package/dist/_chunks/{CreatePage-DvbIy_jN.mjs → CreatePage-80fIYaTs.mjs} +8 -8
  14. package/dist/_chunks/{CreatePage-DvbIy_jN.mjs.map → CreatePage-80fIYaTs.mjs.map} +1 -1
  15. package/dist/_chunks/{CreatePage-TnWHEKrd.js → CreatePage-AJOrHWAz.js} +3 -3
  16. package/dist/_chunks/{CreatePage-TnWHEKrd.js.map → CreatePage-AJOrHWAz.js.map} +1 -1
  17. package/dist/_chunks/{CreatePage-eh67IoKV.mjs → CreatePage-d-1uabiQ.mjs} +3 -3
  18. package/dist/_chunks/{CreatePage-eh67IoKV.mjs.map → CreatePage-d-1uabiQ.mjs.map} +1 -1
  19. package/dist/_chunks/{CreatePage-CXHGEXMF.mjs → CreatePage-gkLnzJM5.mjs} +6 -6
  20. package/dist/_chunks/{CreatePage-CXHGEXMF.mjs.map → CreatePage-gkLnzJM5.mjs.map} +1 -1
  21. package/dist/_chunks/{CreatePage-tYv61v1J.js → CreatePage-hZTEAj3p.js} +8 -8
  22. package/dist/_chunks/{CreatePage-tYv61v1J.js.map → CreatePage-hZTEAj3p.js.map} +1 -1
  23. package/dist/_chunks/{CreatePage-0a6OdLKp.js → CreatePage-nk4rR_Lo.js} +6 -6
  24. package/dist/_chunks/{CreatePage-0a6OdLKp.js.map → CreatePage-nk4rR_Lo.js.map} +1 -1
  25. package/dist/_chunks/{CreateView-37DEWWCT.js → CreateView-8BCw7Olc.js} +6 -6
  26. package/dist/_chunks/{CreateView-37DEWWCT.js.map → CreateView-8BCw7Olc.js.map} +1 -1
  27. package/dist/_chunks/{CreateView-lQqp9igR.js → CreateView-IJFkZ9ya.js} +6 -6
  28. package/dist/_chunks/{CreateView-lQqp9igR.js.map → CreateView-IJFkZ9ya.js.map} +1 -1
  29. package/dist/_chunks/{CreateView-8a8sE0PN.mjs → CreateView-fD5On04e.mjs} +6 -6
  30. package/dist/_chunks/{CreateView-8a8sE0PN.mjs.map → CreateView-fD5On04e.mjs.map} +1 -1
  31. package/dist/_chunks/{CreateView-hFjKdwYu.mjs → CreateView-rsZvKS7A.mjs} +6 -6
  32. package/dist/_chunks/{CreateView-hFjKdwYu.mjs.map → CreateView-rsZvKS7A.mjs.map} +1 -1
  33. package/dist/_chunks/{EditPage-D0i2YdDb.js → EditPage-7scuwbPj.js} +4 -4
  34. package/dist/_chunks/{EditPage-D0i2YdDb.js.map → EditPage-7scuwbPj.js.map} +1 -1
  35. package/dist/_chunks/{EditPage-fVWNx5Oh.js → EditPage-Fpm69oEe.js} +9 -9
  36. package/dist/_chunks/{EditPage-fVWNx5Oh.js.map → EditPage-Fpm69oEe.js.map} +1 -1
  37. package/dist/_chunks/{EditPage-fOldhH6r.js → EditPage-J6zVHasr.js} +6 -6
  38. package/dist/_chunks/{EditPage-fOldhH6r.js.map → EditPage-J6zVHasr.js.map} +1 -1
  39. package/dist/_chunks/{EditPage-EFPGPMV_.js → EditPage-_PINxFhm.js} +6 -6
  40. package/dist/_chunks/{EditPage-EFPGPMV_.js.map → EditPage-_PINxFhm.js.map} +1 -1
  41. package/dist/_chunks/{EditPage-CbpEmXk3.mjs → EditPage-d2rOG_1W.mjs} +4 -4
  42. package/dist/_chunks/{EditPage-CbpEmXk3.mjs.map → EditPage-d2rOG_1W.mjs.map} +1 -1
  43. package/dist/_chunks/{EditPage-H51hPwcO.mjs → EditPage-pgD1DzOE.mjs} +6 -6
  44. package/dist/_chunks/{EditPage-H51hPwcO.mjs.map → EditPage-pgD1DzOE.mjs.map} +1 -1
  45. package/dist/_chunks/{EditPage-JS93HO0g.mjs → EditPage-tdmuOKSb.mjs} +6 -6
  46. package/dist/_chunks/{EditPage-JS93HO0g.mjs.map → EditPage-tdmuOKSb.mjs.map} +1 -1
  47. package/dist/_chunks/{EditPage-RrSgOYln.mjs → EditPage-yMvPm2Nx.mjs} +9 -9
  48. package/dist/_chunks/{EditPage-RrSgOYln.mjs.map → EditPage-yMvPm2Nx.mjs.map} +1 -1
  49. package/dist/_chunks/{EditView-lgBWjHOT.mjs → EditView-_am4shhk.mjs} +4 -4
  50. package/dist/_chunks/{EditView-lgBWjHOT.mjs.map → EditView-_am4shhk.mjs.map} +1 -1
  51. package/dist/_chunks/{EditView-o4vADGcb.js → EditView-g7WobiS9.js} +4 -4
  52. package/dist/_chunks/{EditView-o4vADGcb.js.map → EditView-g7WobiS9.js.map} +1 -1
  53. package/dist/_chunks/{EditViewPage-mqbskolf.js → EditViewPage-Vkd1qJui.js} +4 -4
  54. package/dist/_chunks/{EditViewPage-mqbskolf.js.map → EditViewPage-Vkd1qJui.js.map} +1 -1
  55. package/dist/_chunks/{EditViewPage-qJ7nFINE.mjs → EditViewPage-v2VcQV_Y.mjs} +4 -4
  56. package/dist/_chunks/{EditViewPage-qJ7nFINE.mjs.map → EditViewPage-v2VcQV_Y.mjs.map} +1 -1
  57. package/dist/_chunks/{EventsTable--TwAHLZA.js → EventsTable-7jWjBOCM.js} +6 -6
  58. package/dist/_chunks/{EventsTable--TwAHLZA.js.map → EventsTable-7jWjBOCM.js.map} +1 -1
  59. package/dist/_chunks/{EventsTable-Fvc-JpRm.mjs → EventsTable-8U1cTmXv.mjs} +6 -6
  60. package/dist/_chunks/{EventsTable-Fvc-JpRm.mjs.map → EventsTable-8U1cTmXv.mjs.map} +1 -1
  61. package/dist/_chunks/{HomePage-a1vOU1ul.mjs → HomePage-KVErLS68.mjs} +5 -5
  62. package/dist/_chunks/{HomePage-a1vOU1ul.mjs.map → HomePage-KVErLS68.mjs.map} +1 -1
  63. package/dist/_chunks/{HomePage-uLq-MN1K.js → HomePage-YUUf2m0i.js} +6 -6
  64. package/dist/_chunks/{HomePage-uLq-MN1K.js.map → HomePage-YUUf2m0i.js.map} +1 -1
  65. package/dist/_chunks/{HomePage-nOmgQyML.mjs → HomePage-r-Q_KO54.mjs} +6 -6
  66. package/dist/_chunks/{HomePage-nOmgQyML.mjs.map → HomePage-r-Q_KO54.mjs.map} +1 -1
  67. package/dist/_chunks/{HomePage-uF97iLvr.js → HomePage-u73HVyVG.js} +5 -5
  68. package/dist/_chunks/{HomePage-uF97iLvr.js.map → HomePage-u73HVyVG.js.map} +1 -1
  69. package/dist/_chunks/{InformationBoxEE-zr8UNPkv.mjs → InformationBoxEE-WzZx0xfC.mjs} +3 -3
  70. package/dist/_chunks/{InformationBoxEE-zr8UNPkv.mjs.map → InformationBoxEE-WzZx0xfC.mjs.map} +1 -1
  71. package/dist/_chunks/{InformationBoxEE-rompvdum.js → InformationBoxEE-vGk1T9_V.js} +3 -3
  72. package/dist/_chunks/{InformationBoxEE-rompvdum.js.map → InformationBoxEE-vGk1T9_V.js.map} +1 -1
  73. package/dist/_chunks/{InstalledPluginsPage-swMYXqyB.mjs → InstalledPluginsPage-4ekFFFnc.mjs} +3 -3
  74. package/dist/_chunks/{InstalledPluginsPage-swMYXqyB.mjs.map → InstalledPluginsPage-4ekFFFnc.mjs.map} +1 -1
  75. package/dist/_chunks/{InstalledPluginsPage-fCay7xDO.js → InstalledPluginsPage-eNyidkBW.js} +3 -3
  76. package/dist/_chunks/{InstalledPluginsPage-fCay7xDO.js.map → InstalledPluginsPage-eNyidkBW.js.map} +1 -1
  77. package/dist/_chunks/{Layout-vuQrq1Uu.mjs → Layout-B87oCQCm.mjs} +2 -2
  78. package/dist/_chunks/{Layout-vuQrq1Uu.mjs.map → Layout-B87oCQCm.mjs.map} +1 -1
  79. package/dist/_chunks/{Layout-BcpbdKNS.js → Layout-m03mlKAn.js} +2 -2
  80. package/dist/_chunks/{Layout-BcpbdKNS.js.map → Layout-m03mlKAn.js.map} +1 -1
  81. package/dist/_chunks/{ListPage-bxulds-R.js → ListPage-7DYIHq-E.js} +4 -4
  82. package/dist/_chunks/{ListPage-bxulds-R.js.map → ListPage-7DYIHq-E.js.map} +1 -1
  83. package/dist/_chunks/{ListPage-8ZPXoi72.js → ListPage-81zGxguD.js} +6 -6
  84. package/dist/_chunks/{ListPage-8ZPXoi72.js.map → ListPage-81zGxguD.js.map} +1 -1
  85. package/dist/_chunks/{ListPage-JIwwNmac.mjs → ListPage-8UEc6X8O.mjs} +8 -8
  86. package/dist/_chunks/{ListPage-JIwwNmac.mjs.map → ListPage-8UEc6X8O.mjs.map} +1 -1
  87. package/dist/_chunks/{ListPage-2GK03p5D.js → ListPage-BHozpI7e.js} +2 -2
  88. package/dist/_chunks/{ListPage-2GK03p5D.js.map → ListPage-BHozpI7e.js.map} +1 -1
  89. package/dist/_chunks/{ListPage-txDe-JTh.js → ListPage-XSy4U_Wx.js} +8 -8
  90. package/dist/_chunks/{ListPage-txDe-JTh.js.map → ListPage-XSy4U_Wx.js.map} +1 -1
  91. package/dist/_chunks/{ListPage-oOPktA3S.mjs → ListPage-Zl1MvQPk.mjs} +4 -4
  92. package/dist/_chunks/{ListPage-oOPktA3S.mjs.map → ListPage-Zl1MvQPk.mjs.map} +1 -1
  93. package/dist/_chunks/{ListPage-hFe-nYXL.mjs → ListPage-aXOKmOXc.mjs} +3 -3
  94. package/dist/_chunks/{ListPage-hFe-nYXL.mjs.map → ListPage-aXOKmOXc.mjs.map} +1 -1
  95. package/dist/_chunks/{ListPage-G5KMMFsZ.mjs → ListPage-mNR6sIt1.mjs} +6 -6
  96. package/dist/_chunks/{ListPage-G5KMMFsZ.mjs.map → ListPage-mNR6sIt1.mjs.map} +1 -1
  97. package/dist/_chunks/{ListPage-LA0lT654.js → ListPage-rB8_0NLu.js} +7 -7
  98. package/dist/_chunks/{ListPage-LA0lT654.js.map → ListPage-rB8_0NLu.js.map} +1 -1
  99. package/dist/_chunks/{ListPage-IqEVyyyf.js → ListPage-rLn1O-6J.js} +3 -3
  100. package/dist/_chunks/{ListPage-IqEVyyyf.js.map → ListPage-rLn1O-6J.js.map} +1 -1
  101. package/dist/_chunks/{ListPage-AKGBR4U_.mjs → ListPage-xdRLSoa6.mjs} +2 -2
  102. package/dist/_chunks/{ListPage-AKGBR4U_.mjs.map → ListPage-xdRLSoa6.mjs.map} +1 -1
  103. package/dist/_chunks/{ListPage-Tebxu06N.mjs → ListPage-yUSPSU5S.mjs} +7 -7
  104. package/dist/_chunks/{ListPage-Tebxu06N.mjs.map → ListPage-yUSPSU5S.mjs.map} +1 -1
  105. package/dist/_chunks/{ListView-qaE8Vcb3.js → ListView-OTSwUf1i.js} +3 -3
  106. package/dist/_chunks/{ListView-qaE8Vcb3.js.map → ListView-OTSwUf1i.js.map} +1 -1
  107. package/dist/_chunks/{ListView-BHlcoKKy.mjs → ListView-RLPQGwfo.mjs} +3 -3
  108. package/dist/_chunks/{ListView-BHlcoKKy.mjs.map → ListView-RLPQGwfo.mjs.map} +1 -1
  109. package/dist/_chunks/{ListView-07uZxF2i.mjs → ListView-YA5QXiq4.mjs} +3 -3
  110. package/dist/_chunks/{ListView-07uZxF2i.mjs.map → ListView-YA5QXiq4.mjs.map} +1 -1
  111. package/dist/_chunks/{ListView-ESH3o0Lu.js → ListView-ehfFWy27.js} +3 -3
  112. package/dist/_chunks/{ListView-ESH3o0Lu.js.map → ListView-ehfFWy27.js.map} +1 -1
  113. package/dist/_chunks/{Login-POtw5QbC.js → Login-NBWPTGii.js} +2 -2
  114. package/dist/_chunks/{Login-POtw5QbC.js.map → Login-NBWPTGii.js.map} +1 -1
  115. package/dist/_chunks/{Login-ZETxeuNn.mjs → Login-e1_GFndv.mjs} +2 -2
  116. package/dist/_chunks/{Login-ZETxeuNn.mjs.map → Login-e1_GFndv.mjs.map} +1 -1
  117. package/dist/_chunks/{MagicLinkEE-HMr2D5cP.mjs → MagicLinkEE-KOvooF20.mjs} +4 -4
  118. package/dist/_chunks/{MagicLinkEE-HMr2D5cP.mjs.map → MagicLinkEE-KOvooF20.mjs.map} +1 -1
  119. package/dist/_chunks/{MagicLinkEE-VHh9i6gc.js → MagicLinkEE-LwIotwLh.js} +4 -4
  120. package/dist/_chunks/{MagicLinkEE-VHh9i6gc.js.map → MagicLinkEE-LwIotwLh.js.map} +1 -1
  121. package/dist/_chunks/{MarketplacePage-ZRMsVYJZ.mjs → MarketplacePage-3SjeOIl9.mjs} +3 -3
  122. package/dist/_chunks/{MarketplacePage-ZRMsVYJZ.mjs.map → MarketplacePage-3SjeOIl9.mjs.map} +1 -1
  123. package/dist/_chunks/{MarketplacePage-h7hniYgx.js → MarketplacePage-Kqg4doOi.js} +3 -3
  124. package/dist/_chunks/{MarketplacePage-h7hniYgx.js.map → MarketplacePage-Kqg4doOi.js.map} +1 -1
  125. package/dist/_chunks/{Permissions-0WY1QWWe.js → Permissions-9D-OrmKB.js} +2 -2
  126. package/dist/_chunks/{Permissions-0WY1QWWe.js.map → Permissions-9D-OrmKB.js.map} +1 -1
  127. package/dist/_chunks/{Permissions-ZU9ueRGQ.mjs → Permissions-RQidBUvg.mjs} +2 -2
  128. package/dist/_chunks/{Permissions-ZU9ueRGQ.mjs.map → Permissions-RQidBUvg.mjs.map} +1 -1
  129. package/dist/_chunks/{ProfilePage-1Lw2oTjj.js → ProfilePage-NHYSDob0.js} +3 -3
  130. package/dist/_chunks/{ProfilePage-1Lw2oTjj.js.map → ProfilePage-NHYSDob0.js.map} +1 -1
  131. package/dist/_chunks/{ProfilePage-nhuFpc-j.mjs → ProfilePage-p-ihQgkq.mjs} +3 -3
  132. package/dist/_chunks/{ProfilePage-nhuFpc-j.mjs.map → ProfilePage-p-ihQgkq.mjs.map} +1 -1
  133. package/dist/_chunks/{ReviewWorkflowsColumn-chpd_GQz.mjs → ReviewWorkflowsColumn-fV_jrZaM.mjs} +2 -2
  134. package/dist/_chunks/{ReviewWorkflowsColumn-chpd_GQz.mjs.map → ReviewWorkflowsColumn-fV_jrZaM.mjs.map} +1 -1
  135. package/dist/_chunks/{ReviewWorkflowsColumn-RLBHKpSx.js → ReviewWorkflowsColumn-tao-_Nrx.js} +2 -2
  136. package/dist/_chunks/{ReviewWorkflowsColumn-RLBHKpSx.js.map → ReviewWorkflowsColumn-tao-_Nrx.js.map} +1 -1
  137. package/dist/_chunks/{SelectRoles-J-cOmNPg.mjs → SelectRoles-3M7Lm8IQ.mjs} +3 -3
  138. package/dist/_chunks/{SelectRoles-J-cOmNPg.mjs.map → SelectRoles-3M7Lm8IQ.mjs.map} +1 -1
  139. package/dist/_chunks/{SelectRoles-G7h5eMx7.js → SelectRoles-I4YcfYDL.js} +3 -3
  140. package/dist/_chunks/{SelectRoles-G7h5eMx7.js.map → SelectRoles-I4YcfYDL.js.map} +1 -1
  141. package/dist/_chunks/{SettingsPage-LJF4HQu3.mjs → SettingsPage-Ib7N7CWP.mjs} +21 -21
  142. package/dist/_chunks/{SettingsPage-LJF4HQu3.mjs.map → SettingsPage-Ib7N7CWP.mjs.map} +1 -1
  143. package/dist/_chunks/{SettingsPage-RxG0zNmi.js → SettingsPage-uZJ0TQ2j.js} +21 -21
  144. package/dist/_chunks/{SettingsPage-RxG0zNmi.js.map → SettingsPage-uZJ0TQ2j.js.map} +1 -1
  145. package/dist/_chunks/{SingleSignOnPage-5tR5Di3-.js → SingleSignOnPage-9shy4b5V.js} +3 -3
  146. package/dist/_chunks/{SingleSignOnPage-5tR5Di3-.js.map → SingleSignOnPage-9shy4b5V.js.map} +1 -1
  147. package/dist/_chunks/{SingleSignOnPage-mUWnhmYK.mjs → SingleSignOnPage-haO4QYIZ.mjs} +3 -3
  148. package/dist/_chunks/{SingleSignOnPage-mUWnhmYK.mjs.map → SingleSignOnPage-haO4QYIZ.mjs.map} +1 -1
  149. package/dist/_chunks/{TokenTypeSelect-Pu2u4u60.js → TokenTypeSelect-6dKaAxNw.js} +2 -2
  150. package/dist/_chunks/{TokenTypeSelect-Pu2u4u60.js.map → TokenTypeSelect-6dKaAxNw.js.map} +1 -1
  151. package/dist/_chunks/{TokenTypeSelect--jNeSLmd.mjs → TokenTypeSelect-vW7D0ueA.mjs} +2 -2
  152. package/dist/_chunks/{TokenTypeSelect--jNeSLmd.mjs.map → TokenTypeSelect-vW7D0ueA.mjs.map} +1 -1
  153. package/dist/_chunks/{apiTokens-kqDQ_zpb.mjs → apiTokens-MX89ShkN.mjs} +2 -2
  154. package/dist/_chunks/{apiTokens-kqDQ_zpb.mjs.map → apiTokens-MX89ShkN.mjs.map} +1 -1
  155. package/dist/_chunks/{apiTokens--6uAVPWd.js → apiTokens-OFJ2wELt.js} +2 -2
  156. package/dist/_chunks/{apiTokens--6uAVPWd.js.map → apiTokens-OFJ2wELt.js.map} +1 -1
  157. package/dist/_chunks/{constants-wqvQZos7.mjs → constants-Dc5jQV8s.mjs} +2 -2
  158. package/dist/_chunks/{constants-wqvQZos7.mjs.map → constants-Dc5jQV8s.mjs.map} +1 -1
  159. package/dist/_chunks/{constants-pDLet6IX.js → constants-ERzqKCqP.js} +2 -2
  160. package/dist/_chunks/{constants-pDLet6IX.js.map → constants-ERzqKCqP.js.map} +1 -1
  161. package/dist/_chunks/{constants-I89xL90x.js → constants-Hbt2Ap8U.js} +2 -2
  162. package/dist/_chunks/{constants-I89xL90x.js.map → constants-Hbt2Ap8U.js.map} +1 -1
  163. package/dist/_chunks/{constants-7tUiUGm7.js → constants-QP7CzvHM.js} +6 -6
  164. package/dist/_chunks/{constants-7tUiUGm7.js.map → constants-QP7CzvHM.js.map} +1 -1
  165. package/dist/_chunks/{constants-qrsi70P9.mjs → constants-VvofwTIc.mjs} +2 -2
  166. package/dist/_chunks/{constants-qrsi70P9.mjs.map → constants-VvofwTIc.mjs.map} +1 -1
  167. package/dist/_chunks/{constants-oGpvjQcC.mjs → constants-dP7nNukG.mjs} +6 -6
  168. package/dist/_chunks/{constants-oGpvjQcC.mjs.map → constants-dP7nNukG.mjs.map} +1 -1
  169. package/dist/_chunks/{constants-8R4e_wL4.mjs → constants-d_g76JgI.mjs} +4 -4
  170. package/dist/_chunks/{constants-8R4e_wL4.mjs.map → constants-d_g76JgI.mjs.map} +1 -1
  171. package/dist/_chunks/{constants-jbMn10wi.js → constants-phoWsshc.js} +4 -4
  172. package/dist/_chunks/{constants-jbMn10wi.js.map → constants-phoWsshc.js.map} +1 -1
  173. package/dist/_chunks/{index-yRyOfi01.mjs → index-XBOTBNuC.mjs} +10 -10
  174. package/dist/_chunks/{index-yRyOfi01.mjs.map → index-XBOTBNuC.mjs.map} +1 -1
  175. package/dist/_chunks/{index-ydPzLfs7.js → index-pLv4RVFT.js} +10 -10
  176. package/dist/_chunks/{index-ydPzLfs7.js.map → index-pLv4RVFT.js.map} +1 -1
  177. package/dist/_chunks/{reviewWorkflows-qkvwfbFl.js → reviewWorkflows-sIRrdSIc.js} +2 -2
  178. package/dist/_chunks/{reviewWorkflows-qkvwfbFl.js.map → reviewWorkflows-sIRrdSIc.js.map} +1 -1
  179. package/dist/_chunks/{reviewWorkflows-zkQBDTm_.mjs → reviewWorkflows-t1LyvpuK.mjs} +2 -2
  180. package/dist/_chunks/{reviewWorkflows-zkQBDTm_.mjs.map → reviewWorkflows-t1LyvpuK.mjs.map} +1 -1
  181. package/dist/_chunks/{transferTokens-8RJcRrF7.mjs → transferTokens-UY0XTF15.mjs} +2 -2
  182. package/dist/_chunks/{transferTokens-8RJcRrF7.mjs.map → transferTokens-UY0XTF15.mjs.map} +1 -1
  183. package/dist/_chunks/{transferTokens-mBIXwjnE.js → transferTokens-WEaXK93i.js} +2 -2
  184. package/dist/_chunks/{transferTokens-mBIXwjnE.js.map → transferTokens-WEaXK93i.js.map} +1 -1
  185. package/dist/_chunks/{useAdminRoles-0FSsVVVF.mjs → useAdminRoles-8j_Rc44Z.mjs} +2 -2
  186. package/dist/_chunks/{useAdminRoles-0FSsVVVF.mjs.map → useAdminRoles-8j_Rc44Z.mjs.map} +1 -1
  187. package/dist/_chunks/{useAdminRoles-2lOWH8Kw.js → useAdminRoles-IiHPVeUo.js} +2 -2
  188. package/dist/_chunks/{useAdminRoles-2lOWH8Kw.js.map → useAdminRoles-IiHPVeUo.js.map} +1 -1
  189. package/dist/_chunks/{useContentTypes-JzGTxjad.js → useContentTypes-Bk1Y2UmU.js} +2 -2
  190. package/dist/_chunks/{useContentTypes-JzGTxjad.js.map → useContentTypes-Bk1Y2UmU.js.map} +1 -1
  191. package/dist/_chunks/{useContentTypes-GOmCpezl.mjs → useContentTypes-Madr3L1H.mjs} +2 -2
  192. package/dist/_chunks/{useContentTypes-GOmCpezl.mjs.map → useContentTypes-Madr3L1H.mjs.map} +1 -1
  193. package/dist/_chunks/{useLicenseLimitNotification-MeYE7YEx.js → useLicenseLimitNotification-lU6tLg8T.js} +2 -2
  194. package/dist/_chunks/{useLicenseLimitNotification-MeYE7YEx.js.map → useLicenseLimitNotification-lU6tLg8T.js.map} +1 -1
  195. package/dist/_chunks/{useLicenseLimitNotification-U_gpKHX2.mjs → useLicenseLimitNotification-rN5MNuOy.mjs} +2 -2
  196. package/dist/_chunks/{useLicenseLimitNotification-U_gpKHX2.mjs.map → useLicenseLimitNotification-rN5MNuOy.mjs.map} +1 -1
  197. package/dist/_chunks/{useReviewWorkflows--Q0J_Ge3.js → useReviewWorkflows-bzq0E6aV.js} +2 -2
  198. package/dist/_chunks/{useReviewWorkflows--Q0J_Ge3.js.map → useReviewWorkflows-bzq0E6aV.js.map} +1 -1
  199. package/dist/_chunks/{useReviewWorkflows-JseCtS_K.mjs → useReviewWorkflows-zEtut4MA.mjs} +2 -2
  200. package/dist/_chunks/{useReviewWorkflows-JseCtS_K.mjs.map → useReviewWorkflows-zEtut4MA.mjs.map} +1 -1
  201. package/dist/_chunks/{useWebhooks-rkAK3kK5.js → useWebhooks--d-jYykj.js} +2 -2
  202. package/dist/_chunks/{useWebhooks-rkAK3kK5.js.map → useWebhooks--d-jYykj.js.map} +1 -1
  203. package/dist/_chunks/{useWebhooks-GBt4UUQt.mjs → useWebhooks-0L1K3yUR.mjs} +2 -2
  204. package/dist/_chunks/{useWebhooks-GBt4UUQt.mjs.map → useWebhooks-0L1K3yUR.mjs.map} +1 -1
  205. package/dist/_chunks/{validateWorkflow-Owsa2rpu.mjs → validateWorkflow-2FnomUH9.mjs} +2 -2
  206. package/dist/_chunks/{validateWorkflow-Owsa2rpu.mjs.map → validateWorkflow-2FnomUH9.mjs.map} +1 -1
  207. package/dist/_chunks/{validateWorkflow-K0uDqmsX.js → validateWorkflow-qMNO_vCC.js} +2 -2
  208. package/dist/_chunks/{validateWorkflow-K0uDqmsX.js.map → validateWorkflow-qMNO_vCC.js.map} +1 -1
  209. package/dist/admin/index.js +1 -1
  210. package/dist/admin/index.mjs +1 -1
  211. package/package.json +13 -13
@@ -1 +1 @@
1
- {"version":3,"file":"MarketplacePage-h7hniYgx.js","sources":["../../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\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';\nimport styled from 'styled-components';\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 [isVisible, setIsVisible] = React.useState(false);\n const buttonRef = React.useRef<HTMLButtonElement>(null!);\n const { formatMessage } = useIntl();\n\n const handleToggle = () => setIsVisible((prev) => !prev);\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 <>\n <Box paddingTop={1} paddingBottom={1}>\n <ButtonToggle\n variant=\"tertiary\"\n ref={buttonRef}\n startIcon={<Filter />}\n onClick={handleToggle}\n size=\"S\"\n >\n {formatMessage({ id: 'app.utils.filters', defaultMessage: 'Filters' })}\n </ButtonToggle>\n {isVisible && (\n <Popover source={buttonRef} onDismiss={handleToggle} padding={3} spacing={4}>\n <FiltersFlex 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 </FiltersFlex>\n </Popover>\n )}\n </Box>\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 </>\n );\n};\n\nconst ButtonToggle = styled(Button)`\n height: ${({ theme }) => theme.sizes.input.S};\n`;\n\nconst FiltersFlex = styled(Flex)`\n /* Hide the label, every input needs a label. */\n label {\n border: 0;\n clip: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n }\n`;\n\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 label={message}\n placeholder={message}\n size=\"M\"\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 { Box, Flex, Icon, Tooltip, Typography, Divider, Button } from '@strapi/design-system';\nimport { LinkButton } from '@strapi/design-system/v2';\nimport {\n useTracking,\n pxToRem,\n AppInfoContextValue,\n useNotification,\n useClipboard,\n} from '@strapi/helper-plugin';\nimport { CheckCircle, ExternalLink, Download, Github, Star, Check, Duplicate } from '@strapi/icons';\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';\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(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 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 as=\"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 as=\"h3\" variant=\"delta\">\n <Flex alignItems=\"center\">\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 <Flex>\n <Icon as={CheckCircle} marginLeft={2} color=\"success600\" />\n </Flex>\n </Tooltip>\n )}\n {attributes.madeByStrapi && (\n <Tooltip description={madeByStrapiMessage}>\n <Flex>\n <Box\n as=\"img\"\n src={StrapiLogo}\n alt={madeByStrapiMessage}\n marginLeft={1}\n width={6}\n height=\"auto\"\n />\n </Flex>\n </Tooltip>\n )}\n </Flex>\n </Typography>\n </Box>\n <Box paddingTop={2}>\n <EllipsisText as=\"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 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}\n\nconst InstallPluginButton = ({\n isInstalled,\n isInDevelopmentMode,\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: { id: 'admin.pages.MarketPlacePage.plugin.copy.success' },\n });\n }\n };\n\n // Already installed\n if (isInstalled) {\n return (\n <Box paddingLeft={4}>\n <Icon as={Check} marginRight={2} width={12} height={12} 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 </Box>\n );\n }\n\n // In development, show install button\n if (isInDevelopmentMode) {\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 description={\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 <Button\n size=\"S\"\n startIcon={<Duplicate />}\n variant=\"secondary\"\n onClick={handleCopy}\n disabled={!isCompatible}\n >\n {installMessage}\n </Button>\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 <Icon as={Github} height={pxToRem(12)} width={pxToRem(12)} aria-hidden />\n <Icon as={Star} height={pxToRem(12)} width={pxToRem(12)} color=\"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 unsetMargin={false} />\n </>\n )}\n <Icon as={Download} height={pxToRem(12)} width={pxToRem(12)} 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: ${pxToRem(12)};\n transform: rotate(90deg);\n`;\n\nexport { NpmPackageCard };\nexport type { NpmPackageCardProps };\n","import {\n Box,\n Flex,\n Grid,\n GridItem,\n GridLayout,\n Icon,\n Loader,\n Typography,\n} from '@strapi/design-system';\nimport { AnErrorOccurred, AppInfoContextValue } from '@strapi/helper-plugin';\nimport { EmptyDocuments } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\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 (\n <Flex paddingTop={8}>\n <AnErrorOccurred />\n </Flex>\n );\n }\n\n if (status === 'loading') {\n return (\n <Flex justifyContent=\"center\" paddingTop={8}>\n <Loader>Loading content...</Loader>\n </Flex>\n );\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 <GridLayout>\n {Array(12)\n .fill(null)\n .map((_, idx) => (\n <EmptyPluginCard key={idx} height=\"234px\" hasRadius />\n ))}\n </GridLayout>\n <Box position=\"absolute\" top={11} width=\"100%\">\n <Flex alignItems=\"center\" justifyContent=\"center\" direction=\"column\">\n <Icon as={EmptyDocuments} color={undefined} width=\"160px\" height=\"88px\" />\n <Box paddingTop={6}>\n <Typography variant=\"delta\" as=\"p\" textColor=\"neutral600\">\n {emptySearchMessage}\n </Typography>\n </Box>\n </Flex>\n </Box>\n </Box>\n );\n }\n\n return (\n <Grid gap={4}>\n {npmPackages.map((npmPackage) => (\n <GridItem col={4} s={6} xs={12} style={{ height: '100%' }} key={npmPackage.id}>\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 </GridItem>\n ))}\n </Grid>\n );\n};\n\nconst EmptyPluginCard = styled(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 { HeaderLayout } from '@strapi/design-system';\nimport { LinkButton } from '@strapi/design-system/v2';\nimport { useTracking } from '@strapi/helper-plugin';\nimport { Upload } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\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 <HeaderLayout\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, Layout, Main, Typography } from '@strapi/design-system';\nimport { pxToRem } from '@strapi/helper-plugin';\nimport { useIntl } from 'react-intl';\n\nimport { PageHeader } from './PageHeader';\n\nconst OfflineLayout = () => {\n const { formatMessage } = useIntl();\n\n return (\n <Layout>\n <Main>\n <PageHeader />\n <Flex\n width=\"100%\"\n direction=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n paddingTop={pxToRem(120)}\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 </Layout>\n );\n};\n\nexport { OfflineLayout };\n","import { Box, SingleSelectOption, SingleSelect } 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 size=\"S\"\n id=\"sort-by-select\"\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 label={formatMessage({\n id: 'admin.pages.MarketPlacePage.sort.label',\n defaultMessage: 'Sort by',\n })}\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(Box)`\n font-weight: ${({ theme }) => theme.fontWeights.semiBold};\n\n span {\n font-size: ${({ theme }) => theme.fontSizes[1]};\n }\n\n /* Hide the label, every input needs a label. */\n label {\n border: 0;\n clip: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n }\n`;\n\nexport { SortSelect };\nexport type { SortSelectProps };\n","import { useNotifyAT } from '@strapi/design-system';\nimport { useNotification } from '@strapi/helper-plugin';\nimport * as qs from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useQuery } from 'react-query';\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}\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}: 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 };\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\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: 'warning',\n message: { 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 };\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: 'warning',\n message: { 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 {\n Box,\n ContentLayout,\n Flex,\n Icon,\n Layout,\n Main,\n Searchbar,\n Tab,\n TabGroup,\n TabPanel,\n TabPanels,\n Tabs,\n} from '@strapi/design-system';\nimport {\n CheckPagePermissions,\n ContentBox,\n PageSizeURLQuery,\n PaginationURLQuery,\n useAppInfo,\n useFocusWhenNavigate,\n useNotification,\n useQueryParams,\n useTracking,\n} from '@strapi/helper-plugin';\nimport { ExternalLink, GlassesSquare } from '@strapi/icons';\nimport { Helmet } from 'react-helmet';\nimport { useIntl } from 'react-intl';\nimport { useSelector } from 'react-redux';\n\nimport { useDebounce } from '../../hooks/useDebounce';\nimport { selectAdminPermissions } from '../../selectors';\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 MarketplacePage = () => {\n const tabRef = React.useRef<any>(null);\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 { autoReload: isInDevelopmentMode, dependencies, useYarn, strapiVersion } = useAppInfo();\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 useFocusWhenNavigate();\n\n React.useEffect(() => {\n trackUsage('didGoToMarketplace');\n }, [trackUsage]);\n\n React.useEffect(() => {\n if (!isInDevelopmentMode) {\n toggleNotification({\n type: 'info',\n message: {\n id: 'admin.pages.MarketPlacePage.production',\n defaultMessage: 'Manage plugins from the development environment',\n },\n });\n }\n }, [toggleNotification, isInDevelopmentMode]);\n\n const {\n pluginsResponse,\n providersResponse,\n pluginsStatus,\n providersStatus,\n possibleCollections,\n possibleCategories,\n pagination,\n } = useMarketplaceData({ npmPackageType, debouncedSearch, query, tabQuery });\n\n const indexOfNpmPackageType = ['plugin', 'provider'].indexOf(npmPackageType);\n\n // TODO: Replace this solution with v2 of the Design System\n // Check if the active tab index changes and call the handler of the ref to update the tab group component\n React.useEffect(() => {\n if (tabRef.current) {\n tabRef.current._handlers.setSelectedTabIndex(indexOfNpmPackageType);\n }\n }, [indexOfNpmPackageType]);\n\n if (!isOnline) {\n return <OfflineLayout />;\n }\n\n const handleTabChange = (selected: number) => {\n const selectedTab = selected === 0 ? 'plugin' : 'provider';\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 <Layout>\n <Main>\n <Helmet\n title={formatMessage({\n id: 'admin.pages.MarketPlacePage.helmet',\n defaultMessage: 'Marketplace - Plugins',\n })}\n />\n <PageHeader isOnline={isOnline} npmPackageType={npmPackageType} />\n <ContentLayout>\n <TabGroup\n label={formatMessage({\n id: 'admin.pages.MarketPlacePage.tab-group.label',\n defaultMessage: 'Plugins and Providers for Strapi',\n })}\n id=\"tabs\"\n variant=\"simple\"\n initialSelectedTabIndex={indexOfNpmPackageType}\n onTabChange={handleTabChange}\n ref={tabRef}\n >\n <Flex justifyContent=\"space-between\" paddingBottom={4}>\n <Tabs>\n <Tab>\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.plugins',\n defaultMessage: 'Plugins',\n })}{' '}\n {pluginsResponse ? `(${pluginsResponse.meta.pagination.total})` : '...'}\n </Tab>\n <Tab>\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.providers',\n defaultMessage: 'Providers',\n })}{' '}\n {providersResponse ? `(${providersResponse.meta.pagination.total})` : '...'}\n </Tab>\n </Tabs>\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\n <TabPanels>\n {/* Plugins panel */}\n <TabPanel>\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 </TabPanel>\n {/* Providers panel */}\n <TabPanel>\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 </TabPanel>\n </TabPanels>\n </TabGroup>\n {pagination ? (\n <Box paddingTop={4}>\n <Flex alignItems=\"flex-end\" justifyContent=\"space-between\">\n <PageSizeURLQuery options={['12', '24', '50', '100']} defaultValue=\"24\" />\n <PaginationURLQuery pagination={pagination} />\n </Flex>\n </Box>\n ) : null}\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 <Icon as={ExternalLink} color=\"neutral600\" width={3} height={3} marginLeft={2} />\n }\n />\n </a>\n </Box>\n </ContentLayout>\n </Main>\n </Layout>\n );\n};\n\nconst ProtectedMarketplacePage = () => {\n const permissions = useSelector(selectAdminPermissions);\n\n return (\n // @ts-expect-error – the selector is not typed.\n <CheckPagePermissions permissions={permissions.marketplace.main}>\n <MarketplacePage />\n </CheckPagePermissions>\n );\n};\n\nexport { MarketplacePage, ProtectedMarketplacePage };\nexport type { NpmPackageType, MarketplacePageQuery, TabQuery };\n"],"names":["React","useIntl","jsxs","Fragment","Box","jsx","Filter","Popover","Tag","Cross","styled","Button","Flex","MultiSelect","MultiSelectOption","Typography","useTracking","pluralize","Tooltip","Icon","CheckCircle","StrapiLogo","LinkButton","ExternalLink","useNotification","useClipboard","Check","semver","Duplicate","Github","pxToRem","Star","Download","Divider","AnErrorOccurred","Loader","GridLayout","EmptyDocuments","Grid","GridItem","HeaderLayout","Upload","Layout","Main","SingleSelect","SingleSelectOption","useNotifyAT","useQuery","qs","useQueryParams","useDebounce","useAppInfo","useFocusWhenNavigate","Helmet","ContentLayout","TabGroup","Tabs","Tab","Searchbar","TabPanels","TabPanel","PageSizeURLQuery","PaginationURLQuery","ContentBox","GlassesSquare","useSelector","selectAdminPermissions","CheckPagePermissions"],"mappings":"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"}
1
+ {"version":3,"file":"MarketplacePage-Kqg4doOi.js","sources":["../../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\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';\nimport styled from 'styled-components';\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 [isVisible, setIsVisible] = React.useState(false);\n const buttonRef = React.useRef<HTMLButtonElement>(null!);\n const { formatMessage } = useIntl();\n\n const handleToggle = () => setIsVisible((prev) => !prev);\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 <>\n <Box paddingTop={1} paddingBottom={1}>\n <ButtonToggle\n variant=\"tertiary\"\n ref={buttonRef}\n startIcon={<Filter />}\n onClick={handleToggle}\n size=\"S\"\n >\n {formatMessage({ id: 'app.utils.filters', defaultMessage: 'Filters' })}\n </ButtonToggle>\n {isVisible && (\n <Popover source={buttonRef} onDismiss={handleToggle} padding={3} spacing={4}>\n <FiltersFlex 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 </FiltersFlex>\n </Popover>\n )}\n </Box>\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 </>\n );\n};\n\nconst ButtonToggle = styled(Button)`\n height: ${({ theme }) => theme.sizes.input.S};\n`;\n\nconst FiltersFlex = styled(Flex)`\n /* Hide the label, every input needs a label. */\n label {\n border: 0;\n clip: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n }\n`;\n\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 label={message}\n placeholder={message}\n size=\"M\"\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 { Box, Flex, Icon, Tooltip, Typography, Divider, Button } from '@strapi/design-system';\nimport { LinkButton } from '@strapi/design-system/v2';\nimport {\n useTracking,\n pxToRem,\n AppInfoContextValue,\n useNotification,\n useClipboard,\n} from '@strapi/helper-plugin';\nimport { CheckCircle, ExternalLink, Download, Github, Star, Check, Duplicate } from '@strapi/icons';\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';\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(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 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 as=\"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 as=\"h3\" variant=\"delta\">\n <Flex alignItems=\"center\">\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 <Flex>\n <Icon as={CheckCircle} marginLeft={2} color=\"success600\" />\n </Flex>\n </Tooltip>\n )}\n {attributes.madeByStrapi && (\n <Tooltip description={madeByStrapiMessage}>\n <Flex>\n <Box\n as=\"img\"\n src={StrapiLogo}\n alt={madeByStrapiMessage}\n marginLeft={1}\n width={6}\n height=\"auto\"\n />\n </Flex>\n </Tooltip>\n )}\n </Flex>\n </Typography>\n </Box>\n <Box paddingTop={2}>\n <EllipsisText as=\"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 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}\n\nconst InstallPluginButton = ({\n isInstalled,\n isInDevelopmentMode,\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: { id: 'admin.pages.MarketPlacePage.plugin.copy.success' },\n });\n }\n };\n\n // Already installed\n if (isInstalled) {\n return (\n <Box paddingLeft={4}>\n <Icon as={Check} marginRight={2} width={12} height={12} 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 </Box>\n );\n }\n\n // In development, show install button\n if (isInDevelopmentMode) {\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 description={\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 <Button\n size=\"S\"\n startIcon={<Duplicate />}\n variant=\"secondary\"\n onClick={handleCopy}\n disabled={!isCompatible}\n >\n {installMessage}\n </Button>\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 <Icon as={Github} height={pxToRem(12)} width={pxToRem(12)} aria-hidden />\n <Icon as={Star} height={pxToRem(12)} width={pxToRem(12)} color=\"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 unsetMargin={false} />\n </>\n )}\n <Icon as={Download} height={pxToRem(12)} width={pxToRem(12)} 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: ${pxToRem(12)};\n transform: rotate(90deg);\n`;\n\nexport { NpmPackageCard };\nexport type { NpmPackageCardProps };\n","import {\n Box,\n Flex,\n Grid,\n GridItem,\n GridLayout,\n Icon,\n Loader,\n Typography,\n} from '@strapi/design-system';\nimport { AnErrorOccurred, AppInfoContextValue } from '@strapi/helper-plugin';\nimport { EmptyDocuments } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\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 (\n <Flex paddingTop={8}>\n <AnErrorOccurred />\n </Flex>\n );\n }\n\n if (status === 'loading') {\n return (\n <Flex justifyContent=\"center\" paddingTop={8}>\n <Loader>Loading content...</Loader>\n </Flex>\n );\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 <GridLayout>\n {Array(12)\n .fill(null)\n .map((_, idx) => (\n <EmptyPluginCard key={idx} height=\"234px\" hasRadius />\n ))}\n </GridLayout>\n <Box position=\"absolute\" top={11} width=\"100%\">\n <Flex alignItems=\"center\" justifyContent=\"center\" direction=\"column\">\n <Icon as={EmptyDocuments} color={undefined} width=\"160px\" height=\"88px\" />\n <Box paddingTop={6}>\n <Typography variant=\"delta\" as=\"p\" textColor=\"neutral600\">\n {emptySearchMessage}\n </Typography>\n </Box>\n </Flex>\n </Box>\n </Box>\n );\n }\n\n return (\n <Grid gap={4}>\n {npmPackages.map((npmPackage) => (\n <GridItem col={4} s={6} xs={12} style={{ height: '100%' }} key={npmPackage.id}>\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 </GridItem>\n ))}\n </Grid>\n );\n};\n\nconst EmptyPluginCard = styled(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 { HeaderLayout } from '@strapi/design-system';\nimport { LinkButton } from '@strapi/design-system/v2';\nimport { useTracking } from '@strapi/helper-plugin';\nimport { Upload } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\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 <HeaderLayout\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, Layout, Main, Typography } from '@strapi/design-system';\nimport { pxToRem } from '@strapi/helper-plugin';\nimport { useIntl } from 'react-intl';\n\nimport { PageHeader } from './PageHeader';\n\nconst OfflineLayout = () => {\n const { formatMessage } = useIntl();\n\n return (\n <Layout>\n <Main>\n <PageHeader />\n <Flex\n width=\"100%\"\n direction=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n paddingTop={pxToRem(120)}\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 </Layout>\n );\n};\n\nexport { OfflineLayout };\n","import { Box, SingleSelectOption, SingleSelect } 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 size=\"S\"\n id=\"sort-by-select\"\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 label={formatMessage({\n id: 'admin.pages.MarketPlacePage.sort.label',\n defaultMessage: 'Sort by',\n })}\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(Box)`\n font-weight: ${({ theme }) => theme.fontWeights.semiBold};\n\n span {\n font-size: ${({ theme }) => theme.fontSizes[1]};\n }\n\n /* Hide the label, every input needs a label. */\n label {\n border: 0;\n clip: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n }\n`;\n\nexport { SortSelect };\nexport type { SortSelectProps };\n","import { useNotifyAT } from '@strapi/design-system';\nimport { useNotification } from '@strapi/helper-plugin';\nimport * as qs from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useQuery } from 'react-query';\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}\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}: 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 };\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\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: 'warning',\n message: { 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 };\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: 'warning',\n message: { 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 {\n Box,\n ContentLayout,\n Flex,\n Icon,\n Layout,\n Main,\n Searchbar,\n Tab,\n TabGroup,\n TabPanel,\n TabPanels,\n Tabs,\n} from '@strapi/design-system';\nimport {\n CheckPagePermissions,\n ContentBox,\n PageSizeURLQuery,\n PaginationURLQuery,\n useAppInfo,\n useFocusWhenNavigate,\n useNotification,\n useQueryParams,\n useTracking,\n} from '@strapi/helper-plugin';\nimport { ExternalLink, GlassesSquare } from '@strapi/icons';\nimport { Helmet } from 'react-helmet';\nimport { useIntl } from 'react-intl';\nimport { useSelector } from 'react-redux';\n\nimport { useDebounce } from '../../hooks/useDebounce';\nimport { selectAdminPermissions } from '../../selectors';\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 MarketplacePage = () => {\n const tabRef = React.useRef<any>(null);\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 { autoReload: isInDevelopmentMode, dependencies, useYarn, strapiVersion } = useAppInfo();\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 useFocusWhenNavigate();\n\n React.useEffect(() => {\n trackUsage('didGoToMarketplace');\n }, [trackUsage]);\n\n React.useEffect(() => {\n if (!isInDevelopmentMode) {\n toggleNotification({\n type: 'info',\n message: {\n id: 'admin.pages.MarketPlacePage.production',\n defaultMessage: 'Manage plugins from the development environment',\n },\n });\n }\n }, [toggleNotification, isInDevelopmentMode]);\n\n const {\n pluginsResponse,\n providersResponse,\n pluginsStatus,\n providersStatus,\n possibleCollections,\n possibleCategories,\n pagination,\n } = useMarketplaceData({ npmPackageType, debouncedSearch, query, tabQuery });\n\n const indexOfNpmPackageType = ['plugin', 'provider'].indexOf(npmPackageType);\n\n // TODO: Replace this solution with v2 of the Design System\n // Check if the active tab index changes and call the handler of the ref to update the tab group component\n React.useEffect(() => {\n if (tabRef.current) {\n tabRef.current._handlers.setSelectedTabIndex(indexOfNpmPackageType);\n }\n }, [indexOfNpmPackageType]);\n\n if (!isOnline) {\n return <OfflineLayout />;\n }\n\n const handleTabChange = (selected: number) => {\n const selectedTab = selected === 0 ? 'plugin' : 'provider';\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 <Layout>\n <Main>\n <Helmet\n title={formatMessage({\n id: 'admin.pages.MarketPlacePage.helmet',\n defaultMessage: 'Marketplace - Plugins',\n })}\n />\n <PageHeader isOnline={isOnline} npmPackageType={npmPackageType} />\n <ContentLayout>\n <TabGroup\n label={formatMessage({\n id: 'admin.pages.MarketPlacePage.tab-group.label',\n defaultMessage: 'Plugins and Providers for Strapi',\n })}\n id=\"tabs\"\n variant=\"simple\"\n initialSelectedTabIndex={indexOfNpmPackageType}\n onTabChange={handleTabChange}\n ref={tabRef}\n >\n <Flex justifyContent=\"space-between\" paddingBottom={4}>\n <Tabs>\n <Tab>\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.plugins',\n defaultMessage: 'Plugins',\n })}{' '}\n {pluginsResponse ? `(${pluginsResponse.meta.pagination.total})` : '...'}\n </Tab>\n <Tab>\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.providers',\n defaultMessage: 'Providers',\n })}{' '}\n {providersResponse ? `(${providersResponse.meta.pagination.total})` : '...'}\n </Tab>\n </Tabs>\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\n <TabPanels>\n {/* Plugins panel */}\n <TabPanel>\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 </TabPanel>\n {/* Providers panel */}\n <TabPanel>\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 </TabPanel>\n </TabPanels>\n </TabGroup>\n {pagination ? (\n <Box paddingTop={4}>\n <Flex alignItems=\"flex-end\" justifyContent=\"space-between\">\n <PageSizeURLQuery options={['12', '24', '50', '100']} defaultValue=\"24\" />\n <PaginationURLQuery pagination={pagination} />\n </Flex>\n </Box>\n ) : null}\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 <Icon as={ExternalLink} color=\"neutral600\" width={3} height={3} marginLeft={2} />\n }\n />\n </a>\n </Box>\n </ContentLayout>\n </Main>\n </Layout>\n );\n};\n\nconst ProtectedMarketplacePage = () => {\n const permissions = useSelector(selectAdminPermissions);\n\n return (\n // @ts-expect-error – the selector is not typed.\n <CheckPagePermissions permissions={permissions.marketplace.main}>\n <MarketplacePage />\n </CheckPagePermissions>\n );\n};\n\nexport { MarketplacePage, ProtectedMarketplacePage };\nexport type { NpmPackageType, MarketplacePageQuery, TabQuery };\n"],"names":["React","useIntl","jsxs","Fragment","Box","jsx","Filter","Popover","Tag","Cross","styled","Button","Flex","MultiSelect","MultiSelectOption","Typography","useTracking","pluralize","Tooltip","Icon","CheckCircle","StrapiLogo","LinkButton","ExternalLink","useNotification","useClipboard","Check","semver","Duplicate","Github","pxToRem","Star","Download","Divider","AnErrorOccurred","Loader","GridLayout","EmptyDocuments","Grid","GridItem","HeaderLayout","Upload","Layout","Main","SingleSelect","SingleSelectOption","useNotifyAT","useQuery","qs","useQueryParams","useDebounce","useAppInfo","useFocusWhenNavigate","Helmet","ContentLayout","TabGroup","Tabs","Tab","Searchbar","TabPanels","TabPanel","PageSizeURLQuery","PaginationURLQuery","ContentBox","GlassesSquare","useSelector","selectAdminPermissions","CheckPagePermissions"],"mappings":"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"}
@@ -10,7 +10,7 @@ const has = require("lodash/has");
10
10
  const isEmpty = require("lodash/isEmpty");
11
11
  const set = require("lodash/set");
12
12
  const reactIntl = require("react-intl");
13
- const index = require("./index-ydPzLfs7.js");
13
+ const index = require("./index-pLv4RVFT.js");
14
14
  const reactContext = require("@radix-ui/react-context");
15
15
  const merge = require("lodash/merge");
16
16
  const groupBy = require("lodash/groupBy");
@@ -2037,4 +2037,4 @@ const init = (layout, permissions) => {
2037
2037
  };
2038
2038
  };
2039
2039
  exports.Permissions = Permissions;
2040
- //# sourceMappingURL=Permissions-0WY1QWWe.js.map
2040
+ //# sourceMappingURL=Permissions-9D-OrmKB.js.map