@strapi/admin 5.0.0-alpha.0 → 5.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_chunks/{AdminSeatInfo-l78lfIiY.mjs → AdminSeatInfo-20pkL95U.mjs} +3 -3
- package/dist/_chunks/{AdminSeatInfo-l78lfIiY.mjs.map → AdminSeatInfo-20pkL95U.mjs.map} +1 -1
- package/dist/_chunks/{AdminSeatInfo-YaA1q_2d.js → AdminSeatInfo-TjK5LW2b.js} +3 -3
- package/dist/_chunks/{AdminSeatInfo-YaA1q_2d.js.map → AdminSeatInfo-TjK5LW2b.js.map} +1 -1
- package/dist/_chunks/{ApplicationInfoPage-PHLA1Ysy.js → ApplicationInfoPage-1OdKMDYH.js} +11 -12
- package/dist/_chunks/ApplicationInfoPage-1OdKMDYH.js.map +1 -0
- package/dist/_chunks/{ApplicationInfoPage-Zn5JU2zd.mjs → ApplicationInfoPage-ed6y9Q-B.mjs} +12 -13
- package/dist/_chunks/ApplicationInfoPage-ed6y9Q-B.mjs.map +1 -0
- package/dist/_chunks/{AuthResponse-1aYRF7_3.mjs → AuthResponse-Hxop00n-.mjs} +2 -2
- package/dist/_chunks/{AuthResponse-1aYRF7_3.mjs.map → AuthResponse-Hxop00n-.mjs.map} +1 -1
- package/dist/_chunks/{AuthResponse-7NG3smr6.js → AuthResponse-sca_wjIN.js} +2 -2
- package/dist/_chunks/{AuthResponse-7NG3smr6.js.map → AuthResponse-sca_wjIN.js.map} +1 -1
- package/dist/_chunks/{AuthenticatedLayout-5r4rzKeb.js → AuthenticatedLayout-PPlOm7kb.js} +14 -11
- package/dist/_chunks/AuthenticatedLayout-PPlOm7kb.js.map +1 -0
- package/dist/_chunks/{AuthenticatedLayout-a7KNOdln.mjs → AuthenticatedLayout-knXNB2i2.mjs} +11 -9
- package/dist/_chunks/AuthenticatedLayout-knXNB2i2.mjs.map +1 -0
- package/dist/_chunks/{ComponentConfigurationPage-pb8HhFAg.mjs → ComponentConfigurationPage-okd3XovW.mjs} +11 -12
- package/dist/_chunks/ComponentConfigurationPage-okd3XovW.mjs.map +1 -0
- package/dist/_chunks/{ComponentConfigurationPage-R3qV_iCR.js → ComponentConfigurationPage-xZMDjeVf.js} +11 -12
- package/dist/_chunks/ComponentConfigurationPage-xZMDjeVf.js.map +1 -0
- package/dist/_chunks/{CreateActionEE-a2zWCIpQ.js → CreateActionEE-E6YNdAVx.js} +2 -2
- package/dist/_chunks/{CreateActionEE-a2zWCIpQ.js.map → CreateActionEE-E6YNdAVx.js.map} +1 -1
- package/dist/_chunks/{CreateActionEE-hb4Pr-SD.mjs → CreateActionEE-PaZYJ410.mjs} +2 -2
- package/dist/_chunks/{CreateActionEE-hb4Pr-SD.mjs.map → CreateActionEE-PaZYJ410.mjs.map} +1 -1
- package/dist/_chunks/{CreatePage-nl6zKkKT.js → CreatePage-1Oi4-aR6.js} +17 -16
- package/dist/_chunks/CreatePage-1Oi4-aR6.js.map +1 -0
- package/dist/_chunks/{CreatePage-UC4uBFUR.mjs → CreatePage-6458K0l9.mjs} +3 -3
- package/dist/_chunks/{CreatePage-UC4uBFUR.mjs.map → CreatePage-6458K0l9.mjs.map} +1 -1
- package/dist/_chunks/{CreatePage-NSKUL8l4.js → CreatePage-DmNFNVN9.js} +10 -9
- package/dist/_chunks/CreatePage-DmNFNVN9.js.map +1 -0
- package/dist/_chunks/{CreatePage-Bil0egZ1.mjs → CreatePage-P1F3dkB3.mjs} +17 -16
- package/dist/_chunks/CreatePage-P1F3dkB3.mjs.map +1 -0
- package/dist/_chunks/{CreatePage-h5L6QP47.mjs → CreatePage-PM_r99U5.mjs} +10 -9
- package/dist/_chunks/CreatePage-PM_r99U5.mjs.map +1 -0
- package/dist/_chunks/{CreatePage-MAI6XyNg.js → CreatePage-hlkPO2Cv.js} +3 -3
- package/dist/_chunks/{CreatePage-MAI6XyNg.js.map → CreatePage-hlkPO2Cv.js.map} +1 -1
- package/dist/_chunks/{CreateView-kc0iM0LS.js → CreateView-AWmN1xWJ.js} +3 -3
- package/dist/_chunks/{CreateView-kc0iM0LS.js.map → CreateView-AWmN1xWJ.js.map} +1 -1
- package/dist/_chunks/{CreateView-RVrFxAFt.mjs → CreateView-cTvLLIgu.mjs} +3 -3
- package/dist/_chunks/{CreateView-RVrFxAFt.mjs.map → CreateView-cTvLLIgu.mjs.map} +1 -1
- package/dist/_chunks/{CreateView-3DMhoCPN.js → CreateView-hUH4bf5k.js} +3 -3
- package/dist/_chunks/{CreateView-3DMhoCPN.js.map → CreateView-hUH4bf5k.js.map} +1 -1
- package/dist/_chunks/{CreateView-DuSt3AcE.mjs → CreateView-pBI75ZwZ.mjs} +3 -3
- package/dist/_chunks/{CreateView-DuSt3AcE.mjs.map → CreateView-pBI75ZwZ.mjs.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-y_TvxjZM.mjs → EditConfigurationPage-LItt0mJo.mjs} +10 -11
- package/dist/_chunks/EditConfigurationPage-LItt0mJo.mjs.map +1 -0
- package/dist/_chunks/{EditConfigurationPage-OpEZOvAG.js → EditConfigurationPage-PZ4yq1bM.js} +10 -11
- package/dist/_chunks/EditConfigurationPage-PZ4yq1bM.js.map +1 -0
- package/dist/_chunks/{EditPage-_swY0Hy-.mjs → EditPage--EPGgPNr.mjs} +11 -10
- package/dist/_chunks/EditPage--EPGgPNr.mjs.map +1 -0
- package/dist/_chunks/{EditPage-fDVAYmuS.mjs → EditPage-30rqjB1d.mjs} +16 -16
- package/dist/_chunks/EditPage-30rqjB1d.mjs.map +1 -0
- package/dist/_chunks/{EditPage-wfPrhkA7.mjs → EditPage-GRIZWtGz.mjs} +19 -18
- package/dist/_chunks/{EditPage-wfPrhkA7.mjs.map → EditPage-GRIZWtGz.mjs.map} +1 -1
- package/dist/_chunks/{EditPage-VoRR5DCQ.mjs → EditPage-MPNLCYgQ.mjs} +14 -14
- package/dist/_chunks/EditPage-MPNLCYgQ.mjs.map +1 -0
- package/dist/_chunks/{EditPage-QoDSqYYq.js → EditPage-RpzlPkkU.js} +19 -18
- package/dist/_chunks/{EditPage-QoDSqYYq.js.map → EditPage-RpzlPkkU.js.map} +1 -1
- package/dist/_chunks/{EditPage-9aK8IFXY.js → EditPage-W6hncyNY.js} +15 -15
- package/dist/_chunks/EditPage-W6hncyNY.js.map +1 -0
- package/dist/_chunks/{EditPage-A6olBfVm.js → EditPage-_N_lm93z.js} +13 -13
- package/dist/_chunks/EditPage-_N_lm93z.js.map +1 -0
- package/dist/_chunks/{EditPage-PpBP7TBo.js → EditPage-mU2WAH0F.js} +11 -10
- package/dist/_chunks/EditPage-mU2WAH0F.js.map +1 -0
- package/dist/_chunks/{EditView-EuUw_2zc.mjs → EditView-0lXpbgG0.mjs} +12 -12
- package/dist/_chunks/EditView-0lXpbgG0.mjs.map +1 -0
- package/dist/_chunks/{EditView-C_ynfmtW.js → EditView-wDP9PNQY.js} +11 -11
- package/dist/_chunks/EditView-wDP9PNQY.js.map +1 -0
- package/dist/_chunks/{EditViewPage-Z_e1dpbU.js → EditViewPage-0Pd8zBi7.js} +16 -15
- package/dist/_chunks/EditViewPage-0Pd8zBi7.js.map +1 -0
- package/dist/_chunks/{EditViewPage-xYzUSAwS.mjs → EditViewPage-R6diW-gL.mjs} +7 -7
- package/dist/_chunks/EditViewPage-R6diW-gL.mjs.map +1 -0
- package/dist/_chunks/{EditViewPage-XtJmgPi5.js → EditViewPage-ed0-10GO.js} +6 -6
- package/dist/_chunks/EditViewPage-ed0-10GO.js.map +1 -0
- package/dist/_chunks/{EditViewPage-8uPO5GWR.mjs → EditViewPage-uWYR_o8w.mjs} +15 -15
- package/dist/_chunks/EditViewPage-uWYR_o8w.mjs.map +1 -0
- package/dist/_chunks/{EventsTable-WP7PUujH.mjs → EventsTable-CqN6AzV9.mjs} +2 -2
- package/dist/_chunks/{EventsTable-WP7PUujH.mjs.map → EventsTable-CqN6AzV9.mjs.map} +1 -1
- package/dist/_chunks/{EventsTable-hI0aV29K.js → EventsTable-R_AHW6Z4.js} +2 -2
- package/dist/_chunks/{EventsTable-hI0aV29K.js.map → EventsTable-R_AHW6Z4.js.map} +1 -1
- package/dist/_chunks/{FieldTypeIcon-OeDSkshr.js → FieldTypeIcon-1WDWx0cR.js} +2 -2
- package/dist/_chunks/{FieldTypeIcon-OeDSkshr.js.map → FieldTypeIcon-1WDWx0cR.js.map} +1 -1
- package/dist/_chunks/{FieldTypeIcon-Is5Qjngf.mjs → FieldTypeIcon-rAK1gg9p.mjs} +2 -2
- package/dist/_chunks/{FieldTypeIcon-Is5Qjngf.mjs.map → FieldTypeIcon-rAK1gg9p.mjs.map} +1 -1
- package/dist/_chunks/{Filters-xVuf1kg6.js → Filters-f6ghLf0Z.js} +2 -2
- package/dist/_chunks/{Filters-xVuf1kg6.js.map → Filters-f6ghLf0Z.js.map} +1 -1
- package/dist/_chunks/{Filters-tMd2Q5jg.mjs → Filters-rPaxqj4F.mjs} +2 -2
- package/dist/_chunks/{Filters-tMd2Q5jg.mjs.map → Filters-rPaxqj4F.mjs.map} +1 -1
- package/dist/_chunks/{Form-sZKjSFQC.mjs → Form-QOZA9Aq6.mjs} +6 -5
- package/dist/_chunks/Form-QOZA9Aq6.mjs.map +1 -0
- package/dist/_chunks/{Form-EiK_H9BI.js → Form-eqzCPjSo.js} +6 -5
- package/dist/_chunks/Form-eqzCPjSo.js.map +1 -0
- package/dist/_chunks/{History-1AF4LH3c.mjs → History-Eq4_WQPf.mjs} +4 -4
- package/dist/_chunks/{History-1AF4LH3c.mjs.map → History-Eq4_WQPf.mjs.map} +1 -1
- package/dist/_chunks/{History-V_ik1IL0.js → History-j00hpmXV.js} +4 -4
- package/dist/_chunks/{History-V_ik1IL0.js.map → History-j00hpmXV.js.map} +1 -1
- package/dist/_chunks/{HomePage-yrIp1-eG.js → HomePage-3IVOMrYf.js} +6 -5
- package/dist/_chunks/HomePage-3IVOMrYf.js.map +1 -0
- package/dist/_chunks/{HomePage-zL7HPV7A.js → HomePage-79fqDlve.js} +3 -3
- package/dist/_chunks/{HomePage-zL7HPV7A.js.map → HomePage-79fqDlve.js.map} +1 -1
- package/dist/_chunks/{HomePage-C6Ivli1q.mjs → HomePage-O-TRGX5T.mjs} +6 -5
- package/dist/_chunks/HomePage-O-TRGX5T.mjs.map +1 -0
- package/dist/_chunks/{HomePage-7Xva17wM.mjs → HomePage-gTElgmEK.mjs} +3 -3
- package/dist/_chunks/{HomePage-7Xva17wM.mjs.map → HomePage-gTElgmEK.mjs.map} +1 -1
- package/dist/_chunks/{InputRenderer-RMnWnPI4.js → InputRenderer-AVDw8MeU.js} +12 -19
- package/dist/_chunks/InputRenderer-AVDw8MeU.js.map +1 -0
- package/dist/_chunks/{InputRenderer-iP1kRki4.mjs → InputRenderer-bJwYq9ga.mjs} +13 -20
- package/dist/_chunks/InputRenderer-bJwYq9ga.mjs.map +1 -0
- package/dist/_chunks/{InstalledPluginsPage-PrMyistN.js → InstalledPluginsPage-FkR2xkQz.js} +5 -5
- package/dist/_chunks/InstalledPluginsPage-FkR2xkQz.js.map +1 -0
- package/dist/_chunks/{InstalledPluginsPage-7m_FfOGl.mjs → InstalledPluginsPage-R2hVFPZl.mjs} +6 -6
- package/dist/_chunks/InstalledPluginsPage-R2hVFPZl.mjs.map +1 -0
- package/dist/_chunks/{Layout-9Li8e-qi.js → Layout-G49-Vc5u.js} +5 -5
- package/dist/_chunks/Layout-G49-Vc5u.js.map +1 -0
- package/dist/_chunks/{Layout-EDS3Yv8X.mjs → Layout-cV6Se3U9.mjs} +6 -6
- package/dist/_chunks/Layout-cV6Se3U9.mjs.map +1 -0
- package/dist/_chunks/{Layout-DC68R0Fa.js → Layout-jweb3cF3.js} +2 -2
- package/dist/_chunks/{Layout-DC68R0Fa.js.map → Layout-jweb3cF3.js.map} +1 -1
- package/dist/_chunks/{Layout-tDfvrUZo.mjs → Layout-omCNy92r.mjs} +2 -2
- package/dist/_chunks/{Layout-tDfvrUZo.mjs.map → Layout-omCNy92r.mjs.map} +1 -1
- package/dist/_chunks/{ListConfigurationPage-Gl8AA-2t.js → ListConfigurationPage-70qtv4Ci.js} +11 -10
- package/dist/_chunks/ListConfigurationPage-70qtv4Ci.js.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-7O7HiJjG.mjs → ListConfigurationPage-PrJNO_6y.mjs} +11 -10
- package/dist/_chunks/ListConfigurationPage-PrJNO_6y.mjs.map +1 -0
- package/dist/_chunks/{ListPage-em8KMoKx.js → ListPage-2lswUYQN.js} +14 -14
- package/dist/_chunks/ListPage-2lswUYQN.js.map +1 -0
- package/dist/_chunks/{ListPage-_i7RNkUF.js → ListPage-78Cv8Vfq.js} +8 -8
- package/dist/_chunks/ListPage-78Cv8Vfq.js.map +1 -0
- package/dist/_chunks/{ListPage-skKuhRrN.js → ListPage-7dZ3nYvc.js} +12 -11
- package/dist/_chunks/ListPage-7dZ3nYvc.js.map +1 -0
- package/dist/_chunks/{ListPage-DZBRIMkE.mjs → ListPage-Cvn3WbMH.mjs} +14 -14
- package/dist/_chunks/ListPage-Cvn3WbMH.mjs.map +1 -0
- package/dist/_chunks/{ListPage-0eDZZ7Zw.js → ListPage-Ms6egnF5.js} +3 -3
- package/dist/_chunks/{ListPage-0eDZZ7Zw.js.map → ListPage-Ms6egnF5.js.map} +1 -1
- package/dist/_chunks/{ListPage-Ky2tG2bd.mjs → ListPage-NmUS_cOz.mjs} +9 -9
- package/dist/_chunks/ListPage-NmUS_cOz.mjs.map +1 -0
- package/dist/_chunks/{ListPage-NdzVJ_Ed.js → ListPage-Pf5LxUYn.js} +11 -9
- package/dist/_chunks/ListPage-Pf5LxUYn.js.map +1 -0
- package/dist/_chunks/{ListPage-cBvO_gYR.mjs → ListPage-Q81SX0vA.mjs} +3 -3
- package/dist/_chunks/{ListPage-cBvO_gYR.mjs.map → ListPage-Q81SX0vA.mjs.map} +1 -1
- package/dist/_chunks/{ListPage-RlY1nro4.mjs → ListPage-edro79m2.mjs} +9 -9
- package/dist/_chunks/ListPage-edro79m2.mjs.map +1 -0
- package/dist/_chunks/{ListPage-1q5Fi4W9.mjs → ListPage-mAUCZIg8.mjs} +14 -13
- package/dist/_chunks/ListPage-mAUCZIg8.mjs.map +1 -0
- package/dist/_chunks/{ListPage-God7L19W.mjs → ListPage-xFkcmM1b.mjs} +15 -15
- package/dist/_chunks/ListPage-xFkcmM1b.mjs.map +1 -0
- package/dist/_chunks/{ListPage-aElBcYPH.js → ListPage-yymh17qi.js} +13 -13
- package/dist/_chunks/ListPage-yymh17qi.js.map +1 -0
- package/dist/_chunks/{ListView-hm-mjZ8N.mjs → ListView--43zLiHW.mjs} +11 -11
- package/dist/_chunks/ListView--43zLiHW.mjs.map +1 -0
- package/dist/_chunks/{ListView--mxDKrnG.js → ListView-YtMAQnXL.js} +10 -10
- package/dist/_chunks/ListView-YtMAQnXL.js.map +1 -0
- package/dist/_chunks/{ListView-vP-PjR4p.js → ListView-nfA6o3qO.js} +9 -9
- package/dist/_chunks/ListView-nfA6o3qO.js.map +1 -0
- package/dist/_chunks/{ListView-QEgFV6dm.mjs → ListView-qPiKeCxj.mjs} +10 -10
- package/dist/_chunks/ListView-qPiKeCxj.mjs.map +1 -0
- package/dist/_chunks/{ListViewPage-NiwpwxBR.js → ListViewPage-Ys7-G2XX.js} +9 -9
- package/dist/_chunks/ListViewPage-Ys7-G2XX.js.map +1 -0
- package/dist/_chunks/{ListViewPage-xOVa04T_.mjs → ListViewPage-fPFonK_X.mjs} +10 -10
- package/dist/_chunks/ListViewPage-fPFonK_X.mjs.map +1 -0
- package/dist/_chunks/{Login-IFCsIrab.mjs → Login-6kXI90Vy.mjs} +2 -2
- package/dist/_chunks/{Login-IFCsIrab.mjs.map → Login-6kXI90Vy.mjs.map} +1 -1
- package/dist/_chunks/{Login-0FtP5Ck_.js → Login-Ge3DZEpr.js} +2 -2
- package/dist/_chunks/{Login-0FtP5Ck_.js.map → Login-Ge3DZEpr.js.map} +1 -1
- package/dist/_chunks/{MagicLinkEE-eaU4kQ6o.mjs → MagicLinkEE-HXWaLr0K.mjs} +3 -3
- package/dist/_chunks/{MagicLinkEE-eaU4kQ6o.mjs.map → MagicLinkEE-HXWaLr0K.mjs.map} +1 -1
- package/dist/_chunks/{MagicLinkEE-S7dXBaH0.js → MagicLinkEE-sXtA2gUK.js} +3 -3
- package/dist/_chunks/{MagicLinkEE-S7dXBaH0.js.map → MagicLinkEE-sXtA2gUK.js.map} +1 -1
- package/dist/_chunks/{MarketplacePage-f0ZrC_p8.mjs → MarketplacePage-hVOJ9_0k.mjs} +15 -20
- package/dist/_chunks/MarketplacePage-hVOJ9_0k.mjs.map +1 -0
- package/dist/_chunks/{MarketplacePage-zSQ_GRnZ.js → MarketplacePage-s8KDwNwK.js} +14 -19
- package/dist/_chunks/MarketplacePage-s8KDwNwK.js.map +1 -0
- package/dist/_chunks/{NoContentTypePage-_XU8B8oQ.js → NoContentTypePage-7YEcgsE3.js} +2 -2
- package/dist/_chunks/{NoContentTypePage-_XU8B8oQ.js.map → NoContentTypePage-7YEcgsE3.js.map} +1 -1
- package/dist/_chunks/{NoContentTypePage-ER4yVLjV.mjs → NoContentTypePage-szvJnQKF.mjs} +2 -2
- package/dist/_chunks/{NoContentTypePage-ER4yVLjV.mjs.map → NoContentTypePage-szvJnQKF.mjs.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-5A4Hwjad.js → NoPermissionsPage-UX-5msLb.js} +2 -2
- package/dist/_chunks/{NoPermissionsPage-5A4Hwjad.js.map → NoPermissionsPage-UX-5msLb.js.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-DcFRsCHz.mjs → NoPermissionsPage-pqQFFlXa.mjs} +2 -2
- package/dist/_chunks/{NoPermissionsPage-DcFRsCHz.mjs.map → NoPermissionsPage-pqQFFlXa.mjs.map} +1 -1
- package/dist/_chunks/{Permissions-Ke5fqSQ2.mjs → Permissions-NUaDxULo.mjs} +3 -3
- package/dist/_chunks/Permissions-NUaDxULo.mjs.map +1 -0
- package/dist/_chunks/{Permissions--rdF1ZKQ.js → Permissions-a0IZJ8dM.js} +6 -5
- package/dist/_chunks/Permissions-a0IZJ8dM.js.map +1 -0
- package/dist/_chunks/{PrivateRoute-GLTcdbu8.js → PrivateRoute-KGxyTa5b.js} +2 -2
- package/dist/_chunks/{PrivateRoute-GLTcdbu8.js.map → PrivateRoute-KGxyTa5b.js.map} +1 -1
- package/dist/_chunks/{PrivateRoute-dWrZb-9J.mjs → PrivateRoute-eP4-pBby.mjs} +2 -2
- package/dist/_chunks/{PrivateRoute-dWrZb-9J.mjs.map → PrivateRoute-eP4-pBby.mjs.map} +1 -1
- package/dist/_chunks/{ProfilePage-bE7txhNu.mjs → ProfilePage-LXB-_EZ8.mjs} +14 -14
- package/dist/_chunks/ProfilePage-LXB-_EZ8.mjs.map +1 -0
- package/dist/_chunks/{ProfilePage-EEcNKnGH.js → ProfilePage-MBCGqbc_.js} +13 -13
- package/dist/_chunks/ProfilePage-MBCGqbc_.js.map +1 -0
- package/dist/_chunks/{ReviewWorkflowsColumn-hJRkAN5a.js → ReviewWorkflowsColumn-Ancp7-x3.js} +2 -2
- package/dist/_chunks/{ReviewWorkflowsColumn-hJRkAN5a.js.map → ReviewWorkflowsColumn-Ancp7-x3.js.map} +1 -1
- package/dist/_chunks/{ReviewWorkflowsColumn-FDxVKdto.mjs → ReviewWorkflowsColumn-WzYpj2O3.mjs} +2 -2
- package/dist/_chunks/{ReviewWorkflowsColumn-FDxVKdto.mjs.map → ReviewWorkflowsColumn-WzYpj2O3.mjs.map} +1 -1
- package/dist/_chunks/{SelectRoles-Iih1yeTu.mjs → SelectRoles-Dxz_rAaT.mjs} +6 -9
- package/dist/_chunks/SelectRoles-Dxz_rAaT.mjs.map +1 -0
- package/dist/_chunks/{SelectRoles-XK5HcBdP.js → SelectRoles-Pr2wqehq.js} +5 -8
- package/dist/_chunks/SelectRoles-Pr2wqehq.js.map +1 -0
- package/dist/_chunks/{SingleSignOnPage-uURRsIxP.js → SingleSignOnPage-4dK4id8H.js} +9 -9
- package/dist/_chunks/SingleSignOnPage-4dK4id8H.js.map +1 -0
- package/dist/_chunks/{SingleSignOnPage-vOeDxBfa.mjs → SingleSignOnPage-gxgIeURz.mjs} +10 -10
- package/dist/_chunks/SingleSignOnPage-gxgIeURz.mjs.map +1 -0
- package/dist/_chunks/{Table-k6gVR2KH.mjs → Table-NiTkS4IC.mjs} +2 -2
- package/dist/_chunks/{Table-k6gVR2KH.mjs.map → Table-NiTkS4IC.mjs.map} +1 -1
- package/dist/_chunks/{Table-VsNr4Mha.js → Table-_9gVkGGi.js} +2 -2
- package/dist/_chunks/{Table-VsNr4Mha.js.map → Table-_9gVkGGi.js.map} +1 -1
- package/dist/_chunks/{TokenTypeSelect-QN_bDdss.js → TokenTypeSelect-3aWUm1cW.js} +10 -10
- package/dist/_chunks/TokenTypeSelect-3aWUm1cW.js.map +1 -0
- package/dist/_chunks/{TokenTypeSelect-Z9iyoteG.mjs → TokenTypeSelect-jtfCyMMZ.mjs} +10 -10
- package/dist/_chunks/TokenTypeSelect-jtfCyMMZ.mjs.map +1 -0
- package/dist/_chunks/{UseCasePage-qJwKBweD.mjs → UseCasePage-0qXYZ8kt.mjs} +7 -6
- package/dist/_chunks/UseCasePage-0qXYZ8kt.mjs.map +1 -0
- package/dist/_chunks/{UseCasePage-xAlTWOcX.js → UseCasePage-QK-B8FfM.js} +7 -6
- package/dist/_chunks/UseCasePage-QK-B8FfM.js.map +1 -0
- package/dist/_chunks/{apiTokens-dGGyJI-w.mjs → apiTokens-DO6vkoyd.mjs} +2 -2
- package/dist/_chunks/{apiTokens-dGGyJI-w.mjs.map → apiTokens-DO6vkoyd.mjs.map} +1 -1
- package/dist/_chunks/{apiTokens-b3w4qO8B.js → apiTokens-TayNdk_V.js} +2 -2
- package/dist/_chunks/{apiTokens-b3w4qO8B.js.map → apiTokens-TayNdk_V.js.map} +1 -1
- package/dist/_chunks/{constants-ruIkLWCb.mjs → constants-FEW7x2Od.mjs} +2 -2
- package/dist/_chunks/{constants-ruIkLWCb.mjs.map → constants-FEW7x2Od.mjs.map} +1 -1
- package/dist/_chunks/{constants-PHXhIuUs.js → constants-RZp8o_c4.js} +2 -2
- package/dist/_chunks/{constants-PHXhIuUs.js.map → constants-RZp8o_c4.js.map} +1 -1
- package/dist/_chunks/{constants-IZEgEoW9.js → constants-Xd-X3SCR.js} +3 -3
- package/dist/_chunks/{constants-IZEgEoW9.js.map → constants-Xd-X3SCR.js.map} +1 -1
- package/dist/_chunks/{constants-WjN6I3sL.mjs → constants-_T5uxsuv.mjs} +3 -3
- package/dist/_chunks/{constants-WjN6I3sL.mjs.map → constants-_T5uxsuv.mjs.map} +1 -1
- package/dist/_chunks/{index-ibtz273H.js → index-ejSDPT-T.js} +151 -326
- package/dist/_chunks/index-ejSDPT-T.js.map +1 -0
- package/dist/_chunks/{index-5ZvCaCyY.mjs → index-hjUhNUvw.mjs} +279 -455
- package/dist/_chunks/index-hjUhNUvw.mjs.map +1 -0
- package/dist/_chunks/{selectors-TFKI8arF.js → selectors-T2YIN4Fb.js} +2 -2
- package/dist/_chunks/{selectors-TFKI8arF.js.map → selectors-T2YIN4Fb.js.map} +1 -1
- package/dist/_chunks/{selectors-JBxTdRJK.mjs → selectors-uLWxH-jN.mjs} +2 -2
- package/dist/_chunks/{selectors-JBxTdRJK.mjs.map → selectors-uLWxH-jN.mjs.map} +1 -1
- package/dist/_chunks/{transferTokens-G-suI4pp.js → transferTokens-T-kGMb3U.js} +2 -2
- package/dist/_chunks/{transferTokens-G-suI4pp.js.map → transferTokens-T-kGMb3U.js.map} +1 -1
- package/dist/_chunks/{transferTokens-4KlyXDql.mjs → transferTokens-jdkk-sPx.mjs} +2 -2
- package/dist/_chunks/{transferTokens-4KlyXDql.mjs.map → transferTokens-jdkk-sPx.mjs.map} +1 -1
- package/dist/_chunks/{useAdminRoles-7_YWhmkQ.mjs → useAdminRoles-QJQS1BCd.mjs} +2 -2
- package/dist/_chunks/{useAdminRoles-7_YWhmkQ.mjs.map → useAdminRoles-QJQS1BCd.mjs.map} +1 -1
- package/dist/_chunks/{useAdminRoles-o4dxsCcY.js → useAdminRoles-SnzC_mvy.js} +2 -2
- package/dist/_chunks/{useAdminRoles-o4dxsCcY.js.map → useAdminRoles-SnzC_mvy.js.map} +1 -1
- package/dist/_chunks/{useContentTypes-dRoMxL8c.js → useContentTypes-Lpg-eJmK.js} +5 -4
- package/dist/_chunks/useContentTypes-Lpg-eJmK.js.map +1 -0
- package/dist/_chunks/{useContentTypes-x6OLbsWe.mjs → useContentTypes-U-n1-lz0.mjs} +5 -4
- package/dist/_chunks/useContentTypes-U-n1-lz0.mjs.map +1 -0
- package/dist/_chunks/{useLicenseLimitNotification-BaSsY40x.js → useLicenseLimitNotification-Hjv_LKmp.js} +6 -5
- package/dist/_chunks/useLicenseLimitNotification-Hjv_LKmp.js.map +1 -0
- package/dist/_chunks/{useLicenseLimitNotification-wzvrsJoL.mjs → useLicenseLimitNotification-yJHxF4YO.mjs} +6 -5
- package/dist/_chunks/useLicenseLimitNotification-yJHxF4YO.mjs.map +1 -0
- package/dist/_chunks/{useReviewWorkflows-PAvhwNm3.mjs → useReviewWorkflows-0rQx2KxS.mjs} +2 -2
- package/dist/_chunks/{useReviewWorkflows-PAvhwNm3.mjs.map → useReviewWorkflows-0rQx2KxS.mjs.map} +1 -1
- package/dist/_chunks/{useReviewWorkflows-3SKYABe_.js → useReviewWorkflows-QoSEilRp.js} +2 -2
- package/dist/_chunks/{useReviewWorkflows-3SKYABe_.js.map → useReviewWorkflows-QoSEilRp.js.map} +1 -1
- package/dist/_chunks/{useSyncRbac-f7CCq_yt.js → useSyncRbac-hZJWbmmY.js} +2 -2
- package/dist/_chunks/{useSyncRbac-f7CCq_yt.js.map → useSyncRbac-hZJWbmmY.js.map} +1 -1
- package/dist/_chunks/{useSyncRbac-Kt8Li0Yf.mjs → useSyncRbac-wVgN6XIc.mjs} +2 -2
- package/dist/_chunks/{useSyncRbac-Kt8Li0Yf.mjs.map → useSyncRbac-wVgN6XIc.mjs.map} +1 -1
- package/dist/_chunks/{useWebhooks-Fhm21I_2.js → useWebhooks-1ZG0V0Mc.js} +2 -2
- package/dist/_chunks/{useWebhooks-Fhm21I_2.js.map → useWebhooks-1ZG0V0Mc.js.map} +1 -1
- package/dist/_chunks/{useWebhooks-6rWM4vzd.mjs → useWebhooks-WBwti5Jl.mjs} +2 -2
- package/dist/_chunks/{useWebhooks-6rWM4vzd.mjs.map → useWebhooks-WBwti5Jl.mjs.map} +1 -1
- package/dist/_chunks/{validateWorkflow-DlwU9a4N.mjs → validateWorkflow-23kb45Oa.mjs} +6 -5
- package/dist/_chunks/validateWorkflow-23kb45Oa.mjs.map +1 -0
- package/dist/_chunks/{validateWorkflow-1g4fl4e7.js → validateWorkflow-MaEpFiHz.js} +9 -8
- package/dist/_chunks/validateWorkflow-MaEpFiHz.js.map +1 -0
- package/dist/_chunks/{validation-NckIpCgz.js → validation-7cD0kJHF.js} +2 -2
- package/dist/_chunks/{validation-NckIpCgz.js.map → validation-7cD0kJHF.js.map} +1 -1
- package/dist/_chunks/{validation-aaWzg0nE.mjs → validation-rilbXPnt.mjs} +2 -2
- package/dist/_chunks/{validation-aaWzg0nE.mjs.map → validation-rilbXPnt.mjs.map} +1 -1
- package/dist/admin/index.js +1 -4
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +22 -25
- package/dist/admin/src/content-manager/pages/EditView/components/DocumentActions.d.ts +1 -2
- package/dist/admin/src/hooks/useAPIErrorHandler.d.ts +2 -2
- package/dist/admin/src/index.d.ts +0 -2
- package/dist/admin/src/pages/Marketplace/components/NpmPackageCard.d.ts +1 -1
- package/dist/admin/src/pages/Marketplace/components/NpmPackagesGrid.d.ts +1 -1
- package/dist/admin/src/pages/Marketplace/hooks/useMarketplaceData.d.ts +2 -2
- package/dist/admin/src/utils/users.d.ts +1 -1
- package/dist/server/src/validation/api-tokens.d.ts +27 -4
- package/dist/server/src/validation/api-tokens.d.ts.map +1 -1
- package/dist/server/src/validation/authentication/register.d.ts +8 -2
- package/dist/server/src/validation/authentication/register.d.ts.map +1 -1
- package/dist/server/src/validation/permission.d.ts +53 -4
- package/dist/server/src/validation/permission.d.ts.map +1 -1
- package/dist/server/src/validation/policies/hasPermissions.d.ts +7 -2
- package/dist/server/src/validation/policies/hasPermissions.d.ts.map +1 -1
- package/dist/server/src/validation/role.d.ts +23 -6
- package/dist/server/src/validation/role.d.ts.map +1 -1
- package/dist/server/src/validation/transfer/token.d.ts +23 -4
- package/dist/server/src/validation/transfer/token.d.ts.map +1 -1
- package/dist/server/src/validation/user.d.ts +56 -8
- package/dist/server/src/validation/user.d.ts.map +1 -1
- package/package.json +19 -12
- package/dist/_chunks/ApplicationInfoPage-PHLA1Ysy.js.map +0 -1
- package/dist/_chunks/ApplicationInfoPage-Zn5JU2zd.mjs.map +0 -1
- package/dist/_chunks/AuthenticatedLayout-5r4rzKeb.js.map +0 -1
- package/dist/_chunks/AuthenticatedLayout-a7KNOdln.mjs.map +0 -1
- package/dist/_chunks/ComponentConfigurationPage-R3qV_iCR.js.map +0 -1
- package/dist/_chunks/ComponentConfigurationPage-pb8HhFAg.mjs.map +0 -1
- package/dist/_chunks/CreatePage-Bil0egZ1.mjs.map +0 -1
- package/dist/_chunks/CreatePage-NSKUL8l4.js.map +0 -1
- package/dist/_chunks/CreatePage-h5L6QP47.mjs.map +0 -1
- package/dist/_chunks/CreatePage-nl6zKkKT.js.map +0 -1
- package/dist/_chunks/EditConfigurationPage-OpEZOvAG.js.map +0 -1
- package/dist/_chunks/EditConfigurationPage-y_TvxjZM.mjs.map +0 -1
- package/dist/_chunks/EditPage-9aK8IFXY.js.map +0 -1
- package/dist/_chunks/EditPage-A6olBfVm.js.map +0 -1
- package/dist/_chunks/EditPage-PpBP7TBo.js.map +0 -1
- package/dist/_chunks/EditPage-VoRR5DCQ.mjs.map +0 -1
- package/dist/_chunks/EditPage-_swY0Hy-.mjs.map +0 -1
- package/dist/_chunks/EditPage-fDVAYmuS.mjs.map +0 -1
- package/dist/_chunks/EditView-C_ynfmtW.js.map +0 -1
- package/dist/_chunks/EditView-EuUw_2zc.mjs.map +0 -1
- package/dist/_chunks/EditViewPage-8uPO5GWR.mjs.map +0 -1
- package/dist/_chunks/EditViewPage-XtJmgPi5.js.map +0 -1
- package/dist/_chunks/EditViewPage-Z_e1dpbU.js.map +0 -1
- package/dist/_chunks/EditViewPage-xYzUSAwS.mjs.map +0 -1
- package/dist/_chunks/Form-EiK_H9BI.js.map +0 -1
- package/dist/_chunks/Form-sZKjSFQC.mjs.map +0 -1
- package/dist/_chunks/HomePage-C6Ivli1q.mjs.map +0 -1
- package/dist/_chunks/HomePage-yrIp1-eG.js.map +0 -1
- package/dist/_chunks/InputRenderer-RMnWnPI4.js.map +0 -1
- package/dist/_chunks/InputRenderer-iP1kRki4.mjs.map +0 -1
- package/dist/_chunks/InstalledPluginsPage-7m_FfOGl.mjs.map +0 -1
- package/dist/_chunks/InstalledPluginsPage-PrMyistN.js.map +0 -1
- package/dist/_chunks/Layout-9Li8e-qi.js.map +0 -1
- package/dist/_chunks/Layout-EDS3Yv8X.mjs.map +0 -1
- package/dist/_chunks/ListConfigurationPage-7O7HiJjG.mjs.map +0 -1
- package/dist/_chunks/ListConfigurationPage-Gl8AA-2t.js.map +0 -1
- package/dist/_chunks/ListPage-1q5Fi4W9.mjs.map +0 -1
- package/dist/_chunks/ListPage-DZBRIMkE.mjs.map +0 -1
- package/dist/_chunks/ListPage-God7L19W.mjs.map +0 -1
- package/dist/_chunks/ListPage-Ky2tG2bd.mjs.map +0 -1
- package/dist/_chunks/ListPage-NdzVJ_Ed.js.map +0 -1
- package/dist/_chunks/ListPage-RlY1nro4.mjs.map +0 -1
- package/dist/_chunks/ListPage-_i7RNkUF.js.map +0 -1
- package/dist/_chunks/ListPage-aElBcYPH.js.map +0 -1
- package/dist/_chunks/ListPage-em8KMoKx.js.map +0 -1
- package/dist/_chunks/ListPage-skKuhRrN.js.map +0 -1
- package/dist/_chunks/ListView--mxDKrnG.js.map +0 -1
- package/dist/_chunks/ListView-QEgFV6dm.mjs.map +0 -1
- package/dist/_chunks/ListView-hm-mjZ8N.mjs.map +0 -1
- package/dist/_chunks/ListView-vP-PjR4p.js.map +0 -1
- package/dist/_chunks/ListViewPage-NiwpwxBR.js.map +0 -1
- package/dist/_chunks/ListViewPage-xOVa04T_.mjs.map +0 -1
- package/dist/_chunks/MarketplacePage-f0ZrC_p8.mjs.map +0 -1
- package/dist/_chunks/MarketplacePage-zSQ_GRnZ.js.map +0 -1
- package/dist/_chunks/Permissions--rdF1ZKQ.js.map +0 -1
- package/dist/_chunks/Permissions-Ke5fqSQ2.mjs.map +0 -1
- package/dist/_chunks/ProfilePage-EEcNKnGH.js.map +0 -1
- package/dist/_chunks/ProfilePage-bE7txhNu.mjs.map +0 -1
- package/dist/_chunks/SelectRoles-Iih1yeTu.mjs.map +0 -1
- package/dist/_chunks/SelectRoles-XK5HcBdP.js.map +0 -1
- package/dist/_chunks/SingleSignOnPage-uURRsIxP.js.map +0 -1
- package/dist/_chunks/SingleSignOnPage-vOeDxBfa.mjs.map +0 -1
- package/dist/_chunks/TokenTypeSelect-QN_bDdss.js.map +0 -1
- package/dist/_chunks/TokenTypeSelect-Z9iyoteG.mjs.map +0 -1
- package/dist/_chunks/UseCasePage-qJwKBweD.mjs.map +0 -1
- package/dist/_chunks/UseCasePage-xAlTWOcX.js.map +0 -1
- package/dist/_chunks/index-5ZvCaCyY.mjs.map +0 -1
- package/dist/_chunks/index-ibtz273H.js.map +0 -1
- package/dist/_chunks/useContentTypes-dRoMxL8c.js.map +0 -1
- package/dist/_chunks/useContentTypes-x6OLbsWe.mjs.map +0 -1
- package/dist/_chunks/useLicenseLimitNotification-BaSsY40x.js.map +0 -1
- package/dist/_chunks/useLicenseLimitNotification-wzvrsJoL.mjs.map +0 -1
- package/dist/_chunks/validateWorkflow-1g4fl4e7.js.map +0 -1
- package/dist/_chunks/validateWorkflow-DlwU9a4N.mjs.map +0 -1
- package/dist/admin/src/features/AppInfo.d.ts +0 -22
- package/dist/admin/src/features/Notifications.d.ts +0 -47
- package/dist/admin/src/utils/getYupInnerErrors.d.ts +0 -7
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MarketplacePage-hVOJ9_0k.mjs","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 { AppInfoContextValue, useNotification, useClipboard } 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';\nimport { useTracking } from '../../../features/Tracking';\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={`${12 / 16}rem`} width={`${12 / 16}rem`} aria-hidden />\n <Icon\n as={Star}\n height={`${12 / 16}rem`}\n width={`${12 / 16}rem`}\n color=\"warning500\"\n aria-hidden\n />\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={`${12 / 16}rem`} width={`${12 / 16}rem`} 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: ${12 / 16}rem;\n transform: rotate(90deg);\n`;\n\nexport { NpmPackageCard };\nexport type { NpmPackageCardProps };\n","import { Box, Flex, Grid, GridItem, GridLayout, Icon, Typography } from '@strapi/design-system';\nimport { AppInfoContextValue } from '@strapi/helper-plugin';\nimport { EmptyDocuments } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { Page } from '../../../components/PageHelpers';\n\nimport { NpmPackageCard, NpmPackageCardProps } from './NpmPackageCard';\n\nimport type { Plugin, Provider } from '../hooks/useMarketplaceData';\n\ninterface NpmPackagesGridProps extends Pick<NpmPackageCardProps, 'npmPackageType' | 'useYarn'> {\n debouncedSearch: string;\n installedPackageNames: string[];\n isInDevelopmentMode: AppInfoContextValue['autoReload'];\n npmPackages?: Array<Plugin | Provider>;\n status: 'idle' | 'loading' | 'error' | 'success';\n strapiAppVersion?: NpmPackageCardProps['strapiAppVersion'];\n}\n\nconst NpmPackagesGrid = ({\n status,\n npmPackages = [],\n installedPackageNames = [],\n useYarn,\n isInDevelopmentMode,\n npmPackageType,\n strapiAppVersion,\n debouncedSearch,\n}: NpmPackagesGridProps) => {\n const { formatMessage } = useIntl();\n\n if (status === 'error') {\n return <Page.Error />;\n }\n\n if (status === 'loading') {\n return <Page.Loading />;\n }\n\n const emptySearchMessage = formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.search.empty',\n defaultMessage: 'No result for \"{target}\"',\n },\n { target: debouncedSearch }\n );\n\n if (npmPackages.length === 0) {\n return (\n <Box position=\"relative\">\n <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 { Upload } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { useTracking } from '../../../features/Tracking';\n\nimport type { NpmPackageType } from '../MarketplacePage';\n\ninterface PageHeaderProps {\n isOnline?: boolean;\n npmPackageType?: NpmPackageType;\n}\n\nconst PageHeader = ({ isOnline, npmPackageType = 'plugin' }: PageHeaderProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n\n const tracking = npmPackageType === 'provider' ? 'didSubmitProvider' : 'didSubmitPlugin';\n\n return (\n <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 { 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={`${120 / 16}rem`}\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 useAppInfo,\n useFocusWhenNavigate,\n useNotification,\n useQueryParams,\n} from '@strapi/helper-plugin';\nimport { ExternalLink, GlassesSquare } from '@strapi/icons';\nimport { Helmet } from 'react-helmet';\nimport { useIntl } from 'react-intl';\n\nimport { ContentBox } from '../../components/ContentBox';\nimport { Page } from '../../components/PageHelpers';\nimport { Pagination } from '../../components/Pagination';\nimport { useTypedSelector } from '../../core/store/hooks';\nimport { useTracking } from '../../features/Tracking';\nimport { useDebounce } from '../../hooks/useDebounce';\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.Root {...pagination} defaultPageSize={24}>\n <Pagination.PageSize options={['12', '24', '50', '100']} />\n <Pagination.Links />\n </Pagination.Root>\n <Box paddingTop={8}>\n <a\n href=\"https://strapi.canny.io/plugin-requests\"\n target=\"_blank\"\n rel=\"noopener noreferrer nofollow\"\n style={{ textDecoration: 'none' }}\n onClick={() => trackUsage('didMissMarketplacePlugin')}\n >\n <ContentBox\n title={formatMessage({\n id: 'admin.pages.MarketPlacePage.missingPlugin.title',\n defaultMessage: 'Documentation',\n })}\n subtitle={formatMessage({\n id: 'admin.pages.MarketPlacePage.missingPlugin.description',\n defaultMessage:\n \"Tell us what plugin you are looking for and we'll let our community plugin developers know in case they are in search for inspiration!\",\n })}\n icon={<GlassesSquare />}\n iconBackground=\"alternative100\"\n endAction={\n <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 = useTypedSelector((state) => state.admin_app.permissions.marketplace?.main);\n\n return (\n <Page.Protect permissions={permissions}>\n <MarketplacePage />\n </Page.Protect>\n );\n};\n\nexport { MarketplacePage, ProtectedMarketplacePage };\nexport type { NpmPackageType, MarketplacePageQuery, TabQuery };\n"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@ const Icons = require("@strapi/icons");
|
|
|
8
8
|
const reactHelmet = require("react-helmet");
|
|
9
9
|
const reactIntl = require("react-intl");
|
|
10
10
|
const ContentBox = require("./ContentBox-4TRGOJYI.js");
|
|
11
|
-
const index = require("./index-
|
|
11
|
+
const index = require("./index-ejSDPT-T.js");
|
|
12
12
|
const useDebounce = require("./useDebounce-nLQfrFAo.js");
|
|
13
13
|
const styled = require("styled-components");
|
|
14
14
|
const v2 = require("@strapi/design-system/v2");
|
|
@@ -307,7 +307,7 @@ const InstallPluginButton = ({
|
|
|
307
307
|
strapiPeerDepVersion,
|
|
308
308
|
pluginName
|
|
309
309
|
}) => {
|
|
310
|
-
const
|
|
310
|
+
const toggleNotification = helperPlugin.useNotification();
|
|
311
311
|
const { formatMessage } = reactIntl.useIntl();
|
|
312
312
|
const { trackUsage } = index.useTracking();
|
|
313
313
|
const { copy } = helperPlugin.useClipboard();
|
|
@@ -317,7 +317,7 @@ const InstallPluginButton = ({
|
|
|
317
317
|
trackUsage("willInstallPlugin");
|
|
318
318
|
toggleNotification({
|
|
319
319
|
type: "success",
|
|
320
|
-
message:
|
|
320
|
+
message: { id: "admin.pages.MarketPlacePage.plugin.copy.success" }
|
|
321
321
|
});
|
|
322
322
|
}
|
|
323
323
|
};
|
|
@@ -671,7 +671,7 @@ function useMarketplaceData({
|
|
|
671
671
|
}) {
|
|
672
672
|
const { notifyStatus } = designSystem.useNotifyAT();
|
|
673
673
|
const { formatMessage } = reactIntl.useIntl();
|
|
674
|
-
const
|
|
674
|
+
const toggleNotification = helperPlugin.useNotification();
|
|
675
675
|
const marketplaceTitle = formatMessage({
|
|
676
676
|
id: "global.marketplace",
|
|
677
677
|
defaultMessage: "Marketplace"
|
|
@@ -717,8 +717,8 @@ function useMarketplaceData({
|
|
|
717
717
|
},
|
|
718
718
|
onError() {
|
|
719
719
|
toggleNotification({
|
|
720
|
-
type: "
|
|
721
|
-
message:
|
|
720
|
+
type: "warning",
|
|
721
|
+
message: { id: "notification.error", defaultMessage: "An error occured" }
|
|
722
722
|
});
|
|
723
723
|
}
|
|
724
724
|
}
|
|
@@ -745,8 +745,8 @@ function useMarketplaceData({
|
|
|
745
745
|
},
|
|
746
746
|
onError() {
|
|
747
747
|
toggleNotification({
|
|
748
|
-
type: "
|
|
749
|
-
message:
|
|
748
|
+
type: "warning",
|
|
749
|
+
message: { id: "notification.error", defaultMessage: "An error occured" }
|
|
750
750
|
});
|
|
751
751
|
}
|
|
752
752
|
}
|
|
@@ -784,15 +784,10 @@ const MarketplacePage = () => {
|
|
|
784
784
|
const tabRef = React__namespace.useRef(null);
|
|
785
785
|
const { formatMessage } = reactIntl.useIntl();
|
|
786
786
|
const { trackUsage } = index.useTracking();
|
|
787
|
-
const
|
|
787
|
+
const toggleNotification = helperPlugin.useNotification();
|
|
788
788
|
const [{ query }, setQuery] = helperPlugin.useQueryParams();
|
|
789
789
|
const debouncedSearch = useDebounce.useDebounce(query?.search, 500) || "";
|
|
790
|
-
const {
|
|
791
|
-
autoReload: isInDevelopmentMode,
|
|
792
|
-
dependencies,
|
|
793
|
-
useYarn,
|
|
794
|
-
strapiVersion
|
|
795
|
-
} = index.useAppInfo("MarketplacePage", (state) => state);
|
|
790
|
+
const { autoReload: isInDevelopmentMode, dependencies, useYarn, strapiVersion } = helperPlugin.useAppInfo();
|
|
796
791
|
const isOnline = useNavigatorOnline();
|
|
797
792
|
const npmPackageType = query?.npmPackageType || "plugin";
|
|
798
793
|
const [tabQuery, setTabQuery] = React__namespace.useState({
|
|
@@ -807,13 +802,13 @@ const MarketplacePage = () => {
|
|
|
807
802
|
if (!isInDevelopmentMode) {
|
|
808
803
|
toggleNotification({
|
|
809
804
|
type: "info",
|
|
810
|
-
message:
|
|
805
|
+
message: {
|
|
811
806
|
id: "admin.pages.MarketPlacePage.production",
|
|
812
807
|
defaultMessage: "Manage plugins from the development environment"
|
|
813
|
-
}
|
|
808
|
+
}
|
|
814
809
|
});
|
|
815
810
|
}
|
|
816
|
-
}, [toggleNotification, isInDevelopmentMode
|
|
811
|
+
}, [toggleNotification, isInDevelopmentMode]);
|
|
817
812
|
const {
|
|
818
813
|
pluginsResponse,
|
|
819
814
|
providersResponse,
|
|
@@ -1029,4 +1024,4 @@ const ProtectedMarketplacePage = () => {
|
|
|
1029
1024
|
};
|
|
1030
1025
|
exports.MarketplacePage = MarketplacePage;
|
|
1031
1026
|
exports.ProtectedMarketplacePage = ProtectedMarketplacePage;
|
|
1032
|
-
//# sourceMappingURL=MarketplacePage-
|
|
1027
|
+
//# sourceMappingURL=MarketplacePage-s8KDwNwK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MarketplacePage-s8KDwNwK.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 { AppInfoContextValue, useNotification, useClipboard } 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';\nimport { useTracking } from '../../../features/Tracking';\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={`${12 / 16}rem`} width={`${12 / 16}rem`} aria-hidden />\n <Icon\n as={Star}\n height={`${12 / 16}rem`}\n width={`${12 / 16}rem`}\n color=\"warning500\"\n aria-hidden\n />\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={`${12 / 16}rem`} width={`${12 / 16}rem`} 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: ${12 / 16}rem;\n transform: rotate(90deg);\n`;\n\nexport { NpmPackageCard };\nexport type { NpmPackageCardProps };\n","import { Box, Flex, Grid, GridItem, GridLayout, Icon, Typography } from '@strapi/design-system';\nimport { AppInfoContextValue } from '@strapi/helper-plugin';\nimport { EmptyDocuments } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { Page } from '../../../components/PageHelpers';\n\nimport { NpmPackageCard, NpmPackageCardProps } from './NpmPackageCard';\n\nimport type { Plugin, Provider } from '../hooks/useMarketplaceData';\n\ninterface NpmPackagesGridProps extends Pick<NpmPackageCardProps, 'npmPackageType' | 'useYarn'> {\n debouncedSearch: string;\n installedPackageNames: string[];\n isInDevelopmentMode: AppInfoContextValue['autoReload'];\n npmPackages?: Array<Plugin | Provider>;\n status: 'idle' | 'loading' | 'error' | 'success';\n strapiAppVersion?: NpmPackageCardProps['strapiAppVersion'];\n}\n\nconst NpmPackagesGrid = ({\n status,\n npmPackages = [],\n installedPackageNames = [],\n useYarn,\n isInDevelopmentMode,\n npmPackageType,\n strapiAppVersion,\n debouncedSearch,\n}: NpmPackagesGridProps) => {\n const { formatMessage } = useIntl();\n\n if (status === 'error') {\n return <Page.Error />;\n }\n\n if (status === 'loading') {\n return <Page.Loading />;\n }\n\n const emptySearchMessage = formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.search.empty',\n defaultMessage: 'No result for \"{target}\"',\n },\n { target: debouncedSearch }\n );\n\n if (npmPackages.length === 0) {\n return (\n <Box position=\"relative\">\n <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 { Upload } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { useTracking } from '../../../features/Tracking';\n\nimport type { NpmPackageType } from '../MarketplacePage';\n\ninterface PageHeaderProps {\n isOnline?: boolean;\n npmPackageType?: NpmPackageType;\n}\n\nconst PageHeader = ({ isOnline, npmPackageType = 'plugin' }: PageHeaderProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n\n const tracking = npmPackageType === 'provider' ? 'didSubmitProvider' : 'didSubmitPlugin';\n\n return (\n <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 { 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={`${120 / 16}rem`}\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 useAppInfo,\n useFocusWhenNavigate,\n useNotification,\n useQueryParams,\n} from '@strapi/helper-plugin';\nimport { ExternalLink, GlassesSquare } from '@strapi/icons';\nimport { Helmet } from 'react-helmet';\nimport { useIntl } from 'react-intl';\n\nimport { ContentBox } from '../../components/ContentBox';\nimport { Page } from '../../components/PageHelpers';\nimport { Pagination } from '../../components/Pagination';\nimport { useTypedSelector } from '../../core/store/hooks';\nimport { useTracking } from '../../features/Tracking';\nimport { useDebounce } from '../../hooks/useDebounce';\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.Root {...pagination} defaultPageSize={24}>\n <Pagination.PageSize options={['12', '24', '50', '100']} />\n <Pagination.Links />\n </Pagination.Root>\n <Box paddingTop={8}>\n <a\n href=\"https://strapi.canny.io/plugin-requests\"\n target=\"_blank\"\n rel=\"noopener noreferrer nofollow\"\n style={{ textDecoration: 'none' }}\n onClick={() => trackUsage('didMissMarketplacePlugin')}\n >\n <ContentBox\n title={formatMessage({\n id: 'admin.pages.MarketPlacePage.missingPlugin.title',\n defaultMessage: 'Documentation',\n })}\n subtitle={formatMessage({\n id: 'admin.pages.MarketPlacePage.missingPlugin.description',\n defaultMessage:\n \"Tell us what plugin you are looking for and we'll let our community plugin developers know in case they are in search for inspiration!\",\n })}\n icon={<GlassesSquare />}\n iconBackground=\"alternative100\"\n endAction={\n <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 = useTypedSelector((state) => state.admin_app.permissions.marketplace?.main);\n\n return (\n <Page.Protect permissions={permissions}>\n <MarketplacePage />\n </Page.Protect>\n );\n};\n\nexport { MarketplacePage, ProtectedMarketplacePage };\nexport type { NpmPackageType, MarketplacePageQuery, TabQuery };\n"],"names":["React","useIntl","jsxs","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","Star","Download","Divider","Page","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","Pagination","ContentBox","GlassesSquare","useTypedSelector"],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@ const helperPlugin = require("@strapi/helper-plugin");
|
|
|
7
7
|
const Icons = require("@strapi/icons");
|
|
8
8
|
const reactIntl = require("react-intl");
|
|
9
9
|
const reactRouterDom = require("react-router-dom");
|
|
10
|
-
const index = require("./index-
|
|
10
|
+
const index = require("./index-ejSDPT-T.js");
|
|
11
11
|
const NoContentType = () => {
|
|
12
12
|
const { formatMessage } = reactIntl.useIntl();
|
|
13
13
|
helperPlugin.useFocusWhenNavigate();
|
|
@@ -49,4 +49,4 @@ const NoContentType = () => {
|
|
|
49
49
|
] });
|
|
50
50
|
};
|
|
51
51
|
exports.NoContentType = NoContentType;
|
|
52
|
-
//# sourceMappingURL=NoContentTypePage-
|
|
52
|
+
//# sourceMappingURL=NoContentTypePage-7YEcgsE3.js.map
|
package/dist/_chunks/{NoContentTypePage-_XU8B8oQ.js.map → NoContentTypePage-7YEcgsE3.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NoContentTypePage-
|
|
1
|
+
{"version":3,"file":"NoContentTypePage-7YEcgsE3.js","sources":["../../admin/src/content-manager/pages/NoContentTypePage.tsx"],"sourcesContent":["import { ContentLayout, EmptyStateLayout, HeaderLayout, Main } from '@strapi/design-system';\nimport { LinkButton } from '@strapi/design-system/v2';\nimport { useFocusWhenNavigate } from '@strapi/helper-plugin';\nimport { EmptyDocuments, Plus } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\n\nimport { getTranslation } from '../utils/translations';\n\nconst NoContentType = () => {\n const { formatMessage } = useIntl();\n useFocusWhenNavigate();\n\n return (\n <Main>\n <HeaderLayout\n title={formatMessage({\n id: getTranslation('header.name'),\n defaultMessage: 'Content',\n })}\n />\n <ContentLayout>\n <EmptyStateLayout\n action={\n <LinkButton\n as={NavLink}\n variant=\"secondary\"\n startIcon={<Plus />}\n // @ts-expect-error – DS inference does not work with the `as` prop.\n to=\"/plugins/content-type-builder/content-types/create-content-type\"\n >\n {formatMessage({\n id: 'app.components.HomePage.create',\n defaultMessage: 'Create your first Content-type',\n })}\n </LinkButton>\n }\n content={formatMessage({\n id: 'content-manager.pages.NoContentType.text',\n defaultMessage:\n \"You don't have any content yet, we recommend you to create your first Content-Type.\",\n })}\n hasRadius\n icon={<EmptyDocuments width=\"10rem\" />}\n shadow=\"tableShadow\"\n />\n </ContentLayout>\n </Main>\n );\n};\n\nexport { NoContentType };\n"],"names":["useIntl","useFocusWhenNavigate","Main","jsx","HeaderLayout","getTranslation","ContentLayout","EmptyStateLayout","LinkButton","NavLink","Plus","EmptyDocuments"],"mappings":";;;;;;;;;;AASA,MAAM,gBAAgB,MAAM;AACpB,QAAA,EAAE,kBAAkBA,UAAAA;AACLC,eAAAA;AAErB,yCACGC,mBACC,EAAA,UAAA;AAAA,IAAAC,2BAAA;AAAA,MAACC,aAAA;AAAA,MAAA;AAAA,QACC,OAAO,cAAc;AAAA,UACnB,IAAIC,qBAAe,aAAa;AAAA,UAChC,gBAAgB;AAAA,QAAA,CACjB;AAAA,MAAA;AAAA,IACH;AAAA,mCACCC,aAAAA,eACC,EAAA,UAAAH,2BAAA;AAAA,MAACI,aAAA;AAAA,MAAA;AAAA,QACC,QACEJ,2BAAA;AAAA,UAACK,GAAA;AAAA,UAAA;AAAA,YACC,IAAIC,eAAA;AAAA,YACJ,SAAQ;AAAA,YACR,0CAAYC,MAAK,MAAA,EAAA;AAAA,YAEjB,IAAG;AAAA,YAEF,UAAc,cAAA;AAAA,cACb,IAAI;AAAA,cACJ,gBAAgB;AAAA,YAAA,CACjB;AAAA,UAAA;AAAA,QACH;AAAA,QAEF,SAAS,cAAc;AAAA,UACrB,IAAI;AAAA,UACJ,gBACE;AAAA,QAAA,CACH;AAAA,QACD,WAAS;AAAA,QACT,MAAMP,2BAAAA,IAACQ,MAAAA,gBAAe,EAAA,OAAM,QAAQ,CAAA;AAAA,QACpC,QAAO;AAAA,MAAA;AAAA,IAAA,GAEX;AAAA,EACF,EAAA,CAAA;AAEJ;;"}
|
|
@@ -5,7 +5,7 @@ import { useFocusWhenNavigate } from "@strapi/helper-plugin";
|
|
|
5
5
|
import { Plus, EmptyDocuments } from "@strapi/icons";
|
|
6
6
|
import { useIntl } from "react-intl";
|
|
7
7
|
import { NavLink } from "react-router-dom";
|
|
8
|
-
import {
|
|
8
|
+
import { am as getTranslation } from "./index-hjUhNUvw.mjs";
|
|
9
9
|
const NoContentType = () => {
|
|
10
10
|
const { formatMessage } = useIntl();
|
|
11
11
|
useFocusWhenNavigate();
|
|
@@ -49,4 +49,4 @@ const NoContentType = () => {
|
|
|
49
49
|
export {
|
|
50
50
|
NoContentType
|
|
51
51
|
};
|
|
52
|
-
//# sourceMappingURL=NoContentTypePage-
|
|
52
|
+
//# sourceMappingURL=NoContentTypePage-szvJnQKF.mjs.map
|
package/dist/_chunks/{NoContentTypePage-ER4yVLjV.mjs.map → NoContentTypePage-szvJnQKF.mjs.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NoContentTypePage-
|
|
1
|
+
{"version":3,"file":"NoContentTypePage-szvJnQKF.mjs","sources":["../../admin/src/content-manager/pages/NoContentTypePage.tsx"],"sourcesContent":["import { ContentLayout, EmptyStateLayout, HeaderLayout, Main } from '@strapi/design-system';\nimport { LinkButton } from '@strapi/design-system/v2';\nimport { useFocusWhenNavigate } from '@strapi/helper-plugin';\nimport { EmptyDocuments, Plus } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\n\nimport { getTranslation } from '../utils/translations';\n\nconst NoContentType = () => {\n const { formatMessage } = useIntl();\n useFocusWhenNavigate();\n\n return (\n <Main>\n <HeaderLayout\n title={formatMessage({\n id: getTranslation('header.name'),\n defaultMessage: 'Content',\n })}\n />\n <ContentLayout>\n <EmptyStateLayout\n action={\n <LinkButton\n as={NavLink}\n variant=\"secondary\"\n startIcon={<Plus />}\n // @ts-expect-error – DS inference does not work with the `as` prop.\n to=\"/plugins/content-type-builder/content-types/create-content-type\"\n >\n {formatMessage({\n id: 'app.components.HomePage.create',\n defaultMessage: 'Create your first Content-type',\n })}\n </LinkButton>\n }\n content={formatMessage({\n id: 'content-manager.pages.NoContentType.text',\n defaultMessage:\n \"You don't have any content yet, we recommend you to create your first Content-Type.\",\n })}\n hasRadius\n icon={<EmptyDocuments width=\"10rem\" />}\n shadow=\"tableShadow\"\n />\n </ContentLayout>\n </Main>\n );\n};\n\nexport { NoContentType };\n"],"names":[],"mappings":";;;;;;;;AASA,MAAM,gBAAgB,MAAM;AACpB,QAAA,EAAE,kBAAkB;AACL;AAErB,8BACG,MACC,EAAA,UAAA;AAAA,IAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO,cAAc;AAAA,UACnB,IAAI,eAAe,aAAa;AAAA,UAChC,gBAAgB;AAAA,QAAA,CACjB;AAAA,MAAA;AAAA,IACH;AAAA,wBACC,eACC,EAAA,UAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,QACE;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAI;AAAA,YACJ,SAAQ;AAAA,YACR,+BAAY,MAAK,EAAA;AAAA,YAEjB,IAAG;AAAA,YAEF,UAAc,cAAA;AAAA,cACb,IAAI;AAAA,cACJ,gBAAgB;AAAA,YAAA,CACjB;AAAA,UAAA;AAAA,QACH;AAAA,QAEF,SAAS,cAAc;AAAA,UACrB,IAAI;AAAA,UACJ,gBACE;AAAA,QAAA,CACH;AAAA,QACD,WAAS;AAAA,QACT,MAAM,oBAAC,gBAAe,EAAA,OAAM,QAAQ,CAAA;AAAA,QACpC,QAAO;AAAA,MAAA;AAAA,IAAA,GAEX;AAAA,EACF,EAAA,CAAA;AAEJ;"}
|
|
@@ -4,7 +4,7 @@ const jsxRuntime = require("react/jsx-runtime");
|
|
|
4
4
|
const designSystem = require("@strapi/design-system");
|
|
5
5
|
const helperPlugin = require("@strapi/helper-plugin");
|
|
6
6
|
const reactIntl = require("react-intl");
|
|
7
|
-
const index = require("./index-
|
|
7
|
+
const index = require("./index-ejSDPT-T.js");
|
|
8
8
|
const NoPermissions = () => {
|
|
9
9
|
const { formatMessage } = reactIntl.useIntl();
|
|
10
10
|
helperPlugin.useFocusWhenNavigate();
|
|
@@ -22,4 +22,4 @@ const NoPermissions = () => {
|
|
|
22
22
|
] });
|
|
23
23
|
};
|
|
24
24
|
exports.NoPermissions = NoPermissions;
|
|
25
|
-
//# sourceMappingURL=NoPermissionsPage-
|
|
25
|
+
//# sourceMappingURL=NoPermissionsPage-UX-5msLb.js.map
|
package/dist/_chunks/{NoPermissionsPage-5A4Hwjad.js.map → NoPermissionsPage-UX-5msLb.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NoPermissionsPage-
|
|
1
|
+
{"version":3,"file":"NoPermissionsPage-UX-5msLb.js","sources":["../../admin/src/content-manager/pages/NoPermissionsPage.tsx"],"sourcesContent":["import { ContentLayout, HeaderLayout, Main } from '@strapi/design-system';\nimport { useFocusWhenNavigate } from '@strapi/helper-plugin';\nimport { useIntl } from 'react-intl';\n\nimport { Page } from '../../components/PageHelpers';\nimport { getTranslation } from '../utils/translations';\n\nconst NoPermissions = () => {\n const { formatMessage } = useIntl();\n useFocusWhenNavigate();\n\n return (\n <Main>\n <HeaderLayout\n title={formatMessage({\n id: getTranslation('header.name'),\n defaultMessage: 'Content',\n })}\n />\n <ContentLayout>\n <Page.NoPermissions />\n </ContentLayout>\n </Main>\n );\n};\n\nexport { NoPermissions };\n"],"names":["useIntl","useFocusWhenNavigate","Main","jsx","HeaderLayout","getTranslation","ContentLayout","Page"],"mappings":";;;;;;;AAOA,MAAM,gBAAgB,MAAM;AACpB,QAAA,EAAE,kBAAkBA,UAAAA;AACLC,eAAAA;AAErB,yCACGC,mBACC,EAAA,UAAA;AAAA,IAAAC,2BAAA;AAAA,MAACC,aAAA;AAAA,MAAA;AAAA,QACC,OAAO,cAAc;AAAA,UACnB,IAAIC,qBAAe,aAAa;AAAA,UAChC,gBAAgB;AAAA,QAAA,CACjB;AAAA,MAAA;AAAA,IACH;AAAA,mCACCC,aAAAA,eACC,EAAA,UAAAH,2BAAAA,IAACI,MAAAA,KAAK,eAAL,CAAmB,CAAA,GACtB;AAAA,EACF,EAAA,CAAA;AAEJ;;"}
|
|
@@ -2,7 +2,7 @@ import { jsxs, jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { Main, HeaderLayout, ContentLayout } from "@strapi/design-system";
|
|
3
3
|
import { useFocusWhenNavigate } from "@strapi/helper-plugin";
|
|
4
4
|
import { useIntl } from "react-intl";
|
|
5
|
-
import {
|
|
5
|
+
import { am as getTranslation, P as Page } from "./index-hjUhNUvw.mjs";
|
|
6
6
|
const NoPermissions = () => {
|
|
7
7
|
const { formatMessage } = useIntl();
|
|
8
8
|
useFocusWhenNavigate();
|
|
@@ -22,4 +22,4 @@ const NoPermissions = () => {
|
|
|
22
22
|
export {
|
|
23
23
|
NoPermissions
|
|
24
24
|
};
|
|
25
|
-
//# sourceMappingURL=NoPermissionsPage-
|
|
25
|
+
//# sourceMappingURL=NoPermissionsPage-pqQFFlXa.mjs.map
|
package/dist/_chunks/{NoPermissionsPage-DcFRsCHz.mjs.map → NoPermissionsPage-pqQFFlXa.mjs.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NoPermissionsPage-
|
|
1
|
+
{"version":3,"file":"NoPermissionsPage-pqQFFlXa.mjs","sources":["../../admin/src/content-manager/pages/NoPermissionsPage.tsx"],"sourcesContent":["import { ContentLayout, HeaderLayout, Main } from '@strapi/design-system';\nimport { useFocusWhenNavigate } from '@strapi/helper-plugin';\nimport { useIntl } from 'react-intl';\n\nimport { Page } from '../../components/PageHelpers';\nimport { getTranslation } from '../utils/translations';\n\nconst NoPermissions = () => {\n const { formatMessage } = useIntl();\n useFocusWhenNavigate();\n\n return (\n <Main>\n <HeaderLayout\n title={formatMessage({\n id: getTranslation('header.name'),\n defaultMessage: 'Content',\n })}\n />\n <ContentLayout>\n <Page.NoPermissions />\n </ContentLayout>\n </Main>\n );\n};\n\nexport { NoPermissions };\n"],"names":[],"mappings":";;;;;AAOA,MAAM,gBAAgB,MAAM;AACpB,QAAA,EAAE,kBAAkB;AACL;AAErB,8BACG,MACC,EAAA,UAAA;AAAA,IAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO,cAAc;AAAA,UACnB,IAAI,eAAe,aAAa;AAAA,UAChC,gBAAgB;AAAA,QAAA,CACjB;AAAA,MAAA;AAAA,IACH;AAAA,wBACC,eACC,EAAA,UAAA,oBAAC,KAAK,eAAL,CAAmB,CAAA,GACtB;AAAA,EACF,EAAA,CAAA;AAEJ;"}
|
|
@@ -2,14 +2,14 @@ import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
import React__default, { useMemo } from "react";
|
|
4
4
|
import { Flex, Box, BaseCheckbox, Typography, Button, ModalLayout, ModalHeader, ModalBody, ModalFooter, MultiSelectNested, Accordion, AccordionToggle, AccordionContent, Checkbox, Grid, GridItem, TabGroup, Tabs, Tab, TabPanels, TabPanel } from "@strapi/design-system";
|
|
5
|
-
import
|
|
5
|
+
import produce from "immer";
|
|
6
6
|
import cloneDeep from "lodash/cloneDeep";
|
|
7
7
|
import get from "lodash/get";
|
|
8
8
|
import has from "lodash/has";
|
|
9
9
|
import isEmpty from "lodash/isEmpty";
|
|
10
10
|
import set from "lodash/set";
|
|
11
11
|
import { useIntl } from "react-intl";
|
|
12
|
-
import {
|
|
12
|
+
import { b7 as isObject$1, aT as capitalise } from "./index-hjUhNUvw.mjs";
|
|
13
13
|
import { createContext } from "@radix-ui/react-context";
|
|
14
14
|
import isEqual from "lodash/isEqual";
|
|
15
15
|
import isObject from "lodash/isObject";
|
|
@@ -2020,4 +2020,4 @@ const init = (layout, permissions) => {
|
|
|
2020
2020
|
export {
|
|
2021
2021
|
Permissions as P
|
|
2022
2022
|
};
|
|
2023
|
-
//# sourceMappingURL=Permissions-
|
|
2023
|
+
//# sourceMappingURL=Permissions-NUaDxULo.mjs.map
|