import * as React from 'react'; import { User, LogOut, Monitor, Moon, Sun } from 'lucide-react'; import { Breadcrumb, type BreadcrumbItem } from '@/components/ui/breadcrumb'; import { useTheme } from '@/components/theme-provider'; import { useAuthStore } from '@/store/auth-store'; import { cn } from '@/lib/utils'; interface TopBarProps { crumbs: BreadcrumbItem[]; } export function TopBar({ crumbs }: TopBarProps) { const { theme, setTheme } = useTheme(); const { user, config, logout } = useAuthStore(); const [menuOpen, setMenuOpen] = React.useState(false); const menuRef = React.useRef(null); React.useEffect(() => { if (!menuOpen) return; const handler = (e: MouseEvent) => { if (menuRef.current && !menuRef.current.contains(e.target as Node)) setMenuOpen(false); }; document.addEventListener('mousedown', handler); return () => document.removeEventListener('mousedown', handler); }, [menuOpen]); const hasUser = !!(config && (config.admin.enabled || config.oidc.enabled) && user); return (
{hasUser && (
{menuOpen && (
{user?.name || user?.username}
{user?.email && (
{user.email}
)}
)}
)}
); } function ThemeMiniToggle({ theme, setTheme, }: { theme: 'light' | 'dark' | 'system'; setTheme: (t: 'light' | 'dark' | 'system') => void; }) { const next = theme === 'dark' ? 'light' : theme === 'light' ? 'system' : 'dark'; const Icon = theme === 'dark' ? Moon : theme === 'light' ? Sun : Monitor; return ( ); }