import { useCallback, useRef, useState } from "react"; import { Link, useNavigate } from "@tanstack/react-router"; import { Pilcrow, LogOut, User as UserIcon, Maximize2, Minimize2, Menu, Inbox } from "lucide-react"; import { Avatar } from "@/client/components/ui/avatar"; import { DropdownPortal } from "@/client/components/ui/dropdown-portal"; import { useAuthStore, selectHasLocalSession } from "@/client/stores/auth-store"; import { useWorkspaceDirectoryStore, selectFirstMemberSlug } from "@/client/stores/workspace-directory"; import { useWorkspaceNavigationStore, selectLastVisitedWorkspaceId } from "@/client/stores/workspace-navigation"; import { useAuth } from "@/client/hooks/use-auth"; import { useSharedInboxNavigation } from "@/client/hooks/use-shared-inbox-navigation"; import { useScrollVisibility } from "@/client/hooks/use-scroll-visibility"; const MENU_ITEM_CLASS = "group flex min-h-8 w-full items-center gap-2 rounded px-2 py-1.5 text-left text-[13px] text-zinc-300 transition-[background-color,color] hover:bg-zinc-700 hover:text-zinc-100 focus-visible:bg-zinc-700 focus-visible:text-zinc-100 focus-visible:outline-none"; const MENU_ICON_CLASS = "flex w-4 shrink-0 items-center justify-center text-zinc-400 transition-colors group-hover:text-current group-focus-visible:text-current"; interface HeaderProps { expanded: boolean; onToggleLayout: () => void; onToggleMobileSidebar?: () => void; } export function Header({ expanded, onToggleLayout, onToggleMobileSidebar }: HeaderProps) { const hasLocalSession = useAuthStore(selectHasLocalSession); const user = useAuthStore((s) => s.user); const { logout } = useAuth(); const navigate = useNavigate(); const visible = useScrollVisibility("main-content"); const [menuOpen, setMenuOpen] = useState(false); const menuTriggerRef = useRef(null); const lastVisitedId = useWorkspaceNavigationStore(selectLastVisitedWorkspaceId); const memberSlug = useWorkspaceDirectoryStore((s) => selectFirstMemberSlug(s, lastVisitedId)); const homeSlug = hasLocalSession ? memberSlug : null; const { canLeaveSharedInbox, isSharedInbox, toggleSharedInbox } = useSharedInboxNavigation(); const closeMenu = useCallback(() => setMenuOpen(false), []); const handleLogout = useCallback(async () => { setMenuOpen(false); await logout(); navigate({ to: "/login", search: { redirect: undefined } }); }, [logout, navigate]); return (
{hasLocalSession && onToggleMobileSidebar && ( )} bland Docs on Cloudflare
{hasLocalSession && ( )} {hasLocalSession && ( )} {hasLocalSession && ( <> {menuOpen && (

{user?.name}

{user?.email}

Profile
)} )}
); }