@burdenoff/microfe-assethandler 2026.625.1 → 2026.625.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/dist/assethandler/pages/AiPredictionsPage.js +42 -41
  2. package/dist/assethandler/pages/AiPredictionsPage.js.map +1 -1
  3. package/dist/assethandler/pages/AnalyticsPage.js +538 -534
  4. package/dist/assethandler/pages/AnalyticsPage.js.map +1 -1
  5. package/dist/assethandler/pages/AssetsAssetCategoriesPage.js +135 -125
  6. package/dist/assethandler/pages/AssetsAssetCategoriesPage.js.map +1 -1
  7. package/dist/assethandler/pages/AssetsAssetCheckInOutPage.js +90 -92
  8. package/dist/assethandler/pages/AssetsAssetCheckInOutPage.js.map +1 -1
  9. package/dist/assethandler/pages/AssetsAssetCreatePage.js +131 -124
  10. package/dist/assethandler/pages/AssetsAssetCreatePage.js.map +1 -1
  11. package/dist/assethandler/pages/AssetsAssetDetailPage.js +214 -185
  12. package/dist/assethandler/pages/AssetsAssetDetailPage.js.map +1 -1
  13. package/dist/assethandler/pages/AssetsAssetEditPage.js +168 -156
  14. package/dist/assethandler/pages/AssetsAssetEditPage.js.map +1 -1
  15. package/dist/assethandler/pages/AssetsAssetListPage.js +207 -187
  16. package/dist/assethandler/pages/AssetsAssetListPage.js.map +1 -1
  17. package/dist/assethandler/pages/AssetsAssetTrackingPage.js +82 -71
  18. package/dist/assethandler/pages/AssetsAssetTrackingPage.js.map +1 -1
  19. package/dist/assethandler/pages/AuditTrailPage.js +93 -91
  20. package/dist/assethandler/pages/AuditTrailPage.js.map +1 -1
  21. package/dist/assethandler/pages/CmdbBrowserPage.js +32 -33
  22. package/dist/assethandler/pages/CmdbBrowserPage.js.map +1 -1
  23. package/dist/assethandler/pages/DashboardPage.js +157 -126
  24. package/dist/assethandler/pages/DashboardPage.js.map +1 -1
  25. package/dist/assethandler/pages/DigitalTwinPage.js +25 -26
  26. package/dist/assethandler/pages/DigitalTwinPage.js.map +1 -1
  27. package/dist/assethandler/pages/DiscoveryJobsPage.js +50 -50
  28. package/dist/assethandler/pages/DiscoveryJobsPage.js.map +1 -1
  29. package/dist/assethandler/pages/EsgDashboardPage.js +43 -42
  30. package/dist/assethandler/pages/EsgDashboardPage.js.map +1 -1
  31. package/dist/assethandler/pages/FinanceBudgetDetailPage.js +96 -82
  32. package/dist/assethandler/pages/FinanceBudgetDetailPage.js.map +1 -1
  33. package/dist/assethandler/pages/FinanceFinanceHubPage.js +137 -103
  34. package/dist/assethandler/pages/FinanceFinanceHubPage.js.map +1 -1
  35. package/dist/assethandler/pages/FinanceInvoiceDetailPage.js +77 -66
  36. package/dist/assethandler/pages/FinanceInvoiceDetailPage.js.map +1 -1
  37. package/dist/assethandler/pages/IotDevicesPage.js +34 -35
  38. package/dist/assethandler/pages/IotDevicesPage.js.map +1 -1
  39. package/dist/assethandler/pages/ItilChangeDetailPage.js +236 -199
  40. package/dist/assethandler/pages/ItilChangeDetailPage.js.map +1 -1
  41. package/dist/assethandler/pages/ItilChangeManagementPage.js +66 -64
  42. package/dist/assethandler/pages/ItilChangeManagementPage.js.map +1 -1
  43. package/dist/assethandler/pages/ItilIncidentDetailPage.js +237 -200
  44. package/dist/assethandler/pages/ItilIncidentDetailPage.js.map +1 -1
  45. package/dist/assethandler/pages/ItilIncidentManagementPage.js +99 -97
  46. package/dist/assethandler/pages/ItilIncidentManagementPage.js.map +1 -1
  47. package/dist/assethandler/pages/ItilItilhubPage.js +166 -122
  48. package/dist/assethandler/pages/ItilItilhubPage.js.map +1 -1
  49. package/dist/assethandler/pages/ItilProblemDetailPage.js +193 -156
  50. package/dist/assethandler/pages/ItilProblemDetailPage.js.map +1 -1
  51. package/dist/assethandler/pages/ItilProblemManagementPage.js +63 -61
  52. package/dist/assethandler/pages/ItilProblemManagementPage.js.map +1 -1
  53. package/dist/assethandler/pages/KnowledgeBasePage.js +45 -43
  54. package/dist/assethandler/pages/KnowledgeBasePage.js.map +1 -1
  55. package/dist/assethandler/pages/MaintenanceMaintenanceCalendarPage.js +70 -68
  56. package/dist/assethandler/pages/MaintenanceMaintenanceCalendarPage.js.map +1 -1
  57. package/dist/assethandler/pages/MaintenanceMaintenanceSchedulerPage.js +77 -62
  58. package/dist/assethandler/pages/MaintenanceMaintenanceSchedulerPage.js.map +1 -1
  59. package/dist/assethandler/pages/MarketplaceMarketplaceDetailPage.js +162 -151
  60. package/dist/assethandler/pages/MarketplaceMarketplaceDetailPage.js.map +1 -1
  61. package/dist/assethandler/pages/MarketplaceMarketplaceListPage.js +64 -57
  62. package/dist/assethandler/pages/MarketplaceMarketplaceListPage.js.map +1 -1
  63. package/dist/assethandler/pages/MarketplaceMarketplaceOrdersPage.js +125 -108
  64. package/dist/assethandler/pages/MarketplaceMarketplaceOrdersPage.js.map +1 -1
  65. package/dist/assethandler/pages/MarketplaceMarketplaceSellPage.js +67 -61
  66. package/dist/assethandler/pages/MarketplaceMarketplaceSellPage.js.map +1 -1
  67. package/dist/assethandler/pages/OperationsMaintenanceDetailPage.js +203 -166
  68. package/dist/assethandler/pages/OperationsMaintenanceDetailPage.js.map +1 -1
  69. package/dist/assethandler/pages/OperationsOperationsHubPage.js +125 -95
  70. package/dist/assethandler/pages/OperationsOperationsHubPage.js.map +1 -1
  71. package/dist/assethandler/pages/OperationsWorkOrderDetailPage.js +165 -151
  72. package/dist/assethandler/pages/OperationsWorkOrderDetailPage.js.map +1 -1
  73. package/dist/assethandler/pages/PortfolioPortfolioOverviewPage.js +83 -81
  74. package/dist/assethandler/pages/PortfolioPortfolioOverviewPage.js.map +1 -1
  75. package/dist/assethandler/pages/ProvenancePage.js +56 -53
  76. package/dist/assethandler/pages/ProvenancePage.js.map +1 -1
  77. package/dist/assethandler/pages/ReportsReportBuilderPage.js +80 -73
  78. package/dist/assethandler/pages/ReportsReportBuilderPage.js.map +1 -1
  79. package/dist/assethandler/pages/ReportsReportsDashboardPage.js +112 -77
  80. package/dist/assethandler/pages/ReportsReportsDashboardPage.js.map +1 -1
  81. package/dist/assethandler/pages/ReportsReportsListPage.js +119 -103
  82. package/dist/assethandler/pages/ReportsReportsListPage.js.map +1 -1
  83. package/dist/assethandler/pages/SamLicensesPage.js +32 -33
  84. package/dist/assethandler/pages/SamLicensesPage.js.map +1 -1
  85. package/dist/assethandler/pages/SecurityComplianceDetailPage.js +60 -52
  86. package/dist/assethandler/pages/SecurityComplianceDetailPage.js.map +1 -1
  87. package/dist/assethandler/pages/SecurityPolicyDetailPage.js +134 -117
  88. package/dist/assethandler/pages/SecurityPolicyDetailPage.js.map +1 -1
  89. package/dist/assethandler/pages/SecurityScheduleBackupPage.js +63 -57
  90. package/dist/assethandler/pages/SecurityScheduleBackupPage.js.map +1 -1
  91. package/dist/assethandler/pages/SecuritySecurityEventDetailPage.js +131 -117
  92. package/dist/assethandler/pages/SecuritySecurityEventDetailPage.js.map +1 -1
  93. package/dist/assethandler/pages/SecuritySecurityHubPage.js +147 -113
  94. package/dist/assethandler/pages/SecuritySecurityHubPage.js.map +1 -1
  95. package/dist/assethandler/pages/TransactionsTransactionDetailPage.js +235 -218
  96. package/dist/assethandler/pages/TransactionsTransactionDetailPage.js.map +1 -1
  97. package/dist/assethandler/pages/TransactionsTransactionListPage.js +118 -116
  98. package/dist/assethandler/pages/TransactionsTransactionListPage.js.map +1 -1
  99. package/dist/assethandler/pages/UsersPage.js +108 -99
  100. package/dist/assethandler/pages/UsersPage.js.map +1 -1
  101. package/dist/assethandler/pages/UsersUserCreatePage.js +74 -67
  102. package/dist/assethandler/pages/UsersUserCreatePage.js.map +1 -1
  103. package/dist/assethandler/pages/UsersUserManagementHubPage.js +128 -93
  104. package/dist/assethandler/pages/UsersUserManagementHubPage.js.map +1 -1
  105. package/dist/assethandler/pages/WorkflowsWorkflowBuilderPage.js +211 -193
  106. package/dist/assethandler/pages/WorkflowsWorkflowBuilderPage.js.map +1 -1
  107. package/dist/assethandler/pages/WorkflowsWorkflowExecutionsPage.js +88 -86
  108. package/dist/assethandler/pages/WorkflowsWorkflowExecutionsPage.js.map +1 -1
  109. package/dist/assethandler/pages/WorkflowsWorkflowListPage.js +68 -60
  110. package/dist/assethandler/pages/WorkflowsWorkflowListPage.js.map +1 -1
  111. package/dist/assethandler/pages/WorkflowsWorkflowTemplatesPage.js +71 -68
  112. package/dist/assethandler/pages/WorkflowsWorkflowTemplatesPage.js.map +1 -1
  113. package/package.json +2 -2
