@strapi/admin 4.2.0-beta.4 → 4.2.2

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 (151) hide show
  1. package/admin/src/app.js +4 -7
  2. package/admin/src/components/OverlayBlocker/index.js +4 -0
  3. package/admin/src/content-manager/components/Wysiwyg/EditorStylesContainer.js +1 -1
  4. package/admin/src/hooks/{useFetchInstalledPlugins → useFetchEnabledPlugins}/index.js +4 -4
  5. package/admin/src/hooks/{useFetchInstalledPlugins → useFetchEnabledPlugins}/utils/api.js +2 -2
  6. package/admin/src/hooks/useFetchMarketplaceProviders/index.js +23 -0
  7. package/admin/src/hooks/useFetchMarketplaceProviders/utils/api.js +11 -0
  8. package/admin/src/pages/Admin/index.js +5 -15
  9. package/admin/src/pages/App/index.js +3 -17
  10. package/admin/src/pages/InstalledPluginsPage/Plugins.js +2 -2
  11. package/admin/src/pages/MarketplacePage/components/{EmptyPluginSearch/EmptyPluginGrid.js → EmptyNpmPackageSearch/EmptyNpmPackageGrid.js} +1 -1
  12. package/admin/src/pages/MarketplacePage/components/{EmptyPluginSearch → EmptyNpmPackageSearch}/index.js +6 -4
  13. package/admin/src/pages/MarketplacePage/components/{PluginCard → NpmPackageCard}/InstallPluginButton.js +0 -0
  14. package/admin/src/pages/MarketplacePage/components/{PluginCard → NpmPackageCard}/index.js +22 -11
  15. package/admin/src/pages/MarketplacePage/components/NpmPackagesGrid/index.js +48 -0
  16. package/admin/src/pages/MarketplacePage/components/PageHeader/index.js +12 -5
  17. package/admin/src/pages/MarketplacePage/index.js +91 -59
  18. package/admin/src/reducers.js +2 -4
  19. package/admin/src/translations/en.json +7 -3
  20. package/admin/src/translations/hi.json +699 -0
  21. package/admin/src/translations/languageNativeNames.js +1 -0
  22. package/admin/src/translations/pl.json +335 -78
  23. package/admin/src/translations/vi.json +17 -17
  24. package/admin/src/translations/zh-Hans.json +28 -1
  25. package/build/1856.6a94980b.chunk.js +172 -0
  26. package/build/2077.5456ccd1.chunk.js +194 -0
  27. package/build/2758.9475712b.chunk.js +162 -0
  28. package/build/2912.dd031292.chunk.js +253 -0
  29. package/build/4715.a6e62860.chunk.js +385 -0
  30. package/build/4982.c57c5675.chunk.js +308 -0
  31. package/build/7197.74d81c4c.chunk.js +113 -0
  32. package/build/{6229.a5cca9f2.chunk.js → 7589.77ef4fbf.chunk.js} +2 -2
  33. package/build/{472.0350a5bd.chunk.js → 7757.f6eb5e92.chunk.js} +58 -58
  34. package/build/7841.9e9cf739.chunk.js +253 -0
  35. package/build/8681.2fd4020a.chunk.js +163 -0
  36. package/build/9066.2847fdff.chunk.js +101 -0
  37. package/build/{4073.e144a91a.chunk.js → 9115.623dc4f7.chunk.js} +1 -1
  38. package/build/9158.c5f772d6.chunk.js +503 -0
  39. package/build/{9298.aff28744.chunk.js → 9298.cb3b6bc1.chunk.js} +93 -93
  40. package/build/9420.ba035f29.chunk.js +508 -0
  41. package/build/Admin-authenticatedApp.2a22d6f4.chunk.js +80 -0
  42. package/build/{Admin_homePage.0ac648e8.chunk.js → Admin_homePage.447df176.chunk.js} +1 -1
  43. package/build/Admin_marketplace.0724f650.chunk.js +11 -0
  44. package/build/Admin_pluginsPage.6f1187fe.chunk.js +1 -0
  45. package/build/{Admin_profilePage.27191ed2.chunk.js → Admin_profilePage.249cbfc9.chunk.js} +2 -2
  46. package/build/Admin_settingsPage.0d138832.chunk.js +180 -0
  47. package/build/{admin-edit-roles-page.fb374555.chunk.js → admin-edit-roles-page.7c2c9752.chunk.js} +1 -1
  48. package/build/admin-edit-users.b835bc48.chunk.js +11 -0
  49. package/build/admin-users.19900b75.chunk.js +12 -0
  50. package/build/{api-tokens-create-page.698f132d.chunk.js → api-tokens-create-page.8d299dde.chunk.js} +1 -1
  51. package/build/{api-tokens-edit-page.afece2fe.chunk.js → api-tokens-edit-page.3e453fc1.chunk.js} +1 -1
  52. package/build/{api-tokens-list-page.46d96dee.chunk.js → api-tokens-list-page.872c3800.chunk.js} +1 -1
  53. package/build/{codemirror-css.b467b1de.chunk.js → codemirror-css.98490df3.chunk.js} +2 -2
  54. package/build/{codemirror-javacript.41bdefda.chunk.js → codemirror-javacript.cafbda9c.chunk.js} +1 -1
  55. package/build/codemirror-theme.b3c64617.chunk.js +34 -0
  56. package/build/{content-manager.7cd28f84.chunk.js → content-manager.18834aa8.chunk.js} +10 -10
  57. package/build/content-type-builder-translation-pl-json.4a42349b.chunk.js +1 -0
  58. package/build/content-type-builder.55dd9554.chunk.js +142 -0
  59. package/build/{cropper-css.ecc0d670.chunk.js → cropper-css.0055cd53.chunk.js} +2 -2
  60. package/build/email-settings-page.1f235173.chunk.js +103 -0
  61. package/build/email-translation-pl-json.a03bcf98.chunk.js +1 -0
  62. package/build/en-json.0a5ba154.chunk.js +1 -0
  63. package/build/{fontawesome-css-all.04f33619.chunk.js → fontawesome-css-all.b88d464e.chunk.js} +3 -3
  64. package/build/{fontawesome-css.477ba714.chunk.js → fontawesome-css.a92a7b6c.chunk.js} +2 -2
  65. package/build/hi-json.b4ae16d1.chunk.js +1 -0
  66. package/build/highlight.js.9d8ef460.chunk.js +86 -0
  67. package/build/i18n-settings-page.06e88cf2.chunk.js +101 -0
  68. package/build/i18n-translation-pl-json.cea5bf23.chunk.js +1 -0
  69. package/build/index.html +1 -1
  70. package/build/main.fcb539e3.js +8406 -0
  71. package/build/pl-json.4d11f53d.chunk.js +1 -0
  72. package/build/runtime~main.ade14a85.js +2 -0
  73. package/build/sso-settings-page.a7c2e854.chunk.js +1 -0
  74. package/build/upload-settings.4ee2f135.chunk.js +101 -0
  75. package/build/upload-translation-pl-json.bb2aa937.chunk.js +1 -0
  76. package/build/upload.0d4153e8.chunk.js +105 -0
  77. package/build/users-advanced-settings-page.583c5dda.chunk.js +101 -0
  78. package/build/users-email-settings-page.8b9a266d.chunk.js +1 -0
  79. package/build/users-permissions-translation-en-json.765abf48.chunk.js +1 -0
  80. package/build/users-permissions-translation-pl-json.1dbdd4a1.chunk.js +1 -0
  81. package/build/users-providers-settings-page.fc9d8f9d.chunk.js +1 -0
  82. package/build/{users-roles-settings-page.988ebc3b.chunk.js → users-roles-settings-page.1bf4ffc5.chunk.js} +2 -2
  83. package/build/vi-json.bf3424be.chunk.js +1 -0
  84. package/build/{webhook-edit-page.a7ae6e3b.chunk.js → webhook-edit-page.142b23ac.chunk.js} +2 -2
  85. package/build/webhook-list-page.671582a0.chunk.js +133 -0
  86. package/build/zh-Hans-json.562f3b6f.chunk.js +1 -0
  87. package/index.js +239 -53
  88. package/package.json +9 -11
  89. package/scripts/build.js +3 -17
  90. package/server/controllers/admin.js +2 -15
  91. package/server/policies/index.js +0 -1
  92. package/server/routes/admin.js +0 -9
  93. package/server/routes/serve-admin-panel.js +1 -1
  94. package/webpack.alias.js +30 -19
  95. package/webpack.config.js +9 -29
  96. package/admin/src/pages/App/constants.js +0 -1
  97. package/admin/src/pages/App/reducer.js +0 -22
  98. package/admin/src/pages/MarketplacePage/utils/api.js +0 -9
  99. package/admin/src/tsconfig.json +0 -10
  100. package/build/1541.6c1c96f9.chunk.js +0 -307
  101. package/build/1856.521a99fd.chunk.js +0 -172
  102. package/build/2077.51485bfb.chunk.js +0 -194
  103. package/build/2912.79c2b3c8.chunk.js +0 -253
  104. package/build/3214.9196aeff.chunk.js +0 -235
  105. package/build/3865.21cec9de.chunk.js +0 -310
  106. package/build/4715.77e04177.chunk.js +0 -385
  107. package/build/4982.f53b78a4.chunk.js +0 -308
  108. package/build/7351.b95e65ae.chunk.js +0 -428
  109. package/build/7418.6db737ce.chunk.js +0 -112
  110. package/build/7841.f0e7d629.chunk.js +0 -253
  111. package/build/8826.58e236d4.chunk.js +0 -1057
  112. package/build/9066.118ecccd.chunk.js +0 -101
  113. package/build/9420.cb0b75e8.chunk.js +0 -508
  114. package/build/9988.f84412d9.chunk.js +0 -162
  115. package/build/Admin-authenticatedApp.162a5805.chunk.js +0 -80
  116. package/build/Admin_marketplace.0bb91ec8.chunk.js +0 -11
  117. package/build/Admin_pluginsPage.788fb2f6.chunk.js +0 -1
  118. package/build/Admin_settingsPage.23e873f0.chunk.js +0 -178
  119. package/build/admin-edit-users.a360deaf.chunk.js +0 -10
  120. package/build/admin-users.47d06d24.chunk.js +0 -11
  121. package/build/codemirror-theme.cf9f9eb6.chunk.js +0 -34
  122. package/build/content-type-builder-translation-pl-json.a866acda.chunk.js +0 -1
  123. package/build/content-type-builder.7456cabe.chunk.js +0 -141
  124. package/build/email-settings-page.f67d13b2.chunk.js +0 -103
  125. package/build/email-translation-pl-json.6da50d0f.chunk.js +0 -1
  126. package/build/en-json.40ee00aa.chunk.js +0 -1
  127. package/build/highlight.js.3381ffc3.chunk.js +0 -86
  128. package/build/i18n-settings-page.6b67cb75.chunk.js +0 -101
  129. package/build/main.b632a0d6.js +0 -11625
  130. package/build/pl-json.94f05d2c.chunk.js +0 -1
  131. package/build/runtime~main.38d418e9.js +0 -2
  132. package/build/sso-settings-page.dfb0b917.chunk.js +0 -1
  133. package/build/upload-settings.3db55de0.chunk.js +0 -101
  134. package/build/upload-translation-pl-json.6071e38c.chunk.js +0 -1
  135. package/build/upload.070c189b.chunk.js +0 -105
  136. package/build/users-advanced-settings-page.a23cda17.chunk.js +0 -101
  137. package/build/users-email-settings-page.0a096388.chunk.js +0 -1
  138. package/build/users-permissions-translation-en-json.3fe86528.chunk.js +0 -1
  139. package/build/users-permissions-translation-pl-json.3c4fe81c.chunk.js +0 -1
  140. package/build/users-providers-settings-page.bfe7755a.chunk.js +0 -1
  141. package/build/vi-json.3d14e91e.chunk.js +0 -1
  142. package/build/webhook-list-page.83297d98.chunk.js +0 -133
  143. package/build/zh-Hans-json.c84ce330.chunk.js +0 -1
  144. package/server/policies/isTelemetryEnabled.js +0 -16
  145. package/utils/create-cache-dir.js +0 -161
  146. package/utils/get-custom-app-config-file.js +0 -23
  147. package/utils/get-custom-webpack-config.js +0 -38
  148. package/utils/get-plugins-path.js +0 -26
  149. package/utils/index.js +0 -13
  150. package/utils/should-build-admin.js +0 -52
  151. package/utils/watch-admin-files.js +0 -59
