@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/auth.build.config.ts
CHANGED
|
@@ -141,8 +141,8 @@ const authBuildConfig: ModuleBuildConfig = {
|
|
|
141
141
|
menu: {
|
|
142
142
|
public: [
|
|
143
143
|
{
|
|
144
|
-
title: "
|
|
145
|
-
description: "
|
|
144
|
+
title: "module-auth.menu.notifications",
|
|
145
|
+
description: "module-auth.menu.notifications_desc",
|
|
146
146
|
icon: "Bell",
|
|
147
147
|
path: "#",
|
|
148
148
|
order: 998,
|
|
@@ -151,8 +151,8 @@ const authBuildConfig: ModuleBuildConfig = {
|
|
|
151
151
|
componentExport: "NotificationButton",
|
|
152
152
|
},
|
|
153
153
|
{
|
|
154
|
-
title: "
|
|
155
|
-
description: "
|
|
154
|
+
title: "module-auth.menu.account",
|
|
155
|
+
description: "module-auth.menu.account_desc",
|
|
156
156
|
icon: "User",
|
|
157
157
|
path: "#",
|
|
158
158
|
order: 999,
|
|
@@ -161,8 +161,8 @@ const authBuildConfig: ModuleBuildConfig = {
|
|
|
161
161
|
componentExport: "AccountButton",
|
|
162
162
|
},
|
|
163
163
|
{
|
|
164
|
-
title: "
|
|
165
|
-
description: "
|
|
164
|
+
title: "module-auth.menu.theme",
|
|
165
|
+
description: "module-auth.menu.theme_desc",
|
|
166
166
|
icon: "Palette",
|
|
167
167
|
path: "#",
|
|
168
168
|
order: 9999,
|
|
@@ -173,8 +173,8 @@ const authBuildConfig: ModuleBuildConfig = {
|
|
|
173
173
|
],
|
|
174
174
|
admin: [
|
|
175
175
|
{
|
|
176
|
-
title: "
|
|
177
|
-
description: "
|
|
176
|
+
title: "module-auth.menu.users_management",
|
|
177
|
+
description: "module-auth.menu.users_management_desc",
|
|
178
178
|
icon: "Users2",
|
|
179
179
|
path: "/admin/auth/users",
|
|
180
180
|
order: 1,
|
|
@@ -182,16 +182,16 @@ const authBuildConfig: ModuleBuildConfig = {
|
|
|
182
182
|
shortcutDisplay: "⌘⇧U",
|
|
183
183
|
},
|
|
184
184
|
{
|
|
185
|
-
title: "
|
|
186
|
-
description: "
|
|
185
|
+
title: "module-auth.menu.signup_stats",
|
|
186
|
+
description: "module-auth.menu.signup_stats_desc",
|
|
187
187
|
icon: "UserStar",
|
|
188
188
|
path: "/admin/auth/signup-stats",
|
|
189
189
|
order: 2,
|
|
190
190
|
},
|
|
191
191
|
|
|
192
192
|
{
|
|
193
|
-
title: "
|
|
194
|
-
description: "
|
|
193
|
+
title: "module-auth.menu.notifications",
|
|
194
|
+
description: "module-auth.menu.notifications_desc",
|
|
195
195
|
icon: "Bell",
|
|
196
196
|
path: "#",
|
|
197
197
|
order: 998,
|
|
@@ -200,8 +200,8 @@ const authBuildConfig: ModuleBuildConfig = {
|
|
|
200
200
|
componentExport: "NotificationButton",
|
|
201
201
|
},
|
|
202
202
|
{
|
|
203
|
-
title: "
|
|
204
|
-
description: "
|
|
203
|
+
title: "module-auth.menu.account",
|
|
204
|
+
description: "module-auth.menu.account_desc",
|
|
205
205
|
icon: "User",
|
|
206
206
|
path: "#",
|
|
207
207
|
order: 999,
|
|
@@ -210,8 +210,8 @@ const authBuildConfig: ModuleBuildConfig = {
|
|
|
210
210
|
componentExport: "AccountButton",
|
|
211
211
|
},
|
|
212
212
|
{
|
|
213
|
-
title: "
|
|
214
|
-
description: "
|
|
213
|
+
title: "module-auth.menu.theme",
|
|
214
|
+
description: "module-auth.menu.theme_desc",
|
|
215
215
|
icon: "Palette",
|
|
216
216
|
path: "#",
|
|
217
217
|
order: 9999,
|
|
@@ -222,8 +222,8 @@ const authBuildConfig: ModuleBuildConfig = {
|
|
|
222
222
|
],
|
|
223
223
|
auth: [
|
|
224
224
|
{
|
|
225
|
-
title: "
|
|
226
|
-
description: "
|
|
225
|
+
title: "module-auth.menu.dashboard",
|
|
226
|
+
description: "module-auth.menu.dashboard_desc",
|
|
227
227
|
icon: "LayoutDashboard",
|
|
228
228
|
path: "/auth/dashboard",
|
|
229
229
|
order: 1,
|
|
@@ -231,17 +231,17 @@ const authBuildConfig: ModuleBuildConfig = {
|
|
|
231
231
|
shortcutDisplay: "⌘⇧D",
|
|
232
232
|
},
|
|
233
233
|
{
|
|
234
|
-
title: "
|
|
235
|
-
description: "
|
|
234
|
+
title: "module-auth.menu.folder",
|
|
235
|
+
description: "module-auth.menu.folder_desc",
|
|
236
236
|
icon: "FolderOpen",
|
|
237
237
|
path: "/auth/folder",
|
|
238
|
-
order:
|
|
238
|
+
order: 99,
|
|
239
239
|
shortcut: "cmd+shift+f",
|
|
240
240
|
shortcutDisplay: "⌘⇧F",
|
|
241
241
|
},
|
|
242
242
|
{
|
|
243
|
-
title: "
|
|
244
|
-
description: "
|
|
243
|
+
title: "module-auth.menu.notifications",
|
|
244
|
+
description: "module-auth.menu.notifications_desc",
|
|
245
245
|
icon: "Bell",
|
|
246
246
|
path: "#",
|
|
247
247
|
order: 998,
|
|
@@ -250,8 +250,8 @@ const authBuildConfig: ModuleBuildConfig = {
|
|
|
250
250
|
componentExport: "NotificationButton",
|
|
251
251
|
},
|
|
252
252
|
{
|
|
253
|
-
title: "
|
|
254
|
-
description: "
|
|
253
|
+
title: "module-auth.menu.account",
|
|
254
|
+
description: "module-auth.menu.account_desc",
|
|
255
255
|
icon: "User",
|
|
256
256
|
path: "#",
|
|
257
257
|
order: 999,
|
|
@@ -260,8 +260,8 @@ const authBuildConfig: ModuleBuildConfig = {
|
|
|
260
260
|
componentExport: "AccountButton",
|
|
261
261
|
},
|
|
262
262
|
{
|
|
263
|
-
title: "
|
|
264
|
-
description: "
|
|
263
|
+
title: "module-auth.menu.theme",
|
|
264
|
+
description: "module-auth.menu.theme_desc",
|
|
265
265
|
icon: "Palette",
|
|
266
266
|
path: "#",
|
|
267
267
|
order: 9999,
|
|
@@ -272,8 +272,8 @@ const authBuildConfig: ModuleBuildConfig = {
|
|
|
272
272
|
],
|
|
273
273
|
account: [
|
|
274
274
|
{
|
|
275
|
-
title: "
|
|
276
|
-
description: "
|
|
275
|
+
title: "module-auth.menu.profile",
|
|
276
|
+
description: "module-auth.menu.profile_desc",
|
|
277
277
|
icon: "User2",
|
|
278
278
|
path: "/auth/profile",
|
|
279
279
|
order: 1,
|
|
@@ -281,8 +281,8 @@ const authBuildConfig: ModuleBuildConfig = {
|
|
|
281
281
|
shortcutDisplay: "⌘⇧P",
|
|
282
282
|
},
|
|
283
283
|
{
|
|
284
|
-
title: "
|
|
285
|
-
description: "
|
|
284
|
+
title: "module-auth.menu.settings",
|
|
285
|
+
description: "module-auth.menu.settings_desc",
|
|
286
286
|
icon: "Settings",
|
|
287
287
|
path: "/auth/reglage",
|
|
288
288
|
order: 2,
|
|
@@ -290,8 +290,8 @@ const authBuildConfig: ModuleBuildConfig = {
|
|
|
290
290
|
shortcutDisplay: "⌘⇧S",
|
|
291
291
|
},
|
|
292
292
|
{
|
|
293
|
-
title: "
|
|
294
|
-
description: "
|
|
293
|
+
title: "module-auth.menu.signout",
|
|
294
|
+
description: "module-auth.menu.signout",
|
|
295
295
|
icon: "LogOut",
|
|
296
296
|
path: "/signout",
|
|
297
297
|
order: 99,
|
|
@@ -308,22 +308,8 @@ const authBuildConfig: ModuleBuildConfig = {
|
|
|
308
308
|
filter: "owner_id=eq.${USER_ID}",
|
|
309
309
|
broadcast: "user_notifications_updated",
|
|
310
310
|
},
|
|
311
|
-
{
|
|
312
|
-
schema: "public",
|
|
313
|
-
table: "user_profil",
|
|
314
|
-
event: "*",
|
|
315
|
-
filter: "owner_id=eq.${USER_ID}",
|
|
316
|
-
broadcast: "user_profil_updated",
|
|
317
|
-
},
|
|
318
|
-
{
|
|
319
|
-
schema: "public",
|
|
320
|
-
table: "user_addresses",
|
|
321
|
-
event: "*",
|
|
322
|
-
filter: "owner_id=eq.${USER_ID}",
|
|
323
|
-
broadcast: "user_address_updated",
|
|
324
|
-
},
|
|
325
311
|
],
|
|
326
|
-
},
|
|
312
|
+
},
|
|
327
313
|
storage: {
|
|
328
314
|
buckets: [
|
|
329
315
|
{
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { AppLink, Button } from "@lastbrain/ui";
|
|
4
4
|
import { Avatar } from "@lastbrain/ui";
|
|
5
5
|
import {
|
|
6
6
|
Dropdown,
|
|
@@ -10,6 +10,8 @@ import {
|
|
|
10
10
|
} from "@lastbrain/ui";
|
|
11
11
|
import * as LucideIcons from "lucide-react";
|
|
12
12
|
import type { User } from "@supabase/supabase-js";
|
|
13
|
+
import { useModuleTranslation, langHref } from "@lastbrain/app";
|
|
14
|
+
import { useLanguage } from "@lastbrain/app";
|
|
13
15
|
|
|
14
16
|
interface AccountButtonProps {
|
|
15
17
|
item: {
|
|
@@ -38,12 +40,15 @@ export const AccountButton = ({
|
|
|
38
40
|
accountMenu = [],
|
|
39
41
|
onLogout,
|
|
40
42
|
}: AccountButtonProps) => {
|
|
43
|
+
const { lang } = useLanguage();
|
|
44
|
+
const t = useModuleTranslation("auth");
|
|
45
|
+
|
|
41
46
|
if (!user)
|
|
42
47
|
return (
|
|
43
48
|
<>
|
|
44
49
|
<div className="block md:hidden">
|
|
45
50
|
<Button
|
|
46
|
-
as={
|
|
51
|
+
as={AppLink}
|
|
47
52
|
href="/signin"
|
|
48
53
|
radius="full"
|
|
49
54
|
isIconOnly
|
|
@@ -53,7 +58,7 @@ export const AccountButton = ({
|
|
|
53
58
|
<LucideIcons.LogIn size={16} />
|
|
54
59
|
</Button>
|
|
55
60
|
<Button
|
|
56
|
-
as={
|
|
61
|
+
as={AppLink}
|
|
57
62
|
href="/signup"
|
|
58
63
|
radius="full"
|
|
59
64
|
isIconOnly
|
|
@@ -66,23 +71,23 @@ export const AccountButton = ({
|
|
|
66
71
|
</div>
|
|
67
72
|
<div className="hidden md:block">
|
|
68
73
|
<Button
|
|
69
|
-
as={
|
|
74
|
+
as={AppLink}
|
|
70
75
|
href="/signin"
|
|
71
76
|
startContent={<LucideIcons.LogIn size={16} />}
|
|
72
77
|
variant="light"
|
|
73
78
|
color="primary"
|
|
74
79
|
>
|
|
75
|
-
|
|
80
|
+
{t("signin")}
|
|
76
81
|
</Button>
|
|
77
82
|
<Button
|
|
78
|
-
as={
|
|
83
|
+
as={AppLink}
|
|
79
84
|
href="/signup"
|
|
80
85
|
variant="flat"
|
|
81
86
|
className="ml-2"
|
|
82
87
|
color="secondary"
|
|
83
88
|
startContent={<LucideIcons.UserPlus2 size={16} />}
|
|
84
89
|
>
|
|
85
|
-
|
|
90
|
+
{t("signup")}
|
|
86
91
|
</Button>
|
|
87
92
|
</div>
|
|
88
93
|
</>
|
|
@@ -117,7 +122,9 @@ export const AccountButton = ({
|
|
|
117
122
|
items={[
|
|
118
123
|
{
|
|
119
124
|
key: "hello",
|
|
120
|
-
label:
|
|
125
|
+
label: `${t("hello")} ${
|
|
126
|
+
user?.user_metadata?.full_name || user.email
|
|
127
|
+
}`,
|
|
121
128
|
isReadOnly: true,
|
|
122
129
|
},
|
|
123
130
|
...accountMenu.map((item) => ({
|
|
@@ -130,7 +137,7 @@ export const AccountButton = ({
|
|
|
130
137
|
href:
|
|
131
138
|
item.path.includes("signout") || item.path.includes("logout")
|
|
132
139
|
? undefined
|
|
133
|
-
: item.path,
|
|
140
|
+
: langHref(item.path, lang),
|
|
134
141
|
})),
|
|
135
142
|
]}
|
|
136
143
|
>
|
|
@@ -151,7 +158,7 @@ export const AccountButton = ({
|
|
|
151
158
|
href={item.href}
|
|
152
159
|
onPress={item.isLogout ? () => onLogout?.() : undefined}
|
|
153
160
|
color={item.isLogout ? "danger" : "default"}
|
|
154
|
-
description={item.description}
|
|
161
|
+
description={!item.isLogout && item.description}
|
|
155
162
|
startContent={Icon && <Icon size={16} />}
|
|
156
163
|
isDisabled={item.isReadOnly}
|
|
157
164
|
isReadOnly={item.isReadOnly}
|
package/src/i18n/en.json
ADDED
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
{
|
|
2
|
+
"welcome": "Welcome",
|
|
3
|
+
"signin": "Sign in",
|
|
4
|
+
"signup": "Sign up",
|
|
5
|
+
"signout": "Sign out",
|
|
6
|
+
"email": "Email",
|
|
7
|
+
"password": "Password",
|
|
8
|
+
"submit": "Submit",
|
|
9
|
+
"cancel": "Cancel",
|
|
10
|
+
"save": "Save",
|
|
11
|
+
"delete": "Delete",
|
|
12
|
+
"edit": "Edit",
|
|
13
|
+
"back": "Back",
|
|
14
|
+
"loading": "Loading...",
|
|
15
|
+
"error": "Error",
|
|
16
|
+
"success": "Success",
|
|
17
|
+
"hello": "Hello",
|
|
18
|
+
"menu.notifications": "Notifications",
|
|
19
|
+
"menu.notifications_desc": "Your notifications",
|
|
20
|
+
"menu.account": "Account",
|
|
21
|
+
"menu.account_desc": "Manage your account",
|
|
22
|
+
"menu.theme": "Theme",
|
|
23
|
+
"menu.theme_desc": "Change the theme",
|
|
24
|
+
"menu.dashboard": "Dashboard",
|
|
25
|
+
"menu.dashboard_desc": "Access your dashboard",
|
|
26
|
+
"menu.folder": "Folder",
|
|
27
|
+
"menu.folder_desc": "Access your personal folder",
|
|
28
|
+
"menu.users_management": "User Management",
|
|
29
|
+
"menu.users_management_desc": "Manage platform users",
|
|
30
|
+
"menu.signup_stats": "Signup Statistics",
|
|
31
|
+
"menu.signup_stats_desc": "Track signups by source",
|
|
32
|
+
"menu.signout": "Sign out",
|
|
33
|
+
"menu.settings": "Settings",
|
|
34
|
+
"menu.settings_desc": "Configure your account",
|
|
35
|
+
"menu.profile": "My Profile",
|
|
36
|
+
"menu.profile_desc": "Manage your personal information",
|
|
37
|
+
"menu.admin-panel": "Admin Panel",
|
|
38
|
+
"menu.administration": "Administration",
|
|
39
|
+
"menu.my-space": "My Space",
|
|
40
|
+
"menu.menu": "Menu",
|
|
41
|
+
"menu.open": "Open",
|
|
42
|
+
"menu.public": "Public Pages",
|
|
43
|
+
"menu.close": "Close",
|
|
44
|
+
"signin.title": "Welcome back",
|
|
45
|
+
"signin.subtitle": "Sign in to access your space",
|
|
46
|
+
"signin.email_placeholder": "your@email.com",
|
|
47
|
+
"signin.password_placeholder": "Password",
|
|
48
|
+
"signin.submit": "Sign in",
|
|
49
|
+
"signin.accept_terms": "By signing in, you agree to our",
|
|
50
|
+
"signin.term": "terms of use",
|
|
51
|
+
"signup.terms": "terms of use",
|
|
52
|
+
|
|
53
|
+
"signup.legal_prefix": "By signing up, you agree to our",
|
|
54
|
+
"signup.legal_and": "and our",
|
|
55
|
+
"signup.privacy": "privacy policy",
|
|
56
|
+
"signin.forgot_password": "Forgot password?",
|
|
57
|
+
"signin.no_account": "Don't have an account?",
|
|
58
|
+
"signin.sign_up": "Sign up",
|
|
59
|
+
"signin.error_title": "Sign in error",
|
|
60
|
+
"signin.success_title": "Successfully signed in!",
|
|
61
|
+
"signin.success_welcome": "Welcome",
|
|
62
|
+
"signin.chip_label": "Member area",
|
|
63
|
+
"signup.title": "Get started for free",
|
|
64
|
+
"signup.subtitle": "Create your account in seconds",
|
|
65
|
+
"signup.chip_label": "Join us",
|
|
66
|
+
"signup.full_name": "Full name",
|
|
67
|
+
"signup.password_hint": "Minimum 6 characters",
|
|
68
|
+
"signup.full_name_placeholder": "John Doe",
|
|
69
|
+
"signup.email_placeholder": "your@email.com",
|
|
70
|
+
"signup.password": "Password",
|
|
71
|
+
"signup.confirm_password": "Confirm password",
|
|
72
|
+
"signup.submit": "Sign up",
|
|
73
|
+
"signup.have_account": "Already have an account?",
|
|
74
|
+
"signup.sign_in": "Sign in",
|
|
75
|
+
"signup.password_mismatch": "Passwords do not match.",
|
|
76
|
+
"signup.password_too_short": "Password must be at least 6 characters long.",
|
|
77
|
+
"signup.success_confirmation": "Account created successfully! Please check your email to confirm your account.",
|
|
78
|
+
"signup.success_login": "Account created. You can now sign in.",
|
|
79
|
+
"signup.error_title": "Error",
|
|
80
|
+
"singup.or": "OR",
|
|
81
|
+
"signup.error_unexpected": "An unexpected error occurred.",
|
|
82
|
+
"dashboard.title": "Dashboard",
|
|
83
|
+
"dashboard.loading": "Loading dashboard...",
|
|
84
|
+
"dashboard.error_loading": "Error",
|
|
85
|
+
"dashboard.profile_summary": "Profile Summary",
|
|
86
|
+
"dashboard.account_status": "Account Status",
|
|
87
|
+
"dashboard.status": "Status",
|
|
88
|
+
"dashboard.active": "Active",
|
|
89
|
+
"dashboard.profile": "Profile",
|
|
90
|
+
"dashboard.completed": "Completed",
|
|
91
|
+
"dashboard.member_since": "Member since",
|
|
92
|
+
"profile.title": "My Profile",
|
|
93
|
+
"profile.loading": "Loading profile...",
|
|
94
|
+
"profile.error_loading": "Error loading profile",
|
|
95
|
+
"profile.first_name": "First name",
|
|
96
|
+
"profile.last_name": "Last name",
|
|
97
|
+
"profile.phone": "Phone",
|
|
98
|
+
"profile.company": "Company",
|
|
99
|
+
"profile.website": "Website",
|
|
100
|
+
"profile.location": "Location",
|
|
101
|
+
"profile.bio": "Bio",
|
|
102
|
+
"profile.bio_placeholder": "Tell us about yourself",
|
|
103
|
+
"profile.personal_info": "Personal Information",
|
|
104
|
+
"profile.edit": "Edit Profile",
|
|
105
|
+
"profile.first_name_placeholder": "Enter your first name",
|
|
106
|
+
"profile.last_name_placeholder": "Enter your last name",
|
|
107
|
+
"profile.phone_placeholder": "Enter your phone number",
|
|
108
|
+
"profile.professional_info": "Professional Information",
|
|
109
|
+
"profile.company_placeholder": "Enter your company name",
|
|
110
|
+
"profile.website_placeholder": "https://example.com",
|
|
111
|
+
"profile.location_placeholder": "City, Country",
|
|
112
|
+
"profile.preferences": "Preferences",
|
|
113
|
+
"profile.language": "Language",
|
|
114
|
+
"profile.language_placeholder": "en, fr, es...",
|
|
115
|
+
"profile.timezone": "Timezone",
|
|
116
|
+
"profile.timezone_placeholder": "Europe/Paris, America/New_York...",
|
|
117
|
+
"profile.avatar": "Profile picture",
|
|
118
|
+
"profile.save": "Save",
|
|
119
|
+
"profile.saving": "Saving...",
|
|
120
|
+
"profile.success": "Success",
|
|
121
|
+
"profile.updated": "Profile updated successfully",
|
|
122
|
+
"profile.success_title": "Success",
|
|
123
|
+
"profile.success_description": "Profile updated successfully",
|
|
124
|
+
"profile.error": "Error",
|
|
125
|
+
"profile.update_failed": "Failed to update profile",
|
|
126
|
+
"profile.error_title": "Error",
|
|
127
|
+
"profile.error_description": "Error updating profile",
|
|
128
|
+
"profile.cancel_button": "Cancel",
|
|
129
|
+
"profile.save_button": "Save Changes",
|
|
130
|
+
"settings.title": "Settings",
|
|
131
|
+
"settings.loading": "Loading settings...",
|
|
132
|
+
"settings.error": "Error loading settings",
|
|
133
|
+
"settings.notifications": "Notifications",
|
|
134
|
+
"settings.email_notifications": "Email notifications",
|
|
135
|
+
"settings.push_notifications": "Push notifications",
|
|
136
|
+
"settings.marketing_emails": "Marketing emails",
|
|
137
|
+
"settings.preferences": "Preferences",
|
|
138
|
+
"settings.language": "Language",
|
|
139
|
+
"settings.timezone": "Timezone",
|
|
140
|
+
"settings.theme": "Theme",
|
|
141
|
+
"settings.save": "Save",
|
|
142
|
+
"settings.saving": "Saving...",
|
|
143
|
+
"settings.success_title": "Success",
|
|
144
|
+
"settings.success_description": "Settings updated successfully",
|
|
145
|
+
"settings.error_title": "Error",
|
|
146
|
+
"settings.error_description": "Error updating settings",
|
|
147
|
+
"users.title": "User Management",
|
|
148
|
+
"users.search_placeholder": "Search by email or name",
|
|
149
|
+
"users.loading": "Loading users...",
|
|
150
|
+
"users.error": "Error loading users",
|
|
151
|
+
"users.user_id": "User ID",
|
|
152
|
+
"users.name": "Name",
|
|
153
|
+
"users.created_at": "Sign-up date",
|
|
154
|
+
"users.last_sign_in": "Last sign-in",
|
|
155
|
+
"users.role": "Role",
|
|
156
|
+
"users.actions": "Actions",
|
|
157
|
+
"users.view": "View details",
|
|
158
|
+
"users.refresh": "Refresh",
|
|
159
|
+
"signup_stats.title": "Sign-up Statistics",
|
|
160
|
+
"signup_stats.loading": "Loading statistics...",
|
|
161
|
+
"signup_stats.error": "Loading error",
|
|
162
|
+
"signup_stats.total": "Total signups",
|
|
163
|
+
"signup_stats.lastbrain": "LastBrain signups",
|
|
164
|
+
"signup_stats.recipe": "Recipe signups",
|
|
165
|
+
"reset_password.title": "Reset password",
|
|
166
|
+
"reset_password.subtitle": "Enter your email to receive a reset link",
|
|
167
|
+
"reset_password.email_placeholder": "your@email.com",
|
|
168
|
+
"reset_password.submit": "Send link",
|
|
169
|
+
"reset_password.success": "Check your email for the reset link",
|
|
170
|
+
"reset_password.error": "Error sending link",
|
|
171
|
+
"reset_password.back_to_signin": "Back to sign in",
|
|
172
|
+
"folder.loading": "Loading folder...",
|
|
173
|
+
"folder.error": "Error",
|
|
174
|
+
"folder.title": "Folder",
|
|
175
|
+
"users_by_source.title": "Users by signup source",
|
|
176
|
+
"users_by_source.search_placeholder": "Search by email or name...",
|
|
177
|
+
"users_by_source.filter_label": "Filter by source",
|
|
178
|
+
"users_by_source.all_sources": "All sources",
|
|
179
|
+
"users_by_source.source_lastbrain": "LastBrain",
|
|
180
|
+
"users_by_source.source_recipe": "Recipe",
|
|
181
|
+
"users_by_source.showing": "Showing",
|
|
182
|
+
"users_by_source.of": "of",
|
|
183
|
+
"users_by_source.users": "users",
|
|
184
|
+
"users_by_source.list_title": "Users list",
|
|
185
|
+
"users_by_source.loading": "Loading...",
|
|
186
|
+
"users_by_source.table_aria_label": "Users table",
|
|
187
|
+
"users_by_source.column_name": "Name",
|
|
188
|
+
"users_by_source.column_email": "Email",
|
|
189
|
+
"users_by_source.column_source": "Source",
|
|
190
|
+
"users_by_source.column_signup_date": "Signup date",
|
|
191
|
+
"users_by_source.recipe": "Recipe",
|
|
192
|
+
"users_by_source.lastbrain": "LastBrain",
|
|
193
|
+
"users_by_source.no_users": "No users found",
|
|
194
|
+
"users_by_source.loading_error": "Error loading users",
|
|
195
|
+
"users_by_source.loading_error_generic": "Error loading",
|
|
196
|
+
"user_detail.user_not_found_error": "User not found",
|
|
197
|
+
"user_detail.profile_loading_error": "Error loading profile:",
|
|
198
|
+
"user_detail.fill_title_message": "Please fill in the title and message",
|
|
199
|
+
"user_detail.notification_sent_success": "Notification sent successfully",
|
|
200
|
+
"user_detail.notification_send_error": "Error sending notification",
|
|
201
|
+
"user_detail.user_not_found": "User not found",
|
|
202
|
+
"user_detail.last_login": "Last login:",
|
|
203
|
+
"user_detail.not_available": "N/A",
|
|
204
|
+
"user_detail.at": "at",
|
|
205
|
+
"user_detail.administrator": "Administrator",
|
|
206
|
+
"user_detail.user": "User",
|
|
207
|
+
"user_detail.source_recipe": "Recipe",
|
|
208
|
+
"user_detail.source_lastbrain": "LastBrain",
|
|
209
|
+
"user_detail.user_options": "User options",
|
|
210
|
+
"user_detail.tab_profile": "Profile",
|
|
211
|
+
"user_detail.identity_section": "Identity",
|
|
212
|
+
"user_detail.full_name": "Full name",
|
|
213
|
+
"user_detail.not_provided": "Not provided",
|
|
214
|
+
"user_detail.first_name": "First name",
|
|
215
|
+
"user_detail.last_name": "Last name",
|
|
216
|
+
"user_detail.email": "Email",
|
|
217
|
+
"user_detail.phone": "Phone",
|
|
218
|
+
"user_detail.bio": "Bio",
|
|
219
|
+
"user_detail.professional_info": "Professional information",
|
|
220
|
+
"user_detail.company": "Company",
|
|
221
|
+
"user_detail.website": "Website",
|
|
222
|
+
"user_detail.location": "Location",
|
|
223
|
+
"user_detail.preferences": "Preferences",
|
|
224
|
+
"user_detail.language": "Language",
|
|
225
|
+
"user_detail.timezone": "Timezone",
|
|
226
|
+
"user_detail.account_info": "Account information",
|
|
227
|
+
"user_detail.role": "Role",
|
|
228
|
+
"user_detail.standard_user": "Standard user",
|
|
229
|
+
"user_detail.creation_date": "Creation date",
|
|
230
|
+
"user_detail.never": "Never",
|
|
231
|
+
"user_detail.tab_notifications": "Notifications",
|
|
232
|
+
"user_detail.send_notification": "Send notification",
|
|
233
|
+
"user_detail.notification_title": "Notification title",
|
|
234
|
+
"user_detail.notification_title_placeholder": "Ex: Important new message",
|
|
235
|
+
"user_detail.notification_message": "Message",
|
|
236
|
+
"user_detail.notification_message_placeholder": "Notification content...",
|
|
237
|
+
"user_detail.notification_type": "Notification type",
|
|
238
|
+
"user_detail.notification_type_info": "Information",
|
|
239
|
+
"user_detail.notification_type_warning": "Warning",
|
|
240
|
+
"user_detail.notification_type_danger": "Danger",
|
|
241
|
+
"user_detail.notification_type_success": "Success",
|
|
242
|
+
"user_detail.send_button": "Send notification",
|
|
243
|
+
"user_detail.tab_settings": "Settings",
|
|
244
|
+
"user_detail.admin_actions": "Admin actions",
|
|
245
|
+
"user_detail.reset_password_btn": "Reset password",
|
|
246
|
+
"user_detail.suspend_account_btn": "Suspend account",
|
|
247
|
+
"user_detail.promote_admin_btn": "Promote to administrator",
|
|
248
|
+
"user_detail.technical_metadata": "Technical metadata",
|
|
249
|
+
"users.search_button": "Search",
|
|
250
|
+
"users.refresh_button": "Refresh",
|
|
251
|
+
"users.loading_users": "Loading users...",
|
|
252
|
+
"users.no_users_found": "No users found",
|
|
253
|
+
"users.table_aria_label": "Users table",
|
|
254
|
+
"users.column_user": "USER",
|
|
255
|
+
"users.column_email": "EMAIL",
|
|
256
|
+
"users.column_role": "ROLE",
|
|
257
|
+
"users.column_last_sign_in": "LAST SIGN IN",
|
|
258
|
+
"users.column_created": "CREATED",
|
|
259
|
+
"users.column_actions": "ACTIONS",
|
|
260
|
+
"users.never": "Never",
|
|
261
|
+
"users.view_button": "View",
|
|
262
|
+
"users.showing_results": "Showing {{count}} of {{total}} users"
|
|
263
|
+
}
|