@burdenoff/microfe-auth 2026.519.2 → 2026.520.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.
Files changed (47) hide show
  1. package/dist/auth/AuthRoutes.js +1 -1
  2. package/dist/auth/AuthRoutes.js.map +1 -1
  3. package/dist/auth/components/AuthLayout.js +1 -1
  4. package/dist/auth/components/AuthLayout.js.map +1 -1
  5. package/dist/auth/hooks/useContextSwitcherData.d.ts.map +1 -1
  6. package/dist/auth/hooks/useContextSwitcherData.js +25 -22
  7. package/dist/auth/hooks/useContextSwitcherData.js.map +1 -1
  8. package/dist/auth/hooks/useSessionOperations.d.ts.map +1 -1
  9. package/dist/auth/hooks/useSessionOperations.js +4 -1
  10. package/dist/auth/hooks/useSessionOperations.js.map +1 -1
  11. package/dist/auth/hooks/useUserOperations.d.ts.map +1 -1
  12. package/dist/auth/hooks/useUserOperations.js +26 -11
  13. package/dist/auth/hooks/useUserOperations.js.map +1 -1
  14. package/dist/auth/pages/LoginPage.d.ts.map +1 -1
  15. package/dist/auth/pages/LoginPage.js +3 -2
  16. package/dist/auth/pages/LoginPage.js.map +1 -1
  17. package/dist/auth/pages/PasswordResetPage.js +1 -1
  18. package/dist/auth/pages/PasswordResetPage.js.map +1 -1
  19. package/dist/auth/pages/ReactivatePage.js +1 -1
  20. package/dist/auth/pages/ReactivatePage.js.map +1 -1
  21. package/dist/auth/pages/RegisterPage.js +1 -1
  22. package/dist/auth/pages/RegisterPage.js.map +1 -1
  23. package/dist/auth/pages/SessionsPage.d.ts.map +1 -1
  24. package/dist/auth/pages/SessionsPage.js +185 -130
  25. package/dist/auth/pages/SessionsPage.js.map +1 -1
  26. package/dist/auth/pages/SsoCallbackPage.js +1 -1
  27. package/dist/auth/pages/SsoCallbackPage.js.map +1 -1
  28. package/dist/auth/pages/SsoConfigPage.d.ts.map +1 -1
  29. package/dist/auth/pages/SsoConfigPage.js +214 -190
  30. package/dist/auth/pages/SsoConfigPage.js.map +1 -1
  31. package/dist/auth/pages/SsoLoginPage.js +1 -1
  32. package/dist/auth/pages/SsoLoginPage.js.map +1 -1
  33. package/dist/auth/pages/UserProfilePage.d.ts.map +1 -1
  34. package/dist/auth/pages/UserProfilePage.js +246 -233
  35. package/dist/auth/pages/UserProfilePage.js.map +1 -1
  36. package/dist/auth/pages/UsersPage.d.ts.map +1 -1
  37. package/dist/auth/pages/UsersPage.js +0 -1
  38. package/dist/auth/pages/UsersPage.js.map +1 -1
  39. package/dist/auth/store/authStore.d.ts +20 -0
  40. package/dist/auth/store/authStore.d.ts.map +1 -1
  41. package/dist/auth/store/authStore.js.map +1 -1
  42. package/dist/microfe-auth.css +1 -1
  43. package/dist/translations/en.d.ts +12 -0
  44. package/dist/translations/en.d.ts.map +1 -1
  45. package/package.json +1 -1
  46. package/dist/auth/pages/AppsPage.d.ts +0 -5
  47. package/dist/auth/pages/AppsPage.d.ts.map +0 -1
@@ -3,283 +3,338 @@ import { useSessionOperations as t } from "../hooks/useSessionOperations.js";
3
3
  import "../hooks/index.js";
4
4
  import { AlertIcon as n, SpinnerIcon as r } from "../components/AuthIcons.js";
5
5
  import { formatRelativeTime as i, parseBrowserName as a, parseDeviceName as o } from "../utils/formatters.js";
