@strapi/admin 4.10.0-beta.1 → 4.10.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 (77) hide show
  1. package/admin/src/content-manager/components/RepeatableComponent/components/Component.js +8 -2
  2. package/admin/src/content-manager/pages/EditSettingsView/components/ModalForm.js +3 -1
  3. package/admin/src/content-manager/pages/EditSettingsView/reducer.js +8 -2
  4. package/admin/src/content-manager/pages/EditViewLayoutManager/reducer.js +4 -4
  5. package/admin/src/content-manager/sharedReducers/crudReducer/actions.js +0 -6
  6. package/admin/src/content-manager/sharedReducers/crudReducer/constants.js +0 -1
  7. package/admin/src/content-manager/sharedReducers/crudReducer/reducer.js +0 -5
  8. package/admin/src/hooks/useFetchPermissionsLayout/index.js +24 -15
  9. package/admin/src/hooks/useFetchRole/index.js +37 -30
  10. package/admin/src/hooks/useModels/index.js +22 -12
  11. package/admin/src/hooks/useSettingsForm/index.js +14 -6
  12. package/admin/src/pages/App/index.js +19 -24
  13. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/PendingLogoDialog.js +1 -3
  14. package/admin/src/pages/SettingsPage/pages/Roles/CreatePage/index.js +6 -12
  15. package/admin/src/pages/SettingsPage/pages/Roles/EditPage/index.js +6 -10
  16. package/admin/src/pages/SettingsPage/pages/Webhooks/EditView/index.js +18 -33
  17. package/admin/src/pages/SettingsPage/pages/Webhooks/ListView/index.js +41 -41
  18. package/admin/src/translations/en.json +1 -1
  19. package/admin/src/translations/fr.json +89 -1
  20. package/build/{Admin-authenticatedApp.52c88751.chunk.js → Admin-authenticatedApp.b036fe95.chunk.js} +2 -2
  21. package/build/{Admin_settingsPage.257b3477.chunk.js → Admin_settingsPage.4604a16c.chunk.js} +1 -1
  22. package/build/admin-app.014adc27.chunk.js +110 -0
  23. package/build/admin-edit-roles-page.8a4063f7.chunk.js +280 -0
  24. package/build/content-manager.84f81966.chunk.js +1130 -0
  25. package/build/{content-type-builder-translation-de-json.0979cccb.chunk.js → content-type-builder-translation-de-json.393a76c0.chunk.js} +1 -1
  26. package/build/{content-type-builder-translation-dk-json.e05583e9.chunk.js → content-type-builder-translation-dk-json.fbd39bb7.chunk.js} +1 -1
  27. package/build/{content-type-builder-translation-en-json.510e88ca.chunk.js → content-type-builder-translation-en-json.446b611d.chunk.js} +1 -1
  28. package/build/{content-type-builder-translation-es-json.fe4daad8.chunk.js → content-type-builder-translation-es-json.9288474b.chunk.js} +1 -1
  29. package/build/{content-type-builder-translation-fr-json.b1eb52f6.chunk.js → content-type-builder-translation-fr-json.d35e269c.chunk.js} +1 -1
  30. package/build/{content-type-builder-translation-id-json.ee3b36bb.chunk.js → content-type-builder-translation-id-json.f0513929.chunk.js} +1 -1
  31. package/build/{content-type-builder-translation-it-json.13b3c26a.chunk.js → content-type-builder-translation-it-json.aaf16753.chunk.js} +1 -1
  32. package/build/{content-type-builder-translation-ko-json.8a274be5.chunk.js → content-type-builder-translation-ko-json.8fe21a7f.chunk.js} +1 -1
  33. package/build/{content-type-builder-translation-ms-json.2d29c1e0.chunk.js → content-type-builder-translation-ms-json.3b5d2d3e.chunk.js} +1 -1
  34. package/build/{content-type-builder-translation-nl-json.40bbc562.chunk.js → content-type-builder-translation-nl-json.225ef5d3.chunk.js} +1 -1
  35. package/build/{content-type-builder-translation-pl-json.24a34349.chunk.js → content-type-builder-translation-pl-json.92f36be2.chunk.js} +1 -1
  36. package/build/{content-type-builder-translation-pt-BR-json.97f71a9d.chunk.js → content-type-builder-translation-pt-BR-json.3bd10f89.chunk.js} +1 -1
  37. package/build/{content-type-builder-translation-ru-json.54d11230.chunk.js → content-type-builder-translation-ru-json.9bfe47ce.chunk.js} +1 -1
  38. package/build/{content-type-builder-translation-sk-json.626c9493.chunk.js → content-type-builder-translation-sk-json.d03cc18a.chunk.js} +1 -1
  39. package/build/{content-type-builder-translation-sv-json.59f5e1e5.chunk.js → content-type-builder-translation-sv-json.d23dcd32.chunk.js} +1 -1
  40. package/build/{content-type-builder-translation-th-json.6fe3ed55.chunk.js → content-type-builder-translation-th-json.7ad256e2.chunk.js} +1 -1
  41. package/build/{content-type-builder-translation-tr-json.cea4d226.chunk.js → content-type-builder-translation-tr-json.926f6191.chunk.js} +1 -1
  42. package/build/{content-type-builder-translation-uk-json.c4524247.chunk.js → content-type-builder-translation-uk-json.7bf19546.chunk.js} +1 -1
  43. package/build/{content-type-builder-translation-zh-json.faedd610.chunk.js → content-type-builder-translation-zh-json.ad24dbeb.chunk.js} +1 -1
  44. package/build/content-type-builder.68af11d2.chunk.js +126 -0
  45. package/build/en-json.c7fc79af.chunk.js +1 -0
  46. package/build/fr-json.5947cf63.chunk.js +1 -0
  47. package/build/i18n-settings-page.d95b32df.chunk.js +60 -0
  48. package/build/index.html +1 -1
  49. package/build/{main.120be100.js → main.841e0dcb.js} +194 -194
  50. package/build/{review-workflows-settings.9092ed72.chunk.js → review-workflows-settings.f7890c40.chunk.js} +1 -1
  51. package/build/{runtime~main.112b3101.js → runtime~main.965f8af8.js} +2 -2
  52. package/build/users-roles-settings-page.20656f92.chunk.js +30 -0
  53. package/build/webhook-edit-page.a3b62049.chunk.js +75 -0
  54. package/build/webhook-list-page.ca38eeef.chunk.js +71 -0
  55. package/ee/admin/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/getTableColumn.js +3 -1
  56. package/ee/admin/content-manager/pages/EditView/InformationBox/InformationBoxEE.js +7 -4
  57. package/ee/admin/hooks/useAuthProviders/index.js +28 -29
  58. package/ee/admin/pages/AuthResponse/index.js +7 -3
  59. package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/ReviewWorkflows.js +1 -1
  60. package/ee/server/controllers/authentication/middlewares.js +2 -1
  61. package/ee/server/services/index.js +1 -0
  62. package/ee/server/services/review-workflows/metrics.js +24 -0
  63. package/ee/server/services/review-workflows/review-workflows.js +25 -11
  64. package/ee/server/services/review-workflows/stages.js +28 -10
  65. package/ee/server/utils/persisted-tables.js +7 -5
  66. package/package.json +10 -10
  67. package/server/strategies/api-token.js +8 -1
  68. package/build/admin-app.dfaeea5d.chunk.js +0 -110
  69. package/build/admin-edit-roles-page.4f1858e9.chunk.js +0 -280
  70. package/build/content-manager.def692c2.chunk.js +0 -1130
  71. package/build/content-type-builder.5e1f4afc.chunk.js +0 -126
  72. package/build/en-json.08303b37.chunk.js +0 -1
  73. package/build/fr-json.f66c3211.chunk.js +0 -1
  74. package/build/i18n-settings-page.7d80aae0.chunk.js +0 -60
  75. package/build/users-roles-settings-page.2f85dcec.chunk.js +0 -30
  76. package/build/webhook-edit-page.213f0075.chunk.js +0 -75
  77. package/build/webhook-list-page.5beb2a5c.chunk.js +0 -71
@@ -9,7 +9,7 @@ import React, { useEffect, useReducer, useRef, useState } from 'react';
9
9
  import { useHistory, useLocation } from 'react-router-dom';
10
10
  import { useIntl } from 'react-intl';
11
11
  import {
12
- request,
12
+ useFetchClient,
13
13
  useRBAC,
14
14
  LoadingIndicatorPage,
15
15
  useNotification,
@@ -63,6 +63,8 @@ const ListView = () => {
63
63
  );
64
64
  const { notifyStatus } = useNotifyAT();
65
65
 
66
+ const { get, del, post, put } = useFetchClient();
67
+
66
68
  useFocusWhenNavigate();
67
69
  const { push } = useHistory();
68
70
  const { pathname } = useLocation();
@@ -78,42 +80,45 @@ const ListView = () => {
78
80
  };
79
81
  }, []);
80
82
 
