@burdenoff/microfe-admin 2026.610.1 → 2026.625.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 (81) 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 +4 -4
  6. package/dist/admin/components/Charts.js.map +1 -1
  7. package/dist/admin/components/ConfirmDialog.js +6 -6
  8. package/dist/admin/components/ConfirmDialog.js.map +1 -1
  9. package/dist/admin/components/DataTable.js +8 -8
  10. package/dist/admin/components/DataTable.js.map +1 -1
  11. package/dist/admin/components/FormSheet.js +7 -7
  12. package/dist/admin/components/FormSheet.js.map +1 -1
  13. package/dist/admin/components/MetricCard.js +43 -40
  14. package/dist/admin/components/MetricCard.js.map +1 -1
  15. package/dist/admin/components/PageLayout.js +28 -22
  16. package/dist/admin/components/PageLayout.js.map +1 -1
  17. package/dist/admin/components/PermissionGuard.js +1 -1
  18. package/dist/admin/components/PermissionGuard.js.map +1 -1
  19. package/dist/admin/components/RowActions.js +2 -2
  20. package/dist/admin/components/RowActions.js.map +1 -1
  21. package/dist/admin/components/TenantMembersPanel.js +15 -15
  22. package/dist/admin/components/TenantMembersPanel.js.map +1 -1
  23. package/dist/admin/components/TenantSsoPanel.js +14 -14
  24. package/dist/admin/components/TenantSsoPanel.js.map +1 -1
  25. package/dist/admin/components/Toast.js +9 -9
  26. package/dist/admin/components/Toast.js.map +1 -1
  27. package/dist/admin/components/forms/SubscriptionForm.js +10 -10
  28. package/dist/admin/components/forms/SubscriptionForm.js.map +1 -1
  29. package/dist/admin/components/forms/TenantForm.js +8 -8
  30. package/dist/admin/components/forms/TenantForm.js.map +1 -1
  31. package/dist/admin/components/forms/TicketForm.js +2 -2
  32. package/dist/admin/components/forms/TicketForm.js.map +1 -1
  33. package/dist/admin/components/forms/UserForm.js +8 -8
  34. package/dist/admin/components/forms/UserForm.js.map +1 -1
  35. package/dist/admin/components/ui.js +58 -51
  36. package/dist/admin/components/ui.js.map +1 -1
  37. package/dist/admin/constants/index.js +8 -8
  38. package/dist/admin/constants/index.js.map +1 -1
  39. package/dist/admin/pages/AuditLogsPage.js +10 -8
  40. package/dist/admin/pages/AuditLogsPage.js.map +1 -1
  41. package/dist/admin/pages/BillingPage.js +51 -43
  42. package/dist/admin/pages/BillingPage.js.map +1 -1
  43. package/dist/admin/pages/CommunicationsPage.js +5 -2
  44. package/dist/admin/pages/CommunicationsPage.js.map +1 -1
  45. package/dist/admin/pages/ContentPagesPage.js +2 -0
  46. package/dist/admin/pages/ContentPagesPage.js.map +1 -1
  47. package/dist/admin/pages/DashboardPage.js +7 -4
  48. package/dist/admin/pages/DashboardPage.js.map +1 -1
  49. package/dist/admin/pages/FeatureFlagsPage.js +6 -4
  50. package/dist/admin/pages/FeatureFlagsPage.js.map +1 -1
  51. package/dist/admin/pages/OrganizationsListPage.js +8 -6
  52. package/dist/admin/pages/OrganizationsListPage.js.map +1 -1
  53. package/dist/admin/pages/ProductsPage.js +10 -7
  54. package/dist/admin/pages/ProductsPage.js.map +1 -1
  55. package/dist/admin/pages/ReferralsPage.js +27 -23
  56. package/dist/admin/pages/ReferralsPage.js.map +1 -1
  57. package/dist/admin/pages/RolesPermissionsPage.js +11 -8
  58. package/dist/admin/pages/RolesPermissionsPage.js.map +1 -1
  59. package/dist/admin/pages/SREPage.js +12 -8
  60. package/dist/admin/pages/SREPage.js.map +1 -1
  61. package/dist/admin/pages/SandboxSettingsPage.js +21 -20
  62. package/dist/admin/pages/SandboxSettingsPage.js.map +1 -1
  63. package/dist/admin/pages/SettingsPage.js +154 -142
  64. package/dist/admin/pages/SettingsPage.js.map +1 -1
  65. package/dist/admin/pages/SyncFailuresPage.js +14 -11
  66. package/dist/admin/pages/SyncFailuresPage.js.map +1 -1
  67. package/dist/admin/pages/TenantDetailPage.js +22 -22
  68. package/dist/admin/pages/TenantDetailPage.js.map +1 -1
  69. package/dist/admin/pages/TenantFormRoutePage.js +2 -2
  70. package/dist/admin/pages/TenantFormRoutePage.js.map +1 -1
  71. package/dist/admin/pages/TenantsListPage.js +7 -5
  72. package/dist/admin/pages/TenantsListPage.js.map +1 -1
  73. package/dist/admin/pages/UsersListPage.js +8 -6
  74. package/dist/admin/pages/UsersListPage.js.map +1 -1
  75. package/dist/admin/pages/WaitlistPage.js +9 -7
  76. package/dist/admin/pages/WaitlistPage.js.map +1 -1
  77. package/dist/admin/pages/WorkflowsPage.js +6 -3
  78. package/dist/admin/pages/WorkflowsPage.js.map +1 -1
  79. package/dist/admin/pages/WorkspacesListPage.js +9 -8
  80. package/dist/admin/pages/WorkspacesListPage.js.map +1 -1
  81. package/package.json +2 -2
@@ -6,245 +6,257 @@ import { PermissionGuard as d } from "../components/PermissionGuard.js";
6
6
  import "../components/index.js";
7
7
  import { Bell as f, Database as p, Globe as m, Key as h, Settings as g, Shield as _ } from "lucide-react";
8
8
  import { jsx as v, jsxs as y } from "react/jsx-runtime";
9
- import { useI18n as b } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
9
+ import { EmphasisPanel as b, ShowMore as x } from "@burdenoff/fe-libs/ui";
10
+ import { useI18n as S } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
10
11
  //#region src/admin/pages/SettingsPage.tsx
