@burdenoff/microfe-auth 2026.830.1 → 2026.904.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.
Files changed (66) hide show
  1. package/dist/auth/AuthRoot.js +43 -41
  2. package/dist/auth/AuthRoot.js.map +1 -1
  3. package/dist/auth/AuthRoutes.js +7 -0
  4. package/dist/auth/AuthRoutes.js.map +1 -1
  5. package/dist/auth/components/AuthLayout.js +65 -67
  6. package/dist/auth/components/AuthLayout.js.map +1 -1
  7. package/dist/auth/components/CaptchaV2.js +21 -24
  8. package/dist/auth/components/CaptchaV2.js.map +1 -1
  9. package/dist/auth/components/ConfirmActionDialog.js +33 -32
  10. package/dist/auth/components/ConfirmActionDialog.js.map +1 -1
  11. package/dist/auth/components/profile/UserProfileMenu.js +44 -46
  12. package/dist/auth/components/profile/UserProfileMenu.js.map +1 -1
  13. package/dist/auth/components/workspace/WorkspaceSelector.js +62 -68
  14. package/dist/auth/components/workspace/WorkspaceSelector.js.map +1 -1
  15. package/dist/auth/pages/AuditLogPage.js +65 -68
  16. package/dist/auth/pages/AuditLogPage.js.map +1 -1
  17. package/dist/auth/pages/EmailVerifyPage.js +51 -54
  18. package/dist/auth/pages/EmailVerifyPage.js.map +1 -1
  19. package/dist/auth/pages/LoginPage.js +223 -225
  20. package/dist/auth/pages/LoginPage.js.map +1 -1
  21. package/dist/auth/pages/MagicLinkPage.js +67 -69
  22. package/dist/auth/pages/MagicLinkPage.js.map +1 -1
  23. package/dist/auth/pages/MfaSetupPage.js +85 -88
  24. package/dist/auth/pages/MfaSetupPage.js.map +1 -1
  25. package/dist/auth/pages/MfaVerifyPage.js +60 -63
  26. package/dist/auth/pages/MfaVerifyPage.js.map +1 -1
  27. package/dist/auth/pages/OAuthCallbackPage.js +37 -40
  28. package/dist/auth/pages/OAuthCallbackPage.js.map +1 -1
  29. package/dist/auth/pages/PasswordResetPage.js +102 -105
  30. package/dist/auth/pages/PasswordResetPage.js.map +1 -1
  31. package/dist/auth/pages/ReactivatePage.js +54 -57
  32. package/dist/auth/pages/ReactivatePage.js.map +1 -1
  33. package/dist/auth/pages/RegisterPage.js +171 -174
  34. package/dist/auth/pages/RegisterPage.js.map +1 -1
  35. package/dist/auth/pages/SSOClearPage.js +21 -20
  36. package/dist/auth/pages/SSOClearPage.js.map +1 -1
  37. package/dist/auth/pages/SSODepositPage.js +27 -26
  38. package/dist/auth/pages/SSODepositPage.js.map +1 -1
  39. package/dist/auth/pages/SSORelayCallbackPage.js +19 -18
  40. package/dist/auth/pages/SSORelayCallbackPage.js.map +1 -1
  41. package/dist/auth/pages/SecurityPage.js +247 -250
  42. package/dist/auth/pages/SecurityPage.js.map +1 -1
  43. package/dist/auth/pages/SessionsPage.js +95 -98
  44. package/dist/auth/pages/SessionsPage.js.map +1 -1
  45. package/dist/auth/pages/SsoCallbackPage.js +53 -56
  46. package/dist/auth/pages/SsoCallbackPage.js.map +1 -1
  47. package/dist/auth/pages/SsoConfigPage.js +296 -299
  48. package/dist/auth/pages/SsoConfigPage.js.map +1 -1
  49. package/dist/auth/pages/SsoLoginPage.js +65 -68
  50. package/dist/auth/pages/SsoLoginPage.js.map +1 -1
  51. package/dist/auth/pages/UserDetailsPage.js +124 -127
  52. package/dist/auth/pages/UserDetailsPage.js.map +1 -1
  53. package/dist/auth/pages/UserProfilePage.js +171 -174
  54. package/dist/auth/pages/UserProfilePage.js.map +1 -1
  55. package/dist/auth/pages/UsersPage.js +322 -325
  56. package/dist/auth/pages/UsersPage.js.map +1 -1
  57. package/dist/index.d.ts +1 -0
  58. package/dist/index.js +2 -1
  59. package/dist/shared/hooks/index.d.ts +1 -6
  60. package/dist/shared/hooks/useTr.d.ts +16 -0
  61. package/dist/shared/hooks/useTr.js +14 -0
  62. package/dist/shared/hooks/useTr.js.map +1 -0
  63. package/dist/translations/en.d.ts +806 -248
  64. package/dist/translations/en.js +870 -0
  65. package/dist/translations/en.js.map +1 -0
  66. package/package.json +1 -1
@@ -1,18 +1,18 @@
1
- import { AlertIcon as e, SpinnerIcon as t } from "../components/AuthIcons.js";
2
- import { useSsoOperations as n } from "../hooks/useSsoOperations.js";
3
- import { useAuthPermissions as r } from "../hooks/useAuthPermissions.js";
4
- import { ConfirmActionDialog as i } from "../components/ConfirmActionDialog.js";
5
- import { nativeCopyText as a, nativeImpact as o, nativeNotify as s } from "../../utils/nativeBridge.js";
6
- import { useCallback as c, useEffect as l, useRef as ee, useState as u } from "react";
1
+ import { useTr as e } from "../../shared/hooks/useTr.js";
2
+ import { AlertIcon as t, SpinnerIcon as n } from "../components/AuthIcons.js";
3
+ import { useSsoOperations as r } from "../hooks/useSsoOperations.js";
4
+ import { useAuthPermissions as i } from "../hooks/useAuthPermissions.js";
5
+ import { ConfirmActionDialog as a } from "../components/ConfirmActionDialog.js";
6
+ import { nativeCopyText as o, nativeImpact as s, nativeNotify as c } from "../../utils/nativeBridge.js";
7
+ import { useEffect as l, useRef as ee, useState as u } from "react";
7
8
  import { useNavigate as te, useSearchParams as ne } from "react-router";
8
- import { useI18n as re } from "@burdenoff/fe-libs/shared/providers/shell";
9
9
  import { Fragment as d, jsx as f, jsxs as p } from "react/jsx-runtime";
10
- import { useFeatureFlagDetails as ie } from "@burdenoff/fe-libs/shared/feature-flags";
10
+ import { useFeatureFlagDetails as re } from "@burdenoff/fe-libs/shared/feature-flags";
11
11
  import { Button as m } from "@burdenoff/fe-libs/button";
12
- import { EmphasisPanel as ae, IllustratedEmptyState as h, NextSteps as oe, PagePurpose as se } from "@burdenoff/fe-libs/ui";
12
+ import { EmphasisPanel as ie, IllustratedEmptyState as h, NextSteps as ae, PagePurpose as oe } from "@burdenoff/fe-libs/ui";
13
13
  //#region src/auth/pages/SsoConfigPage.tsx
14
14
  var g = async (e) => {
15
- o("light"), s(await a(e) ? "success" : "error");
15
+ s("light"), c(await o(e) ? "success" : "error");
16
16
  };
17
17
  function _(e) {
18
18
  try {
@@ -47,25 +47,22 @@ function _(e) {
47
47
  return console.error("Failed to parse SAML metadata:", e), null;
48
48
  }
49
49
  }
50
- function v({ bypassEnterprisePlanGate: a = !1 }) {
51
- let v = te(), [y] = ne(), { canManageSsoConfig: ce, isLoading: le } = r(), ue = ie("workspace.auth.enterprise-sso"), de = a || ue?.value === !0, b = ee(null), x = y.get("tenant"), S = y.get("org"), C = y.get("workspace"), { ssoConfig: w, oidcConfig: T, isLoading: E, isSaving: D, isDeleting: O, saveSsoConfig: k, deleteSsoConfig: fe } = n(x ?? "burdenoff.com"), { t: A } = re(), j = c((e, t) => {
52
- let n = A(e);
53
- return n === e ? t : n;
54
- }, [A]), [M, pe] = u("saml"), [N, P] = u(!1), [me, F] = u(!1), [I, L] = u(null), [R, z] = u(null), [B, V] = u(""), [H, U] = u(!1), [W, G] = u(!1), [K, q] = u({
50
+ function v({ bypassEnterprisePlanGate: o = !1 }) {
51
+ let v = e(), y = te(), [b] = ne(), { canManageSsoConfig: se, isLoading: ce } = i(), le = re("workspace.auth.enterprise-sso"), ue = o || le?.value === !0, x = ee(null), S = b.get("tenant"), C = b.get("org"), w = b.get("workspace"), { ssoConfig: T, oidcConfig: E, isLoading: D, isSaving: O, isDeleting: k, saveSsoConfig: A, deleteSsoConfig: de } = r(S ?? "burdenoff.com"), [j, fe] = u("saml"), [M, N] = u(!1), [pe, P] = u(!1), [F, I] = u(null), [L, R] = u(null), [z, B] = u(""), [V, H] = u(!1), [U, W] = u(!1), [G, K] = u({
55
52
  client_name: "",
56
53
  redirect_uris: "",
57
54
  grant_types: ["authorization_code", "refresh_token"],
58
55
  token_endpoint_auth_method: "none"
59
- }), [J, Y] = u(!1), [X, he] = u(null), [Z, Q] = u({
56
+ }), [q, J] = u(!1), [Y, X] = u(null), [Z, Q] = u({
60
57
  entityId: "",
61
58
  ssoUrl: "",
62
59
  sloUrl: "",
63
60
  certificate: "",
64
61
  enabled: !1
65
- }), ge = async (e) => {
62
+ }), me = async (e) => {
66
63
  let t = e.target.files?.[0];
67
64
  if (t) {
68
- L(null), U(!0);
65
+ I(null), H(!0);
69
66
  try {
70
67
  let e = _(await t.text());
71
68
  e ? (Q({
@@ -74,21 +71,21 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
74
71
  ssoUrl: e.ssoUrl,
75
72
  sloUrl: e.sloUrl || "",
76
73
  certificate: e.certificate
77
- }), z(j("auth.sso.importSuccess", "SAML metadata imported successfully! Review and save the configuration.")), P(!0)) : L(j("auth.sso.parseError", "Failed to parse SAML metadata. Make sure the file contains valid IdP metadata XML."));
74
+ }), R(v("auth.sso.importSuccess", "SAML metadata imported successfully! Review and save the configuration.")), N(!0)) : I(v("auth.sso.parseError", "Failed to parse SAML metadata. Make sure the file contains valid IdP metadata XML."));
78
75
  } catch {
79
- L(j("auth.sso.readError", "Failed to read metadata file"));
76
+ I(v("auth.sso.readError", "Failed to read metadata file"));
80
77
  } finally {
81
- U(!1), b.current && (b.current.value = "");
78
+ H(!1), x.current && (x.current.value = "");
82
79
  }
83
80
  }
84
- }, _e = async () => {
85
- if (!B) {
86
- L(j("auth.sso.enterUrl", "Please enter a metadata URL"));
81
+ }, he = async () => {
82
+ if (!z) {
83
+ I(v("auth.sso.enterUrl", "Please enter a metadata URL"));
87
84
  return;
88
85
  }
89
- L(null), U(!0);
86
+ I(null), H(!0);
90
87
  try {
91
- let e = await fetch(B);
88
+ let e = await fetch(z);
92
89
  if (!e.ok) throw Error(`Failed to fetch: ${e.statusText}`);
93
90
  let t = _(await e.text());
94
91
  t ? (Q({
@@ -97,68 +94,68 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
97
94
  ssoUrl: t.ssoUrl,
98
95
  sloUrl: t.sloUrl || "",
99
96
  certificate: t.certificate
100
- }), z(j("auth.sso.importSuccessFromUrl", "SAML metadata imported successfully! Review and save the configuration.")), P(!0), V("")) : L(j("auth.sso.parseUrlError", "Failed to parse SAML metadata from URL."));
97
+ }), R(v("auth.sso.importSuccessFromUrl", "SAML metadata imported successfully! Review and save the configuration.")), N(!0), B("")) : I(v("auth.sso.parseUrlError", "Failed to parse SAML metadata from URL."));
101
98
  } catch (e) {
102
- L(e instanceof Error ? e.message : j("auth.sso.fetchError", "Failed to fetch metadata from URL"));
99
+ I(e instanceof Error ? e.message : v("auth.sso.fetchError", "Failed to fetch metadata from URL"));
103
100
  } finally {
104
- U(!1);
101
+ H(!1);
105
102
  }
