@strapi/admin 5.33.4 → 5.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (287) hide show
  1. package/dist/admin/admin/src/components/GradientBadge.js +18 -2
  2. package/dist/admin/admin/src/components/GradientBadge.js.map +1 -1
  3. package/dist/admin/admin/src/components/GradientBadge.mjs +19 -3
  4. package/dist/admin/admin/src/components/GradientBadge.mjs.map +1 -1
  5. package/dist/admin/admin/src/components/Layouts/ActionLayout.js +8 -1
  6. package/dist/admin/admin/src/components/Layouts/ActionLayout.js.map +1 -1
  7. package/dist/admin/admin/src/components/Layouts/ActionLayout.mjs +8 -1
  8. package/dist/admin/admin/src/components/Layouts/ActionLayout.mjs.map +1 -1
  9. package/dist/admin/admin/src/components/Layouts/ContentLayout.js +4 -0
  10. package/dist/admin/admin/src/components/Layouts/ContentLayout.js.map +1 -1
  11. package/dist/admin/admin/src/components/Layouts/ContentLayout.mjs +4 -0
  12. package/dist/admin/admin/src/components/Layouts/ContentLayout.mjs.map +1 -1
  13. package/dist/admin/admin/src/components/Layouts/HeaderLayout.js +80 -49
  14. package/dist/admin/admin/src/components/Layouts/HeaderLayout.js.map +1 -1
  15. package/dist/admin/admin/src/components/Layouts/HeaderLayout.mjs +81 -50
  16. package/dist/admin/admin/src/components/Layouts/HeaderLayout.mjs.map +1 -1
  17. package/dist/admin/admin/src/components/MainNav/MainNavLinks.js +1 -0
  18. package/dist/admin/admin/src/components/MainNav/MainNavLinks.js.map +1 -1
  19. package/dist/admin/admin/src/components/MainNav/MainNavLinks.mjs +1 -0
  20. package/dist/admin/admin/src/components/MainNav/MainNavLinks.mjs.map +1 -1
  21. package/dist/admin/admin/src/components/MainNav/NavLink.js +37 -6
  22. package/dist/admin/admin/src/components/MainNav/NavLink.js.map +1 -1
  23. package/dist/admin/admin/src/components/MainNav/NavLink.mjs +38 -7
  24. package/dist/admin/admin/src/components/MainNav/NavLink.mjs.map +1 -1
  25. package/dist/admin/admin/src/components/SubNav.js +39 -18
  26. package/dist/admin/admin/src/components/SubNav.js.map +1 -1
  27. package/dist/admin/admin/src/components/SubNav.mjs +39 -18
  28. package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
  29. package/dist/admin/admin/src/core/apis/router.js.map +1 -1
  30. package/dist/admin/admin/src/core/apis/router.mjs.map +1 -1
  31. package/dist/admin/admin/src/features/Tracking.js.map +1 -1
  32. package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
  33. package/dist/admin/admin/src/hooks/useMenu.js +2 -1
  34. package/dist/admin/admin/src/hooks/useMenu.js.map +1 -1
  35. package/dist/admin/admin/src/hooks/useMenu.mjs +2 -1
  36. package/dist/admin/admin/src/hooks/useMenu.mjs.map +1 -1
  37. package/dist/admin/admin/src/pages/Auth/components/Register.js +2 -1
  38. package/dist/admin/admin/src/pages/Auth/components/Register.js.map +1 -1
  39. package/dist/admin/admin/src/pages/Auth/components/Register.mjs +2 -1
  40. package/dist/admin/admin/src/pages/Auth/components/Register.mjs.map +1 -1
  41. package/dist/admin/admin/src/pages/Home/HomePage.js +1 -0
  42. package/dist/admin/admin/src/pages/Home/HomePage.js.map +1 -1
  43. package/dist/admin/admin/src/pages/Home/HomePage.mjs +1 -0
  44. package/dist/admin/admin/src/pages/Home/HomePage.mjs.map +1 -1
  45. package/dist/admin/admin/src/pages/ProfilePage.js +1 -0
  46. package/dist/admin/admin/src/pages/ProfilePage.js.map +1 -1
  47. package/dist/admin/admin/src/pages/ProfilePage.mjs +1 -0
  48. package/dist/admin/admin/src/pages/ProfilePage.mjs.map +1 -1
  49. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js +7 -2
  50. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js.map +1 -1
  51. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs +7 -2
  52. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs.map +1 -1
  53. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js +44 -26
  54. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js.map +1 -1
  55. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs +45 -27
  56. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs.map +1 -1
  57. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js +1 -0
  58. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js.map +1 -1
  59. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs +1 -0
  60. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs.map +1 -1
  61. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js +1 -0
  62. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js.map +1 -1
  63. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs +1 -0
  64. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs.map +1 -1
  65. package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js +3 -0
  66. package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js.map +1 -1
  67. package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.mjs +3 -0
  68. package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.mjs.map +1 -1
  69. package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.js +9 -11
  70. package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.js.map +1 -1
  71. package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.mjs +10 -12
  72. package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.mjs.map +1 -1
  73. package/dist/admin/admin/src/pages/Settings/pages/Roles/ListPage.js +1 -0
  74. package/dist/admin/admin/src/pages/Settings/pages/Roles/ListPage.js.map +1 -1
  75. package/dist/admin/admin/src/pages/Settings/pages/Roles/ListPage.mjs +1 -0
  76. package/dist/admin/admin/src/pages/Settings/pages/Roles/ListPage.mjs.map +1 -1
  77. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.js +1 -0
  78. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.js.map +1 -1
  79. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.mjs +1 -0
  80. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.mjs.map +1 -1
  81. package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.js +1 -0
  82. package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.js.map +1 -1
  83. package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.mjs +1 -0
  84. package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.mjs.map +1 -1
  85. package/dist/admin/admin/src/pages/Settings/pages/Users/components/CreateActionCE.js +1 -0
  86. package/dist/admin/admin/src/pages/Settings/pages/Users/components/CreateActionCE.js.map +1 -1
  87. package/dist/admin/admin/src/pages/Settings/pages/Users/components/CreateActionCE.mjs +1 -0
  88. package/dist/admin/admin/src/pages/Settings/pages/Users/components/CreateActionCE.mjs.map +1 -1
  89. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.js +1 -0
  90. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.js.map +1 -1
  91. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.mjs +1 -0
  92. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.mjs.map +1 -1
  93. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.js +3 -0
  94. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.js.map +1 -1
  95. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.mjs +3 -0
  96. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.mjs.map +1 -1
  97. package/dist/admin/admin/src/router.js +0 -9
  98. package/dist/admin/admin/src/router.js.map +1 -1
  99. package/dist/admin/admin/src/router.mjs +0 -9
  100. package/dist/admin/admin/src/router.mjs.map +1 -1
  101. package/dist/admin/admin/src/translations/ar.json.js +0 -42
  102. package/dist/admin/admin/src/translations/ar.json.js.map +1 -1
  103. package/dist/admin/admin/src/translations/ar.json.mjs +0 -42
  104. package/dist/admin/admin/src/translations/ar.json.mjs.map +1 -1
  105. package/dist/admin/admin/src/translations/ca.json.js +0 -21
  106. package/dist/admin/admin/src/translations/ca.json.js.map +1 -1
  107. package/dist/admin/admin/src/translations/ca.json.mjs +0 -21
  108. package/dist/admin/admin/src/translations/ca.json.mjs.map +1 -1
  109. package/dist/admin/admin/src/translations/de.json.js +422 -66
  110. package/dist/admin/admin/src/translations/de.json.js.map +1 -1
  111. package/dist/admin/admin/src/translations/de.json.mjs +419 -67
  112. package/dist/admin/admin/src/translations/de.json.mjs.map +1 -1
  113. package/dist/admin/admin/src/translations/dk.json.js +0 -6
  114. package/dist/admin/admin/src/translations/dk.json.js.map +1 -1
  115. package/dist/admin/admin/src/translations/dk.json.mjs +0 -6
  116. package/dist/admin/admin/src/translations/dk.json.mjs.map +1 -1
  117. package/dist/admin/admin/src/translations/en.json.js +0 -44
  118. package/dist/admin/admin/src/translations/en.json.js.map +1 -1
  119. package/dist/admin/admin/src/translations/en.json.mjs +0 -44
  120. package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
  121. package/dist/admin/admin/src/translations/es.json.js +0 -25
  122. package/dist/admin/admin/src/translations/es.json.js.map +1 -1
  123. package/dist/admin/admin/src/translations/es.json.mjs +0 -25
  124. package/dist/admin/admin/src/translations/es.json.mjs.map +1 -1
  125. package/dist/admin/admin/src/translations/eu.json.js +0 -43
  126. package/dist/admin/admin/src/translations/eu.json.js.map +1 -1
  127. package/dist/admin/admin/src/translations/eu.json.mjs +0 -43
  128. package/dist/admin/admin/src/translations/eu.json.mjs.map +1 -1
  129. package/dist/admin/admin/src/translations/fr.json.js +0 -6
  130. package/dist/admin/admin/src/translations/fr.json.js.map +1 -1
  131. package/dist/admin/admin/src/translations/fr.json.mjs +0 -6
  132. package/dist/admin/admin/src/translations/fr.json.mjs.map +1 -1
  133. package/dist/admin/admin/src/translations/gu.json.js +0 -21
  134. package/dist/admin/admin/src/translations/gu.json.js.map +1 -1
  135. package/dist/admin/admin/src/translations/gu.json.mjs +0 -21
  136. package/dist/admin/admin/src/translations/gu.json.mjs.map +1 -1
  137. package/dist/admin/admin/src/translations/hi.json.js +0 -21
  138. package/dist/admin/admin/src/translations/hi.json.js.map +1 -1
  139. package/dist/admin/admin/src/translations/hi.json.mjs +0 -21
  140. package/dist/admin/admin/src/translations/hi.json.mjs.map +1 -1
  141. package/dist/admin/admin/src/translations/hu.json.js +0 -43
  142. package/dist/admin/admin/src/translations/hu.json.js.map +1 -1
  143. package/dist/admin/admin/src/translations/hu.json.mjs +0 -43
  144. package/dist/admin/admin/src/translations/hu.json.mjs.map +1 -1
  145. package/dist/admin/admin/src/translations/it.json.js +613 -3
  146. package/dist/admin/admin/src/translations/it.json.js.map +1 -1
  147. package/dist/admin/admin/src/translations/it.json.mjs +605 -4
  148. package/dist/admin/admin/src/translations/it.json.mjs.map +1 -1
  149. package/dist/admin/admin/src/translations/ja.json.js +0 -6
  150. package/dist/admin/admin/src/translations/ja.json.js.map +1 -1
  151. package/dist/admin/admin/src/translations/ja.json.mjs +0 -6
  152. package/dist/admin/admin/src/translations/ja.json.mjs.map +1 -1
  153. package/dist/admin/admin/src/translations/ko.json.js +0 -6
  154. package/dist/admin/admin/src/translations/ko.json.js.map +1 -1
  155. package/dist/admin/admin/src/translations/ko.json.mjs +0 -6
  156. package/dist/admin/admin/src/translations/ko.json.mjs.map +1 -1
  157. package/dist/admin/admin/src/translations/ml.json.js +0 -21
  158. package/dist/admin/admin/src/translations/ml.json.js.map +1 -1
  159. package/dist/admin/admin/src/translations/ml.json.mjs +0 -21
  160. package/dist/admin/admin/src/translations/ml.json.mjs.map +1 -1
  161. package/dist/admin/admin/src/translations/nl.json.js +0 -39
  162. package/dist/admin/admin/src/translations/nl.json.js.map +1 -1
  163. package/dist/admin/admin/src/translations/nl.json.mjs +0 -39
  164. package/dist/admin/admin/src/translations/nl.json.mjs.map +1 -1
  165. package/dist/admin/admin/src/translations/pl.json.js +0 -21
  166. package/dist/admin/admin/src/translations/pl.json.js.map +1 -1
  167. package/dist/admin/admin/src/translations/pl.json.mjs +0 -21
  168. package/dist/admin/admin/src/translations/pl.json.mjs.map +1 -1
  169. package/dist/admin/admin/src/translations/pt-BR.json.js +0 -25
  170. package/dist/admin/admin/src/translations/pt-BR.json.js.map +1 -1
  171. package/dist/admin/admin/src/translations/pt-BR.json.mjs +0 -25
  172. package/dist/admin/admin/src/translations/pt-BR.json.mjs.map +1 -1
  173. package/dist/admin/admin/src/translations/ru.json.js +0 -44
  174. package/dist/admin/admin/src/translations/ru.json.js.map +1 -1
  175. package/dist/admin/admin/src/translations/ru.json.mjs +0 -44
  176. package/dist/admin/admin/src/translations/ru.json.mjs.map +1 -1
  177. package/dist/admin/admin/src/translations/sa.json.js +0 -21
  178. package/dist/admin/admin/src/translations/sa.json.js.map +1 -1
  179. package/dist/admin/admin/src/translations/sa.json.mjs +0 -21
  180. package/dist/admin/admin/src/translations/sa.json.mjs.map +1 -1
  181. package/dist/admin/admin/src/translations/sv.json.js +0 -39
  182. package/dist/admin/admin/src/translations/sv.json.js.map +1 -1
  183. package/dist/admin/admin/src/translations/sv.json.mjs +0 -39
  184. package/dist/admin/admin/src/translations/sv.json.mjs.map +1 -1
  185. package/dist/admin/admin/src/translations/tr.json.js +0 -39
  186. package/dist/admin/admin/src/translations/tr.json.js.map +1 -1
  187. package/dist/admin/admin/src/translations/tr.json.mjs +0 -39
  188. package/dist/admin/admin/src/translations/tr.json.mjs.map +1 -1
  189. package/dist/admin/admin/src/translations/uk.json.js +0 -44
  190. package/dist/admin/admin/src/translations/uk.json.js.map +1 -1
  191. package/dist/admin/admin/src/translations/uk.json.mjs +0 -44
  192. package/dist/admin/admin/src/translations/uk.json.mjs.map +1 -1
  193. package/dist/admin/admin/src/translations/vi.json.js +0 -44
  194. package/dist/admin/admin/src/translations/vi.json.js.map +1 -1
  195. package/dist/admin/admin/src/translations/vi.json.mjs +0 -44
  196. package/dist/admin/admin/src/translations/vi.json.mjs.map +1 -1
  197. package/dist/admin/admin/src/translations/zh-Hans.json.js +0 -44
  198. package/dist/admin/admin/src/translations/zh-Hans.json.js.map +1 -1
  199. package/dist/admin/admin/src/translations/zh-Hans.json.mjs +0 -44
  200. package/dist/admin/admin/src/translations/zh-Hans.json.mjs.map +1 -1
  201. package/dist/admin/admin/src/translations/zh.json.js +0 -39
  202. package/dist/admin/admin/src/translations/zh.json.js.map +1 -1
  203. package/dist/admin/admin/src/translations/zh.json.mjs +0 -39
  204. package/dist/admin/admin/src/translations/zh.json.mjs.map +1 -1
  205. package/dist/admin/admin/tests/mockData.js +0 -1413
  206. package/dist/admin/admin/tests/mockData.js.map +1 -1
  207. package/dist/admin/admin/tests/mockData.mjs +0 -1413
  208. package/dist/admin/admin/tests/mockData.mjs.map +1 -1
  209. package/dist/admin/admin/tests/server.js +0 -99
  210. package/dist/admin/admin/tests/server.js.map +1 -1
  211. package/dist/admin/admin/tests/server.mjs +0 -80
  212. package/dist/admin/admin/tests/server.mjs.map +1 -1
  213. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.js +1 -0
  214. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.js.map +1 -1
  215. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.mjs +1 -0
  216. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.mjs.map +1 -1
  217. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/CreateActionEE.js +2 -0
  218. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/CreateActionEE.js.map +1 -1
  219. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/CreateActionEE.mjs +2 -0
  220. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/CreateActionEE.mjs.map +1 -1
  221. package/dist/admin/src/components/MainNav/NavLink.d.ts +2 -2
  222. package/dist/admin/src/core/apis/router.d.ts +1 -0
  223. package/dist/admin/src/features/Tracking.d.ts +1 -1
  224. package/dist/admin/src/hooks/useMenu.d.ts +1 -0
  225. package/dist/admin/tests/mockData.d.ts +0 -972
  226. package/dist/server/server/src/services/permission/permissions-manager/permission-fields.js +53 -0
  227. package/dist/server/server/src/services/permission/permissions-manager/permission-fields.js.map +1 -0
  228. package/dist/server/server/src/services/permission/permissions-manager/permission-fields.mjs +51 -0
  229. package/dist/server/server/src/services/permission/permissions-manager/permission-fields.mjs.map +1 -0
  230. package/dist/server/server/src/services/permission/permissions-manager/sanitize.js +7 -8
  231. package/dist/server/server/src/services/permission/permissions-manager/sanitize.js.map +1 -1
  232. package/dist/server/server/src/services/permission/permissions-manager/sanitize.mjs +10 -11
  233. package/dist/server/server/src/services/permission/permissions-manager/sanitize.mjs.map +1 -1
  234. package/dist/server/server/src/services/permission/permissions-manager/validate.js +7 -8
  235. package/dist/server/server/src/services/permission/permissions-manager/validate.js.map +1 -1
  236. package/dist/server/server/src/services/permission/permissions-manager/validate.mjs +10 -11
  237. package/dist/server/server/src/services/permission/permissions-manager/validate.mjs.map +1 -1
  238. package/dist/server/src/services/permission/permissions-manager/permission-fields.d.ts +21 -0
  239. package/dist/server/src/services/permission/permissions-manager/permission-fields.d.ts.map +1 -0
  240. package/dist/server/src/services/permission/permissions-manager/sanitize.d.ts.map +1 -1
  241. package/dist/server/src/services/permission/permissions-manager/validate.d.ts.map +1 -1
  242. package/package.json +7 -7
  243. package/dist/admin/admin/src/pages/Marketplace/MarketplacePage.js +0 -339
  244. package/dist/admin/admin/src/pages/Marketplace/MarketplacePage.js.map +0 -1
  245. package/dist/admin/admin/src/pages/Marketplace/MarketplacePage.mjs +0 -317
  246. package/dist/admin/admin/src/pages/Marketplace/MarketplacePage.mjs.map +0 -1
  247. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackageCard.js +0 -329
  248. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackageCard.js.map +0 -1
  249. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackageCard.mjs +0 -308
  250. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackageCard.mjs.map +0 -1
  251. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackagesFilters.js +0 -121
  252. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackagesFilters.js.map +0 -1
  253. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackagesFilters.mjs +0 -119
  254. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackagesFilters.mjs.map +0 -1
  255. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackagesGrid.js +0 -93
  256. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackagesGrid.js.map +0 -1
  257. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackagesGrid.mjs +0 -91
  258. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackagesGrid.mjs.map +0 -1
  259. package/dist/admin/admin/src/pages/Marketplace/components/OfflineLayout.js +0 -81
  260. package/dist/admin/admin/src/pages/Marketplace/components/OfflineLayout.js.map +0 -1
  261. package/dist/admin/admin/src/pages/Marketplace/components/OfflineLayout.mjs +0 -79
  262. package/dist/admin/admin/src/pages/Marketplace/components/OfflineLayout.mjs.map +0 -1
  263. package/dist/admin/admin/src/pages/Marketplace/components/PageHeader.js +0 -38
  264. package/dist/admin/admin/src/pages/Marketplace/components/PageHeader.js.map +0 -1
  265. package/dist/admin/admin/src/pages/Marketplace/components/PageHeader.mjs +0 -36
  266. package/dist/admin/admin/src/pages/Marketplace/components/PageHeader.mjs.map +0 -1
  267. package/dist/admin/admin/src/pages/Marketplace/components/SortSelect.js +0 -85
  268. package/dist/admin/admin/src/pages/Marketplace/components/SortSelect.js.map +0 -1
  269. package/dist/admin/admin/src/pages/Marketplace/components/SortSelect.mjs +0 -83
  270. package/dist/admin/admin/src/pages/Marketplace/components/SortSelect.mjs.map +0 -1
  271. package/dist/admin/admin/src/pages/Marketplace/hooks/useMarketplaceData.js +0 -134
  272. package/dist/admin/admin/src/pages/Marketplace/hooks/useMarketplaceData.js.map +0 -1
  273. package/dist/admin/admin/src/pages/Marketplace/hooks/useMarketplaceData.mjs +0 -113
  274. package/dist/admin/admin/src/pages/Marketplace/hooks/useMarketplaceData.mjs.map +0 -1
  275. package/dist/admin/admin/src/pages/Marketplace/hooks/useNavigatorOnline.js +0 -44
  276. package/dist/admin/admin/src/pages/Marketplace/hooks/useNavigatorOnline.js.map +0 -1
  277. package/dist/admin/admin/src/pages/Marketplace/hooks/useNavigatorOnline.mjs +0 -23
  278. package/dist/admin/admin/src/pages/Marketplace/hooks/useNavigatorOnline.mjs.map +0 -1
  279. package/dist/admin/src/pages/Marketplace/MarketplacePage.d.ts +0 -19
  280. package/dist/admin/src/pages/Marketplace/components/NpmPackageCard.d.ts +0 -13
  281. package/dist/admin/src/pages/Marketplace/components/NpmPackagesFilters.d.ts +0 -13
  282. package/dist/admin/src/pages/Marketplace/components/NpmPackagesGrid.d.ts +0 -13
  283. package/dist/admin/src/pages/Marketplace/components/OfflineLayout.d.ts +0 -2
  284. package/dist/admin/src/pages/Marketplace/components/PageHeader.d.ts +0 -8
  285. package/dist/admin/src/pages/Marketplace/components/SortSelect.d.ts +0 -51
  286. package/dist/admin/src/pages/Marketplace/hooks/useMarketplaceData.d.ts +0 -93
  287. package/dist/admin/src/pages/Marketplace/hooks/useNavigatorOnline.d.ts +0 -5