@@ -1,7 +1,6 @@
1
1
  import React, { useEffect, useRef, useState } from 'react';
2
2
  import { useIntl } from 'react-intl';
3
3
  import { Helmet } from 'react-helmet';
4
- import { useQuery } from 'react-query';
5
4
  import matchSorter from 'match-sorter';
6
5
  import {
7
6
  AnErrorOccurred,
@@ -12,7 +11,6 @@ import {
12
11
  useNotification,
13
12
  useAppInfos,
14
13
  } from '@strapi/helper-plugin';
15
- import { Grid, GridItem } from '@strapi/design-system/Grid';
16
14
  import { Layout, ContentLayout } from '@strapi/design-system/Layout';
17
15
  import { Main } from '@strapi/design-system/Main';
18
16
  import { Searchbar } from '@strapi/design-system/Searchbar';
@@ -20,20 +18,20 @@ import { Box } from '@strapi/design-system/Box';
20
18
  import { useNotifyAT } from '@strapi/design-system/LiveRegions';
21
19
  import { Typography } from '@strapi/design-system/Typography';
22
20
  import { Flex } from '@strapi/design-system/Flex';
21
+ import { Tabs, Tab, TabGroup, TabPanels, TabPanel } from '@strapi/design-system/Tabs';
23
22
 
24
- import PluginCard from './components/PluginCard';
25
- import { EmptyPluginSearch } from './components/EmptyPluginSearch';
23
+ import EmptyNpmPackageSearch from './components/EmptyNpmPackageSearch';
26
24
  import PageHeader from './components/PageHeader';
27
- import { fetchAppInformation } from './utils/api';
28
- import useFetchInstalledPlugins from '../../hooks/useFetchInstalledPlugins';
25
+ import useFetchMarketplaceProviders from '../../hooks/useFetchMarketplaceProviders';
29
26
  import useFetchMarketplacePlugins from '../../hooks/useFetchMarketplacePlugins';
30
27
  import adminPermissions from '../../permissions';
31
28
  import offlineCloud from '../../assets/images/icon_offline-cloud.svg';
32
29
  import useNavigatorOnLine from '../../hooks/useNavigatorOnLine';
33
30
  import MissingPluginBanner from './components/MissingPluginBanner';
31
+ import NpmPackagesGrid from './components/NpmPackagesGrid';
34
32
 
35
- const matchSearch = (plugins, search) => {
36
- return matchSorter(plugins, search, {
33
+ const matchSearch = (npmPackages, search) => {
34
+ return matchSorter(npmPackages, search, {
37
35
  keys: [
38
36
  {
39
37
  threshold: matchSorter.rankings.WORD_STARTS_WITH,
@@ -51,7 +49,8 @@ const MarketPlacePage = () => {
51
49
  const trackUsageRef = useRef(trackUsage);
52
50
  const toggleNotification = useNotification();
53
51
  const [searchQuery, setSearchQuery] = useState('');
54
- const { autoReload: isInDevelopmentMode } = useAppInfos();
52
+ const [npmPackageType, setNpmPackageType] = useState('plugin');
53
+ const { autoReload: isInDevelopmentMode, dependencies, useYarn } = useAppInfos();
55
54
  const isOnline = useNavigatorOnLine();
56
55
 
57
56
  useFocusWhenNavigate();
@@ -79,30 +78,13 @@ const MarketPlacePage = () => {
79
78
  } = useFetchMarketplacePlugins(notifyMarketplaceLoad);
80
79
 
81
80
  const {
82
- status: installedPluginsStatus,
83
- data: installedPluginsResponse,
84
- } = useFetchInstalledPlugins();
81
+ status: marketplaceProvidersStatus,
82
+ data: marketplaceProvidersResponse,
83
+ } = useFetchMarketplaceProviders(notifyMarketplaceLoad);
85
84
 
86
- const { data: appInfoResponse, status: appInfoStatus } = useQuery(
87
- 'app-information',
88
- fetchAppInformation,
89
- {
90
- onError: () => {
91
- toggleNotification({
92
- type: 'warning',
93
- message: { id: 'notification.error', defaultMessage: 'An error occured' },
94
- });
95
- },
96
- }
97
- );
85
+ const isLoading = [marketplacePluginsStatus, marketplaceProvidersStatus].includes('loading');
98
86
 
99
- const isLoading = [marketplacePluginsStatus, installedPluginsStatus, appInfoStatus].includes(
100
- 'loading'
101
- );
102
-
103
- const hasFailed = [marketplacePluginsStatus, installedPluginsStatus, appInfoStatus].includes(
104
- 'error'
105
- );
87
+ const hasFailed = [marketplacePluginsStatus, marketplaceProvidersStatus].includes('error');
106
88
 
107
89
  useEffect(() => {
108
90
  trackUsageRef.current('didGoToMarketplace');
@@ -179,8 +161,24 @@ const MarketPlacePage = () => {
179
161
  );
180
162
  }
181
163
 
182
- const searchResults = matchSearch(marketplacePluginsResponse.data, searchQuery);
183
- const installedPluginNames = installedPluginsResponse.plugins.map(plugin => plugin.packageName);
164
+ // Search for plugins and providers that match the search query
165
+ const pluginSearchResults = matchSearch(marketplacePluginsResponse.data, searchQuery);
166
+ const providerSearchResults = matchSearch(marketplaceProvidersResponse.data, searchQuery);
167
+ const emptySearchMessage = formatMessage(
168
+ {
169
+ id: 'admin.pages.MarketPlacePage.search.empty',
170
+ defaultMessage: 'No result for "{target}"',
171
+ },
172
+ { target: searchQuery }
173
+ );
174
+
175
+ const handleTabChange = selected => {
176
+ const packageType = selected === 0 ? 'plugin' : 'provider';
177
+ setNpmPackageType(packageType);
178
+ };
179
+
180
+ // Check if plugins and providers are installed already
181
+ const installedPackageNames = Object.keys(dependencies);
184
182
 
185
183
  return (
186
184
  <Layout>
@@ -191,7 +189,7 @@ const MarketPlacePage = () => {
191
189
  defaultMessage: 'Marketplace - Plugins',
192
190
  })}
193
191
  />
194
- <PageHeader isOnline={isOnline} />
192
+ <PageHeader isOnline={isOnline} npmPackageType={npmPackageType} />
195
193
  <ContentLayout>
196
194
  <Box width="25%" paddingBottom={4}>
197
195
  <Searchbar
@@ -201,43 +199,77 @@ const MarketPlacePage = () => {
201
199
  onChange={e => setSearchQuery(e.target.value)}
202
200
  clearLabel={formatMessage({
203
201
  id: 'admin.pages.MarketPlacePage.search.clear',
204
- defaultMessage: 'Clear the plugin search',
202
+ defaultMessage: 'Clear the search',
205
203
  })}
206
204
  placeholder={formatMessage({
207
205
  id: 'admin.pages.MarketPlacePage.search.placeholder',
208
- defaultMessage: 'Search for a plugin',
206
+ defaultMessage: 'Search',
209
207
  })}
210
208
  >
211
209
  {formatMessage({
212
210
  id: 'admin.pages.MarketPlacePage.search.placeholder',
213
- defaultMessage: 'Search for a plugin',
211
+ defaultMessage: 'Search',
214
212
  })}
215
213
  </Searchbar>
216
214
  </Box>
217
- {searchQuery.length > 0 && !searchResults.length ? (
218
- <EmptyPluginSearch
219
- content={formatMessage(
220
- {
221
- id: 'admin.pages.MarketPlacePage.search.empty',
222
- defaultMessage: 'No result for "{target}"',
223
- },
224
- { target: searchQuery }
225
- )}
226
- />
227
- ) : (
228
- <Grid gap={4}>
229
- {searchResults.map(plugin => (
230
- <GridItem col={4} s={6} xs={12} style={{ height: '100%' }} key={plugin.id}>
231
- <PluginCard
232
- plugin={plugin}
233
- installedPluginNames={installedPluginNames}
234
- useYarn={appInfoResponse.data.useYarn}
215
+ <TabGroup
216
+ label={formatMessage({
217
+ id: 'admin.pages.MarketPlacePage.tab-group.label',
218
+ defaultMessage: 'Plugins and Providers for Strapi',
219
+ })}
220
+ id="tabs"
221
+ variant="simple"
222
+ onTabChange={handleTabChange}
223
+ >
224
+ <Box paddingBottom={4}>
225
+ <Tabs>
226
+ <Tab>
227
+ {formatMessage({
228
+ id: 'admin.pages.MarketPlacePage.plugins',
229
+ defaultMessage: 'Plugins',
230
+ })}{' '}
231
+ ({pluginSearchResults.length})
232
+ </Tab>
233
+ <Tab>
234
+ {formatMessage({
235
+ id: 'admin.pages.MarketPlacePage.providers',
236
+ defaultMessage: 'Providers',
237
+ })}{' '}
238
+ ({providerSearchResults.length})
239
+ </Tab>
240
+ </Tabs>
241
+ </Box>
242
+ <TabPanels>
243
+ {/* Plugins panel */}
244
+ <TabPanel>
245
+ {searchQuery.length > 0 && !pluginSearchResults.length ? (
246
+ <EmptyNpmPackageSearch content={emptySearchMessage} />
247
+ ) : (
248
+ <NpmPackagesGrid
249
+ npmPackages={pluginSearchResults}
250
+ installedPackageNames={installedPackageNames}
251
+ useYarn={useYarn}
252
+ isInDevelopmentMode={isInDevelopmentMode}
253
+ npmPackageType="plugin"
254
+ />
255
+ )}
256
+ </TabPanel>
257
+ {/* Providers panel */}
258
+ <TabPanel>
259
+ {searchQuery.length > 0 && !providerSearchResults.length ? (
260
+ <EmptyNpmPackageSearch content={emptySearchMessage} />
261
+ ) : (
262
+ <NpmPackagesGrid
263
+ npmPackages={providerSearchResults}
264
+ installedPackageNames={installedPackageNames}
265
+ useYarn={useYarn}
235
266
  isInDevelopmentMode={isInDevelopmentMode}
267
+ npmPackageType="provider"
236
268
  />
237
- </GridItem>
238
- ))}
239
- </Grid>
240
- )}
269
+ )}
270
+ </TabPanel>
271
+ </TabPanels>
272
+ </TabGroup>
241
273
  <Box paddingTop={7}>
242
274
  <MissingPluginBanner />
243
275
  </Box>
@@ -1,13 +1,12 @@
1
- import appReducer from './pages/App/reducer';
2
1
  import rbacProviderReducer from './components/RBACProvider/reducer';
3
- import cmAppReducer from './content-manager/pages/App/reducer';
2
+ import appReducer from './content-manager/pages/App/reducer';
4
3
  import editViewLayoutManagerReducer from './content-manager/pages/EditViewLayoutManager/reducer';
5
4
  import listViewReducer from './content-manager/pages/ListView/reducer';
6
5
  import rbacManagerReducer from './content-manager/hooks/useSyncRbac/reducer';
7
6
  import editViewCrudReducer from './content-manager/sharedReducers/crudReducer/reducer';
8
7
 
9
8
  const contentManagerReducers = {
10
- 'content-manager_app': cmAppReducer,
9
+ 'content-manager_app': appReducer,
11
10
  'content-manager_listView': listViewReducer,
12
11
  'content-manager_rbacManager': rbacManagerReducer,
13
12
  'content-manager_editViewLayoutManager': editViewLayoutManagerReducer,
@@ -15,7 +14,6 @@ const contentManagerReducers = {
15
14
  };
16
15
 
17
16
  const reducers = {
18
- admin_app: appReducer,
19
17
  rbacProvider: rbacProviderReducer,
20
18
  ...contentManagerReducers,
21
19
  };
@@ -232,6 +232,7 @@
232
232
  "admin.pages.MarketPlacePage.helmet": "Marketplace - Plugins",
233
233
  "admin.pages.MarketPlacePage.offline.title": "You are offline",
234
234
  "admin.pages.MarketPlacePage.offline.subtitle": "You need to be connected to the Internet to access Strapi Market.",
235
+ "admin.pages.MarketPlacePage.plugins": "Plugins",
235
236
  "admin.pages.MarketPlacePage.plugin.copy": "Copy install command",
236
237
  "admin.pages.MarketPlacePage.plugin.copy.success": "Install command ready to be pasted in your terminal",
237
238
  "admin.pages.MarketPlacePage.plugin.info": "Learn more",
@@ -240,11 +241,14 @@
240
241
  "admin.pages.MarketPlacePage.plugin.installed": "Installed",
241
242
  "admin.pages.MarketPlacePage.plugin.tooltip.madeByStrapi": "Made by Strapi",
242
243
  "admin.pages.MarketPlacePage.plugin.tooltip.verified": "Plugin verified by Strapi",
243
- "admin.pages.MarketPlacePage.search.clear": "Clear the plugin search",
244
+ "admin.pages.MarketPlacePage.providers": "Providers",
245
+ "admin.pages.MarketPlacePage.search.clear": "Clear the search",
244
246
  "admin.pages.MarketPlacePage.search.empty": "No result for \"{target}\"",
245
- "admin.pages.MarketPlacePage.search.placeholder": "Search for a plugin",
246
- "admin.pages.MarketPlacePage.submit.plugin.link": "Submit your plugin",
247
+ "admin.pages.MarketPlacePage.search.placeholder": "Search",
248
+ "admin.pages.MarketPlacePage.submit.plugin.link": "Submit plugin",
249
+ "admin.pages.MarketPlacePage.submit.provider.link": "Submit provider",
247
250
  "admin.pages.MarketPlacePage.subtitle": "Get more out of Strapi",
251
+ "admin.pages.MarketPlacePage.tab-group.label": "Plugins and Providers for Strapi",
248
252
  "admin.pages.MarketPlacePage.missingPlugin.title": "Missing a plugin?",
249
253
  "admin.pages.MarketPlacePage.missingPlugin.description": "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!",
250
254
  "anErrorOccurred": "Woops! Something went wrong. Please, try again.",