106
- }, ve = async () => {
107
- if (!K.client_name || !K.redirect_uris) {
108
- L(j("auth.sso.clientRequired", "Client name and redirect URI are required"));
103
+ }, ge = async () => {
104
+ if (!G.client_name || !G.redirect_uris) {
105
+ I(v("auth.sso.clientRequired", "Client name and redirect URI are required"));
109
106
  return;
110
107
  }
111
- Y(!0), L(null);
108
+ J(!0), I(null);
112
109
  try {
113
- let e = T?.registrationEndpoint;
114
- if (!e) throw Error(j("auth.sso.oidcNotConfigured", "OIDC dynamic client registration is not configured for this environment."));
110
+ let e = E?.registrationEndpoint;
111
+ if (!e) throw Error(v("auth.sso.oidcNotConfigured", "OIDC dynamic client registration is not configured for this environment."));
115
112
  let t = await fetch(e, {
116
113
  method: "POST",
117
114
  headers: { "Content-Type": "application/json" },
118
115
  body: JSON.stringify({
119
- client_name: K.client_name,
120
- redirect_uris: K.redirect_uris.split(",").map((e) => e.trim()),
121
- grant_types: K.grant_types,
116
+ client_name: G.client_name,
117
+ redirect_uris: G.redirect_uris.split(",").map((e) => e.trim()),
118
+ grant_types: G.grant_types,
122
119
  response_types: ["code"],
123
- token_endpoint_auth_method: K.token_endpoint_auth_method
120
+ token_endpoint_auth_method: G.token_endpoint_auth_method
124
121
  })
125
122
  });
126
123
  if (!t.ok) {
127
124
  let e = await t.json();
128
125
  throw Error(e.error_description || e.error || "Registration failed");
129
126
  }
130
- he(await t.json()), z(j("auth.sso.clientRegistered", "OIDC client registered successfully! Save the client credentials.")), G(!1), q({
127
+ X(await t.json()), R(v("auth.sso.clientRegistered", "OIDC client registered successfully! Save the client credentials.")), W(!1), K({
131
128
  client_name: "",
132
129
  redirect_uris: "",
133
130
  grant_types: ["authorization_code", "refresh_token"],
134
131
  token_endpoint_auth_method: "none"
135
132
  });
136
133
  } catch (e) {
137
- L(e instanceof Error ? e.message : j("auth.sso.registerFailed", "Failed to register client"));
134
+ I(e instanceof Error ? e.message : v("auth.sso.registerFailed", "Failed to register client"));
138
135
  } finally {
139
- Y(!1);
136
+ J(!1);
140
137
  }
141
138
  };
142
139
  l(() => {
143
- w && Q({
144
- entityId: w.entityId || "",
145
- ssoUrl: w.ssoUrl || "",
146
- sloUrl: w.sloUrl || "",
147
- certificate: w.certificate || "",
148
- enabled: w.enabled || !1
140
+ T && Q({
141
+ entityId: T.entityId || "",
142
+ ssoUrl: T.ssoUrl || "",
143
+ sloUrl: T.sloUrl || "",
144
+ certificate: T.certificate || "",
145
+ enabled: T.enabled || !1
149
146
  });
150
- }, [w]);
151
- let ye = async (e) => {
152
- e.preventDefault(), L(null), z(null);
147
+ }, [T]);
148
+ let _e = async (e) => {
149
+ e.preventDefault(), I(null), R(null);
153
150
  try {
154
- await k(Z), z(j("auth.sso.saveSuccess", "SSO configuration saved successfully!")), P(!1);
151
+ await A(Z), R(v("auth.sso.saveSuccess", "SSO configuration saved successfully!")), N(!1);
155
152
  } catch (e) {
156
- L(e instanceof Error ? e.message : j("auth.sso.saveFailed", "Failed to save configuration"));
153
+ I(e instanceof Error ? e.message : v("auth.sso.saveFailed", "Failed to save configuration"));
157
154
  }
158
- }, be = async () => {
159
- L(null), z(null), o("medium");
155
+ }, ve = async () => {
156
+ I(null), R(null), s("medium");
160
157
  try {
161
- await fe(), s("success"), z(j("auth.sso.deleteSuccess", "SSO configuration deleted successfully.")), F(!1), Q({
158
+ await de(), c("success"), R(v("auth.sso.deleteSuccess", "SSO configuration deleted successfully.")), P(!1), Q({
162
159
  entityId: "",
163
160
  ssoUrl: "",
164
161
  sloUrl: "",
@@ -166,40 +163,40 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
166
163
  enabled: !1
167
164
  });
168
165
  } catch (e) {
169
- s("error"), L(e instanceof Error ? e.message : j("auth.sso.deleteFailed", "Failed to delete configuration"));
166
+ c("error"), I(e instanceof Error ? e.message : v("auth.sso.deleteFailed", "Failed to delete configuration"));
170
167
  }
171
168
  }, $ = async () => {
172
- L(null);
169
+ I(null);
173
170
  try {
174
- await k({
171
+ await A({
175
172
  ...Z,
176
173
  enabled: !Z.enabled
177
- }), z(Z.enabled ? j("auth.sso.ssoDisabled", "SSO disabled") : j("auth.sso.ssoEnabled", "SSO enabled"));
174
+ }), R(Z.enabled ? v("auth.sso.ssoDisabled", "SSO disabled") : v("auth.sso.ssoEnabled", "SSO enabled"));
178
175
  } catch (e) {
179
- L(e instanceof Error ? e.message : j("auth.sso.statusUpdateFailed", "Failed to update status"));
176
+ I(e instanceof Error ? e.message : v("auth.sso.statusUpdateFailed", "Failed to update status"));
180
177
  }
181
178
  };
182
- return le ? /* @__PURE__ */ f("div", {
179
+ return ce ? /* @__PURE__ */ f("div", {
183
180
  className: "max-w-5xl mx-auto p-6",
184
181
  children: /* @__PURE__ */ p("div", {
185
182
  className: "text-center py-16",
186
- children: [/* @__PURE__ */ f(t, { className: "size-8 mx-auto text-text-secondary animate-spin" }), /* @__PURE__ */ f("p", {
183
+ children: [/* @__PURE__ */ f(n, { className: "size-8 mx-auto text-text-secondary animate-spin" }), /* @__PURE__ */ f("p", {
187
184
  className: "mt-4 text-text-secondary",
188
- children: j("auth.sso.loadingPermissions", "Loading permissions...")
185
+ children: v("auth.sso.loadingPermissions", "Loading permissions...")
189
186
  })]
190
187
  })
191
- }) : ce ? de ? /* @__PURE__ */ p("div", {
188
+ }) : se ? ue ? /* @__PURE__ */ p("div", {
192
189
  className: "max-w-5xl mx-auto p-6",
193
190
  children: [
194
- /* @__PURE__ */ f(i, {
195
- open: me,
196
- onOpenChange: F,
197
- title: j("auth.sso.deleteConfirmTitle", "Delete SSO configuration?"),
198
- description: j("auth.sso.deleteConfirmDesc", "Users will immediately lose the ability to sign in with this SSO setup until a new configuration is saved."),
199
- confirmText: j("auth.sso.deleteConfirmButton", "Delete configuration"),
191
+ /* @__PURE__ */ f(a, {
192
+ open: pe,
193
+ onOpenChange: P,
194
+ title: v("auth.sso.deleteConfirmTitle", "Delete SSO configuration?"),
195
+ description: v("auth.sso.deleteConfirmDesc", "Users will immediately lose the ability to sign in with this SSO setup until a new configuration is saved."),
196
+ confirmText: v("auth.sso.deleteConfirmButton", "Delete configuration"),
200
197
  variant: "danger",
201
- isPending: O,
202
- onConfirm: be
198
+ isPending: k,
199
+ onConfirm: ve
203
200
  }),
204
201
  /* @__PURE__ */ p("div", {
205
202
  className: "flex items-center justify-between mb-8",
@@ -207,8 +204,8 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
207
204
  className: "flex items-center gap-4",
208
205
  children: [/* @__PURE__ */ f("button", {
209
206
  type: "button",
210
- onClick: () => v("/auth/security"),
211
- "aria-label": j("auth.sso.backToSecurity", "Back to Security"),
207
+ onClick: () => y("/auth/security"),
208
+ "aria-label": v("auth.sso.backToSecurity", "Back to Security"),
212
209
  className: "p-2 rounded-lg hover:bg-bg-sunken transition-colors",
213
210
  children: /* @__PURE__ */ f("svg", {
214
211
  className: "size-5 text-text-secondary",
@@ -225,109 +222,109 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
225
222
  })
226
223
  }), /* @__PURE__ */ p("div", { children: [/* @__PURE__ */ f("h1", {
227
224
  className: "text-2xl font-semibold text-text-primary",
228
- children: j("auth.sso.title", "Single Sign-On (SSO)")
225
+ children: v("auth.sso.title", "Single Sign-On (SSO)")
229
226
  }), /* @__PURE__ */ f("p", {
230
227
  className: "text-text-secondary mt-1",
231
- children: j("auth.sso.description", "Configure enterprise SSO with SAML 2.0 or OIDC")
228
+ children: v("auth.sso.description", "Configure enterprise SSO with SAML 2.0 or OIDC")
232
229
  })] })]
233
- }), w && /* @__PURE__ */ p("div", {
230
+ }), T && /* @__PURE__ */ p("div", {
234
231
  className: "flex items-center gap-3",
235
232
  children: [/* @__PURE__ */ f("span", {
236
233
  className: `px-3 py-1 rounded-full text-sm font-medium ${Z.enabled ? "bg-status-success-bg-subtle text-status-success-text" : "bg-bg-sunken text-text-secondary"}`,
237
- children: Z.enabled ? j("auth.sso.enabled", "Enabled") : j("auth.sso.disabled", "Disabled")
234
+ children: Z.enabled ? v("auth.sso.enabled", "Enabled") : v("auth.sso.disabled", "Disabled")
238
235
  }), /* @__PURE__ */ f("button", {
239
236
  type: "button",
240
237
  onClick: $,
241
- disabled: D,
238
+ disabled: O,
242
239
  className: "px-4 py-2 rounded-lg border border-border-default text-text-primary hover:bg-bg-sunken transition-colors text-sm font-medium",
243
- children: Z.enabled ? j("auth.sso.disable", "Disable") : j("auth.sso.enable", "Enable")
240
+ children: Z.enabled ? v("auth.sso.disable", "Disable") : v("auth.sso.enable", "Enable")
244
241
  })]
245
242
  })]
246
243
  }),
247
- /* @__PURE__ */ f(se, {
244
+ /* @__PURE__ */ f(oe, {
248
245
  className: "mb-6",
249
- children: j("auth.sso.purpose", "Connect your organization's identity provider so your team signs in with their existing corporate credentials. Configure SAML 2.0 or OIDC here, then register the client apps that should accept these logins.")
246
+ children: v("auth.sso.purpose", "Connect your organization's identity provider so your team signs in with their existing corporate credentials. Configure SAML 2.0 or OIDC here, then register the client apps that should accept these logins.")
250
247
  }),
251
- /* @__PURE__ */ f(ae, {
248
+ /* @__PURE__ */ f(ie, {
252
249
  className: "mb-8",
253
250
  children: /* @__PURE__ */ f("div", {
254
251
  className: "flex items-center justify-between gap-4",
255
252
  children: /* @__PURE__ */ p("div", { children: [
256
253
  /* @__PURE__ */ f("p", {
257
254
  className: "text-sm font-medium text-text-secondary",
258
- children: j("auth.sso.statusLabel", "SSO connection")
255
+ children: v("auth.sso.statusLabel", "SSO connection")
259
256
  }),
260
257
  /* @__PURE__ */ f("p", {
261
258
  className: "mt-1 text-lg font-semibold text-text-primary",
262
- children: w ? Z.enabled ? j("auth.sso.statusActive", "Active — users can sign in via SSO") : j("auth.sso.statusConfiguredDisabled", "Configured but disabled") : j("auth.sso.statusNotConfigured", "Not configured yet")
259
+ children: T ? Z.enabled ? v("auth.sso.statusActive", "Active — users can sign in via SSO") : v("auth.sso.statusConfiguredDisabled", "Configured but disabled") : v("auth.sso.statusNotConfigured", "Not configured yet")
263
260
  }),
264
261
  /* @__PURE__ */ f("p", {
265
262
  className: "mt-1 text-sm text-text-secondary",
266
- children: j("auth.sso.statusHint", "Save a SAML or OIDC configuration below, then enable it to go live.")
263
+ children: v("auth.sso.statusHint", "Save a SAML or OIDC configuration below, then enable it to go live.")
267
264
  })
268
265
  ] })
269
266
  })
270
267
  }),
271
- a && (x ?? S ?? C) && /* @__PURE__ */ p("div", {
268
+ o && (S ?? C ?? w) && /* @__PURE__ */ p("div", {
272
269
  className: "mb-6 p-4 rounded-xl bg-status-info-bg-subtle border border-status-info-border",
273
270
  children: [/* @__PURE__ */ f("p", {
274
271
  className: "text-sm font-medium text-status-info-text mb-1",
275
- children: j("auth.sso.adminContext", "Configuring SSO for")
272
+ children: v("auth.sso.adminContext", "Configuring SSO for")
276
273
  }), /* @__PURE__ */ p("div", {
277
274
  className: "flex flex-wrap gap-4 text-xs text-status-info-text",
278
275
  children: [
279
- x && /* @__PURE__ */ p("span", { children: [
276
+ S && /* @__PURE__ */ p("span", { children: [
280
277
  /* @__PURE__ */ f("span", {
281
278
  className: "font-medium",
282
- children: j("auth.sso.tenant", "Tenant:")
279
+ children: v("auth.sso.tenant", "Tenant:")
283
280
  }),
284
281
  " ",
285
282
  /* @__PURE__ */ f("code", {
286
283
  className: "font-mono",
287
- children: x
284
+ children: S
288
285
  })
289
286
  ] }),
290
- S && /* @__PURE__ */ p("span", { children: [
287
+ C && /* @__PURE__ */ p("span", { children: [
291
288
  /* @__PURE__ */ f("span", {
292
289
  className: "font-medium",
293
- children: j("auth.sso.organization", "Organization:")
290
+ children: v("auth.sso.organization", "Organization:")
294
291
  }),
295
292
  " ",
296
293
  /* @__PURE__ */ f("code", {
297
294
  className: "font-mono",
298
- children: S
295
+ children: C
299
296
  })
300
297
  ] }),
301
- C && /* @__PURE__ */ p("span", { children: [
298
+ w && /* @__PURE__ */ p("span", { children: [
302
299
  /* @__PURE__ */ f("span", {
303
300
  className: "font-medium",
304
- children: j("auth.sso.workspace", "Workspace:")
301
+ children: v("auth.sso.workspace", "Workspace:")
305
302
  }),
306
303
  " ",
307
304
  /* @__PURE__ */ f("code", {
308
305
  className: "font-mono",
309
- children: C
306
+ children: w
310
307
  })
311
308
  ] })
312
309
  ]
313
310
  })]
314
311
  }),
315
- I && /* @__PURE__ */ p("div", {
312
+ F && /* @__PURE__ */ p("div", {
316
313
  className: "mb-6 flex items-start gap-3 p-4 rounded-xl bg-status-error-bg-subtle border border-status-error-border",
317
- children: [/* @__PURE__ */ f(e, { className: "size-5 text-status-error-text flex-shrink-0 mt-0.5" }), /* @__PURE__ */ p("div", {
314
+ children: [/* @__PURE__ */ f(t, { className: "size-5 text-status-error-text flex-shrink-0 mt-0.5" }), /* @__PURE__ */ p("div", {
318
315
  className: "flex-1",
319
316
  children: [/* @__PURE__ */ f("p", {
320
317
  className: "text-sm text-status-error-text",
321
- children: I
318
+ children: F
322
319
  }), /* @__PURE__ */ f("button", {
323
320
  type: "button",
324
- onClick: () => L(null),
321
+ onClick: () => I(null),
325
322
  className: "mt-2 text-sm text-status-error-text hover:underline",
326
- children: j("auth.sso.dismiss", "Dismiss")
323
+ children: v("auth.sso.dismiss", "Dismiss")
327
324
  })]
328
325
  })]
329
326
  }),
330
- R && /* @__PURE__ */ p("div", {
327
+ L && /* @__PURE__ */ p("div", {
331
328
  className: "mb-6 flex items-start gap-3 p-4 rounded-xl bg-status-success-bg-subtle border border-status-success-border",
332
329
  children: [/* @__PURE__ */ f("svg", {
333
330
  className: "size-5 text-status-success-text flex-shrink-0 mt-0.5",
@@ -342,12 +339,12 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
342
339
  className: "flex-1",
343
340
  children: [/* @__PURE__ */ f("p", {
344
341
  className: "text-sm text-status-success-text",
345
- children: R
342
+ children: L
346
343
  }), /* @__PURE__ */ f("button", {
347
344
  type: "button",
348
- onClick: () => z(null),
345
+ onClick: () => R(null),
349
346
  className: "mt-2 text-sm text-status-success-text hover:underline",
350
- children: j("auth.sso.dismiss", "Dismiss")
347
+ children: v("auth.sso.dismiss", "Dismiss")
351
348
  })]
352
349
  })]
353
350
  }),
@@ -358,43 +355,43 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
358
355
  children: [
359
356
  {
360
357
  id: "saml",
361
- label: j("auth.sso.samlTab", "SAML 2.0"),
358
+ label: v("auth.sso.samlTab", "SAML 2.0"),
362
359
  icon: "🔐"
363
360
  },
364
361
  {
365
362
  id: "oidc",
366
- label: j("auth.sso.oidcTab", "OIDC Provider"),
363
+ label: v("auth.sso.oidcTab", "OIDC Provider"),
367
364
  icon: "🌐"
368
365
  },
369
366
  {
370
367
  id: "clients",
371
- label: j("auth.sso.clientsTab", "OIDC Clients"),
368
+ label: v("auth.sso.clientsTab", "OIDC Clients"),
372
369
  icon: "🔑"
373
370
  },
374
371
  {
375
372
  id: "test",
376
- label: j("auth.sso.testTab", "Test SSO"),
373
+ label: v("auth.sso.testTab", "Test SSO"),
377
374
  icon: "🧪"
378
375
  }
379
376
  ].map((e) => /* @__PURE__ */ p("button", {
380
377
  type: "button",
381
- onClick: () => pe(e.id),
382
- className: `pb-3 text-sm font-medium transition-colors relative ${M === e.id ? "text-text-link" : "text-text-secondary hover:text-text-primary"}`,
378
+ onClick: () => fe(e.id),
379
+ className: `pb-3 text-sm font-medium transition-colors relative ${j === e.id ? "text-text-link" : "text-text-secondary hover:text-text-primary"}`,
383
380
  children: [/* @__PURE__ */ p("span", {
384
381
  className: "flex items-center gap-2",
385
382
  children: [/* @__PURE__ */ f("span", { children: e.icon }), e.label]
386
- }), M === e.id && /* @__PURE__ */ f("span", { className: "absolute bottom-0 left-0 right-0 h-0.5 bg-action-primary-bg" })]
383
+ }), j === e.id && /* @__PURE__ */ f("span", { className: "absolute bottom-0 left-0 right-0 h-0.5 bg-action-primary-bg" })]
387
384
  }, e.id))
388
385
  })
389
386
  }),
390
- E && /* @__PURE__ */ p("div", {
387
+ D && /* @__PURE__ */ p("div", {
391
388
  className: "flex items-center justify-center py-12",
392
- children: [/* @__PURE__ */ f(t, { className: "size-8 text-text-link animate-spin" }), /* @__PURE__ */ f("span", {
389
+ children: [/* @__PURE__ */ f(n, { className: "size-8 text-text-link animate-spin" }), /* @__PURE__ */ f("span", {
393
390
  className: "ml-3 text-text-secondary",
394
- children: j("auth.sso.loadingConfig", "Loading configuration...")
391
+ children: v("auth.sso.loadingConfig", "Loading configuration...")
395
392
  })]
396
393
  }),
397
- !E && M === "saml" && /* @__PURE__ */ p("div", {
394
+ !D && j === "saml" && /* @__PURE__ */ p("div", {
398
395
  className: "space-y-6",
399
396
  children: [
400
397
  /* @__PURE__ */ p("div", {
@@ -402,18 +399,18 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
402
399
  children: [
403
400
  /* @__PURE__ */ f("h3", {
404
401
  className: "font-medium text-status-info-text mb-2",
405
- children: j("auth.sso.samlConfigTitle", "SAML 2.0 Configuration")
402
+ children: v("auth.sso.samlConfigTitle", "SAML 2.0 Configuration")
406
403
  }),
407
404
  /* @__PURE__ */ f("p", {
408
405
  className: "text-sm text-status-info-text",
409
- children: j("auth.sso.samlConfigDesc", "Configure your Identity Provider (IdP) to enable enterprise SSO. You'll need to get the following information from your IdP (Okta, Azure AD, OneLogin, etc.):")
406
+ children: v("auth.sso.samlConfigDesc", "Configure your Identity Provider (IdP) to enable enterprise SSO. You'll need to get the following information from your IdP (Okta, Azure AD, OneLogin, etc.):")
410
407
  }),
411
408
  /* @__PURE__ */ p("ul", {
412
409
  className: "mt-2 text-sm text-status-info-text list-disc list-inside",
413
410
  children: [
414
- /* @__PURE__ */ f("li", { children: j("auth.sso.entityIdItem", "Entity ID (Issuer URL)") }),
415
- /* @__PURE__ */ f("li", { children: j("auth.sso.ssoUrlItem", "SSO URL (Login URL)") }),
416
- /* @__PURE__ */ f("li", { children: j("auth.sso.certificateItem", "X.509 Certificate") })
411
+ /* @__PURE__ */ f("li", { children: v("auth.sso.entityIdItem", "Entity ID (Issuer URL)") }),
412
+ /* @__PURE__ */ f("li", { children: v("auth.sso.ssoUrlItem", "SSO URL (Login URL)") }),
413
+ /* @__PURE__ */ f("li", { children: v("auth.sso.certificateItem", "X.509 Certificate") })
417
414
  ]
418
415
  })
419
416
  ]
@@ -423,11 +420,11 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
423
420
  children: [
424
421
  /* @__PURE__ */ f("h3", {
425
422
  className: "text-lg font-medium text-text-primary mb-4",
426
- children: j("auth.sso.importMetadata", "Import IdP Metadata")
423
+ children: v("auth.sso.importMetadata", "Import IdP Metadata")
427
424
  }),
428
425
  /* @__PURE__ */ f("p", {
429
426
  className: "text-sm text-text-secondary mb-4",
430
- children: j("auth.sso.importMetadataDesc", "Automatically configure SSO by importing your IdP's metadata XML file or URL.")
427
+ children: v("auth.sso.importMetadataDesc", "Automatically configure SSO by importing your IdP's metadata XML file or URL.")
431
428
  }),
432
429
  /* @__PURE__ */ p("div", {
433
430
  className: "grid grid-cols-1 md:grid-cols-2 gap-6",
@@ -436,21 +433,21 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
436
433
  children: [
437
434
  /* @__PURE__ */ f("label", {
438
435
  className: "block text-sm font-medium text-text-primary",
439
- children: j("auth.sso.uploadFile", "Upload Metadata File")
436
+ children: v("auth.sso.uploadFile", "Upload Metadata File")
440
437
  }),
441
438
  /* @__PURE__ */ f("input", {
442
- ref: b,
439
+ ref: x,
443
440
  type: "file",
444
441
  accept: ".xml,application/xml,text/xml",
445
- onChange: ge,
442
+ onChange: me,
446
443
  className: "hidden",
447
444
  id: "metadata-file",
448
- "aria-label": j("auth.sso.uploadFile", "Upload Metadata File")
445
+ "aria-label": v("auth.sso.uploadFile", "Upload Metadata File")
449
446
  }),
450
447
  /* @__PURE__ */ p("label", {
451
448
  htmlFor: "metadata-file",
452
449
  className: "flex items-center justify-center gap-2 w-full px-4 py-3 border-2 border-dashed border-border-default rounded-xl cursor-pointer hover:border-action-primary-bg transition-colors",
453
- children: [H ? /* @__PURE__ */ f(t, { className: "size-5 animate-spin text-text-link" }) : /* @__PURE__ */ f("svg", {
450
+ children: [V ? /* @__PURE__ */ f(n, { className: "size-5 animate-spin text-text-link" }) : /* @__PURE__ */ f("svg", {
454
451
  className: "size-5 text-text-tertiary",
455
452
  fill: "none",
456
453
  viewBox: "0 0 24 24",
@@ -463,7 +460,7 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
463
460
  })
464
461
  }), /* @__PURE__ */ f("span", {
465
462
  className: "text-sm text-text-secondary",
466
- children: H ? j("auth.sso.importing", "Importing...") : j("auth.sso.chooseFile", "Choose XML file")
463
+ children: V ? v("auth.sso.importing", "Importing...") : v("auth.sso.chooseFile", "Choose XML file")
467
464
  })]
468
465
  })
469
466
  ]
@@ -471,23 +468,23 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
471
468
  className: "space-y-3",
472
469
  children: [/* @__PURE__ */ f("label", {
473
470
  className: "block text-sm font-medium text-text-primary",
474
- children: j("auth.sso.fetchFromUrl", "Fetch from URL")
471
+ children: v("auth.sso.fetchFromUrl", "Fetch from URL")
475
472
  }), /* @__PURE__ */ p("div", {
476
473
  className: "flex gap-2",
477
474
  children: [/* @__PURE__ */ f("input", {
478
475
  id: "sso-metadata-url",
479
476
  type: "url",
480
- value: B,
481
- onChange: (e) => V(e.target.value),
477
+ value: z,
478
+ onChange: (e) => B(e.target.value),
482
479
  placeholder: "https://idp.example.com/metadata.xml",
483
- "aria-label": j("auth.sso.fetchFromUrl", "Fetch from URL"),
480
+ "aria-label": v("auth.sso.fetchFromUrl", "Fetch from URL"),
484
481
  className: "flex-1 px-4 py-2.5 border border-border-default rounded-xl bg-bg-surface text-text-primary placeholder-text-tertiary focus:outline-none focus:ring-2 focus:ring-action-primary-bg/20 focus:border-action-primary-bg transition-all text-sm"
485
482
  }), /* @__PURE__ */ p("button", {
486
483
  type: "button",
487
- onClick: _e,
488
- disabled: H || !B,
484
+ onClick: he,
485
+ disabled: V || !z,
489
486
  className: "px-4 py-2.5 rounded-xl bg-action-primary-bg text-white font-medium hover:bg-action-primary-bg-hover disabled:opacity-50 disabled:cursor-not-allowed transition-colors flex items-center gap-2",
490
- children: [H ? /* @__PURE__ */ f(t, { className: "size-4 animate-spin" }) : /* @__PURE__ */ f("svg", {
487
+ children: [V ? /* @__PURE__ */ f(n, { className: "size-4 animate-spin" }) : /* @__PURE__ */ f("svg", {
491
488
  className: "size-4",
492
489
  fill: "none",
493
490
  viewBox: "0 0 24 24",
@@ -498,7 +495,7 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
498
495
  strokeWidth: 2,
499
496
  d: "M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4"
500
497
  })
501
- }), j("auth.sso.fetch", "Fetch")]
498
+ }), v("auth.sso.fetch", "Fetch")]
502
499
  })]
503
500
  })]
504
501
  })]
@@ -510,17 +507,17 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
510
507
  children: [
511
508
  /* @__PURE__ */ f("h3", {
512
509
  className: "text-lg font-medium text-text-primary mb-4",
513
- children: j("auth.sso.spMetadata", "Service Provider (SP) Metadata")
510
+ children: v("auth.sso.spMetadata", "Service Provider (SP) Metadata")
514
511
  }),
515
512
  /* @__PURE__ */ f("p", {
516
513
  className: "text-sm text-text-secondary mb-4",
517
- children: j("auth.sso.spMetadataDesc", "Provide these values to your Identity Provider when setting up the SAML integration:")
514
+ children: v("auth.sso.spMetadataDesc", "Provide these values to your Identity Provider when setting up the SAML integration:")
518
515
  }),
519
516
  /* @__PURE__ */ p("div", {
520
517
  className: "space-y-4",
521
518
  children: [/* @__PURE__ */ p("div", { children: [/* @__PURE__ */ f("label", {
522
519
  className: "block text-sm font-medium text-text-primary mb-1",
523
- children: j("auth.sso.spEntityId", "SP Entity ID / Audience URI")
520
+ children: v("auth.sso.spEntityId", "SP Entity ID / Audience URI")
524
521
  }), /* @__PURE__ */ p("div", {
525
522
  className: "flex items-center gap-2",
526
523
  children: [/* @__PURE__ */ p("code", {
@@ -530,11 +527,11 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
530
527
  type: "button",
531
528
  onClick: () => void g(`${window.location.origin}/auth/saml/metadata`),
532
529
  className: "px-3 py-2 rounded-lg border border-border-default text-text-secondary hover:bg-bg-sunken",
533
- children: j("auth.sso.copy", "Copy")
530
+ children: v("auth.sso.copy", "Copy")
534
531
  })]
535
532
  })] }), /* @__PURE__ */ p("div", { children: [/* @__PURE__ */ f("label", {
536
533
  className: "block text-sm font-medium text-text-primary mb-1",
537
- children: j("auth.sso.acsUrl", "Assertion Consumer Service (ACS) URL")
534
+ children: v("auth.sso.acsUrl", "Assertion Consumer Service (ACS) URL")
538
535
  }), /* @__PURE__ */ p("div", {
539
536
  className: "flex items-center gap-2",
540
537
  children: [/* @__PURE__ */ p("code", {
@@ -544,26 +541,26 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
544
541
  type: "button",
545
542
  onClick: () => void g(`${window.location.origin}/auth/sso/callback`),
546
543
  className: "px-3 py-2 rounded-lg border border-border-default text-text-secondary hover:bg-bg-sunken",
547
- children: j("auth.sso.copy", "Copy")
544
+ children: v("auth.sso.copy", "Copy")
548
545
  })]
549
546
  })] })]
550
547
  })
551
548
  ]
552
549
  }),
553
550
  /* @__PURE__ */ p("form", {
554
- onSubmit: ye,
551
+ onSubmit: _e,
555
552
  className: "p-6 rounded-xl border border-border-subtle bg-bg-surface",
556
553
  children: [
557
554
  /* @__PURE__ */ p("div", {
558
555
  className: "flex items-center justify-between mb-6",
559
556
  children: [/* @__PURE__ */ f("h3", {
560
557
  className: "text-lg font-medium text-text-primary",
561
- children: j("auth.sso.idpSettings", "Identity Provider (IdP) Settings")
562
- }), !N && w && /* @__PURE__ */ f("button", {
558
+ children: v("auth.sso.idpSettings", "Identity Provider (IdP) Settings")
559
+ }), !M && T && /* @__PURE__ */ f("button", {
563
560
  type: "button",
564
- onClick: () => P(!0),
561
+ onClick: () => N(!0),
565
562
  className: "px-4 py-2 rounded-lg border border-status-info-border text-text-link hover:bg-status-info-bg-subtle text-sm font-medium transition-colors",
566
- children: j("auth.sso.editConfig", "Edit Configuration")
563
+ children: v("auth.sso.editConfig", "Edit Configuration")
567
564
  })]
568
565
  }),
569
566
  /* @__PURE__ */ p("div", {
@@ -574,7 +571,7 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
574
571
  htmlFor: "sso-entity-id",
575
572
  className: "block text-sm font-medium text-text-primary mb-2",
576
573
  children: [
577
- j("auth.sso.idpEntityId", "IdP Entity ID / Issuer URL"),
574
+ v("auth.sso.idpEntityId", "IdP Entity ID / Issuer URL"),
578
575
  " ",
579
576
  /* @__PURE__ */ f("span", {
580
577
  className: "text-status-error-text",
@@ -586,14 +583,14 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
586
583
  /* @__PURE__ */ f("input", {
587
584
  id: "sso-entity-id",
588
585
  type: "url",
589
- "aria-label": j("auth.sso.idpEntityId", "IdP Entity ID"),
586
+ "aria-label": v("auth.sso.idpEntityId", "IdP Entity ID"),
590
587
  value: Z.entityId,
591
588
  onChange: (e) => Q({
592
589
  ...Z,
593
590
  entityId: e.target.value
594
591
  }),
595
- disabled: !N && !!w,
596
- placeholder: j("auth.sso.idpEntityIdPlaceholder", "https://your-idp.example.com/saml/metadata"),
592
+ disabled: !M && !!T,
593
+ placeholder: v("auth.sso.idpEntityIdPlaceholder", "https://your-idp.example.com/saml/metadata"),
597
594
  required: !0,
598
595
  "aria-required": "true",
599
596
  "aria-describedby": "sso-entity-id-hint",
@@ -602,7 +599,7 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
602
599
  /* @__PURE__ */ f("p", {
603
600
  id: "sso-entity-id-hint",
604
601
  className: "mt-1 text-xs text-text-secondary",
605
- children: j("auth.sso.idpEntityIdHelper", "The unique identifier of your Identity Provider")
602
+ children: v("auth.sso.idpEntityIdHelper", "The unique identifier of your Identity Provider")
606
603
  })
607
604
  ] }),
608
605
  /* @__PURE__ */ p("div", { children: [
@@ -610,7 +607,7 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
610
607
  htmlFor: "sso-sso-url",
611
608
  className: "block text-sm font-medium text-text-primary mb-2",
612
609
  children: [
613
- j("auth.sso.ssoUrl", "SSO URL (Login URL)"),
610
+ v("auth.sso.ssoUrl", "SSO URL (Login URL)"),
614
611
  " ",
615
612
  /* @__PURE__ */ f("span", {
616
613
  className: "text-status-error-text",
@@ -622,14 +619,14 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
622
619
  /* @__PURE__ */ f("input", {
623
620
  id: "sso-sso-url",
624
621
  type: "url",
625
- "aria-label": j("auth.sso.ssoUrl", "SSO URL"),
622
+ "aria-label": v("auth.sso.ssoUrl", "SSO URL"),
626
623
  value: Z.ssoUrl,
627
624
  onChange: (e) => Q({
628
625
  ...Z,
629
626
  ssoUrl: e.target.value
630
627
  }),
631
- disabled: !N && !!w,
632
- placeholder: j("auth.sso.ssoUrlPlaceholder", "https://your-idp.example.com/saml/sso"),
628
+ disabled: !M && !!T,
629
+ placeholder: v("auth.sso.ssoUrlPlaceholder", "https://your-idp.example.com/saml/sso"),
633
630
  required: !0,
634
631
  "aria-required": "true",
635
632
  "aria-describedby": "sso-sso-url-hint",
@@ -638,7 +635,7 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
638
635
  /* @__PURE__ */ f("p", {
639
636
  id: "sso-sso-url-hint",
640
637
  className: "mt-1 text-xs text-text-secondary",
641
- children: j("auth.sso.ssoUrlHelper", "The URL where users are redirected to authenticate")
638
+ children: v("auth.sso.ssoUrlHelper", "The URL where users are redirected to authenticate")
642
639
  })
643
640
  ] }),
644
641
  /* @__PURE__ */ p("div", { children: [
@@ -646,7 +643,7 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
646
643
  htmlFor: "sso-certificate",
647
644
  className: "block text-sm font-medium text-text-primary mb-2",
648
645
  children: [
649
- j("auth.sso.certificate", "X.509 Certificate"),
646
+ v("auth.sso.certificate", "X.509 Certificate"),
650
647
  " ",
651
648
  /* @__PURE__ */ f("span", {
652
649
  className: "text-status-error-text",
@@ -657,14 +654,14 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
657
654
  }),
658
655
  /* @__PURE__ */ f("textarea", {
659
656
  id: "sso-certificate",
660
- "aria-label": j("auth.sso.certificate", "X.509 Certificate"),
657
+ "aria-label": v("auth.sso.certificate", "X.509 Certificate"),
661
658
  value: Z.certificate,
662
659
  onChange: (e) => Q({
663
660
  ...Z,
664
661
  certificate: e.target.value
665
662
  }),
666
- disabled: !N && !!w,
667
- placeholder: j("auth.sso.certificatePlaceholder", "-----BEGIN CERTIFICATE-----\nMIIDpDCCAoygAwIBAgIGAX...\n-----END CERTIFICATE-----"),
663
+ disabled: !M && !!T,
664
+ placeholder: v("auth.sso.certificatePlaceholder", "-----BEGIN CERTIFICATE-----\nMIIDpDCCAoygAwIBAgIGAX...\n-----END CERTIFICATE-----"),
668
665
  required: !0,
669
666
  "aria-required": "true",
670
667
  "aria-describedby": "sso-certificate-hint",
@@ -674,70 +671,70 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
674
671
  /* @__PURE__ */ f("p", {
675
672
  id: "sso-certificate-hint",
676
673
  className: "mt-1 text-xs text-text-secondary",
677
- children: j("auth.sso.certificateHelper", "The public X.509 certificate from your IdP for signature verification")
674
+ children: v("auth.sso.certificateHelper", "The public X.509 certificate from your IdP for signature verification")
678
675
  })
679
676
  ] })
680
677
  ]
681
678
  }),
682
- (N || !w) && /* @__PURE__ */ p("div", {
679
+ (M || !T) && /* @__PURE__ */ p("div", {
683
680
  className: "mt-6 flex items-center gap-3",
684
681
  children: [/* @__PURE__ */ f(m, {
685
682
  type: "submit",
686
- disabled: D,
683
+ disabled: O,
687
684
  variant: "default",
688
685
  size: "lg",
689
686
  className: "font-semibold",
690
- children: D ? /* @__PURE__ */ p(d, { children: [/* @__PURE__ */ f(t, { className: "size-4 animate-spin" }), j("auth.sso.saving", "Saving...")] }) : j("auth.sso.saveConfig", "Save Configuration")
691
- }), N && /* @__PURE__ */ f("button", {
687
+ children: O ? /* @__PURE__ */ p(d, { children: [/* @__PURE__ */ f(n, { className: "size-4 animate-spin" }), v("auth.sso.saving", "Saving...")] }) : v("auth.sso.saveConfig", "Save Configuration")
688
+ }), M && /* @__PURE__ */ f("button", {
692
689
  type: "button",
693
690
  onClick: () => {
694
- P(!1), w && Q({
695
- entityId: w.entityId || "",
696
- ssoUrl: w.ssoUrl || "",
697
- sloUrl: w.sloUrl || "",
698
- certificate: w.certificate || "",
699
- enabled: w.enabled || !1
691
+ N(!1), T && Q({
692
+ entityId: T.entityId || "",
693
+ ssoUrl: T.ssoUrl || "",
694
+ sloUrl: T.sloUrl || "",
695
+ certificate: T.certificate || "",
696
+ enabled: T.enabled || !1
700
697
  });
701
698
  },
702
699
  className: "px-6 py-3 rounded-xl border border-border-default text-text-primary font-medium hover:bg-bg-sunken transition-colors",
703
- children: j("auth.sso.cancel", "Cancel")
700
+ children: v("auth.sso.cancel", "Cancel")
704
701
  })]
705
702
  })
706
703
  ]
707
704
  }),
708
- w && /* @__PURE__ */ p("div", {
705
+ T && /* @__PURE__ */ p("div", {
709
706
  className: "p-6 rounded-xl border border-status-error-border bg-status-error-bg-subtle",
710
707
  children: [
711
708
  /* @__PURE__ */ f("h3", {
712
709
  className: "text-lg font-medium text-status-error-text mb-2",
713
- children: j("auth.sso.dangerZone", "Danger Zone")
710
+ children: v("auth.sso.dangerZone", "Danger Zone")
714
711
  }),
715
712
  /* @__PURE__ */ f("p", {
716
713
  className: "text-sm text-status-error-text mb-4",
717
- children: j("auth.sso.dangerZoneDesc", "Deleting the SSO configuration will prevent users from signing in with their enterprise credentials. This action cannot be undone.")
714
+ children: v("auth.sso.dangerZoneDesc", "Deleting the SSO configuration will prevent users from signing in with their enterprise credentials. This action cannot be undone.")
718
715
  }),
719
716
  /* @__PURE__ */ f("button", {
720
717
  type: "button",
721
- onClick: () => F(!0),
722
- disabled: O,
718
+ onClick: () => P(!0),
719
+ disabled: k,
723
720
  className: "px-4 py-2 rounded-lg bg-status-error-bg text-white font-medium hover:bg-status-error-bg-hover disabled:opacity-50 transition-colors flex items-center gap-2",
724
- children: O ? /* @__PURE__ */ p(d, { children: [/* @__PURE__ */ f(t, { className: "size-4 animate-spin" }), j("auth.sso.deleting", "Deleting...")] }) : j("auth.sso.deleteConfig", "Delete SSO Configuration")
721
+ children: k ? /* @__PURE__ */ p(d, { children: [/* @__PURE__ */ f(n, { className: "size-4 animate-spin" }), v("auth.sso.deleting", "Deleting...")] }) : v("auth.sso.deleteConfig", "Delete SSO Configuration")
725
722
  })
726
723
  ]
727
724
  })
728
725
  ]
729
726
  }),
730
- !E && M === "oidc" && /* @__PURE__ */ p("div", {
727
+ !D && j === "oidc" && /* @__PURE__ */ p("div", {
731
728
  className: "space-y-6",
732
729
  children: [
733
730
  /* @__PURE__ */ p("div", {
734
731
  className: "p-4 rounded-xl bg-accent-purple-subtle border border-accent-purple-subtle",
735
732
  children: [/* @__PURE__ */ f("h3", {
736
733
  className: "font-medium text-accent-purple mb-2",
737
- children: j("auth.sso.oidcProviderInfo", "OIDC Provider Information")
734
+ children: v("auth.sso.oidcProviderInfo", "OIDC Provider Information")
738
735
  }), /* @__PURE__ */ f("p", {
739
736
  className: "text-sm text-accent-purple",
740
- children: j("auth.sso.oidcProviderInfoDesc", "Your auth service acts as an OpenID Connect Provider. This allows other applications to authenticate users through your system using standard OAuth 2.0/OIDC flows.")
737
+ children: v("auth.sso.oidcProviderInfoDesc", "Your auth service acts as an OpenID Connect Provider. This allows other applications to authenticate users through your system using standard OAuth 2.0/OIDC flows.")
741
738
  })]
742
739
  }),
743
740
  /* @__PURE__ */ p("div", {
@@ -745,57 +742,57 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
745
742
  children: [
746
743
  /* @__PURE__ */ f("h3", {
747
744
  className: "text-lg font-medium text-text-primary mb-4",
748
- children: j("auth.sso.discoveryEndpoint", "Discovery Endpoint")
745
+ children: v("auth.sso.discoveryEndpoint", "Discovery Endpoint")
749
746
  }),
750
747
  /* @__PURE__ */ f("p", {
751
748
  className: "text-sm text-text-secondary mb-4",
752
- children: j("auth.sso.discoveryEndpointDesc", "Applications can auto-configure by fetching the OpenID Connect Discovery document:")
749
+ children: v("auth.sso.discoveryEndpointDesc", "Applications can auto-configure by fetching the OpenID Connect Discovery document:")
753
750
  }),
754
751
  /* @__PURE__ */ p("div", {
755
752
  className: "flex items-center gap-2",
756
753
  children: [/* @__PURE__ */ f("code", {
757
754
  className: "flex-1 px-3 py-2 rounded-lg bg-bg-sunken text-sm text-text-primary font-mono break-all",
758
- children: T?.issuer ? `${T.issuer}/.well-known/openid-configuration` : "Discovery endpoint unavailable until OIDC is configured"
755
+ children: E?.issuer ? `${E.issuer}/.well-known/openid-configuration` : "Discovery endpoint unavailable until OIDC is configured"
759
756
  }), /* @__PURE__ */ f("button", {
760
757
  type: "button",
761
758
  onClick: () => {
762
- let e = T?.issuer ? `${T.issuer}/.well-known/openid-configuration` : "";
759
+ let e = E?.issuer ? `${E.issuer}/.well-known/openid-configuration` : "";
763
760
  e && g(e);
764
761
  },
765
- disabled: !T?.issuer,
762
+ disabled: !E?.issuer,
766
763
  className: "px-3 py-2 rounded-lg border border-border-default text-text-secondary hover:bg-bg-sunken flex-shrink-0",
767
- children: j("auth.sso.copy", "Copy")
764
+ children: v("auth.sso.copy", "Copy")
768
765
  })]
769
766
  })
770
767
  ]
771
768
  }),
772
- T && /* @__PURE__ */ p("div", {
769
+ E && /* @__PURE__ */ p("div", {
773
770
  className: "p-6 rounded-xl border border-border-subtle bg-bg-surface",
774
771
  children: [/* @__PURE__ */ f("h3", {
775
772
  className: "text-lg font-medium text-text-primary mb-4",
776
- children: j("auth.sso.oidcEndpoints", "OIDC Endpoints")
773
+ children: v("auth.sso.oidcEndpoints", "OIDC Endpoints")
777
774
  }), /* @__PURE__ */ f("div", {
778
775
  className: "space-y-4",
779
776
  children: [
780
777
  {
781
- label: j("auth.sso.issuer", "Issuer"),
782
- value: T.issuer
778
+ label: v("auth.sso.issuer", "Issuer"),
779
+ value: E.issuer
783
780
  },
784
781
  {
785
- label: j("auth.sso.authorizationEndpoint", "Authorization Endpoint"),
786
- value: T.authorizationEndpoint
782
+ label: v("auth.sso.authorizationEndpoint", "Authorization Endpoint"),
783
+ value: E.authorizationEndpoint
787
784
  },
788
785
  {
789
- label: j("auth.sso.tokenEndpoint", "Token Endpoint"),
790
- value: T.tokenEndpoint
786
+ label: v("auth.sso.tokenEndpoint", "Token Endpoint"),
787
+ value: E.tokenEndpoint
791
788
  },
792
789
  {
793
- label: j("auth.sso.userinfoEndpoint", "UserInfo Endpoint"),
794
- value: T.userinfoEndpoint
790
+ label: v("auth.sso.userinfoEndpoint", "UserInfo Endpoint"),
791
+ value: E.userinfoEndpoint
795
792
  },
796
793
  {
797
- label: j("auth.sso.jwksUri", "JWKS URI"),
798
- value: T.jwksUri
794
+ label: v("auth.sso.jwksUri", "JWKS URI"),
795
+ value: E.jwksUri
799
796
  }
800
797
  ].map((e) => /* @__PURE__ */ p("div", {
801
798
  className: "flex items-start gap-4",
@@ -813,32 +810,32 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
813
810
  className: "p-6 rounded-xl border border-border-subtle bg-bg-surface",
814
811
  children: [/* @__PURE__ */ f("h3", {
815
812
  className: "text-lg font-medium text-text-primary mb-4",
816
- children: j("auth.sso.supportedFeatures", "Supported Features")
813
+ children: v("auth.sso.supportedFeatures", "Supported Features")
817
814
  }), /* @__PURE__ */ f("div", {
818
815
  className: "grid grid-cols-2 gap-4",
819
816
  children: [
820
817
  {
821
- name: j("auth.sso.featAuthCodePkce", "Authorization Code + PKCE"),
818
+ name: v("auth.sso.featAuthCodePkce", "Authorization Code + PKCE"),
822
819
  status: !0
823
820
  },
824
821
  {
825
- name: j("auth.sso.featClientCreds", "Client Credentials"),
822
+ name: v("auth.sso.featClientCreds", "Client Credentials"),
826
823
  status: !0
827
824
  },
828
825
  {
829
- name: j("auth.sso.featDeviceAuth", "Device Authorization"),
826
+ name: v("auth.sso.featDeviceAuth", "Device Authorization"),
830
827
  status: !0
831
828
  },
832
829
  {
833
- name: j("auth.sso.featRefreshTokens", "Refresh Tokens"),
830
+ name: v("auth.sso.featRefreshTokens", "Refresh Tokens"),
834
831
  status: !0
835
832
  },
836
833
  {
837
- name: j("auth.sso.featTokenIntrospection", "Token Introspection"),
834
+ name: v("auth.sso.featTokenIntrospection", "Token Introspection"),
838
835
  status: !0
839
836
  },
840
837
  {
841
- name: j("auth.sso.featTokenRevocation", "Token Revocation"),
838
+ name: v("auth.sso.featTokenRevocation", "Token Revocation"),
842
839
  status: !0
843
840
  }
844
841
  ].map((e) => /* @__PURE__ */ p("div", {
@@ -852,33 +849,33 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
852
849
  })
853
850
  ]
854
851
  }),
855
- !E && M === "clients" && /* @__PURE__ */ p("div", {
852
+ !D && j === "clients" && /* @__PURE__ */ p("div", {
856
853
  className: "space-y-6",
857
854
  children: [
858
855
  /* @__PURE__ */ p("div", {
859
856
  className: "p-4 rounded-xl bg-status-warning-bg-subtle border border-status-warning-border",
860
857
  children: [/* @__PURE__ */ f("h3", {
861
858
  className: "font-medium text-status-warning-text mb-2",
862
- children: j("auth.sso.clientManagement", "OIDC Client Management")
859
+ children: v("auth.sso.clientManagement", "OIDC Client Management")
863
860
  }), /* @__PURE__ */ f("p", {
864
861
  className: "text-sm text-status-warning-text",
865
- children: j("auth.sso.clientManagementDesc", "Register applications that can authenticate users through your OIDC provider. Each client gets unique credentials to use in the OAuth 2.0 / OIDC flow.")
862
+ children: v("auth.sso.clientManagementDesc", "Register applications that can authenticate users through your OIDC provider. Each client gets unique credentials to use in the OAuth 2.0 / OIDC flow.")
866
863
  })]
867
864
  }),
868
- X && /* @__PURE__ */ p("div", {
865
+ Y && /* @__PURE__ */ p("div", {
869
866
  className: "p-6 rounded-xl border-2 border-status-success-border bg-status-success-bg-subtle",
870
867
  children: [/* @__PURE__ */ p("div", {
871
868
  className: "flex items-start justify-between mb-4",
872
869
  children: [/* @__PURE__ */ p("div", { children: [/* @__PURE__ */ f("h3", {
873
870
  className: "text-lg font-medium text-status-success-text",
874
- children: j("auth.sso.clientCreatedTitle", "Client Created Successfully!")
871
+ children: v("auth.sso.clientCreatedTitle", "Client Created Successfully!")
875
872
  }), /* @__PURE__ */ f("p", {
876
873
  className: "text-sm text-status-success-text mt-1",
877
- children: j("auth.sso.clientCreatedDesc", "Save these credentials securely. The client secret will not be shown again.")
874
+ children: v("auth.sso.clientCreatedDesc", "Save these credentials securely. The client secret will not be shown again.")
878
875
  })] }), /* @__PURE__ */ f("button", {
879
876
  type: "button",
880
- onClick: () => he(null),
881
- "aria-label": j("auth.sso.dismissClientCredentials", "Dismiss"),
877
+ onClick: () => X(null),
878
+ "aria-label": v("auth.sso.dismissClientCredentials", "Dismiss"),
882
879
  className: "text-status-success-text hover:text-status-success-text",
883
880
  children: /* @__PURE__ */ f("svg", {
884
881
  className: "size-5",
@@ -898,40 +895,40 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
898
895
  children: [
899
896
  /* @__PURE__ */ p("div", { children: [/* @__PURE__ */ f("label", {
900
897
  className: "block text-xs font-medium text-status-success-text mb-1",
901
- children: j("auth.sso.clientId", "Client ID")
898
+ children: v("auth.sso.clientId", "Client ID")
902
899
  }), /* @__PURE__ */ p("div", {
903
900
  className: "flex gap-2",
904
901
  children: [/* @__PURE__ */ f("code", {
905
902
  className: "flex-1 px-3 py-2 rounded-lg bg-bg-surface text-sm font-mono border border-status-success-border",
906
- children: X.client_id
903
+ children: Y.client_id
907
904
  }), /* @__PURE__ */ f("button", {
908
905
  type: "button",
909
- onClick: () => void g(X.client_id),
906
+ onClick: () => void g(Y.client_id),
910
907
  className: "px-3 py-2 rounded-lg bg-status-success-bg text-white text-sm hover:bg-status-success-bg",
911
- children: j("auth.sso.copy", "Copy")
908
+ children: v("auth.sso.copy", "Copy")
912
909
  })]
913
910
  })] }),
914
- X.client_secret && /* @__PURE__ */ p("div", { children: [/* @__PURE__ */ f("label", {
911
+ Y.client_secret && /* @__PURE__ */ p("div", { children: [/* @__PURE__ */ f("label", {
915
912
  className: "block text-xs font-medium text-status-success-text mb-1",
916
- children: j("auth.sso.clientSecret", "Client Secret (save now!)")
913
+ children: v("auth.sso.clientSecret", "Client Secret (save now!)")
917
914
  }), /* @__PURE__ */ p("div", {
918
915
  className: "flex gap-2",
919
916
  children: [/* @__PURE__ */ f("code", {
920
917
  className: "flex-1 px-3 py-2 rounded-lg bg-bg-surface text-sm font-mono border border-status-success-border",
921
- children: X.client_secret
918
+ children: Y.client_secret
922
919
  }), /* @__PURE__ */ f("button", {
923
920
  type: "button",
924
- onClick: () => void g(X.client_secret || ""),
921
+ onClick: () => void g(Y.client_secret || ""),
925
922
  className: "px-3 py-2 rounded-lg bg-status-success-bg text-white text-sm hover:bg-status-success-bg",
926
- children: j("auth.sso.copy", "Copy")
923
+ children: v("auth.sso.copy", "Copy")
927
924
  })]
928
925
  })] }),
929
926
  /* @__PURE__ */ p("div", { children: [/* @__PURE__ */ f("label", {
930
927
  className: "block text-xs font-medium text-status-success-text mb-1",
931
- children: j("auth.sso.redirectUris", "Redirect URIs")
928
+ children: v("auth.sso.redirectUris", "Redirect URIs")
932
929
  }), /* @__PURE__ */ f("code", {
933
930
  className: "block px-3 py-2 rounded-lg bg-bg-surface text-sm font-mono border border-status-success-border",
934
- children: X.redirect_uris.join(", ")
931
+ children: Y.redirect_uris.join(", ")
935
932
  })] })
936
933
  ]
937
934
  })]
@@ -942,10 +939,10 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
942
939
  className: "flex items-center justify-between mb-6",
943
940
  children: [/* @__PURE__ */ f("h3", {
944
941
  className: "text-lg font-medium text-text-primary",
945
- children: j("auth.sso.registerClient", "Register New Client")
946
- }), !W && /* @__PURE__ */ p("button", {
942
+ children: v("auth.sso.registerClient", "Register New Client")
943
+ }), !U && /* @__PURE__ */ p("button", {
947
944
  type: "button",
948
- onClick: () => G(!0),
945
+ onClick: () => W(!0),
949
946
  className: "px-4 py-2 rounded-lg bg-action-primary-bg text-white font-medium hover:bg-action-primary-bg-hover transition-colors flex items-center gap-2",
950
947
  children: [/* @__PURE__ */ f("svg", {
951
948
  className: "size-4",
@@ -958,16 +955,16 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
958
955
  strokeWidth: 2,
959
956
  d: "M12 4v16m8-8H4"
960
957
  })
961
- }), j("auth.sso.newClient", "New Client")]
958
+ }), v("auth.sso.newClient", "New Client")]
962
959
  })]
963
- }), W ? /* @__PURE__ */ p("div", {
960
+ }), U ? /* @__PURE__ */ p("div", {
964
961
  className: "space-y-5",
965
962
  children: [
966
963
  /* @__PURE__ */ p("div", { children: [/* @__PURE__ */ p("label", {
967
964
  htmlFor: "oidc-client-name",
968
965
  className: "block text-sm font-medium text-text-primary mb-2",
969
966
  children: [
970
- j("auth.sso.clientName", "Client Name"),
967
+ v("auth.sso.clientName", "Client Name"),
971
968
  " ",
972
969
  /* @__PURE__ */ f("span", {
973
970
  className: "text-status-error-text",
@@ -978,13 +975,13 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
978
975
  }), /* @__PURE__ */ f("input", {
979
976
  id: "oidc-client-name",
980
977
  type: "text",
981
- "aria-label": j("auth.sso.oidcClientName", "Client Name"),
982
- value: K.client_name,
983
- onChange: (e) => q({
984
- ...K,
978
+ "aria-label": v("auth.sso.oidcClientName", "Client Name"),
979
+ value: G.client_name,
980
+ onChange: (e) => K({
981
+ ...G,
985
982
  client_name: e.target.value
986
983
  }),
987
- placeholder: j("auth.sso.clientNamePlaceholder", "My Application"),
984
+ placeholder: v("auth.sso.clientNamePlaceholder", "My Application"),
988
985
  "aria-required": "true",
989
986
  className: "block w-full px-4 py-3 border border-border-default rounded-xl bg-bg-surface text-text-primary placeholder-text-tertiary focus:outline-none focus:ring-2 focus:ring-action-primary-bg/20 focus:border-action-primary-bg transition-all"
990
987
  })] }),
@@ -993,7 +990,7 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
993
990
  htmlFor: "oidc-redirect-uris",
994
991
  className: "block text-sm font-medium text-text-primary mb-2",
995
992
  children: [
996
- j("auth.sso.redirectUris", "Redirect URIs"),
993
+ v("auth.sso.redirectUris", "Redirect URIs"),
997
994
  " ",
998
995
  /* @__PURE__ */ f("span", {
999
996
  className: "text-status-error-text",
@@ -1005,13 +1002,13 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
1005
1002
  /* @__PURE__ */ f("input", {
1006
1003
  id: "oidc-redirect-uris",
1007
1004
  type: "text",
1008
- "aria-label": j("auth.sso.oidcRedirectUris", "Redirect URIs"),
1009
- value: K.redirect_uris,
1010
- onChange: (e) => q({
1011
- ...K,
1005
+ "aria-label": v("auth.sso.oidcRedirectUris", "Redirect URIs"),
1006
+ value: G.redirect_uris,
1007
+ onChange: (e) => K({
1008
+ ...G,
1012
1009
  redirect_uris: e.target.value
1013
1010
  }),
1014
- placeholder: j("auth.sso.redirectUrisPlaceholder", "http://localhost:3000/callback, https://app.example.com/callback"),
1011
+ placeholder: v("auth.sso.redirectUrisPlaceholder", "http://localhost:3000/callback, https://app.example.com/callback"),
1015
1012
  "aria-required": "true",
1016
1013
  "aria-describedby": "oidc-redirect-uris-hint",
1017
1014
  className: "block w-full px-4 py-3 border border-border-default rounded-xl bg-bg-surface text-text-primary placeholder-text-tertiary focus:outline-none focus:ring-2 focus:ring-action-primary-bg/20 focus:border-action-primary-bg transition-all"
@@ -1019,12 +1016,12 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
1019
1016
  /* @__PURE__ */ f("p", {
1020
1017
  id: "oidc-redirect-uris-hint",
1021
1018
  className: "mt-1 text-xs text-text-secondary",
1022
- children: j("auth.sso.redirectUrisHelper", "Separate multiple URIs with commas")
1019
+ children: v("auth.sso.redirectUrisHelper", "Separate multiple URIs with commas")
1023
1020
  })
1024
1021
  ] }),
1025
1022
  /* @__PURE__ */ p("div", { children: [/* @__PURE__ */ f("label", {
1026
1023
  className: "block text-sm font-medium text-text-primary mb-2",
1027
- children: j("auth.sso.grantTypes", "Grant Types")
1024
+ children: v("auth.sso.grantTypes", "Grant Types")
1028
1025
  }), /* @__PURE__ */ f("div", {
1029
1026
  className: "flex flex-wrap gap-3",
1030
1027
  children: [
@@ -1036,14 +1033,14 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
1036
1033
  children: [/* @__PURE__ */ f("input", {
1037
1034
  type: "checkbox",
1038
1035
  "aria-label": e,
1039
- checked: K.grant_types.includes(e),
1036
+ checked: G.grant_types.includes(e),
1040
1037
  onChange: (t) => {
1041
- t.target.checked ? q({
1042
- ...K,
1043
- grant_types: [...K.grant_types, e]
1044
- }) : q({
1045
- ...K,
1046
- grant_types: K.grant_types.filter((t) => t !== e)
1038
+ t.target.checked ? K({
1039
+ ...G,
1040
+ grant_types: [...G.grant_types, e]
1041
+ }) : K({
1042
+ ...G,
1043
+ grant_types: G.grant_types.filter((t) => t !== e)
1047
1044
  });
1048
1045
  },
1049
1046
  className: "size-4 rounded border-border-default text-text-link focus:ring-action-primary-bg"
@@ -1056,27 +1053,27 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
1056
1053
  /* @__PURE__ */ p("div", { children: [/* @__PURE__ */ f("label", {
1057
1054
  htmlFor: "oidc-token-auth-method",
1058
1055
  className: "block text-sm font-medium text-text-primary mb-2",
1059
- children: j("auth.sso.tokenEndpointAuth", "Token Endpoint Auth Method")
1056
+ children: v("auth.sso.tokenEndpointAuth", "Token Endpoint Auth Method")
1060
1057
  }), /* @__PURE__ */ p("select", {
1061
1058
  id: "oidc-token-auth-method",
1062
- value: K.token_endpoint_auth_method,
1063
- onChange: (e) => q({
1064
- ...K,
1059
+ value: G.token_endpoint_auth_method,
1060
+ onChange: (e) => K({
1061
+ ...G,
1065
1062
  token_endpoint_auth_method: e.target.value
1066
1063
  }),
1067
1064
  className: "block w-full px-4 py-3 border border-border-default rounded-xl bg-bg-surface text-text-primary focus:outline-none focus:ring-2 focus:ring-action-primary-bg/20 focus:border-action-primary-bg transition-all",
1068
1065
  children: [
1069
1066
  /* @__PURE__ */ f("option", {
1070
1067
  value: "none",
1071
- children: j("auth.sso.tokenAuthNone", "None (Public Client - SPAs, Mobile Apps)")
1068
+ children: v("auth.sso.tokenAuthNone", "None (Public Client - SPAs, Mobile Apps)")
1072
1069
  }),
1073
1070
  /* @__PURE__ */ f("option", {
1074
1071
  value: "client_secret_basic",
1075
- children: j("auth.sso.tokenAuthBasic", "Client Secret Basic")
1072
+ children: v("auth.sso.tokenAuthBasic", "Client Secret Basic")
1076
1073
  }),
1077
1074
  /* @__PURE__ */ f("option", {
1078
1075
  value: "client_secret_post",
1079
- children: j("auth.sso.tokenAuthPost", "Client Secret Post")
1076
+ children: v("auth.sso.tokenAuthPost", "Client Secret Post")
1080
1077
  })
1081
1078
  ]
1082
1079
  })] }),
@@ -1084,16 +1081,16 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
1084
1081
  className: "flex items-center gap-3 pt-2",
1085
1082
  children: [/* @__PURE__ */ f(m, {
1086
1083
  type: "button",
1087
- onClick: ve,
1088
- disabled: J,
1084
+ onClick: ge,
1085
+ disabled: q,
1089
1086
  variant: "default",
1090
1087
  size: "lg",
1091
1088
  className: "font-semibold",
1092
- children: J ? /* @__PURE__ */ p(d, { children: [/* @__PURE__ */ f(t, { className: "size-4 animate-spin" }), j("auth.sso.registering", "Registering...")] }) : j("auth.sso.registerClientButton", "Register Client")
1089
+ children: q ? /* @__PURE__ */ p(d, { children: [/* @__PURE__ */ f(n, { className: "size-4 animate-spin" }), v("auth.sso.registering", "Registering...")] }) : v("auth.sso.registerClientButton", "Register Client")
1093
1090
  }), /* @__PURE__ */ f("button", {
1094
1091
  type: "button",
1095
1092
  onClick: () => {
1096
- G(!1), q({
1093
+ W(!1), K({
1097
1094
  client_name: "",
1098
1095
  redirect_uris: "",
1099
1096
  grant_types: ["authorization_code", "refresh_token"],
@@ -1101,21 +1098,21 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
1101
1098
  });
1102
1099
  },
1103
1100
  className: "px-6 py-3 rounded-xl border border-border-default text-text-primary font-medium hover:bg-bg-sunken transition-colors",
1104
- children: j("auth.sso.cancel", "Cancel")
1101
+ children: v("auth.sso.cancel", "Cancel")
1105
1102
  })]
1106
1103
  })
1107
1104
  ]
1108
1105
  }) : /* @__PURE__ */ f(h, {
1109
1106
  illustration: "empty-generic",
1110
- title: j("auth.sso.emptyClientsTitle", "No client apps yet"),
1111
- description: j("auth.sso.emptyClients", "Click \"New Client\" to register an OAuth 2.0 / OIDC client application.")
1107
+ title: v("auth.sso.emptyClientsTitle", "No client apps yet"),
1108
+ description: v("auth.sso.emptyClients", "Click \"New Client\" to register an OAuth 2.0 / OIDC client application.")
1112
1109
  })]
1113
1110
  }),
1114
1111
  /* @__PURE__ */ p("div", {
1115
1112
  className: "p-6 rounded-xl border border-border-subtle bg-bg-surface",
1116
1113
  children: [/* @__PURE__ */ f("h3", {
1117
1114
  className: "text-lg font-medium text-text-primary mb-4",
1118
- children: j("auth.sso.preconfiguredClients", "Pre-configured Clients")
1115
+ children: v("auth.sso.preconfiguredClients", "Pre-configured Clients")
1119
1116
  }), /* @__PURE__ */ f("div", {
1120
1117
  className: "space-y-4",
1121
1118
  children: /* @__PURE__ */ p("div", {
@@ -1128,12 +1125,12 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
1128
1125
  children: "tenant-frontend"
1129
1126
  }), /* @__PURE__ */ f("span", {
1130
1127
  className: "px-2 py-1 rounded-full text-xs bg-status-success-bg-subtle text-status-success-text",
1131
- children: j("auth.sso.active", "Active")
1128
+ children: v("auth.sso.active", "Active")
1132
1129
  })]
1133
1130
  }),
1134
1131
  /* @__PURE__ */ f("p", {
1135
1132
  className: "text-sm text-text-secondary",
1136
- children: j("auth.sso.preconfigClientDesc", "Default frontend client for tenant authentication")
1133
+ children: v("auth.sso.preconfigClientDesc", "Default frontend client for tenant authentication")
1137
1134
  }),
1138
1135
  /* @__PURE__ */ p("div", {
1139
1136
  className: "mt-2 flex flex-wrap gap-2",
@@ -1148,7 +1145,7 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
1148
1145
  }),
1149
1146
  /* @__PURE__ */ f("span", {
1150
1147
  className: "px-2 py-0.5 rounded bg-bg-sunken text-xs text-text-primary",
1151
- children: j("auth.sso.pkceRequired", "PKCE required")
1148
+ children: v("auth.sso.pkceRequired", "PKCE required")
1152
1149
  })
1153
1150
  ]
1154
1151
  })
@@ -1158,17 +1155,17 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
1158
1155
  })
1159
1156
  ]
1160
1157
  }),
1161
- !E && M === "test" && /* @__PURE__ */ p("div", {
1158
+ !D && j === "test" && /* @__PURE__ */ p("div", {
1162
1159
  className: "space-y-6",
1163
1160
  children: [
1164
1161
  /* @__PURE__ */ p("div", {
1165
1162
  className: "p-4 rounded-xl bg-status-warning-bg-subtle border border-status-warning-border",
1166
1163
  children: [/* @__PURE__ */ f("h3", {
1167
1164
  className: "font-medium text-status-warning-text mb-2",
1168
- children: j("auth.sso.testLoginTitle", "Test SSO Login")
1165
+ children: v("auth.sso.testLoginTitle", "Test SSO Login")
1169
1166
  }), /* @__PURE__ */ f("p", {
1170
1167
  className: "text-sm text-status-warning-text",
1171
- children: j("auth.sso.testLoginDesc", "Use this section to test your SSO configuration before rolling it out to users. Make sure your IdP is properly configured with the SP metadata above.")
1168
+ children: v("auth.sso.testLoginDesc", "Use this section to test your SSO configuration before rolling it out to users. Make sure your IdP is properly configured with the SP metadata above.")
1172
1169
  })]
1173
1170
  }),
1174
1171
  /* @__PURE__ */ p("div", {
@@ -1176,13 +1173,13 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
1176
1173
  children: [
1177
1174
  /* @__PURE__ */ f("h3", {
1178
1175
  className: "text-lg font-medium text-text-primary mb-4",
1179
- children: j("auth.sso.spInitiatedTest", "SP-Initiated Login Test")
1176
+ children: v("auth.sso.spInitiatedTest", "SP-Initiated Login Test")
1180
1177
  }),
1181
1178
  /* @__PURE__ */ f("p", {
1182
1179
  className: "text-sm text-text-secondary mb-4",
1183
- children: j("auth.sso.spInitiatedTestDesc", "Click the button below to initiate an SSO login flow. You will be redirected to your IdP to authenticate.")
1180
+ children: v("auth.sso.spInitiatedTestDesc", "Click the button below to initiate an SSO login flow. You will be redirected to your IdP to authenticate.")
1184
1181
  }),
1185
- w && w.enabled ? /* @__PURE__ */ p("a", {
1182
+ T && T.enabled ? /* @__PURE__ */ p("a", {
1186
1183
  href: `${window.location.origin}/auth/sso/login`,
1187
1184
  className: "inline-flex items-center gap-2 px-6 py-3 rounded-xl bg-status-success-bg text-white font-medium shadow-sm hover:opacity-90 transition-all duration-200",
1188
1185
  children: [/* @__PURE__ */ f("svg", {
@@ -1196,10 +1193,10 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
1196
1193
  strokeWidth: 2,
1197
1194
  d: "M11 16l-4-4m0 0l4-4m-4 4h14m-5 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h7a3 3 0 013 3v1"
1198
1195
  })
1199
- }), j("auth.sso.testSsoLoginButton", "Test SSO Login")]
1196
+ }), v("auth.sso.testSsoLoginButton", "Test SSO Login")]
1200
1197
  }) : /* @__PURE__ */ f("div", {
1201
1198
  className: "p-4 rounded-xl bg-bg-sunken/50 text-text-secondary text-sm",
1202
- children: w ? j("auth.sso.disabledTest", "SSO is disabled. Enable it to test the login flow.") : j("auth.sso.notConfigured", "SSO is not configured. Please configure your IdP settings first.")
1199
+ children: T ? v("auth.sso.disabledTest", "SSO is disabled. Enable it to test the login flow.") : v("auth.sso.notConfigured", "SSO is not configured. Please configure your IdP settings first.")
1203
1200
  })
1204
1201
  ]
1205
1202
  }),
@@ -1207,38 +1204,38 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
1207
1204
  className: "p-6 rounded-xl border border-border-subtle bg-bg-surface",
1208
1205
  children: [/* @__PURE__ */ f("h3", {
1209
1206
  className: "text-lg font-medium text-text-primary mb-4",
1210
- children: j("auth.sso.testResults", "Test Results")
1207
+ children: v("auth.sso.testResults", "Test Results")
1211
1208
  }), /* @__PURE__ */ f("p", {
1212
1209
  className: "text-sm text-text-secondary",
1213
- children: j("auth.sso.testResultsDesc", "After testing, results will appear here. Check the browser console for detailed logs.")
1210
+ children: v("auth.sso.testResultsDesc", "After testing, results will appear here. Check the browser console for detailed logs.")
1214
1211
  })]
1215
1212
  })
1216
1213
  ]
1217
1214
  }),
1218
- /* @__PURE__ */ f(oe, {
1215
+ /* @__PURE__ */ f(ae, {
1219
1216
  className: "mt-8",
1220
1217
  storageKey: "auth-sso-config",
1221
1218
  steps: [
1222
1219
  {
1223
1220
  id: "save-config",
1224
- label: j("auth.sso.nextSave", "Save your IdP configuration"),
1225
- description: j("auth.sso.nextSaveDesc", "Enter your SAML or OIDC details, then save so the connection exists."),
1226
- done: !!w
1221
+ label: v("auth.sso.nextSave", "Save your IdP configuration"),
1222
+ description: v("auth.sso.nextSaveDesc", "Enter your SAML or OIDC details, then save so the connection exists."),
1223
+ done: !!T
1227
1224
  },
1228
1225
  {
1229
1226
  id: "enable-sso",
1230
- label: j("auth.sso.nextEnable", "Enable SSO for sign-in"),
1231
- description: j("auth.sso.nextEnableDesc", "Flip the connection on once you've confirmed the settings."),
1232
- done: !!(w && Z.enabled),
1227
+ label: v("auth.sso.nextEnable", "Enable SSO for sign-in"),
1228
+ description: v("auth.sso.nextEnableDesc", "Flip the connection on once you've confirmed the settings."),
1229
+ done: !!(T && Z.enabled),
1233
1230
  onClick: () => {
1234
- w && !Z.enabled && $();
1231
+ T && !Z.enabled && $();
1235
1232
  }
1236
1233
  },
1237
1234
  {
1238
1235
  id: "test-login",
1239
- label: j("auth.sso.nextTest", "Test the login flow"),
1240
- description: j("auth.sso.nextTestDesc", "Run a test sign-in before rolling SSO out to your whole team."),
1241
- href: w && w.enabled ? `${window.location.origin}/auth/sso/login` : void 0
1236
+ label: v("auth.sso.nextTest", "Test the login flow"),
1237
+ description: v("auth.sso.nextTestDesc", "Run a test sign-in before rolling SSO out to your whole team."),
1238
+ href: T && T.enabled ? `${window.location.origin}/auth/sso/login` : void 0
1242
1239
  }
1243
1240
  ]
1244
1241
  })
@@ -1247,19 +1244,19 @@ function v({ bypassEnterprisePlanGate: a = !1 }) {
1247
1244
  className: "max-w-5xl mx-auto p-6",
1248
1245
  children: /* @__PURE__ */ f(h, {
1249
1246
  illustration: "onboarding",
1250
- title: j("auth.sso.enterprisePlanRequired", "Enterprise Plan Required"),
1247
+ title: v("auth.sso.enterprisePlanRequired", "Enterprise Plan Required"),
1251
1248
  description: /* @__PURE__ */ p(d, { children: [
1252
- j("auth.sso.enterprisePlanRequiredDesc", "Single Sign-On (SAML / OIDC) configuration is available on the Enterprise plan."),
1249
+ v("auth.sso.enterprisePlanRequiredDesc", "Single Sign-On (SAML / OIDC) configuration is available on the Enterprise plan."),
1253
1250
  " ",
1254
- j("auth.sso.contactSales", "Contact sales to upgrade your workspace to the Enterprise plan.")
1251
+ v("auth.sso.contactSales", "Contact sales to upgrade your workspace to the Enterprise plan.")
1255
1252
  ] })
1256
1253
  })
1257
1254
  }) : /* @__PURE__ */ f("div", {
1258
1255
  className: "max-w-5xl mx-auto p-6",
1259
1256
  children: /* @__PURE__ */ f(h, {
1260
1257
  illustration: "empty-generic",
1261
- title: j("auth.sso.adminRequired", "Admin Access Required"),
1262
- description: j("auth.sso.adminRequiredDesc", "You need administrator privileges to configure SSO settings.")
1258
+ title: v("auth.sso.adminRequired", "Admin Access Required"),
1259
+ description: v("auth.sso.adminRequiredDesc", "You need administrator privileges to configure SSO settings.")
1263
1260
  })
1264
1261
  });
1265
1262
  }