@burdenoff/microfe-admin 2026.625.1 → 2026.626.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 (70) hide show
  1. package/dist/admin/components/AccessDenied.js +2 -2
  2. package/dist/admin/components/AccessDenied.js.map +1 -1
  3. package/dist/admin/components/ActivityFeed.js +4 -4
  4. package/dist/admin/components/ActivityFeed.js.map +1 -1
  5. package/dist/admin/components/Charts.js.map +1 -1
  6. package/dist/admin/components/ConfirmDialog.js +1 -1
  7. package/dist/admin/components/ConfirmDialog.js.map +1 -1
  8. package/dist/admin/components/FormSheet.js +1 -1
  9. package/dist/admin/components/FormSheet.js.map +1 -1
  10. package/dist/admin/components/TenantSsoPanel.js +1 -1
  11. package/dist/admin/components/TenantSsoPanel.js.map +1 -1
  12. package/dist/admin/components/Toast.js +11 -11
  13. package/dist/admin/components/Toast.js.map +1 -1
  14. package/dist/admin/components/forms/SubscriptionForm.js +2 -2
  15. package/dist/admin/components/forms/SubscriptionForm.js.map +1 -1
  16. package/dist/admin/components/forms/TenantForm.js +1 -1
  17. package/dist/admin/components/forms/UserForm.js +1 -1
  18. package/dist/admin/components/ui.js +3 -3
  19. package/dist/admin/components/ui.js.map +1 -1
  20. package/dist/admin/constants/index.js +33 -24
  21. package/dist/admin/constants/index.js.map +1 -1
  22. package/dist/admin/pages/AuditLogsPage.js +92 -77
  23. package/dist/admin/pages/AuditLogsPage.js.map +1 -1
  24. package/dist/admin/pages/BillingPage.js +95 -51
  25. package/dist/admin/pages/BillingPage.js.map +1 -1
  26. package/dist/admin/pages/CommunicationsPage.js +97 -92
  27. package/dist/admin/pages/CommunicationsPage.js.map +1 -1
  28. package/dist/admin/pages/ContentPagesPage.js +274 -259
  29. package/dist/admin/pages/ContentPagesPage.js.map +1 -1
  30. package/dist/admin/pages/DashboardPage.js +113 -84
  31. package/dist/admin/pages/DashboardPage.js.map +1 -1
  32. package/dist/admin/pages/FeatureFlagsPage.js +93 -75
  33. package/dist/admin/pages/FeatureFlagsPage.js.map +1 -1
  34. package/dist/admin/pages/OrganizationsListPage.js +105 -87
  35. package/dist/admin/pages/OrganizationsListPage.js.map +1 -1
  36. package/dist/admin/pages/ProductsPage.js +138 -130
  37. package/dist/admin/pages/ProductsPage.js.map +1 -1
  38. package/dist/admin/pages/ReferralsPage.js +70 -52
  39. package/dist/admin/pages/ReferralsPage.js.map +1 -1
  40. package/dist/admin/pages/RolesPermissionsPage.js +136 -118
  41. package/dist/admin/pages/RolesPermissionsPage.js.map +1 -1
  42. package/dist/admin/pages/SREPage.js +34 -32
  43. package/dist/admin/pages/SREPage.js.map +1 -1
  44. package/dist/admin/pages/SandboxSettingsPage.js +360 -322
  45. package/dist/admin/pages/SandboxSettingsPage.js.map +1 -1
  46. package/dist/admin/pages/SettingsPage.js +63 -60
  47. package/dist/admin/pages/SettingsPage.js.map +1 -1
  48. package/dist/admin/pages/SyncFailuresPage.js +120 -118
  49. package/dist/admin/pages/SyncFailuresPage.js.map +1 -1
  50. package/dist/admin/pages/TenantDetailPage.js +261 -218
  51. package/dist/admin/pages/TenantDetailPage.js.map +1 -1
  52. package/dist/admin/pages/TenantFormRoutePage.js +65 -61
  53. package/dist/admin/pages/TenantFormRoutePage.js.map +1 -1
  54. package/dist/admin/pages/TenantsListPage.js +86 -71
  55. package/dist/admin/pages/TenantsListPage.js.map +1 -1
  56. package/dist/admin/pages/UsersListPage.js +128 -113
  57. package/dist/admin/pages/UsersListPage.js.map +1 -1
  58. package/dist/admin/pages/WaitlistPage.js +78 -63
  59. package/dist/admin/pages/WaitlistPage.js.map +1 -1
  60. package/dist/admin/pages/WorkflowsPage.js +107 -102
  61. package/dist/admin/pages/WorkflowsPage.js.map +1 -1
  62. package/dist/admin/pages/WorkspacesListPage.js +61 -49
  63. package/dist/admin/pages/WorkspacesListPage.js.map +1 -1
  64. package/dist/node_modules/@hookform/resolvers/dist/resolvers.js +2 -2
  65. package/dist/node_modules/@hookform/resolvers/dist/resolvers.js.map +1 -1
  66. package/dist/node_modules/@hookform/resolvers/zod/dist/zod.js +35 -26
  67. package/dist/node_modules/@hookform/resolvers/zod/dist/zod.js.map +1 -1
  68. package/dist/node_modules/react-hook-form/dist/index.esm.js +609 -516
  69. package/dist/node_modules/react-hook-form/dist/index.esm.js.map +1 -1
  70. package/package.json +2 -2
