@burdenoff/microfe-auth 2026.531.3 → 2026.601.1

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.
@@ -1,134 +1,134 @@
1
1
  import { useAuthStore as e } from "../store/authStore.js";
2
2
  import { useAuthOperations as t } from "../hooks/useAuthOperations.js";
3
3
  import { useAccountOperations as n } from "../hooks/useAccountOperations.js";
4
- import { formatDate as ee } from "../utils/formatters.js";
5
- import { ConfirmActionDialog as te } from "../components/ConfirmActionDialog.js";
6
- import { nativeImpact as r, nativeNotify as i } from "../../utils/nativeBridge.js";
7
- import { useEffect as a, useId as o, useRef as s, useState as c } from "react";
8
- import { useNavigate as l } from "react-router-dom";
9
- import { useI18n as u } from "@burdenoff/fe-libs/shared/providers/shell";
10
- import { jsx as d, jsxs as f } from "react/jsx-runtime";
4
+ import { formatDate as r } from "../utils/formatters.js";
5
+ import { ConfirmActionDialog as ee } from "../components/ConfirmActionDialog.js";
6
+ import { nativeImpact as i, nativeNotify as a } from "../../utils/nativeBridge.js";
7
+ import { useEffect as o, useId as s, useRef as c, useState as l } from "react";
8
+ import { useNavigate as te } from "react-router-dom";
9
+ import { useI18n as ne } from "@burdenoff/fe-libs/shared/providers/shell";
10
+ import { jsx as u, jsxs as d } from "react/jsx-runtime";
11
11
  //#region src/auth/pages/SecurityPage.tsx
