@lastbrain/module-auth 2.0.13 → 2.0.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auth.build.config.d.ts.map +1 -1
- package/dist/auth.build.config.js +33 -47
- package/dist/components/AccountButton.d.ts.map +1 -1
- package/dist/components/AccountButton.js +9 -5
- package/dist/web/admin/signup-stats.d.ts.map +1 -1
- package/dist/web/admin/signup-stats.js +4 -2
- package/dist/web/admin/user-detail.d.ts.map +1 -1
- package/dist/web/admin/user-detail.js +42 -17
- package/dist/web/admin/users-by-signup-source.d.ts.map +1 -1
- package/dist/web/admin/users-by-signup-source.js +18 -7
- package/dist/web/admin/users.d.ts.map +1 -1
- package/dist/web/admin/users.js +11 -6
- package/dist/web/auth/dashboard.d.ts.map +1 -1
- package/dist/web/auth/dashboard.js +7 -3
- package/dist/web/auth/folder.d.ts.map +1 -1
- package/dist/web/auth/folder.js +5 -3
- package/dist/web/auth/profile.d.ts.map +1 -1
- package/dist/web/auth/profile.js +13 -6
- package/dist/web/auth/reglage.d.ts.map +1 -1
- package/dist/web/auth/reglage.js +11 -6
- package/dist/web/public/SignInPage.d.ts.map +1 -1
- package/dist/web/public/SignInPage.js +14 -56
- package/dist/web/public/SignUpPage.d.ts.map +1 -1
- package/dist/web/public/SignUpPage.js +18 -11
- package/package.json +4 -3
- package/src/auth.build.config.ts +34 -48
- package/src/components/AccountButton.tsx +17 -10
- package/src/i18n/en.json +263 -0
- package/src/i18n/fr.json +261 -0
- package/src/web/admin/signup-stats.tsx +10 -3
- package/src/web/admin/user-detail.tsx +135 -56
- package/src/web/admin/users-by-signup-source.tsx +60 -21
- package/src/web/admin/users.tsx +41 -18
- package/src/web/auth/dashboard.tsx +25 -9
- package/src/web/auth/folder.tsx +11 -3
- package/src/web/auth/profile.tsx +63 -29
- package/src/web/auth/reglage.tsx +43 -19
- package/src/web/public/SignInPage.tsx +32 -70
- package/src/web/public/SignUpPage.tsx +48 -26
- package/supabase/migrations/20251112000000_user_init.sql +35 -19
- package/supabase/migrations/20251112000001_auto_profile_and_admin_view.sql +8 -3
- package/supabase/migrations/20251112000002_sync_avatars.sql +7 -1
- package/supabase/migrations/20251124000001_add_get_admin_user_details.sql +2 -1
package/src/i18n/fr.json
ADDED
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
{
|
|
2
|
+
"welcome": "Bienvenue",
|
|
3
|
+
"signin": "Se connecter",
|
|
4
|
+
"signup": "S'inscrire",
|
|
5
|
+
"signout": "Se déconnecter",
|
|
6
|
+
"email": "Email",
|
|
7
|
+
"password": "Mot de passe",
|
|
8
|
+
"submit": "Envoyer",
|
|
9
|
+
"cancel": "Annuler",
|
|
10
|
+
"save": "Enregistrer",
|
|
11
|
+
"delete": "Supprimer",
|
|
12
|
+
"edit": "Modifier",
|
|
13
|
+
"back": "Retour",
|
|
14
|
+
"loading": "Chargement...",
|
|
15
|
+
"error": "Erreur",
|
|
16
|
+
"success": "Succès",
|
|
17
|
+
"hello": "Bonjour",
|
|
18
|
+
"menu.notifications": "Notifications",
|
|
19
|
+
"menu.notifications_desc": "Vos notifications",
|
|
20
|
+
"menu.account": "Compte",
|
|
21
|
+
"menu.account_desc": "Gérer votre compte",
|
|
22
|
+
"menu.theme": "Thème",
|
|
23
|
+
"menu.theme_desc": "Changer le thème",
|
|
24
|
+
"menu.dashboard": "Tableau de bord",
|
|
25
|
+
"menu.dashboard_desc": "Accédez à votre tableau de bord",
|
|
26
|
+
"menu.folder": "Dossier",
|
|
27
|
+
"menu.folder_desc": "Accédez à votre dossier personnel",
|
|
28
|
+
"menu.users_management": "Gestion des utilisateurs",
|
|
29
|
+
"menu.users_management_desc": "Gérez les utilisateurs de la plateforme",
|
|
30
|
+
"menu.signup_stats": "Statistiques d'inscriptions",
|
|
31
|
+
"menu.signup_stats_desc": "Suivez les inscriptions par source",
|
|
32
|
+
"menu.signout": "Se déconnecter",
|
|
33
|
+
"menu.settings": "Paramètres",
|
|
34
|
+
"menu.settings_desc": "Configurez votre compte",
|
|
35
|
+
"menu.profile": "Mon profil",
|
|
36
|
+
"menu.profile_desc": "Gérez vos informations personnelles",
|
|
37
|
+
"menu.admin-panel": "Panneau Admin",
|
|
38
|
+
"menu.administration": "Administration",
|
|
39
|
+
"menu.my-space": "Mon Espace",
|
|
40
|
+
"menu.menu": "Menu",
|
|
41
|
+
"menu.open": "Ouvrir",
|
|
42
|
+
"menu.public": "Pages publiques",
|
|
43
|
+
"menu.close": "Fermer",
|
|
44
|
+
"signin.title": "Bon retour",
|
|
45
|
+
"signin.subtitle": "Connectez-vous pour accéder à votre espace",
|
|
46
|
+
"signin.email_placeholder": "votre@email.com",
|
|
47
|
+
"signin.password_placeholder": "Mot de passe",
|
|
48
|
+
"signin.submit": "Se connecter",
|
|
49
|
+
"signin.forgot_password": "Mot de passe oublié ?",
|
|
50
|
+
"signin.no_account": "Pas encore inscrit ?",
|
|
51
|
+
"signin.sign_up": "S'inscrire",
|
|
52
|
+
"signin.error_title": "Erreur de connexion",
|
|
53
|
+
"signin.accept_terms": "En vous connectant, vous acceptez nos",
|
|
54
|
+
"signup.legal_prefix": "En vous inscrivant, vous acceptez nos",
|
|
55
|
+
"signup.privacy": "politique de confidentialité",
|
|
56
|
+
"signup.legal_and": "et notre",
|
|
57
|
+
"signin.term": "conditions d'utilisation",
|
|
58
|
+
"signin.success_title": "Connecté avec succès !",
|
|
59
|
+
"signin.success_welcome": "Bienvenue",
|
|
60
|
+
"signin.chip_label": "Espace membre",
|
|
61
|
+
"signup.title": "Commencer gratuitement",
|
|
62
|
+
"signup.subtitle": "Créez votre compte en quelques secondes",
|
|
63
|
+
"signup.chip_label": "Rejoignez-nous",
|
|
64
|
+
"signup.full_name": "Nom complet",
|
|
65
|
+
"signup.password_hint": "Minimun 6 caractères",
|
|
66
|
+
"signup.or": "OU",
|
|
67
|
+
"signup.terms": "conditions d'utilisation",
|
|
68
|
+
"signup.full_name_placeholder": "Jean Dupont",
|
|
69
|
+
"signup.email_placeholder": "votre@email.com",
|
|
70
|
+
"signup.password": "Mot de passe",
|
|
71
|
+
"signup.confirm_password": "Confirmer le mot de passe",
|
|
72
|
+
"signup.submit": "S'inscrire",
|
|
73
|
+
"signup.have_account": "Vous avez déjà un compte ?",
|
|
74
|
+
"signup.sign_in": "Se connecter",
|
|
75
|
+
"signup.password_mismatch": "Les mots de passe ne correspondent pas.",
|
|
76
|
+
"signup.password_too_short": "Le mot de passe doit contenir au moins 6 caractères.",
|
|
77
|
+
"signup.success_confirmation": "Compte créé avec succès ! Veuillez vérifier votre email pour confirmer votre compte.",
|
|
78
|
+
"signup.success_login": "Compte créé. Vous pouvez désormais vous connecter.",
|
|
79
|
+
"signup.error_title": "Erreur",
|
|
80
|
+
"signup.error_unexpected": "Une erreur inattendue est survenue.",
|
|
81
|
+
"dashboard.title": "Tableau de bord",
|
|
82
|
+
"dashboard.loading": "Chargement du tableau de bord...",
|
|
83
|
+
"dashboard.error_loading": "Erreur",
|
|
84
|
+
"dashboard.profile_summary": "Résumé du profil",
|
|
85
|
+
"dashboard.account_status": "État du compte",
|
|
86
|
+
"dashboard.status": "Statut",
|
|
87
|
+
"dashboard.active": "Actif",
|
|
88
|
+
"dashboard.profile": "Profil",
|
|
89
|
+
"dashboard.completed": "Complété",
|
|
90
|
+
"dashboard.member_since": "Membre depuis",
|
|
91
|
+
"profile.title": "Mon profil",
|
|
92
|
+
"profile.loading": "Chargement du profil...",
|
|
93
|
+
"profile.error_loading": "Erreur lors du chargement du profil",
|
|
94
|
+
"profile.first_name": "Prénom",
|
|
95
|
+
"profile.last_name": "Nom",
|
|
96
|
+
"profile.phone": "Téléphone",
|
|
97
|
+
"profile.company": "Entreprise",
|
|
98
|
+
"profile.website": "Site web",
|
|
99
|
+
"profile.location": "Localisation",
|
|
100
|
+
"profile.bio": "Bio",
|
|
101
|
+
"profile.bio_placeholder": "Parlez-nous de vous",
|
|
102
|
+
"profile.avatar": "Photo de profil",
|
|
103
|
+
"profile.save": "Enregistrer",
|
|
104
|
+
"profile.saving": "Enregistrement en cours...",
|
|
105
|
+
"profile.success": "Succès",
|
|
106
|
+
"profile.updated": "Profil mis à jour avec succès",
|
|
107
|
+
"profile.success_title": "Succès",
|
|
108
|
+
"profile.personal_info": "Informations personnelles",
|
|
109
|
+
"profile.edit": "Modifier le profil",
|
|
110
|
+
"profile.first_name_placeholder": "Entrez votre prénom",
|
|
111
|
+
"profile.last_name_placeholder": "Entrez votre nom",
|
|
112
|
+
"profile.phone_placeholder": "Entrez votre numéro de téléphone",
|
|
113
|
+
"profile.professional_info": "Informations professionnelles",
|
|
114
|
+
"profile.company_placeholder": "Entrez le nom de votre entreprise",
|
|
115
|
+
"profile.website_placeholder": "https://example.com",
|
|
116
|
+
"profile.location_placeholder": "Ville, Pays",
|
|
117
|
+
"profile.preferences": "Préférences",
|
|
118
|
+
"profile.language": "Langue",
|
|
119
|
+
"profile.language_placeholder": "en, fr, es...",
|
|
120
|
+
"profile.timezone": "Fuseau horaire",
|
|
121
|
+
"profile.timezone_placeholder": "Europe/Paris, America/New_York...",
|
|
122
|
+
"profile.error": "Erreur",
|
|
123
|
+
"profile.update_failed": "Impossible de mettre à jour le profil",
|
|
124
|
+
"profile.error_title": "Erreur",
|
|
125
|
+
"profile.error_description": "Erreur lors de la mise à jour du profil",
|
|
126
|
+
"profile.cancel_button": "Annuler",
|
|
127
|
+
"profile.save_button": "Enregistrer les modifications",
|
|
128
|
+
"settings.title": "Paramètres",
|
|
129
|
+
"settings.loading": "Chargement des paramètres...",
|
|
130
|
+
"settings.error": "Erreur lors du chargement des paramètres",
|
|
131
|
+
"settings.notifications": "Notifications",
|
|
132
|
+
"settings.email_notifications": "Notifications par email",
|
|
133
|
+
"settings.push_notifications": "Notifications push",
|
|
134
|
+
"settings.marketing_emails": "Emails marketing",
|
|
135
|
+
"settings.preferences": "Préférences",
|
|
136
|
+
"settings.language": "Langue",
|
|
137
|
+
"settings.timezone": "Fuseau horaire",
|
|
138
|
+
"settings.theme": "Thème",
|
|
139
|
+
"settings.save": "Enregistrer",
|
|
140
|
+
"settings.saving": "Enregistrement en cours...",
|
|
141
|
+
"settings.success_title": "Succès",
|
|
142
|
+
"settings.success_description": "Paramètres mis à jour avec succès",
|
|
143
|
+
"settings.error_title": "Erreur",
|
|
144
|
+
"settings.error_description": "Erreur lors de la mise à jour des paramètres",
|
|
145
|
+
"users.title": "Gestion des utilisateurs",
|
|
146
|
+
"users.search_placeholder": "Rechercher par email ou nom",
|
|
147
|
+
"users.loading": "Chargement des utilisateurs...",
|
|
148
|
+
"users.error": "Erreur lors du chargement des utilisateurs",
|
|
149
|
+
"users.user_id": "ID utilisateur",
|
|
150
|
+
"users.name": "Nom",
|
|
151
|
+
"users.created_at": "Date d'inscription",
|
|
152
|
+
"users.last_sign_in": "Dernière connexion",
|
|
153
|
+
"users.role": "Rôle",
|
|
154
|
+
"users.actions": "Actions",
|
|
155
|
+
"users.view": "Voir les détails",
|
|
156
|
+
"users.refresh": "Actualiser",
|
|
157
|
+
"signup_stats.title": "Statistiques d'inscriptions",
|
|
158
|
+
"signup_stats.loading": "Chargement des statistiques...",
|
|
159
|
+
"signup_stats.error": "Erreur de chargement",
|
|
160
|
+
"signup_stats.total": "Total d'inscriptions",
|
|
161
|
+
"signup_stats.lastbrain": "Inscriptions LastBrain",
|
|
162
|
+
"signup_stats.recipe": "Inscriptions Recipe",
|
|
163
|
+
"reset_password.title": "Réinitialiser le mot de passe",
|
|
164
|
+
"reset_password.subtitle": "Entrez votre email pour recevoir un lien de réinitialisation",
|
|
165
|
+
"reset_password.email_placeholder": "votre@email.com",
|
|
166
|
+
"reset_password.submit": "Envoyer le lien",
|
|
167
|
+
"reset_password.success": "Vérifiez votre email pour le lien de réinitialisation",
|
|
168
|
+
"reset_password.error": "Erreur lors de l'envoi du lien",
|
|
169
|
+
"reset_password.back_to_signin": "Retour à la connexion",
|
|
170
|
+
"folder.loading": "Chargement du dossier...",
|
|
171
|
+
"folder.error": "Erreur",
|
|
172
|
+
"folder.title": "Dossier",
|
|
173
|
+
"users_by_source.title": "Utilisateurs par source d'inscription",
|
|
174
|
+
"users_by_source.search_placeholder": "Rechercher par email ou nom...",
|
|
175
|
+
"users_by_source.filter_label": "Filtrer par source",
|
|
176
|
+
"users_by_source.all_sources": "Toutes les sources",
|
|
177
|
+
"users_by_source.source_lastbrain": "LastBrain",
|
|
178
|
+
"users_by_source.source_recipe": "Recipe",
|
|
179
|
+
"users_by_source.showing": "Affichage de",
|
|
180
|
+
"users_by_source.of": "sur",
|
|
181
|
+
"users_by_source.users": "utilisateurs",
|
|
182
|
+
"users_by_source.list_title": "Liste des utilisateurs",
|
|
183
|
+
"users_by_source.loading": "Chargement...",
|
|
184
|
+
"users_by_source.table_aria_label": "Tableau des utilisateurs",
|
|
185
|
+
"users_by_source.column_name": "Nom",
|
|
186
|
+
"users_by_source.column_email": "Email",
|
|
187
|
+
"users_by_source.column_source": "Source",
|
|
188
|
+
"users_by_source.column_signup_date": "Date d'inscription",
|
|
189
|
+
"users_by_source.recipe": "Recipe",
|
|
190
|
+
"users_by_source.lastbrain": "LastBrain",
|
|
191
|
+
"users_by_source.no_users": "Aucun utilisateur trouvé",
|
|
192
|
+
"users_by_source.loading_error": "Erreur lors du chargement des utilisateurs",
|
|
193
|
+
"users_by_source.loading_error_generic": "Erreur lors du chargement",
|
|
194
|
+
"user_detail.user_not_found_error": "Utilisateur non trouvé",
|
|
195
|
+
"user_detail.profile_loading_error": "Erreur lors du chargement du profil:",
|
|
196
|
+
"user_detail.fill_title_message": "Veuillez remplir le titre et le message",
|
|
197
|
+
"user_detail.notification_sent_success": "Notification envoyée avec succès",
|
|
198
|
+
"user_detail.notification_send_error": "Erreur lors de l'envoi de la notification",
|
|
199
|
+
"user_detail.user_not_found": "Utilisateur non trouvé",
|
|
200
|
+
"user_detail.last_login": "Dernière connexion:",
|
|
201
|
+
"user_detail.not_available": "N/A",
|
|
202
|
+
"user_detail.at": "à",
|
|
203
|
+
"user_detail.administrator": "Administrateur",
|
|
204
|
+
"user_detail.user": "Utilisateur",
|
|
205
|
+
"user_detail.source_recipe": "Recipe",
|
|
206
|
+
"user_detail.source_lastbrain": "LastBrain",
|
|
207
|
+
"user_detail.user_options": "Options utilisateur",
|
|
208
|
+
"user_detail.tab_profile": "Profil",
|
|
209
|
+
"user_detail.identity_section": "Identité",
|
|
210
|
+
"user_detail.full_name": "Nom complet",
|
|
211
|
+
"user_detail.not_provided": "Non renseigné",
|
|
212
|
+
"user_detail.first_name": "Prénom",
|
|
213
|
+
"user_detail.last_name": "Nom",
|
|
214
|
+
"user_detail.email": "Email",
|
|
215
|
+
"user_detail.phone": "Téléphone",
|
|
216
|
+
"user_detail.bio": "Bio",
|
|
217
|
+
"user_detail.professional_info": "Informations professionnelles",
|
|
218
|
+
"user_detail.company": "Entreprise",
|
|
219
|
+
"user_detail.website": "Site web",
|
|
220
|
+
"user_detail.location": "Localisation",
|
|
221
|
+
"user_detail.preferences": "Préférences",
|
|
222
|
+
"user_detail.language": "Langue",
|
|
223
|
+
"user_detail.timezone": "Fuseau horaire",
|
|
224
|
+
"user_detail.account_info": "Informations du compte",
|
|
225
|
+
"user_detail.role": "Rôle",
|
|
226
|
+
"user_detail.standard_user": "Utilisateur standard",
|
|
227
|
+
"user_detail.creation_date": "Date de création",
|
|
228
|
+
"user_detail.never": "Jamais",
|
|
229
|
+
"user_detail.tab_notifications": "Notifications",
|
|
230
|
+
"user_detail.send_notification": "Envoyer une notification",
|
|
231
|
+
"user_detail.notification_title": "Titre de la notification",
|
|
232
|
+
"user_detail.notification_title_placeholder": "Ex: Nouveau message important",
|
|
233
|
+
"user_detail.notification_message": "Message",
|
|
234
|
+
"user_detail.notification_message_placeholder": "Contenu de la notification...",
|
|
235
|
+
"user_detail.notification_type": "Type de notification",
|
|
236
|
+
"user_detail.notification_type_info": "Information",
|
|
237
|
+
"user_detail.notification_type_warning": "Avertissement",
|
|
238
|
+
"user_detail.notification_type_danger": "Danger",
|
|
239
|
+
"user_detail.notification_type_success": "Succès",
|
|
240
|
+
"user_detail.send_button": "Envoyer la notification",
|
|
241
|
+
"user_detail.tab_settings": "Paramètres",
|
|
242
|
+
"user_detail.admin_actions": "Actions administrateur",
|
|
243
|
+
"user_detail.reset_password_btn": "Réinitialiser le mot de passe",
|
|
244
|
+
"user_detail.suspend_account_btn": "Suspendre le compte",
|
|
245
|
+
"user_detail.promote_admin_btn": "Promouvoir en administrateur",
|
|
246
|
+
"user_detail.technical_metadata": "Métadonnées techniques",
|
|
247
|
+
"users.search_button": "Rechercher",
|
|
248
|
+
"users.refresh_button": "Rafraîchir",
|
|
249
|
+
"users.loading_users": "Chargement des utilisateurs...",
|
|
250
|
+
"users.no_users_found": "Aucun utilisateur trouvé",
|
|
251
|
+
"users.table_aria_label": "Tableau des utilisateurs",
|
|
252
|
+
"users.column_user": "UTILISATEUR",
|
|
253
|
+
"users.column_email": "EMAIL",
|
|
254
|
+
"users.column_role": "RÔLE",
|
|
255
|
+
"users.column_last_sign_in": "DERNIÈRE CONNEXION",
|
|
256
|
+
"users.column_created": "CREÉ",
|
|
257
|
+
"users.column_actions": "ACTIONS",
|
|
258
|
+
"users.never": "Jamais",
|
|
259
|
+
"users.view_button": "Voir",
|
|
260
|
+
"users.showing_results": "Affichage de {{count}} sur {{total}} utilisateurs"
|
|
261
|
+
}
|
|
@@ -17,6 +17,7 @@ import {
|
|
|
17
17
|
Tabs,
|
|
18
18
|
} from "@lastbrain/ui";
|
|
19
19
|
import { BarChart3, TrendingUp } from "lucide-react";
|
|
20
|
+
import { useModuleTranslation } from "@lastbrain/core";
|
|
20
21
|
|
|
21
22
|
interface SignupStats {
|
|
22
23
|
total: number;
|
|
@@ -33,6 +34,7 @@ interface SignupStats {
|
|
|
33
34
|
}
|
|
34
35
|
|
|
35
36
|
export function SignupStatsPage() {
|
|
37
|
+
const t = useModuleTranslation("auth");
|
|
36
38
|
const [stats, setStats] = useState<SignupStats | null>(null);
|
|
37
39
|
const [loading, setLoading] = useState(true);
|
|
38
40
|
const [error, setError] = useState<string | null>(null);
|
|
@@ -64,7 +66,10 @@ export function SignupStatsPage() {
|
|
|
64
66
|
if (loading) {
|
|
65
67
|
return (
|
|
66
68
|
<div className="flex justify-center items-center min-h-screen">
|
|
67
|
-
<Spinner
|
|
69
|
+
<Spinner
|
|
70
|
+
size="lg"
|
|
71
|
+
label={t("signup_stats.loading") || "Chargement des statistiques..."}
|
|
72
|
+
/>
|
|
68
73
|
</div>
|
|
69
74
|
);
|
|
70
75
|
}
|
|
@@ -95,7 +100,9 @@ export function SignupStatsPage() {
|
|
|
95
100
|
{/* Header */}
|
|
96
101
|
<div className="flex items-center gap-2 mb-8">
|
|
97
102
|
<BarChart3 size={28} className="text-primary-600" />
|
|
98
|
-
<h1 className="text-3xl font-bold">
|
|
103
|
+
<h1 className="text-3xl font-bold">
|
|
104
|
+
{t("signup_stats.title") || "Statistiques d'inscriptions"}
|
|
105
|
+
</h1>
|
|
99
106
|
</div>
|
|
100
107
|
|
|
101
108
|
{/* Key Metrics Cards */}
|
|
@@ -105,7 +112,7 @@ export function SignupStatsPage() {
|
|
|
105
112
|
<CardBody className="gap-4">
|
|
106
113
|
<div className="flex items-center justify-between">
|
|
107
114
|
<span className="text-sm font-medium text-primary-600 dark:text-primary-400">
|
|
108
|
-
Total d'inscriptions
|
|
115
|
+
{t("signup_stats.total") || "Total d'inscriptions"}
|
|
109
116
|
</span>
|
|
110
117
|
<TrendingUp size={20} className="text-primary-600" />
|
|
111
118
|
</div>
|