@@ -14,272 +14,315 @@ import { useActivateTenantMutation as g, useGetTenantQuery as _, useSuspendTenan
14
14
  import { emitTenantLifecycle as y } from "../utils/tenantEvents.js";
15
15
  import { TenantMembersPanel as b } from "../components/TenantMembersPanel.js";
16
16
  import { TenantSsoPanel as x } from "../components/TenantSsoPanel.js";
17
- import { ArrowLeft as S, Ban as C, Building2 as w, Calendar as T, CheckCircle as E, Globe as D, Loader2 as O, Mail as te, Settings as ne, Users as re } from "lucide-react";
18
- import { useNavigate as k, useParams as A } from "react-router-dom";
19
- import { jsx as j, jsxs as M } from "react/jsx-runtime";
20
- import { useI18n as N } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
21
- import { useEventBus as P } from "@burdenoff/fe-libs/shared/events";
17
+ import { ArrowLeft as S, Ban as C, Building2 as w, Calendar as T, CheckCircle as E, Globe as te, Loader2 as D, Mail as ne, Settings as re, Users as ie } from "lucide-react";
18
+ import { useNavigate as O, useParams as k } from "react-router-dom";
19
+ import { jsx as A, jsxs as j } from "react/jsx-runtime";
20
+ import { EmphasisPanel as M, NextSteps as N, PagePurpose as P } from "@burdenoff/fe-libs/ui";
21
+ import { useI18n as F } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
22
+ import { useEventBus as I } from "@burdenoff/fe-libs/shared/events";
22
23
  //#region src/admin/pages/TenantDetailPage.tsx
23
- function F() {
24
- let { canViewTenants: F, canManageTenants: I, isLoading: L } = n(), { tenantId: R } = A(), z = k(), { basePath: B = "" } = t(), V = e(), { t: H } = N(), U = (e, t, n) => p(H, e, t, n), { data: W, loading: G, error: K } = _({
25
- variables: { id: R },
26
- skip: !R || L || !F,
24
+ function L() {
25
+ let { canViewTenants: L, canManageTenants: R, isLoading: z } = n(), { tenantId: B } = k(), V = O(), { basePath: H = "" } = t(), U = e(), { t: W } = F(), G = (e, t, n) => p(W, e, t, n), { data: K, loading: q, error: J } = _({
26
+ variables: { id: B },
27
+ skip: !B || z || !L,
27
28
  fetchPolicy: "cache-and-network"
28
- }), [q, { loading: J }] = v(), [Y, { loading: X }] = g(), Z = P(), Q = W?.tenant ? h(W.tenant) : null, ie = async () => {
29
- if (!R) return;
29
+ }), [ae, { loading: Y }] = v(), [oe, { loading: X }] = g(), Z = I(), Q = K?.tenant ? h(K.tenant) : null, se = async () => {
30
+ if (!B) return;
30
31
  let e = Q?.slug;
31
32
  try {
32
- await q({ variables: { id: R } }), y(Z, "tenant.tenant.suspended", {
33
- tenantId: R,
33
+ await ae({ variables: { id: B } }), y(Z, "tenant.tenant.suspended", {
34
+ tenantId: B,
34
35
  tenantSlug: e,
35
36
  status: "SUSPENDED"
36
- }), V.success(U("admin.tenantDetail.toast.suspendedTitle", "Tenant suspended"), U("admin.tenantDetail.toast.suspendedDescription", "{{name}} has been suspended.", { name: Q?.name ?? "" }));
37
+ }), U.success(G("admin.tenantDetail.toast.suspendedTitle", "Tenant suspended"), G("admin.tenantDetail.toast.suspendedDescription", "{{name}} has been suspended.", { name: Q?.name ?? "" }));
37
38
  } catch (e) {
38
- V.error(U("admin.tenantDetail.toast.errorTitle", "Error"), e instanceof Error ? e.message : U("admin.tenantDetail.toast.suspendFailed", "Failed to suspend tenant."));
39
+ U.error(G("admin.tenantDetail.toast.errorTitle", "Error"), e instanceof Error ? e.message : G("admin.tenantDetail.toast.suspendFailed", "Failed to suspend tenant."));
39
40
  }
40
- }, ae = async () => {
41
- if (!R) return;
41
+ }, ce = async () => {
42
+ if (!B) return;
42
43
  let e = Q?.slug;
43
44
  try {
44
- await Y({ variables: { id: R } }), y(Z, "tenant.tenant.activated", {
45
- tenantId: R,
45
+ await oe({ variables: { id: B } }), y(Z, "tenant.tenant.activated", {
46
+ tenantId: B,
46
47
  tenantSlug: e,
47
48
  status: "ACTIVE"
48
- }), V.success(U("admin.tenantDetail.toast.activatedTitle", "Tenant activated"), U("admin.tenantDetail.toast.activatedDescription", "{{name}} has been activated.", { name: Q?.name ?? "" }));
49
+ }), U.success(G("admin.tenantDetail.toast.activatedTitle", "Tenant activated"), G("admin.tenantDetail.toast.activatedDescription", "{{name}} has been activated.", { name: Q?.name ?? "" }));
49
50
  } catch (e) {
50
- V.error(U("admin.tenantDetail.toast.errorTitle", "Error"), e instanceof Error ? e.message : U("admin.tenantDetail.toast.activateFailed", "Failed to activate tenant."));
51
+ U.error(G("admin.tenantDetail.toast.errorTitle", "Error"), e instanceof Error ? e.message : G("admin.tenantDetail.toast.activateFailed", "Failed to activate tenant."));
51
52
  }
52
- }, $ = W?.tenant?.workspaces ?? [];
53
- return /* @__PURE__ */ j(ee, {
54
- allowed: F,
55
- isLoading: L,
56
- pageTitle: U("admin.tenantDetail.pageTitle", "Tenant Details"),
57
- denyMessage: U("admin.tenantDetail.denyMessage", "You don't have permission to view tenant details."),
58
- children: G ? /* @__PURE__ */ j(u, {
59
- title: U("admin.tenantDetail.loadingTitle", "Loading..."),
60
- children: /* @__PURE__ */ j("div", {
53
+ }, $ = K?.tenant?.workspaces ?? [];
54
+ return /* @__PURE__ */ A(ee, {
55
+ allowed: L,
56
+ isLoading: z,
57
+ pageTitle: G("admin.tenantDetail.pageTitle", "Tenant Details"),
58
+ denyMessage: G("admin.tenantDetail.denyMessage", "You don't have permission to view tenant details."),
59
+ children: q ? /* @__PURE__ */ A(u, {
60
+ title: G("admin.tenantDetail.loadingTitle", "Loading..."),
61
+ children: /* @__PURE__ */ A("div", {
61
62
  className: "flex h-64 items-center justify-center",
62
- children: /* @__PURE__ */ j(O, { className: "h-8 w-8 animate-spin text-text-secondary" })
63
+ children: /* @__PURE__ */ A(D, { className: "h-8 w-8 animate-spin text-text-secondary" })
63
64
  })
64
- }) : K || !Q ? /* @__PURE__ */ M(u, {
65
- title: U("admin.tenantDetail.notFoundTitle", "Tenant Not Found"),
66
- description: U("admin.tenantDetail.notFoundDescription", "The requested tenant could not be found"),
67
- children: [K && /* @__PURE__ */ j("div", {
65
+ }) : J || !Q ? /* @__PURE__ */ j(u, {
66
+ title: G("admin.tenantDetail.notFoundTitle", "Tenant Not Found"),
67
+ description: G("admin.tenantDetail.notFoundDescription", "The requested tenant could not be found"),
68
+ children: [J && /* @__PURE__ */ A("div", {
68
69
  className: "mb-4 rounded-md border border-status-error-border/50 bg-status-error-bg/10 p-4 text-sm text-status-error-text",
69
- children: K.message
70
- }), /* @__PURE__ */ M(i, {
70
+ children: J.message
71
+ }), /* @__PURE__ */ j(i, {
71
72
  variant: "outline",
72
- onClick: () => z(m(B, "tenants")),
73
- children: [/* @__PURE__ */ j(S, { className: "mr-2 h-4 w-4" }), U("admin.tenantDetail.backToTenants", "Back to Tenants")]
73
+ onClick: () => V(m(H, "tenants")),
74
+ children: [/* @__PURE__ */ A(S, { className: "mr-2 h-4 w-4" }), G("admin.tenantDetail.backToTenants", "Back to Tenants")]
74
75
  })]
75
76
  }) : /* @__PURE__ */ j(u, {
76
77
  title: Q.name,
77
- description: U("admin.tenantDetail.tenantId", "Tenant ID: {{id}}", { id: Q.id }),
78
- actions: /* @__PURE__ */ M("div", {
78
+ description: G("admin.tenantDetail.tenantId", "Tenant ID: {{id}}", { id: Q.id }),
79
+ actions: /* @__PURE__ */ j("div", {
79
80
  className: "flex items-center gap-2",
80
81
  children: [
81
- /* @__PURE__ */ M(i, {
82
+ /* @__PURE__ */ j(i, {
82
83
  variant: "outline",
83
- onClick: () => z(m(B, "tenants")),
84
- children: [/* @__PURE__ */ j(S, { className: "mr-2 h-4 w-4" }), U("admin.tenantDetail.back", "Back")]
84
+ onClick: () => V(m(H, "tenants")),
85
+ children: [/* @__PURE__ */ A(S, { className: "mr-2 h-4 w-4" }), G("admin.tenantDetail.back", "Back")]
85
86
  }),
86
- I && /* @__PURE__ */ M(i, {
87
+ R && /* @__PURE__ */ j(i, {
87
88
  variant: "outline",
88
- onClick: () => z(m(B, `tenants/${Q.id}/edit`)),
89
- children: [/* @__PURE__ */ j(ne, { className: "mr-2 h-4 w-4" }), U("admin.tenantDetail.edit", "Edit")]
89
+ onClick: () => V(m(H, `tenants/${Q.id}/edit`)),
90
+ children: [/* @__PURE__ */ A(re, { className: "mr-2 h-4 w-4" }), G("admin.tenantDetail.edit", "Edit")]
90
91
  }),
91
- I && (Q.status === "active" ? /* @__PURE__ */ M(i, {
92
+ R && (Q.status === "active" ? /* @__PURE__ */ j(i, {
92
93
  variant: "outline",
93
- className: "text-warning",
94
- onClick: ie,
95
- disabled: J,
96
- children: [J ? /* @__PURE__ */ j(O, { className: "mr-2 h-4 w-4 animate-spin" }) : /* @__PURE__ */ j(C, { className: "mr-2 h-4 w-4" }), U("admin.tenantDetail.suspend", "Suspend")]
97
- }) : /* @__PURE__ */ M(i, {
94
+ className: "text-status-warning-text",
95
+ onClick: se,
96
+ disabled: Y,
97
+ children: [Y ? /* @__PURE__ */ A(D, { className: "mr-2 h-4 w-4 animate-spin" }) : /* @__PURE__ */ A(C, { className: "mr-2 h-4 w-4" }), G("admin.tenantDetail.suspend", "Suspend")]
98
+ }) : /* @__PURE__ */ j(i, {
98
99
  variant: "outline",
99
- className: "text-success",
100
- onClick: ae,
100
+ className: "text-status-success-text",
101
+ onClick: ce,
101
102
  disabled: X,
102
- children: [X ? /* @__PURE__ */ j(O, { className: "mr-2 h-4 w-4 animate-spin" }) : /* @__PURE__ */ j(E, { className: "mr-2 h-4 w-4" }), U("admin.tenantDetail.activate", "Activate")]
103
+ children: [X ? /* @__PURE__ */ A(D, { className: "mr-2 h-4 w-4 animate-spin" }) : /* @__PURE__ */ A(E, { className: "mr-2 h-4 w-4" }), G("admin.tenantDetail.activate", "Activate")]
103
104
  }))
104
105
  ]
105
106
  }),
106
- children: /* @__PURE__ */ M("div", {
107
- className: "grid gap-6 lg:grid-cols-3",
108
- children: [/* @__PURE__ */ M("div", {
109
- className: "space-y-6 lg:col-span-2",
110
- children: [
111
- /* @__PURE__ */ M(a, { children: [/* @__PURE__ */ j(s, { children: /* @__PURE__ */ j(c, {
112
- className: "text-lg",
113
- children: U("admin.tenantDetail.overview.title", "Overview")
114
- }) }), /* @__PURE__ */ M(o, { children: [
115
- /* @__PURE__ */ M("div", {
116
- className: "flex items-start gap-4",
117
- children: [/* @__PURE__ */ j(r, {
118
- fallback: Q.name.slice(0, 2).toUpperCase(),
119
- size: "lg"
120
- }), /* @__PURE__ */ M("div", {
121
- className: "flex-1 space-y-4",
122
- children: [/* @__PURE__ */ M("div", { children: [/* @__PURE__ */ j("h2", {
123
- className: "text-xl font-semibold text-text-primary",
124
- children: Q.name
125
- }), /* @__PURE__ */ M("p", {
126
- className: "text-sm text-text-secondary",
127
- children: ["@", Q.slug]
128
- })] }), /* @__PURE__ */ M("div", {
129
- className: "flex flex-wrap items-center gap-4",
130
- children: [/* @__PURE__ */ j(d, { status: Q.status }), Q.plan && /* @__PURE__ */ j("span", {
131
- className: "rounded-md bg-action-primary-bg/10 px-2 py-1 text-xs font-medium text-primary",
132
- children: Q.plan
133
- })]
134
- })]
135
- })]
107
+ children: [
108
+ /* @__PURE__ */ A(P, {
109
+ className: "mb-6",
110
+ children: G("admin.tenantDetail.purpose", "Everything about a single tenant in one place — their profile, the people inside it, and their single sign-on setup. From here you manage that one customer account: review who has access, adjust their SSO, and suspend or reactivate them when needed.")
111
+ }),
112
+ /* @__PURE__ */ A(N, {
113
+ storageKey: "admin-tenant-detail",
114
+ steps: [
115
+ {
116
+ id: "edit-tenant",
117
+ label: G("admin.tenantDetail.nextSteps.edit", "Edit tenant details"),
118
+ description: G("admin.tenantDetail.nextSteps.editDesc", "Update the name, domain or plan for this tenant."),
119
+ onClick: () => V(m(H, `tenants/${Q.id}/edit`)),
120
+ done: !R
121
+ },
122
+ {
123
+ id: "review-members",
124
+ label: G("admin.tenantDetail.nextSteps.members", "Review members"),
125
+ description: G("admin.tenantDetail.nextSteps.membersDesc", "Check who has access inside this tenant."),
126
+ href: "#tenant-members"
127
+ },
128
+ {
129
+ id: "configure-sso",
130
+ label: G("admin.tenantDetail.nextSteps.sso", "Configure SSO"),
131
+ description: G("admin.tenantDetail.nextSteps.ssoDesc", "Set up single sign-on so their team logs in with your IdP."),
132
+ href: "#tenant-sso"
133
+ }
134
+ ]
135
+ }),
136
+ /* @__PURE__ */ j("div", {
137
+ className: "grid gap-6 lg:grid-cols-3",
138
+ children: [/* @__PURE__ */ j("div", {
139
+ className: "space-y-6 lg:col-span-2",
140
+ children: [
141
+ /* @__PURE__ */ A(M, {
142
+ className: "p-0",
143
+ children: /* @__PURE__ */ j(a, {
144
+ className: "border-0 bg-transparent shadow-none hover:border-0",
145
+ children: [/* @__PURE__ */ A(s, { children: /* @__PURE__ */ A(c, {
146
+ className: "text-lg",
147
+ children: G("admin.tenantDetail.overview.title", "Overview")
148
+ }) }), /* @__PURE__ */ j(o, { children: [
149
+ /* @__PURE__ */ j("div", {
150
+ className: "flex items-start gap-4",
151
+ children: [/* @__PURE__ */ A(r, {
152
+ fallback: Q.name.slice(0, 2).toUpperCase(),
153
+ size: "lg"
154
+ }), /* @__PURE__ */ j("div", {
155
+ className: "flex-1 space-y-4",
156
+ children: [/* @__PURE__ */ j("div", { children: [/* @__PURE__ */ A("h2", {
157
+ className: "text-xl font-semibold text-text-primary",
158
+ children: Q.name
159
+ }), /* @__PURE__ */ j("p", {
160
+ className: "text-sm text-text-secondary",
161
+ children: ["@", Q.slug]
162
+ })] }), /* @__PURE__ */ j("div", {
163
+ className: "flex flex-wrap items-center gap-4",
164
+ children: [/* @__PURE__ */ A(d, { status: Q.status }), Q.plan && /* @__PURE__ */ A("span", {
165
+ className: "rounded-md bg-action-primary-bg/10 px-2 py-1 text-xs font-medium text-primary",
166
+ children: Q.plan
167
+ })]
168
+ })]
169
+ })]
170
+ }),
171
+ /* @__PURE__ */ A(l, { className: "my-6" }),
172
+ /* @__PURE__ */ j("div", {
173
+ className: "grid gap-4 sm:grid-cols-2",
174
+ children: [
175
+ Q.ownerEmail && /* @__PURE__ */ j("div", {
176
+ className: "flex items-center gap-3",
177
+ children: [/* @__PURE__ */ A(ne, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ j("div", { children: [/* @__PURE__ */ A("p", {
178
+ className: "text-xs text-text-secondary",
179
+ children: G("admin.tenantDetail.overview.ownerEmail", "Owner Email")
180
+ }), /* @__PURE__ */ A("p", {
181
+ className: "text-sm font-medium",
182
+ children: Q.ownerEmail
183
+ })] })]
184
+ }),
185
+ Q.domain && /* @__PURE__ */ j("div", {
186
+ className: "flex items-center gap-3",
187
+ children: [/* @__PURE__ */ A(te, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ j("div", { children: [/* @__PURE__ */ A("p", {
188
+ className: "text-xs text-text-secondary",
189
+ children: G("admin.tenantDetail.overview.domain", "Domain")
190
+ }), /* @__PURE__ */ A("p", {
191
+ className: "text-sm font-medium",
192
+ children: Q.domain
193
+ })] })]
194
+ }),
195
+ /* @__PURE__ */ j("div", {
196
+ className: "flex items-center gap-3",
197
+ children: [/* @__PURE__ */ A(T, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ j("div", { children: [/* @__PURE__ */ A("p", {
198
+ className: "text-xs text-text-secondary",
199
+ children: G("admin.tenantDetail.overview.created", "Created")
200
+ }), /* @__PURE__ */ A("p", {
201
+ className: "text-sm font-medium",
202
+ children: f(Q.createdAt)
203
+ })] })]
204
+ }),
205
+ /* @__PURE__ */ j("div", {
206
+ className: "flex items-center gap-3",
207
+ children: [/* @__PURE__ */ A(T, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ j("div", { children: [/* @__PURE__ */ A("p", {
208
+ className: "text-xs text-text-secondary",
209
+ children: G("admin.tenantDetail.overview.lastUpdated", "Last Updated")
210
+ }), /* @__PURE__ */ A("p", {
211
+ className: "text-sm font-medium",
212
+ children: f(Q.updatedAt)
213
+ })] })]
214
+ })
215
+ ]
216
+ })
217
+ ] })]
218
+ })
136
219
  }),
137
- /* @__PURE__ */ j(l, { className: "my-6" }),
138
- /* @__PURE__ */ M("div", {
220
+ $.length > 0 && /* @__PURE__ */ j(a, { children: [/* @__PURE__ */ A(s, { children: /* @__PURE__ */ A(c, {
221
+ className: "text-lg",
222
+ children: G("admin.tenantDetail.workspaces.title", "Workspaces ({{count}})", { count: $.length })
223
+ }) }), /* @__PURE__ */ A(o, { children: /* @__PURE__ */ A("div", {
224
+ className: "space-y-2",
225
+ children: $.map((e) => /* @__PURE__ */ j("div", {
226
+ className: "flex items-center justify-between rounded-lg border border-border-subtle p-3",
227
+ children: [/* @__PURE__ */ A("span", {
228
+ className: "text-sm font-medium",
229
+ children: e.name
230
+ }), /* @__PURE__ */ A("span", {
231
+ className: "text-xs text-text-secondary capitalize",
232
+ children: e.status?.toLowerCase()
233
+ })]
234
+ }, e.id))
235
+ }) })] }),
236
+ Q.settings && /* @__PURE__ */ j(a, { children: [/* @__PURE__ */ A(s, { children: /* @__PURE__ */ A(c, {
237
+ className: "text-lg",
238
+ children: G("admin.tenantDetail.settings.title", "Settings")
239
+ }) }), /* @__PURE__ */ A(o, { children: /* @__PURE__ */ j("div", {
139
240
  className: "grid gap-4 sm:grid-cols-2",
140
241
  children: [
141
- Q.ownerEmail && /* @__PURE__ */ M("div", {
142
- className: "flex items-center gap-3",
143
- children: [/* @__PURE__ */ j(te, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ M("div", { children: [/* @__PURE__ */ j("p", {
144
- className: "text-xs text-text-secondary",
145
- children: U("admin.tenantDetail.overview.ownerEmail", "Owner Email")
146
- }), /* @__PURE__ */ j("p", {
147
- className: "text-sm font-medium",
148
- children: Q.ownerEmail
149
- })] })]
242
+ /* @__PURE__ */ j("div", {
243
+ className: "flex items-center justify-between rounded-lg border border-border-subtle p-3",
244
+ children: [/* @__PURE__ */ A("span", {
245
+ className: "text-sm",
246
+ children: G("admin.tenantDetail.settings.allowSignup", "Allow Signup")
247
+ }), /* @__PURE__ */ A("span", {
248
+ className: `text-sm font-medium ${Q.settings?.allowSignup ? "text-status-success-text" : "text-text-secondary"}`,
249
+ children: Q.settings?.allowSignup ? G("admin.tenantDetail.settings.enabled", "Enabled") : G("admin.tenantDetail.settings.disabled", "Disabled")
250
+ })]
150
251
  }),
151
- Q.domain && /* @__PURE__ */ M("div", {
152
- className: "flex items-center gap-3",
153
- children: [/* @__PURE__ */ j(D, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ M("div", { children: [/* @__PURE__ */ j("p", {
154
- className: "text-xs text-text-secondary",
155
- children: U("admin.tenantDetail.overview.domain", "Domain")
156
- }), /* @__PURE__ */ j("p", {
157
- className: "text-sm font-medium",
158
- children: Q.domain
159
- })] })]
252
+ /* @__PURE__ */ j("div", {
253
+ className: "flex items-center justify-between rounded-lg border border-border-subtle p-3",
254
+ children: [/* @__PURE__ */ A("span", {
255
+ className: "text-sm",
256
+ children: G("admin.tenantDetail.settings.sso", "SSO")
257
+ }), /* @__PURE__ */ A("span", {
258
+ className: `text-sm font-medium ${Q.settings?.ssoEnabled ? "text-status-success-text" : "text-text-secondary"}`,
259
+ children: Q.settings?.ssoEnabled ? G("admin.tenantDetail.settings.enabled", "Enabled") : G("admin.tenantDetail.settings.disabled", "Disabled")
260
+ })]
160
261
  }),
161
- /* @__PURE__ */ M("div", {
162
- className: "flex items-center gap-3",
163
- children: [/* @__PURE__ */ j(T, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ M("div", { children: [/* @__PURE__ */ j("p", {
164
- className: "text-xs text-text-secondary",
165
- children: U("admin.tenantDetail.overview.created", "Created")
166
- }), /* @__PURE__ */ j("p", {
167
- className: "text-sm font-medium",
168
- children: f(Q.createdAt)
169
- })] })]
262
+ /* @__PURE__ */ j("div", {
263
+ className: "flex items-center justify-between rounded-lg border border-border-subtle p-3",
264
+ children: [/* @__PURE__ */ A("span", {
265
+ className: "text-sm",
266
+ children: G("admin.tenantDetail.settings.mfaRequired", "MFA Required")
267
+ }), /* @__PURE__ */ A("span", {
268
+ className: `text-sm font-medium ${Q.settings?.mfaRequired ? "text-status-success-text" : "text-text-secondary"}`,
269
+ children: Q.settings?.mfaRequired ? G("admin.tenantDetail.settings.yes", "Yes") : G("admin.tenantDetail.settings.no", "No")
270
+ })]
170
271
  }),
171
- /* @__PURE__ */ M("div", {
172
- className: "flex items-center gap-3",
173
- children: [/* @__PURE__ */ j(T, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ M("div", { children: [/* @__PURE__ */ j("p", {
174
- className: "text-xs text-text-secondary",
175
- children: U("admin.tenantDetail.overview.lastUpdated", "Last Updated")
176
- }), /* @__PURE__ */ j("p", {
272
+ /* @__PURE__ */ j("div", {
273
+ className: "flex items-center justify-between rounded-lg border border-border-subtle p-3",
274
+ children: [/* @__PURE__ */ A("span", {
275
+ className: "text-sm",
276
+ children: G("admin.tenantDetail.settings.dataRetention", "Data Retention")
277
+ }), /* @__PURE__ */ A("span", {
177
278
  className: "text-sm font-medium",
178
- children: f(Q.updatedAt)
179
- })] })]
279
+ children: G("admin.tenantDetail.settings.dataRetentionDays", "{{days}} days", { days: Q.settings?.dataRetentionDays ?? 0 })
280
+ })]
180
281
  })
181
282
  ]
283
+ }) })] }),
284
+ /* @__PURE__ */ A("div", {
285
+ id: "tenant-sso",
286
+ children: /* @__PURE__ */ A(x, {
287
+ tenantId: Q.id,
288
+ canManage: R
289
+ })
290
+ }),
291
+ /* @__PURE__ */ A("div", {
292
+ id: "tenant-members",
293
+ children: /* @__PURE__ */ A(b, {
294
+ tenantId: Q.id,
295
+ tenantType: Q.type ?? "",
296
+ canManage: R
297
+ })
182
298
  })
183
- ] })] }),
184
- $.length > 0 && /* @__PURE__ */ M(a, { children: [/* @__PURE__ */ j(s, { children: /* @__PURE__ */ j(c, {
299
+ ]
300
+ }), /* @__PURE__ */ A("div", {
301
+ className: "space-y-6",
302
+ children: /* @__PURE__ */ j(a, { children: [/* @__PURE__ */ A(s, { children: /* @__PURE__ */ A(c, {
185
303
  className: "text-lg",
186
- children: U("admin.tenantDetail.workspaces.title", "Workspaces ({{count}})", { count: $.length })
187
- }) }), /* @__PURE__ */ j(o, { children: /* @__PURE__ */ j("div", {
304
+ children: G("admin.tenantDetail.actions.title", "Actions")
305
+ }) }), /* @__PURE__ */ j(o, {
188
306
  className: "space-y-2",
189
- children: $.map((e) => /* @__PURE__ */ M("div", {
190
- className: "flex items-center justify-between rounded-lg border border-border-subtle p-3",
191
- children: [/* @__PURE__ */ j("span", {
192
- className: "text-sm font-medium",
193
- children: e.name
194
- }), /* @__PURE__ */ j("span", {
195
- className: "text-xs text-text-secondary capitalize",
196
- children: e.status?.toLowerCase()
197
- })]
198
- }, e.id))
199
- }) })] }),
200
- Q.settings && /* @__PURE__ */ M(a, { children: [/* @__PURE__ */ j(s, { children: /* @__PURE__ */ j(c, {
201
- className: "text-lg",
202
- children: U("admin.tenantDetail.settings.title", "Settings")
203
- }) }), /* @__PURE__ */ j(o, { children: /* @__PURE__ */ M("div", {
204
- className: "grid gap-4 sm:grid-cols-2",
205
- children: [
206
- /* @__PURE__ */ M("div", {
207
- className: "flex items-center justify-between rounded-lg border border-border-subtle p-3",
208
- children: [/* @__PURE__ */ j("span", {
209
- className: "text-sm",
210
- children: U("admin.tenantDetail.settings.allowSignup", "Allow Signup")
211
- }), /* @__PURE__ */ j("span", {
212
- className: `text-sm font-medium ${Q.settings?.allowSignup ? "text-success" : "text-text-secondary"}`,
213
- children: Q.settings?.allowSignup ? U("admin.tenantDetail.settings.enabled", "Enabled") : U("admin.tenantDetail.settings.disabled", "Disabled")
214
- })]
215
- }),
216
- /* @__PURE__ */ M("div", {
217
- className: "flex items-center justify-between rounded-lg border border-border-subtle p-3",
218
- children: [/* @__PURE__ */ j("span", {
219
- className: "text-sm",
220
- children: U("admin.tenantDetail.settings.sso", "SSO")
221
- }), /* @__PURE__ */ j("span", {
222
- className: `text-sm font-medium ${Q.settings?.ssoEnabled ? "text-success" : "text-text-secondary"}`,
223
- children: Q.settings?.ssoEnabled ? U("admin.tenantDetail.settings.enabled", "Enabled") : U("admin.tenantDetail.settings.disabled", "Disabled")
224
- })]
225
- }),
226
- /* @__PURE__ */ M("div", {
227
- className: "flex items-center justify-between rounded-lg border border-border-subtle p-3",
228
- children: [/* @__PURE__ */ j("span", {
229
- className: "text-sm",
230
- children: U("admin.tenantDetail.settings.mfaRequired", "MFA Required")
231
- }), /* @__PURE__ */ j("span", {
232
- className: `text-sm font-medium ${Q.settings?.mfaRequired ? "text-success" : "text-text-secondary"}`,
233
- children: Q.settings?.mfaRequired ? U("admin.tenantDetail.settings.yes", "Yes") : U("admin.tenantDetail.settings.no", "No")
234
- })]
235
- }),
236
- /* @__PURE__ */ M("div", {
237
- className: "flex items-center justify-between rounded-lg border border-border-subtle p-3",
238
- children: [/* @__PURE__ */ j("span", {
239
- className: "text-sm",
240
- children: U("admin.tenantDetail.settings.dataRetention", "Data Retention")
241
- }), /* @__PURE__ */ j("span", {
242
- className: "text-sm font-medium",
243
- children: U("admin.tenantDetail.settings.dataRetentionDays", "{{days}} days", { days: Q.settings?.dataRetentionDays ?? 0 })
244
- })]
245
- })
246
- ]
247
- }) })] }),
248
- /* @__PURE__ */ j(x, {
249
- tenantId: Q.id,
250
- canManage: I
251
- }),
252
- /* @__PURE__ */ j(b, {
253
- tenantId: Q.id,
254
- tenantType: Q.type ?? "",
255
- canManage: I
256
- })
257
- ]
258
- }), /* @__PURE__ */ j("div", {
259
- className: "space-y-6",
260
- children: /* @__PURE__ */ M(a, { children: [/* @__PURE__ */ j(s, { children: /* @__PURE__ */ j(c, {
261
- className: "text-lg",
262
- children: U("admin.tenantDetail.actions.title", "Actions")
263
- }) }), /* @__PURE__ */ M(o, {
264
- className: "space-y-2",
265
- children: [/* @__PURE__ */ M(i, {
266
- variant: "outline",
267
- className: "w-full justify-start",
268
- onClick: () => z(m(B, `users?tenantId=${Q.id}`)),
269
- children: [/* @__PURE__ */ j(re, { className: "mr-2 h-4 w-4" }), U("admin.tenantDetail.actions.viewUsers", "View Users")]
270
- }), /* @__PURE__ */ M(i, {
271
- variant: "outline",
272
- className: "w-full justify-start",
273
- onClick: () => z(m(B, `billing/subscriptions?tenantId=${Q.id}`)),
274
- children: [/* @__PURE__ */ j(w, { className: "mr-2 h-4 w-4" }), U("admin.tenantDetail.actions.viewBilling", "View Billing")]
275
- })]
276
- })] })
277
- })]
278
- })
307
+ children: [/* @__PURE__ */ j(i, {
308
+ variant: "outline",
309
+ className: "w-full justify-start",
310
+ onClick: () => V(m(H, `users?tenantId=${Q.id}`)),
311
+ children: [/* @__PURE__ */ A(ie, { className: "mr-2 h-4 w-4" }), G("admin.tenantDetail.actions.viewUsers", "View Users")]
312
+ }), /* @__PURE__ */ j(i, {
313
+ variant: "outline",
314
+ className: "w-full justify-start",
315
+ onClick: () => V(m(H, `billing/subscriptions?tenantId=${Q.id}`)),
316
+ children: [/* @__PURE__ */ A(w, { className: "mr-2 h-4 w-4" }), G("admin.tenantDetail.actions.viewBilling", "View Billing")]
317
+ })]
318
+ })] })
319
+ })]
320
+ })
321
+ ]
279
322
  })
280
323
  });
281
324
  }
282
325
  //#endregion
283
- export { F as TenantDetailPage };
326
+ export { L as TenantDetailPage };
284
327
 
285
328
  //# sourceMappingURL=TenantDetailPage.js.map