@@ -1,9 +1,10 @@
1
1
  import { useAssetHandlerStore as e } from "../store/assethandlerStore.js";
2
2
  import { Activity as t, Download as n, Key as r, Plus as i, Shield as a, Upload as o, UserCheck as s, Users as c } from "lucide-react";
3
- import { Badge as l, Button as u, CTAOverflowMenu as d, Card as f, CardContent as p, CardHeader as m, CardTitle as h, GlassCard as g, GradientText as _, Table as v, TableBody as y, TableCell as b, TableHead as x, TableHeader as S, TableRow as C, Tabs as w, TabsContent as T, TabsList as E, TabsTrigger as D } from "@burdenoff/fe-libs/ui";
4
- import { jsx as O, jsxs as k } from "react/jsx-runtime";
3
+ import { useNavigate as l } from "react-router-dom";
4
+ import { Badge as u, Button as d, CTAOverflowMenu as f, Card as p, CardContent as m, CardHeader as h, CardTitle as g, GlassCard as _, GradientText as v, IllustratedEmptyState as y, NextSteps as b, PagePurpose as x, Table as S, TableBody as C, TableCell as w, TableHead as T, TableHeader as E, TableRow as D, Tabs as O, TabsContent as k, TabsList as A, TabsTrigger as j } from "@burdenoff/fe-libs/ui";
5
+ import { jsx as M, jsxs as N } from "react/jsx-runtime";
5
6
  //#region src/assethandler/pages/UsersUserManagementHubPage.tsx