83
+ /**
84
+ * TODO: refactor this, but actually refactor
85
+ * the whole component. Needs some love.
86
+ */
81
87
  useEffect(() => {
82
- if (canRead) {
83
- fetchWebHooks();
84
- }
85
- // eslint-disable-next-line react-hooks/exhaustive-deps
86
- }, [canRead]);
88
+ const fetchWebHooks = async () => {
89
+ try {
90
+ const {
91
+ data: { data },
92
+ } = await get('/admin/webhooks');
87
93
 
88
- const fetchWebHooks = async () => {
89
- try {
90
- const { data } = await request('/admin/webhooks', {
91
- method: 'GET',
92
- });
93
-
94
- if (isMounted.current) {
95
- dispatch({
96
- type: 'GET_DATA_SUCCEEDED',
97
- data,
98
- });
99
- notifyStatus('webhooks have been loaded');
100
- }
101
- } catch (err) {
102
- console.log(err);
94
+ if (isMounted.current) {
95
+ dispatch({
96
+ type: 'GET_DATA_SUCCEEDED',
97
+ data,
98
+ });
99
+ notifyStatus('webhooks have been loaded');
100
+ }
101
+ } catch (err) {
102
+ console.log(err);
103
103
 
104
- if (isMounted.current) {
105
- if (err.code !== 20) {
106
- toggleNotification({
107
- type: 'warning',
108
- message: { id: 'notification.error' },
104
+ if (isMounted.current) {
105
+ if (err.code !== 20) {
106
+ toggleNotification({
107
+ type: 'warning',
108
+ message: { id: 'notification.error' },
109
+ });
110
+ }
111
+ dispatch({
112
+ type: 'TOGGLE_LOADING',
109
113
  });
110
114
  }
111
- dispatch({
112
- type: 'TOGGLE_LOADING',
113
- });
114
115
  }
116
+ };
117
+
118
+ if (canRead) {
119
+ fetchWebHooks();
115
120
  }
116
- };
121
+ }, [canRead, get, notifyStatus, toggleNotification]);
117
122
 
118
123
  const handleToggleModal = () => {
119
124
  setShowModal((prev) => !prev);
@@ -129,15 +134,16 @@ const ListView = () => {
129
134
 
130
135
  const handleConfirmDeleteOne = async () => {
131
136
  try {
132
- await request(`/admin/webhooks/${webhookToDelete}`, {
133
- method: 'DELETE',
134
- });
137
+ await del(`/admin/webhooks/${webhookToDelete}`);
135
138
 
136
139
  dispatch({
137
140
  type: 'WEBHOOK_DELETED',
138
141
  index: getWebhookIndex(webhookToDelete),
139
142
  });
140
143
  } catch (err) {
144
+ /**
145
+ * TODO: especially this.
146
+ */
141
147
  if (err.code !== 20) {
142
148
  toggleNotification({
143
149
  type: 'warning',
@@ -154,10 +160,7 @@ const ListView = () => {
154
160
  };
155
161
 
156
162
  try {
157
- await request('/admin/webhooks/batch-delete', {
158
- method: 'POST',
159
- body,
160
- });
163
+ await post('/admin/webhooks/batch-delete', body);
161
164
 
162
165
  if (isMounted.current) {
163
166
  dispatch({
@@ -207,10 +210,7 @@ const ListView = () => {
207
210
  value,
208
211
  });
209
212
 
210
- await request(`/admin/webhooks/${id}`, {
211
- method: 'PUT',
212
- body,
213
- });
213
+ await put(`/admin/webhooks/${id}`, body);
214
214
  } catch (err) {
215
215
  if (isMounted.current) {
216
216
  dispatch({
@@ -222,7 +222,7 @@
222
222
  "Settings.review-workflows.page.title": "Review Workflows",
223
223
  "Settings.review-workflows.page.subtitle": "{count, plural, one {# stage} other {# stages}}",
224
224
  "Settings.review-workflows.page.isLoading": "Workflow is loading",
225
- "Settings.review-workflows.page.delete.confirm.body": "All entries assigned to deleted stages will be moved to the first stage. Are you sure you want to save this?",
225
+ "Settings.review-workflows.page.delete.confirm.body": "All entries assigned to deleted stages will be moved to the previous stage. Are you sure you want to save?",
226
226
  "Settings.review-workflows.stage.name.label": "Stage name",
227
227
  "Settings.roles.create.description": "Define the rights given to the role",
228
228
  "Settings.roles.create.title": "Create a role",
@@ -3,6 +3,7 @@
3
3
  "Auth.components.Oops.text": "Votre compte a été suspendu.",
4
4
  "Auth.components.Oops.text.admin": "Si c'est une erreur, veuillez contacter votre administrateur.",
5
5
  "Auth.components.Oops.title": "Oups !",
6
+ "Auth.form.active.label": "Actif",
6
7
  "Auth.form.button.forgot-password": "Envoyer à nouveau",
7
8
  "Auth.form.button.go-home": "Retour à l'accueil",
8
9
  "Auth.form.button.login": "Se connecter",
@@ -54,6 +55,7 @@
54
55
  "Auth.login.sso.subtitle": "Vous connecter via SSO",
55
56
  "Auth.privacy-policy-agreement.policy": "la politique de confidentialité",
56
57
  "Auth.privacy-policy-agreement.terms": "termes",
58
+ "Auth.reset-password.title": "Réinitialiser le mot de passe",
57
59
  "Content Manager": "Content Manager",
58
60
  "Content Type Builder": "Content Types Builder",
59
61
  "Documentation": "Documentation",
@@ -74,22 +76,95 @@
74
76
  "Roles.ListPage.notification.delete-all-not-allowed": "Certains rôles n'ont pas pu être supprimés car ils sont associés à des utilisateurs.",
75
77
  "Roles.ListPage.notification.delete-not-allowed": "Un rôle ne peu pas être supprimé s'il est associé à des utilisateurs.",
76
78
  "Roles.RoleRow.select-all": "Sélectionner {name} pour action groupée",
79
+ "Roles.RoleRow.user-count": "{number, plural, =0 {# utilisateur} one {# utilisateur} other {# utilisateurs}}",
77
80
  "Roles.components.List.empty.withSearch": "Il n'y a pas de rôles correspondant à la recherche ({search})...",
78
81
  "Settings.PageTitle": "Réglages - {name}",
82
+ "Settings.apiTokens.ListView.headers.createdAt": "Créé le",
83
+ "Settings.apiTokens.ListView.headers.description": "Description",
84
+ "Settings.apiTokens.ListView.headers.lastUsedAt": "Dernière utilisation le",
85
+ "Settings.apiTokens.ListView.headers.name": "Nom",
86
+ "Settings.apiTokens.ListView.headers.type": "Type de jeton",
87
+ "Settings.apiTokens.regenerate": "Régénérer",
88
+ "Settings.apiTokens.createPage.title": "Créer un jeton d'API",
89
+ "Settings.transferTokens.createPage.title": "Créer un jeton de transfert",
90
+ "Settings.tokens.RegenerateDialog.title": "Régénérer le jeton",
79
91
  "Settings.apiTokens.addFirstToken": "Ajouter votre premier jeton d'API",
80
92
  "Settings.apiTokens.addNewToken": "Ajouter un nouveau jeton d'API",
81
93
  "Settings.tokens.copy.editMessage": "Pour des raisons de sécurité, vous ne pouvoir voir votre jeton qu'une seule fois",
82
94
  "Settings.tokens.copy.editTitle": "Ce jeton n'est désormais plus accessible",
83
95
  "Settings.tokens.copy.lastWarning": "Assurez-vous de copier ce jeton, vous ne pourrez plus le revoir par la suite !",
84
96
  "Settings.apiTokens.create": "Ajouter une entrée",
97
+ "Settings.apiTokens.createPage.permissions.description": "Seules les actions rattachées à une route sont listées ci-dessous.",
98
+ "Settings.apiTokens.createPage.permissions.title": "Permissions",
85
99
  "Settings.apiTokens.description": "Liste des jetons générés pour consommer l'API",
100
+ "Settings.apiTokens.createPage.BoundRoute.title": "Route rattachée à",
101
+ "Settings.apiTokens.createPage.permissions.header.title": "Paramètres avancés",
102
+ "Settings.apiTokens.createPage.permissions.header.hint": "Sélectionner les actions de l'application ou du plugin et sur l'icône de la roue crantée pour afficher la route rattachée",
103
+ "Settings.tokens.duration.30-days": "30 jours",
104
+ "Settings.tokens.duration.7-days": "7 jours",
105
+ "Settings.tokens.duration.90-days": "90 jours",
106
+ "Settings.tokens.duration.expiration-date": "Date d'expiration",
107
+ "Settings.tokens.duration.unlimited": "Illimité",
86
108
  "Settings.apiTokens.emptyStateLayout": "Vous n'avez pas encore de contenu...",
109
+ "Settings.tokens.form.duration": "Durée de vie du jeton",
110
+ "Settings.tokens.form.type": "Type de jeton",
111
+ "Settings.tokens.form.name": "Nom",
112
+ "Settings.tokens.form.description": "Description",
87
113
  "Settings.tokens.notification.copied": "Jeton copié dans le press-papiers.",
88
- "Settings.apiTokens.title": "Jetons d'API",
114
+ "Settings.tokens.popUpWarning.message": "Êtes-vous sûr(e) de vouloir régénérer ce jeton ?",
115
+ "Settings.tokens.Button.cancel": "Annuler",
116
+ "Settings.tokens.Button.regenerate": "Régénérer",
89
117
  "Settings.tokens.types.full-access": "Accès total",
90
118
  "Settings.tokens.types.read-only": "Lecture seule",
119
+ "Settings.tokens.types.custom": "Custom",
120
+ "Settings.tokens.regenerate": "Régénérer",
121
+ "Settings.transferTokens.title": "Jetons de transfert",
122
+ "Settings.transferTokens.description": "Liste des jetons de transfert générés",
123
+ "Settings.transferTokens.create": "Créer un nouveau jeton de transfert",
124
+ "Settings.transferTokens.addFirstToken": "Ajouter votre premier jeton de transfert",
125
+ "Settings.transferTokens.addNewToken": "Ajouter un nouveau jeton de transfert",
126
+ "Settings.transferTokens.emptyStateLayout": "Vous n'avez aucun contenu pour le moment...",
127
+ "Settings.tokens.ListView.headers.name": "Nom",
128
+ "Settings.tokens.ListView.headers.description": "Description",
129
+ "Settings.transferTokens.ListView.headers.type": "Type de jeton",
130
+ "Settings.tokens.ListView.headers.createdAt": "Créé le",
131
+ "Settings.tokens.ListView.headers.lastUsedAt": "Dernière utilisation",
132
+ "Settings.application.ee.admin-seats.count": "<text>{enforcementUserCount}</text>/{permittedSeats}",
133
+ "Settings.application.ee.admin-seats.at-limit-tooltip": "Limite atteinte : ajouter des places pour inviter d'autres utilisateurs",
134
+ "Settings.application.ee.admin-seats.add-seats": "{isHostedOnStrapiCloud, select, true {AJouter des places} other {Contacter le service clients}}",
135
+ "Settings.application.customization": "Customisation",
136
+ "Settings.application.customization.auth-logo.carousel-hint": "Remplacer le logo dans la page de connexion",
137
+ "Settings.application.customization.carousel-hint": "Changer le logo dans l'interface d'administration (dimensions maximales: {dimension}x{dimension}, poids maximal du fichier : {size}KB)",
138
+ "Settings.application.customization.carousel-slide.label": "Logo slide",
139
+ "Settings.application.customization.carousel.auth-logo.title": "Logo de connexion",
140
+ "Settings.application.customization.carousel.change-action": "Changer le logo",
141
+ "Settings.application.customization.carousel.menu-logo.title": "Logo du menu",
142
+ "Settings.application.customization.carousel.reset-action": "Réinitialiser le logo",
143
+ "Settings.application.customization.carousel.title": "Logo",
144
+ "Settings.application.customization.menu-logo.carousel-hint": "Remplacer le logo dans la navigation principale",
145
+ "Settings.application.customization.modal.cancel": "Annuler",
146
+ "Settings.application.customization.modal.pending": "Téléchargement du logo",
147
+ "Settings.application.customization.modal.pending.card-badge": "image",
148
+ "Settings.application.customization.modal.pending.choose-another": "Choisir un autre logo",
149
+ "Settings.application.customization.modal.pending.subtitle": "Gérer le logo choisi avant de le télécharger",
150
+ "Settings.application.customization.modal.pending.title": "Logo prêt pour le téléchargement",
151
+ "Settings.application.customization.modal.pending.upload": "Téléchargement du logo",
152
+ "Settings.application.customization.modal.tab.label": "Comment voulez-vous télécharger vos medias ?",
153
+ "Settings.application.customization.modal.upload": "Télécharger le logo",
154
+ "Settings.application.customization.modal.upload.cta.browse": "Explorer les fichiers",
155
+ "Settings.application.customization.modal.upload.drag-drop": "Glisser-déposer ici ou",
156
+ "Settings.application.customization.modal.upload.error-format": "Mauvais format chargé (formats acceptés : jpeg, jpg, png, svg).",
157
+ "Settings.application.customization.modal.upload.error-network": "Erreur réseau",
158
+ "Settings.application.customization.modal.upload.error-size": "Le fichier téléchargé est trop grand (dimensions max : {dimension}x{dimension}, poids max: {size}KB)",
159
+ "Settings.application.customization.modal.upload.file-validation": "Dimensions maximales : {dimension}x{dimension}, poids maximal : {size}KB",
160
+ "Settings.application.customization.modal.upload.from-computer": "Depuis l'ordinateur",
161
+ "Settings.application.customization.modal.upload.from-url": "Depuis une URL",
162
+ "Settings.application.customization.modal.upload.from-url.input-label": "URL",
163
+ "Settings.application.customization.modal.upload.next": "Suivant",
164
+ "Settings.application.customization.size-details": "Dimensions maximales : {dimension}×{dimension}, poids maximal : {size}KB",
91
165
  "Settings.application.description": "Informations globales du panneau d'administration",
92
166
  "Settings.application.edition-title": "plan actuel",
167
+ "Settings.application.ee-or-ce": "{communityEdition, select, true {Édition Communauté} other {Édition Entreprise}}",
93
168
  "Settings.application.get-help": "Obtenir de l'aide",
94
169
  "Settings.application.link-pricing": "Voir tous les tarifs",
95
170
  "Settings.application.link-upgrade": "Mettez à niveau votre panneau d'administration",
@@ -566,6 +641,14 @@
566
641
  "content-manager.plugin.description.long": "Visualisez, modifiez et supprimez les données de votre base de données.",
567
642
  "content-manager.plugin.description.short": "Visualisez, modifiez et supprimez les données de votre base de données.",
568
643
  "content-manager.popover.display-relations.label": "Afficher les relations",
644
+ "content-manager.relation.add": "Ajouter une relation",
645
+ "content-manager.relation.disconnect": "Supprimer",
646
+ "content-manager.relation.isLoading": "Chargement des relations en cours",
647
+ "content-manager.relation.loadMore": "Charger davantage",
648
+ "content-manager.relation.notAvailable": "Aucune relation disponible",
649
+ "content-manager.relation.publicationState.draft": "Brouillon",
650
+ "content-manager.relation.publicationState.published": "Publiée",
651
+ "content-manager.select.currently.selected": "{count} actuellement sélectionnées",
569
652
  "content-manager.success.record.delete": "Supprimé",
570
653
  "content-manager.success.record.publish": "Publié",
571
654
  "content-manager.success.record.save": "Sauvegardé",
@@ -575,9 +658,11 @@
575
658
  "content-manager.popUpWarning.warning.publish-question": "Êtes-vous sûr de vouloir le publier ?",
576
659
  "content-manager.popUpwarning.warning.has-draft-relations.button-confirm": "Oui, publier",
577
660
  "content-manager.popUpwarning.warning.has-draft-relations.message": "<b>{count, plural, =0 { des relations de votre contenu n'est} one { des relations de votre contenu n'est} other { des relations de votre contenu ne sont}}</b> pas publié actuellement.<br></br>Cela peut engendrer des liens cassés ou des erreurs dans votre projet.",
661
+ "dark": "Sombre",
578
662
  "form.button.continue": "Continuer",
579
663
  "global.search": "Rechercher",
580
664
  "global.actions": "Actions",
665
+ "global.auditLogs": "Journaux d'audit",
581
666
  "global.back": "Retour",
582
667
  "global.cancel": "Annuler",
583
668
  "global.change-password": "Modifier le mot de passe",
@@ -606,6 +691,7 @@
606
691
  "global.settings": "Paramètres",
607
692
  "global.type": "Type",
608
693
  "global.users": "Utilisateurs",
694
+ "light": "Clair",
609
695
  "form.button.done": "Terminer",
610
696
  "global.prompt.unsaved": "Êtes-vous sûr de vouloir quitter cette page? Toutes vos modifications seront perdues",
611
697
  "notification.contentType.relations.conflict": "Le Type de Contenu à des relations qui rentrent en conflit",
@@ -621,8 +707,10 @@
621
707
  "notification.success.title": "Succès :",
622
708
  "notification.version.update.message": "Une nouvelle version de Strapi est disponible !",
623
709
  "notification.warning.title": "Attention :",
710
+ "notification.warning.404": "404 - Introuvable",
624
711
  "or": "OU",
625
712
  "request.error.model.unknown": "Le model n'existe pas",
713
+ "selectButtonTitle": "Sélectionner",
626
714
  "skipToContent": "Aller au contenu",
627
715
  "submit": "Soumettre"
628
716
  }
@@ -1,4 +1,4 @@
1
- "use strict";(self.webpackChunk_strapi_admin=self.webpackChunk_strapi_admin||[]).push([[801],{29761:function(Q,S,n){n.r(S),n.d(S,{default:function(){return Kt}});var e=n(32735),s=n(43383),O=n(20108),C=n(33795),b=n.n(C),I=JSON.parse('{"i8":"4.10.0-beta.1"}'),T=n(67927),f=n(53038),y=n(15062),N=n(74506),$=n(51968),z=n(88311),se=n.n(z),xe=n(58107),M=n(8471),be=n(60216),r=n.n(be),B=n(67879),m=n(87933),re=n(71933),V=n(67563),De=n(50563),P=n(72850),H=n(41415),ie=n(35331);const ke=(0,M.ZP)(m.k)`
1
+ "use strict";(self.webpackChunk_strapi_admin=self.webpackChunk_strapi_admin||[]).push([[801],{29761:function(Q,S,n){n.r(S),n.d(S,{default:function(){return Kt}});var e=n(32735),s=n(43383),O=n(20108),C=n(33795),b=n.n(C),I={i8:"4.10.0"},T=n(67927),f=n(53038),y=n(15062),N=n(74506),$=n(51968),z=n(88311),se=n.n(z),xe=n(58107),M=n(8471),be=n(60216),r=n.n(be),B=n(67879),m=n(87933),re=n(71933),V=n(67563),De=n(50563),P=n(72850),H=n(41415),ie=n(35331);const ke=(0,M.ZP)(m.k)`
2
2
  position: fixed;
3
3
  z-index: 4;
4
4
  inset: 0;
@@ -76,4 +76,4 @@
76
76
  :hover {
77
77
  text-decoration: underline;
78
78
  }
79
- `;var Tt=()=>{const t=(0,e.useRef)(),[a,o]=(0,e.useState)(!1),{formatMessage:i}=(0,B.Z)(),{communityEdition:p}=(0,s.QI)(),d=()=>{o(u=>!u)},h=[...ft,{label:{id:"Settings.application.get-help",defaultMessage:"Get help"},icon:ct.Z,href:p?"https://discord.strapi.io":"https://support.strapi.io/support/home"}];return e.createElement(P.x,{as:"aside",position:"fixed",bottom:2,right:2},e.createElement(Et,{"aria-label":i(a?{id:"app.components.Onboarding.help.button-close",defaultMessage:"Close help menu"}:{id:"app.components.Onboarding.help.button",defaultMessage:"Open help menu"}),onClick:d,ref:t},e.createElement(_.J,{as:a?ie.Z:dt.Z,color:"buttonNeutral0"})),a&&e.createElement(re.h,null,e.createElement(it.M.Content,{padding:0,source:t,placement:"top-end",spacing:12},e.createElement(V.i,{onEscape:d},e.createElement(m.k,{justifyContent:"space-between",paddingBottom:5,paddingRight:6,paddingLeft:6,paddingTop:6},e.createElement(Ce,{fontWeight:"bold"},i({id:"app.components.Onboarding.title",defaultMessage:"Get started videos"})),e.createElement(Te,{as:"a",href:ve.href,target:"_blank",rel:"noreferrer noopener",variant:"pi",textColor:"primary600"},i(ve.label))),e.createElement(ge.i,null),ht.map(({href:u,duration:g,label:c},v)=>e.createElement(vt,{as:"a",href:u,target:"_blank",rel:"noreferrer noopener",key:u,hasRadius:!0,paddingTop:4,paddingBottom:4,paddingLeft:6,paddingRight:11},e.createElement(P.x,{paddingRight:5},e.createElement(E.Z,{textColor:"neutral200",variant:"alpha"},v+1)),e.createElement(P.x,{position:"relative"},e.createElement(Ct,{src:pt,alt:""}),e.createElement(yt,{position:"absolute",top:"50%",left:"50%",background:"primary600",borderRadius:"50%",justifyContent:"center",width:6,height:6},e.createElement(_.J,{as:ut.Z,color:"buttonNeutral0",width:3,height:3}))),e.createElement(m.k,{direction:"column",alignItems:"start",paddingLeft:4},e.createElement(E.Z,{fontWeight:"bold"},i(c)),e.createElement(lt.T,null,":"),e.createElement(E.Z,{textColor:"neutral600",variant:"pi"},g)))),e.createElement(m.k,{direction:"column",alignItems:"stretch",gap:2,paddingLeft:5,paddingTop:2,paddingBottom:5},h.map(({label:u,href:g,icon:c})=>e.createElement(m.k,{gap:3,key:g},e.createElement(_.J,{as:c,color:"primary600"}),e.createElement(Te,{as:"a",href:g,target:"_blank",rel:"noreferrer noopener",variant:"sigma",textColor:"primary700"},i(u)))))))))};const Mt=(0,e.lazy)(()=>Promise.all([n.e(462),n.e(1657),n.e(994)]).then(n.bind(n,99546))),Pt=(0,e.lazy)(()=>n.e(3981).then(n.bind(n,55129))),St=(0,e.lazy)(()=>n.e(3677).then(n.bind(n,15415))),It=(0,e.lazy)(()=>n.e(5516).then(n.bind(n,84538))),Me=(0,e.lazy)(()=>Promise.resolve().then(n.bind(n,53951))),Rt=(0,e.lazy)(()=>n.e(9501).then(n.bind(n,92336))),At=(0,e.lazy)(()=>n.e(9497).then(n.bind(n,9972))),Pe=(0,e.lazy)(()=>n.e(5895).then(n.bind(n,74750))),Ot=()=>{const{trackUsage:t}=(0,s.rS)(),a=(0,y.I0)(),o=(0,y.v9)(i=>i.admin_app.status);(0,e.useEffect)(()=>{o==="init"&&(t("didAccessAuthenticatedAdministration"),a({type:rt.e}))},[o])};var Lt=()=>{Ot();const{isLoading:t,generalSectionLinks:a,pluginsSectionLinks:o}=(0,T.H9)(),{menu:i}=(0,s.j1)(),{showTutorials:p}=(0,T.um)(),d=(0,e.useMemo)(()=>i.filter(h=>h.Component).map(({to:h,Component:u,exact:g})=>(0,q.ot)(u,h,g)),[i]);return t?e.createElement(s.dO,null):e.createElement(N.DndProvider,{backend:$.PD},e.createElement(st,{sideNav:e.createElement(nt,{generalSectionLinks:a,pluginsSectionLinks:o})},e.createElement(e.Suspense,{fallback:e.createElement(s.dO,null)},e.createElement(f.rs,null,e.createElement(f.AW,{path:"/",component:Pt,exact:!0}),e.createElement(f.AW,{path:"/me",component:At,exact:!0}),e.createElement(f.AW,{path:"/content-manager",component:Mt}),d,e.createElement(f.AW,{path:"/settings/:settingId",component:Pe}),e.createElement(f.AW,{path:"/settings",component:Pe,exact:!0}),e.createElement(f.AW,{path:"/marketplace"},e.createElement(It,null)),e.createElement(f.AW,{path:"/list-plugins",exact:!0},e.createElement(St,null)),e.createElement(f.AW,{path:"/404",component:Me}),e.createElement(f.AW,{path:"/500",component:Rt}),e.createElement(f.AW,{path:"",component:Me}))),e.createElement(Ve,null),p&&e.createElement(Tt,null)))},xt=t=>({plugins:Object.keys(t).reduce((a,o)=>(a[o]={...t[o]},a),{})}),bt=n(3040),Dt=n.n(bt);const Se={plugins:null};var kt=(t=Se,a)=>(0,ce.ZP)(t,o=>{switch(a.type){case"SET_PLUGIN_READY":{Dt()(o,["plugins",a.pluginId,"isReady"],!0);break}default:return o}}),Zt=()=>{const{plugins:t}=(0,s.j1)(),[{plugins:a},o]=(0,e.useReducer)(kt,Se,()=>xt(t)),i=(0,e.useRef)(d=>{o({type:"SET_PLUGIN_READY",pluginId:d})});if(Object.keys(a).some(d=>a[d].isReady===!1)){const d=Object.keys(a).reduce((h,u)=>{const g=a[u].initializer;if(g){const c=a[u].pluginId;h.push(e.createElement(g,{key:c,setPlugin:i.current}))}return h},[]);return e.createElement(e.Fragment,null,d,e.createElement(s.dO,null))}return e.createElement(Lt,null)},Ie=n(17367);const Bt=()=>({type:Ie.l}),Wt=t=>({type:Ie.m,permissions:t}),Re=({children:t,permissions:a,refetchPermissions:o})=>{const{allPermissions:i}=(0,y.v9)(d=>d.rbacProvider),p=(0,y.I0)();return(0,e.useEffect)(()=>(p(Wt(a)),()=>{p(Bt())}),[a,p]),i?e.createElement(s.oL.Provider,{value:{allPermissions:i,refetchPermissions:o}},t):e.createElement(s.dO,null)};Re.propTypes={children:r().element.isRequired,permissions:r().array.isRequired,refetchPermissions:r().func.isRequired};var Gt=Re,Nt=n(84306),Ut=n(54770),ee=n.n(Ut),Ae=(t,a)=>!ee().valid(t)||!ee().valid(a)?!1:ee().lt(t,a);const Oe=I.i8,Ft=!JSON.parse(localStorage.getItem("STRAPI_UPDATE_NOTIF")),{get:te}=(0,s.tg)(),jt=async t=>{try{const{data:{tag_name:a}}=await Nt.Z.get("https://api.github.com/repos/strapi/strapi/releases/latest");return Ae(Oe,a)&&Ft&&t({type:"info",message:{id:"notification.version.update.message"},link:{url:`https://github.com/strapi/strapi/releases/tag/${a}`,label:{id:"global.see-more"}},blockTransition:!0,onClose:()=>localStorage.setItem("STRAPI_UPDATE_NOTIF",!0)}),a}catch{return Oe}},Qt=async()=>{try{const{data:t,headers:a}=await te("/admin/information");if(!a["content-type"].includes("application/json"))throw new Error("Not found");return t.data}catch(t){throw new Error(t)}},$t=async()=>{try{const{data:t,headers:a}=await te("/admin/users/me/permissions");if(!a["content-type"].includes("application/json"))throw new Error("Not found");return t.data}catch(t){throw new Error(t)}},zt=async()=>{try{const{data:{data:{roles:t}}}=await te("/admin/users/me");return t}catch(t){throw new Error(t)}},Le=I.i8;var Kt=()=>{const{setGuidedTourVisibility:t}=(0,s.c1)(),a=(0,s.lm)(),o=(0,e.useRef)(t),i=s.I8.getUserInfo(),p=b()(i,"username")||(0,q.Pp)(i.firstname,i.lastname),[d,h]=(0,e.useState)(p),[u,g]=(0,e.useState)(null),{showReleaseNotification:c}=(0,T.um)(),[{data:v,status:D},{data:L,isLoading:F},{data:G,status:R,refetch:j,isFetched:k,isFetching:x},{data:A}]=(0,O.useQueries)([{queryKey:"app-infos",queryFn:Qt},{queryKey:"strapi-release",queryFn:()=>jt(a),enabled:c,initialData:Le},{queryKey:"admin-users-permission",queryFn:$t,initialData:[]},{queryKey:"user-roles",queryFn:zt}]),l=(0,e.useMemo)(()=>Ae(Le,L),[L]);(0,e.useEffect)(()=>{A&&A.find(({code:oe})=>oe==="strapi-super-admin")&&v?.autoReload&&o.current(!0)},[A,v]),(0,e.useEffect)(()=>{(async()=>{const oe=await(0,q.Qy)(i);g(oe)})()},[i]);const K=F||(x&&k||D==="loading"||R==="loading"),ne=(0,e.useMemo)(()=>({...v,userId:u,latestStrapiReleaseTag:L,setUserDisplayName:h,shouldUpdateStrapi:l,userDisplayName:d}),[v,L,l,d,u]);return K?e.createElement(s.dO,null):D==="error"?e.createElement("div",null,"error..."):e.createElement(s.NY.Provider,{value:ne},e.createElement(Gt,{permissions:G,refetchPermissions:j},e.createElement(Zt,null)))}},78024:function(Q,S,n){var e=n(32735),s=n(60216),O=n.n(s),C=n(43383),b=n(72850),I=n(23678);const T=({type:f,...y})=>e.createElement(b.x,{width:(0,C.Q1)(2),height:"100%",background:f===I.VM?"neutral300":"primary500",hasRadius:!0,...y});T.defaultProps={type:I.VM},T.propTypes={type:O().oneOf([I.lW,I.hx,I.VM])},S.Z=T},14317:function(Q,S,n){var e=n(32735),s=n(60216),O=n.n(s),C=n(43383),b=n(87933),I=n(99140),T=n(49372),f=n(66456),y=n(23678);const N=({type:$,number:z})=>$===y.hx?e.createElement(b.k,{background:"primary600",padding:2,borderRadius:"50%",width:(0,C.Q1)(30),height:(0,C.Q1)(30),justifyContent:"center"},e.createElement(I.J,{as:f.Z,"aria-hidden":!0,width:(0,C.Q1)(16),color:"neutral0"})):$===y.lW?e.createElement(b.k,{background:"primary600",padding:2,borderRadius:"50%",width:(0,C.Q1)(30),height:(0,C.Q1)(30),justifyContent:"center"},e.createElement(T.Z,{fontWeight:"semiBold",textColor:"neutral0"},z)):e.createElement(b.k,{borderColor:"neutral500",borderWidth:"1px",borderStyle:"solid",padding:2,borderRadius:"50%",width:(0,C.Q1)(30),height:(0,C.Q1)(30),justifyContent:"center"},e.createElement(T.Z,{fontWeight:"semiBold",textColor:"neutral600"},z));N.defaultProps={number:void 0,type:y.VM},N.propTypes={number:O().number,type:O().oneOf([y.lW,y.hx,y.VM])},S.Z=N},23678:function(Q,S,n){n.d(S,{VM:function(){return O},hx:function(){return s},lW:function(){return e}});const e="isActive",s="isDone",O="isNotDone"},58107:function(Q,S){const n={contentTypeBuilder:{home:{title:{id:"app.components.GuidedTour.home.CTB.title",defaultMessage:"\u{1F9E0} Build the content structure"},cta:{title:{id:"app.components.GuidedTour.home.CTB.cta.title",defaultMessage:"Go to the Content type Builder"},type:"REDIRECT",target:"/plugins/content-type-builder"},trackingEvent:"didClickGuidedTourHomepageContentTypeBuilder"},create:{title:{id:"app.components.GuidedTour.CTB.create.title",defaultMessage:"\u{1F9E0} Create a first Collection type"},content:{id:"app.components.GuidedTour.CTB.create.content",defaultMessage:"<p>Collection types help you manage several entries, Single types are suitable to manage only one entry.</p> <p>Ex: For a Blog website, Articles would be a Collection type whereas a Homepage would be a Single type.</p>"},cta:{title:{id:"app.components.GuidedTour.CTB.create.cta.title",defaultMessage:"Build a Collection type"},type:"CLOSE"},trackingEvent:"didClickGuidedTourStep1CollectionType"},success:{title:{id:"app.components.GuidedTour.CTB.success.title",defaultMessage:"Step 1: Completed \u2705"},content:{id:"app.components.GuidedTour.CTB.success.content",defaultMessage:"<p>Good going!</p><b>\u26A1\uFE0F What would you like to share with the world?</b>"},cta:{title:{id:"app.components.GuidedTour.create-content",defaultMessage:"Create content"},type:"REDIRECT",target:"/content-manager"},trackingEvent:"didCreateGuidedTourCollectionType"}},contentManager:{home:{title:{id:"app.components.GuidedTour.home.CM.title",defaultMessage:"\u26A1\uFE0F What would you like to share with the world?"},cta:{title:{id:"app.components.GuidedTour.create-content",defaultMessage:"Create content"},type:"REDIRECT",target:"/content-manager"},trackingEvent:"didClickGuidedTourHomepageContentManager"},create:{title:{id:"app.components.GuidedTour.CM.create.title",defaultMessage:"\u26A1\uFE0F Create content"},content:{id:"app.components.GuidedTour.CM.create.content",defaultMessage:"<p>Create and manage all the content here in the Content Manager.</p><p>Ex: Taking the Blog website example further, one can write an Article, save and publish it as they like.</p><p>\u{1F4A1} Quick tip - Don't forget to hit publish on the content you create.</p>"},cta:{title:{id:"app.components.GuidedTour.create-content",defaultMessage:"Create content"},type:"CLOSE"},trackingEvent:"didClickGuidedTourStep2ContentManager"},success:{title:{id:"app.components.GuidedTour.CM.success.title",defaultMessage:"Step 2: Completed \u2705"},content:{id:"app.components.GuidedTour.CM.success.content",defaultMessage:"<p>Awesome, one last step to go!</p><b>\u{1F680} See content in action</b>"},cta:{title:{id:"app.components.GuidedTour.CM.success.cta.title",defaultMessage:"Test the API"},type:"REDIRECT",target:"/settings/api-tokens"},trackingEvent:"didCreateGuidedTourEntry"}},apiTokens:{home:{title:{id:"app.components.GuidedTour.apiTokens.create.title",defaultMessage:"\u{1F680} See content in action"},cta:{title:{id:"app.components.GuidedTour.home.apiTokens.cta.title",defaultMessage:"Test the API"},type:"REDIRECT",target:"/settings/api-tokens"},trackingEvent:"didClickGuidedTourHomepageApiTokens"},create:{title:{id:"app.components.GuidedTour.apiTokens.create.title",defaultMessage:"\u{1F680} See content in action"},content:{id:"app.components.GuidedTour.apiTokens.create.content",defaultMessage:"<p>Generate an authentication token here and retrieve the content you just created.</p>"},cta:{title:{id:"app.components.GuidedTour.apiTokens.create.cta.title",defaultMessage:"Generate an API Token"},type:"CLOSE"},trackingEvent:"didClickGuidedTourStep3ApiTokens"},success:{title:{id:"app.components.GuidedTour.apiTokens.success.title",defaultMessage:"Step 3: Completed \u2705"},content:{id:"app.components.GuidedTour.apiTokens.success.content",defaultMessage:"<p>See content in action by making an HTTP request:</p><ul><li><p>To this URL: <light>https://'<'YOUR_DOMAIN'>'/api/'<'YOUR_CT'>'</light></p></li><li><p>With the header: <light>Authorization: bearer '<'YOUR_API_TOKEN'>'</light></p></li></ul><p>For more ways to interact with content, see the <documentationLink>documentation</documentationLink>.</p>"},trackingEvent:"didGenerateGuidedTourApiTokens"}}};S.Z=n}}]);
79
+ `;var Tt=()=>{const t=(0,e.useRef)(),[a,o]=(0,e.useState)(!1),{formatMessage:i}=(0,B.Z)(),{communityEdition:p}=(0,s.QI)(),d=()=>{o(u=>!u)},h=[...ft,{label:{id:"Settings.application.get-help",defaultMessage:"Get help"},icon:ct.Z,href:p?"https://discord.strapi.io":"https://support.strapi.io/support/home"}];return e.createElement(P.x,{as:"aside",position:"fixed",bottom:2,right:2},e.createElement(Et,{"aria-label":i(a?{id:"app.components.Onboarding.help.button-close",defaultMessage:"Close help menu"}:{id:"app.components.Onboarding.help.button",defaultMessage:"Open help menu"}),onClick:d,ref:t},e.createElement(_.J,{as:a?ie.Z:dt.Z,color:"buttonNeutral0"})),a&&e.createElement(re.h,null,e.createElement(it.M.Content,{padding:0,source:t,placement:"top-end",spacing:12},e.createElement(V.i,{onEscape:d},e.createElement(m.k,{justifyContent:"space-between",paddingBottom:5,paddingRight:6,paddingLeft:6,paddingTop:6},e.createElement(Ce,{fontWeight:"bold"},i({id:"app.components.Onboarding.title",defaultMessage:"Get started videos"})),e.createElement(Te,{as:"a",href:ve.href,target:"_blank",rel:"noreferrer noopener",variant:"pi",textColor:"primary600"},i(ve.label))),e.createElement(ge.i,null),ht.map(({href:u,duration:g,label:c},v)=>e.createElement(vt,{as:"a",href:u,target:"_blank",rel:"noreferrer noopener",key:u,hasRadius:!0,paddingTop:4,paddingBottom:4,paddingLeft:6,paddingRight:11},e.createElement(P.x,{paddingRight:5},e.createElement(E.Z,{textColor:"neutral200",variant:"alpha"},v+1)),e.createElement(P.x,{position:"relative"},e.createElement(Ct,{src:pt,alt:""}),e.createElement(yt,{position:"absolute",top:"50%",left:"50%",background:"primary600",borderRadius:"50%",justifyContent:"center",width:6,height:6},e.createElement(_.J,{as:ut.Z,color:"buttonNeutral0",width:3,height:3}))),e.createElement(m.k,{direction:"column",alignItems:"start",paddingLeft:4},e.createElement(E.Z,{fontWeight:"bold"},i(c)),e.createElement(lt.T,null,":"),e.createElement(E.Z,{textColor:"neutral600",variant:"pi"},g)))),e.createElement(m.k,{direction:"column",alignItems:"stretch",gap:2,paddingLeft:5,paddingTop:2,paddingBottom:5},h.map(({label:u,href:g,icon:c})=>e.createElement(m.k,{gap:3,key:g},e.createElement(_.J,{as:c,color:"primary600"}),e.createElement(Te,{as:"a",href:g,target:"_blank",rel:"noreferrer noopener",variant:"sigma",textColor:"primary700"},i(u)))))))))};const Mt=(0,e.lazy)(()=>Promise.all([n.e(462),n.e(1657),n.e(994)]).then(n.bind(n,25970))),Pt=(0,e.lazy)(()=>n.e(3981).then(n.bind(n,55129))),St=(0,e.lazy)(()=>n.e(3677).then(n.bind(n,15415))),It=(0,e.lazy)(()=>n.e(5516).then(n.bind(n,84538))),Me=(0,e.lazy)(()=>Promise.resolve().then(n.bind(n,53951))),Rt=(0,e.lazy)(()=>n.e(9501).then(n.bind(n,92336))),At=(0,e.lazy)(()=>n.e(9497).then(n.bind(n,9972))),Pe=(0,e.lazy)(()=>n.e(5895).then(n.bind(n,74750))),Ot=()=>{const{trackUsage:t}=(0,s.rS)(),a=(0,y.I0)(),o=(0,y.v9)(i=>i.admin_app.status);(0,e.useEffect)(()=>{o==="init"&&(t("didAccessAuthenticatedAdministration"),a({type:rt.e}))},[o])};var Lt=()=>{Ot();const{isLoading:t,generalSectionLinks:a,pluginsSectionLinks:o}=(0,T.H9)(),{menu:i}=(0,s.j1)(),{showTutorials:p}=(0,T.um)(),d=(0,e.useMemo)(()=>i.filter(h=>h.Component).map(({to:h,Component:u,exact:g})=>(0,q.ot)(u,h,g)),[i]);return t?e.createElement(s.dO,null):e.createElement(N.DndProvider,{backend:$.PD},e.createElement(st,{sideNav:e.createElement(nt,{generalSectionLinks:a,pluginsSectionLinks:o})},e.createElement(e.Suspense,{fallback:e.createElement(s.dO,null)},e.createElement(f.rs,null,e.createElement(f.AW,{path:"/",component:Pt,exact:!0}),e.createElement(f.AW,{path:"/me",component:At,exact:!0}),e.createElement(f.AW,{path:"/content-manager",component:Mt}),d,e.createElement(f.AW,{path:"/settings/:settingId",component:Pe}),e.createElement(f.AW,{path:"/settings",component:Pe,exact:!0}),e.createElement(f.AW,{path:"/marketplace"},e.createElement(It,null)),e.createElement(f.AW,{path:"/list-plugins",exact:!0},e.createElement(St,null)),e.createElement(f.AW,{path:"/404",component:Me}),e.createElement(f.AW,{path:"/500",component:Rt}),e.createElement(f.AW,{path:"",component:Me}))),e.createElement(Ve,null),p&&e.createElement(Tt,null)))},xt=t=>({plugins:Object.keys(t).reduce((a,o)=>(a[o]={...t[o]},a),{})}),bt=n(3040),Dt=n.n(bt);const Se={plugins:null};var kt=(t=Se,a)=>(0,ce.ZP)(t,o=>{switch(a.type){case"SET_PLUGIN_READY":{Dt()(o,["plugins",a.pluginId,"isReady"],!0);break}default:return o}}),Zt=()=>{const{plugins:t}=(0,s.j1)(),[{plugins:a},o]=(0,e.useReducer)(kt,Se,()=>xt(t)),i=(0,e.useRef)(d=>{o({type:"SET_PLUGIN_READY",pluginId:d})});if(Object.keys(a).some(d=>a[d].isReady===!1)){const d=Object.keys(a).reduce((h,u)=>{const g=a[u].initializer;if(g){const c=a[u].pluginId;h.push(e.createElement(g,{key:c,setPlugin:i.current}))}return h},[]);return e.createElement(e.Fragment,null,d,e.createElement(s.dO,null))}return e.createElement(Lt,null)},Ie=n(17367);const Bt=()=>({type:Ie.l}),Wt=t=>({type:Ie.m,permissions:t}),Re=({children:t,permissions:a,refetchPermissions:o})=>{const{allPermissions:i}=(0,y.v9)(d=>d.rbacProvider),p=(0,y.I0)();return(0,e.useEffect)(()=>(p(Wt(a)),()=>{p(Bt())}),[a,p]),i?e.createElement(s.oL.Provider,{value:{allPermissions:i,refetchPermissions:o}},t):e.createElement(s.dO,null)};Re.propTypes={children:r().element.isRequired,permissions:r().array.isRequired,refetchPermissions:r().func.isRequired};var Gt=Re,Nt=n(84306),Ut=n(54770),ee=n.n(Ut),Ae=(t,a)=>!ee().valid(t)||!ee().valid(a)?!1:ee().lt(t,a);const Oe=I.i8,Ft=!JSON.parse(localStorage.getItem("STRAPI_UPDATE_NOTIF")),{get:te}=(0,s.tg)(),jt=async t=>{try{const{data:{tag_name:a}}=await Nt.Z.get("https://api.github.com/repos/strapi/strapi/releases/latest");return Ae(Oe,a)&&Ft&&t({type:"info",message:{id:"notification.version.update.message"},link:{url:`https://github.com/strapi/strapi/releases/tag/${a}`,label:{id:"global.see-more"}},blockTransition:!0,onClose:()=>localStorage.setItem("STRAPI_UPDATE_NOTIF",!0)}),a}catch{return Oe}},Qt=async()=>{try{const{data:t,headers:a}=await te("/admin/information");if(!a["content-type"].includes("application/json"))throw new Error("Not found");return t.data}catch(t){throw new Error(t)}},$t=async()=>{try{const{data:t,headers:a}=await te("/admin/users/me/permissions");if(!a["content-type"].includes("application/json"))throw new Error("Not found");return t.data}catch(t){throw new Error(t)}},zt=async()=>{try{const{data:{data:{roles:t}}}=await te("/admin/users/me");return t}catch(t){throw new Error(t)}},Le=I.i8;var Kt=()=>{const{setGuidedTourVisibility:t}=(0,s.c1)(),a=(0,s.lm)(),o=(0,e.useRef)(t),i=s.I8.getUserInfo(),p=b()(i,"username")||(0,q.Pp)(i.firstname,i.lastname),[d,h]=(0,e.useState)(p),[u,g]=(0,e.useState)(null),{showReleaseNotification:c}=(0,T.um)(),[{data:v,status:D},{data:L,isLoading:F},{data:G,status:R,refetch:j,isFetched:k,isFetching:x},{data:A}]=(0,O.useQueries)([{queryKey:"app-infos",queryFn:Qt},{queryKey:"strapi-release",queryFn:()=>jt(a),enabled:c,initialData:Le},{queryKey:"admin-users-permission",queryFn:$t,initialData:[]},{queryKey:"user-roles",queryFn:zt}]),l=(0,e.useMemo)(()=>Ae(Le,L),[L]);(0,e.useEffect)(()=>{A&&A.find(({code:oe})=>oe==="strapi-super-admin")&&v?.autoReload&&o.current(!0)},[A,v]),(0,e.useEffect)(()=>{(async()=>{const oe=await(0,q.Qy)(i);g(oe)})()},[i]);const K=F||(x&&k||D==="loading"||R==="loading"),ne=(0,e.useMemo)(()=>({...v,userId:u,latestStrapiReleaseTag:L,setUserDisplayName:h,shouldUpdateStrapi:l,userDisplayName:d}),[v,L,l,d,u]);return K?e.createElement(s.dO,null):D==="error"?e.createElement("div",null,"error..."):e.createElement(s.NY.Provider,{value:ne},e.createElement(Gt,{permissions:G,refetchPermissions:j},e.createElement(Zt,null)))}},78024:function(Q,S,n){var e=n(32735),s=n(60216),O=n.n(s),C=n(43383),b=n(72850),I=n(23678);const T=({type:f,...y})=>e.createElement(b.x,{width:(0,C.Q1)(2),height:"100%",background:f===I.VM?"neutral300":"primary500",hasRadius:!0,...y});T.defaultProps={type:I.VM},T.propTypes={type:O().oneOf([I.lW,I.hx,I.VM])},S.Z=T},14317:function(Q,S,n){var e=n(32735),s=n(60216),O=n.n(s),C=n(43383),b=n(87933),I=n(99140),T=n(49372),f=n(66456),y=n(23678);const N=({type:$,number:z})=>$===y.hx?e.createElement(b.k,{background:"primary600",padding:2,borderRadius:"50%",width:(0,C.Q1)(30),height:(0,C.Q1)(30),justifyContent:"center"},e.createElement(I.J,{as:f.Z,"aria-hidden":!0,width:(0,C.Q1)(16),color:"neutral0"})):$===y.lW?e.createElement(b.k,{background:"primary600",padding:2,borderRadius:"50%",width:(0,C.Q1)(30),height:(0,C.Q1)(30),justifyContent:"center"},e.createElement(T.Z,{fontWeight:"semiBold",textColor:"neutral0"},z)):e.createElement(b.k,{borderColor:"neutral500",borderWidth:"1px",borderStyle:"solid",padding:2,borderRadius:"50%",width:(0,C.Q1)(30),height:(0,C.Q1)(30),justifyContent:"center"},e.createElement(T.Z,{fontWeight:"semiBold",textColor:"neutral600"},z));N.defaultProps={number:void 0,type:y.VM},N.propTypes={number:O().number,type:O().oneOf([y.lW,y.hx,y.VM])},S.Z=N},23678:function(Q,S,n){n.d(S,{VM:function(){return O},hx:function(){return s},lW:function(){return e}});const e="isActive",s="isDone",O="isNotDone"},58107:function(Q,S){const n={contentTypeBuilder:{home:{title:{id:"app.components.GuidedTour.home.CTB.title",defaultMessage:"\u{1F9E0} Build the content structure"},cta:{title:{id:"app.components.GuidedTour.home.CTB.cta.title",defaultMessage:"Go to the Content type Builder"},type:"REDIRECT",target:"/plugins/content-type-builder"},trackingEvent:"didClickGuidedTourHomepageContentTypeBuilder"},create:{title:{id:"app.components.GuidedTour.CTB.create.title",defaultMessage:"\u{1F9E0} Create a first Collection type"},content:{id:"app.components.GuidedTour.CTB.create.content",defaultMessage:"<p>Collection types help you manage several entries, Single types are suitable to manage only one entry.</p> <p>Ex: For a Blog website, Articles would be a Collection type whereas a Homepage would be a Single type.</p>"},cta:{title:{id:"app.components.GuidedTour.CTB.create.cta.title",defaultMessage:"Build a Collection type"},type:"CLOSE"},trackingEvent:"didClickGuidedTourStep1CollectionType"},success:{title:{id:"app.components.GuidedTour.CTB.success.title",defaultMessage:"Step 1: Completed \u2705"},content:{id:"app.components.GuidedTour.CTB.success.content",defaultMessage:"<p>Good going!</p><b>\u26A1\uFE0F What would you like to share with the world?</b>"},cta:{title:{id:"app.components.GuidedTour.create-content",defaultMessage:"Create content"},type:"REDIRECT",target:"/content-manager"},trackingEvent:"didCreateGuidedTourCollectionType"}},contentManager:{home:{title:{id:"app.components.GuidedTour.home.CM.title",defaultMessage:"\u26A1\uFE0F What would you like to share with the world?"},cta:{title:{id:"app.components.GuidedTour.create-content",defaultMessage:"Create content"},type:"REDIRECT",target:"/content-manager"},trackingEvent:"didClickGuidedTourHomepageContentManager"},create:{title:{id:"app.components.GuidedTour.CM.create.title",defaultMessage:"\u26A1\uFE0F Create content"},content:{id:"app.components.GuidedTour.CM.create.content",defaultMessage:"<p>Create and manage all the content here in the Content Manager.</p><p>Ex: Taking the Blog website example further, one can write an Article, save and publish it as they like.</p><p>\u{1F4A1} Quick tip - Don't forget to hit publish on the content you create.</p>"},cta:{title:{id:"app.components.GuidedTour.create-content",defaultMessage:"Create content"},type:"CLOSE"},trackingEvent:"didClickGuidedTourStep2ContentManager"},success:{title:{id:"app.components.GuidedTour.CM.success.title",defaultMessage:"Step 2: Completed \u2705"},content:{id:"app.components.GuidedTour.CM.success.content",defaultMessage:"<p>Awesome, one last step to go!</p><b>\u{1F680} See content in action</b>"},cta:{title:{id:"app.components.GuidedTour.CM.success.cta.title",defaultMessage:"Test the API"},type:"REDIRECT",target:"/settings/api-tokens"},trackingEvent:"didCreateGuidedTourEntry"}},apiTokens:{home:{title:{id:"app.components.GuidedTour.apiTokens.create.title",defaultMessage:"\u{1F680} See content in action"},cta:{title:{id:"app.components.GuidedTour.home.apiTokens.cta.title",defaultMessage:"Test the API"},type:"REDIRECT",target:"/settings/api-tokens"},trackingEvent:"didClickGuidedTourHomepageApiTokens"},create:{title:{id:"app.components.GuidedTour.apiTokens.create.title",defaultMessage:"\u{1F680} See content in action"},content:{id:"app.components.GuidedTour.apiTokens.create.content",defaultMessage:"<p>Generate an authentication token here and retrieve the content you just created.</p>"},cta:{title:{id:"app.components.GuidedTour.apiTokens.create.cta.title",defaultMessage:"Generate an API Token"},type:"CLOSE"},trackingEvent:"didClickGuidedTourStep3ApiTokens"},success:{title:{id:"app.components.GuidedTour.apiTokens.success.title",defaultMessage:"Step 3: Completed \u2705"},content:{id:"app.components.GuidedTour.apiTokens.success.content",defaultMessage:"<p>See content in action by making an HTTP request:</p><ul><li><p>To this URL: <light>https://'<'YOUR_DOMAIN'>'/api/'<'YOUR_CT'>'</light></p></li><li><p>With the header: <light>Authorization: bearer '<'YOUR_API_TOKEN'>'</light></p></li></ul><p>For more ways to interact with content, see the <documentationLink>documentation</documentationLink>.</p>"},trackingEvent:"didGenerateGuidedTourApiTokens"}}};S.Z=n}}]);
@@ -6,7 +6,7 @@
6
6
  left: 0;
7
7
  right: 0;
8
8
  z-index: 1;
9
- `,it=({setLocalImage:a,goTo:n,next:s,onClose:l})=>{const{formatMessage:u}=(0,d.Z)(),[v,R]=(0,e.useState)(!1),[C,f]=(0,e.useState)(void 0),m=(0,e.useRef)(null),B=()=>R(!0),L=()=>R(!1),W=Q=>{Q.preventDefault(),m.current.click()},Z=async()=>{L();const Q=m.current.files[0];if(Q)try{const N=await vt(Q);a(N),n(s)}catch(N){if(N.displayMessage)f(u(N.displayMessage,{size:$,dimension:G})),m.current.focus();else throw N}},b=()=>v?"primary500":C?"danger600":"neutral300";return e.createElement(e.Fragment,null,e.createElement("form",null,e.createElement(A.x,{paddingLeft:8,paddingRight:8,paddingTop:6,paddingBottom:6},e.createElement(Bt.g,{name:"logo-upload",error:C},e.createElement("label",{htmlFor:"logo-upload"},e.createElement(M.k,{direction:"column",alignItems:"stretch",gap:2},e.createElement(M.k,{paddingTop:9,paddingBottom:7,hasRadius:!0,justifyContent:"center",direction:"column",background:v?"primary100":"neutral100",borderColor:b(),borderStyle:"dashed",borderWidth:"1px",position:"relative",onDragEnter:B,onDragLeave:L},e.createElement(Ut.J,{color:"primary600",width:`${60/16}rem`,height:`${60/16}rem`,as:Zt.Z,"aria-hidden":!0}),e.createElement(A.x,{paddingTop:3,paddingBottom:5},e.createElement(c.Z,{variant:"delta",as:"span"},u({id:"Settings.application.customization.modal.upload.drag-drop",defaultMessage:"Drag and Drop here or"}))),e.createElement($t,{accept:X,cursor:"pointer",as:"input",type:"file",name:"files",tabIndex:-1,zIndex:1,onChange:Z,ref:m,id:"logo-upload"}),e.createElement(T.z,{type:"button",onClick:W},u({id:"Settings.application.customization.modal.upload.cta.browse",defaultMessage:"Browse files"})),e.createElement(A.x,{paddingTop:6},e.createElement(c.Z,{variant:"pi",textColor:"neutral600"},u({id:"Settings.application.customization.modal.upload.file-validation",defaultMessage:"Max dimension: {dimension}x{dimension}, Max size: {size}KB"},{size:$,dimension:G})))),e.createElement(zt.c,null)))))),e.createElement(lt.m,{startActions:e.createElement(T.z,{onClick:l,variant:"tertiary"},u({id:"Settings.application.customization.modal.cancel",defaultMessage:"Cancel"}))}))};it.defaultProps={next:null},it.propTypes={goTo:o().func.isRequired,next:o().string,onClose:o().func.isRequired,setLocalImage:o().func.isRequired};var jt=it,Nt=t(10369),Gt=t(84306),bt=async a=>{try{const n=await Gt.Z.get(a,{responseType:"blob",timeout:8e3});return new File([n.data],n.config.url,{type:n.headers["content-type"]})}catch(n){throw n.displayMessage={id:"Settings.application.customization.modal.upload.error-network",defaultMessage:"Network error"},n}};const rt=({goTo:a,next:n,onClose:s,setLocalImage:l})=>{const{formatMessage:u}=(0,d.Z)(),[v,R]=(0,e.useState)(""),[C,f]=(0,e.useState)(null),m=L=>{R(L.target.value)},B=async()=>{try{const L=await bt(v),W=await vt(L);l(W),a(n)}catch(L){if(L.displayMessage)f(u(L.displayMessage,{size:$,dimension:G}));else throw L}};return e.createElement("form",{onSubmit:L=>{L.preventDefault(),B()}},e.createElement(A.x,{paddingLeft:8,paddingRight:8,paddingTop:6,paddingBottom:6},e.createElement(Nt.o,{label:u({id:"Settings.application.customization.modal.upload.from-url.input-label",defaultMessage:"URL"}),error:C,onChange:m,value:v,name:"logo-url"})),e.createElement(lt.m,{startActions:e.createElement(T.z,{onClick:s,variant:"tertiary"},u({id:"app.components.Button.cancel",defaultMessage:"Cancel"})),endActions:e.createElement(T.z,{type:"submit"},u({id:"Settings.application.customization.modal.upload.next",defaultMessage:"Next"}))}))};rt.defaultProps={next:null},rt.propTypes={goTo:o().func.isRequired,next:o().string,onClose:o().func.isRequired,setLocalImage:o().func.isRequired};var Ht=rt;const dt=({setLocalImage:a,goTo:n,next:s,onClose:l})=>{const{formatMessage:u}=(0,d.Z)();return e.createElement(Ot.v,{label:u({id:"Settings.application.customization.modal.tab.label",defaultMessage:"How do you want to upload your assets?"}),variant:"simple"},e.createElement(A.x,{paddingLeft:8,paddingRight:8},e.createElement(ot.m,null,e.createElement(ot.O,null,u({id:"Settings.application.customization.modal.upload.from-computer",defaultMessage:"From computer"})),e.createElement(ot.O,null,u({id:"Settings.application.customization.modal.upload.from-url",defaultMessage:"From url"}))),e.createElement(It.i,null)),e.createElement(st.n,null,e.createElement(st.x,null,e.createElement(jt,{onClose:l,setLocalImage:a,goTo:n,next:s})),e.createElement(st.x,null,e.createElement(Ht,{onClose:l,setLocalImage:a,goTo:n,next:s}))))};dt.defaultProps={next:null},dt.propTypes={goTo:o().func.isRequired,next:o().string,onClose:o().func.isRequired,setLocalImage:o().func.isRequired};var Vt=dt,Qt=t(42466),Jt=t(20853),Xt=t(2800),Yt=t(26835),wt=t(41048),Ct=t(37083),kt=t(11505);const Mt=({asset:a})=>{const{formatMessage:n}=(0,d.Z)();return e.createElement(Qt.Z,null,e.createElement(Jt.O,null,e.createElement(Xt.H,{size:"S",src:a.url})),e.createElement(Yt.e,null,e.createElement(wt.a,null,e.createElement(Ct.l,null,a.name),e.createElement(Ct._,null,`${a.ext.toUpperCase()} - ${a.width}\u2715${a.height}`)),e.createElement(kt.E,null,n({id:"Settings.application.customization.modal.pending.card-badge",defaultMessage:"image"}))))};Mt.propTypes={asset:o().shape({name:o().string,url:o().string,width:o().number,height:o().number,ext:o().string}).isRequired};var qt=Mt;const ct=({onClose:a,asset:n,prev:s,next:l,goTo:u,setLocalImage:v,onChangeLogo:R})=>{const{formatMessage:C}=(0,d.Z)(),f=()=>{v(void 0),u(s)},m=()=>{R(n),u(l)};return e.createElement(e.Fragment,null,e.createElement(A.x,{paddingLeft:8,paddingRight:8,paddingTop:6,paddingBottom:6},e.createElement(M.k,{justifyContent:"space-between",paddingBottom:6},e.createElement(M.k,{direction:"column",alignItems:"flex-start"},e.createElement(c.Z,{variant:"pi",fontWeight:"bold"},C({id:"Settings.application.customization.modal.pending.title",defaultMessage:"Logo ready to upload"})),e.createElement(c.Z,{variant:"pi",textColor:"neutral500"},C({id:"Settings.application.customization.modal.pending.subtitle",defaultMessage:"Manage the chosen logo before uploading it"}))),e.createElement(T.z,{onClick:f,variant:"secondary"},C({id:"Settings.application.customization.modal.pending.choose-another",defaultMessage:"Choose another logo"}))),e.createElement(A.x,{maxWidth:(0,i.Q1)(180)},e.createElement(qt,{asset:n}))),e.createElement(lt.m,{startActions:e.createElement(T.z,{onClick:a,variant:"tertiary"},C({id:"Settings.application.customization.modal.cancel",defaultMessage:"Cancel"})),endActions:e.createElement(T.z,{onClick:m},C({id:"Settings.application.customization.modal.pending.upload",defaultMessage:"Upload logo"}))}))};ct.defaultProps={next:null,prev:null},ct.propTypes={goTo:o().func.isRequired,asset:o().shape({name:o().string,url:o().string,width:o().number,height:o().number,ext:o().string}).isRequired,next:o().string,onClose:o().func.isRequired,onChangeLogo:o().func.isRequired,prev:o().string,setLocalImage:o().func.isRequired};var _t=ct,te={upload:{Component:Vt,modalTitle:{id:"Settings.application.customization.modal.upload",defaultMessage:"Upload logo"},next:"pending",prev:null},pending:{Component:_t,modalTitle:{id:"Settings.application.customization.modal.pending",defaultMessage:"Pending logo"},next:null,prev:"upload"}};const mt=({canUpdate:a,customLogo:n,defaultLogo:s,hint:l,label:u,onChangeLogo:v,onResetLogo:R})=>{const[{currentStep:C},f]=(0,e.useReducer)(Pt,ft),{Component:m,next:B,prev:L,modalTitle:W}=te[C]||{},{formatMessage:Z}=(0,d.Z)(),b=Q=>{f({type:"GO_TO",to:Q})};return e.createElement(e.Fragment,null,e.createElement(w.F,{label:u,selectedSlide:0,hint:l,previousLabel:"",nextLabel:"",onNext:()=>{},onPrevious:()=>{},secondaryLabel:n?.name||"logo.png",actions:e.createElement(q.b,null,e.createElement(J.h,{disabled:!a,onClick:()=>b(n?"pending":"upload"),label:Z({id:"Settings.application.customization.carousel.change-action",defaultMessage:"Change logo"}),icon:e.createElement(_.Z,null)}),n&&e.createElement(J.h,{disabled:!a,onClick:R,label:Z({id:"Settings.application.customization.carousel.reset-action",defaultMessage:"Reset logo"}),icon:e.createElement(tt.Z,null)}))},e.createElement(Y.q,{label:Z({id:"Settings.application.customization.carousel-slide.label",defaultMessage:"Logo slide"})},e.createElement(A.x,{maxHeight:"40%",maxWidth:"40%",as:"img",src:n?.url||s,alt:Z({id:"Settings.application.customization.carousel.title",defaultMessage:"Logo"})}))),e.createElement(Tt,{Component:m,currentStep:C,onChangeLogo:v,customLogo:n,goTo:b,next:B,prev:L,modalTitle:W}))};mt.defaultProps={canUpdate:!1,customLogo:null,hint:null},mt.propTypes={canUpdate:o().bool,customLogo:o().shape({url:o().string,name:o().string}),label:o().string.isRequired,hint:o().string,defaultLogo:o().string.isRequired,onChangeLogo:o().func.isRequired,onResetLogo:o().func.isRequired};var Lt=mt;const ut={menuLogo:{display:null,submit:{rawFile:null,isReset:!1}},authLogo:{display:null,submit:{rawFile:null,isReset:!1}}};var ee=(a=ut,n)=>(0,j.ZP)(a,s=>{switch(n.type){case"SET_CUSTOM_MENU_LOGO":{s.menuLogo.display=n.value,s.menuLogo.submit.rawFile=n.value.rawFile;break}case"SET_CUSTOM_AUTH_LOGO":{s.authLogo.display=n.value,s.authLogo.submit.rawFile=n.value.rawFile;break}case"RESET_CUSTOM_MENU_LOGO":{s.menuLogo.display=null,s.menuLogo.submit={rawFile:null,isReset:!0};break}case"RESET_CUSTOM_AUTH_LOGO":{s.authLogo.display=null,s.authLogo.submit={rawFile:null,isReset:!0};break}default:return s}}),ne=t(86349),ae=t.n(ne),oe=(a,n)=>ae()(a,{menuLogo:{display:n.menuLogo},authLogo:{display:n.authLogo}});const gt=(0,e.forwardRef)(({canUpdate:a,projectSettingsStored:n},s)=>{const{formatMessage:l}=(0,d.Z)(),{trackUsage:u}=(0,i.rS)(),{logos:{menu:v,auth:R}}=(0,h.um)(),[{menuLogo:C,authLogo:f},m]=(0,e.useReducer)(ee,ut,()=>oe(ut,n)),B=b=>{m({type:"SET_CUSTOM_MENU_LOGO",value:b})},L=()=>{u("didClickResetLogo",{logo:"menu"}),m({type:"RESET_CUSTOM_MENU_LOGO"})},W=b=>{m({type:"SET_CUSTOM_AUTH_LOGO",value:b})},Z=()=>{u("didClickResetLogo",{logo:"auth"}),m({type:"RESET_CUSTOM_AUTH_LOGO"})};return(0,e.useImperativeHandle)(s,()=>({getValues:()=>({menuLogo:C.submit,authLogo:f.submit})})),e.createElement(A.x,{hasRadius:!0,background:"neutral0",shadow:"tableShadow",paddingTop:6,paddingBottom:6,paddingRight:7,paddingLeft:7},e.createElement(c.Z,{variant:"delta",as:"h3"},l({id:"Settings.application.customization",defaultMessage:"Customization"})),e.createElement(c.Z,{variant:"pi",textColor:"neutral600"},l({id:"Settings.application.customization.size-details",defaultMessage:"Max dimension: {dimension}\xD7{dimension}, Max file size: {size}KB"},{dimension:G,size:$})),e.createElement(P.r,{paddingTop:4,gap:4},e.createElement(x.P,{col:6,s:12},e.createElement(Lt,{canUpdate:a,customLogo:C.display,defaultLogo:v.default,hint:l({id:"Settings.application.customization.menu-logo.carousel-hint",defaultMessage:"Replace the logo in the main navigation"}),label:l({id:"Settings.application.customization.carousel.menu-logo.title",defaultMessage:"Menu logo"}),onChangeLogo:B,onResetLogo:L})),e.createElement(x.P,{col:6,s:12},e.createElement(Lt,{canUpdate:a,customLogo:f.display,defaultLogo:R.default,hint:l({id:"Settings.application.customization.auth-logo.carousel-hint",defaultMessage:"Replace the logo in the authentication pages"}),label:l({id:"Settings.application.customization.carousel.auth-logo.title",defaultMessage:"Auth logo"}),onChangeLogo:W,onResetLogo:Z}))))});gt.defaultProps={canUpdate:!1,projectSettingsStored:null},gt.propTypes={canUpdate:o().bool,projectSettingsStored:o().shape({menuLogo:o().shape({url:o().string,name:o().string})})};var se=gt,le=t(48344),ie=t.n(le),yt=a=>ie()(a,(n,s,l)=>{s&&s.url?n[l]={...s,url:(0,i.CR)(s.url)}:n[l]=s},{});const re=async()=>{const{get:a}=(0,i.tg)(),{data:n}=await a("/admin/project-settings");return yt(n)},de=async a=>{const{post:n}=(0,i.tg)(),{data:s}=await n("/admin/project-settings",a,{headers:{"Content-Type":"multipart/form-data"}});return yt(s)};var ce=a=>{const n=new FormData;return Object.entries(a).forEach(([s,l])=>{l&&l.rawFile instanceof File&&n.append(s,l.rawFile),l&&l.isReset&&n.append(s,null)}),n};const me=(()=>window&&window.strapi&&window.strapi.isEE?t(78999).Z:t(17891).Z)();var ue=()=>{const a=(0,e.useRef)(),n=(0,i.lm)(),{trackUsage:s}=(0,i.rS)(),{formatMessage:l}=(0,d.Z)(),u=(0,O.useQueryClient)();(0,i.go)();const v=(0,i.QI)(),{latestStrapiReleaseTag:R,shouldUpdateStrapi:C,strapiVersion:f}=v,{updateProjectSettings:m}=(0,h.um)(),{allowedActions:{canRead:B,canUpdate:L}}=(0,i.ss)(H.Z.settings["project-settings"]),W=B&&L,{data:Z}=(0,O.useQuery)("project-settings",re,{enabled:B}),b=(0,O.useMutation)(N=>de(N),{async onSuccess(N){let{menuLogo:k,authLogo:pt}=N;await u.invalidateQueries("project-settings",{refetchActive:!0}),m({menuLogo:k?.url,authLogo:pt?.url})}}),Q=N=>{if(N.preventDefault(),!L)return;const k=a.current.getValues(),pt=ce(k);b.mutate(pt,{onSuccess(){const{menuLogo:Pe,authLogo:Oe}=k;Pe.rawFile&&s("didChangeLogo",{logo:"menu"}),Oe.rawFile&&s("didChangeLogo",{logo:"auth"}),n({type:"success",message:l({id:"app",defaultMessage:"Saved"})})},onError(){n({type:"warning",message:{id:"notification.error",defaultMessage:"An error occurred"}})}})};return e.createElement(p.A,null,e.createElement(i.SL,{name:"Application"}),e.createElement(U.o,null,e.createElement("form",{onSubmit:Q},e.createElement(F.T,{title:l({id:"Settings.application.title",defaultMessage:"Overview"}),subtitle:l({id:"Settings.application.description",defaultMessage:"Administration panel\u2019s global information"}),primaryAction:W&&e.createElement(T.z,{type:"submit",startIcon:e.createElement(z.Z,null)},l({id:"global.save",defaultMessage:"Save"}))}),e.createElement(S.D,null,e.createElement(M.k,{direction:"column",alignItems:"stretch",gap:6},e.createElement(M.k,{direction:"column",alignItems:"stretch",gap:4,hasRadius:!0,background:"neutral0",shadow:"tableShadow",paddingTop:6,paddingBottom:6,paddingRight:7,paddingLeft:7},e.createElement(c.Z,{variant:"delta",as:"h3"},l({id:"global.details",defaultMessage:"Details"})),e.createElement(P.r,{gap:5,as:"dl"},e.createElement(x.P,{col:6,s:12},e.createElement(c.Z,{variant:"sigma",textColor:"neutral600",as:"dt"},l({id:"Settings.application.strapiVersion",defaultMessage:"strapi version"})),e.createElement(M.k,{gap:3,direction:"column",alignItems:"start",as:"dd"},e.createElement(c.Z,null,"v",f),C&&e.createElement(I.r,{href:`https://github.com/strapi/strapi/releases/tag/${R}`,isExternal:!0,endIcon:e.createElement(K.Z,null)},l({id:"Settings.application.link-upgrade",defaultMessage:"Upgrade your admin panel"})))),e.createElement(x.P,{col:6,s:12},e.createElement(c.Z,{variant:"sigma",textColor:"neutral600",as:"dt"},l({id:"Settings.application.edition-title",defaultMessage:"current plan"})),e.createElement(M.k,{gap:3,direction:"column",alignItems:"start",as:"dd"},e.createElement(c.Z,null,l({id:"Settings.application.ee-or-ce",defaultMessage:"{communityEdition, select, true {Community Edition} other {Enterprise Edition}}"},{communityEdition:v.communityEdition})),e.createElement(I.r,{href:"https://strapi.io/pricing-self-hosted",isExternal:!0,endIcon:e.createElement(K.Z,null)},l({id:"Settings.application.link-pricing",defaultMessage:"See all pricing plans"})))),e.createElement(x.P,{col:6,s:12},e.createElement(c.Z,{variant:"sigma",textColor:"neutral600",as:"dt"},l({id:"Settings.application.node-version",defaultMessage:"node version"})),e.createElement(c.Z,{as:"dd"},v.nodeVersion)),e.createElement(me,null))),B&&Z&&e.createElement(se,{canUpdate:L,ref:a,projectSettingsStored:Z}))))))},ge=t(3704),pe=t.n(ge),Ee=a=>pe()(a,s=>s.links).map(s=>(0,g.ot)(s.Component,s.to,s.exact||!1)),fe=a=>a.filter(n=>!n.links.every(s=>s.isDisplayed===!1)),he=[{async Component(){return await t.e(3455).then(t.bind(t,67249))},to:"/settings/roles",exact:!0},{async Component(){return await Promise.all([t.e(1387),t.e(2544)]).then(t.bind(t,92034))},to:"/settings/roles/duplicate/:id",exact:!0},{async Component(){return await Promise.all([t.e(1387),t.e(2544)]).then(t.bind(t,92034))},to:"/settings/roles/new",exact:!0},{async Component(){return await Promise.all([t.e(1387),t.e(2544)]).then(t.bind(t,33778))},to:"/settings/roles/:id",exact:!0},{async Component(){return await t.e(5199).then(t.bind(t,76949))},to:"/settings/users",exact:!0},{async Component(){return await t.e(4263).then(t.bind(t,40874))},to:"/settings/users/:id",exact:!0},{async Component(){return await t.e(5162).then(t.bind(t,33238))},to:"/settings/webhooks/create",exact:!0},{async Component(){return await t.e(5162).then(t.bind(t,59021))},to:"/settings/webhooks/:id",exact:!0},{async Component(){return await t.e(4121).then(t.bind(t,74767))},to:"/settings/webhooks",exact:!0},{async Component(){return await t.e(8056).then(t.bind(t,37168))},to:"/settings/api-tokens",exact:!0},{async Component(){return await Promise.all([t.e(1387),t.e(4628),t.e(5563),t.e(4299)]).then(t.bind(t,3330))},to:"/settings/api-tokens/create",exact:!0},{async Component(){return await Promise.all([t.e(1387),t.e(4628),t.e(5563),t.e(92)]).then(t.bind(t,97841))},to:"/settings/api-tokens/:id",exact:!0},{async Component(){return await Promise.all([t.e(1387),t.e(4628),t.e(7259),t.e(4816)]).then(t.bind(t,76411))},to:"/settings/transfer-tokens/create",exact:!0},{async Component(){return await t.e(9600).then(t.bind(t,38286))},to:"/settings/transfer-tokens",exact:!0},{async Component(){return await Promise.all([t.e(1387),t.e(4628),t.e(7259),t.e(2492)]).then(t.bind(t,73607))},to:"/settings/transfer-tokens/:id",exact:!0}],ve=[...(()=>window&&window.strapi&&window.strapi.isEE?t(63775).Z:t(75936).Z)(),...he],Ce=t(14911),Me=t(90700),Le=t(78090),ye=t(77013),Se=t(79318),xe=t(66618);const St=({menu:a})=>{const{formatMessage:n}=(0,d.Z)(),{trackUsage:s}=(0,i.rS)(),{pathname:l}=(0,r.TH)(),v=fe(a).map(f=>({...f,title:f.intlLabel,links:f.links.map(m=>({...m,title:m.intlLabel,name:m.id}))})),R=n({id:"global.settings",defaultMessage:"Settings"}),C=(f=null)=>{s("willNavigate",{from:l,to:f})};return e.createElement(Me.m,{ariaLabel:R},e.createElement(Le.p,{label:R}),e.createElement(ye.Z,null,v.map(f=>e.createElement(Se.D,{key:f.id,label:n(f.intlLabel)},f.links.map(m=>e.createElement(xe.E,{as:Ce.OL,withBullet:m.hasNotification,to:m.to,onClick:()=>C(m.to),key:m.id},n(m.intlLabel)))))))};St.propTypes={menu:o().array.isRequired};var Re=St;function xt(){const{settingId:a}=(0,r.UO)(),{settings:n}=(0,i.j1)(),{formatMessage:s}=(0,d.Z)(),{isLoading:l,menu:u}=(0,h.Te)(),v=(0,e.useMemo)(()=>(0,g.WW)(ve.map(({to:f,Component:m,exact:B})=>(0,g.ot)(m,f,B))),[]),R=Ee(n);if(l)return e.createElement(i.dO,null);if(!a)return e.createElement(r.l_,{to:"/settings/application-infos"});const C=s({id:"global.settings",defaultMessage:"Settings"});return e.createElement(p.A,{sideNav:e.createElement(Re,{menu:u})},e.createElement(y.q,{title:C}),e.createElement(r.rs,null,e.createElement(r.AW,{path:"/settings/application-infos",component:ue,exact:!0}),v,R))}var Te=(0,e.memo)(xt)},17891:function(D,E){"use strict";const t=()=>null;E.Z=t},75936:function(D,E){"use strict";const t=[];E.Z=t},78999:function(D,E,t){"use strict";var e=t(32735),i=t(67879),r=t(5803),p=t(49372),d=t(87933),y=t(63919),h=t(99140),g=t(41502),O=t(69932),U=t(47361),F=t(43383),T=t(58414);const S="https://cloud.strapi.io/profile/billing",M="https://strapi.io/billing/request-seats",c=()=>{const{formatMessage:P}=(0,i.Z)(),{license:x}=(0,T.q5)(),{licenseLimitStatus:I,enforcementUserCount:z,permittedSeats:K,isHostedOnStrapiCloud:H}=x?.data??{};return K?e.createElement(r.P,{col:6,s:12},e.createElement(p.Z,{variant:"sigma",textColor:"neutral600"},P({id:"Settings.application.admin-seats",defaultMessage:"Admin seats"})),e.createElement(d.k,{gap:2},e.createElement(d.k,null,e.createElement(p.Z,{as:"p"},P({id:"Settings.application.ee.admin-seats.count",defaultMessage:"<text>{enforcementUserCount}</text>/{permittedSeats}"},{permittedSeats:K,enforcementUserCount:z,text:V=>e.createElement(p.Z,{fontWeight:"semiBold",textColor:z>K?"danger500":null},V)}))),I==="OVER_LIMIT"&&e.createElement(y.u,{description:P({id:"Settings.application.ee.admin-seats.at-limit-tooltip",defaultMessage:"At limit: add seats to invite more users"})},e.createElement(h.J,{width:`${(0,F.Q1)(14)}rem`,height:`${(0,F.Q1)(14)}rem`,color:"danger500",as:O.Z}))),e.createElement(g.r,{href:H?S:M,isExternal:!0,endIcon:e.createElement(U.Z,null)},P({id:"Settings.application.ee.admin-seats.add-seats",defaultMessage:"{isHostedOnStrapiCloud, select, true {Add seats} other {Contact sales}}"},{isHostedOnStrapiCloud:H}))):null};E.Z=c},63775:function(D,E,t){"use strict";const e=[];window.strapi.features.isEnabled(window.strapi.features.SSO)&&e.push({async Component(){return await t.e(302).then(t.bind(t,26930))},to:"/settings/single-sign-on",exact:!0}),window.strapi.features.isEnabled(window.strapi.features.REVIEW_WORKFLOWS)&&e.push({async Component(){return await t.e(8155).then(t.bind(t,16633))},to:"/settings/review-workflows",exact:!0}),window.strapi.features.isEnabled(window.strapi.features.AUDIT_LOGS)&&e.push({async Component(){return await t.e(2812).then(t.bind(t,71765))},to:"/settings/audit-logs",exact:!0}),E.Z=e},3704:function(D,E,t){var e=t(40314),i=t(37213);function r(p,d){return e(i(p,d),1)}D.exports=r},37213:function(D,E,t){var e=t(26460),i=t(88904),r=t(52920),p=t(77236);function d(y,h){var g=p(y)?e:r;return g(y,i(h,3))}D.exports=d},96709:function(D,E,t){"use strict";t.d(E,{A:function(){return h}});var e=t(32735),i=t(60216),r=t(8471),p=t(72850);const d=(0,r.ZP)(p.x)`
9
+ `,it=({setLocalImage:a,goTo:n,next:s,onClose:l})=>{const{formatMessage:u}=(0,d.Z)(),[v,R]=(0,e.useState)(!1),[C,f]=(0,e.useState)(void 0),m=(0,e.useRef)(null),B=()=>R(!0),L=()=>R(!1),W=Q=>{Q.preventDefault(),m.current.click()},Z=async()=>{L();const Q=m.current.files[0];if(Q)try{const N=await vt(Q);a(N),n(s)}catch(N){if(N.displayMessage)f(u(N.displayMessage,{size:$,dimension:G})),m.current.focus();else throw N}},b=()=>v?"primary500":C?"danger600":"neutral300";return e.createElement(e.Fragment,null,e.createElement("form",null,e.createElement(A.x,{paddingLeft:8,paddingRight:8,paddingTop:6,paddingBottom:6},e.createElement(Bt.g,{name:"logo-upload",error:C},e.createElement("label",{htmlFor:"logo-upload"},e.createElement(M.k,{direction:"column",alignItems:"stretch",gap:2},e.createElement(M.k,{paddingTop:9,paddingBottom:7,hasRadius:!0,justifyContent:"center",direction:"column",background:v?"primary100":"neutral100",borderColor:b(),borderStyle:"dashed",borderWidth:"1px",position:"relative",onDragEnter:B,onDragLeave:L},e.createElement(Ut.J,{color:"primary600",width:`${60/16}rem`,height:`${60/16}rem`,as:Zt.Z,"aria-hidden":!0}),e.createElement(A.x,{paddingTop:3,paddingBottom:5},e.createElement(c.Z,{variant:"delta",as:"span"},u({id:"Settings.application.customization.modal.upload.drag-drop",defaultMessage:"Drag and Drop here or"}))),e.createElement($t,{accept:X,cursor:"pointer",as:"input",type:"file",name:"files",tabIndex:-1,zIndex:1,onChange:Z,ref:m,id:"logo-upload"}),e.createElement(T.z,{type:"button",onClick:W},u({id:"Settings.application.customization.modal.upload.cta.browse",defaultMessage:"Browse files"})),e.createElement(A.x,{paddingTop:6},e.createElement(c.Z,{variant:"pi",textColor:"neutral600"},u({id:"Settings.application.customization.modal.upload.file-validation",defaultMessage:"Max dimension: {dimension}x{dimension}, Max size: {size}KB"},{size:$,dimension:G})))),e.createElement(zt.c,null)))))),e.createElement(lt.m,{startActions:e.createElement(T.z,{onClick:l,variant:"tertiary"},u({id:"Settings.application.customization.modal.cancel",defaultMessage:"Cancel"}))}))};it.defaultProps={next:null},it.propTypes={goTo:o().func.isRequired,next:o().string,onClose:o().func.isRequired,setLocalImage:o().func.isRequired};var jt=it,Nt=t(10369),Gt=t(84306),bt=async a=>{try{const n=await Gt.Z.get(a,{responseType:"blob",timeout:8e3});return new File([n.data],n.config.url,{type:n.headers["content-type"]})}catch(n){throw n.displayMessage={id:"Settings.application.customization.modal.upload.error-network",defaultMessage:"Network error"},n}};const rt=({goTo:a,next:n,onClose:s,setLocalImage:l})=>{const{formatMessage:u}=(0,d.Z)(),[v,R]=(0,e.useState)(""),[C,f]=(0,e.useState)(null),m=L=>{R(L.target.value)},B=async()=>{try{const L=await bt(v),W=await vt(L);l(W),a(n)}catch(L){if(L.displayMessage)f(u(L.displayMessage,{size:$,dimension:G}));else throw L}};return e.createElement("form",{onSubmit:L=>{L.preventDefault(),B()}},e.createElement(A.x,{paddingLeft:8,paddingRight:8,paddingTop:6,paddingBottom:6},e.createElement(Nt.o,{label:u({id:"Settings.application.customization.modal.upload.from-url.input-label",defaultMessage:"URL"}),error:C,onChange:m,value:v,name:"logo-url"})),e.createElement(lt.m,{startActions:e.createElement(T.z,{onClick:s,variant:"tertiary"},u({id:"app.components.Button.cancel",defaultMessage:"Cancel"})),endActions:e.createElement(T.z,{type:"submit"},u({id:"Settings.application.customization.modal.upload.next",defaultMessage:"Next"}))}))};rt.defaultProps={next:null},rt.propTypes={goTo:o().func.isRequired,next:o().string,onClose:o().func.isRequired,setLocalImage:o().func.isRequired};var Ht=rt;const dt=({setLocalImage:a,goTo:n,next:s,onClose:l})=>{const{formatMessage:u}=(0,d.Z)();return e.createElement(Ot.v,{label:u({id:"Settings.application.customization.modal.tab.label",defaultMessage:"How do you want to upload your assets?"}),variant:"simple"},e.createElement(A.x,{paddingLeft:8,paddingRight:8},e.createElement(ot.m,null,e.createElement(ot.O,null,u({id:"Settings.application.customization.modal.upload.from-computer",defaultMessage:"From computer"})),e.createElement(ot.O,null,u({id:"Settings.application.customization.modal.upload.from-url",defaultMessage:"From url"}))),e.createElement(It.i,null)),e.createElement(st.n,null,e.createElement(st.x,null,e.createElement(jt,{onClose:l,setLocalImage:a,goTo:n,next:s})),e.createElement(st.x,null,e.createElement(Ht,{onClose:l,setLocalImage:a,goTo:n,next:s}))))};dt.defaultProps={next:null},dt.propTypes={goTo:o().func.isRequired,next:o().string,onClose:o().func.isRequired,setLocalImage:o().func.isRequired};var Vt=dt,Qt=t(42466),Jt=t(20853),Xt=t(2800),Yt=t(26835),wt=t(41048),Ct=t(37083),kt=t(11505);const Mt=({asset:a})=>{const{formatMessage:n}=(0,d.Z)();return e.createElement(Qt.Z,null,e.createElement(Jt.O,null,e.createElement(Xt.H,{size:"S",src:a.url})),e.createElement(Yt.e,null,e.createElement(wt.a,null,e.createElement(Ct.l,null,a.name),e.createElement(Ct._,null,`${a.ext.toUpperCase()} - ${a.width}\u2715${a.height}`)),e.createElement(kt.E,null,n({id:"Settings.application.customization.modal.pending.card-badge",defaultMessage:"image"}))))};Mt.propTypes={asset:o().shape({name:o().string,url:o().string,width:o().number,height:o().number,ext:o().string}).isRequired};var qt=Mt;const ct=({onClose:a,asset:n,prev:s,next:l,goTo:u,setLocalImage:v,onChangeLogo:R})=>{const{formatMessage:C}=(0,d.Z)(),f=()=>{v(void 0),u(s)},m=()=>{R(n),u(l)};return e.createElement(e.Fragment,null,e.createElement(A.x,{paddingLeft:8,paddingRight:8,paddingTop:6,paddingBottom:6},e.createElement(M.k,{justifyContent:"space-between",paddingBottom:6},e.createElement(M.k,{direction:"column",alignItems:"flex-start"},e.createElement(c.Z,{variant:"pi",fontWeight:"bold"},C({id:"Settings.application.customization.modal.pending.title",defaultMessage:"Logo ready to upload"})),e.createElement(c.Z,{variant:"pi",textColor:"neutral500"},C({id:"Settings.application.customization.modal.pending.subtitle",defaultMessage:"Manage the chosen logo before uploading it"}))),e.createElement(T.z,{onClick:f,variant:"secondary"},C({id:"Settings.application.customization.modal.pending.choose-another",defaultMessage:"Choose another logo"}))),e.createElement(A.x,{maxWidth:(0,i.Q1)(180)},n.url?e.createElement(qt,{asset:n}):null)),e.createElement(lt.m,{startActions:e.createElement(T.z,{onClick:a,variant:"tertiary"},C({id:"Settings.application.customization.modal.cancel",defaultMessage:"Cancel"})),endActions:e.createElement(T.z,{onClick:m},C({id:"Settings.application.customization.modal.pending.upload",defaultMessage:"Upload logo"}))}))};ct.defaultProps={next:null,prev:null},ct.propTypes={goTo:o().func.isRequired,asset:o().shape({name:o().string,url:o().string,width:o().number,height:o().number,ext:o().string}).isRequired,next:o().string,onClose:o().func.isRequired,onChangeLogo:o().func.isRequired,prev:o().string,setLocalImage:o().func.isRequired};var _t=ct,te={upload:{Component:Vt,modalTitle:{id:"Settings.application.customization.modal.upload",defaultMessage:"Upload logo"},next:"pending",prev:null},pending:{Component:_t,modalTitle:{id:"Settings.application.customization.modal.pending",defaultMessage:"Pending logo"},next:null,prev:"upload"}};const mt=({canUpdate:a,customLogo:n,defaultLogo:s,hint:l,label:u,onChangeLogo:v,onResetLogo:R})=>{const[{currentStep:C},f]=(0,e.useReducer)(Pt,ft),{Component:m,next:B,prev:L,modalTitle:W}=te[C]||{},{formatMessage:Z}=(0,d.Z)(),b=Q=>{f({type:"GO_TO",to:Q})};return e.createElement(e.Fragment,null,e.createElement(w.F,{label:u,selectedSlide:0,hint:l,previousLabel:"",nextLabel:"",onNext:()=>{},onPrevious:()=>{},secondaryLabel:n?.name||"logo.png",actions:e.createElement(q.b,null,e.createElement(J.h,{disabled:!a,onClick:()=>b(n?"pending":"upload"),label:Z({id:"Settings.application.customization.carousel.change-action",defaultMessage:"Change logo"}),icon:e.createElement(_.Z,null)}),n&&e.createElement(J.h,{disabled:!a,onClick:R,label:Z({id:"Settings.application.customization.carousel.reset-action",defaultMessage:"Reset logo"}),icon:e.createElement(tt.Z,null)}))},e.createElement(Y.q,{label:Z({id:"Settings.application.customization.carousel-slide.label",defaultMessage:"Logo slide"})},e.createElement(A.x,{maxHeight:"40%",maxWidth:"40%",as:"img",src:n?.url||s,alt:Z({id:"Settings.application.customization.carousel.title",defaultMessage:"Logo"})}))),e.createElement(Tt,{Component:m,currentStep:C,onChangeLogo:v,customLogo:n,goTo:b,next:B,prev:L,modalTitle:W}))};mt.defaultProps={canUpdate:!1,customLogo:null,hint:null},mt.propTypes={canUpdate:o().bool,customLogo:o().shape({url:o().string,name:o().string}),label:o().string.isRequired,hint:o().string,defaultLogo:o().string.isRequired,onChangeLogo:o().func.isRequired,onResetLogo:o().func.isRequired};var Lt=mt;const ut={menuLogo:{display:null,submit:{rawFile:null,isReset:!1}},authLogo:{display:null,submit:{rawFile:null,isReset:!1}}};var ee=(a=ut,n)=>(0,j.ZP)(a,s=>{switch(n.type){case"SET_CUSTOM_MENU_LOGO":{s.menuLogo.display=n.value,s.menuLogo.submit.rawFile=n.value.rawFile;break}case"SET_CUSTOM_AUTH_LOGO":{s.authLogo.display=n.value,s.authLogo.submit.rawFile=n.value.rawFile;break}case"RESET_CUSTOM_MENU_LOGO":{s.menuLogo.display=null,s.menuLogo.submit={rawFile:null,isReset:!0};break}case"RESET_CUSTOM_AUTH_LOGO":{s.authLogo.display=null,s.authLogo.submit={rawFile:null,isReset:!0};break}default:return s}}),ne=t(86349),ae=t.n(ne),oe=(a,n)=>ae()(a,{menuLogo:{display:n.menuLogo},authLogo:{display:n.authLogo}});const gt=(0,e.forwardRef)(({canUpdate:a,projectSettingsStored:n},s)=>{const{formatMessage:l}=(0,d.Z)(),{trackUsage:u}=(0,i.rS)(),{logos:{menu:v,auth:R}}=(0,h.um)(),[{menuLogo:C,authLogo:f},m]=(0,e.useReducer)(ee,ut,()=>oe(ut,n)),B=b=>{m({type:"SET_CUSTOM_MENU_LOGO",value:b})},L=()=>{u("didClickResetLogo",{logo:"menu"}),m({type:"RESET_CUSTOM_MENU_LOGO"})},W=b=>{m({type:"SET_CUSTOM_AUTH_LOGO",value:b})},Z=()=>{u("didClickResetLogo",{logo:"auth"}),m({type:"RESET_CUSTOM_AUTH_LOGO"})};return(0,e.useImperativeHandle)(s,()=>({getValues:()=>({menuLogo:C.submit,authLogo:f.submit})})),e.createElement(A.x,{hasRadius:!0,background:"neutral0",shadow:"tableShadow",paddingTop:6,paddingBottom:6,paddingRight:7,paddingLeft:7},e.createElement(c.Z,{variant:"delta",as:"h3"},l({id:"Settings.application.customization",defaultMessage:"Customization"})),e.createElement(c.Z,{variant:"pi",textColor:"neutral600"},l({id:"Settings.application.customization.size-details",defaultMessage:"Max dimension: {dimension}\xD7{dimension}, Max file size: {size}KB"},{dimension:G,size:$})),e.createElement(P.r,{paddingTop:4,gap:4},e.createElement(x.P,{col:6,s:12},e.createElement(Lt,{canUpdate:a,customLogo:C.display,defaultLogo:v.default,hint:l({id:"Settings.application.customization.menu-logo.carousel-hint",defaultMessage:"Replace the logo in the main navigation"}),label:l({id:"Settings.application.customization.carousel.menu-logo.title",defaultMessage:"Menu logo"}),onChangeLogo:B,onResetLogo:L})),e.createElement(x.P,{col:6,s:12},e.createElement(Lt,{canUpdate:a,customLogo:f.display,defaultLogo:R.default,hint:l({id:"Settings.application.customization.auth-logo.carousel-hint",defaultMessage:"Replace the logo in the authentication pages"}),label:l({id:"Settings.application.customization.carousel.auth-logo.title",defaultMessage:"Auth logo"}),onChangeLogo:W,onResetLogo:Z}))))});gt.defaultProps={canUpdate:!1,projectSettingsStored:null},gt.propTypes={canUpdate:o().bool,projectSettingsStored:o().shape({menuLogo:o().shape({url:o().string,name:o().string})})};var se=gt,le=t(48344),ie=t.n(le),yt=a=>ie()(a,(n,s,l)=>{s&&s.url?n[l]={...s,url:(0,i.CR)(s.url)}:n[l]=s},{});const re=async()=>{const{get:a}=(0,i.tg)(),{data:n}=await a("/admin/project-settings");return yt(n)},de=async a=>{const{post:n}=(0,i.tg)(),{data:s}=await n("/admin/project-settings",a,{headers:{"Content-Type":"multipart/form-data"}});return yt(s)};var ce=a=>{const n=new FormData;return Object.entries(a).forEach(([s,l])=>{l&&l.rawFile instanceof File&&n.append(s,l.rawFile),l&&l.isReset&&n.append(s,null)}),n};const me=(()=>window&&window.strapi&&window.strapi.isEE?t(78999).Z:t(17891).Z)();var ue=()=>{const a=(0,e.useRef)(),n=(0,i.lm)(),{trackUsage:s}=(0,i.rS)(),{formatMessage:l}=(0,d.Z)(),u=(0,O.useQueryClient)();(0,i.go)();const v=(0,i.QI)(),{latestStrapiReleaseTag:R,shouldUpdateStrapi:C,strapiVersion:f}=v,{updateProjectSettings:m}=(0,h.um)(),{allowedActions:{canRead:B,canUpdate:L}}=(0,i.ss)(H.Z.settings["project-settings"]),W=B&&L,{data:Z}=(0,O.useQuery)("project-settings",re,{enabled:B}),b=(0,O.useMutation)(N=>de(N),{async onSuccess(N){let{menuLogo:k,authLogo:pt}=N;await u.invalidateQueries("project-settings",{refetchActive:!0}),m({menuLogo:k?.url,authLogo:pt?.url})}}),Q=N=>{if(N.preventDefault(),!L)return;const k=a.current.getValues(),pt=ce(k);b.mutate(pt,{onSuccess(){const{menuLogo:Pe,authLogo:Oe}=k;Pe.rawFile&&s("didChangeLogo",{logo:"menu"}),Oe.rawFile&&s("didChangeLogo",{logo:"auth"}),n({type:"success",message:l({id:"app",defaultMessage:"Saved"})})},onError(){n({type:"warning",message:{id:"notification.error",defaultMessage:"An error occurred"}})}})};return e.createElement(p.A,null,e.createElement(i.SL,{name:"Application"}),e.createElement(U.o,null,e.createElement("form",{onSubmit:Q},e.createElement(F.T,{title:l({id:"Settings.application.title",defaultMessage:"Overview"}),subtitle:l({id:"Settings.application.description",defaultMessage:"Administration panel\u2019s global information"}),primaryAction:W&&e.createElement(T.z,{type:"submit",startIcon:e.createElement(z.Z,null)},l({id:"global.save",defaultMessage:"Save"}))}),e.createElement(S.D,null,e.createElement(M.k,{direction:"column",alignItems:"stretch",gap:6},e.createElement(M.k,{direction:"column",alignItems:"stretch",gap:4,hasRadius:!0,background:"neutral0",shadow:"tableShadow",paddingTop:6,paddingBottom:6,paddingRight:7,paddingLeft:7},e.createElement(c.Z,{variant:"delta",as:"h3"},l({id:"global.details",defaultMessage:"Details"})),e.createElement(P.r,{gap:5,as:"dl"},e.createElement(x.P,{col:6,s:12},e.createElement(c.Z,{variant:"sigma",textColor:"neutral600",as:"dt"},l({id:"Settings.application.strapiVersion",defaultMessage:"strapi version"})),e.createElement(M.k,{gap:3,direction:"column",alignItems:"start",as:"dd"},e.createElement(c.Z,null,"v",f),C&&e.createElement(I.r,{href:`https://github.com/strapi/strapi/releases/tag/${R}`,isExternal:!0,endIcon:e.createElement(K.Z,null)},l({id:"Settings.application.link-upgrade",defaultMessage:"Upgrade your admin panel"})))),e.createElement(x.P,{col:6,s:12},e.createElement(c.Z,{variant:"sigma",textColor:"neutral600",as:"dt"},l({id:"Settings.application.edition-title",defaultMessage:"current plan"})),e.createElement(M.k,{gap:3,direction:"column",alignItems:"start",as:"dd"},e.createElement(c.Z,null,l({id:"Settings.application.ee-or-ce",defaultMessage:"{communityEdition, select, true {Community Edition} other {Enterprise Edition}}"},{communityEdition:v.communityEdition})),e.createElement(I.r,{href:"https://strapi.io/pricing-self-hosted",isExternal:!0,endIcon:e.createElement(K.Z,null)},l({id:"Settings.application.link-pricing",defaultMessage:"See all pricing plans"})))),e.createElement(x.P,{col:6,s:12},e.createElement(c.Z,{variant:"sigma",textColor:"neutral600",as:"dt"},l({id:"Settings.application.node-version",defaultMessage:"node version"})),e.createElement(c.Z,{as:"dd"},v.nodeVersion)),e.createElement(me,null))),B&&Z&&e.createElement(se,{canUpdate:L,ref:a,projectSettingsStored:Z}))))))},ge=t(3704),pe=t.n(ge),Ee=a=>pe()(a,s=>s.links).map(s=>(0,g.ot)(s.Component,s.to,s.exact||!1)),fe=a=>a.filter(n=>!n.links.every(s=>s.isDisplayed===!1)),he=[{async Component(){return await t.e(3455).then(t.bind(t,67249))},to:"/settings/roles",exact:!0},{async Component(){return await Promise.all([t.e(1387),t.e(2544)]).then(t.bind(t,92034))},to:"/settings/roles/duplicate/:id",exact:!0},{async Component(){return await Promise.all([t.e(1387),t.e(2544)]).then(t.bind(t,92034))},to:"/settings/roles/new",exact:!0},{async Component(){return await Promise.all([t.e(1387),t.e(2544)]).then(t.bind(t,33778))},to:"/settings/roles/:id",exact:!0},{async Component(){return await t.e(5199).then(t.bind(t,76949))},to:"/settings/users",exact:!0},{async Component(){return await t.e(4263).then(t.bind(t,40874))},to:"/settings/users/:id",exact:!0},{async Component(){return await t.e(5162).then(t.bind(t,33238))},to:"/settings/webhooks/create",exact:!0},{async Component(){return await t.e(5162).then(t.bind(t,59021))},to:"/settings/webhooks/:id",exact:!0},{async Component(){return await t.e(4121).then(t.bind(t,74767))},to:"/settings/webhooks",exact:!0},{async Component(){return await t.e(8056).then(t.bind(t,37168))},to:"/settings/api-tokens",exact:!0},{async Component(){return await Promise.all([t.e(1387),t.e(4628),t.e(5563),t.e(4299)]).then(t.bind(t,3330))},to:"/settings/api-tokens/create",exact:!0},{async Component(){return await Promise.all([t.e(1387),t.e(4628),t.e(5563),t.e(92)]).then(t.bind(t,97841))},to:"/settings/api-tokens/:id",exact:!0},{async Component(){return await Promise.all([t.e(1387),t.e(4628),t.e(7259),t.e(4816)]).then(t.bind(t,76411))},to:"/settings/transfer-tokens/create",exact:!0},{async Component(){return await t.e(9600).then(t.bind(t,38286))},to:"/settings/transfer-tokens",exact:!0},{async Component(){return await Promise.all([t.e(1387),t.e(4628),t.e(7259),t.e(2492)]).then(t.bind(t,73607))},to:"/settings/transfer-tokens/:id",exact:!0}],ve=[...(()=>window&&window.strapi&&window.strapi.isEE?t(63775).Z:t(75936).Z)(),...he],Ce=t(14911),Me=t(90700),Le=t(78090),ye=t(77013),Se=t(79318),xe=t(66618);const St=({menu:a})=>{const{formatMessage:n}=(0,d.Z)(),{trackUsage:s}=(0,i.rS)(),{pathname:l}=(0,r.TH)(),v=fe(a).map(f=>({...f,title:f.intlLabel,links:f.links.map(m=>({...m,title:m.intlLabel,name:m.id}))})),R=n({id:"global.settings",defaultMessage:"Settings"}),C=(f=null)=>{s("willNavigate",{from:l,to:f})};return e.createElement(Me.m,{ariaLabel:R},e.createElement(Le.p,{label:R}),e.createElement(ye.Z,null,v.map(f=>e.createElement(Se.D,{key:f.id,label:n(f.intlLabel)},f.links.map(m=>e.createElement(xe.E,{as:Ce.OL,withBullet:m.hasNotification,to:m.to,onClick:()=>C(m.to),key:m.id},n(m.intlLabel)))))))};St.propTypes={menu:o().array.isRequired};var Re=St;function xt(){const{settingId:a}=(0,r.UO)(),{settings:n}=(0,i.j1)(),{formatMessage:s}=(0,d.Z)(),{isLoading:l,menu:u}=(0,h.Te)(),v=(0,e.useMemo)(()=>(0,g.WW)(ve.map(({to:f,Component:m,exact:B})=>(0,g.ot)(m,f,B))),[]),R=Ee(n);if(l)return e.createElement(i.dO,null);if(!a)return e.createElement(r.l_,{to:"/settings/application-infos"});const C=s({id:"global.settings",defaultMessage:"Settings"});return e.createElement(p.A,{sideNav:e.createElement(Re,{menu:u})},e.createElement(y.q,{title:C}),e.createElement(r.rs,null,e.createElement(r.AW,{path:"/settings/application-infos",component:ue,exact:!0}),v,R))}var Te=(0,e.memo)(xt)},17891:function(D,E){"use strict";const t=()=>null;E.Z=t},75936:function(D,E){"use strict";const t=[];E.Z=t},78999:function(D,E,t){"use strict";var e=t(32735),i=t(67879),r=t(5803),p=t(49372),d=t(87933),y=t(63919),h=t(99140),g=t(41502),O=t(69932),U=t(47361),F=t(43383),T=t(58414);const S="https://cloud.strapi.io/profile/billing",M="https://strapi.io/billing/request-seats",c=()=>{const{formatMessage:P}=(0,i.Z)(),{license:x}=(0,T.q5)(),{licenseLimitStatus:I,enforcementUserCount:z,permittedSeats:K,isHostedOnStrapiCloud:H}=x?.data??{};return K?e.createElement(r.P,{col:6,s:12},e.createElement(p.Z,{variant:"sigma",textColor:"neutral600"},P({id:"Settings.application.admin-seats",defaultMessage:"Admin seats"})),e.createElement(d.k,{gap:2},e.createElement(d.k,null,e.createElement(p.Z,{as:"p"},P({id:"Settings.application.ee.admin-seats.count",defaultMessage:"<text>{enforcementUserCount}</text>/{permittedSeats}"},{permittedSeats:K,enforcementUserCount:z,text:V=>e.createElement(p.Z,{fontWeight:"semiBold",textColor:z>K?"danger500":null},V)}))),I==="OVER_LIMIT"&&e.createElement(y.u,{description:P({id:"Settings.application.ee.admin-seats.at-limit-tooltip",defaultMessage:"At limit: add seats to invite more users"})},e.createElement(h.J,{width:`${(0,F.Q1)(14)}rem`,height:`${(0,F.Q1)(14)}rem`,color:"danger500",as:O.Z}))),e.createElement(g.r,{href:H?S:M,isExternal:!0,endIcon:e.createElement(U.Z,null)},P({id:"Settings.application.ee.admin-seats.add-seats",defaultMessage:"{isHostedOnStrapiCloud, select, true {Add seats} other {Contact sales}}"},{isHostedOnStrapiCloud:H}))):null};E.Z=c},63775:function(D,E,t){"use strict";const e=[];window.strapi.features.isEnabled(window.strapi.features.SSO)&&e.push({async Component(){return await t.e(302).then(t.bind(t,26930))},to:"/settings/single-sign-on",exact:!0}),window.strapi.features.isEnabled(window.strapi.features.REVIEW_WORKFLOWS)&&e.push({async Component(){return await t.e(8155).then(t.bind(t,16633))},to:"/settings/review-workflows",exact:!0}),window.strapi.features.isEnabled(window.strapi.features.AUDIT_LOGS)&&e.push({async Component(){return await t.e(2812).then(t.bind(t,71765))},to:"/settings/audit-logs",exact:!0}),E.Z=e},3704:function(D,E,t){var e=t(40314),i=t(37213);function r(p,d){return e(i(p,d),1)}D.exports=r},37213:function(D,E,t){var e=t(26460),i=t(88904),r=t(52920),p=t(77236);function d(y,h){var g=p(y)?e:r;return g(y,i(h,3))}D.exports=d},96709:function(D,E,t){"use strict";t.d(E,{A:function(){return h}});var e=t(32735),i=t(60216),r=t(8471),p=t(72850);const d=(0,r.ZP)(p.x)`
10
10
  display: grid;
11
11
  grid-template-columns: ${({hasSideNav:g})=>g?"auto 1fr":"1fr"};
12
12
  `,y=(0,r.ZP)(p.x)`