diff --git a/src/components/PageShell.tsx b/src/components/PageShell.tsx new file mode 100644 index 0000000..c20f325 --- /dev/null +++ b/src/components/PageShell.tsx @@ -0,0 +1,57 @@ +import { useState } from 'react' +import { ChevronRight } from 'lucide-react' +import { Sidebar } from './Sidebar' +import type { User } from '../types' + +interface Props { + user: User + children: React.ReactNode + padding?: string +} + +export function PageShell({ user, children, padding = '1.5rem 2rem' }: Props) { + const [menuOpen, setMenuOpen] = useState(false) + + return ( +
+ + {/* Collapsed sidebar strip */} +
+ +
+ + {/* Overlay sidebar + backdrop when open */} + {menuOpen && ( + <> +
setMenuOpen(false)} + style={{ position: 'fixed', inset: 0, zIndex: 19, background: 'rgba(0,0,0,0.35)' }} + /> +
+ setMenuOpen(false)} /> +
+ + )} + +
+ {children} +
+
+ ) +} diff --git a/src/pages/AdminDepartments.tsx b/src/pages/AdminDepartments.tsx index 65d8d43..c2b5ff1 100644 --- a/src/pages/AdminDepartments.tsx +++ b/src/pages/AdminDepartments.tsx @@ -1,5 +1,5 @@ import { useEffect, useState } from 'react' -import { Sidebar } from '../components/Sidebar' +import { PageShell } from '../components/PageShell' import type { User, Role } from '../types' interface WfDept { @@ -93,9 +93,7 @@ export function AdminDepartments({ user }: { user: User }) { } return ( -
- -
+

Workforce Departments

@@ -173,8 +171,7 @@ export function AdminDepartments({ user }: { user: User }) { ))}
)} -
-
+ ) } diff --git a/src/pages/AdminMonitor.tsx b/src/pages/AdminMonitor.tsx index 2d41543..57178b4 100644 --- a/src/pages/AdminMonitor.tsx +++ b/src/pages/AdminMonitor.tsx @@ -1,6 +1,6 @@ import { useEffect, useRef, useState } from 'react' import { ArrowUpCircle, Activity, ScrollText, RefreshCw, TerminalSquare, HardDrive, ChevronDown, ChevronRight, Play } from 'lucide-react' -import { Sidebar } from '../components/Sidebar' +import { PageShell } from '../components/PageShell' import type { User } from '../types' interface AppStatus { @@ -238,8 +238,7 @@ export function AdminMonitor({ user }: { user: User }) { ] return ( -
- +
{/* Tab bar */} @@ -718,6 +717,6 @@ export function AdminMonitor({ user }: { user: User }) { )}
-
+ ) } diff --git a/src/pages/AdminRoles.tsx b/src/pages/AdminRoles.tsx index d143fa1..f543292 100644 --- a/src/pages/AdminRoles.tsx +++ b/src/pages/AdminRoles.tsx @@ -1,5 +1,5 @@ import { useEffect, useState } from 'react' -import { Sidebar } from '../components/Sidebar' +import { PageShell } from '../components/PageShell' import type { User, Role, Capability } from '../types' export function AdminRoles({ user }: { user: User }) { @@ -51,9 +51,7 @@ export function AdminRoles({ user }: { user: User }) { } return ( -
- -
+

Roles

))}
- -
+ ) } diff --git a/src/pages/AdminSettings.tsx b/src/pages/AdminSettings.tsx index 8c8929b..ce502ea 100644 --- a/src/pages/AdminSettings.tsx +++ b/src/pages/AdminSettings.tsx @@ -1,6 +1,6 @@ import { useState, useEffect, useRef } from 'react' import { CheckCircle, XCircle, RefreshCw, ChevronDown, ChevronUp, Clock, Folder, FolderOpen, ChevronRight, KeyRound, Copy, Check } from 'lucide-react' -import { Sidebar } from '../components/Sidebar' +import { PageShell } from '../components/PageShell' import type { User } from '../types' const MASKED = '••••••••' @@ -62,9 +62,7 @@ export function AdminSettings({ user }: { user: User }) { }, []) return ( -
- -
+

Settings

@@ -101,8 +99,7 @@ export function AdminSettings({ user }: { user: User }) { {tab === 'rooms' && } {tab === 'apps' && } {tab === 'device' && } -
-
+ ) } diff --git a/src/pages/AdminUsers.tsx b/src/pages/AdminUsers.tsx index fe4de1c..d5133c7 100644 --- a/src/pages/AdminUsers.tsx +++ b/src/pages/AdminUsers.tsx @@ -1,5 +1,5 @@ import { useEffect, useState } from 'react' -import { Sidebar } from '../components/Sidebar' +import { PageShell } from '../components/PageShell' import type { User, Role, Capability } from '../types' interface ManagedUser { @@ -93,9 +93,7 @@ export function AdminUsers({ user }: { user: User }) { } return ( -
- -
+

Users

-
-
+ ) } diff --git a/src/pages/Dashboard.tsx b/src/pages/Dashboard.tsx index 588f178..31cb449 100644 --- a/src/pages/Dashboard.tsx +++ b/src/pages/Dashboard.tsx @@ -1,6 +1,6 @@ import { useNavigate } from 'react-router-dom' import { Download } from 'lucide-react' -import { Sidebar } from '../components/Sidebar' +import { PageShell } from '../components/PageShell' import { AppIcon } from '../components/AppIcon' import type { User, App } from '../types' @@ -18,9 +18,7 @@ export function Dashboard({ user }: { user: User }) { const hasAny = user.apps.length > 0 return ( -
- -
+

Good {greeting()},{' '} {user.name} @@ -50,8 +48,7 @@ export function Dashboard({ user }: { user: User }) { navigate(`/app/${slug}`)} />

))} - - + ) }