6
- var A = {
7
+ var P = {
7
8
  admin: {
8
9
  description: "Full system access with all permissions",
9
10
  permCount: 11,
@@ -29,7 +30,7 @@ var A = {
29
30
  permCount: 4,
30
31
  color: "bg-action-primary-bg/10 text-action-primary-bg"
31
32
  }
32
- }, j = [
33
+ }, F = [
33
34
  {
34
35
  module: "Assets",
35
36
  admin: "Full",
@@ -94,138 +95,172 @@ var A = {
94
95
  viewer: "Read",
95
96
  auditor: "Read"
96
97
  }
97
- ], M = Date.now() - 864e5;
98
- function N() {
99
- let { users: N } = e(), P = N.filter((e) => e.status === "active").length, F = N.filter((e) => new Date(e.lastLogin).getTime() > M).length, I = N.reduce((e, t) => (e[t.role] = (e[t.role] || 0) + 1, e), {});
100
- return /* @__PURE__ */ k("div", {
98
+ ], I = Date.now() - 864e5;
99
+ function L() {
100
+ let L = l(), { users: R } = e(), z = R.filter((e) => e.status === "active").length, B = R.filter((e) => new Date(e.lastLogin).getTime() > I).length, V = R.reduce((e, t) => (e[t.role] = (e[t.role] || 0) + 1, e), {});
101
+ return /* @__PURE__ */ N("div", {
101
102
  className: "space-y-6 p-6",
102
103
  children: [
103
- /* @__PURE__ */ k("div", {
104
+ /* @__PURE__ */ N("div", {
104
105
  className: "flex items-center justify-between",
105
- children: [/* @__PURE__ */ k("div", { children: [/* @__PURE__ */ O("h1", {
106
+ children: [/* @__PURE__ */ N("div", { children: [/* @__PURE__ */ M("h1", {
106
107
  className: "text-2xl font-semibold",
107
- children: /* @__PURE__ */ O(_, { children: "User Management" })
108
- }), /* @__PURE__ */ O("p", {
108
+ children: /* @__PURE__ */ M(v, { children: "User Management" })
109
+ }), /* @__PURE__ */ M("p", {
109
110
  className: "text-sm text-text-secondary",
110
111
  children: "Manage users, roles, and access permissions across the organization."
111
- })] }), /* @__PURE__ */ O(d, {
112
+ })] }), /* @__PURE__ */ M(f, {
112
113
  primary: {
113
114
  label: "Add User",
114
115
  onSelect: () => {},
115
- icon: /* @__PURE__ */ O(i, { className: "h-4 w-4" })
116
+ icon: /* @__PURE__ */ M(i, { className: "h-4 w-4" })
116
117
  },
117
118
  actions: [{
118
119
  label: "Bulk Import",
119
120
  onSelect: () => {},
120
- icon: /* @__PURE__ */ O(o, { className: "h-4 w-4" })
121
+ icon: /* @__PURE__ */ M(o, { className: "h-4 w-4" })
121
122
  }, {
122
123
  label: "Export",
123
124
  onSelect: () => {},
124
- icon: /* @__PURE__ */ O(n, { className: "h-4 w-4" })
125
+ icon: /* @__PURE__ */ M(n, { className: "h-4 w-4" })
125
126
  }]
126
127
  })]
127
128
  }),
128
- /* @__PURE__ */ k("div", {
129
+ /* @__PURE__ */ M(x, { children: "Control who can do what across Asset Handler. Add and offboard users, assign roles, and review the permission matrix so people see exactly the assets, reports and actions their job needs — keeping access least-privilege and audit-friendly." }),
130
+ /* @__PURE__ */ M(b, {
131
+ storageKey: "assethandler-users-hub",
132
+ steps: [
133
+ {
134
+ id: "add-user",
135
+ label: "Add a user",
136
+ description: "Invite a teammate and assign their starting role.",
137
+ onClick: () => L("/users/user-create")
138
+ },
139
+ {
140
+ id: "directory",
141
+ label: "Browse the user directory",
142
+ description: "See everyone, their status and assigned assets.",
143
+ onClick: () => L("/users")
144
+ },
145
+ {
146
+ id: "audit",
147
+ label: "Check the audit trail",
148
+ description: "See who accessed or changed assets recently.",
149
+ onClick: () => L("/audit-trail")
150
+ }
151
+ ]
152
+ }),
153
+ /* @__PURE__ */ N("div", {
129
154
  className: "grid gap-4 md:grid-cols-4",
130
155
  children: [
131
- /* @__PURE__ */ k(g, {
132
- treatment: "metric",
156
+ /* @__PURE__ */ N(_, {
157
+ treatment: "glass",
158
+ glow: !0,
133
159
  className: "border-border-seam",
134
- children: [/* @__PURE__ */ k(m, {
160
+ children: [/* @__PURE__ */ N(h, {
135
161
  className: "flex flex-row items-center justify-between space-y-0 pb-2",
136
- children: [/* @__PURE__ */ O(h, {
162
+ children: [/* @__PURE__ */ M(g, {
137
163
  className: "text-sm font-medium",
138
164
  children: "Total Users"
139
- }), /* @__PURE__ */ O(c, { className: "h-4 w-4 text-text-secondary" })]
140
- }), /* @__PURE__ */ O(p, { children: /* @__PURE__ */ O("div", {
165
+ }), /* @__PURE__ */ M(c, { className: "h-4 w-4 text-text-secondary" })]
166
+ }), /* @__PURE__ */ M(m, { children: /* @__PURE__ */ M("div", {
141
167
  className: "text-2xl font-bold tabular-nums",
142
- children: N.length
168
+ children: R.length
143
169
  }) })]
144
170
  }),
145
- /* @__PURE__ */ k(g, {
171
+ /* @__PURE__ */ N(_, {
146
172
  treatment: "metric",
147
173
  className: "border-border-seam",
148
- children: [/* @__PURE__ */ k(m, {
174
+ children: [/* @__PURE__ */ N(h, {
149
175
  className: "flex flex-row items-center justify-between space-y-0 pb-2",
150
- children: [/* @__PURE__ */ O(h, {
176
+ children: [/* @__PURE__ */ M(g, {
151
177
  className: "text-sm font-medium",
152
178
  children: "Active"
153
- }), /* @__PURE__ */ O(s, { className: "h-4 w-4 text-status-success-text" })]
154
- }), /* @__PURE__ */ k(p, { children: [/* @__PURE__ */ O("div", {
179
+ }), /* @__PURE__ */ M(s, { className: "h-4 w-4 text-status-success-text" })]
180
+ }), /* @__PURE__ */ N(m, { children: [/* @__PURE__ */ M("div", {
155
181
  className: "text-2xl font-bold tabular-nums",
156
- children: P
157
- }), /* @__PURE__ */ k("p", {
182
+ children: z
183
+ }), /* @__PURE__ */ N("p", {
158
184
  className: "text-xs text-text-secondary",
159
- children: [Math.round(P / N.length * 100), "% of total"]
185
+ children: [Math.round(z / R.length * 100), "% of total"]
160
186
  })] })]
161
187
  }),
162
- /* @__PURE__ */ k(g, {
188
+ /* @__PURE__ */ N(_, {
163
189
  treatment: "metric",
164
190
  className: "border-border-seam",
165
- children: [/* @__PURE__ */ k(m, {
191
+ children: [/* @__PURE__ */ N(h, {
166
192
  className: "flex flex-row items-center justify-between space-y-0 pb-2",
167
- children: [/* @__PURE__ */ O(h, {
193
+ children: [/* @__PURE__ */ M(g, {
168
194
  className: "text-sm font-medium",
169
195
  children: "Roles Defined"
170
- }), /* @__PURE__ */ O(a, { className: "h-4 w-4 text-text-secondary" })]
171
- }), /* @__PURE__ */ O(p, { children: /* @__PURE__ */ O("div", {
196
+ }), /* @__PURE__ */ M(a, { className: "h-4 w-4 text-text-secondary" })]
197
+ }), /* @__PURE__ */ M(m, { children: /* @__PURE__ */ M("div", {
172
198
  className: "text-2xl font-bold tabular-nums",
173
- children: Object.keys(A).length
199
+ children: Object.keys(P).length
174
200
  }) })]
175
201
  }),
176
- /* @__PURE__ */ k(g, {
202
+ /* @__PURE__ */ N(_, {
177
203
  treatment: "metric",
178
204
  className: "border-border-seam",
179
- children: [/* @__PURE__ */ k(m, {
205
+ children: [/* @__PURE__ */ N(h, {
180
206
  className: "flex flex-row items-center justify-between space-y-0 pb-2",
181
- children: [/* @__PURE__ */ O(h, {
207
+ children: [/* @__PURE__ */ M(g, {
182
208
  className: "text-sm font-medium",
183
209
  children: "Recent Activity"
184
- }), /* @__PURE__ */ O(t, { className: "h-4 w-4 text-text-secondary" })]
185
- }), /* @__PURE__ */ k(p, { children: [/* @__PURE__ */ O("div", {
210
+ }), /* @__PURE__ */ M(t, { className: "h-4 w-4 text-text-secondary" })]
211
+ }), /* @__PURE__ */ N(m, { children: [/* @__PURE__ */ M("div", {
186
212
  className: "text-2xl font-bold tabular-nums",
187
- children: F
188
- }), /* @__PURE__ */ O("p", {
213
+ children: B
214
+ }), /* @__PURE__ */ M("p", {
189
215
  className: "text-xs text-text-secondary",
190
216
  children: "Logged in last 24h"
191
217
  })] })]
192
218
  })
193
219
  ]
194
220
  }),
195
- /* @__PURE__ */ k(w, {
221
+ /* @__PURE__ */ N(O, {
196
222
  defaultValue: "users",
197
223
  children: [
198
- /* @__PURE__ */ k(E, { children: [
199
- /* @__PURE__ */ O(D, {
224
+ /* @__PURE__ */ N(A, { children: [
225
+ /* @__PURE__ */ M(j, {
200
226
  value: "users",
201
227
  children: "Users"
202
228
  }),
203
- /* @__PURE__ */ O(D, {
229
+ /* @__PURE__ */ M(j, {
204
230
  value: "roles",
205
231
  children: "Roles"
206
232
  }),
207
- /* @__PURE__ */ O(D, {
233
+ /* @__PURE__ */ M(j, {
208
234
  value: "permissions",
209
235
  children: "Permissions Matrix"
210
236
  })
211
237
  ] }),
212
- /* @__PURE__ */ O(T, {
238
+ /* @__PURE__ */ M(k, {
213
239
  value: "users",
214
240
  className: "mt-4",
215
- children: /* @__PURE__ */ O(f, { children: /* @__PURE__ */ O(p, {
241
+ children: R.length === 0 ? /* @__PURE__ */ M(y, {
242
+ illustration: "empty-people",
243
+ title: "No users yet",
244
+ description: "Add your first user to start managing access to Asset Handler.",
245
+ action: /* @__PURE__ */ N(d, {
246
+ size: "sm",
247
+ onClick: () => L("/users/user-create"),
248
+ children: [/* @__PURE__ */ M(i, { className: "mr-2 h-4 w-4" }), "Add User"]
249
+ })
250
+ }) : /* @__PURE__ */ M(p, { children: /* @__PURE__ */ M(m, {
216
251
  className: "pt-6",
217
- children: /* @__PURE__ */ k(v, { children: [/* @__PURE__ */ O(S, { children: /* @__PURE__ */ k(C, { children: [
218
- /* @__PURE__ */ O(x, { children: "Name" }),
219
- /* @__PURE__ */ O(x, { children: "Email" }),
220
- /* @__PURE__ */ O(x, { children: "Role" }),
221
- /* @__PURE__ */ O(x, { children: "Department" }),
222
- /* @__PURE__ */ O(x, { children: "Status" }),
223
- /* @__PURE__ */ O(x, {
252
+ children: /* @__PURE__ */ N(S, { children: [/* @__PURE__ */ M(E, { children: /* @__PURE__ */ N(D, { children: [
253
+ /* @__PURE__ */ M(T, { children: "Name" }),
254
+ /* @__PURE__ */ M(T, { children: "Email" }),
255
+ /* @__PURE__ */ M(T, { children: "Role" }),
256
+ /* @__PURE__ */ M(T, { children: "Department" }),
257
+ /* @__PURE__ */ M(T, { children: "Status" }),
258
+ /* @__PURE__ */ M(T, {
224
259
  className: "text-right",
225
260
  children: "Assets"
226
261
  })
227
- ] }) }), /* @__PURE__ */ O(y, { children: N.map((e) => /* @__PURE__ */ k(C, { children: [
228
- /* @__PURE__ */ k(b, {
262
+ ] }) }), /* @__PURE__ */ M(C, { children: R.map((e) => /* @__PURE__ */ N(D, { children: [
263
+ /* @__PURE__ */ N(w, {
229
264
  className: "font-medium",
230
265
  children: [
231
266
  e.firstName,
@@ -233,49 +268,49 @@ function N() {
233
268
  e.lastName
234
269
  ]
235
270
  }),
236
- /* @__PURE__ */ O(b, { children: e.email }),
237
- /* @__PURE__ */ O(b, { children: /* @__PURE__ */ O(l, {
271
+ /* @__PURE__ */ M(w, { children: e.email }),
272
+ /* @__PURE__ */ M(w, { children: /* @__PURE__ */ M(u, {
238
273
  variant: e.role === "admin" ? "destructive" : "secondary",
239
274
  children: e.role
240
275
  }) }),
241
- /* @__PURE__ */ O(b, { children: e.department }),
242
- /* @__PURE__ */ O(b, { children: /* @__PURE__ */ O(l, {
276
+ /* @__PURE__ */ M(w, { children: e.department }),
277
+ /* @__PURE__ */ M(w, { children: /* @__PURE__ */ M(u, {
243
278
  variant: e.status === "active" ? "default" : "outline",
244
279
  children: e.status
245
280
  }) }),
246
- /* @__PURE__ */ O(b, {
281
+ /* @__PURE__ */ M(w, {
247
282
  className: "text-right",
248
283
  children: e.assetsAssigned
249
284
  })
250
285
  ] }, e.id)) })] })
251
286
  }) })
252
287
  }),
253
- /* @__PURE__ */ O(T, {
288
+ /* @__PURE__ */ M(k, {
254
289
  value: "roles",
255
290
  className: "mt-4",
256
- children: /* @__PURE__ */ O("div", {
291
+ children: /* @__PURE__ */ M("div", {
257
292
  className: "grid gap-4 md:grid-cols-2 lg:grid-cols-3",
258
- children: Object.entries(A).map(([e, t]) => /* @__PURE__ */ k(f, { children: [/* @__PURE__ */ O(m, { children: /* @__PURE__ */ k("div", {
293
+ children: Object.entries(P).map(([e, t]) => /* @__PURE__ */ N(p, { children: [/* @__PURE__ */ M(h, { children: /* @__PURE__ */ N("div", {
259
294
  className: "flex items-center justify-between",
260
- children: [/* @__PURE__ */ O(h, {
295
+ children: [/* @__PURE__ */ M(g, {
261
296
  className: "text-lg capitalize",
262
297
  children: e
263
- }), /* @__PURE__ */ k(l, {
298
+ }), /* @__PURE__ */ N(u, {
264
299
  variant: "outline",
265
- children: [I[e] || 0, " users"]
300
+ children: [V[e] || 0, " users"]
266
301
  })]
267
- }) }), /* @__PURE__ */ k(p, {
302
+ }) }), /* @__PURE__ */ N(m, {
268
303
  className: "space-y-3",
269
304
  children: [
270
- /* @__PURE__ */ O("p", {
305
+ /* @__PURE__ */ M("p", {
271
306
  className: "text-sm text-text-secondary",
272
307
  children: t.description
273
308
  }),
274
- /* @__PURE__ */ k("div", {
309
+ /* @__PURE__ */ N("div", {
275
310
  className: "flex items-center gap-2 text-sm",
276
- children: [/* @__PURE__ */ O(r, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ k("span", { children: [t.permCount, " permissions"] })]
311
+ children: [/* @__PURE__ */ M(r, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ N("span", { children: [t.permCount, " permissions"] })]
277
312
  }),
278
- /* @__PURE__ */ O(u, {
313
+ /* @__PURE__ */ M(d, {
279
314
  variant: "outline",
280
315
  size: "sm",
281
316
  className: "w-full",
@@ -285,42 +320,42 @@ function N() {
285
320
  })] }, e))
286
321
  })
287
322
  }),
288
- /* @__PURE__ */ O(T, {
323
+ /* @__PURE__ */ M(k, {
289
324
  value: "permissions",
290
325
  className: "mt-4",
291
- children: /* @__PURE__ */ k(f, { children: [/* @__PURE__ */ O(m, { children: /* @__PURE__ */ O(h, { children: "Permission Matrix" }) }), /* @__PURE__ */ O(p, { children: /* @__PURE__ */ k(v, { children: [/* @__PURE__ */ O(S, { children: /* @__PURE__ */ k(C, { children: [
292
- /* @__PURE__ */ O(x, { children: "Module" }),
293
- /* @__PURE__ */ O(x, { children: "Admin" }),
294
- /* @__PURE__ */ O(x, { children: "Manager" }),
295
- /* @__PURE__ */ O(x, { children: "Technician" }),
296
- /* @__PURE__ */ O(x, { children: "Viewer" }),
297
- /* @__PURE__ */ O(x, { children: "Auditor" })
298
- ] }) }), /* @__PURE__ */ O(y, { children: j.map((e) => /* @__PURE__ */ k(C, { children: [
299
- /* @__PURE__ */ O(b, {
326
+ children: /* @__PURE__ */ N(p, { children: [/* @__PURE__ */ M(h, { children: /* @__PURE__ */ M(g, { children: "Permission Matrix" }) }), /* @__PURE__ */ M(m, { children: /* @__PURE__ */ N(S, { children: [/* @__PURE__ */ M(E, { children: /* @__PURE__ */ N(D, { children: [
327
+ /* @__PURE__ */ M(T, { children: "Module" }),
328
+ /* @__PURE__ */ M(T, { children: "Admin" }),
329
+ /* @__PURE__ */ M(T, { children: "Manager" }),
330
+ /* @__PURE__ */ M(T, { children: "Technician" }),
331
+ /* @__PURE__ */ M(T, { children: "Viewer" }),
332
+ /* @__PURE__ */ M(T, { children: "Auditor" })
333
+ ] }) }), /* @__PURE__ */ M(C, { children: F.map((e) => /* @__PURE__ */ N(D, { children: [
334
+ /* @__PURE__ */ M(w, {
300
335
  className: "font-medium",
301
336
  children: e.module
302
337
  }),
303
- /* @__PURE__ */ O(b, { children: /* @__PURE__ */ O(l, {
338
+ /* @__PURE__ */ M(w, { children: /* @__PURE__ */ M(u, {
304
339
  variant: e.admin === "Full" ? "default" : "outline",
305
340
  className: "text-xs",
306
341
  children: e.admin
307
342
  }) }),
308
- /* @__PURE__ */ O(b, { children: /* @__PURE__ */ O(l, {
343
+ /* @__PURE__ */ M(w, { children: /* @__PURE__ */ M(u, {
309
344
  variant: e.manager === "Full" ? "default" : e.manager === "—" ? "outline" : "secondary",
310
345
  className: "text-xs",
311
346
  children: e.manager
312
347
  }) }),
313
- /* @__PURE__ */ O(b, { children: /* @__PURE__ */ O(l, {
348
+ /* @__PURE__ */ M(w, { children: /* @__PURE__ */ M(u, {
314
349
  variant: e.technician === "Full" ? "default" : e.technician === "—" ? "outline" : "secondary",
315
350
  className: "text-xs",
316
351
  children: e.technician
317
352
  }) }),
318
- /* @__PURE__ */ O(b, { children: /* @__PURE__ */ O(l, {
353
+ /* @__PURE__ */ M(w, { children: /* @__PURE__ */ M(u, {
319
354
  variant: e.viewer === "—" ? "outline" : "secondary",
320
355
  className: "text-xs",
321
356
  children: e.viewer
322
357
  }) }),
323
- /* @__PURE__ */ O(b, { children: /* @__PURE__ */ O(l, {
358
+ /* @__PURE__ */ M(w, { children: /* @__PURE__ */ M(u, {
324
359
  variant: e.auditor === "Full" ? "default" : e.auditor === "—" ? "outline" : "secondary",
325
360
  className: "text-xs",
326
361
  children: e.auditor
@@ -333,6 +368,6 @@ function N() {
333
368
  });
334
369
  }
335
370
  //#endregion
336
- export { N as UsersUserManagementHubPage };
371
+ export { L as UsersUserManagementHubPage };
337
372
 
338
373
  //# sourceMappingURL=UsersUserManagementHubPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"UsersUserManagementHubPage.js","names":[],"sources":["../../../src/assethandler/pages/UsersUserManagementHubPage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n GradientText,\n GlassCard,\n CTAOverflowMenu,\n} from '@burdenoff/fe-libs/ui';\nimport { Users, UserCheck, Shield, Upload, Download, Plus, Activity, Key } from 'lucide-react';\nimport { useAssetHandlerStore } from '../store/assethandlerStore';\n\nconst roleDescriptions: Record<string, { description: string; permCount: number; color: string }> =\n {\n admin: {\n description: 'Full system access with all permissions',\n permCount: 11,\n color: 'bg-status-error-bg-subtle text-status-error-text',\n },\n manager: {\n description: 'Department-level management and reporting',\n permCount: 6,\n color: 'bg-status-info-bg-subtle text-status-info-text',\n },\n technician: {\n description: 'Asset maintenance and operational tasks',\n permCount: 4,\n color: 'bg-status-success-bg-subtle text-status-success-text',\n },\n viewer: {\n description: 'Read-only access to assets and reports',\n permCount: 2,\n color: 'bg-bg-sunken text-text-secondary',\n },\n auditor: {\n description: 'Audit trail access and compliance reporting',\n permCount: 4,\n color: 'bg-action-primary-bg/10 text-action-primary-bg',\n },\n };\n\nconst permissionMatrix = [\n {\n module: 'Assets',\n admin: 'Full',\n manager: 'Full',\n technician: 'Read/Update',\n viewer: 'Read',\n auditor: 'Read',\n },\n { module: 'Users', admin: 'Full', manager: 'Read', technician: '—', viewer: '—', auditor: '—' },\n {\n module: 'Reports',\n admin: 'Full',\n manager: 'Read',\n technician: '—',\n viewer: 'Read',\n auditor: 'Full',\n },\n {\n module: 'Maintenance',\n admin: 'Full',\n manager: 'Full',\n technician: 'Full',\n viewer: '—',\n auditor: '—',\n },\n { module: 'Audit', admin: 'Full', manager: '—', technician: '—', viewer: '—', auditor: 'Full' },\n {\n module: 'Compliance',\n admin: 'Full',\n manager: 'Read',\n technician: '—',\n viewer: '—',\n auditor: 'Full',\n },\n { module: 'Settings', admin: 'Full', manager: '—', technician: '—', viewer: '—', auditor: '—' },\n {\n module: 'Finance',\n admin: 'Full',\n manager: 'Full',\n technician: '—',\n viewer: 'Read',\n auditor: 'Read',\n },\n];\n\nconst RECENT_LOGIN_CUTOFF = Date.now() - 86400000;\n\nexport function UsersUserManagementHubPage() {\n const { users } = useAssetHandlerStore();\n\n const activeUsers = users.filter((u) => u.status === 'active').length;\n const recentActivityCount = users.filter(\n (u) => new Date(u.lastLogin).getTime() > RECENT_LOGIN_CUTOFF\n ).length;\n const roleCounts = users.reduce<Record<string, number>>((acc, u) => {\n acc[u.role] = (acc[u.role] || 0) + 1;\n return acc;\n }, {});\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>User Management</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">\n Manage users, roles, and access permissions across the organization.\n </p>\n </div>\n <CTAOverflowMenu\n primary={{ label: 'Add User', onSelect: () => {}, icon: <Plus className=\"h-4 w-4\" /> }}\n actions={[\n { label: 'Bulk Import', onSelect: () => {}, icon: <Upload className=\"h-4 w-4\" /> },\n { label: 'Export', onSelect: () => {}, icon: <Download className=\"h-4 w-4\" /> },\n ]}\n />\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-4\">\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Total Users</CardTitle>\n <Users className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">{users.length}</div>\n </CardContent>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Active</CardTitle>\n <UserCheck className=\"h-4 w-4 text-status-success-text\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">{activeUsers}</div>\n <p className=\"text-xs text-text-secondary\">\n {Math.round((activeUsers / users.length) * 100)}% of total\n </p>\n </CardContent>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Roles Defined</CardTitle>\n <Shield className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">\n {Object.keys(roleDescriptions).length}\n </div>\n </CardContent>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Recent Activity</CardTitle>\n <Activity className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">{recentActivityCount}</div>\n <p className=\"text-xs text-text-secondary\">Logged in last 24h</p>\n </CardContent>\n </GlassCard>\n </div>\n\n <Tabs defaultValue=\"users\">\n <TabsList>\n <TabsTrigger value=\"users\">Users</TabsTrigger>\n <TabsTrigger value=\"roles\">Roles</TabsTrigger>\n <TabsTrigger value=\"permissions\">Permissions Matrix</TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"users\" className=\"mt-4\">\n <Card>\n <CardContent className=\"pt-6\">\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Name</TableHead>\n <TableHead>Email</TableHead>\n <TableHead>Role</TableHead>\n <TableHead>Department</TableHead>\n <TableHead>Status</TableHead>\n <TableHead className=\"text-right\">Assets</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {users.map((user) => (\n <TableRow key={user.id}>\n <TableCell className=\"font-medium\">\n {user.firstName} {user.lastName}\n </TableCell>\n <TableCell>{user.email}</TableCell>\n <TableCell>\n <Badge variant={user.role === 'admin' ? 'destructive' : 'secondary'}>\n {user.role}\n </Badge>\n </TableCell>\n <TableCell>{user.department}</TableCell>\n <TableCell>\n <Badge variant={user.status === 'active' ? 'default' : 'outline'}>\n {user.status}\n </Badge>\n </TableCell>\n <TableCell className=\"text-right\">{user.assetsAssigned}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </CardContent>\n </Card>\n </TabsContent>\n\n <TabsContent value=\"roles\" className=\"mt-4\">\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {Object.entries(roleDescriptions).map(([role, info]) => (\n <Card key={role}>\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"text-lg capitalize\">{role}</CardTitle>\n <Badge variant=\"outline\">{roleCounts[role] || 0} users</Badge>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n <p className=\"text-sm text-text-secondary\">{info.description}</p>\n <div className=\"flex items-center gap-2 text-sm\">\n <Key className=\"h-4 w-4 text-text-secondary\" />\n <span>{info.permCount} permissions</span>\n </div>\n <Button variant=\"outline\" size=\"sm\" className=\"w-full\">\n Edit Role\n </Button>\n </CardContent>\n </Card>\n ))}\n </div>\n </TabsContent>\n\n <TabsContent value=\"permissions\" className=\"mt-4\">\n <Card>\n <CardHeader>\n <CardTitle>Permission Matrix</CardTitle>\n </CardHeader>\n <CardContent>\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Module</TableHead>\n <TableHead>Admin</TableHead>\n <TableHead>Manager</TableHead>\n <TableHead>Technician</TableHead>\n <TableHead>Viewer</TableHead>\n <TableHead>Auditor</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {permissionMatrix.map((row) => (\n <TableRow key={row.module}>\n <TableCell className=\"font-medium\">{row.module}</TableCell>\n <TableCell>\n <Badge\n variant={row.admin === 'Full' ? 'default' : 'outline'}\n className=\"text-xs\"\n >\n {row.admin}\n </Badge>\n </TableCell>\n <TableCell>\n <Badge\n variant={\n row.manager === 'Full'\n ? 'default'\n : row.manager === '—'\n ? 'outline'\n : 'secondary'\n }\n className=\"text-xs\"\n >\n {row.manager}\n </Badge>\n </TableCell>\n <TableCell>\n <Badge\n variant={\n row.technician === 'Full'\n ? 'default'\n : row.technician === '—'\n ? 'outline'\n : 'secondary'\n }\n className=\"text-xs\"\n >\n {row.technician}\n </Badge>\n </TableCell>\n <TableCell>\n <Badge\n variant={row.viewer === '—' ? 'outline' : 'secondary'}\n className=\"text-xs\"\n >\n {row.viewer}\n </Badge>\n </TableCell>\n <TableCell>\n <Badge\n variant={\n row.auditor === 'Full'\n ? 'default'\n : row.auditor === '—'\n ? 'outline'\n : 'secondary'\n }\n className=\"text-xs\"\n >\n {row.auditor}\n </Badge>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </CardContent>\n </Card>\n </TabsContent>\n </Tabs>\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"UsersUserManagementHubPage.js","names":[],"sources":["../../../src/assethandler/pages/UsersUserManagementHubPage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n GradientText,\n GlassCard,\n CTAOverflowMenu,\n PagePurpose,\n NextSteps,\n IllustratedEmptyState,\n} from '@burdenoff/fe-libs/ui';\nimport { Users, UserCheck, Shield, Upload, Download, Plus, Activity, Key } from 'lucide-react';\nimport { useNavigate } from 'react-router-dom';\nimport { useAssetHandlerStore } from '../store/assethandlerStore';\n\nconst roleDescriptions: Record<string, { description: string; permCount: number; color: string }> =\n {\n admin: {\n description: 'Full system access with all permissions',\n permCount: 11,\n color: 'bg-status-error-bg-subtle text-status-error-text',\n },\n manager: {\n description: 'Department-level management and reporting',\n permCount: 6,\n color: 'bg-status-info-bg-subtle text-status-info-text',\n },\n technician: {\n description: 'Asset maintenance and operational tasks',\n permCount: 4,\n color: 'bg-status-success-bg-subtle text-status-success-text',\n },\n viewer: {\n description: 'Read-only access to assets and reports',\n permCount: 2,\n color: 'bg-bg-sunken text-text-secondary',\n },\n auditor: {\n description: 'Audit trail access and compliance reporting',\n permCount: 4,\n color: 'bg-action-primary-bg/10 text-action-primary-bg',\n },\n };\n\nconst permissionMatrix = [\n {\n module: 'Assets',\n admin: 'Full',\n manager: 'Full',\n technician: 'Read/Update',\n viewer: 'Read',\n auditor: 'Read',\n },\n { module: 'Users', admin: 'Full', manager: 'Read', technician: '—', viewer: '—', auditor: '—' },\n {\n module: 'Reports',\n admin: 'Full',\n manager: 'Read',\n technician: '—',\n viewer: 'Read',\n auditor: 'Full',\n },\n {\n module: 'Maintenance',\n admin: 'Full',\n manager: 'Full',\n technician: 'Full',\n viewer: '—',\n auditor: '—',\n },\n { module: 'Audit', admin: 'Full', manager: '—', technician: '—', viewer: '—', auditor: 'Full' },\n {\n module: 'Compliance',\n admin: 'Full',\n manager: 'Read',\n technician: '—',\n viewer: '—',\n auditor: 'Full',\n },\n { module: 'Settings', admin: 'Full', manager: '—', technician: '—', viewer: '—', auditor: '—' },\n {\n module: 'Finance',\n admin: 'Full',\n manager: 'Full',\n technician: '—',\n viewer: 'Read',\n auditor: 'Read',\n },\n];\n\nconst RECENT_LOGIN_CUTOFF = Date.now() - 86400000;\n\nexport function UsersUserManagementHubPage() {\n const navigate = useNavigate();\n const { users } = useAssetHandlerStore();\n\n const activeUsers = users.filter((u) => u.status === 'active').length;\n const recentActivityCount = users.filter(\n (u) => new Date(u.lastLogin).getTime() > RECENT_LOGIN_CUTOFF\n ).length;\n const roleCounts = users.reduce<Record<string, number>>((acc, u) => {\n acc[u.role] = (acc[u.role] || 0) + 1;\n return acc;\n }, {});\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>User Management</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">\n Manage users, roles, and access permissions across the organization.\n </p>\n </div>\n <CTAOverflowMenu\n primary={{ label: 'Add User', onSelect: () => {}, icon: <Plus className=\"h-4 w-4\" /> }}\n actions={[\n { label: 'Bulk Import', onSelect: () => {}, icon: <Upload className=\"h-4 w-4\" /> },\n { label: 'Export', onSelect: () => {}, icon: <Download className=\"h-4 w-4\" /> },\n ]}\n />\n </div>\n\n <PagePurpose>\n Control who can do what across Asset Handler. Add and offboard users, assign roles, and\n review the permission matrix so people see exactly the assets, reports and actions their job\n needs — keeping access least-privilege and audit-friendly.\n </PagePurpose>\n\n <NextSteps\n storageKey=\"assethandler-users-hub\"\n steps={[\n {\n id: 'add-user',\n label: 'Add a user',\n description: 'Invite a teammate and assign their starting role.',\n onClick: () => navigate('/users/user-create'),\n },\n {\n id: 'directory',\n label: 'Browse the user directory',\n description: 'See everyone, their status and assigned assets.',\n onClick: () => navigate('/users'),\n },\n {\n id: 'audit',\n label: 'Check the audit trail',\n description: 'See who accessed or changed assets recently.',\n onClick: () => navigate('/audit-trail'),\n },\n ]}\n />\n\n <div className=\"grid gap-4 md:grid-cols-4\">\n <GlassCard treatment=\"glass\" glow className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Total Users</CardTitle>\n <Users className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">{users.length}</div>\n </CardContent>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Active</CardTitle>\n <UserCheck className=\"h-4 w-4 text-status-success-text\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">{activeUsers}</div>\n <p className=\"text-xs text-text-secondary\">\n {Math.round((activeUsers / users.length) * 100)}% of total\n </p>\n </CardContent>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Roles Defined</CardTitle>\n <Shield className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">\n {Object.keys(roleDescriptions).length}\n </div>\n </CardContent>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Recent Activity</CardTitle>\n <Activity className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">{recentActivityCount}</div>\n <p className=\"text-xs text-text-secondary\">Logged in last 24h</p>\n </CardContent>\n </GlassCard>\n </div>\n\n <Tabs defaultValue=\"users\">\n <TabsList>\n <TabsTrigger value=\"users\">Users</TabsTrigger>\n <TabsTrigger value=\"roles\">Roles</TabsTrigger>\n <TabsTrigger value=\"permissions\">Permissions Matrix</TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"users\" className=\"mt-4\">\n {users.length === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-people\"\n title=\"No users yet\"\n description=\"Add your first user to start managing access to Asset Handler.\"\n action={\n <Button size=\"sm\" onClick={() => navigate('/users/user-create')}>\n <Plus className=\"mr-2 h-4 w-4\" />\n Add User\n </Button>\n }\n />\n ) : (\n <Card>\n <CardContent className=\"pt-6\">\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Name</TableHead>\n <TableHead>Email</TableHead>\n <TableHead>Role</TableHead>\n <TableHead>Department</TableHead>\n <TableHead>Status</TableHead>\n <TableHead className=\"text-right\">Assets</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {users.map((user) => (\n <TableRow key={user.id}>\n <TableCell className=\"font-medium\">\n {user.firstName} {user.lastName}\n </TableCell>\n <TableCell>{user.email}</TableCell>\n <TableCell>\n <Badge variant={user.role === 'admin' ? 'destructive' : 'secondary'}>\n {user.role}\n </Badge>\n </TableCell>\n <TableCell>{user.department}</TableCell>\n <TableCell>\n <Badge variant={user.status === 'active' ? 'default' : 'outline'}>\n {user.status}\n </Badge>\n </TableCell>\n <TableCell className=\"text-right\">{user.assetsAssigned}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </CardContent>\n </Card>\n )}\n </TabsContent>\n\n <TabsContent value=\"roles\" className=\"mt-4\">\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {Object.entries(roleDescriptions).map(([role, info]) => (\n <Card key={role}>\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"text-lg capitalize\">{role}</CardTitle>\n <Badge variant=\"outline\">{roleCounts[role] || 0} users</Badge>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n <p className=\"text-sm text-text-secondary\">{info.description}</p>\n <div className=\"flex items-center gap-2 text-sm\">\n <Key className=\"h-4 w-4 text-text-secondary\" />\n <span>{info.permCount} permissions</span>\n </div>\n <Button variant=\"outline\" size=\"sm\" className=\"w-full\">\n Edit Role\n </Button>\n </CardContent>\n </Card>\n ))}\n </div>\n </TabsContent>\n\n <TabsContent value=\"permissions\" className=\"mt-4\">\n <Card>\n <CardHeader>\n <CardTitle>Permission Matrix</CardTitle>\n </CardHeader>\n <CardContent>\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Module</TableHead>\n <TableHead>Admin</TableHead>\n <TableHead>Manager</TableHead>\n <TableHead>Technician</TableHead>\n <TableHead>Viewer</TableHead>\n <TableHead>Auditor</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {permissionMatrix.map((row) => (\n <TableRow key={row.module}>\n <TableCell className=\"font-medium\">{row.module}</TableCell>\n <TableCell>\n <Badge\n variant={row.admin === 'Full' ? 'default' : 'outline'}\n className=\"text-xs\"\n >\n {row.admin}\n </Badge>\n </TableCell>\n <TableCell>\n <Badge\n variant={\n row.manager === 'Full'\n ? 'default'\n : row.manager === '—'\n ? 'outline'\n : 'secondary'\n }\n className=\"text-xs\"\n >\n {row.manager}\n </Badge>\n </TableCell>\n <TableCell>\n <Badge\n variant={\n row.technician === 'Full'\n ? 'default'\n : row.technician === '—'\n ? 'outline'\n : 'secondary'\n }\n className=\"text-xs\"\n >\n {row.technician}\n </Badge>\n </TableCell>\n <TableCell>\n <Badge\n variant={row.viewer === '—' ? 'outline' : 'secondary'}\n className=\"text-xs\"\n >\n {row.viewer}\n </Badge>\n </TableCell>\n <TableCell>\n <Badge\n variant={\n row.auditor === 'Full'\n ? 'default'\n : row.auditor === '—'\n ? 'outline'\n : 'secondary'\n }\n className=\"text-xs\"\n >\n {row.auditor}\n </Badge>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </CardContent>\n </Card>\n </TabsContent>\n </Tabs>\n </div>\n );\n}\n"],"mappings":"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"}