@@ -1 +1 @@
1
- {"version":3,"file":"validate.mjs","sources":["../../../../../../../server/src/services/permission/permissions-manager/validate.ts"],"sourcesContent":["import { subject as asSubject, detectSubjectType } from '@casl/ability';\nimport { permittedFieldsOf } from '@casl/ability/extra';\nimport {\n defaults,\n omit,\n isArray,\n isEmpty,\n isNil,\n flatMap,\n some,\n prop,\n uniq,\n intersection,\n getOr,\n isObject,\n} from 'lodash/fp';\n\nimport { contentTypes, traverseEntity, traverse, validate, async, errors } from '@strapi/utils';\nimport { ADMIN_USER_ALLOWED_FIELDS } from '../../../domain/user';\n\nconst { ValidationError } = errors;\nconst { throwPassword, throwDisallowedFields } = validate.visitors;\n\nconst { constants, isScalarAttribute, getNonVisibleAttributes, getWritableAttributes } =\n contentTypes;\nconst {\n ID_ATTRIBUTE,\n DOC_ID_ATTRIBUTE,\n CREATED_AT_ATTRIBUTE,\n UPDATED_AT_ATTRIBUTE,\n PUBLISHED_AT_ATTRIBUTE,\n CREATED_BY_ATTRIBUTE,\n UPDATED_BY_ATTRIBUTE,\n} = constants;\n\nconst COMPONENT_FIELDS = ['__component'];\n\nconst STATIC_FIELDS = [ID_ATTRIBUTE, DOC_ID_ATTRIBUTE];\n\nconst throwInvalidKey = ({ key, path }: { key: string; path?: string | null }) => {\n const msg = path && path !== key ? `Invalid key ${key} at ${path}` : `Invalid key ${key}`;\n\n throw new ValidationError(msg);\n};\n\nexport default ({ action, ability, model }: any) => {\n const schema = strapi.getModel(model);\n\n const ctx = {\n schema,\n getModel: strapi.getModel.bind(strapi),\n };\n\n const createValidateQuery = (options = {} as any) => {\n const { fields } = options;\n\n // TODO: validate relations to admin users in all validators\n const permittedFields = fields.shouldIncludeAll ? null : getQueryFields(fields.permitted);\n\n const validateFilters = async.pipe(\n traverse.traverseQueryFilters(throwDisallowedFields(permittedFields), ctx),\n traverse.traverseQueryFilters(throwDisallowedAdminUserFields, ctx),\n traverse.traverseQueryFilters(throwPassword, ctx),\n traverse.traverseQueryFilters(({ key, value, path }) => {\n if (isObject(value) && isEmpty(value)) {\n throwInvalidKey({ key, path: path.attribute });\n }\n }, ctx)\n );\n\n const validateSort = async.pipe(\n traverse.traverseQuerySort(throwDisallowedFields(permittedFields), ctx),\n traverse.traverseQuerySort(throwDisallowedAdminUserFields, ctx),\n traverse.traverseQuerySort(throwPassword, ctx),\n traverse.traverseQuerySort(({ key, attribute, value, path }) => {\n if (!isScalarAttribute(attribute) && isEmpty(value)) {\n throwInvalidKey({ key, path: path.attribute });\n }\n }, ctx)\n );\n\n const validateFields = async.pipe(\n traverse.traverseQueryFields(throwDisallowedFields(permittedFields), ctx),\n traverse.traverseQueryFields(throwPassword, ctx)\n );\n\n const validatePopulate = async.pipe(\n traverse.traverseQueryPopulate(throwDisallowedFields(permittedFields), ctx),\n traverse.traverseQueryPopulate(throwDisallowedAdminUserFields, ctx),\n traverse.traverseQueryPopulate(throwHiddenFields, ctx),\n traverse.traverseQueryPopulate(throwPassword, ctx)\n );\n\n return async (query: any) => {\n if (query.filters) {\n await validateFilters(query.filters);\n }\n\n if (query.sort) {\n await validateSort(query.sort);\n }\n\n if (query.fields) {\n await validateFields(query.fields);\n }\n\n // a wildcard is always valid; its conversion will be handled by the entity service and can be optimized with sanitizer\n if (query.populate && query.populate !== '*') {\n await validatePopulate(query.populate);\n }\n\n return true;\n };\n };\n\n const createValidateInput = (options = {} as any) => {\n const { fields } = options;\n\n const permittedFields = fields.shouldIncludeAll ? null : getInputFields(fields.permitted);\n\n return async.pipe(\n // Remove fields hidden from the admin\n traverseEntity(throwHiddenFields, ctx),\n // Remove not allowed fields (RBAC)\n traverseEntity(throwDisallowedFields(permittedFields), ctx),\n // Remove roles from createdBy & updatedBy fields\n omitCreatorRoles\n );\n };\n\n const wrapValidate = (createValidateFunction: any) => {\n // TODO\n // @ts-expect-error define the correct return type\n const wrappedValidate = async (data, options = {}): Promise<unknown> => {\n if (isArray(data)) {\n return Promise.all(data.map((entity: unknown) => wrappedValidate(entity, options)));\n }\n\n const { subject, action: actionOverride } = getDefaultOptions(data, options);\n\n const permittedFields = permittedFieldsOf(ability, actionOverride, subject, {\n fieldsFrom: (rule) => rule.fields || [],\n });\n\n const hasAtLeastOneRegistered = some(\n (fields) => !isNil(fields),\n flatMap(prop('fields'), ability.rulesFor(actionOverride, detectSubjectType(subject)))\n );\n const shouldIncludeAllFields = isEmpty(permittedFields) && !hasAtLeastOneRegistered;\n\n const validateOptions = {\n ...options,\n fields: {\n shouldIncludeAll: shouldIncludeAllFields,\n permitted: permittedFields,\n hasAtLeastOneRegistered,\n },\n };\n\n const validateFunction = createValidateFunction(validateOptions);\n\n return validateFunction(data);\n };\n\n return wrappedValidate;\n };\n\n const getDefaultOptions = (data: any, options: unknown) => {\n return defaults({ subject: asSubject(model, data), action }, options);\n };\n\n /**\n * Omit creator fields' (createdBy & updatedBy) roles from the admin API responses\n */\n const omitCreatorRoles = omit([`${CREATED_BY_ATTRIBUTE}.roles`, `${UPDATED_BY_ATTRIBUTE}.roles`]);\n\n /**\n * Visitor used to remove hidden fields from the admin API responses\n */\n const throwHiddenFields = ({ key, schema, path }: any) => {\n const isHidden = getOr(false, ['config', 'attributes', key, 'hidden'], schema);\n\n if (isHidden) {\n throwInvalidKey({ key, path: path.attribute });\n }\n };\n\n /**\n * Visitor used to omit disallowed fields from the admin users entities & avoid leaking sensitive information\n */\n const throwDisallowedAdminUserFields = ({ key, attribute, schema, path }: any) => {\n if (schema.uid === 'admin::user' && attribute && !ADMIN_USER_ALLOWED_FIELDS.includes(key)) {\n throwInvalidKey({ key, path: path.attribute });\n }\n };\n\n const getInputFields = (fields = []) => {\n const nonVisibleAttributes = getNonVisibleAttributes(schema);\n const writableAttributes = getWritableAttributes(schema);\n\n const nonVisibleWritableAttributes = intersection(nonVisibleAttributes, writableAttributes);\n\n return uniq([...fields, ...COMPONENT_FIELDS, ...nonVisibleWritableAttributes]);\n };\n\n const getQueryFields = (fields = []) => {\n return uniq([\n ...fields,\n ...STATIC_FIELDS,\n ...COMPONENT_FIELDS,\n CREATED_AT_ATTRIBUTE,\n UPDATED_AT_ATTRIBUTE,\n PUBLISHED_AT_ATTRIBUTE,\n ]);\n };\n\n return {\n validateQuery: wrapValidate(createValidateQuery),\n validateInput: wrapValidate(createValidateInput),\n };\n};\n"],"names":["ValidationError","errors","throwPassword","throwDisallowedFields","validate","visitors","constants","isScalarAttribute","getNonVisibleAttributes","getWritableAttributes","contentTypes","ID_ATTRIBUTE","DOC_ID_ATTRIBUTE","CREATED_AT_ATTRIBUTE","UPDATED_AT_ATTRIBUTE","PUBLISHED_AT_ATTRIBUTE","CREATED_BY_ATTRIBUTE","UPDATED_BY_ATTRIBUTE","COMPONENT_FIELDS","STATIC_FIELDS","throwInvalidKey","key","path","msg","action","ability","model","schema","strapi","getModel","ctx","bind","createValidateQuery","options","fields","permittedFields","shouldIncludeAll","getQueryFields","permitted","validateFilters","async","pipe","traverse","traverseQueryFilters","throwDisallowedAdminUserFields","value","isObject","isEmpty","attribute","validateSort","traverseQuerySort","validateFields","traverseQueryFields","validatePopulate","traverseQueryPopulate","throwHiddenFields","query","filters","sort","populate","createValidateInput","getInputFields","traverseEntity","omitCreatorRoles","wrapValidate","createValidateFunction","wrappedValidate","data","isArray","Promise","all","map","entity","subject","actionOverride","getDefaultOptions","permittedFieldsOf","fieldsFrom","rule","hasAtLeastOneRegistered","some","isNil","flatMap","prop","rulesFor","detectSubjectType","shouldIncludeAllFields","validateOptions","validateFunction","defaults","asSubject","omit","isHidden","getOr","uid","ADMIN_USER_ALLOWED_FIELDS","includes","nonVisibleAttributes","writableAttributes","nonVisibleWritableAttributes","intersection","uniq","validateQuery","validateInput"],"mappings":"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"}
1
+ {"version":3,"file":"validate.mjs","sources":["../../../../../../../server/src/services/permission/permissions-manager/validate.ts"],"sourcesContent":["import { subject as asSubject } from '@casl/ability';\nimport { defaults, omit, isArray, isEmpty, uniq, intersection, getOr, isObject } from 'lodash/fp';\n\nimport {\n contentTypes,\n traverseEntity,\n traverse,\n validate,\n async,\n errors,\n createModelCache,\n} from '@strapi/utils';\nimport { createPermissionFieldsCache } from './permission-fields';\n\nimport { ADMIN_USER_ALLOWED_FIELDS } from '../../../domain/user';\n\nconst { ValidationError } = errors;\nconst { throwPassword, throwDisallowedFields } = validate.visitors;\n\nconst { constants, isScalarAttribute, getNonVisibleAttributes, getWritableAttributes } =\n contentTypes;\nconst {\n ID_ATTRIBUTE,\n DOC_ID_ATTRIBUTE,\n CREATED_AT_ATTRIBUTE,\n UPDATED_AT_ATTRIBUTE,\n PUBLISHED_AT_ATTRIBUTE,\n CREATED_BY_ATTRIBUTE,\n UPDATED_BY_ATTRIBUTE,\n} = constants;\n\nconst COMPONENT_FIELDS = ['__component'];\n\nconst STATIC_FIELDS = [ID_ATTRIBUTE, DOC_ID_ATTRIBUTE];\n\nconst throwInvalidKey = ({ key, path }: { key: string; path?: string | null }) => {\n const msg = path && path !== key ? `Invalid key ${key} at ${path}` : `Invalid key ${key}`;\n\n throw new ValidationError(msg);\n};\n\nexport default ({ action, ability, model }: any) => {\n const schema = strapi.getModel(model);\n\n // Create request-scoped model cache to avoid redundant getModel() calls\n const modelCache = createModelCache(strapi.getModel.bind(strapi));\n\n const ctx = {\n schema,\n getModel: modelCache.getModel,\n };\n\n const createValidateQuery = (options = {} as any) => {\n const { fields } = options;\n\n // TODO: validate relations to admin users in all validators\n const permittedFields = fields.shouldIncludeAll ? null : getQueryFields(fields.permitted);\n\n const validateFilters = async.pipe(\n traverse.traverseQueryFilters(throwDisallowedFields(permittedFields), ctx),\n traverse.traverseQueryFilters(throwDisallowedAdminUserFields, ctx),\n traverse.traverseQueryFilters(throwPassword, ctx),\n traverse.traverseQueryFilters(({ key, value, path }) => {\n if (isObject(value) && isEmpty(value)) {\n throwInvalidKey({ key, path: path.attribute });\n }\n }, ctx)\n );\n\n const validateSort = async.pipe(\n traverse.traverseQuerySort(throwDisallowedFields(permittedFields), ctx),\n traverse.traverseQuerySort(throwDisallowedAdminUserFields, ctx),\n traverse.traverseQuerySort(throwPassword, ctx),\n traverse.traverseQuerySort(({ key, attribute, value, path }) => {\n if (!isScalarAttribute(attribute) && isEmpty(value)) {\n throwInvalidKey({ key, path: path.attribute });\n }\n }, ctx)\n );\n\n const validateFields = async.pipe(\n traverse.traverseQueryFields(throwDisallowedFields(permittedFields), ctx),\n traverse.traverseQueryFields(throwPassword, ctx)\n );\n\n const validatePopulate = async.pipe(\n traverse.traverseQueryPopulate(throwDisallowedFields(permittedFields), ctx),\n traverse.traverseQueryPopulate(throwDisallowedAdminUserFields, ctx),\n traverse.traverseQueryPopulate(throwHiddenFields, ctx),\n traverse.traverseQueryPopulate(throwPassword, ctx)\n );\n\n return async (query: any) => {\n if (query.filters) {\n await validateFilters(query.filters);\n }\n\n if (query.sort) {\n await validateSort(query.sort);\n }\n\n if (query.fields) {\n await validateFields(query.fields);\n }\n\n // a wildcard is always valid; its conversion will be handled by the entity service and can be optimized with sanitizer\n if (query.populate && query.populate !== '*') {\n await validatePopulate(query.populate);\n }\n\n return true;\n };\n };\n\n const createValidateInput = (options = {} as any) => {\n const { fields } = options;\n\n const permittedFields = fields.shouldIncludeAll ? null : getInputFields(fields.permitted);\n\n return async.pipe(\n // Remove fields hidden from the admin\n traverseEntity(throwHiddenFields, ctx),\n // Remove not allowed fields (RBAC)\n traverseEntity(throwDisallowedFields(permittedFields), ctx),\n // Remove roles from createdBy & updatedBy fields\n omitCreatorRoles\n );\n };\n\n const wrapValidate = (createValidateFunction: any) => {\n const { getPermissionFields } = createPermissionFieldsCache(ability);\n\n // TODO\n // @ts-expect-error define the correct return type\n const wrappedValidate = async (data, options = {}): Promise<unknown> => {\n if (isArray(data)) {\n return Promise.all(data.map((entity: unknown) => wrappedValidate(entity, options)));\n }\n\n const { subject, action: actionOverride } = getDefaultOptions(data, options);\n\n const { permittedFields, hasAtLeastOneRegistered, shouldIncludeAll } = getPermissionFields(\n actionOverride,\n subject\n );\n\n const validateOptions = {\n ...options,\n fields: {\n shouldIncludeAll,\n permitted: permittedFields,\n hasAtLeastOneRegistered,\n },\n };\n\n const validateFunction = createValidateFunction(validateOptions);\n\n return validateFunction(data);\n };\n\n return wrappedValidate;\n };\n\n const getDefaultOptions = (data: any, options: unknown) => {\n return defaults({ subject: asSubject(model, data), action }, options);\n };\n\n /**\n * Omit creator fields' (createdBy & updatedBy) roles from the admin API responses\n */\n const omitCreatorRoles = omit([`${CREATED_BY_ATTRIBUTE}.roles`, `${UPDATED_BY_ATTRIBUTE}.roles`]);\n\n /**\n * Visitor used to remove hidden fields from the admin API responses\n */\n const throwHiddenFields = ({ key, schema, path }: any) => {\n const isHidden = getOr(false, ['config', 'attributes', key, 'hidden'], schema);\n\n if (isHidden) {\n throwInvalidKey({ key, path: path.attribute });\n }\n };\n\n /**\n * Visitor used to omit disallowed fields from the admin users entities & avoid leaking sensitive information\n */\n const throwDisallowedAdminUserFields = ({ key, attribute, schema, path }: any) => {\n if (schema.uid === 'admin::user' && attribute && !ADMIN_USER_ALLOWED_FIELDS.includes(key)) {\n throwInvalidKey({ key, path: path.attribute });\n }\n };\n\n const getInputFields = (fields = []) => {\n const nonVisibleAttributes = getNonVisibleAttributes(schema);\n const writableAttributes = getWritableAttributes(schema);\n\n const nonVisibleWritableAttributes = intersection(nonVisibleAttributes, writableAttributes);\n\n return uniq([...fields, ...COMPONENT_FIELDS, ...nonVisibleWritableAttributes]);\n };\n\n const getQueryFields = (fields = []) => {\n return uniq([\n ...fields,\n ...STATIC_FIELDS,\n ...COMPONENT_FIELDS,\n CREATED_AT_ATTRIBUTE,\n UPDATED_AT_ATTRIBUTE,\n PUBLISHED_AT_ATTRIBUTE,\n ]);\n };\n\n return {\n validateQuery: wrapValidate(createValidateQuery),\n validateInput: wrapValidate(createValidateInput),\n };\n};\n"],"names":["ValidationError","errors","throwPassword","throwDisallowedFields","validate","visitors","constants","isScalarAttribute","getNonVisibleAttributes","getWritableAttributes","contentTypes","ID_ATTRIBUTE","DOC_ID_ATTRIBUTE","CREATED_AT_ATTRIBUTE","UPDATED_AT_ATTRIBUTE","PUBLISHED_AT_ATTRIBUTE","CREATED_BY_ATTRIBUTE","UPDATED_BY_ATTRIBUTE","COMPONENT_FIELDS","STATIC_FIELDS","throwInvalidKey","key","path","msg","action","ability","model","schema","strapi","getModel","modelCache","createModelCache","bind","ctx","createValidateQuery","options","fields","permittedFields","shouldIncludeAll","getQueryFields","permitted","validateFilters","async","pipe","traverse","traverseQueryFilters","throwDisallowedAdminUserFields","value","isObject","isEmpty","attribute","validateSort","traverseQuerySort","validateFields","traverseQueryFields","validatePopulate","traverseQueryPopulate","throwHiddenFields","query","filters","sort","populate","createValidateInput","getInputFields","traverseEntity","omitCreatorRoles","wrapValidate","createValidateFunction","getPermissionFields","createPermissionFieldsCache","wrappedValidate","data","isArray","Promise","all","map","entity","subject","actionOverride","getDefaultOptions","hasAtLeastOneRegistered","validateOptions","validateFunction","defaults","asSubject","omit","isHidden","getOr","uid","ADMIN_USER_ALLOWED_FIELDS","includes","nonVisibleAttributes","writableAttributes","nonVisibleWritableAttributes","intersection","uniq","validateQuery","validateInput"],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { Ability } from '@casl/ability';
2
+ export interface PermissionFieldsResult {
3
+ permittedFields: string[];
4
+ hasAtLeastOneRegistered: boolean;
5
+ shouldIncludeAll: boolean;
6
+ }
7
+ /**
8
+ * Creates a cached permission fields calculator for a given CASL ability.
9
+ *
10
+ * The cache stores permission field calculations per action+subjectType combination.
11
+ * Results are only cached when rules have no entity-specific conditions, as those
12
+ * must be computed per entity.
13
+ *
14
+ * @param ability - The CASL ability instance to use for permission checks
15
+ * @returns Object with getPermissionFields function and cache
16
+ */
17
+ export declare const createPermissionFieldsCache: (ability: Ability) => {
18
+ getPermissionFields: (actionOverride: string, subject: any) => PermissionFieldsResult;
19
+ clearCache: () => void;
20
+ };
21
+ //# sourceMappingURL=permission-fields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission-fields.d.ts","sourceRoot":"","sources":["../../../../../../server/src/services/permission/permissions-manager/permission-fields.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,WAAW,sBAAsB;IACrC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,uBAAuB,EAAE,OAAO,CAAC;IACjC,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,2BAA2B,YAAa,OAAO;0CAGb,MAAM,WAAW,GAAG,KAAG,sBAAsB;;CA6C3F,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../../../../../server/src/services/permission/permissions-manager/sanitize.ts"],"names":[],"mappings":"qDAgD4C,GAAG;2BAqHN,OAAO;0BAAP,OAAO;0BAAP,OAAO;;AArHhD,wBAsPE"}
1
+ {"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../../../../../server/src/services/permission/permissions-manager/sanitize.ts"],"names":[],"mappings":"qDAmD4C,GAAG;2BA0HN,OAAO;0BAAP,OAAO;0BAAP,OAAO;;AA1HhD,wBAsPE"}
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../../../../server/src/services/permission/permissions-manager/validate.ts"],"names":[],"mappings":"qDA6C4C,GAAG;gDAwFS,QAAQ,OAAO,CAAC;gDAAhB,QAAQ,OAAO,CAAC;;AAxFxE,wBA+KE"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../../../../server/src/services/permission/permissions-manager/validate.ts"],"names":[],"mappings":"qDAyC4C,GAAG;gDA6FS,QAAQ,OAAO,CAAC;gDAAhB,QAAQ,OAAO,CAAC;;AA7FxE,wBA+KE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/admin",
3
- "version": "5.33.4",
3
+ "version": "5.34.0",
4
4
  "description": "Strapi Admin",