11
- function x() {
12
- let { canManageSettings: x, isLoading: S } = e(), { t: C } = b(), w = (e, t, n) => u(C, e, t, n), T = [
12
+ function C() {
13
+ let { canManageSettings: C, isLoading: w } = e(), { t: T } = S(), E = (e, t, n) => u(T, e, t, n), D = [
13
14
  {
14
15
  key: "newTenantSignups",
15
- label: w("admin.settings.notifications.items.newTenantSignups.label", "New tenant signups"),
16
- description: w("admin.settings.notifications.items.newTenantSignups.description", "Get notified when new tenants register")
16
+ label: E("admin.settings.notifications.items.newTenantSignups.label", "New tenant signups"),
17
+ description: E("admin.settings.notifications.items.newTenantSignups.description", "Get notified when new tenants register")
17
18
  },
18
19
  {
19
20
  key: "paymentFailures",
20
- label: w("admin.settings.notifications.items.paymentFailures.label", "Payment failures"),
21
- description: w("admin.settings.notifications.items.paymentFailures.description", "Alert when payments fail")
21
+ label: E("admin.settings.notifications.items.paymentFailures.label", "Payment failures"),
22
+ description: E("admin.settings.notifications.items.paymentFailures.description", "Alert when payments fail")
22
23
  },
23
24
  {
24
25
  key: "criticalTickets",
25
- label: w("admin.settings.notifications.items.criticalTickets.label", "Critical tickets"),
26
- description: w("admin.settings.notifications.items.criticalTickets.description", "Notify on critical support tickets")
26
+ label: E("admin.settings.notifications.items.criticalTickets.label", "Critical tickets"),
27
+ description: E("admin.settings.notifications.items.criticalTickets.description", "Notify on critical support tickets")
27
28
  },
28
29
  {
29
30
  key: "systemAlerts",
30
- label: w("admin.settings.notifications.items.systemAlerts.label", "System alerts"),
31
- description: w("admin.settings.notifications.items.systemAlerts.description", "Infrastructure and health alerts")
31
+ label: E("admin.settings.notifications.items.systemAlerts.label", "System alerts"),
32
+ description: E("admin.settings.notifications.items.systemAlerts.description", "Infrastructure and health alerts")
32
33
  }
33
34
  ];
34
35
  return /* @__PURE__ */ v(d, {
35
- allowed: x,
36
- isLoading: S,
37
- pageTitle: w("admin.settings.title", "Settings"),
38
- denyMessage: w("admin.settings.denyMessage", "You don't have permission to manage platform settings."),
36
+ allowed: C,
37
+ isLoading: w,
38
+ pageTitle: E("admin.settings.title", "Settings"),
39
+ denyMessage: E("admin.settings.denyMessage", "You don't have permission to manage platform settings."),
39
40
  children: /* @__PURE__ */ v(l, {
40
- title: w("admin.settings.title", "Settings"),
41
- description: w("admin.settings.description", "Configure platform settings and preferences"),
41
+ title: E("admin.settings.title", "Settings"),
42
+ gradientWord: E("admin.settings.title", "Settings"),
43
+ description: E("admin.settings.description", "Configure platform settings and preferences"),
42
44
  children: /* @__PURE__ */ y("div", {
43
45
  className: "grid gap-6 lg:grid-cols-3",
44
46
  children: [/* @__PURE__ */ y("div", {
45
47
  className: "space-y-6 lg:col-span-2",
46
48
  children: [
47
- /* @__PURE__ */ y(n, { children: [/* @__PURE__ */ y(a, { children: [/* @__PURE__ */ y("div", {
48
- className: "flex items-center gap-2",
49
- children: [/* @__PURE__ */ v(g, { className: "h-5 w-5 text-muted-foreground" }), /* @__PURE__ */ v(o, {
50
- className: "text-lg",
51
- children: w("admin.settings.general.title", "General")
52
- })]
53
- }), /* @__PURE__ */ v(i, { children: w("admin.settings.general.description", "Basic platform configuration") })] }), /* @__PURE__ */ y(r, {
54
- className: "space-y-4",
55
- children: [
56
- /* @__PURE__ */ y("div", {
57
- className: "grid gap-4 sm:grid-cols-2",
58
- children: [/* @__PURE__ */ y("div", {
59
- className: "space-y-2",
60
- children: [/* @__PURE__ */ v("label", {
61
- className: "text-sm font-medium",
62
- children: w("admin.settings.general.platformName", "Platform Name")
63
- }), /* @__PURE__ */ v(s, { defaultValue: "Burdenoff Admin" })]
64
- }), /* @__PURE__ */ y("div", {
65
- className: "space-y-2",
66
- children: [/* @__PURE__ */ v("label", {
67
- className: "text-sm font-medium",
68
- children: w("admin.settings.general.supportEmail", "Support Email")
69
- }), /* @__PURE__ */ v(s, {
70
- defaultValue: "support@burdenoff.com",
71
- type: "email"
72
- })]
73
- })]
74
- }),
75
- /* @__PURE__ */ y("div", {
76
- className: "space-y-2",
77
- children: [/* @__PURE__ */ v("label", {
78
- className: "text-sm font-medium",
79
- children: w("admin.settings.general.defaultTimezone", "Default Timezone")
80
- }), /* @__PURE__ */ y("select", {
81
- className: "h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm",
82
- children: [
83
- /* @__PURE__ */ v("option", {
84
- value: "UTC",
85
- children: "UTC"
86
- }),
87
- /* @__PURE__ */ v("option", {
88
- value: "America/New_York",
89
- children: w("admin.settings.general.timezones.eastern", "Eastern Time (ET)")
90
- }),
91
- /* @__PURE__ */ v("option", {
92
- value: "America/Los_Angeles",
93
- children: w("admin.settings.general.timezones.pacific", "Pacific Time (PT)")
94
- }),
95
- /* @__PURE__ */ v("option", {
96
- value: "Europe/London",
97
- children: w("admin.settings.general.timezones.london", "London (GMT)")
98
- }),
99
- /* @__PURE__ */ v("option", {
100
- value: "Asia/Kolkata",
101
- children: w("admin.settings.general.timezones.india", "India (IST)")
102
- })
103
- ]
49
+ /* @__PURE__ */ v(b, {
50
+ className: "p-0",
51
+ children: /* @__PURE__ */ y(n, {
52
+ className: "border-0 bg-transparent shadow-none hover:border-0",
53
+ children: [/* @__PURE__ */ y(a, { children: [/* @__PURE__ */ y("div", {
54
+ className: "flex items-center gap-2",
55
+ children: [/* @__PURE__ */ v(g, { className: "h-5 w-5 text-text-secondary" }), /* @__PURE__ */ v(o, {
56
+ className: "text-lg",
57
+ children: E("admin.settings.general.title", "General")
104
58
  })]
105
- }),
106
- /* @__PURE__ */ v("div", {
107
- className: "flex justify-end",
108
- children: /* @__PURE__ */ v(t, { children: w("admin.settings.general.saveChanges", "Save Changes") })
109
- })
110
- ]
111
- })] }),
59
+ }), /* @__PURE__ */ v(i, { children: E("admin.settings.general.description", "Basic platform configuration") })] }), /* @__PURE__ */ y(r, {
60
+ className: "space-y-4",
61
+ children: [
62
+ /* @__PURE__ */ y("div", {
63
+ className: "grid gap-4 sm:grid-cols-2",
64
+ children: [/* @__PURE__ */ y("div", {
65
+ className: "space-y-2",
66
+ children: [/* @__PURE__ */ v("label", {
67
+ className: "text-sm font-medium",
68
+ children: E("admin.settings.general.platformName", "Platform Name")
69
+ }), /* @__PURE__ */ v(s, { defaultValue: "Burdenoff Admin" })]
70
+ }), /* @__PURE__ */ y("div", {
71
+ className: "space-y-2",
72
+ children: [/* @__PURE__ */ v("label", {
73
+ className: "text-sm font-medium",
74
+ children: E("admin.settings.general.supportEmail", "Support Email")
75
+ }), /* @__PURE__ */ v(s, {
76
+ defaultValue: "support@burdenoff.com",
77
+ type: "email"
78
+ })]
79
+ })]
80
+ }),
81
+ /* @__PURE__ */ y("div", {
82
+ className: "space-y-2",
83
+ children: [/* @__PURE__ */ v("label", {
84
+ className: "text-sm font-medium",
85
+ children: E("admin.settings.general.defaultTimezone", "Default Timezone")
86
+ }), /* @__PURE__ */ y("select", {
87
+ className: "h-10 w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm",
88
+ children: [
89
+ /* @__PURE__ */ v("option", {
90
+ value: "UTC",
91
+ children: "UTC"
92
+ }),
93
+ /* @__PURE__ */ v("option", {
94
+ value: "America/New_York",
95
+ children: E("admin.settings.general.timezones.eastern", "Eastern Time (ET)")
96
+ }),
97
+ /* @__PURE__ */ v("option", {
98
+ value: "America/Los_Angeles",
99
+ children: E("admin.settings.general.timezones.pacific", "Pacific Time (PT)")
100
+ }),
101
+ /* @__PURE__ */ v("option", {
102
+ value: "Europe/London",
103
+ children: E("admin.settings.general.timezones.london", "London (GMT)")
104
+ }),
105
+ /* @__PURE__ */ v("option", {
106
+ value: "Asia/Kolkata",
107
+ children: E("admin.settings.general.timezones.india", "India (IST)")
108
+ })
109
+ ]
110
+ })]
111
+ }),
112
+ /* @__PURE__ */ v("div", {
113
+ className: "flex justify-end",
114
+ children: /* @__PURE__ */ v(t, { children: E("admin.settings.general.saveChanges", "Save Changes") })
115
+ })
116
+ ]
117
+ })]
118
+ })
119
+ }),
112
120
  /* @__PURE__ */ y(n, { children: [/* @__PURE__ */ y(a, { children: [/* @__PURE__ */ y("div", {
113
121
  className: "flex items-center gap-2",
114
- children: [/* @__PURE__ */ v(_, { className: "h-5 w-5 text-muted-foreground" }), /* @__PURE__ */ v(o, {
122
+ children: [/* @__PURE__ */ v(_, { className: "h-5 w-5 text-text-secondary" }), /* @__PURE__ */ v(o, {
115
123
  className: "text-lg",
116
- children: w("admin.settings.security.title", "Security")
124
+ children: E("admin.settings.security.title", "Security")
117
125
  })]
118
- }), /* @__PURE__ */ v(i, { children: w("admin.settings.security.description", "Security and authentication settings") })] }), /* @__PURE__ */ y(r, {
126
+ }), /* @__PURE__ */ v(i, { children: E("admin.settings.security.description", "Security and authentication settings") })] }), /* @__PURE__ */ y(r, {
119
127
  className: "space-y-4",
120
128
  children: [
121
129
  /* @__PURE__ */ y("div", {
122
- className: "flex items-center justify-between rounded-lg border border-border p-4",
130
+ className: "flex items-center justify-between rounded-lg border border-border-subtle p-4",
123
131
  children: [/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("div", {
124
132
  className: "font-medium",
125
- children: w("admin.settings.security.twoFactor.title", "Two-Factor Authentication")
133
+ children: E("admin.settings.security.twoFactor.title", "Two-Factor Authentication")
126
134
  }), /* @__PURE__ */ v("div", {
127
- className: "text-sm text-muted-foreground",
128
- children: w("admin.settings.security.twoFactor.description", "Require 2FA for all admin accounts")
135
+ className: "text-sm text-text-secondary",
136
+ children: E("admin.settings.security.twoFactor.description", "Require 2FA for all admin accounts")
129
137
  })] }), /* @__PURE__ */ v(t, {
130
138
  variant: "outline",
131
- children: w("admin.settings.security.twoFactor.configure", "Configure")
139
+ children: E("admin.settings.security.twoFactor.configure", "Configure")
132
140
  })]
133
141
  }),
134
142
  /* @__PURE__ */ y("div", {
135
- className: "flex items-center justify-between rounded-lg border border-border p-4",
143
+ className: "flex items-center justify-between rounded-lg border border-border-subtle p-4",
136
144
  children: [/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("div", {
137
145
  className: "font-medium",
138
- children: w("admin.settings.security.sessionTimeout.title", "Session Timeout")
146
+ children: E("admin.settings.security.sessionTimeout.title", "Session Timeout")
139
147
  }), /* @__PURE__ */ v("div", {
140
- className: "text-sm text-muted-foreground",
141
- children: w("admin.settings.security.sessionTimeout.description", "Auto-logout after inactivity")
148
+ className: "text-sm text-text-secondary",
149
+ children: E("admin.settings.security.sessionTimeout.description", "Auto-logout after inactivity")
142
150
  })] }), /* @__PURE__ */ y("select", {
143
- className: "h-9 rounded-md border border-input bg-background px-3 text-sm",
151
+ className: "h-9 rounded-md border border-border-default bg-bg-surface px-3 text-sm",
144
152
  children: [
145
153
  /* @__PURE__ */ v("option", {
146
154
  value: "15",
147
- children: w("admin.settings.security.sessionTimeout.options.15m", "15 minutes")
155
+ children: E("admin.settings.security.sessionTimeout.options.15m", "15 minutes")
148
156
  }),
149
157
  /* @__PURE__ */ v("option", {
150
158
  value: "30",
151
- children: w("admin.settings.security.sessionTimeout.options.30m", "30 minutes")
159
+ children: E("admin.settings.security.sessionTimeout.options.30m", "30 minutes")
152
160
  }),
153
161
  /* @__PURE__ */ v("option", {
154
162
  value: "60",
155
- children: w("admin.settings.security.sessionTimeout.options.1h", "1 hour")
163
+ children: E("admin.settings.security.sessionTimeout.options.1h", "1 hour")
156
164
  }),
157
165
  /* @__PURE__ */ v("option", {
158
166
  value: "480",
159
- children: w("admin.settings.security.sessionTimeout.options.8h", "8 hours")
167
+ children: E("admin.settings.security.sessionTimeout.options.8h", "8 hours")
160
168
  })
161
169
  ]
162
170
  })]
163
171
  }),
164
172
  /* @__PURE__ */ y("div", {
165
- className: "flex items-center justify-between rounded-lg border border-border p-4",
173
+ className: "flex items-center justify-between rounded-lg border border-border-subtle p-4",
166
174
  children: [/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("div", {
167
175
  className: "font-medium",
168
- children: w("admin.settings.security.ipAllowlist.title", "IP Allowlist")
176
+ children: E("admin.settings.security.ipAllowlist.title", "IP Allowlist")
169
177
  }), /* @__PURE__ */ v("div", {
170
- className: "text-sm text-muted-foreground",
171
- children: w("admin.settings.security.ipAllowlist.description", "Restrict access to specific IPs")
178
+ className: "text-sm text-text-secondary",
179
+ children: E("admin.settings.security.ipAllowlist.description", "Restrict access to specific IPs")
172
180
  })] }), /* @__PURE__ */ v(t, {
173
181
  variant: "outline",
174
- children: w("admin.settings.security.ipAllowlist.manage", "Manage")
182
+ children: E("admin.settings.security.ipAllowlist.manage", "Manage")
175
183
  })]
176
184
  })
177
185
  ]
178
186
  })] }),
179
187
  /* @__PURE__ */ y(n, { children: [/* @__PURE__ */ y(a, { children: [/* @__PURE__ */ y("div", {
180
188
  className: "flex items-center gap-2",
181
- children: [/* @__PURE__ */ v(f, { className: "h-5 w-5 text-muted-foreground" }), /* @__PURE__ */ v(o, {
189
+ children: [/* @__PURE__ */ v(f, { className: "h-5 w-5 text-text-secondary" }), /* @__PURE__ */ v(o, {
182
190
  className: "text-lg",
183
- children: w("admin.settings.notifications.title", "Notifications")
191
+ children: E("admin.settings.notifications.title", "Notifications")
184
192
  })]
185
- }), /* @__PURE__ */ v(i, { children: w("admin.settings.notifications.description", "Configure notification preferences") })] }), /* @__PURE__ */ v(r, {
186
- className: "space-y-4",
187
- children: T.map((e) => /* @__PURE__ */ y("div", {
188
- className: "flex items-center justify-between rounded-lg border border-border p-4",
189
- children: [/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("div", {
190
- className: "font-medium",
191
- children: e.label
192
- }), /* @__PURE__ */ v("div", {
193
- className: "text-sm text-muted-foreground",
194
- children: e.description
195
- })] }), /* @__PURE__ */ y("label", {
196
- className: "relative inline-flex cursor-pointer items-center",
197
- children: [/* @__PURE__ */ v("input", {
198
- type: "checkbox",
199
- defaultChecked: !0,
200
- className: "peer sr-only"
201
- }), /* @__PURE__ */ v("div", { className: "peer h-6 w-11 rounded-full bg-muted after:absolute after:left-[2px] after:top-0.5 after:h-5 after:w-5 after:rounded-full after:bg-background after:transition-all peer-checked:bg-primary peer-checked:after:translate-x-full peer-focus:ring-2 peer-focus:ring-ring" })]
202
- })]
203
- }, e.key))
204
- })] })
193
+ }), /* @__PURE__ */ v(i, { children: E("admin.settings.notifications.description", "Configure notification preferences") })] }), /* @__PURE__ */ v(r, { children: /* @__PURE__ */ v(x, {
194
+ collapsedHeight: 180,
195
+ label: "More notification settings",
196
+ children: /* @__PURE__ */ v("div", {
197
+ className: "space-y-4",
198
+ children: D.map((e) => /* @__PURE__ */ y("div", {
199
+ className: "flex items-center justify-between rounded-lg border border-border-seam p-4",
200
+ children: [/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("div", {
201
+ className: "font-medium",
202
+ children: e.label
203
+ }), /* @__PURE__ */ v("div", {
204
+ className: "text-sm text-text-secondary",
205
+ children: e.description
206
+ })] }), /* @__PURE__ */ y("label", {
207
+ className: "relative inline-flex cursor-pointer items-center",
208
+ children: [/* @__PURE__ */ v("input", {
209
+ type: "checkbox",
210
+ defaultChecked: !0,
211
+ className: "peer sr-only"
212
+ }), /* @__PURE__ */ v("div", { className: "peer h-6 w-11 rounded-full bg-bg-sunken after:absolute after:left-[2px] after:top-0.5 after:h-5 after:w-5 after:rounded-full after:bg-bg-surface after:transition-all peer-checked:bg-action-primary-bg peer-checked:after:translate-x-full peer-focus:ring-2 peer-focus:ring-[var(--color-focus-ring)]" })]
213
+ })]
214
+ }, e.key))
215
+ })
216
+ }) })] })
205
217
  ]