12
- var p = ({ className: e }) => /* @__PURE__ */ d("svg", {
12
+ var f = ({ className: e }) => /* @__PURE__ */ u("svg", {
13
13
  className: e,
14
14
  fill: "none",
15
15
  viewBox: "0 0 24 24",
16
16
  stroke: "currentColor",
17
17
  "aria-hidden": "true",
18
- children: /* @__PURE__ */ d("path", {
18
+ children: /* @__PURE__ */ u("path", {
19
19
  strokeLinecap: "round",
20
20
  strokeLinejoin: "round",
21
21
  strokeWidth: 1.5,
22
22
  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"
23
23
  })
24
- }), ne = ({ className: e }) => /* @__PURE__ */ d("svg", {
24
+ }), re = ({ className: e }) => /* @__PURE__ */ u("svg", {
25
25
  className: e,
26
26
  fill: "none",
27
27
  viewBox: "0 0 24 24",
28
28
  stroke: "currentColor",
29
29
  "aria-hidden": "true",
30
- children: /* @__PURE__ */ d("path", {
30
+ children: /* @__PURE__ */ u("path", {
31
31
  strokeLinecap: "round",
32
32
  strokeLinejoin: "round",
33
33
  strokeWidth: 1.5,
34
34
  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"
35
35
  })
36
- }), re = ({ className: e }) => /* @__PURE__ */ d("svg", {
36
+ }), ie = ({ className: e }) => /* @__PURE__ */ u("svg", {
37
37
  className: e,
38
38
  fill: "none",
39
39
  viewBox: "0 0 24 24",
40
40
  stroke: "currentColor",
41
41
  "aria-hidden": "true",
42
- children: /* @__PURE__ */ d("path", {
42
+ children: /* @__PURE__ */ u("path", {
43
43
  strokeLinecap: "round",
44
44
  strokeLinejoin: "round",
45
45
  strokeWidth: 1.5,
46
46
  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"
47
47
  })
48
- }), ie = ({ className: e }) => /* @__PURE__ */ d("svg", {
48
+ }), ae = ({ className: e }) => /* @__PURE__ */ u("svg", {
49
49
  className: e,
50
50
  fill: "none",
51
51
  viewBox: "0 0 24 24",
52
52
  stroke: "currentColor",
53
53
  "aria-hidden": "true",
54
- children: /* @__PURE__ */ d("path", {
54
+ children: /* @__PURE__ */ u("path", {
55
55
  strokeLinecap: "round",
56
56
  strokeLinejoin: "round",
57
57
  strokeWidth: 1.5,
58
58
  d: "M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z"
59
59
  })
60
- }), ae = ({ className: e }) => /* @__PURE__ */ d("svg", {
60
+ }), oe = ({ className: e }) => /* @__PURE__ */ u("svg", {
61
61
  className: e,
62
62
  fill: "none",
63
63
  viewBox: "0 0 24 24",
64
64
  stroke: "currentColor",
65
65
  "aria-hidden": "true",
66
- children: /* @__PURE__ */ d("path", {
66
+ children: /* @__PURE__ */ u("path", {
67
67
  strokeLinecap: "round",
68
68
  strokeLinejoin: "round",
69
69
  strokeWidth: 1.5,
70
70
  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"
71
71
  })
72
- }), m = ({ className: e }) => /* @__PURE__ */ d("svg", {
72
+ }), p = ({ className: e }) => /* @__PURE__ */ u("svg", {
73
73
  className: e,
74
74
  fill: "none",
75
75
  viewBox: "0 0 24 24",
76
76
  stroke: "currentColor",
77
77
  "aria-hidden": "true",
78
- children: /* @__PURE__ */ d("path", {
78
+ children: /* @__PURE__ */ u("path", {
79
79
  strokeLinecap: "round",
80
80
  strokeLinejoin: "round",
81
81
  strokeWidth: 2,
82
82
  d: "M9 5l7 7-7 7"
83
83
  })
84
- }), h = ({ className: e }) => /* @__PURE__ */ d("svg", {
84
+ }), m = ({ className: e }) => /* @__PURE__ */ u("svg", {
85
85
  className: e,
86
86
  fill: "currentColor",
87
87
  viewBox: "0 0 20 20",
88
88
  "aria-hidden": "true",
89
- children: /* @__PURE__ */ d("path", {
89
+ children: /* @__PURE__ */ u("path", {
90
90
  fillRule: "evenodd",
91
91
  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",
92
92
  clipRule: "evenodd"
93
93
  })
94
- }), g = ({ className: e }) => /* @__PURE__ */ d("svg", {
94
+ }), h = ({ className: e }) => /* @__PURE__ */ u("svg", {
95
95
  className: e,
96
96
  fill: "currentColor",
97
97
  viewBox: "0 0 20 20",
98
98
  "aria-hidden": "true",
99
- children: /* @__PURE__ */ d("path", {
99
+ children: /* @__PURE__ */ u("path", {
100
100
  fillRule: "evenodd",
101
101
  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",
102
102
  clipRule: "evenodd"
103
103
  })
104
- }), _ = ({ className: e }) => /* @__PURE__ */ f("svg", {
104
+ }), g = ({ className: e }) => /* @__PURE__ */ d("svg", {
105
105
  className: e,
106
106
  fill: "none",
107
107
  viewBox: "0 0 24 24",
108
108
  "aria-hidden": "true",
109
- children: [/* @__PURE__ */ d("circle", {
109
+ children: [/* @__PURE__ */ u("circle", {
110
110
  className: "opacity-25",
111
111
  cx: "12",
112
112
  cy: "12",
113
113
  r: "10",
114
114
  stroke: "currentColor",
115
115
  strokeWidth: "4"
116
- }), /* @__PURE__ */ d("path", {
116
+ }), /* @__PURE__ */ u("path", {
117
117
  className: "opacity-75",
118
118
  fill: "currentColor",
119
119
  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"
120
120
  })]
121
- }), v = "DELETE MY ACCOUNT";
122
- function y() {
123
- let { t: y } = u(), b = (e, t) => {
121
+ }), _ = "DELETE MY ACCOUNT";
122
+ function v({ enableAdminRoutes: v = !1 }) {
123
+ let { t: y } = ne(), b = (e, t) => {
124
124
  let n = y(e);
125
125
  return n === e ? t : n;
126
- }, x = l(), S = e((e) => e.user), { signOut: oe } = t({ disableCurrentUserQuery: !0 }), { deactivateAccount: se, deleteAccount: ce, isDeactivating: C, isDeleting: w } = n(), [T, E] = c(!1), [D, O] = c(!1), le = [
126
+ }, x = te(), S = e((e) => e.user), { signOut: se } = t({ disableCurrentUserQuery: !0 }), { deactivateAccount: ce, deleteAccount: le, isDeactivating: C, isDeleting: w } = n(), [T, E] = l(!1), [D, O] = l(!1), ue = [
127
127
  {
128
128
  name: b("auth.security.navProfile", "User Profile"),
129
129
  description: b("auth.security.navProfileDesc", "View and edit your profile information"),
130
130
  path: "/auth/profile",
131
- icon: ie,
131
+ icon: ae,
132
132
  color: "text-accent-teal",
133
133
  bgColor: "bg-accent-teal-subtle"
134
134
  },
@@ -136,7 +136,7 @@ function y() {
136
136
  name: b("auth.security.navMfa", "Two-Factor Authentication"),
137
137
  description: b("auth.security.navMfaDesc", "Secure your account with TOTP"),
138
138
  path: "/auth/mfa",
139
- icon: ne,
139
+ icon: re,
140
140
  color: "text-accent-purple",
141
141
  bgColor: "bg-accent-purple-subtle"
142
142
  },
@@ -144,58 +144,58 @@ function y() {
144
144
  name: b("auth.security.navUsers", "Users"),
145
145
  description: b("auth.security.navUsersDesc", "Manage system users"),
146
146
  path: "/auth/users",
147
- icon: re,
147
+ icon: ie,
148
148
  color: "text-accent-indigo",
149
149
  bgColor: "bg-accent-indigo-subtle",
150
150
  adminOnly: !0
151
151
  }
152
- ], ue = [{
152
+ ], de = [{
153
153
  name: b("auth.security.navSso", "SSO Configuration"),
154
154
  description: b("auth.security.navSsoDesc", "Enterprise single sign-on"),
155
155
  path: "/auth/sso",
156
- icon: ae,
156
+ icon: oe,
157
157
  color: "text-accent-cyan",
158
158
  bgColor: "bg-accent-cyan-subtle",
159
159
  adminOnly: !0
160
- }], [k, A] = c(!1), [j, M] = c(!1), [N, P] = c(""), [F, I] = c(""), [L, R] = c(null), [z, B] = c(null), V = o(), H = o(), U = o(), W = o(), G = o(), K = o(), q = o(), J = s(null), Y = s(null), X = s(null), Z = s(null);
161
- a(() => {
160
+ }], [k, A] = l(!1), [j, M] = l(!1), [N, P] = l(""), [F, I] = l(""), [L, R] = l(null), [z, B] = l(null), V = s(), H = s(), U = s(), W = s(), G = s(), K = s(), q = s(), J = c(null), Y = c(null), X = c(null), Z = c(null);
161
+ o(() => {
162
162
  k ? X.current?.focus() : J.current?.focus();
163
- }, [k]), a(() => {
163
+ }, [k]), o(() => {
164
164
  j ? Z.current?.focus() : Y.current?.focus();
165
165
  }, [j]);
166
- let de = async () => {
166
+ let fe = async () => {
167
167
  E(!0);
168
168
  try {
169
- await oe(), x("/auth/login"), O(!1);
169
+ await se(), x("/auth/login"), O(!1);
170
170
  } catch (e) {
171
171
  console.error("Logout failed:", e), E(!1);
172
172
  }
173
- }, fe = async () => {
173
+ }, pe = async () => {
174
174
  R(null);
175
175
  try {
176
- let e = await se(N);
176
+ let e = await ce(N);
177
177
  e.success ? x("/auth/login", { replace: !0 }) : R(e.message || b("auth.security.deactivateFailed", "Failed to deactivate account"));
178
178
  } catch (e) {
179
179
  R(e instanceof Error ? e.message : b("auth.security.deactivateFailed", "Failed to deactivate account"));
180
180
  }
181
- }, pe = async () => {
182
- if (R(null), F !== v) {
181
+ }, me = async () => {
182
+ if (R(null), F !== _) {
183
183
  R(b("auth.security.deleteConfirmMismatch", "Please type \"DELETE MY ACCOUNT\" to confirm"));
184
184
  return;
185
185
  }
186
- r("medium");
186
+ i("medium");
187
187
  try {
188
- let e = await ce(N, F);
189
- e.success ? (i("success"), x("/auth/login", { replace: !0 })) : (i("error"), R(e.message || b("auth.security.deleteFailed", "Failed to delete account")));
188
+ let e = await le(N, F);
189
+ e.success ? (a("success"), x("/auth/login", { replace: !0 })) : (a("error"), R(e.message || b("auth.security.deleteFailed", "Failed to delete account")));
190
190
  } catch (e) {
191
- i("error"), R(e instanceof Error ? e.message : b("auth.security.deleteFailed", "Failed to delete account"));
191
+ a("error"), R(e instanceof Error ? e.message : b("auth.security.deleteFailed", "Failed to delete account"));
192
192
  }
193
193
  }, Q = () => {
194
194
  A(!1), M(!1), P(""), I(""), R(null), B(null);
195
- }, $ = S?.role === "SUPER_ADMIN" || S?.role === "TENANT_ADMIN" || S?.role === "ORG_ADMIN", me = le.filter((e) => !e.adminOnly || $), he = ue.filter((e) => !e.adminOnly || $);
196
- return /* @__PURE__ */ f("div", {
195
+ }, $ = S?.role === "SUPER_ADMIN" || S?.role === "TENANT_ADMIN" || S?.role === "ORG_ADMIN", he = ue.filter((e) => !e.adminOnly || v && $), ge = de.filter((e) => !e.adminOnly || v && $);
196
+ return /* @__PURE__ */ d("div", {
197
197
  className: "bg-bg-canvas p-6",
198
- children: [/* @__PURE__ */ d(te, {
198
+ children: [/* @__PURE__ */ u(ee, {
199
199
  open: D,
200
200
  onOpenChange: O,
201
201
  title: b("auth.security.signOutDialogTitle", "Sign out now?"),
@@ -203,228 +203,228 @@ function y() {
203
203
  confirmText: b("auth.security.signOutDialogConfirm", "Sign out"),
204
204
  variant: "warning",
205
205
  isPending: T,
206
- onConfirm: de
207
- }), /* @__PURE__ */ f("main", {
206
+ onConfirm: fe
207
+ }), /* @__PURE__ */ d("main", {
208
208
  className: "max-w-7xl mx-auto space-y-8",
209
209
  children: [
210
- /* @__PURE__ */ f("div", {
210
+ /* @__PURE__ */ d("div", {
211
211
  className: "flex items-center gap-3",
212
212
  "data-tour": "auth-security-header",
213
- children: [/* @__PURE__ */ d("div", {
213
+ children: [/* @__PURE__ */ u("div", {
214
214
  className: "auth-brand-badge flex size-10 items-center justify-center rounded-xl",
215
- children: /* @__PURE__ */ d(p, { className: "size-6 text-white" })
216
- }), /* @__PURE__ */ f("div", { children: [/* @__PURE__ */ d("h1", {
215
+ children: /* @__PURE__ */ u(f, { className: "size-6 text-white" })
216
+ }), /* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("h1", {
217
217
  className: "text-lg font-bold text-text-primary",
218
218
  children: b("auth.security.title", "Security Center")
219
- }), /* @__PURE__ */ d("p", {
219
+ }), /* @__PURE__ */ u("p", {
220
220
  className: "text-xs text-text-secondary ",
221
221
  children: b("auth.security.subtitle", "Account & Authentication")
222
222
  })] })]
223
223
  }),
224
- /* @__PURE__ */ d("div", {
224
+ /* @__PURE__ */ u("div", {
225
225
  className: "auth-hero-card rounded-2xl p-6",
226
226
  "data-tour": "auth-security-status-banner",
227
- children: /* @__PURE__ */ f("div", {
227
+ children: /* @__PURE__ */ d("div", {
228
228
  className: "flex flex-col md:flex-row md:items-center md:justify-between gap-4",
229
- children: [/* @__PURE__ */ f("div", {
229
+ children: [/* @__PURE__ */ d("div", {
230
230
  className: "flex items-center gap-4",
231
- children: [/* @__PURE__ */ d("div", {
231
+ children: [/* @__PURE__ */ u("div", {
232
232
  className: "size-14 rounded-2xl bg-bg-surface/20 backdrop-blur flex items-center justify-center",
233
- children: /* @__PURE__ */ d(p, { className: "size-8 text-white" })
234
- }), /* @__PURE__ */ f("div", { children: [/* @__PURE__ */ d("h2", {
233
+ children: /* @__PURE__ */ u(f, { className: "size-8 text-white" })
234
+ }), /* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("h2", {
235
235
  className: "text-xl font-bold",
236
236
  children: b("auth.security.securityStatus", "Security Status")
237
- }), /* @__PURE__ */ d("p", {
237
+ }), /* @__PURE__ */ u("p", {
238
238
  className: "opacity-80",
239
239
  children: S?.mfaEnabled ? b("auth.security.wellProtected", "Your account is well protected") : b("auth.security.enableMfaSuggestion", "Enable MFA for better security")
240
240
  })] })]
241
- }), /* @__PURE__ */ d("div", {
241
+ }), /* @__PURE__ */ u("div", {
242
242
  className: "flex items-center gap-3",
243
- children: S?.mfaEnabled ? /* @__PURE__ */ f("span", {
243
+ children: S?.mfaEnabled ? /* @__PURE__ */ d("span", {
244
244
  className: "inline-flex items-center gap-2 px-4 py-2 rounded-xl bg-bg-surface/20 backdrop-blur text-white font-medium",
245
- children: [/* @__PURE__ */ d(h, { className: "size-5 text-status-success-text" }), b("auth.security.mfaEnabled", "MFA Enabled")]
246
- }) : /* @__PURE__ */ f("button", {
245
+ children: [/* @__PURE__ */ u(m, { className: "size-5 text-status-success-text" }), b("auth.security.mfaEnabled", "MFA Enabled")]
246
+ }) : /* @__PURE__ */ d("button", {
247
247
  type: "button",
248
248
  onClick: () => x("/auth/mfa"),
249
249
  className: "inline-flex items-center gap-2 px-4 py-2 rounded-xl bg-bg-surface text-text-link font-semibold hover:bg-status-info-bg-subtle transition-colors shadow-lg",
250
- children: [/* @__PURE__ */ d(g, { className: "size-5 text-status-warning-text" }), b("auth.security.enableMfaNow", "Enable MFA Now")]
250
+ children: [/* @__PURE__ */ u(h, { className: "size-5 text-status-warning-text" }), b("auth.security.enableMfaNow", "Enable MFA Now")]
251
251
  })
252
252
  })]
253
253
  })
254
254
  }),
255
- /* @__PURE__ */ f("div", {
255
+ /* @__PURE__ */ d("div", {
256
256
  className: "mb-8 p-6 rounded-2xl bg-bg-surface border border-border-subtle shadow-sm",
257
257
  "data-tour": "auth-account-info-card",
258
- children: [/* @__PURE__ */ d("h3", {
258
+ children: [/* @__PURE__ */ u("h3", {
259
259
  className: "text-lg font-semibold text-text-primary mb-4",
260
260
  children: b("auth.security.accountInfo", "Account Information")
261
- }), /* @__PURE__ */ f("dl", {
261
+ }), /* @__PURE__ */ d("dl", {
262
262
  className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6",
263
263
  children: [
264
- /* @__PURE__ */ f("div", {
264
+ /* @__PURE__ */ d("div", {
265
265
  className: "sm:col-span-2 lg:col-span-1",
266
- children: [/* @__PURE__ */ d("dt", {
266
+ children: [/* @__PURE__ */ u("dt", {
267
267
  className: "text-sm font-medium text-text-secondary",
268
268
  children: b("auth.security.email", "Email")
269
- }), /* @__PURE__ */ f("dd", {
269
+ }), /* @__PURE__ */ d("dd", {
270
270
  className: "mt-1 text-text-primary",
271
- children: [/* @__PURE__ */ d("span", {
271
+ children: [/* @__PURE__ */ u("span", {
272
272
  className: "block truncate",
273
273
  title: S?.email,
274
274
  children: S?.email
275
- }), S?.emailVerified && /* @__PURE__ */ f("span", {
275
+ }), S?.emailVerified && /* @__PURE__ */ d("span", {
276
276
  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",
277
- children: [/* @__PURE__ */ d(h, { className: "size-3" }), b("auth.security.verified", "Verified")]
277
+ children: [/* @__PURE__ */ u(m, { className: "size-3" }), b("auth.security.verified", "Verified")]
278
278
  })]
279
279
  })]
280
280
  }),
281
- /* @__PURE__ */ f("div", { children: [/* @__PURE__ */ d("dt", {
281
+ /* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("dt", {
282
282
  className: "text-sm font-medium text-text-secondary",
283
283
  children: b("auth.security.username", "Username")
284
- }), /* @__PURE__ */ d("dd", {
284
+ }), /* @__PURE__ */ u("dd", {
285
285
  className: "mt-1 text-text-primary truncate",
286
286
  title: S?.username ?? void 0,
287
287
  children: S?.username || "-"
288
288
  })] }),
289
- /* @__PURE__ */ f("div", { children: [/* @__PURE__ */ d("dt", {
289
+ /* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("dt", {
290
290
  className: "text-sm font-medium text-text-secondary",
291
291
  children: b("auth.security.role", "Role")
292
- }), /* @__PURE__ */ d("dd", {
292
+ }), /* @__PURE__ */ u("dd", {
293
293
  className: "mt-1",
294
- children: /* @__PURE__ */ d("span", {
294
+ children: /* @__PURE__ */ u("span", {
295
295
  className: "inline-flex px-2.5 py-0.5 rounded-full bg-accent-indigo-subtle text-accent-indigo text-xs font-medium",
296
296
  children: S?.role || "USER"
297
297
  })
298
298
  })] }),
299
- /* @__PURE__ */ f("div", { children: [/* @__PURE__ */ d("dt", {
299
+ /* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("dt", {
300
300
  className: "text-sm font-medium text-text-secondary",
301
301
  children: b("auth.security.memberSince", "Member Since")
302
- }), /* @__PURE__ */ d("dd", {
302
+ }), /* @__PURE__ */ u("dd", {
303
303
  className: "mt-1 text-text-primary",
304
- children: S?.createdAt ? ee(S.createdAt) : "-"
304
+ children: S?.createdAt ? r(S.createdAt) : "-"
305
305
  })] })
306
306
  ]
307
307
  })]
308
308
  }),
309
- /* @__PURE__ */ f("div", {
309
+ /* @__PURE__ */ d("div", {
310
310
  className: "mb-8",
311
- children: [/* @__PURE__ */ d("h3", {
311
+ children: [/* @__PURE__ */ u("h3", {
312
312
  className: "text-lg font-semibold text-text-primary mb-4",
313
313
  children: b("auth.security.securityAuth", "Security & Authentication")
314
- }), /* @__PURE__ */ d("div", {
314
+ }), /* @__PURE__ */ u("div", {
315
315
  className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4",
316
316
  "data-tour": "auth-security-nav-grid",
317
- children: me.map((e) => /* @__PURE__ */ d("button", {
317
+ children: he.map((e) => /* @__PURE__ */ u("button", {
318
318
  type: "button",
319
319
  onClick: () => x(e.path),
320
320
  "aria-label": e.name,
321
321
  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",
322
- children: /* @__PURE__ */ f("div", {
322
+ children: /* @__PURE__ */ d("div", {
323
323
  className: "flex items-start gap-4",
324
324
  children: [
325
- /* @__PURE__ */ d("div", {
325
+ /* @__PURE__ */ u("div", {
326
326
  className: `size-12 rounded-xl ${e.bgColor} flex items-center justify-center flex-shrink-0 transition-transform group-hover:scale-110`,
327
- children: /* @__PURE__ */ d(e.icon, { className: `size-6 ${e.color}` })
327
+ children: /* @__PURE__ */ u(e.icon, { className: `size-6 ${e.color}` })
328
328
  }),
329
- /* @__PURE__ */ f("div", {
329
+ /* @__PURE__ */ d("div", {
330
330
  className: "flex-1 min-w-0",
331
- children: [/* @__PURE__ */ d("h4", {
331
+ children: [/* @__PURE__ */ u("h4", {
332
332
  className: "text-base font-semibold text-text-primary group-hover:text-accent-indigo transition-colors",
333
333
  children: e.name
334
- }), /* @__PURE__ */ d("p", {
334
+ }), /* @__PURE__ */ u("p", {
335
335
  className: "mt-1 text-sm text-text-secondary ",
336
336
  children: e.description
337
337
  })]
338
338
  }),
339
- /* @__PURE__ */ d(m, { className: "size-5 text-text-tertiary group-hover:text-indigo-500 transition-colors flex-shrink-0" })
339
+ /* @__PURE__ */ u(p, { className: "size-5 text-text-tertiary group-hover:text-indigo-500 transition-colors flex-shrink-0" })
340
340
  ]
341
341
  })
342
342
  }, e.path))
343
343
  })]
344
344
  }),
345
- /* @__PURE__ */ f("div", {
345
+ /* @__PURE__ */ d("div", {
346
346
  className: "mb-8",
347
- children: [/* @__PURE__ */ d("h3", {
347
+ children: [/* @__PURE__ */ u("h3", {
348
348
  className: "text-lg font-semibold text-text-primary mb-4",
349
349
  children: b("auth.security.quickActions", "Quick Actions")
350
- }), /* @__PURE__ */ d("div", {
350
+ }), /* @__PURE__ */ u("div", {
351
351
  className: "grid grid-cols-1 sm:grid-cols-2 gap-4",
352
- children: he.map((e) => /* @__PURE__ */ d("button", {
352
+ children: ge.map((e) => /* @__PURE__ */ u("button", {
353
353
  type: "button",
354
354
  onClick: () => x(e.path),
355
355
  "aria-label": e.name,
356
356
  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",
357
- children: /* @__PURE__ */ f("div", {
357
+ children: /* @__PURE__ */ d("div", {
358
358
  className: "flex items-start gap-4",
359
359
  children: [
360
- /* @__PURE__ */ d("div", {
360
+ /* @__PURE__ */ u("div", {
361
361
  className: `size-12 rounded-xl ${e.bgColor} flex items-center justify-center flex-shrink-0 transition-transform group-hover:scale-110`,
362
- children: /* @__PURE__ */ d(e.icon, { className: `size-6 ${e.color}` })
362
+ children: /* @__PURE__ */ u(e.icon, { className: `size-6 ${e.color}` })
363
363
  }),
364
- /* @__PURE__ */ f("div", {
364
+ /* @__PURE__ */ d("div", {
365
365
  className: "flex-1 min-w-0",
366
- children: [/* @__PURE__ */ d("h4", {
366
+ children: [/* @__PURE__ */ u("h4", {
367
367
  className: "text-base font-semibold text-text-primary group-hover:text-accent-indigo transition-colors",
368
368
  children: e.name
369
- }), /* @__PURE__ */ d("p", {
369
+ }), /* @__PURE__ */ u("p", {
370
370
  className: "mt-1 text-sm text-text-secondary ",
371
371
  children: e.description
372
372
  })]
373
373
  }),
374
- /* @__PURE__ */ d(m, { className: "size-5 text-text-tertiary group-hover:text-indigo-500 transition-colors flex-shrink-0" })
374
+ /* @__PURE__ */ u(p, { className: "size-5 text-text-tertiary group-hover:text-indigo-500 transition-colors flex-shrink-0" })
375
375
  ]
376
376
  })
377
377
  }, e.path))
378
378
  })]
379
379
  }),
380
- /* @__PURE__ */ f("div", {
380
+ /* @__PURE__ */ d("div", {
381
381
  className: "grid grid-cols-1 lg:grid-cols-2 gap-6",
382
- children: [/* @__PURE__ */ f("div", {
382
+ children: [/* @__PURE__ */ d("div", {
383
383
  className: "p-6 rounded-2xl bg-bg-surface border border-border-subtle",
384
384
  "data-tour": "auth-password-section",
385
- children: [/* @__PURE__ */ d("div", {
385
+ children: [/* @__PURE__ */ u("div", {
386
386
  className: "flex items-start justify-between",
387
- children: /* @__PURE__ */ f("div", { children: [
388
- /* @__PURE__ */ d("h3", {
387
+ children: /* @__PURE__ */ d("div", { children: [
388
+ /* @__PURE__ */ u("h3", {
389
389
  className: "text-lg font-semibold text-text-primary",
390
390
  children: b("auth.security.password", "Password")
391
391
  }),
392
- /* @__PURE__ */ d("p", {
392
+ /* @__PURE__ */ u("p", {
393
393
  className: "mt-1 text-sm text-text-secondary ",
394
394
  children: b("auth.security.updatePassword", "Update your password to keep your account secure")
395
395
  }),
396
- /* @__PURE__ */ d("p", {
396
+ /* @__PURE__ */ u("p", {
397
397
  className: "mt-2 text-xs text-text-tertiary ",
398
398
  children: b("auth.security.lastChanged", "Last changed: Never")
399
399
  })
400
400
  ] })
401
- }), /* @__PURE__ */ d("button", {
401
+ }), /* @__PURE__ */ u("button", {
402
402
  type: "button",
403
403
  onClick: () => x("/auth/reset-password"),
404
404
  className: "auth-primary-button mt-4 w-full px-5 py-2.5 font-semibold sm:w-auto",
405
405
  children: b("auth.security.changePassword", "Change Password")
406
406
  })]
407
- }), /* @__PURE__ */ f("div", {
407
+ }), /* @__PURE__ */ d("div", {
408
408
  className: "p-6 rounded-2xl bg-status-error-bg-subtle border border-status-error-border",
409
409
  "data-tour": "auth-danger-zone",
410
410
  children: [
411
- /* @__PURE__ */ d("h3", {
411
+ /* @__PURE__ */ u("h3", {
412
412
  className: "text-lg font-semibold text-status-error-text",
413
413
  children: b("auth.security.dangerZone", "Danger Zone")
414
414
  }),
415
- /* @__PURE__ */ d("p", {
415
+ /* @__PURE__ */ u("p", {
416
416
  className: "mt-1 text-sm text-status-error-text/80",
417
417
  children: b("auth.security.dangerWarning", "These actions affect your account. Proceed with caution.")
418
418
  }),
419
- /* @__PURE__ */ f("div", {
419
+ /* @__PURE__ */ d("div", {
420
420
  className: "mt-4 flex flex-wrap gap-3",
421
- children: [/* @__PURE__ */ d("button", {
421
+ children: [/* @__PURE__ */ u("button", {
422
422
  ref: J,
423
423
  type: "button",
424
424
  onClick: () => A(!0),
425
425
  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",
426
426
  children: b("auth.security.deactivateAccount", "Deactivate Account")
427
- }), /* @__PURE__ */ d("button", {
427
+ }), /* @__PURE__ */ u("button", {
428
428
  ref: Y,
429
429
  type: "button",
430
430
  onClick: () => M(!0),
@@ -435,13 +435,13 @@ function y() {
435
435
  ]
436
436
  })]
437
437
  }),
438
- k && /* @__PURE__ */ d("div", {
438
+ k && /* @__PURE__ */ u("div", {
439
439
  className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm p-4",
440
440
  role: "presentation",
441
441
  onClick: (e) => {
442
442
  e.target === e.currentTarget && Q();
443
443
  },
444
- children: /* @__PURE__ */ f("div", {
444
+ children: /* @__PURE__ */ d("div", {
445
445
  ref: X,
446
446
  role: "dialog",
447
447
  "aria-modal": "true",
@@ -449,32 +449,32 @@ function y() {
449
449
  tabIndex: -1,
450
450
  className: "w-full max-w-md bg-bg-surface rounded-2xl shadow-2xl p-6 outline-none",
451
451
  children: [
452
- /* @__PURE__ */ d("h3", {
452
+ /* @__PURE__ */ u("h3", {
453
453
  id: V,
454
454
  className: "text-xl font-bold text-text-primary mb-2",
455
455
  children: b("auth.security.deactivateTitle", "Deactivate Account")
456
456
  }),
457
- /* @__PURE__ */ d("p", {
457
+ /* @__PURE__ */ u("p", {
458
458
  className: "text-sm text-text-secondary mb-4",
459
459
  children: b("auth.security.deactivateDesc", "Your account will be temporarily disabled. You can reactivate it by signing in again with your credentials.")
460
460
  }),
461
- L && /* @__PURE__ */ d("div", {
461
+ L && /* @__PURE__ */ u("div", {
462
462
  id: U,
463
463
  role: "alert",
464
464
  className: "mb-4 p-3 rounded-lg bg-status-error-bg-subtle text-status-error-text text-sm",
465
465
  children: L
466
466
  }),
467
- z && /* @__PURE__ */ d("output", {
467
+ z && /* @__PURE__ */ u("output", {
468
468
  className: "block mb-4 p-3 rounded-lg bg-status-success-bg-subtle text-status-success-text text-sm",
469
469
  children: z
470
470
  }),
471
- /* @__PURE__ */ f("div", {
471
+ /* @__PURE__ */ d("div", {
472
472
  className: "mb-4",
473
- children: [/* @__PURE__ */ d("label", {
473
+ children: [/* @__PURE__ */ u("label", {
474
474
  htmlFor: H,
475
475
  className: "block text-sm font-medium text-text-primary mb-1",
476
476
  children: b("auth.security.enterPasswordConfirm", "Enter your password to confirm")
477
- }), /* @__PURE__ */ d("input", {
477
+ }), /* @__PURE__ */ u("input", {
478
478
  id: H,
479
479
  type: "password",
480
480
  value: N,
@@ -488,31 +488,31 @@ function y() {
488
488
  placeholder: b("auth.security.yourPassword", "Your password")
489
489
  })]
490
490
  }),
491
- /* @__PURE__ */ f("div", {
491
+ /* @__PURE__ */ d("div", {
492
492
  className: "flex gap-3",
493
- children: [/* @__PURE__ */ d("button", {
493
+ children: [/* @__PURE__ */ u("button", {
494
494
  type: "button",
495
495
  onClick: Q,
496
496
  className: "flex-1 px-4 py-2 rounded-lg border border-border-default text-text-primary font-medium hover:bg-bg-sunken transition-colors",
497
497
  children: b("auth.security.cancel", "Cancel")
498
- }), /* @__PURE__ */ f("button", {
498
+ }), /* @__PURE__ */ d("button", {
499
499
  type: "button",
500
- onClick: () => void fe(),
500
+ onClick: () => void pe(),
501
501
  disabled: !N || C,
502
502
  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",
503
- children: [C && /* @__PURE__ */ d(_, { className: "size-4 animate-spin" }), b("auth.security.deactivateBtn", "Deactivate")]
503
+ children: [C && /* @__PURE__ */ u(g, { className: "size-4 animate-spin" }), b("auth.security.deactivateBtn", "Deactivate")]
504
504
  })]
505
505
  })
506
506
  ]
507
507
  })
508
508
  }),
509
- j && /* @__PURE__ */ d("div", {
509
+ j && /* @__PURE__ */ u("div", {
510
510
  className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm p-4",
511
511
  role: "presentation",
512
512
  onClick: (e) => {
513
513
  e.target === e.currentTarget && Q();
514
514
  },
515
- children: /* @__PURE__ */ f("div", {
515
+ children: /* @__PURE__ */ d("div", {
516
516
  ref: Z,
517
517
  role: "dialog",
518
518
  "aria-modal": "true",
@@ -520,32 +520,32 @@ function y() {
520
520
  tabIndex: -1,
521
521
  className: "w-full max-w-md bg-bg-surface rounded-2xl shadow-2xl p-6 outline-none",
522
522
  children: [
523
- /* @__PURE__ */ d("h3", {
523
+ /* @__PURE__ */ u("h3", {
524
524
  id: W,
525
525
  className: "text-xl font-bold text-status-error-text mb-2",
526
526
  children: b("auth.security.deleteTitle", "Delete Account Permanently")
527
527
  }),
528
- /* @__PURE__ */ d("p", {
528
+ /* @__PURE__ */ u("p", {
529
529
  className: "text-sm text-text-secondary mb-4",
530
530
  children: b("auth.security.deleteDesc", "This action is irreversible. All your data will be permanently deleted and cannot be recovered.")
531
531
  }),
532
- L && /* @__PURE__ */ d("div", {
532
+ L && /* @__PURE__ */ u("div", {
533
533
  id: q,
534
534
  role: "alert",
535
535
  className: "mb-4 p-3 rounded-lg bg-status-error-bg-subtle text-status-error-text text-sm",
536
536
  children: L
537
537
  }),
538
- z && /* @__PURE__ */ d("output", {
538
+ z && /* @__PURE__ */ u("output", {
539
539
  className: "block mb-4 p-3 rounded-lg bg-status-success-bg-subtle text-status-success-text text-sm",
540
540
  children: z
541
541
  }),
542
- /* @__PURE__ */ f("div", {
542
+ /* @__PURE__ */ d("div", {
543
543
  className: "mb-4",
544
- children: [/* @__PURE__ */ d("label", {
544
+ children: [/* @__PURE__ */ u("label", {
545
545
  htmlFor: G,
546
546
  className: "block text-sm font-medium text-text-primary mb-1",
547
547
  children: b("auth.security.enterPasswordDelete", "Enter your password")
548
- }), /* @__PURE__ */ d("input", {
548
+ }), /* @__PURE__ */ u("input", {
549
549
  id: G,
550
550
  type: "password",
551
551
  value: N,
@@ -559,22 +559,22 @@ function y() {
559
559
  placeholder: b("auth.security.yourPassword", "Your password")
560
560
  })]
561
561
  }),
562
- /* @__PURE__ */ f("div", {
562
+ /* @__PURE__ */ d("div", {
563
563
  className: "mb-4",
564
- children: [/* @__PURE__ */ f("label", {
564
+ children: [/* @__PURE__ */ d("label", {
565
565
  htmlFor: K,
566
566
  className: "block text-sm font-medium text-text-primary mb-1",
567
567
  children: [
568
568
  b("auth.security.type", "Type"),
569
569
  " ",
570
- /* @__PURE__ */ d("code", {
570
+ /* @__PURE__ */ u("code", {
571
571
  className: "px-1 py-0.5 rounded bg-bg-sunken text-status-error-text font-mono text-sm",
572
- children: v
572
+ children: _
573
573
  }),
574
574
  " ",
575
575
  b("auth.security.toConfirm", "to confirm")
576
576
  ]
577
- }), /* @__PURE__ */ d("input", {
577
+ }), /* @__PURE__ */ u("input", {
578
578
  id: K,
579
579
  type: "text",
580
580
  value: F,
@@ -582,57 +582,57 @@ function y() {
582
582
  "aria-required": "true",
583
583
  "aria-label": b("auth.security.deleteConfirmAriaLabel", "Type DELETE MY ACCOUNT to confirm"),
584
584
  "aria-describedby": L ? q : void 0,
585
- "aria-invalid": F.length > 0 && F !== v,
585
+ "aria-invalid": F.length > 0 && F !== _,
586
586
  autoComplete: "off",
587
587
  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",
588
588
  placeholder: b("auth.security.deleteConfirmPlaceholder", "DELETE MY ACCOUNT")
589
589
  })]
590
590
  }),
591
- /* @__PURE__ */ f("div", {
591
+ /* @__PURE__ */ d("div", {
592
592
  className: "flex gap-3",
593
- children: [/* @__PURE__ */ d("button", {
593
+ children: [/* @__PURE__ */ u("button", {
594
594
  type: "button",
595
595
  onClick: Q,
596
596
  className: "flex-1 px-4 py-2 rounded-lg border border-border-default text-text-primary font-medium hover:bg-bg-sunken transition-colors",
597
597
  children: b("auth.security.cancel", "Cancel")
598
- }), /* @__PURE__ */ f("button", {
598
+ }), /* @__PURE__ */ d("button", {
599
599
  type: "button",
600
- onClick: () => void pe(),
601
- disabled: !N || F !== v || w,
600
+ onClick: () => void me(),
601
+ disabled: !N || F !== _ || w,
602
602
  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",
603
- children: [w && /* @__PURE__ */ d(_, { className: "size-4 animate-spin" }), b("auth.security.deleteForever", "Delete Forever")]
603
+ children: [w && /* @__PURE__ */ u(g, { className: "size-4 animate-spin" }), b("auth.security.deleteForever", "Delete Forever")]
604
604
  })]
605
605
  })
606
606
  ]
607
607
  })
608
608
  }),
609
- /* @__PURE__ */ d("footer", {
609
+ /* @__PURE__ */ u("footer", {
610
610
  className: "mt-12 pt-6 border-t border-border-subtle ",
611
- children: /* @__PURE__ */ f("div", {
611
+ children: /* @__PURE__ */ d("div", {
612
612
  className: "flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 text-sm text-text-secondary ",
613
613
  "data-tour": "auth-footer-actions",
614
- children: [/* @__PURE__ */ f("p", { children: [
614
+ children: [/* @__PURE__ */ d("p", { children: [
615
615
  b("auth.security.signedInAs", "Signed in as"),
616
616
  " ",
617
- /* @__PURE__ */ d("span", {
617
+ /* @__PURE__ */ u("span", {
618
618
  className: "font-medium text-text-primary ",
619
619
  children: S?.email
620
620
  })
621
- ] }), /* @__PURE__ */ f("div", {
621
+ ] }), /* @__PURE__ */ d("div", {
622
622
  className: "flex items-center gap-4",
623
623
  children: [
624
- /* @__PURE__ */ d("button", {
624
+ /* @__PURE__ */ u("button", {
625
625
  type: "button",
626
626
  onClick: () => x("/auth/login"),
627
627
  className: "hover:text-text-primary transition-colors",
628
628
  children: b("auth.security.switchAccount", "Switch Account")
629
629
  }),
630
- /* @__PURE__ */ d("span", {
630
+ /* @__PURE__ */ u("span", {
631
631
  className: "text-text-muted",
632
632
  "aria-hidden": "true",
633
633
  children: "|"
634
634
  }),
635
- /* @__PURE__ */ d("button", {
635
+ /* @__PURE__ */ u("button", {
636
636
  type: "button",
637
637
  onClick: () => O(!0),
638
638
  className: "hover:text-status-error-text transition-colors",
@@ -647,6 +647,6 @@ function y() {
647
647
  });
648
648
  }
649
649
  //#endregion
650
- export { y as SecurityPage };
650
+ export { v as SecurityPage };
651
651
 
652
652
  //# sourceMappingURL=SecurityPage.js.map