@burdenoff/microfe-auth 2026.830.1 → 2026.830.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auth/AuthRoot.js +43 -41
- package/dist/auth/AuthRoot.js.map +1 -1
- package/dist/auth/components/AuthLayout.js +65 -67
- package/dist/auth/components/AuthLayout.js.map +1 -1
- package/dist/auth/components/CaptchaV2.js +21 -24
- package/dist/auth/components/CaptchaV2.js.map +1 -1
- package/dist/auth/components/ConfirmActionDialog.js +33 -32
- package/dist/auth/components/ConfirmActionDialog.js.map +1 -1
- package/dist/auth/components/profile/UserProfileMenu.js +44 -46
- package/dist/auth/components/profile/UserProfileMenu.js.map +1 -1
- package/dist/auth/components/workspace/WorkspaceSelector.js +62 -68
- package/dist/auth/components/workspace/WorkspaceSelector.js.map +1 -1
- package/dist/auth/pages/AuditLogPage.js +65 -68
- package/dist/auth/pages/AuditLogPage.js.map +1 -1
- package/dist/auth/pages/EmailVerifyPage.js +51 -54
- package/dist/auth/pages/EmailVerifyPage.js.map +1 -1
- package/dist/auth/pages/LoginPage.js +223 -225
- package/dist/auth/pages/LoginPage.js.map +1 -1
- package/dist/auth/pages/MagicLinkPage.js +67 -69
- package/dist/auth/pages/MagicLinkPage.js.map +1 -1
- package/dist/auth/pages/MfaSetupPage.js +85 -88
- package/dist/auth/pages/MfaSetupPage.js.map +1 -1
- package/dist/auth/pages/MfaVerifyPage.js +60 -63
- package/dist/auth/pages/MfaVerifyPage.js.map +1 -1
- package/dist/auth/pages/OAuthCallbackPage.js +37 -40
- package/dist/auth/pages/OAuthCallbackPage.js.map +1 -1
- package/dist/auth/pages/PasswordResetPage.js +102 -105
- package/dist/auth/pages/PasswordResetPage.js.map +1 -1
- package/dist/auth/pages/ReactivatePage.js +54 -57
- package/dist/auth/pages/ReactivatePage.js.map +1 -1
- package/dist/auth/pages/RegisterPage.js +171 -174
- package/dist/auth/pages/RegisterPage.js.map +1 -1
- package/dist/auth/pages/SSOClearPage.js +21 -20
- package/dist/auth/pages/SSOClearPage.js.map +1 -1
- package/dist/auth/pages/SSODepositPage.js +27 -26
- package/dist/auth/pages/SSODepositPage.js.map +1 -1
- package/dist/auth/pages/SSORelayCallbackPage.js +19 -18
- package/dist/auth/pages/SSORelayCallbackPage.js.map +1 -1
- package/dist/auth/pages/SecurityPage.js +247 -250
- package/dist/auth/pages/SecurityPage.js.map +1 -1
- package/dist/auth/pages/SessionsPage.js +95 -98
- package/dist/auth/pages/SessionsPage.js.map +1 -1
- package/dist/auth/pages/SsoCallbackPage.js +53 -56
- package/dist/auth/pages/SsoCallbackPage.js.map +1 -1
- package/dist/auth/pages/SsoConfigPage.js +296 -299
- package/dist/auth/pages/SsoConfigPage.js.map +1 -1
- package/dist/auth/pages/SsoLoginPage.js +65 -68
- package/dist/auth/pages/SsoLoginPage.js.map +1 -1
- package/dist/auth/pages/UserDetailsPage.js +124 -127
- package/dist/auth/pages/UserDetailsPage.js.map +1 -1
- package/dist/auth/pages/UserProfilePage.js +171 -174
- package/dist/auth/pages/UserProfilePage.js.map +1 -1
- package/dist/auth/pages/UsersPage.js +322 -325
- package/dist/auth/pages/UsersPage.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -1
- package/dist/shared/hooks/index.d.ts +1 -6
- package/dist/shared/hooks/useTr.d.ts +16 -0
- package/dist/shared/hooks/useTr.js +14 -0
- package/dist/shared/hooks/useTr.js.map +1 -0
- package/dist/translations/en.d.ts +806 -248
- package/dist/translations/en.js +870 -0
- package/dist/translations/en.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,455 +1,452 @@
|
|
|
1
1
|
import { useAuthStore as e } from "../store/authStore.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import { jsx as
|
|
11
|
-
import { Button as
|
|
12
|
-
import { EmphasisPanel as
|
|
2
|
+
import { useTr as t } from "../../shared/hooks/useTr.js";
|
|
3
|
+
import { useAuthOperations as ee } from "../hooks/useAuthOperations.js";
|
|
4
|
+
import { useAccountOperations as te } from "../hooks/useAccountOperations.js";
|
|
5
|
+
import { formatDate as ne } from "../utils/formatters.js";
|
|
6
|
+
import { ConfirmActionDialog as re } from "../components/ConfirmActionDialog.js";
|
|
7
|
+
import { nativeImpact as ie, nativeNotify as n } from "../../utils/nativeBridge.js";
|
|
8
|
+
import { useEffect as r, useId as i, useRef as a, useState as o } from "react";
|
|
9
|
+
import { useNavigate as ae } from "react-router";
|
|
10
|
+
import { jsx as s, jsxs as c } from "react/jsx-runtime";
|
|
11
|
+
import { Button as l } from "@burdenoff/fe-libs/button";
|
|
12
|
+
import { EmphasisPanel as u, NextSteps as d, PagePurpose as f } from "@burdenoff/fe-libs/ui";
|
|
13
13
|
//#region src/auth/pages/SecurityPage.tsx
|
|
14
|
-
var
|
|
14
|
+
var p = ({ className: e }) => /* @__PURE__ */ s("svg", {
|
|
15
15
|
className: e,
|
|
16
16
|
fill: "none",
|
|
17
17
|
viewBox: "0 0 24 24",
|
|
18
18
|
stroke: "currentColor",
|
|
19
19
|
"aria-hidden": "true",
|
|
20
|
-
children: /* @__PURE__ */
|
|
20
|
+
children: /* @__PURE__ */ s("path", {
|
|
21
21
|
strokeLinecap: "round",
|
|
22
22
|
strokeLinejoin: "round",
|
|
23
23
|
strokeWidth: 1.5,
|
|
24
24
|
d: "M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z"
|
|
25
25
|
})
|
|
26
|
-
}),
|
|
26
|
+
}), m = ({ className: e }) => /* @__PURE__ */ s("svg", {
|
|
27
27
|
className: e,
|
|
28
28
|
fill: "none",
|
|
29
29
|
viewBox: "0 0 24 24",
|
|
30
30
|
stroke: "currentColor",
|
|
31
31
|
"aria-hidden": "true",
|
|
32
|
-
children: /* @__PURE__ */
|
|
32
|
+
children: /* @__PURE__ */ s("path", {
|
|
33
33
|
strokeLinecap: "round",
|
|
34
34
|
strokeLinejoin: "round",
|
|
35
35
|
strokeWidth: 1.5,
|
|
36
36
|
d: "M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z"
|
|
37
37
|
})
|
|
38
|
-
}),
|
|
38
|
+
}), oe = ({ className: e }) => /* @__PURE__ */ s("svg", {
|
|
39
39
|
className: e,
|
|
40
40
|
fill: "none",
|
|
41
41
|
viewBox: "0 0 24 24",
|
|
42
42
|
stroke: "currentColor",
|
|
43
43
|
"aria-hidden": "true",
|
|
44
|
-
children: /* @__PURE__ */
|
|
44
|
+
children: /* @__PURE__ */ s("path", {
|
|
45
45
|
strokeLinecap: "round",
|
|
46
46
|
strokeLinejoin: "round",
|
|
47
47
|
strokeWidth: 1.5,
|
|
48
48
|
d: "M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197M13 7a4 4 0 11-8 0 4 4 0 018 0z"
|
|
49
49
|
})
|
|
50
|
-
}), se = ({ className: e }) => /* @__PURE__ */
|
|
50
|
+
}), se = ({ className: e }) => /* @__PURE__ */ s("svg", {
|
|
51
51
|
className: e,
|
|
52
52
|
fill: "none",
|
|
53
53
|
viewBox: "0 0 24 24",
|
|
54
54
|
stroke: "currentColor",
|
|
55
55
|
"aria-hidden": "true",
|
|
56
|
-
children: /* @__PURE__ */
|
|
56
|
+
children: /* @__PURE__ */ s("path", {
|
|
57
57
|
strokeLinecap: "round",
|
|
58
58
|
strokeLinejoin: "round",
|
|
59
59
|
strokeWidth: 1.5,
|
|
60
60
|
d: "M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z"
|
|
61
61
|
})
|
|
62
|
-
}), ce = ({ className: e }) => /* @__PURE__ */
|
|
62
|
+
}), ce = ({ className: e }) => /* @__PURE__ */ s("svg", {
|
|
63
63
|
className: e,
|
|
64
64
|
fill: "none",
|
|
65
65
|
viewBox: "0 0 24 24",
|
|
66
66
|
stroke: "currentColor",
|
|
67
67
|
"aria-hidden": "true",
|
|
68
|
-
children: /* @__PURE__ */
|
|
68
|
+
children: /* @__PURE__ */ s("path", {
|
|
69
69
|
strokeLinecap: "round",
|
|
70
70
|
strokeLinejoin: "round",
|
|
71
71
|
strokeWidth: 1.5,
|
|
72
72
|
d: "M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1"
|
|
73
73
|
})
|
|
74
|
-
}), h = ({ className: e }) => /* @__PURE__ */
|
|
74
|
+
}), h = ({ className: e }) => /* @__PURE__ */ s("svg", {
|
|
75
75
|
className: e,
|
|
76
76
|
fill: "none",
|
|
77
77
|
viewBox: "0 0 24 24",
|
|
78
78
|
stroke: "currentColor",
|
|
79
79
|
"aria-hidden": "true",
|
|
80
|
-
children: /* @__PURE__ */
|
|
80
|
+
children: /* @__PURE__ */ s("path", {
|
|
81
81
|
strokeLinecap: "round",
|
|
82
82
|
strokeLinejoin: "round",
|
|
83
83
|
strokeWidth: 2,
|
|
84
84
|
d: "M9 5l7 7-7 7"
|
|
85
85
|
})
|
|
86
|
-
}), g = ({ className: e }) => /* @__PURE__ */
|
|
86
|
+
}), g = ({ className: e }) => /* @__PURE__ */ s("svg", {
|
|
87
87
|
className: e,
|
|
88
88
|
fill: "currentColor",
|
|
89
89
|
viewBox: "0 0 20 20",
|
|
90
90
|
"aria-hidden": "true",
|
|
91
|
-
children: /* @__PURE__ */
|
|
91
|
+
children: /* @__PURE__ */ s("path", {
|
|
92
92
|
fillRule: "evenodd",
|
|
93
93
|
d: "M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z",
|
|
94
94
|
clipRule: "evenodd"
|
|
95
95
|
})
|
|
96
|
-
}),
|
|
96
|
+
}), le = ({ className: e }) => /* @__PURE__ */ s("svg", {
|
|
97
97
|
className: e,
|
|
98
98
|
fill: "currentColor",
|
|
99
99
|
viewBox: "0 0 20 20",
|
|
100
100
|
"aria-hidden": "true",
|
|
101
|
-
children: /* @__PURE__ */
|
|
101
|
+
children: /* @__PURE__ */ s("path", {
|
|
102
102
|
fillRule: "evenodd",
|
|
103
103
|
d: "M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z",
|
|
104
104
|
clipRule: "evenodd"
|
|
105
105
|
})
|
|
106
|
-
}),
|
|
106
|
+
}), _ = ({ className: e }) => /* @__PURE__ */ c("svg", {
|
|
107
107
|
className: e,
|
|
108
108
|
fill: "none",
|
|
109
109
|
viewBox: "0 0 24 24",
|
|
110
110
|
"aria-hidden": "true",
|
|
111
|
-
children: [/* @__PURE__ */
|
|
111
|
+
children: [/* @__PURE__ */ s("circle", {
|
|
112
112
|
className: "opacity-25",
|
|
113
113
|
cx: "12",
|
|
114
114
|
cy: "12",
|
|
115
115
|
r: "10",
|
|
116
116
|
stroke: "currentColor",
|
|
117
117
|
strokeWidth: "4"
|
|
118
|
-
}), /* @__PURE__ */
|
|
118
|
+
}), /* @__PURE__ */ s("path", {
|
|
119
119
|
className: "opacity-75",
|
|
120
120
|
fill: "currentColor",
|
|
121
121
|
d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
|
|
122
122
|
})]
|
|
123
|
-
}),
|
|
124
|
-
function
|
|
125
|
-
let {
|
|
126
|
-
let n = le(e);
|
|
127
|
-
return n === e ? t : n;
|
|
128
|
-
}, S = re(), C = e((e) => e.user), { signOut: w } = t({ disableCurrentUserQuery: !0 }), { deactivateAccount: T, deleteAccount: ue, isDeactivating: E, isDeleting: D } = n(), [de, O] = s(!1), [fe, k] = s(!1), pe = [
|
|
123
|
+
}), v = "DELETE MY ACCOUNT";
|
|
124
|
+
function y({ enableAdminRoutes: y = !1 }) {
|
|
125
|
+
let b = t(), x = ae(), S = e((e) => e.user), { signOut: C } = ee({ disableCurrentUserQuery: !0 }), { deactivateAccount: w, deleteAccount: T, isDeactivating: E, isDeleting: D } = te(), [ue, O] = o(!1), [de, k] = o(!1), fe = [
|
|
129
126
|
{
|
|
130
|
-
name:
|
|
131
|
-
description:
|
|
127
|
+
name: b("auth.security.navProfile", "User Profile"),
|
|
128
|
+
description: b("auth.security.navProfileDesc", "View and edit your profile information"),
|
|
132
129
|
path: "/auth/profile",
|
|
133
130
|
icon: se,
|
|
134
131
|
color: "text-accent-teal",
|
|
135
132
|
bgColor: "bg-accent-teal-subtle"
|
|
136
133
|
},
|
|
137
134
|
{
|
|
138
|
-
name:
|
|
139
|
-
description:
|
|
135
|
+
name: b("auth.security.navMfa", "Two-Factor Authentication"),
|
|
136
|
+
description: b("auth.security.navMfaDesc", "Secure your account with TOTP"),
|
|
140
137
|
path: "/auth/mfa",
|
|
141
|
-
icon:
|
|
138
|
+
icon: m,
|
|
142
139
|
color: "text-accent-purple",
|
|
143
140
|
bgColor: "bg-accent-purple-subtle"
|
|
144
141
|
},
|
|
145
142
|
{
|
|
146
|
-
name:
|
|
147
|
-
description:
|
|
143
|
+
name: b("auth.security.navUsers", "Users"),
|
|
144
|
+
description: b("auth.security.navUsersDesc", "Manage system users"),
|
|
148
145
|
path: "/auth/users",
|
|
149
|
-
icon:
|
|
146
|
+
icon: oe,
|
|
150
147
|
color: "text-accent-indigo",
|
|
151
148
|
bgColor: "bg-accent-indigo-subtle",
|
|
152
149
|
adminOnly: !0
|
|
153
150
|
}
|
|
154
|
-
],
|
|
155
|
-
name:
|
|
156
|
-
description:
|
|
151
|
+
], pe = [{
|
|
152
|
+
name: b("auth.security.navSso", "SSO Configuration"),
|
|
153
|
+
description: b("auth.security.navSsoDesc", "Enterprise single sign-on"),
|
|
157
154
|
path: "/auth/sso",
|
|
158
155
|
icon: ce,
|
|
159
156
|
color: "text-accent-cyan",
|
|
160
157
|
bgColor: "bg-accent-cyan-subtle",
|
|
161
158
|
adminOnly: !0
|
|
162
|
-
}], [A, j] =
|
|
163
|
-
|
|
159
|
+
}], [A, j] = o(!1), [M, N] = o(!1), [P, F] = o(""), [I, L] = o(""), [R, z] = o(null), [B, me] = o(null), V = i(), H = i(), U = i(), W = i(), G = i(), K = i(), q = i(), J = a(null), Y = a(null), X = a(null), Z = a(null);
|
|
160
|
+
r(() => {
|
|
164
161
|
A ? X.current?.focus() : J.current?.focus();
|
|
165
|
-
}, [A]),
|
|
162
|
+
}, [A]), r(() => {
|
|
166
163
|
M ? Z.current?.focus() : Y.current?.focus();
|
|
167
164
|
}, [M]);
|
|
168
|
-
let
|
|
165
|
+
let he = async () => {
|
|
169
166
|
O(!0);
|
|
170
167
|
try {
|
|
171
|
-
await
|
|
168
|
+
await C(), x("/auth/login"), k(!1);
|
|
172
169
|
} catch (e) {
|
|
173
170
|
console.error("Logout failed:", e), O(!1);
|
|
174
171
|
}
|
|
175
|
-
},
|
|
172
|
+
}, ge = async () => {
|
|
176
173
|
z(null);
|
|
177
174
|
try {
|
|
178
|
-
let e = await
|
|
179
|
-
e.success ?
|
|
175
|
+
let e = await w(P);
|
|
176
|
+
e.success ? x("/auth/login", { replace: !0 }) : z(e.message || b("auth.security.deactivateFailed", "Failed to deactivate account"));
|
|
180
177
|
} catch (e) {
|
|
181
|
-
z(e instanceof Error ? e.message :
|
|
178
|
+
z(e instanceof Error ? e.message : b("auth.security.deactivateFailed", "Failed to deactivate account"));
|
|
182
179
|
}
|
|
183
|
-
},
|
|
184
|
-
if (z(null), I !==
|
|
185
|
-
z(
|
|
180
|
+
}, _e = async () => {
|
|
181
|
+
if (z(null), I !== v) {
|
|
182
|
+
z(b("auth.security.deleteConfirmMismatch", "Please type \"DELETE MY ACCOUNT\" to confirm"));
|
|
186
183
|
return;
|
|
187
184
|
}
|
|
188
|
-
|
|
185
|
+
ie("medium");
|
|
189
186
|
try {
|
|
190
|
-
let e = await
|
|
191
|
-
e.success ? (
|
|
187
|
+
let e = await T(P, I);
|
|
188
|
+
e.success ? (n("success"), x("/auth/login", { replace: !0 })) : (n("error"), z(e.message || b("auth.security.deleteFailed", "Failed to delete account")));
|
|
192
189
|
} catch (e) {
|
|
193
|
-
|
|
190
|
+
n("error"), z(e instanceof Error ? e.message : b("auth.security.deleteFailed", "Failed to delete account"));
|
|
194
191
|
}
|
|
195
192
|
}, Q = () => {
|
|
196
|
-
j(!1), N(!1), F(""), L(""), z(null),
|
|
197
|
-
}, $ =
|
|
198
|
-
return /* @__PURE__ */
|
|
193
|
+
j(!1), N(!1), F(""), L(""), z(null), me(null);
|
|
194
|
+
}, $ = S?.role === "SUPER_ADMIN" || S?.role === "TENANT_ADMIN" || S?.role === "ORG_ADMIN", ve = fe.filter((e) => !e.adminOnly || y && $), ye = pe.filter((e) => !e.adminOnly || y && $);
|
|
195
|
+
return /* @__PURE__ */ c("div", {
|
|
199
196
|
className: "bg-bg-canvas p-6",
|
|
200
|
-
children: [/* @__PURE__ */
|
|
201
|
-
open:
|
|
197
|
+
children: [/* @__PURE__ */ s(re, {
|
|
198
|
+
open: de,
|
|
202
199
|
onOpenChange: k,
|
|
203
|
-
title:
|
|
204
|
-
description:
|
|
205
|
-
confirmText:
|
|
200
|
+
title: b("auth.security.signOutDialogTitle", "Sign out now?"),
|
|
201
|
+
description: b("auth.security.signOutDialogDescription", "You will be signed out of this device and returned to the login screen."),
|
|
202
|
+
confirmText: b("auth.security.signOutDialogConfirm", "Sign out"),
|
|
206
203
|
variant: "warning",
|
|
207
|
-
isPending:
|
|
208
|
-
onConfirm:
|
|
209
|
-
}), /* @__PURE__ */
|
|
204
|
+
isPending: ue,
|
|
205
|
+
onConfirm: he
|
|
206
|
+
}), /* @__PURE__ */ c("main", {
|
|
210
207
|
className: "max-w-7xl mx-auto space-y-8",
|
|
211
208
|
children: [
|
|
212
|
-
/* @__PURE__ */
|
|
209
|
+
/* @__PURE__ */ c("div", {
|
|
213
210
|
className: "flex items-center gap-3",
|
|
214
211
|
"data-tour": "auth-security-header",
|
|
215
|
-
children: [/* @__PURE__ */
|
|
212
|
+
children: [/* @__PURE__ */ s("div", {
|
|
216
213
|
className: "auth-brand-badge flex size-10 items-center justify-center rounded-xl",
|
|
217
|
-
children: /* @__PURE__ */
|
|
218
|
-
}), /* @__PURE__ */
|
|
214
|
+
children: /* @__PURE__ */ s(p, { className: "size-6 text-white" })
|
|
215
|
+
}), /* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("h1", {
|
|
219
216
|
className: "text-lg font-bold text-text-primary",
|
|
220
|
-
children:
|
|
221
|
-
}), /* @__PURE__ */
|
|
217
|
+
children: b("auth.security.title", "Security Center")
|
|
218
|
+
}), /* @__PURE__ */ s("p", {
|
|
222
219
|
className: "text-xs text-text-secondary ",
|
|
223
|
-
children:
|
|
220
|
+
children: b("auth.security.subtitle", "Account & Authentication")
|
|
224
221
|
})] })]
|
|
225
222
|
}),
|
|
226
|
-
/* @__PURE__ */
|
|
223
|
+
/* @__PURE__ */ s(f, {
|
|
227
224
|
"data-tour": "auth-security-purpose",
|
|
228
|
-
children:
|
|
225
|
+
children: b("auth.security.purpose", "Your one place to keep your account safe: turn on two-factor authentication, change your password, review who can act on your behalf, and manage or close your account.")
|
|
229
226
|
}),
|
|
230
|
-
/* @__PURE__ */
|
|
227
|
+
/* @__PURE__ */ s(u, {
|
|
231
228
|
className: "p-6",
|
|
232
229
|
"data-tour": "auth-security-status-banner",
|
|
233
|
-
children: /* @__PURE__ */
|
|
230
|
+
children: /* @__PURE__ */ c("div", {
|
|
234
231
|
className: "flex flex-col md:flex-row md:items-center md:justify-between gap-4",
|
|
235
|
-
children: [/* @__PURE__ */
|
|
232
|
+
children: [/* @__PURE__ */ c("div", {
|
|
236
233
|
className: "flex items-center gap-4",
|
|
237
|
-
children: [/* @__PURE__ */
|
|
234
|
+
children: [/* @__PURE__ */ s("div", {
|
|
238
235
|
className: "size-14 rounded-2xl bg-accent-soft flex items-center justify-center",
|
|
239
|
-
children: /* @__PURE__ */
|
|
240
|
-
}), /* @__PURE__ */
|
|
236
|
+
children: /* @__PURE__ */ s(p, { className: "size-8 text-[var(--color-action-primary-bg)]" })
|
|
237
|
+
}), /* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("h2", {
|
|
241
238
|
className: "text-xl font-bold text-text-primary",
|
|
242
|
-
children:
|
|
243
|
-
}), /* @__PURE__ */
|
|
239
|
+
children: b("auth.security.securityStatus", "Security Status")
|
|
240
|
+
}), /* @__PURE__ */ s("p", {
|
|
244
241
|
className: "text-text-secondary",
|
|
245
|
-
children:
|
|
242
|
+
children: S?.mfaEnabled ? b("auth.security.wellProtected", "Your account is well protected") : b("auth.security.enableMfaSuggestion", "Enable MFA for better security")
|
|
246
243
|
})] })]
|
|
247
|
-
}), /* @__PURE__ */
|
|
244
|
+
}), /* @__PURE__ */ s("div", {
|
|
248
245
|
className: "flex items-center gap-3",
|
|
249
|
-
children:
|
|
246
|
+
children: S?.mfaEnabled ? /* @__PURE__ */ c("span", {
|
|
250
247
|
className: "inline-flex items-center gap-2 px-4 py-2 rounded-xl bg-status-success-bg-subtle text-status-success-text font-medium",
|
|
251
|
-
children: [/* @__PURE__ */
|
|
252
|
-
}) : /* @__PURE__ */ l
|
|
248
|
+
children: [/* @__PURE__ */ s(g, { className: "size-5 text-status-success-text" }), b("auth.security.mfaEnabled", "MFA Enabled")]
|
|
249
|
+
}) : /* @__PURE__ */ c(l, {
|
|
253
250
|
type: "button",
|
|
254
|
-
onClick: () =>
|
|
251
|
+
onClick: () => x("/auth/mfa"),
|
|
255
252
|
variant: "default",
|
|
256
253
|
className: "font-semibold",
|
|
257
|
-
children: [/* @__PURE__ */
|
|
254
|
+
children: [/* @__PURE__ */ s(le, { className: "size-5" }), b("auth.security.enableMfaNow", "Enable MFA Now")]
|
|
258
255
|
})
|
|
259
256
|
})]
|
|
260
257
|
})
|
|
261
258
|
}),
|
|
262
|
-
/* @__PURE__ */
|
|
259
|
+
/* @__PURE__ */ c("div", {
|
|
263
260
|
className: "mb-8 p-6 rounded-2xl bg-bg-surface border border-border-subtle shadow-sm",
|
|
264
261
|
"data-tour": "auth-account-info-card",
|
|
265
|
-
children: [/* @__PURE__ */
|
|
262
|
+
children: [/* @__PURE__ */ s("h3", {
|
|
266
263
|
className: "text-lg font-semibold text-text-primary mb-4",
|
|
267
|
-
children:
|
|
268
|
-
}), /* @__PURE__ */
|
|
264
|
+
children: b("auth.security.accountInfo", "Account Information")
|
|
265
|
+
}), /* @__PURE__ */ c("dl", {
|
|
269
266
|
className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6",
|
|
270
267
|
children: [
|
|
271
|
-
/* @__PURE__ */
|
|
268
|
+
/* @__PURE__ */ c("div", {
|
|
272
269
|
className: "sm:col-span-2 lg:col-span-1",
|
|
273
|
-
children: [/* @__PURE__ */
|
|
270
|
+
children: [/* @__PURE__ */ s("dt", {
|
|
274
271
|
className: "text-sm font-medium text-text-secondary",
|
|
275
|
-
children:
|
|
276
|
-
}), /* @__PURE__ */
|
|
272
|
+
children: b("auth.security.email", "Email")
|
|
273
|
+
}), /* @__PURE__ */ c("dd", {
|
|
277
274
|
className: "mt-1 text-text-primary",
|
|
278
|
-
children: [/* @__PURE__ */
|
|
275
|
+
children: [/* @__PURE__ */ s("span", {
|
|
279
276
|
className: "block truncate",
|
|
280
|
-
title:
|
|
281
|
-
children:
|
|
282
|
-
}),
|
|
277
|
+
title: S?.email,
|
|
278
|
+
children: S?.email
|
|
279
|
+
}), S?.emailVerified && /* @__PURE__ */ c("span", {
|
|
283
280
|
className: "mt-1 inline-flex items-center gap-1 px-2 py-0.5 rounded-full bg-status-success-bg-subtle text-status-success-text text-xs font-medium",
|
|
284
|
-
children: [/* @__PURE__ */
|
|
281
|
+
children: [/* @__PURE__ */ s(g, { className: "size-3" }), b("auth.security.verified", "Verified")]
|
|
285
282
|
})]
|
|
286
283
|
})]
|
|
287
284
|
}),
|
|
288
|
-
/* @__PURE__ */
|
|
285
|
+
/* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("dt", {
|
|
289
286
|
className: "text-sm font-medium text-text-secondary",
|
|
290
|
-
children:
|
|
291
|
-
}), /* @__PURE__ */
|
|
287
|
+
children: b("auth.security.username", "Username")
|
|
288
|
+
}), /* @__PURE__ */ s("dd", {
|
|
292
289
|
className: "mt-1 text-text-primary truncate",
|
|
293
|
-
title:
|
|
294
|
-
children:
|
|
290
|
+
title: S?.username ?? void 0,
|
|
291
|
+
children: S?.username || "-"
|
|
295
292
|
})] }),
|
|
296
|
-
/* @__PURE__ */
|
|
293
|
+
/* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("dt", {
|
|
297
294
|
className: "text-sm font-medium text-text-secondary",
|
|
298
|
-
children:
|
|
299
|
-
}), /* @__PURE__ */
|
|
295
|
+
children: b("auth.security.role", "Role")
|
|
296
|
+
}), /* @__PURE__ */ s("dd", {
|
|
300
297
|
className: "mt-1",
|
|
301
|
-
children: /* @__PURE__ */
|
|
298
|
+
children: /* @__PURE__ */ s("span", {
|
|
302
299
|
className: "inline-flex px-2.5 py-0.5 rounded-full bg-accent-indigo-subtle text-accent-indigo text-xs font-medium",
|
|
303
|
-
children:
|
|
300
|
+
children: S?.role || "USER"
|
|
304
301
|
})
|
|
305
302
|
})] }),
|
|
306
|
-
/* @__PURE__ */
|
|
303
|
+
/* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("dt", {
|
|
307
304
|
className: "text-sm font-medium text-text-secondary",
|
|
308
|
-
children:
|
|
309
|
-
}), /* @__PURE__ */
|
|
305
|
+
children: b("auth.security.memberSince", "Member Since")
|
|
306
|
+
}), /* @__PURE__ */ s("dd", {
|
|
310
307
|
className: "mt-1 text-text-primary",
|
|
311
|
-
children:
|
|
308
|
+
children: S?.createdAt ? ne(S.createdAt) : "-"
|
|
312
309
|
})] })
|
|
313
310
|
]
|
|
314
311
|
})]
|
|
315
312
|
}),
|
|
316
|
-
/* @__PURE__ */
|
|
313
|
+
/* @__PURE__ */ c("div", {
|
|
317
314
|
className: "mb-8",
|
|
318
|
-
children: [/* @__PURE__ */
|
|
315
|
+
children: [/* @__PURE__ */ s("h3", {
|
|
319
316
|
className: "text-lg font-semibold text-text-primary mb-4",
|
|
320
|
-
children:
|
|
321
|
-
}), /* @__PURE__ */
|
|
317
|
+
children: b("auth.security.securityAuth", "Security & Authentication")
|
|
318
|
+
}), /* @__PURE__ */ s("div", {
|
|
322
319
|
className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4",
|
|
323
320
|
"data-tour": "auth-security-nav-grid",
|
|
324
|
-
children:
|
|
321
|
+
children: ve.map((e) => /* @__PURE__ */ s("button", {
|
|
325
322
|
type: "button",
|
|
326
|
-
onClick: () =>
|
|
323
|
+
onClick: () => x(e.path),
|
|
327
324
|
"aria-label": e.name,
|
|
328
325
|
className: "group relative p-5 rounded-2xl bg-bg-surface border border-border-subtle hover:border-border-default hover:shadow-lg transition-all duration-200 text-left",
|
|
329
|
-
children: /* @__PURE__ */
|
|
326
|
+
children: /* @__PURE__ */ c("div", {
|
|
330
327
|
className: "flex items-start gap-4",
|
|
331
328
|
children: [
|
|
332
|
-
/* @__PURE__ */
|
|
329
|
+
/* @__PURE__ */ s("div", {
|
|
333
330
|
className: `size-12 rounded-xl ${e.bgColor} flex items-center justify-center flex-shrink-0 transition-transform`,
|
|
334
|
-
children: /* @__PURE__ */
|
|
331
|
+
children: /* @__PURE__ */ s(e.icon, { className: `size-6 ${e.color}` })
|
|
335
332
|
}),
|
|
336
|
-
/* @__PURE__ */
|
|
333
|
+
/* @__PURE__ */ c("div", {
|
|
337
334
|
className: "flex-1 min-w-0",
|
|
338
|
-
children: [/* @__PURE__ */
|
|
335
|
+
children: [/* @__PURE__ */ s("h4", {
|
|
339
336
|
className: "text-base font-semibold text-text-primary group-hover:text-accent-indigo transition-colors",
|
|
340
337
|
children: e.name
|
|
341
|
-
}), /* @__PURE__ */
|
|
338
|
+
}), /* @__PURE__ */ s("p", {
|
|
342
339
|
className: "mt-1 text-sm text-text-secondary ",
|
|
343
340
|
children: e.description
|
|
344
341
|
})]
|
|
345
342
|
}),
|
|
346
|
-
/* @__PURE__ */
|
|
343
|
+
/* @__PURE__ */ s(h, { className: "size-5 text-text-tertiary group-hover:text-indigo-500 transition-colors flex-shrink-0" })
|
|
347
344
|
]
|
|
348
345
|
})
|
|
349
346
|
}, e.path))
|
|
350
347
|
})]
|
|
351
348
|
}),
|
|
352
|
-
/* @__PURE__ */
|
|
349
|
+
/* @__PURE__ */ c("div", {
|
|
353
350
|
className: "mb-8",
|
|
354
|
-
children: [/* @__PURE__ */
|
|
351
|
+
children: [/* @__PURE__ */ s("h3", {
|
|
355
352
|
className: "text-lg font-semibold text-text-primary mb-4",
|
|
356
|
-
children:
|
|
357
|
-
}), /* @__PURE__ */
|
|
353
|
+
children: b("auth.security.quickActions", "Quick Actions")
|
|
354
|
+
}), /* @__PURE__ */ s("div", {
|
|
358
355
|
className: "grid grid-cols-1 sm:grid-cols-2 gap-4",
|
|
359
|
-
children:
|
|
356
|
+
children: ye.map((e) => /* @__PURE__ */ s("button", {
|
|
360
357
|
type: "button",
|
|
361
|
-
onClick: () =>
|
|
358
|
+
onClick: () => x(e.path),
|
|
362
359
|
"aria-label": e.name,
|
|
363
360
|
className: "group relative p-5 rounded-2xl bg-bg-surface border border-border-subtle hover:border-border-default hover:shadow-lg transition-all duration-200 text-left",
|
|
364
|
-
children: /* @__PURE__ */
|
|
361
|
+
children: /* @__PURE__ */ c("div", {
|
|
365
362
|
className: "flex items-start gap-4",
|
|
366
363
|
children: [
|
|
367
|
-
/* @__PURE__ */
|
|
364
|
+
/* @__PURE__ */ s("div", {
|
|
368
365
|
className: `size-12 rounded-xl ${e.bgColor} flex items-center justify-center flex-shrink-0 transition-transform`,
|
|
369
|
-
children: /* @__PURE__ */
|
|
366
|
+
children: /* @__PURE__ */ s(e.icon, { className: `size-6 ${e.color}` })
|
|
370
367
|
}),
|
|
371
|
-
/* @__PURE__ */
|
|
368
|
+
/* @__PURE__ */ c("div", {
|
|
372
369
|
className: "flex-1 min-w-0",
|
|
373
|
-
children: [/* @__PURE__ */
|
|
370
|
+
children: [/* @__PURE__ */ s("h4", {
|
|
374
371
|
className: "text-base font-semibold text-text-primary group-hover:text-accent-indigo transition-colors",
|
|
375
372
|
children: e.name
|
|
376
|
-
}), /* @__PURE__ */
|
|
373
|
+
}), /* @__PURE__ */ s("p", {
|
|
377
374
|
className: "mt-1 text-sm text-text-secondary ",
|
|
378
375
|
children: e.description
|
|
379
376
|
})]
|
|
380
377
|
}),
|
|
381
|
-
/* @__PURE__ */
|
|
378
|
+
/* @__PURE__ */ s(h, { className: "size-5 text-text-tertiary group-hover:text-indigo-500 transition-colors flex-shrink-0" })
|
|
382
379
|
]
|
|
383
380
|
})
|
|
384
381
|
}, e.path))
|
|
385
382
|
})]
|
|
386
383
|
}),
|
|
387
|
-
/* @__PURE__ */
|
|
384
|
+
/* @__PURE__ */ c("div", {
|
|
388
385
|
className: "grid grid-cols-1 lg:grid-cols-2 gap-6",
|
|
389
|
-
children: [/* @__PURE__ */
|
|
386
|
+
children: [/* @__PURE__ */ c("div", {
|
|
390
387
|
className: "p-6 rounded-2xl bg-bg-surface border border-border-subtle",
|
|
391
388
|
"data-tour": "auth-password-section",
|
|
392
|
-
children: [/* @__PURE__ */
|
|
389
|
+
children: [/* @__PURE__ */ s("div", {
|
|
393
390
|
className: "flex items-start justify-between",
|
|
394
|
-
children: /* @__PURE__ */
|
|
395
|
-
/* @__PURE__ */
|
|
391
|
+
children: /* @__PURE__ */ c("div", { children: [
|
|
392
|
+
/* @__PURE__ */ s("h3", {
|
|
396
393
|
className: "text-lg font-semibold text-text-primary",
|
|
397
|
-
children:
|
|
394
|
+
children: b("auth.security.password", "Password")
|
|
398
395
|
}),
|
|
399
|
-
/* @__PURE__ */
|
|
396
|
+
/* @__PURE__ */ s("p", {
|
|
400
397
|
className: "mt-1 text-sm text-text-secondary ",
|
|
401
|
-
children:
|
|
398
|
+
children: b("auth.security.updatePassword", "Update your password to keep your account secure")
|
|
402
399
|
}),
|
|
403
|
-
/* @__PURE__ */
|
|
400
|
+
/* @__PURE__ */ s("p", {
|
|
404
401
|
className: "mt-2 text-xs text-text-tertiary ",
|
|
405
|
-
children:
|
|
402
|
+
children: b("auth.security.lastChanged", "Last changed: Never")
|
|
406
403
|
})
|
|
407
404
|
] })
|
|
408
|
-
}), /* @__PURE__ */
|
|
405
|
+
}), /* @__PURE__ */ s(l, {
|
|
409
406
|
type: "button",
|
|
410
|
-
onClick: () =>
|
|
407
|
+
onClick: () => x("/auth/reset-password"),
|
|
411
408
|
variant: "default",
|
|
412
409
|
className: "mt-4 w-full font-semibold sm:w-auto",
|
|
413
|
-
children:
|
|
410
|
+
children: b("auth.security.changePassword", "Change Password")
|
|
414
411
|
})]
|
|
415
|
-
}), /* @__PURE__ */
|
|
412
|
+
}), /* @__PURE__ */ c("div", {
|
|
416
413
|
className: "p-6 rounded-2xl bg-status-error-bg-subtle border border-status-error-border",
|
|
417
414
|
"data-tour": "auth-danger-zone",
|
|
418
415
|
children: [
|
|
419
|
-
/* @__PURE__ */
|
|
416
|
+
/* @__PURE__ */ s("h3", {
|
|
420
417
|
className: "text-lg font-semibold text-status-error-text",
|
|
421
|
-
children:
|
|
418
|
+
children: b("auth.security.dangerZone", "Danger Zone")
|
|
422
419
|
}),
|
|
423
|
-
/* @__PURE__ */
|
|
420
|
+
/* @__PURE__ */ s("p", {
|
|
424
421
|
className: "mt-1 text-sm text-status-error-text/80",
|
|
425
|
-
children:
|
|
422
|
+
children: b("auth.security.dangerWarning", "These actions affect your account. Proceed with caution.")
|
|
426
423
|
}),
|
|
427
|
-
/* @__PURE__ */
|
|
424
|
+
/* @__PURE__ */ c("div", {
|
|
428
425
|
className: "mt-4 flex flex-wrap gap-3",
|
|
429
|
-
children: [/* @__PURE__ */
|
|
426
|
+
children: [/* @__PURE__ */ s("button", {
|
|
430
427
|
ref: J,
|
|
431
428
|
type: "button",
|
|
432
429
|
onClick: () => j(!0),
|
|
433
430
|
className: "px-5 py-2.5 rounded-xl border-2 border-status-warning-border text-status-warning-text font-semibold hover:bg-status-warning-bg-subtle transition-all duration-200",
|
|
434
|
-
children:
|
|
435
|
-
}), /* @__PURE__ */
|
|
431
|
+
children: b("auth.security.deactivateAccount", "Deactivate Account")
|
|
432
|
+
}), /* @__PURE__ */ s("button", {
|
|
436
433
|
ref: Y,
|
|
437
434
|
type: "button",
|
|
438
435
|
onClick: () => N(!0),
|
|
439
436
|
className: "px-5 py-2.5 rounded-xl border-2 border-status-error-border text-status-error-text font-semibold hover:bg-status-error-bg-subtle transition-all duration-200",
|
|
440
|
-
children:
|
|
437
|
+
children: b("auth.security.deleteAccount", "Delete Account")
|
|
441
438
|
})]
|
|
442
439
|
})
|
|
443
440
|
]
|
|
444
441
|
})]
|
|
445
442
|
}),
|
|
446
|
-
A && /* @__PURE__ */
|
|
443
|
+
A && /* @__PURE__ */ s("div", {
|
|
447
444
|
className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm p-4",
|
|
448
445
|
role: "presentation",
|
|
449
446
|
onClick: (e) => {
|
|
450
447
|
e.target === e.currentTarget && Q();
|
|
451
448
|
},
|
|
452
|
-
children: /* @__PURE__ */
|
|
449
|
+
children: /* @__PURE__ */ c("div", {
|
|
453
450
|
ref: X,
|
|
454
451
|
role: "dialog",
|
|
455
452
|
"aria-modal": "true",
|
|
@@ -457,70 +454,70 @@ function b({ enableAdminRoutes: b = !1 }) {
|
|
|
457
454
|
tabIndex: -1,
|
|
458
455
|
className: "w-full max-w-md bg-bg-surface rounded-2xl shadow-2xl p-6 outline-none",
|
|
459
456
|
children: [
|
|
460
|
-
/* @__PURE__ */
|
|
457
|
+
/* @__PURE__ */ s("h3", {
|
|
461
458
|
id: V,
|
|
462
459
|
className: "text-xl font-bold text-text-primary mb-2",
|
|
463
|
-
children:
|
|
460
|
+
children: b("auth.security.deactivateTitle", "Deactivate Account")
|
|
464
461
|
}),
|
|
465
|
-
/* @__PURE__ */
|
|
462
|
+
/* @__PURE__ */ s("p", {
|
|
466
463
|
className: "text-sm text-text-secondary mb-4",
|
|
467
|
-
children:
|
|
464
|
+
children: b("auth.security.deactivateDesc", "Your account will be temporarily disabled. You can reactivate it by signing in again with your credentials.")
|
|
468
465
|
}),
|
|
469
|
-
R && /* @__PURE__ */
|
|
466
|
+
R && /* @__PURE__ */ s("div", {
|
|
470
467
|
id: U,
|
|
471
468
|
role: "alert",
|
|
472
469
|
className: "mb-4 p-3 rounded-lg bg-status-error-bg-subtle text-status-error-text text-sm",
|
|
473
470
|
children: R
|
|
474
471
|
}),
|
|
475
|
-
B && /* @__PURE__ */
|
|
472
|
+
B && /* @__PURE__ */ s("output", {
|
|
476
473
|
className: "block mb-4 p-3 rounded-lg bg-status-success-bg-subtle text-status-success-text text-sm",
|
|
477
474
|
children: B
|
|
478
475
|
}),
|
|
479
|
-
/* @__PURE__ */
|
|
476
|
+
/* @__PURE__ */ c("div", {
|
|
480
477
|
className: "mb-4",
|
|
481
|
-
children: [/* @__PURE__ */
|
|
478
|
+
children: [/* @__PURE__ */ s("label", {
|
|
482
479
|
htmlFor: H,
|
|
483
480
|
className: "block text-sm font-medium text-text-primary mb-1",
|
|
484
|
-
children:
|
|
485
|
-
}), /* @__PURE__ */
|
|
481
|
+
children: b("auth.security.enterPasswordConfirm", "Enter your password to confirm")
|
|
482
|
+
}), /* @__PURE__ */ s("input", {
|
|
486
483
|
id: H,
|
|
487
484
|
type: "password",
|
|
488
485
|
value: P,
|
|
489
486
|
onChange: (e) => F(e.target.value),
|
|
490
487
|
"aria-required": "true",
|
|
491
|
-
"aria-label":
|
|
488
|
+
"aria-label": b("auth.security.enterPasswordConfirm", "Enter your password to confirm"),
|
|
492
489
|
"aria-describedby": R ? U : void 0,
|
|
493
490
|
"aria-invalid": !!R,
|
|
494
491
|
autoComplete: "current-password",
|
|
495
492
|
className: "w-full px-4 py-2 rounded-lg border border-border-default bg-bg-surface text-text-primary focus:ring-2 focus:ring-status-warning-bg focus:border-transparent",
|
|
496
|
-
placeholder:
|
|
493
|
+
placeholder: b("auth.security.yourPassword", "Your password")
|
|
497
494
|
})]
|
|
498
495
|
}),
|
|
499
|
-
/* @__PURE__ */
|
|
496
|
+
/* @__PURE__ */ c("div", {
|
|
500
497
|
className: "flex gap-3",
|
|
501
|
-
children: [/* @__PURE__ */
|
|
498
|
+
children: [/* @__PURE__ */ s("button", {
|
|
502
499
|
type: "button",
|
|
503
500
|
onClick: Q,
|
|
504
501
|
className: "flex-1 px-4 py-2 rounded-lg border border-border-default text-text-primary font-medium hover:bg-bg-sunken transition-colors",
|
|
505
|
-
children:
|
|
506
|
-
}), /* @__PURE__ */
|
|
502
|
+
children: b("auth.security.cancel", "Cancel")
|
|
503
|
+
}), /* @__PURE__ */ c("button", {
|
|
507
504
|
type: "button",
|
|
508
|
-
onClick: () => void
|
|
505
|
+
onClick: () => void ge(),
|
|
509
506
|
disabled: !P || E,
|
|
510
507
|
className: "flex-1 px-4 py-2 rounded-lg bg-status-warning-bg text-white font-medium hover:bg-status-warning-bg-hover disabled:opacity-50 disabled:cursor-not-allowed transition-colors flex items-center justify-center gap-2",
|
|
511
|
-
children: [E && /* @__PURE__ */
|
|
508
|
+
children: [E && /* @__PURE__ */ s(_, { className: "size-4 animate-spin" }), b("auth.security.deactivateBtn", "Deactivate")]
|
|
512
509
|
})]
|
|
513
510
|
})
|
|
514
511
|
]
|
|
515
512
|
})
|
|
516
513
|
}),
|
|
517
|
-
M && /* @__PURE__ */
|
|
514
|
+
M && /* @__PURE__ */ s("div", {
|
|
518
515
|
className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm p-4",
|
|
519
516
|
role: "presentation",
|
|
520
517
|
onClick: (e) => {
|
|
521
518
|
e.target === e.currentTarget && Q();
|
|
522
519
|
},
|
|
523
|
-
children: /* @__PURE__ */
|
|
520
|
+
children: /* @__PURE__ */ c("div", {
|
|
524
521
|
ref: Z,
|
|
525
522
|
role: "dialog",
|
|
526
523
|
"aria-modal": "true",
|
|
@@ -528,146 +525,146 @@ function b({ enableAdminRoutes: b = !1 }) {
|
|
|
528
525
|
tabIndex: -1,
|
|
529
526
|
className: "w-full max-w-md bg-bg-surface rounded-2xl shadow-2xl p-6 outline-none",
|
|
530
527
|
children: [
|
|
531
|
-
/* @__PURE__ */
|
|
528
|
+
/* @__PURE__ */ s("h3", {
|
|
532
529
|
id: W,
|
|
533
530
|
className: "text-xl font-bold text-status-error-text mb-2",
|
|
534
|
-
children:
|
|
531
|
+
children: b("auth.security.deleteTitle", "Delete Account Permanently")
|
|
535
532
|
}),
|
|
536
|
-
/* @__PURE__ */
|
|
533
|
+
/* @__PURE__ */ s("p", {
|
|
537
534
|
className: "text-sm text-text-secondary mb-4",
|
|
538
|
-
children:
|
|
535
|
+
children: b("auth.security.deleteDesc", "This action is irreversible. All your data will be permanently deleted and cannot be recovered.")
|
|
539
536
|
}),
|
|
540
|
-
R && /* @__PURE__ */
|
|
537
|
+
R && /* @__PURE__ */ s("div", {
|
|
541
538
|
id: q,
|
|
542
539
|
role: "alert",
|
|
543
540
|
className: "mb-4 p-3 rounded-lg bg-status-error-bg-subtle text-status-error-text text-sm",
|
|
544
541
|
children: R
|
|
545
542
|
}),
|
|
546
|
-
B && /* @__PURE__ */
|
|
543
|
+
B && /* @__PURE__ */ s("output", {
|
|
547
544
|
className: "block mb-4 p-3 rounded-lg bg-status-success-bg-subtle text-status-success-text text-sm",
|
|
548
545
|
children: B
|
|
549
546
|
}),
|
|
550
|
-
/* @__PURE__ */
|
|
547
|
+
/* @__PURE__ */ c("div", {
|
|
551
548
|
className: "mb-4",
|
|
552
|
-
children: [/* @__PURE__ */
|
|
549
|
+
children: [/* @__PURE__ */ s("label", {
|
|
553
550
|
htmlFor: G,
|
|
554
551
|
className: "block text-sm font-medium text-text-primary mb-1",
|
|
555
|
-
children:
|
|
556
|
-
}), /* @__PURE__ */
|
|
552
|
+
children: b("auth.security.enterPasswordDelete", "Enter your password")
|
|
553
|
+
}), /* @__PURE__ */ s("input", {
|
|
557
554
|
id: G,
|
|
558
555
|
type: "password",
|
|
559
556
|
value: P,
|
|
560
557
|
onChange: (e) => F(e.target.value),
|
|
561
558
|
"aria-required": "true",
|
|
562
|
-
"aria-label":
|
|
559
|
+
"aria-label": b("auth.security.enterPasswordDelete", "Enter your password"),
|
|
563
560
|
"aria-describedby": R ? q : void 0,
|
|
564
561
|
"aria-invalid": !!R,
|
|
565
562
|
autoComplete: "current-password",
|
|
566
563
|
className: "w-full px-4 py-2 rounded-lg border border-border-default bg-bg-surface text-text-primary focus:ring-2 focus:ring-status-error-bg focus:border-transparent",
|
|
567
|
-
placeholder:
|
|
564
|
+
placeholder: b("auth.security.yourPassword", "Your password")
|
|
568
565
|
})]
|
|
569
566
|
}),
|
|
570
|
-
/* @__PURE__ */
|
|
567
|
+
/* @__PURE__ */ c("div", {
|
|
571
568
|
className: "mb-4",
|
|
572
|
-
children: [/* @__PURE__ */
|
|
569
|
+
children: [/* @__PURE__ */ c("label", {
|
|
573
570
|
htmlFor: K,
|
|
574
571
|
className: "block text-sm font-medium text-text-primary mb-1",
|
|
575
572
|
children: [
|
|
576
|
-
|
|
573
|
+
b("auth.security.type", "Type"),
|
|
577
574
|
" ",
|
|
578
|
-
/* @__PURE__ */
|
|
575
|
+
/* @__PURE__ */ s("code", {
|
|
579
576
|
className: "px-1 py-0.5 rounded bg-bg-sunken text-status-error-text font-mono text-sm",
|
|
580
|
-
children:
|
|
577
|
+
children: v
|
|
581
578
|
}),
|
|
582
579
|
" ",
|
|
583
|
-
|
|
580
|
+
b("auth.security.toConfirm", "to confirm")
|
|
584
581
|
]
|
|
585
|
-
}), /* @__PURE__ */
|
|
582
|
+
}), /* @__PURE__ */ s("input", {
|
|
586
583
|
id: K,
|
|
587
584
|
type: "text",
|
|
588
585
|
value: I,
|
|
589
586
|
onChange: (e) => L(e.target.value),
|
|
590
587
|
"aria-required": "true",
|
|
591
|
-
"aria-label":
|
|
588
|
+
"aria-label": b("auth.security.deleteConfirmAriaLabel", "Type DELETE MY ACCOUNT to confirm"),
|
|
592
589
|
"aria-describedby": R ? q : void 0,
|
|
593
|
-
"aria-invalid": I.length > 0 && I !==
|
|
590
|
+
"aria-invalid": I.length > 0 && I !== v,
|
|
594
591
|
autoComplete: "off",
|
|
595
592
|
className: "w-full px-4 py-2 rounded-lg border border-border-default bg-bg-surface text-text-primary focus:ring-2 focus:ring-status-error-bg focus:border-transparent font-mono",
|
|
596
|
-
placeholder:
|
|
593
|
+
placeholder: b("auth.security.deleteConfirmPlaceholder", "DELETE MY ACCOUNT")
|
|
597
594
|
})]
|
|
598
595
|
}),
|
|
599
|
-
/* @__PURE__ */
|
|
596
|
+
/* @__PURE__ */ c("div", {
|
|
600
597
|
className: "flex gap-3",
|
|
601
|
-
children: [/* @__PURE__ */
|
|
598
|
+
children: [/* @__PURE__ */ s("button", {
|
|
602
599
|
type: "button",
|
|
603
600
|
onClick: Q,
|
|
604
601
|
className: "flex-1 px-4 py-2 rounded-lg border border-border-default text-text-primary font-medium hover:bg-bg-sunken transition-colors",
|
|
605
|
-
children:
|
|
606
|
-
}), /* @__PURE__ */
|
|
602
|
+
children: b("auth.security.cancel", "Cancel")
|
|
603
|
+
}), /* @__PURE__ */ c("button", {
|
|
607
604
|
type: "button",
|
|
608
|
-
onClick: () => void
|
|
609
|
-
disabled: !P || I !==
|
|
605
|
+
onClick: () => void _e(),
|
|
606
|
+
disabled: !P || I !== v || D,
|
|
610
607
|
className: "flex-1 px-4 py-2 rounded-lg bg-status-error-bg text-white font-medium hover:bg-status-error-bg-hover disabled:opacity-50 disabled:cursor-not-allowed transition-colors flex items-center justify-center gap-2",
|
|
611
|
-
children: [D && /* @__PURE__ */
|
|
608
|
+
children: [D && /* @__PURE__ */ s(_, { className: "size-4 animate-spin" }), b("auth.security.deleteForever", "Delete Forever")]
|
|
612
609
|
})]
|
|
613
610
|
})
|
|
614
611
|
]
|
|
615
612
|
})
|
|
616
613
|
}),
|
|
617
|
-
/* @__PURE__ */
|
|
614
|
+
/* @__PURE__ */ s(d, {
|
|
618
615
|
storageKey: "auth-security",
|
|
619
616
|
steps: [
|
|
620
|
-
...
|
|
617
|
+
...S?.mfaEnabled ? [] : [{
|
|
621
618
|
id: "enable-mfa",
|
|
622
|
-
label:
|
|
623
|
-
description:
|
|
624
|
-
onClick: () =>
|
|
619
|
+
label: b("auth.security.nextEnableMfa", "Turn on two-factor authentication"),
|
|
620
|
+
description: b("auth.security.nextEnableMfaDesc", "The single biggest step you can take to protect your account."),
|
|
621
|
+
onClick: () => x("/auth/mfa")
|
|
625
622
|
}],
|
|
626
623
|
{
|
|
627
624
|
id: "review-profile",
|
|
628
|
-
label:
|
|
629
|
-
description:
|
|
630
|
-
onClick: () =>
|
|
625
|
+
label: b("auth.security.nextProfile", "Review your profile details"),
|
|
626
|
+
description: b("auth.security.nextProfileDesc", "Make sure your name, email, and contact info are current."),
|
|
627
|
+
onClick: () => x("/auth/profile")
|
|
631
628
|
},
|
|
632
629
|
{
|
|
633
630
|
id: "change-password",
|
|
634
|
-
label:
|
|
635
|
-
description:
|
|
636
|
-
onClick: () =>
|
|
631
|
+
label: b("auth.security.nextPassword", "Update your password"),
|
|
632
|
+
description: b("auth.security.nextPasswordDesc", "Set a strong, unique password if you haven't recently."),
|
|
633
|
+
onClick: () => x("/auth/reset-password")
|
|
637
634
|
}
|
|
638
635
|
]
|
|
639
636
|
}),
|
|
640
|
-
/* @__PURE__ */
|
|
637
|
+
/* @__PURE__ */ s("footer", {
|
|
641
638
|
className: "mt-12 pt-6 border-t border-border-subtle ",
|
|
642
|
-
children: /* @__PURE__ */
|
|
639
|
+
children: /* @__PURE__ */ c("div", {
|
|
643
640
|
className: "flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 text-sm text-text-secondary ",
|
|
644
641
|
"data-tour": "auth-footer-actions",
|
|
645
|
-
children: [/* @__PURE__ */
|
|
646
|
-
|
|
642
|
+
children: [/* @__PURE__ */ c("p", { children: [
|
|
643
|
+
b("auth.security.signedInAs", "Signed in as"),
|
|
647
644
|
" ",
|
|
648
|
-
/* @__PURE__ */
|
|
645
|
+
/* @__PURE__ */ s("span", {
|
|
649
646
|
className: "font-medium text-text-primary ",
|
|
650
|
-
children:
|
|
647
|
+
children: S?.email
|
|
651
648
|
})
|
|
652
|
-
] }), /* @__PURE__ */
|
|
649
|
+
] }), /* @__PURE__ */ c("div", {
|
|
653
650
|
className: "flex items-center gap-4",
|
|
654
651
|
children: [
|
|
655
|
-
/* @__PURE__ */
|
|
652
|
+
/* @__PURE__ */ s("button", {
|
|
656
653
|
type: "button",
|
|
657
|
-
onClick: () =>
|
|
654
|
+
onClick: () => x("/auth/login"),
|
|
658
655
|
className: "hover:text-text-primary transition-colors",
|
|
659
|
-
children:
|
|
656
|
+
children: b("auth.security.switchAccount", "Switch Account")
|
|
660
657
|
}),
|
|
661
|
-
/* @__PURE__ */
|
|
658
|
+
/* @__PURE__ */ s("span", {
|
|
662
659
|
className: "text-text-muted",
|
|
663
660
|
"aria-hidden": "true",
|
|
664
661
|
children: "|"
|
|
665
662
|
}),
|
|
666
|
-
/* @__PURE__ */
|
|
663
|
+
/* @__PURE__ */ s("button", {
|
|
667
664
|
type: "button",
|
|
668
665
|
onClick: () => k(!0),
|
|
669
666
|
className: "hover:text-status-error-text transition-colors",
|
|
670
|
-
children:
|
|
667
|
+
children: b("auth.security.signOut", "Sign Out")
|
|
671
668
|
})
|
|
672
669
|
]
|
|
673
670
|
})]
|
|
@@ -678,6 +675,6 @@ function b({ enableAdminRoutes: b = !1 }) {
|
|
|
678
675
|
});
|
|
679
676
|
}
|
|
680
677
|
//#endregion
|
|
681
|
-
export {
|
|
678
|
+
export { y as SecurityPage };
|
|
682
679
|
|
|
683
680
|
//# sourceMappingURL=SecurityPage.js.map
|