206
218
  }), /* @__PURE__ */ y("div", {
207
219
  className: "space-y-6",
208
220
  children: [
209
221
  /* @__PURE__ */ y(n, { children: [/* @__PURE__ */ v(a, { children: /* @__PURE__ */ y("div", {
210
222
  className: "flex items-center gap-2",
211
- children: [/* @__PURE__ */ v(h, { className: "h-5 w-5 text-muted-foreground" }), /* @__PURE__ */ v(o, {
223
+ children: [/* @__PURE__ */ v(h, { className: "h-5 w-5 text-text-secondary" }), /* @__PURE__ */ v(o, {
212
224
  className: "text-lg",
213
- children: w("admin.settings.apiKeys.title", "API Keys")
225
+ children: E("admin.settings.apiKeys.title", "API Keys")
214
226
  })]
215
227
  }) }), /* @__PURE__ */ y(r, {
216
228
  className: "space-y-3",
217
229
  children: [/* @__PURE__ */ v("p", {
218
- className: "text-sm text-muted-foreground",
219
- children: w("admin.settings.apiKeys.description", "Manage API keys for programmatic access to the admin API.")
230
+ className: "text-sm text-text-secondary",
231
+ children: E("admin.settings.apiKeys.description", "Manage API keys for programmatic access to the admin API.")
220
232
  }), /* @__PURE__ */ v(t, {
221
233
  variant: "outline",
222
234
  className: "w-full",
223
- children: w("admin.settings.apiKeys.manage", "Manage API Keys")
235
+ children: E("admin.settings.apiKeys.manage", "Manage API Keys")
224
236
  })]
225
237
  })] }),
226
238
  /* @__PURE__ */ y(n, { children: [/* @__PURE__ */ v(a, { children: /* @__PURE__ */ y("div", {
227
239
  className: "flex items-center gap-2",
228
- children: [/* @__PURE__ */ v(m, { className: "h-5 w-5 text-muted-foreground" }), /* @__PURE__ */ v(o, {
240
+ children: [/* @__PURE__ */ v(m, { className: "h-5 w-5 text-text-secondary" }), /* @__PURE__ */ v(o, {
229
241
  className: "text-lg",
230
- children: w("admin.settings.integrations.title", "Integrations")
242
+ children: E("admin.settings.integrations.title", "Integrations")
231
243
  })]
232
244
  }) }), /* @__PURE__ */ y(r, {
233
245
  className: "space-y-3",
234
246
  children: [/* @__PURE__ */ v("p", {
235
- className: "text-sm text-muted-foreground",
236
- children: w("admin.settings.integrations.description", "Connect third-party services and tools.")
247
+ className: "text-sm text-text-secondary",
248
+ children: E("admin.settings.integrations.description", "Connect third-party services and tools.")
237
249
  }), /* @__PURE__ */ v(t, {
238
250
  variant: "outline",
239
251
  className: "w-full",
240
- children: w("admin.settings.integrations.view", "View Integrations")
252
+ children: E("admin.settings.integrations.view", "View Integrations")
241
253
  })]
242
254
  })] }),
243
255
  /* @__PURE__ */ y(n, { children: [/* @__PURE__ */ v(a, { children: /* @__PURE__ */ y("div", {
244
256
  className: "flex items-center gap-2",
245
- children: [/* @__PURE__ */ v(p, { className: "h-5 w-5 text-muted-foreground" }), /* @__PURE__ */ v(o, {
257
+ children: [/* @__PURE__ */ v(p, { className: "h-5 w-5 text-text-secondary" }), /* @__PURE__ */ v(o, {
246
258
  className: "text-lg",
247
- children: w("admin.settings.data.title", "Data")
259
+ children: E("admin.settings.data.title", "Data")
248
260
  })]
249
261
  }) }), /* @__PURE__ */ y(r, {
250
262
  className: "space-y-3",
@@ -252,18 +264,18 @@ function x() {
252
264
  /* @__PURE__ */ v(t, {
253
265
  variant: "outline",
254
266
  className: "w-full justify-start",
255
- children: w("admin.settings.data.export", "Export Data")
267
+ children: E("admin.settings.data.export", "Export Data")
256
268
  }),
257
269
  /* @__PURE__ */ v(t, {
258
270
  variant: "outline",
259
271
  className: "w-full justify-start",
260
- children: w("admin.settings.data.auditLogs", "Audit Logs")
272
+ children: E("admin.settings.data.auditLogs", "Audit Logs")
261
273
  }),
262
274
  /* @__PURE__ */ v(c, {}),
263
275
  /* @__PURE__ */ v(t, {
264
276
  variant: "outline",
265
- className: "w-full justify-start text-destructive",
266
- children: w("admin.settings.data.dangerZone", "Danger Zone")
277
+ className: "w-full justify-start text-status-error-text",
278
+ children: E("admin.settings.data.dangerZone", "Danger Zone")
267
279
  })
268
280
  ]
269
281
  })] })
@@ -274,6 +286,6 @@ function x() {
274
286
  });
275
287
  }
276
288
  //#endregion
277
- export { x as SettingsPage };
289
+ export { C as SettingsPage };
278
290
 
279
291
  //# sourceMappingURL=SettingsPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SettingsPage.js","names":[],"sources":["../../../src/admin/pages/SettingsPage.tsx"],"sourcesContent":["import { Settings, Shield, Key, Bell, Globe, Database } from 'lucide-react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport {\n PageLayout,\n Card,\n CardHeader,\n CardTitle,\n CardContent,\n CardDescription,\n Button,\n Input,\n Separator,\n PermissionGuard,\n} from '../components';\nimport { useAdminPermissions } from '../hooks/useAdminPermissions';\nimport { tWithFallback } from '../utils/i18n';\n\n/**\n * Settings page\n */\nexport function SettingsPage() {\n const { canManageSettings, isLoading: permissionsLoading } = useAdminPermissions();\n const { t } = useI18n();\n const tr = (key: string, fallback: string, params?: Record<string, string | number>): string =>\n tWithFallback(t, key, fallback, params);\n\n const notificationSettings = [\n {\n key: 'newTenantSignups',\n label: tr('admin.settings.notifications.items.newTenantSignups.label', 'New tenant signups'),\n description: tr(\n 'admin.settings.notifications.items.newTenantSignups.description',\n 'Get notified when new tenants register'\n ),\n },\n {\n key: 'paymentFailures',\n label: tr('admin.settings.notifications.items.paymentFailures.label', 'Payment failures'),\n description: tr(\n 'admin.settings.notifications.items.paymentFailures.description',\n 'Alert when payments fail'\n ),\n },\n {\n key: 'criticalTickets',\n label: tr('admin.settings.notifications.items.criticalTickets.label', 'Critical tickets'),\n description: tr(\n 'admin.settings.notifications.items.criticalTickets.description',\n 'Notify on critical support tickets'\n ),\n },\n {\n key: 'systemAlerts',\n label: tr('admin.settings.notifications.items.systemAlerts.label', 'System alerts'),\n description: tr(\n 'admin.settings.notifications.items.systemAlerts.description',\n 'Infrastructure and health alerts'\n ),\n },\n ];\n\n return (\n <PermissionGuard\n allowed={canManageSettings}\n isLoading={permissionsLoading}\n pageTitle={tr('admin.settings.title', 'Settings')}\n denyMessage={tr(\n 'admin.settings.denyMessage',\n \"You don't have permission to manage platform settings.\"\n )}\n >\n <PageLayout\n title={tr('admin.settings.title', 'Settings')}\n description={tr(\n 'admin.settings.description',\n 'Configure platform settings and preferences'\n )}\n >\n <div className=\"grid gap-6 lg:grid-cols-3\">\n {/* Main settings */}\n <div className=\"space-y-6 lg:col-span-2\">\n {/* General */}\n <Card>\n <CardHeader>\n <div className=\"flex items-center gap-2\">\n <Settings className=\"h-5 w-5 text-muted-foreground\" />\n <CardTitle className=\"text-lg\">\n {tr('admin.settings.general.title', 'General')}\n </CardTitle>\n </div>\n <CardDescription>\n {tr('admin.settings.general.description', 'Basic platform configuration')}\n </CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium\">\n {tr('admin.settings.general.platformName', 'Platform Name')}\n </label>\n <Input defaultValue=\"Burdenoff Admin\" />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium\">\n {tr('admin.settings.general.supportEmail', 'Support Email')}\n </label>\n <Input defaultValue=\"support@burdenoff.com\" type=\"email\" />\n </div>\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium\">\n {tr('admin.settings.general.defaultTimezone', 'Default Timezone')}\n </label>\n <select className=\"h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm\">\n <option value=\"UTC\">UTC</option>\n <option value=\"America/New_York\">\n {tr('admin.settings.general.timezones.eastern', 'Eastern Time (ET)')}\n </option>\n <option value=\"America/Los_Angeles\">\n {tr('admin.settings.general.timezones.pacific', 'Pacific Time (PT)')}\n </option>\n <option value=\"Europe/London\">\n {tr('admin.settings.general.timezones.london', 'London (GMT)')}\n </option>\n <option value=\"Asia/Kolkata\">\n {tr('admin.settings.general.timezones.india', 'India (IST)')}\n </option>\n </select>\n </div>\n <div className=\"flex justify-end\">\n <Button>{tr('admin.settings.general.saveChanges', 'Save Changes')}</Button>\n </div>\n </CardContent>\n </Card>\n\n {/* Security */}\n <Card>\n <CardHeader>\n <div className=\"flex items-center gap-2\">\n <Shield className=\"h-5 w-5 text-muted-foreground\" />\n <CardTitle className=\"text-lg\">\n {tr('admin.settings.security.title', 'Security')}\n </CardTitle>\n </div>\n <CardDescription>\n {tr(\n 'admin.settings.security.description',\n 'Security and authentication settings'\n )}\n </CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"flex items-center justify-between rounded-lg border border-border p-4\">\n <div>\n <div className=\"font-medium\">\n {tr('admin.settings.security.twoFactor.title', 'Two-Factor Authentication')}\n </div>\n <div className=\"text-sm text-muted-foreground\">\n {tr(\n 'admin.settings.security.twoFactor.description',\n 'Require 2FA for all admin accounts'\n )}\n </div>\n </div>\n <Button variant=\"outline\">\n {tr('admin.settings.security.twoFactor.configure', 'Configure')}\n </Button>\n </div>\n <div className=\"flex items-center justify-between rounded-lg border border-border p-4\">\n <div>\n <div className=\"font-medium\">\n {tr('admin.settings.security.sessionTimeout.title', 'Session Timeout')}\n </div>\n <div className=\"text-sm text-muted-foreground\">\n {tr(\n 'admin.settings.security.sessionTimeout.description',\n 'Auto-logout after inactivity'\n )}\n </div>\n </div>\n <select className=\"h-9 rounded-md border border-input bg-background px-3 text-sm\">\n <option value=\"15\">\n {tr('admin.settings.security.sessionTimeout.options.15m', '15 minutes')}\n </option>\n <option value=\"30\">\n {tr('admin.settings.security.sessionTimeout.options.30m', '30 minutes')}\n </option>\n <option value=\"60\">\n {tr('admin.settings.security.sessionTimeout.options.1h', '1 hour')}\n </option>\n <option value=\"480\">\n {tr('admin.settings.security.sessionTimeout.options.8h', '8 hours')}\n </option>\n </select>\n </div>\n <div className=\"flex items-center justify-between rounded-lg border border-border p-4\">\n <div>\n <div className=\"font-medium\">\n {tr('admin.settings.security.ipAllowlist.title', 'IP Allowlist')}\n </div>\n <div className=\"text-sm text-muted-foreground\">\n {tr(\n 'admin.settings.security.ipAllowlist.description',\n 'Restrict access to specific IPs'\n )}\n </div>\n </div>\n <Button variant=\"outline\">\n {tr('admin.settings.security.ipAllowlist.manage', 'Manage')}\n </Button>\n </div>\n </CardContent>\n </Card>\n\n {/* Notifications */}\n <Card>\n <CardHeader>\n <div className=\"flex items-center gap-2\">\n <Bell className=\"h-5 w-5 text-muted-foreground\" />\n <CardTitle className=\"text-lg\">\n {tr('admin.settings.notifications.title', 'Notifications')}\n </CardTitle>\n </div>\n <CardDescription>\n {tr(\n 'admin.settings.notifications.description',\n 'Configure notification preferences'\n )}\n </CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {notificationSettings.map((item) => (\n <div\n key={item.key}\n className=\"flex items-center justify-between rounded-lg border border-border p-4\"\n >\n <div>\n <div className=\"font-medium\">{item.label}</div>\n <div className=\"text-sm text-muted-foreground\">{item.description}</div>\n </div>\n <label className=\"relative inline-flex cursor-pointer items-center\">\n <input type=\"checkbox\" defaultChecked className=\"peer sr-only\" />\n <div className=\"peer h-6 w-11 rounded-full bg-muted after:absolute after:left-[2px] after:top-0.5 after:h-5 after:w-5 after:rounded-full after:bg-background after:transition-all peer-checked:bg-primary peer-checked:after:translate-x-full peer-focus:ring-2 peer-focus:ring-ring\" />\n </label>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n\n {/* Sidebar */}\n <div className=\"space-y-6\">\n {/* API Keys */}\n <Card>\n <CardHeader>\n <div className=\"flex items-center gap-2\">\n <Key className=\"h-5 w-5 text-muted-foreground\" />\n <CardTitle className=\"text-lg\">\n {tr('admin.settings.apiKeys.title', 'API Keys')}\n </CardTitle>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n <p className=\"text-sm text-muted-foreground\">\n {tr(\n 'admin.settings.apiKeys.description',\n 'Manage API keys for programmatic access to the admin API.'\n )}\n </p>\n <Button variant=\"outline\" className=\"w-full\">\n {tr('admin.settings.apiKeys.manage', 'Manage API Keys')}\n </Button>\n </CardContent>\n </Card>\n\n {/* Integrations */}\n <Card>\n <CardHeader>\n <div className=\"flex items-center gap-2\">\n <Globe className=\"h-5 w-5 text-muted-foreground\" />\n <CardTitle className=\"text-lg\">\n {tr('admin.settings.integrations.title', 'Integrations')}\n </CardTitle>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n <p className=\"text-sm text-muted-foreground\">\n {tr(\n 'admin.settings.integrations.description',\n 'Connect third-party services and tools.'\n )}\n </p>\n <Button variant=\"outline\" className=\"w-full\">\n {tr('admin.settings.integrations.view', 'View Integrations')}\n </Button>\n </CardContent>\n </Card>\n\n {/* Data Management */}\n <Card>\n <CardHeader>\n <div className=\"flex items-center gap-2\">\n <Database className=\"h-5 w-5 text-muted-foreground\" />\n <CardTitle className=\"text-lg\">\n {tr('admin.settings.data.title', 'Data')}\n </CardTitle>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n <Button variant=\"outline\" className=\"w-full justify-start\">\n {tr('admin.settings.data.export', 'Export Data')}\n </Button>\n <Button variant=\"outline\" className=\"w-full justify-start\">\n {tr('admin.settings.data.auditLogs', 'Audit Logs')}\n </Button>\n <Separator />\n <Button variant=\"outline\" className=\"w-full justify-start text-destructive\">\n {tr('admin.settings.data.dangerZone', 'Danger Zone')}\n </Button>\n </CardContent>\n </Card>\n </div>\n </div>\n </PageLayout>\n </PermissionGuard>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"SettingsPage.js","names":[],"sources":["../../../src/admin/pages/SettingsPage.tsx"],"sourcesContent":["import { Settings, Shield, Key, Bell, Globe, Database } from 'lucide-react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { EmphasisPanel, ShowMore } from '@burdenoff/fe-libs/ui';\nimport {\n PageLayout,\n Card,\n CardHeader,\n CardTitle,\n CardContent,\n CardDescription,\n Button,\n Input,\n Separator,\n PermissionGuard,\n} from '../components';\nimport { useAdminPermissions } from '../hooks/useAdminPermissions';\nimport { tWithFallback } from '../utils/i18n';\n\n/**\n * Settings page\n */\nexport function SettingsPage() {\n const { canManageSettings, isLoading: permissionsLoading } = useAdminPermissions();\n const { t } = useI18n();\n const tr = (key: string, fallback: string, params?: Record<string, string | number>): string =>\n tWithFallback(t, key, fallback, params);\n\n const notificationSettings = [\n {\n key: 'newTenantSignups',\n label: tr('admin.settings.notifications.items.newTenantSignups.label', 'New tenant signups'),\n description: tr(\n 'admin.settings.notifications.items.newTenantSignups.description',\n 'Get notified when new tenants register'\n ),\n },\n {\n key: 'paymentFailures',\n label: tr('admin.settings.notifications.items.paymentFailures.label', 'Payment failures'),\n description: tr(\n 'admin.settings.notifications.items.paymentFailures.description',\n 'Alert when payments fail'\n ),\n },\n {\n key: 'criticalTickets',\n label: tr('admin.settings.notifications.items.criticalTickets.label', 'Critical tickets'),\n description: tr(\n 'admin.settings.notifications.items.criticalTickets.description',\n 'Notify on critical support tickets'\n ),\n },\n {\n key: 'systemAlerts',\n label: tr('admin.settings.notifications.items.systemAlerts.label', 'System alerts'),\n description: tr(\n 'admin.settings.notifications.items.systemAlerts.description',\n 'Infrastructure and health alerts'\n ),\n },\n ];\n\n return (\n <PermissionGuard\n allowed={canManageSettings}\n isLoading={permissionsLoading}\n pageTitle={tr('admin.settings.title', 'Settings')}\n denyMessage={tr(\n 'admin.settings.denyMessage',\n \"You don't have permission to manage platform settings.\"\n )}\n >\n <PageLayout\n title={tr('admin.settings.title', 'Settings')}\n gradientWord={tr('admin.settings.title', 'Settings')}\n description={tr(\n 'admin.settings.description',\n 'Configure platform settings and preferences'\n )}\n >\n <div className=\"grid gap-6 lg:grid-cols-3\">\n {/* Main settings */}\n <div className=\"space-y-6 lg:col-span-2\">\n {/* General — primary settings zone (emphasis) */}\n <EmphasisPanel className=\"p-0\">\n <Card className=\"border-0 bg-transparent shadow-none hover:border-0\">\n <CardHeader>\n <div className=\"flex items-center gap-2\">\n <Settings className=\"h-5 w-5 text-text-secondary\" />\n <CardTitle className=\"text-lg\">\n {tr('admin.settings.general.title', 'General')}\n </CardTitle>\n </div>\n <CardDescription>\n {tr('admin.settings.general.description', 'Basic platform configuration')}\n </CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium\">\n {tr('admin.settings.general.platformName', 'Platform Name')}\n </label>\n <Input defaultValue=\"Burdenoff Admin\" />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium\">\n {tr('admin.settings.general.supportEmail', 'Support Email')}\n </label>\n <Input defaultValue=\"support@burdenoff.com\" type=\"email\" />\n </div>\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium\">\n {tr('admin.settings.general.defaultTimezone', 'Default Timezone')}\n </label>\n <select className=\"h-10 w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm\">\n <option value=\"UTC\">UTC</option>\n <option value=\"America/New_York\">\n {tr('admin.settings.general.timezones.eastern', 'Eastern Time (ET)')}\n </option>\n <option value=\"America/Los_Angeles\">\n {tr('admin.settings.general.timezones.pacific', 'Pacific Time (PT)')}\n </option>\n <option value=\"Europe/London\">\n {tr('admin.settings.general.timezones.london', 'London (GMT)')}\n </option>\n <option value=\"Asia/Kolkata\">\n {tr('admin.settings.general.timezones.india', 'India (IST)')}\n </option>\n </select>\n </div>\n <div className=\"flex justify-end\">\n <Button>{tr('admin.settings.general.saveChanges', 'Save Changes')}</Button>\n </div>\n </CardContent>\n </Card>\n </EmphasisPanel>\n\n {/* Security */}\n <Card>\n <CardHeader>\n <div className=\"flex items-center gap-2\">\n <Shield className=\"h-5 w-5 text-text-secondary\" />\n <CardTitle className=\"text-lg\">\n {tr('admin.settings.security.title', 'Security')}\n </CardTitle>\n </div>\n <CardDescription>\n {tr(\n 'admin.settings.security.description',\n 'Security and authentication settings'\n )}\n </CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"flex items-center justify-between rounded-lg border border-border-subtle p-4\">\n <div>\n <div className=\"font-medium\">\n {tr('admin.settings.security.twoFactor.title', 'Two-Factor Authentication')}\n </div>\n <div className=\"text-sm text-text-secondary\">\n {tr(\n 'admin.settings.security.twoFactor.description',\n 'Require 2FA for all admin accounts'\n )}\n </div>\n </div>\n <Button variant=\"outline\">\n {tr('admin.settings.security.twoFactor.configure', 'Configure')}\n </Button>\n </div>\n <div className=\"flex items-center justify-between rounded-lg border border-border-subtle p-4\">\n <div>\n <div className=\"font-medium\">\n {tr('admin.settings.security.sessionTimeout.title', 'Session Timeout')}\n </div>\n <div className=\"text-sm text-text-secondary\">\n {tr(\n 'admin.settings.security.sessionTimeout.description',\n 'Auto-logout after inactivity'\n )}\n </div>\n </div>\n <select className=\"h-9 rounded-md border border-border-default bg-bg-surface px-3 text-sm\">\n <option value=\"15\">\n {tr('admin.settings.security.sessionTimeout.options.15m', '15 minutes')}\n </option>\n <option value=\"30\">\n {tr('admin.settings.security.sessionTimeout.options.30m', '30 minutes')}\n </option>\n <option value=\"60\">\n {tr('admin.settings.security.sessionTimeout.options.1h', '1 hour')}\n </option>\n <option value=\"480\">\n {tr('admin.settings.security.sessionTimeout.options.8h', '8 hours')}\n </option>\n </select>\n </div>\n <div className=\"flex items-center justify-between rounded-lg border border-border-subtle p-4\">\n <div>\n <div className=\"font-medium\">\n {tr('admin.settings.security.ipAllowlist.title', 'IP Allowlist')}\n </div>\n <div className=\"text-sm text-text-secondary\">\n {tr(\n 'admin.settings.security.ipAllowlist.description',\n 'Restrict access to specific IPs'\n )}\n </div>\n </div>\n <Button variant=\"outline\">\n {tr('admin.settings.security.ipAllowlist.manage', 'Manage')}\n </Button>\n </div>\n </CardContent>\n </Card>\n\n {/* Notifications */}\n <Card>\n <CardHeader>\n <div className=\"flex items-center gap-2\">\n <Bell className=\"h-5 w-5 text-text-secondary\" />\n <CardTitle className=\"text-lg\">\n {tr('admin.settings.notifications.title', 'Notifications')}\n </CardTitle>\n </div>\n <CardDescription>\n {tr(\n 'admin.settings.notifications.description',\n 'Configure notification preferences'\n )}\n </CardDescription>\n </CardHeader>\n <CardContent>\n <ShowMore collapsedHeight={180} label=\"More notification settings\">\n <div className=\"space-y-4\">\n {notificationSettings.map((item) => (\n <div\n key={item.key}\n className=\"flex items-center justify-between rounded-lg border border-border-seam p-4\"\n >\n <div>\n <div className=\"font-medium\">{item.label}</div>\n <div className=\"text-sm text-text-secondary\">{item.description}</div>\n </div>\n <label className=\"relative inline-flex cursor-pointer items-center\">\n <input type=\"checkbox\" defaultChecked className=\"peer sr-only\" />\n <div className=\"peer h-6 w-11 rounded-full bg-bg-sunken after:absolute after:left-[2px] after:top-0.5 after:h-5 after:w-5 after:rounded-full after:bg-bg-surface after:transition-all peer-checked:bg-action-primary-bg peer-checked:after:translate-x-full peer-focus:ring-2 peer-focus:ring-[var(--color-focus-ring)]\" />\n </label>\n </div>\n ))}\n </div>\n </ShowMore>\n </CardContent>\n </Card>\n </div>\n\n {/* Sidebar */}\n <div className=\"space-y-6\">\n {/* API Keys */}\n <Card>\n <CardHeader>\n <div className=\"flex items-center gap-2\">\n <Key className=\"h-5 w-5 text-text-secondary\" />\n <CardTitle className=\"text-lg\">\n {tr('admin.settings.apiKeys.title', 'API Keys')}\n </CardTitle>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n <p className=\"text-sm text-text-secondary\">\n {tr(\n 'admin.settings.apiKeys.description',\n 'Manage API keys for programmatic access to the admin API.'\n )}\n </p>\n <Button variant=\"outline\" className=\"w-full\">\n {tr('admin.settings.apiKeys.manage', 'Manage API Keys')}\n </Button>\n </CardContent>\n </Card>\n\n {/* Integrations */}\n <Card>\n <CardHeader>\n <div className=\"flex items-center gap-2\">\n <Globe className=\"h-5 w-5 text-text-secondary\" />\n <CardTitle className=\"text-lg\">\n {tr('admin.settings.integrations.title', 'Integrations')}\n </CardTitle>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n <p className=\"text-sm text-text-secondary\">\n {tr(\n 'admin.settings.integrations.description',\n 'Connect third-party services and tools.'\n )}\n </p>\n <Button variant=\"outline\" className=\"w-full\">\n {tr('admin.settings.integrations.view', 'View Integrations')}\n </Button>\n </CardContent>\n </Card>\n\n {/* Data Management */}\n <Card>\n <CardHeader>\n <div className=\"flex items-center gap-2\">\n <Database className=\"h-5 w-5 text-text-secondary\" />\n <CardTitle className=\"text-lg\">\n {tr('admin.settings.data.title', 'Data')}\n </CardTitle>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n <Button variant=\"outline\" className=\"w-full justify-start\">\n {tr('admin.settings.data.export', 'Export Data')}\n </Button>\n <Button variant=\"outline\" className=\"w-full justify-start\">\n {tr('admin.settings.data.auditLogs', 'Audit Logs')}\n </Button>\n <Separator />\n <Button variant=\"outline\" className=\"w-full justify-start text-status-error-text\">\n {tr('admin.settings.data.dangerZone', 'Danger Zone')}\n </Button>\n </CardContent>\n </Card>\n </div>\n </div>\n </PageLayout>\n </PermissionGuard>\n );\n}\n"],"mappings":"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"}