diff --git a/frontend/src/components/admin/AdminDashboardPage.tsx b/frontend/src/components/admin/AdminDashboardPage.tsx index fac3982..bc6a517 100644 --- a/frontend/src/components/admin/AdminDashboardPage.tsx +++ b/frontend/src/components/admin/AdminDashboardPage.tsx @@ -25,7 +25,7 @@ export default function AdminDashboardPage() { return (
{/* Stats grid */} -
+
{isLoading ? ( Array.from({ length: 5 }).map((_, i) => ( @@ -94,10 +94,10 @@ export default function AdminDashboardPage() { - - @@ -111,8 +111,8 @@ export default function AdminDashboardPage() { idx % 2 === 0 ? '' : 'bg-card-elevated/25' )} > - - + @@ -142,16 +142,16 @@ export default function AdminDashboardPage() {
+ Username + When
{entry.username} + {entry.username} {getRelativeTime(entry.last_login_at)}
- - - - @@ -165,7 +165,7 @@ export default function AdminDashboardPage() { idx % 2 === 0 ? '' : 'bg-card-elevated/25' )} > - - - - diff --git a/frontend/src/components/admin/AdminPortal.tsx b/frontend/src/components/admin/AdminPortal.tsx index 76c2d4e..a4d2324 100644 --- a/frontend/src/components/admin/AdminPortal.tsx +++ b/frontend/src/components/admin/AdminPortal.tsx @@ -17,32 +17,33 @@ export default function AdminPortal() { return (
{/* Portal header with tab navigation */} -
-
-
+
+
+
-

Admin Portal

+

Admin

{/* Horizontal tab navigation */} -
-
+
+ Action + Actor + Target + When
+ + {entry.actor_username ?? ( system )} + {entry.target_username ?? '—'} + {getRelativeTime(entry.created_at)}
- - - - - - @@ -158,15 +158,15 @@ export default function ConfigPage() { idx % 2 === 0 ? '' : 'bg-card-elevated/25' )} > - - - - - - diff --git a/frontend/src/components/admin/IAMPage.tsx b/frontend/src/components/admin/IAMPage.tsx index 6f3d4a0..2c83957 100644 --- a/frontend/src/components/admin/IAMPage.tsx +++ b/frontend/src/components/admin/IAMPage.tsx @@ -125,7 +125,7 @@ export default function IAMPage() { {/* User table */} - +
@@ -139,12 +139,12 @@ export default function IAMPage() { value={searchQuery} onChange={(e) => setSearchQuery(e.target.value)} placeholder="Search users..." - className="pl-8 h-8 w-48 text-xs" + className="pl-8 h-8 w-32 sm:w-48 text-xs" />
@@ -160,38 +160,38 @@ export default function IAMPage() { {searchQuery ? 'No users match your search.' : 'No users found.'}

) : ( -
+
+ Time + Actor + Action + Target + IP + Detail
+ {getRelativeTime(entry.created_at)} + {entry.actor_username ?? ( system )} + + {entry.target_username ?? '—'} + {entry.ip_address ?? '—'} + {entry.detail ?? '—'}
- - - - - - - - - - @@ -211,17 +211,17 @@ export default function IAMPage() { ) )} > - - + - - - - - - - - diff --git a/frontend/src/components/admin/UserActionsMenu.tsx b/frontend/src/components/admin/UserActionsMenu.tsx index f4a641d..056e5a7 100644 --- a/frontend/src/components/admin/UserActionsMenu.tsx +++ b/frontend/src/components/admin/UserActionsMenu.tsx @@ -147,7 +147,7 @@ export default function UserActionsMenu({ user, currentUsername }: UserActionsMe {roleSubmenuOpen && (
setRoleSubmenuOpen(true)} onMouseLeave={() => setRoleSubmenuOpen(false)} > diff --git a/frontend/src/components/admin/UserDetailSection.tsx b/frontend/src/components/admin/UserDetailSection.tsx index 26ab578..f5b8e09 100644 --- a/frontend/src/components/admin/UserDetailSection.tsx +++ b/frontend/src/components/admin/UserDetailSection.tsx @@ -71,15 +71,15 @@ export default function UserDetailSection({ userId, onClose }: UserDetailSection if (isLoading) { return ( -
- +
+ {Array.from({ length: 5 }).map((_, i) => ( ))} - + {Array.from({ length: 7 }).map((_, i) => ( @@ -109,9 +109,9 @@ export default function UserDetailSection({ userId, onClose }: UserDetailSection if (!user) return null; return ( -
+
{/* User Information (read-only) */} - +
@@ -152,7 +152,7 @@ export default function UserDetailSection({ userId, onClose }: UserDetailSection {/* Security & Permissions */} - +
@@ -168,7 +168,7 @@ export default function UserDetailSection({ userId, onClose }: UserDetailSection
+ Username + Umbral Name + Email + Role + Status + Last Login + MFA + Sessions + Created + Actions
{user.username} + {user.username} {user.umbral_name || user.username} + {user.email || '—'} + + + {user.last_login_at ? getRelativeTime(user.last_login_at) : '—'} + {user.totp_enabled ? ( On @@ -249,13 +249,13 @@ export default function IAMPage() { )} + {user.active_sessions} + {getRelativeTime(user.created_at)} e.stopPropagation()}> + e.stopPropagation()}>