5
5
  "repository": {
6
6
  "type": "git",
@@ -86,10 +86,10 @@
86
86
  "@reduxjs/toolkit": "1.9.7",
87
87
  "@strapi/design-system": "2.1.2",
88
88
  "@strapi/icons": "2.1.2",
89
- "@strapi/permissions": "5.33.4",
90
- "@strapi/types": "5.33.4",
91
- "@strapi/typescript-utils": "5.33.4",
92
- "@strapi/utils": "5.33.4",
89
+ "@strapi/permissions": "5.34.0",
90
+ "@strapi/types": "5.34.0",
91
+ "@strapi/typescript-utils": "5.34.0",
92
+ "@strapi/utils": "5.34.0",
93
93
  "@testing-library/dom": "10.4.1",
94
94
  "@testing-library/react": "16.3.0",
95
95
  "@testing-library/user-event": "14.6.1",
@@ -145,8 +145,8 @@
145
145
  "zod": "3.25.67"
146
146
  },
147
147
  "devDependencies": {
148
- "@strapi/admin-test-utils": "5.33.4",
149
- "@strapi/data-transfer": "5.33.4",
148
+ "@strapi/admin-test-utils": "5.34.0",
149
+ "@strapi/data-transfer": "5.34.0",
150
150
  "@types/codemirror5": "npm:@types/codemirror@^5.60.15",
151
151
  "@types/fs-extra": "11.0.4",
152
152
  "@types/invariant": "2.2.36",
@@ -1,339 +0,0 @@
1
- 'use strict';
2
-
3
- var jsxRuntime = require('react/jsx-runtime');
4
- var React = require('react');
5
- var designSystem = require('@strapi/design-system');
6
- var icons = require('@strapi/icons');
7
- var symbols = require('@strapi/icons/symbols');
8
- var reactIntl = require('react-intl');
9
- var ContentBox = require('../../components/ContentBox.js');
10
- var Layout = require('../../components/Layouts/Layout.js');
11
- var PageHelpers = require('../../components/PageHelpers.js');
12
- var Pagination = require('../../components/Pagination.js');
13
- var hooks = require('../../core/store/hooks.js');
14
- var AppInfo = require('../../features/AppInfo.js');
15
- var Notifications = require('../../features/Notifications.js');
16
- var Tracking = require('../../features/Tracking.js');
17
- var useDebounce = require('../../hooks/useDebounce.js');
18
- var useQueryParams = require('../../hooks/useQueryParams.js');
19
- var NpmPackagesFilters = require('./components/NpmPackagesFilters.js');
20
- var NpmPackagesGrid = require('./components/NpmPackagesGrid.js');
21
- var OfflineLayout = require('./components/OfflineLayout.js');
22
- var PageHeader = require('./components/PageHeader.js');
23
- var SortSelect = require('./components/SortSelect.js');
24
- var useMarketplaceData = require('./hooks/useMarketplaceData.js');
25
- var useNavigatorOnline = require('./hooks/useNavigatorOnline.js');
26
-
27
- function _interopNamespaceDefault(e) {
28
- var n = Object.create(null);
29
- if (e) {
30
- Object.keys(e).forEach(function (k) {
31
- if (k !== 'default') {
32
- var d = Object.getOwnPropertyDescriptor(e, k);
33
- Object.defineProperty(n, k, d.get ? d : {
34
- enumerable: true,
35
- get: function () { return e[k]; }
36
- });
37
- }
38
- });
39
- }
40
- n.default = e;
41
- return Object.freeze(n);
42
- }
43
-
44
- var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
45
-
46
- const PLUGIN = 'plugin';
47
- const PROVIDER = 'provider';
48
- const MarketplacePage = ()=>{
49
- const { formatMessage } = reactIntl.useIntl();
50
- const { trackUsage } = Tracking.useTracking();
51
- const { toggleNotification } = Notifications.useNotification();
52
- const [{ query }, setQuery] = useQueryParams.useQueryParams();
53
- const debouncedSearch = useDebounce.useDebounce(query?.search, 500) || '';
54
- const { autoReload: isInDevelopmentMode, dependencies, useYarn, strapiVersion } = AppInfo.useAppInfo('MarketplacePage', (state)=>state);
55
- const isOnline = useNavigatorOnline.useNavigatorOnline();
56
- const npmPackageType = query?.npmPackageType || PLUGIN;
57
- const [tabQuery, setTabQuery] = React__namespace.useState({
58
- plugin: npmPackageType === PLUGIN ? {
59
- ...query
60
- } : {},
61
- provider: npmPackageType === PROVIDER ? {
62
- ...query
63
- } : {}
64
- });
65
- React__namespace.useEffect(()=>{
66
- trackUsage('didGoToMarketplace');
67
- }, [
68
- trackUsage
69
- ]);
70
- React__namespace.useEffect(()=>{
71
- if (!isInDevelopmentMode) {
72
- toggleNotification({
73
- type: 'info',
74
- message: formatMessage({
75
- id: 'admin.pages.MarketPlacePage.production',
76
- defaultMessage: 'Manage plugins from the development environment'
77
- })
78
- });
79
- }
80
- }, [
81
- toggleNotification,
82
- isInDevelopmentMode,
83
- formatMessage
84
- ]);
85
- const { pluginsResponse, providersResponse, pluginsStatus, providersStatus, possibleCollections, possibleCategories, pagination } = useMarketplaceData.useMarketplaceData({
86
- npmPackageType,
87
- debouncedSearch,
88
- query,
89
- tabQuery,
90
- strapiVersion
91
- });
92
- if (!isOnline) {
93
- return /*#__PURE__*/ jsxRuntime.jsx(OfflineLayout.OfflineLayout, {});
94
- }
95
- const handleTabChange = (tab)=>{
96
- const selectedTab = tab === PLUGIN || tab === PROVIDER ? tab : PLUGIN;
97
- const hasTabQuery = tabQuery[selectedTab] && Object.keys(tabQuery[selectedTab]).length;
98
- if (hasTabQuery) {
99
- setQuery({
100
- // Keep filters and search
101
- ...tabQuery[selectedTab],
102
- search: query?.search || '',
103
- // Set tab and reset page
104
- npmPackageType: selectedTab,
105
- page: 1
106
- }, 'push', true);
107
- } else {
108
- setQuery({
109
- // Set tab
110
- npmPackageType: selectedTab,
111
- // Clear filters
112
- collections: [],
113
- categories: [],
114
- sort: 'name:asc',
115
- page: 1,
116
- // Keep search
117
- search: query?.search || ''
118
- }, 'push', true);
119
- }
120
- };
121
- const handleSelectChange = (update)=>{
122
- setQuery({
123
- ...update,
124
- page: 1
125
- });
126
- setTabQuery((prev)=>({
127
- ...prev,
128
- [npmPackageType]: {
129
- ...prev[npmPackageType],
130
- ...update
131
- }
132
- }));
133
- };
134
- const handleSelectClear = (filterType)=>{
135
- setQuery({
136
- [filterType]: [],
137
- page: undefined
138
- }, 'remove');
139
- setTabQuery((prev)=>({
140
- ...prev,
141
- [npmPackageType]: {}
142
- }));
143
- };
144
- const handleSortSelectChange = ({ sort })=>// @ts-expect-error - this is a narrowing issue.
145
- handleSelectChange({
146
- sort
147
- });
148
- // Check if plugins and providers are installed already
149
- const installedPackageNames = Object.keys(dependencies ?? {});
150
- return /*#__PURE__*/ jsxRuntime.jsx(Layout.Layouts.Root, {
151
- children: /*#__PURE__*/ jsxRuntime.jsxs(PageHelpers.Page.Main, {
152
- children: [
153
- /*#__PURE__*/ jsxRuntime.jsx(PageHelpers.Page.Title, {
154
- children: formatMessage({
155
- id: 'admin.pages.MarketPlacePage.head',
156
- defaultMessage: 'Marketplace - Plugins'
157
- })
158
- }),
159
- /*#__PURE__*/ jsxRuntime.jsx(PageHeader.PageHeader, {
160
- isOnline: isOnline,
161
- npmPackageType: npmPackageType
162
- }),
163
- /*#__PURE__*/ jsxRuntime.jsx(Layout.Layouts.Content, {
164
- children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Tabs.Root, {
165
- variant: "simple",
166
- onValueChange: handleTabChange,
167
- value: npmPackageType,
168
- children: [
169
- /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
170
- justifyContent: "space-between",
171
- paddingBottom: 4,
172
- children: [
173
- /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Tabs.List, {
174
- "aria-label": formatMessage({
175
- id: 'admin.pages.MarketPlacePage.tab-group.label',
176
- defaultMessage: 'Plugins and Providers for Strapi'
177
- }),
178
- children: [
179
- /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Tabs.Trigger, {
180
- value: PLUGIN,
181
- children: [
182
- formatMessage({
183
- id: 'admin.pages.MarketPlacePage.plugins',
184
- defaultMessage: 'Plugins'
185
- }),
186
- ' ',
187
- pluginsResponse ? `(${pluginsResponse.meta.pagination.total})` : '...'
188
- ]
189
- }),
190
- /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Tabs.Trigger, {
191
- value: PROVIDER,
192
- children: [
193
- formatMessage({
194
- id: 'admin.pages.MarketPlacePage.providers',
195
- defaultMessage: 'Providers'
196
- }),
197
- ' ',
198
- providersResponse ? `(${providersResponse.meta.pagination.total})` : '...'
199
- ]
200
- })
201
- ]
202
- }),
203
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
204
- width: "25%",
205
- children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Searchbar, {
206
- name: "searchbar",
207
- onClear: ()=>setQuery({
208
- search: '',
209
- page: 1
210
- }),
211
- value: query?.search,
212
- onChange: (e)=>setQuery({
213
- search: e.target.value,
214
- page: 1
215
- }),
216
- clearLabel: formatMessage({
217
- id: 'admin.pages.MarketPlacePage.search.clear',
218
- defaultMessage: 'Clear the search'
219
- }),
220
- placeholder: formatMessage({
221
- id: 'admin.pages.MarketPlacePage.search.placeholder',
222
- defaultMessage: 'Search'
223
- }),
224
- children: formatMessage({
225
- id: 'admin.pages.MarketPlacePage.search.placeholder',
226
- defaultMessage: 'Search'
227
- })
228
- })
229
- })
230
- ]
231
- }),
232
- /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
233
- paddingBottom: 4,
234
- gap: 2,
235
- children: [
236
- /*#__PURE__*/ jsxRuntime.jsx(SortSelect.SortSelect, {
237
- sortQuery: query?.sort || 'name:asc',
238
- handleSelectChange: handleSortSelectChange
239
- }),
240
- /*#__PURE__*/ jsxRuntime.jsx(NpmPackagesFilters.NpmPackagesFilters, {
241
- npmPackageType: npmPackageType,
242
- possibleCollections: possibleCollections,
243
- possibleCategories: possibleCategories,
244
- query: query || {},
245
- handleSelectChange: handleSelectChange,
246
- handleSelectClear: handleSelectClear
247
- })
248
- ]
249
- }),
250
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tabs.Content, {
251
- value: PLUGIN,
252
- children: /*#__PURE__*/ jsxRuntime.jsx(NpmPackagesGrid.NpmPackagesGrid, {
253
- npmPackages: pluginsResponse?.data,
254
- status: pluginsStatus,
255
- installedPackageNames: installedPackageNames,
256
- useYarn: useYarn,
257
- isInDevelopmentMode: isInDevelopmentMode,
258
- npmPackageType: "plugin",
259
- strapiAppVersion: strapiVersion,
260
- debouncedSearch: debouncedSearch
261
- })
262
- }),
263
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tabs.Content, {
264
- value: PROVIDER,
265
- children: /*#__PURE__*/ jsxRuntime.jsx(NpmPackagesGrid.NpmPackagesGrid, {
266
- npmPackages: providersResponse?.data,
267
- status: providersStatus,
268
- installedPackageNames: installedPackageNames,
269
- useYarn: useYarn,
270
- isInDevelopmentMode: isInDevelopmentMode,
271
- npmPackageType: "provider",
272
- debouncedSearch: debouncedSearch
273
- })
274
- }),
275
- /*#__PURE__*/ jsxRuntime.jsxs(Pagination.Pagination.Root, {
276
- ...pagination,
277
- defaultPageSize: 24,
278
- children: [
279
- /*#__PURE__*/ jsxRuntime.jsx(Pagination.Pagination.PageSize, {
280
- options: [
281
- '12',
282
- '24',
283
- '50',
284
- '100'
285
- ]
286
- }),
287
- /*#__PURE__*/ jsxRuntime.jsx(Pagination.Pagination.Links, {})
288
- ]
289
- }),
290
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
291
- paddingTop: 8,
292
- children: /*#__PURE__*/ jsxRuntime.jsx("a", {
293
- href: "https://strapi.canny.io/plugin-requests",
294
- target: "_blank",
295
- rel: "noopener noreferrer nofollow",
296
- style: {
297
- textDecoration: 'none'
298
- },
299
- onClick: ()=>trackUsage('didMissMarketplacePlugin'),
300
- children: /*#__PURE__*/ jsxRuntime.jsx(ContentBox.ContentBox, {
301
- title: formatMessage({
302
- id: 'admin.pages.MarketPlacePage.missingPlugin.title',
303
- defaultMessage: 'Documentation'
304
- }),
305
- subtitle: formatMessage({
306
- id: 'admin.pages.MarketPlacePage.missingPlugin.description',
307
- defaultMessage: "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!"
308
- }),
309
- icon: /*#__PURE__*/ jsxRuntime.jsx(symbols.GlassesSquare, {}),
310
- iconBackground: "alternative100",
311
- endAction: /*#__PURE__*/ jsxRuntime.jsx(icons.ExternalLink, {
312
- fill: "neutral600",
313
- width: "1.2rem",
314
- height: "1.2rem",
315
- style: {
316
- marginLeft: '0.8rem'
317
- }
318
- })
319
- })
320
- })
321
- })
322
- ]
323
- })
324
- })
325
- ]
326
- })
327
- });
328
- };
329
- const ProtectedMarketplacePage = ()=>{
330
- const permissions = hooks.useTypedSelector((state)=>state.admin_app.permissions.marketplace?.main);
331
- return /*#__PURE__*/ jsxRuntime.jsx(PageHelpers.Page.Protect, {
332
- permissions: permissions,
333
- children: /*#__PURE__*/ jsxRuntime.jsx(MarketplacePage, {})
334
- });
335
- };
336
-
337
- exports.MarketplacePage = MarketplacePage;
338
- exports.ProtectedMarketplacePage = ProtectedMarketplacePage;
339
- //# sourceMappingURL=MarketplacePage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MarketplacePage.js","sources":["../../../../../../admin/src/pages/Marketplace/MarketplacePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Flex, Searchbar, Tabs } from '@strapi/design-system';\nimport { ExternalLink } from '@strapi/icons';\nimport { GlassesSquare } from '@strapi/icons/symbols';\nimport { useIntl } from 'react-intl';\n\nimport { ContentBox } from '../../components/ContentBox';\nimport { Layouts } from '../../components/Layouts/Layout';\nimport { Page } from '../../components/PageHelpers';\nimport { Pagination } from '../../components/Pagination';\nimport { useTypedSelector } from '../../core/store/hooks';\nimport { useAppInfo } from '../../features/AppInfo';\nimport { useNotification } from '../../features/Notifications';\nimport { useTracking } from '../../features/Tracking';\nimport { useDebounce } from '../../hooks/useDebounce';\nimport { useQueryParams } from '../../hooks/useQueryParams';\n\nimport { NpmPackagesFilters } from './components/NpmPackagesFilters';\nimport { NpmPackagesGrid } from './components/NpmPackagesGrid';\nimport { OfflineLayout } from './components/OfflineLayout';\nimport { PageHeader } from './components/PageHeader';\nimport { SortSelect, SortSelectProps } from './components/SortSelect';\nimport { FilterTypes, useMarketplaceData } from './hooks/useMarketplaceData';\nimport { useNavigatorOnline } from './hooks/useNavigatorOnline';\n\ntype NpmPackageType = 'plugin' | 'provider';\n\ninterface MarketplacePageQuery {\n collections?: string[];\n categories?: string[];\n npmPackageType?: NpmPackageType;\n page?: number;\n pageSize?: number;\n search?: string;\n sort?: SortSelectProps['sortQuery'];\n}\n\ninterface TabQuery {\n plugin: MarketplacePageQuery;\n provider: MarketplacePageQuery;\n}\n\nconst PLUGIN = 'plugin';\nconst PROVIDER = 'provider';\n\nconst MarketplacePage = () => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { toggleNotification } = useNotification();\n const [{ query }, setQuery] = useQueryParams<MarketplacePageQuery>();\n const debouncedSearch = useDebounce(query?.search, 500) || '';\n\n const {\n autoReload: isInDevelopmentMode,\n dependencies,\n useYarn,\n strapiVersion,\n } = useAppInfo('MarketplacePage', (state) => state);\n const isOnline = useNavigatorOnline();\n\n const npmPackageType = query?.npmPackageType || PLUGIN;\n\n const [tabQuery, setTabQuery] = React.useState<TabQuery>({\n plugin: npmPackageType === PLUGIN ? { ...query } : {},\n provider: npmPackageType === PROVIDER ? { ...query } : {},\n });\n\n React.useEffect(() => {\n trackUsage('didGoToMarketplace');\n }, [trackUsage]);\n\n React.useEffect(() => {\n if (!isInDevelopmentMode) {\n toggleNotification({\n type: 'info',\n message: formatMessage({\n id: 'admin.pages.MarketPlacePage.production',\n defaultMessage: 'Manage plugins from the development environment',\n }),\n });\n }\n }, [toggleNotification, isInDevelopmentMode, formatMessage]);\n\n const {\n pluginsResponse,\n providersResponse,\n pluginsStatus,\n providersStatus,\n possibleCollections,\n possibleCategories,\n pagination,\n } = useMarketplaceData({ npmPackageType, debouncedSearch, query, tabQuery, strapiVersion });\n\n if (!isOnline) {\n return <OfflineLayout />;\n }\n\n const handleTabChange = (tab: string) => {\n const selectedTab = tab === PLUGIN || tab === PROVIDER ? tab : PLUGIN;\n\n const hasTabQuery = tabQuery[selectedTab] && Object.keys(tabQuery[selectedTab]).length;\n\n if (hasTabQuery) {\n setQuery(\n {\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 'push',\n true\n );\n } else {\n setQuery(\n {\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 'push',\n true\n );\n }\n };\n\n const handleSelectChange = (update: Partial<MarketplacePageQuery>) => {\n setQuery({ ...update, page: 1 });\n setTabQuery((prev) => ({\n ...prev,\n [npmPackageType]: { ...prev[npmPackageType], ...update },\n }));\n };\n\n const handleSelectClear = (filterType: FilterTypes) => {\n setQuery({ [filterType]: [], page: undefined }, 'remove');\n setTabQuery((prev) => ({ ...prev, [npmPackageType]: {} }));\n };\n\n const handleSortSelectChange: SortSelectProps['handleSelectChange'] = ({ sort }) =>\n // @ts-expect-error - this is a narrowing issue.\n handleSelectChange({ sort });\n\n // Check if plugins and providers are installed already\n const installedPackageNames = Object.keys(dependencies ?? {});\n\n return (\n <Layouts.Root>\n <Page.Main>\n <Page.Title>\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.head',\n defaultMessage: 'Marketplace - Plugins',\n })}\n </Page.Title>\n <PageHeader isOnline={isOnline} npmPackageType={npmPackageType} />\n <Layouts.Content>\n <Tabs.Root variant=\"simple\" onValueChange={handleTabChange} value={npmPackageType}>\n <Flex justifyContent=\"space-between\" paddingBottom={4}>\n <Tabs.List\n aria-label={formatMessage({\n id: 'admin.pages.MarketPlacePage.tab-group.label',\n defaultMessage: 'Plugins and Providers for Strapi',\n })}\n >\n <Tabs.Trigger value={PLUGIN}>\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.plugins',\n defaultMessage: 'Plugins',\n })}{' '}\n {pluginsResponse ? `(${pluginsResponse.meta.pagination.total})` : '...'}\n </Tabs.Trigger>\n <Tabs.Trigger value={PROVIDER}>\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.providers',\n defaultMessage: 'Providers',\n })}{' '}\n {providersResponse ? `(${providersResponse.meta.pagination.total})` : '...'}\n </Tabs.Trigger>\n </Tabs.List>\n\n <Box width=\"25%\">\n <Searchbar\n name=\"searchbar\"\n onClear={() => setQuery({ search: '', page: 1 })}\n value={query?.search}\n onChange={(e) => setQuery({ search: e.target.value, page: 1 })}\n clearLabel={formatMessage({\n id: 'admin.pages.MarketPlacePage.search.clear',\n defaultMessage: 'Clear the search',\n })}\n placeholder={formatMessage({\n id: 'admin.pages.MarketPlacePage.search.placeholder',\n defaultMessage: 'Search',\n })}\n >\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.search.placeholder',\n defaultMessage: 'Search',\n })}\n </Searchbar>\n </Box>\n </Flex>\n <Flex paddingBottom={4} gap={2}>\n <SortSelect\n sortQuery={query?.sort || 'name:asc'}\n handleSelectChange={handleSortSelectChange}\n />\n <NpmPackagesFilters\n npmPackageType={npmPackageType}\n possibleCollections={possibleCollections}\n possibleCategories={possibleCategories}\n query={query || {}}\n handleSelectChange={handleSelectChange}\n handleSelectClear={handleSelectClear}\n />\n </Flex>\n <Tabs.Content value={PLUGIN}>\n <NpmPackagesGrid\n npmPackages={pluginsResponse?.data}\n status={pluginsStatus}\n installedPackageNames={installedPackageNames}\n useYarn={useYarn}\n isInDevelopmentMode={isInDevelopmentMode}\n npmPackageType=\"plugin\"\n strapiAppVersion={strapiVersion}\n debouncedSearch={debouncedSearch}\n />\n </Tabs.Content>\n <Tabs.Content value={PROVIDER}>\n <NpmPackagesGrid\n npmPackages={providersResponse?.data}\n status={providersStatus}\n installedPackageNames={installedPackageNames}\n useYarn={useYarn}\n isInDevelopmentMode={isInDevelopmentMode}\n npmPackageType=\"provider\"\n debouncedSearch={debouncedSearch}\n />\n </Tabs.Content>\n <Pagination.Root {...pagination} defaultPageSize={24}>\n <Pagination.PageSize options={['12', '24', '50', '100']} />\n <Pagination.Links />\n </Pagination.Root>\n <Box paddingTop={8}>\n <a\n href=\"https://strapi.canny.io/plugin-requests\"\n target=\"_blank\"\n rel=\"noopener noreferrer nofollow\"\n style={{ textDecoration: 'none' }}\n onClick={() => trackUsage('didMissMarketplacePlugin')}\n >\n <ContentBox\n title={formatMessage({\n id: 'admin.pages.MarketPlacePage.missingPlugin.title',\n defaultMessage: 'Documentation',\n })}\n subtitle={formatMessage({\n id: 'admin.pages.MarketPlacePage.missingPlugin.description',\n defaultMessage:\n \"Tell us what plugin you are looking for and we'll let our community plugin developers know in case they are in search for inspiration!\",\n })}\n icon={<GlassesSquare />}\n iconBackground=\"alternative100\"\n endAction={\n <ExternalLink\n fill=\"neutral600\"\n width=\"1.2rem\"\n height=\"1.2rem\"\n style={{ marginLeft: '0.8rem' }}\n />\n }\n />\n </a>\n </Box>\n </Tabs.Root>\n </Layouts.Content>\n </Page.Main>\n </Layouts.Root>\n );\n};\n\nconst ProtectedMarketplacePage = () => {\n const permissions = useTypedSelector((state) => state.admin_app.permissions.marketplace?.main);\n\n return (\n <Page.Protect permissions={permissions}>\n <MarketplacePage />\n </Page.Protect>\n );\n};\n\nexport { MarketplacePage, ProtectedMarketplacePage };\nexport type { NpmPackageType, MarketplacePageQuery, TabQuery };\n"],"names":["PLUGIN","PROVIDER","MarketplacePage","formatMessage","useIntl","trackUsage","useTracking","toggleNotification","useNotification","query","setQuery","useQueryParams","debouncedSearch","useDebounce","search","autoReload","isInDevelopmentMode","dependencies","useYarn","strapiVersion","useAppInfo","state","isOnline","useNavigatorOnline","npmPackageType","tabQuery","setTabQuery","React","useState","plugin","provider","useEffect","type","message","id","defaultMessage","pluginsResponse","providersResponse","pluginsStatus","providersStatus","possibleCollections","possibleCategories","pagination","useMarketplaceData","_jsx","OfflineLayout","handleTabChange","tab","selectedTab","hasTabQuery","Object","keys","length","page","collections","categories","sort","handleSelectChange","update","prev","handleSelectClear","filterType","undefined","handleSortSelectChange","installedPackageNames","Layouts","Root","_jsxs","Page","Main","Title","PageHeader","Content","Tabs","variant","onValueChange","value","Flex","justifyContent","paddingBottom","List","aria-label","Trigger","meta","total","Box","width","Searchbar","name","onClear","onChange","e","target","clearLabel","placeholder","gap","SortSelect","sortQuery","NpmPackagesFilters","NpmPackagesGrid","npmPackages","data","status","strapiAppVersion","Pagination","defaultPageSize","PageSize","options","Links","paddingTop","a","href","rel","style","textDecoration","onClick","ContentBox","title","subtitle","icon","GlassesSquare","iconBackground","endAction","ExternalLink","fill","height","marginLeft","ProtectedMarketplacePage","permissions","useTypedSelector","admin_app","marketplace","main","Protect"],"mappings":"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"}