6
- import { ConfirmActionDialog as s } from "../components/ConfirmActionDialog.js";
7
- import { useMemo as c, useState as l } from "react";
8
- import { useI18n as u } from "@burdenoff/fe-libs/shared/providers/shell";
9
- import { jsx as d, jsxs as f } from "react/jsx-runtime";
6
+ import { useCreateAuthExportJobMutation as s } from "../../generated/wspace-operations.js";
7
+ import { ConfirmActionDialog as c } from "../components/ConfirmActionDialog.js";
8
+ import { useMemo as l, useState as u } from "react";
9
+ import { useI18n as d } from "@burdenoff/fe-libs/shared/providers/shell";
10
+ import { Fragment as f, jsx as p, jsxs as m } from "react/jsx-runtime";
10
11
  //#region src/auth/pages/SessionsPage.tsx
11
- function p() {
12
- let { t: p } = u(), m = (e, t) => {
13
- let n = p(e);
12
+ function h() {
13
+ let { t: h } = d(), g = (e, t) => {
14
+ let n = h(e);
14
15
  return n === e ? t : n;
15
- }, h = e((e) => e.isAuthenticated), { activeSessions: g, revokeSession: _, revokeAllSessions: v, isLoading: y, page: b, totalPages: x, totalCount: S, hasMore: C, goToNextPage: w, goToPrevPage: T } = t({ disableTokenInfoQuery: !0 }), [E, D] = l(null), [O, k] = l(null), [A, j] = l(null), [M, N] = l(!1), P = c(() => {
16
+ }, _ = e((e) => e.isAuthenticated), { activeSessions: v, revokeSession: y, revokeAllSessions: b, isLoading: x, page: S, totalPages: C, totalCount: w, hasMore: T, goToNextPage: E, goToPrevPage: D } = t({ disableTokenInfoQuery: !0 }), [O, k] = u(null), [A, j] = u(null), [M, N] = u(null), [P, F] = u(!1), [I, { loading: L }] = s(), [R, z] = u(null), B = async () => {
17
+ z(null);
18
+ try {
19
+ await I({ variables: { input: {
20
+ name: "Sessions Export",
21
+ entityTypes: ["auth_sessions"],
22
+ format: "CSV",
23
+ exportScope: "INDIVIDUAL",
24
+ includeMetadata: !0
25
+ } } });
26
+ } catch (e) {
27
+ z(e instanceof Error ? e.message : "Failed to start export");
28
+ }
29
+ }, V = l(() => {
16
30
  let e = /* @__PURE__ */ new Map();
17
- for (let t of g) {
31
+ for (let t of v) {
18
32
  let n = o(t.userAgent ?? ""), r = e.get(n);
19
33
  (!r || new Date(t.lastActivityAt) > new Date(r.lastActivityAt)) && e.set(n, t);
20
34
  }
21
35
  return [...e.values()];
22
- }, [g]), F = async (e) => {
36
+ }, [v]), H = async (e) => {
23
37
  try {
24
- await _(e), k("Session revoked successfully"), j(null);
38
+ await y(e), j("Session revoked successfully"), N(null);
25
39
  } catch (e) {
26
- D(e instanceof Error ? e.message : "Failed to revoke session");
40
+ k(e instanceof Error ? e.message : "Failed to revoke session");
27
41
  }
28
42
  };
29
- return h ? /* @__PURE__ */ f("div", {
43
+ return _ ? /* @__PURE__ */ m("div", {
30
44
  className: "max-w-4xl mx-auto p-6",
31
45
  children: [
32
- /* @__PURE__ */ d(s, {
33
- open: A !== null,
46
+ /* @__PURE__ */ p(c, {
47
+ open: M !== null,
34
48
  onOpenChange: (e) => {
35
- e || j(null);
49
+ e || N(null);
36
50
  },
37
51
  title: "Revoke this session?",
38
52
  description: "The selected device will be signed out immediately and will need to authenticate again.",
39
53
  confirmText: "Revoke session",
40
54
  variant: "danger",
41
- isPending: y,
55
+ isPending: x,
42
56
  onConfirm: async () => {
43
- A && await F(A);
57
+ M && await H(M);
44
58
  }
45
59
  }),
46
- /* @__PURE__ */ d(s, {
47
- open: M,
48
- onOpenChange: N,
60
+ /* @__PURE__ */ p(c, {
61
+ open: P,
62
+ onOpenChange: F,
49
63
  title: "Revoke every other session?",
50
64
  description: "All devices except your current one will be signed out immediately.",
51
65
  confirmText: "Revoke all other sessions",
52
66
  variant: "warning",
53
- isPending: y,
67
+ isPending: x,
54
68
  onConfirm: async () => {
55
69
  try {
56
- await v(), k("All other sessions have been revoked"), N(!1);
70
+ await b(), j("All other sessions have been revoked"), F(!1);
57
71
  } catch (e) {
58
- D(e instanceof Error ? e.message : "Failed to revoke all sessions");
72
+ k(e instanceof Error ? e.message : "Failed to revoke all sessions");
59
73
  }
60
74
  }
61
75
  }),
62
- /* @__PURE__ */ d("div", {
76
+ /* @__PURE__ */ p("div", {
63
77
  "aria-live": "polite",
64
78
  "aria-atomic": "true",
65
79
  className: "sr-only",
66
- children: O
80
+ children: A
67
81
  }),
68
- /* @__PURE__ */ d("div", {
82
+ /* @__PURE__ */ p("div", {
69
83
  role: "alert",
70
84
  "aria-live": "assertive",
71
85
  "aria-atomic": "true",
72
86
  className: "sr-only",
73
- children: E
87
+ children: O
74
88
  }),
75
- /* @__PURE__ */ f("div", {
89
+ /* @__PURE__ */ m("div", {
76
90
  className: "flex items-center justify-between mb-8",
77
- children: [/* @__PURE__ */ f("div", { children: [/* @__PURE__ */ d("h1", {
91
+ children: [/* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("h1", {
78
92
  className: "text-3xl font-semibold text-text-primary",
79
- children: m("auth.sessions.title", "Active Sessions")
80
- }), /* @__PURE__ */ f("p", {
93
+ children: g("auth.sessions.title", "Active Sessions")
94
+ }), /* @__PURE__ */ m("p", {
81
95
  className: "text-text-secondary mt-2",
82
96
  children: [
83
- m("auth.sessions.sessionCount", "You have"),
97
+ g("auth.sessions.sessionCount", "You have"),
84
98
  " ",
85
- S,
99
+ w,
86
100
  " ",
87
- m(S === 1 ? "auth.sessions.sessionsSingular" : "auth.sessions.sessionsPlural", S === 1 ? "active session" : "active sessions")
101
+ g(w === 1 ? "auth.sessions.sessionsSingular" : "auth.sessions.sessionsPlural", w === 1 ? "active session" : "active sessions")
88
102
  ]
89
- })] }), /* @__PURE__ */ d("div", {
103
+ })] }), /* @__PURE__ */ m("div", {
90
104
  className: "flex items-center gap-3",
91
- children: S > 1 && /* @__PURE__ */ d("button", {
105
+ children: [/* @__PURE__ */ p("button", {
106
+ type: "button",
107
+ onClick: B,
108
+ disabled: L,
109
+ "aria-label": g("auth.sessions.exportAriaLabel", "Export sessions data"),
110
+ className: "flex items-center gap-2 px-4 py-2.5 rounded-xl border border-border-default text-text-primary font-medium hover:bg-bg-sunken disabled:opacity-50 disabled:cursor-not-allowed transition-colors duration-200",
111
+ children: L ? /* @__PURE__ */ m(f, { children: [/* @__PURE__ */ p(r, {
112
+ className: "w-4 h-4 animate-spin",
113
+ "aria-hidden": "true"
114
+ }), g("auth.sessions.exporting", "Exporting...")] }) : /* @__PURE__ */ m(f, { children: [/* @__PURE__ */ p("svg", {
115
+ className: "w-4 h-4",
116
+ fill: "none",
117
+ viewBox: "0 0 24 24",
118
+ stroke: "currentColor",
119
+ "aria-hidden": "true",
120
+ children: /* @__PURE__ */ p("path", {
121
+ strokeLinecap: "round",
122
+ strokeLinejoin: "round",
123
+ strokeWidth: 2,
124
+ d: "M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4"
125
+ })
126
+ }), g("auth.sessions.export", "Export")] })
127
+ }), w > 1 && /* @__PURE__ */ p("button", {
92
128
  type: "button",
93
- onClick: () => N(!0),
129
+ onClick: () => F(!0),
94
130
  className: "px-4 py-2.5 rounded-xl border border-status-error-border text-status-error-text font-medium hover:bg-status-error-bg-subtle transition-colors duration-200",
95
- children: m("auth.sessions.revokeAll", "Revoke All Sessions")
96
- })
131
+ children: g("auth.sessions.revokeAll", "Revoke All Sessions")
132
+ })]
97
133
  })]
98
134
  }),
99
- O && /* @__PURE__ */ f("div", {
135
+ A && /* @__PURE__ */ m("div", {
100
136
  role: "status",
101
137
  className: "mb-6 p-4 rounded-xl bg-status-success-bg-subtle border border-status-success-border",
102
- children: [/* @__PURE__ */ d("p", {
138
+ children: [/* @__PURE__ */ p("p", {
103
139
  className: "text-status-success-text",
104
- children: O
105
- }), /* @__PURE__ */ d("button", {
140
+ children: A
141
+ }), /* @__PURE__ */ p("button", {
106
142
  type: "button",
107
- onClick: () => k(null),
143
+ onClick: () => j(null),
108
144
  className: "mt-2 text-sm text-status-success-text hover:underline transition-colors duration-200",
109
145
  children: "Dismiss"
110
146
  })]
111
147
  }),
112
- E && /* @__PURE__ */ f("div", {
148
+ R && /* @__PURE__ */ m("div", {
149
+ role: "alert",
150
+ className: "mb-6 flex items-start gap-3 p-4 rounded-xl bg-status-error-bg-subtle border border-status-error-border",
151
+ children: [/* @__PURE__ */ p(n, {
152
+ className: "w-5 h-5 text-status-error-text flex-shrink-0 mt-0.5",
153
+ "aria-hidden": "true"
154
+ }), /* @__PURE__ */ m("div", {
155
+ className: "flex-1",
156
+ children: [/* @__PURE__ */ p("p", {
157
+ className: "text-sm text-status-error-text",
158
+ children: R
159
+ }), /* @__PURE__ */ p("button", {
160
+ type: "button",
161
+ onClick: () => z(null),
162
+ className: "mt-2 text-sm text-status-error-text hover:underline transition-colors duration-200",
163
+ children: g("auth.sessions.dismiss", "Dismiss")
164
+ })]
165
+ })]
166
+ }),
167
+ O && /* @__PURE__ */ m("div", {
113
168
  role: "alert",
114
169
  className: "mb-6 flex items-start gap-3 p-4 rounded-xl bg-status-error-bg-subtle border border-status-error-border",
115
- children: [/* @__PURE__ */ d(n, {
170
+ children: [/* @__PURE__ */ p(n, {
116
171
  className: "w-5 h-5 text-status-error-text flex-shrink-0 mt-0.5",
117
172
  "aria-hidden": "true"
118
- }), /* @__PURE__ */ f("div", {
173
+ }), /* @__PURE__ */ m("div", {
119
174
  className: "flex-1",
120
- children: [/* @__PURE__ */ d("p", {
175
+ children: [/* @__PURE__ */ p("p", {
121
176
  className: "text-sm text-status-error-text",
122
- children: E
123
- }), /* @__PURE__ */ d("button", {
177
+ children: O
178
+ }), /* @__PURE__ */ p("button", {
124
179
  type: "button",
125
- onClick: () => D(null),
180
+ onClick: () => k(null),
126
181
  className: "mt-2 text-sm text-status-error-text hover:underline transition-colors duration-200",
127
182
  children: "Dismiss"
128
183
  })]
129
184
  })]
130
185
  }),
131
- y ? /* @__PURE__ */ f("div", {
186
+ x ? /* @__PURE__ */ m("div", {
132
187
  "aria-live": "polite",
133
188
  "aria-busy": "true",
134
189
  className: "flex items-center justify-center py-12",
135
- children: [/* @__PURE__ */ d(r, {
190
+ children: [/* @__PURE__ */ p(r, {
136
191
  className: "w-8 h-8 text-text-link animate-spin",
137
192
  "aria-hidden": "true"
138
- }), /* @__PURE__ */ d("span", {
193
+ }), /* @__PURE__ */ p("span", {
139
194
  className: "ml-3 text-text-secondary",
140
- children: m("auth.sessions.loading", "Loading sessions...")
195
+ children: g("auth.sessions.loading", "Loading sessions...")
141
196
  })]
142
- }) : P.length === 0 ? /* @__PURE__ */ f("div", {
197
+ }) : V.length === 0 ? /* @__PURE__ */ m("div", {
143
198
  className: "text-center py-16 border-2 border-dashed border-border-subtle rounded-xl",
144
199
  role: "status",
145
- children: [/* @__PURE__ */ d("div", {
200
+ children: [/* @__PURE__ */ p("div", {
146
201
  className: "w-16 h-16 mx-auto mb-4 rounded-full bg-bg-muted flex items-center justify-center",
147
- children: /* @__PURE__ */ d("svg", {
202
+ children: /* @__PURE__ */ p("svg", {
148
203
  className: "w-8 h-8 text-text-tertiary",
149
204
  fill: "none",
150
205
  viewBox: "0 0 24 24",
151
206
  stroke: "currentColor",
152
207
  "aria-hidden": "true",
153
- children: /* @__PURE__ */ d("path", {
208
+ children: /* @__PURE__ */ p("path", {
154
209
  strokeLinecap: "round",
155
210
  strokeLinejoin: "round",
156
211
  strokeWidth: 1.5,
157
212
  d: "M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"
158
213
  })
159
214
  })
160
- }), /* @__PURE__ */ d("p", {
215
+ }), /* @__PURE__ */ p("p", {
161
216
  className: "text-text-secondary",
162
- children: m("auth.sessions.noSessions", "No active sessions found")
217
+ children: g("auth.sessions.noSessions", "No active sessions found")
163
218
  })]
164
- }) : /* @__PURE__ */ d("div", {
219
+ }) : /* @__PURE__ */ p("div", {
165
220
  className: "space-y-4",
166
221
  "aria-live": "polite",
167
- "aria-busy": y,
168
- children: P.map((e) => /* @__PURE__ */ d("div", {
222
+ "aria-busy": x,
223
+ children: V.map((e) => /* @__PURE__ */ p("div", {
169
224
  className: "p-6 rounded-xl border border-border-default bg-bg-surface shadow-sm hover:shadow-md transition-shadow",
170
- children: /* @__PURE__ */ f("div", {
225
+ children: /* @__PURE__ */ m("div", {
171
226
  className: "flex items-start justify-between",
172
- children: [/* @__PURE__ */ f("div", {
227
+ children: [/* @__PURE__ */ m("div", {
173
228
  className: "flex items-start gap-4",
174
- children: [/* @__PURE__ */ d("div", {
229
+ children: [/* @__PURE__ */ p("div", {
175
230
  className: "w-12 h-12 rounded-xl bg-bg-accent flex items-center justify-center flex-shrink-0",
176
231
  "aria-hidden": "true",
177
- children: /* @__PURE__ */ d("svg", {
232
+ children: /* @__PURE__ */ p("svg", {
178
233
  className: "w-6 h-6 text-text-link",
179
234
  fill: "none",
180
235
  viewBox: "0 0 24 24",
181
236
  stroke: "currentColor",
182
- children: /* @__PURE__ */ d("path", {
237
+ children: /* @__PURE__ */ p("path", {
183
238
  strokeLinecap: "round",
184
239
  strokeLinejoin: "round",
185
240
  strokeWidth: 1.5,
186
241
  d: "M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"
187
242
  })
188
243
  })
189
- }), /* @__PURE__ */ f("div", {
244
+ }), /* @__PURE__ */ m("div", {
190
245
  className: "flex-1",
191
246
  children: [
192
- /* @__PURE__ */ f("div", {
247
+ /* @__PURE__ */ m("div", {
193
248
  className: "flex items-center gap-3 mb-1",
194
- children: [/* @__PURE__ */ d("h3", {
249
+ children: [/* @__PURE__ */ p("h3", {
195
250
  className: "text-lg font-semibold text-text-primary",
196
- children: e.isCurrent && o(e.userAgent) === "Unknown Device" ? m("auth.sessions.thisDevice", "This Device") : o(e.userAgent)
197
- }), e.isCurrent && /* @__PURE__ */ d("span", {
251
+ children: e.isCurrent && o(e.userAgent) === "Unknown Device" ? g("auth.sessions.thisDevice", "This Device") : o(e.userAgent)
252
+ }), e.isCurrent && /* @__PURE__ */ p("span", {
198
253
  role: "status",
199
254
  className: "px-2.5 py-1 rounded-full bg-status-success-bg-subtle text-status-success-text text-xs font-medium",
200
- children: m("auth.sessions.currentSession", "Current Session")
255
+ children: g("auth.sessions.currentSession", "Current Session")
201
256
  })]
202
257
  }),
203
- /* @__PURE__ */ d("p", {
258
+ /* @__PURE__ */ p("p", {
204
259
  className: "text-sm text-text-secondary mb-2",
205
- children: a(e.userAgent) === "Unknown Browser" && e.isCurrent ? m("auth.sessions.currentBrowser", "Current Browser") : a(e.userAgent)
260
+ children: a(e.userAgent) === "Unknown Browser" && e.isCurrent ? g("auth.sessions.currentBrowser", "Current Browser") : a(e.userAgent)
206
261
  }),
207
- /* @__PURE__ */ f("dl", {
262
+ /* @__PURE__ */ m("dl", {
208
263
  className: "flex flex-wrap gap-4 text-sm text-text-secondary",
209
264
  children: [
210
- e.ipAddress && e.ipAddress !== "unknown" && /* @__PURE__ */ f("div", {
265
+ e.ipAddress && e.ipAddress !== "unknown" && /* @__PURE__ */ m("div", {
211
266
  className: "flex items-center gap-1.5",
212
267
  children: [
213
- /* @__PURE__ */ d("svg", {
268
+ /* @__PURE__ */ p("svg", {
214
269
  className: "w-4 h-4",
215
270
  fill: "none",
216
271
  viewBox: "0 0 24 24",
217
272
  stroke: "currentColor",
218
273
  "aria-hidden": "true",
219
- children: /* @__PURE__ */ d("path", {
274
+ children: /* @__PURE__ */ p("path", {
220
275
  strokeLinecap: "round",
221
276
  strokeLinejoin: "round",
222
277
  strokeWidth: 2,
223
278
  d: "M21 12a9 9 0 01-9 9m9-9a9 9 0 00-9-9m9 9H3m9 9a9 9 0 01-9-9m9 9c1.657 0 3-4.03 3-9s-1.343-9-3-9m0 18c-1.657 0-3-4.03-3-9s1.343-9 3-9m-9 9a9 9 0 019-9"
224
279
  })
225
280
  }),
226
- /* @__PURE__ */ d("dt", {
281
+ /* @__PURE__ */ p("dt", {
227
282
  className: "sr-only",
228
283
  children: "IP address"
229
284
  }),
230
- /* @__PURE__ */ d("dd", { children: e.ipAddress })
285
+ /* @__PURE__ */ p("dd", { children: e.ipAddress })
231
286
  ]
232
287
  }),
233
- e.location && /* @__PURE__ */ f("div", {
288
+ e.location && /* @__PURE__ */ m("div", {
234
289
  className: "flex items-center gap-1.5",
235
290
  children: [
236
- /* @__PURE__ */ f("svg", {
291
+ /* @__PURE__ */ m("svg", {
237
292
  className: "w-4 h-4",
238
293
  fill: "none",
239
294
  viewBox: "0 0 24 24",
240
295
  stroke: "currentColor",
241
296
  "aria-hidden": "true",
242
- children: [/* @__PURE__ */ d("path", {
297
+ children: [/* @__PURE__ */ p("path", {
243
298
  strokeLinecap: "round",
244
299
  strokeLinejoin: "round",
245
300
  strokeWidth: 2,
246
301
  d: "M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"
247
- }), /* @__PURE__ */ d("path", {
302
+ }), /* @__PURE__ */ p("path", {
248
303
  strokeLinecap: "round",
249
304
  strokeLinejoin: "round",
250
305
  strokeWidth: 2,
251
306
  d: "M15 11a3 3 0 11-6 0 3 3 0 016 0z"
252
307
  })]
253
308
  }),
254
- /* @__PURE__ */ d("dt", {
309
+ /* @__PURE__ */ p("dt", {
255
310
  className: "sr-only",
256
311
  children: "Location"
257
312
  }),
258
- /* @__PURE__ */ d("dd", { children: e.location })
313
+ /* @__PURE__ */ p("dd", { children: e.location })
259
314
  ]
260
315
  }),
261
- /* @__PURE__ */ f("div", {
316
+ /* @__PURE__ */ m("div", {
262
317
  className: "flex items-center gap-1.5",
263
318
  children: [
264
- /* @__PURE__ */ d("svg", {
319
+ /* @__PURE__ */ p("svg", {
265
320
  className: "w-4 h-4",
266
321
  fill: "none",
267
322
  viewBox: "0 0 24 24",
268
323
  stroke: "currentColor",
269
324
  "aria-hidden": "true",
270
- children: /* @__PURE__ */ d("path", {
325
+ children: /* @__PURE__ */ p("path", {
271
326
  strokeLinecap: "round",
272
327
  strokeLinejoin: "round",
273
328
  strokeWidth: 2,
274
329
  d: "M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"
275
330
  })
276
331
  }),
277
- /* @__PURE__ */ d("dt", {
332
+ /* @__PURE__ */ p("dt", {
278
333
  className: "sr-only",
279
334
  children: "Last active"
280
335
  }),
281
- /* @__PURE__ */ f("dd", { children: [
282
- m("auth.sessions.lastActive", "Last active"),
336
+ /* @__PURE__ */ m("dd", { children: [
337
+ g("auth.sessions.lastActive", "Last active"),
283
338
  " ",
284
339
  i(e.lastActivityAt)
285
340
  ] })
@@ -289,70 +344,70 @@ function p() {
289
344
  })
290
345
  ]
291
346
  })]
292
- }), !e.isCurrent && /* @__PURE__ */ d("button", {
347
+ }), !e.isCurrent && /* @__PURE__ */ p("button", {
293
348
  type: "button",
294
- onClick: () => j(e.id),
295
- "aria-label": `${m("auth.sessions.revoke", "Revoke")} ${o(e.userAgent)} session`,
349
+ onClick: () => N(e.id),
350
+ "aria-label": `${g("auth.sessions.revoke", "Revoke")} ${o(e.userAgent)} session`,
296
351
  className: "ml-4 px-4 py-2 rounded-lg text-sm font-medium border border-status-error-border text-status-error-text bg-bg-surface hover:bg-status-error-bg-subtle transition-colors duration-200",
297
- children: m("auth.sessions.revoke", "Revoke")
352
+ children: g("auth.sessions.revoke", "Revoke")
298
353
  })]
299
354
  })
300
355
  }, e.id))
301
356
  }),
302
- !y && x > 1 && /* @__PURE__ */ f("div", {
357
+ !x && C > 1 && /* @__PURE__ */ m("div", {
303
358
  className: "flex items-center justify-between mt-6 pt-4 border-t border-border-subtle",
304
359
  children: [
305
- /* @__PURE__ */ f("button", {
360
+ /* @__PURE__ */ m("button", {
306
361
  type: "button",
307
- onClick: T,
308
- disabled: b === 0,
362
+ onClick: D,
363
+ disabled: S === 0,
309
364
  className: "flex items-center gap-2 px-4 py-2 rounded-lg border border-border-default text-text-primary bg-bg-surface hover:bg-bg-sunken disabled:opacity-40 disabled:cursor-not-allowed transition-colors font-medium text-sm",
310
- "aria-label": m("auth.sessions.prevPage", "Previous page"),
311
- children: [/* @__PURE__ */ d("svg", {
365
+ "aria-label": g("auth.sessions.prevPage", "Previous page"),
366
+ children: [/* @__PURE__ */ p("svg", {
312
367
  className: "w-4 h-4",
313
368
  fill: "none",
314
369
  viewBox: "0 0 24 24",
315
370
  stroke: "currentColor",
316
371
  "aria-hidden": "true",
317
- children: /* @__PURE__ */ d("path", {
372
+ children: /* @__PURE__ */ p("path", {
318
373
  strokeLinecap: "round",
319
374
  strokeLinejoin: "round",
320
375
  strokeWidth: 2,
321
376
  d: "M15 19l-7-7 7-7"
322
377
  })
323
- }), m("auth.sessions.prev", "Previous")]
378
+ }), g("auth.sessions.prev", "Previous")]
324
379
  }),
325
- /* @__PURE__ */ f("span", {
380
+ /* @__PURE__ */ m("span", {
326
381
  className: "text-sm text-text-secondary",
327
382
  children: [
328
- m("auth.sessions.pageOf", "Page"),
383
+ g("auth.sessions.pageOf", "Page"),
329
384
  " ",
330
- /* @__PURE__ */ d("span", {
385
+ /* @__PURE__ */ p("span", {
331
386
  className: "font-medium text-text-primary",
332
- children: b + 1
387
+ children: S + 1
333
388
  }),
334
389
  " ",
335
- m("auth.sessions.of", "of"),
390
+ g("auth.sessions.of", "of"),
336
391
  " ",
337
- /* @__PURE__ */ d("span", {
392
+ /* @__PURE__ */ p("span", {
338
393
  className: "font-medium text-text-primary",
339
- children: x
394
+ children: C
340
395
  })
341
396
  ]
342
397
  }),
343
- /* @__PURE__ */ f("button", {
398
+ /* @__PURE__ */ m("button", {
344
399
  type: "button",
345
- onClick: w,
346
- disabled: !C,
400
+ onClick: E,
401
+ disabled: !T,
347
402
  className: "flex items-center gap-2 px-4 py-2 rounded-lg border border-border-default text-text-primary bg-bg-surface hover:bg-bg-sunken disabled:opacity-40 disabled:cursor-not-allowed transition-colors font-medium text-sm",
348
- "aria-label": m("auth.sessions.nextPage", "Next page"),
349
- children: [m("auth.sessions.next", "Next"), /* @__PURE__ */ d("svg", {
403
+ "aria-label": g("auth.sessions.nextPage", "Next page"),
404
+ children: [g("auth.sessions.next", "Next"), /* @__PURE__ */ p("svg", {
350
405
  className: "w-4 h-4",
351
406
  fill: "none",
352
407
  viewBox: "0 0 24 24",
353
408
  stroke: "currentColor",
354
409
  "aria-hidden": "true",
355
- children: /* @__PURE__ */ d("path", {
410
+ children: /* @__PURE__ */ p("path", {
356
411
  strokeLinecap: "round",
357
412
  strokeLinejoin: "round",
358
413
  strokeWidth: 2,
@@ -363,31 +418,31 @@ function p() {
363
418
  ]
364
419
  })
365
420
  ]
366
- }) : /* @__PURE__ */ d("div", {
421
+ }) : /* @__PURE__ */ p("div", {
367
422
  className: "max-w-4xl mx-auto p-6",
368
- children: /* @__PURE__ */ f("div", {
423
+ children: /* @__PURE__ */ m("div", {
369
424
  className: "text-center py-16 border-2 border-dashed border-border-subtle rounded-xl",
370
425
  children: [
371
- /* @__PURE__ */ d("div", {
426
+ /* @__PURE__ */ p("div", {
372
427
  className: "w-16 h-16 mx-auto mb-4 rounded-full bg-status-warning-bg-subtle flex items-center justify-center",
373
- children: /* @__PURE__ */ d(n, {
428
+ children: /* @__PURE__ */ p(n, {
374
429
  className: "w-8 h-8 text-status-warning-text",
375
430
  "aria-hidden": "true"
376
431
  })
377
432
  }),
378
- /* @__PURE__ */ d("h2", {
433
+ /* @__PURE__ */ p("h2", {
379
434
  className: "text-xl font-semibold text-text-primary mb-2",
380
- children: m("auth.sessions.authRequired", "Authentication Required")
435
+ children: g("auth.sessions.authRequired", "Authentication Required")
381
436
  }),
382
- /* @__PURE__ */ d("p", {
437
+ /* @__PURE__ */ p("p", {
383
438
  className: "text-text-secondary",
384
- children: m("auth.sessions.signInToView", "Please sign in to view your active sessions")
439
+ children: g("auth.sessions.signInToView", "Please sign in to view your active sessions")
385
440
  })
386
441
  ]
387
442
  })
388
443
  });
389
444
  }
390
445
  //#endregion
391
- export { p as SessionsPage };
446
+ export { h as SessionsPage };
392
447
 
393
448
  //# sourceMappingURL=SessionsPage.js.map