import { CircleQuestionMark, CircleUser, Globe, Lock, Server, Settings, Users } from "lucide-react"; import { NavLink, useSubmit } from "react-router"; import Link from "~/components/link"; import { Menu, MenuContent, MenuItem, MenuSeparator, MenuTrigger } from "~/components/menu"; import logoBg from "~/logo/dark-bg.svg"; import logoDark from "~/logo/dark.svg"; import logoLight from "~/logo/light.svg"; import cn from "~/utils/cn"; export interface HeaderProps { user: { subject: string; name: string; email?: string; username?: string; picture?: string; }; access: { ui: boolean; machines: boolean; dns: boolean; users: boolean; policy: boolean; settings: boolean; }; configAvailable: boolean; } const tabs = [ { to: "/machines", icon: Server, label: "Machines", key: "machines" }, { to: "/users", icon: Users, label: "Users", key: "users" }, { to: "/acls", icon: Lock, label: "Access Control", key: "policy" }, { to: "/dns", icon: Globe, label: "DNS", key: "dns" }, { to: "/settings", icon: Settings, label: "Settings", key: "settings" }, ] as const; export default function Header({ user, access, configAvailable }: HeaderProps) { const submit = useSubmit(); const showTabs = access.ui; return (
Headplane logo

headplane

{showTabs && ( )}
Docs Headscale Download {user.picture ? ( {user.name} ) : ( )}
{user.subject === "api_key" ? ( <>

API Key

{user.name}

) : ( <>

{user.name}

{user.email &&

{user.email}

} )}
submit({}, { action: "/logout", method: "POST" })} > Logout
); }