'use client' import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar' import { Button } from '@/components/ui/button' import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu' import { ThemeToggle } from 'fumadocs-ui/components/layout/theme-toggle' import type { HomeLayoutProps } from 'fumadocs-ui/layouts/home' import type { LinkItemType } from 'fumadocs-ui/layouts/links' import { replaceOrDefault } from 'fumadocs-ui/layouts/shared' import { LogIn, LogOut, Settings, Shield, Tv, User } from 'lucide-react' import { signIn, signOut, useSession } from 'next-auth/react' import Link from 'next/link' import { Fragment } from 'react' import { Menu, MenuContent, MenuLinkItem, MenuTrigger } from './home/menu' import { NavbarLink, NavbarMenu, NavbarMenuContent, NavbarMenuLink, NavbarMenuTrigger, } from './home/navbar' import { Navbar } from './home/navbar' import { LargeSearchToggle, SearchToggle } from './search-toggle' export function Header({ nav: { enableSearch = true, ...nav } = {}, finalLinks, themeSwitch, }: HomeLayoutProps & { finalLinks: LinkItemType[] }) { const { data: session, status } = useSession() const isAuthenticated = status === 'authenticated' const isAdmin = isAuthenticated && session?.user?.role === 'admin' const navItems = finalLinks.filter((item) => ['nav', 'all'].includes(item.on ?? 'all') ) const menuItems = finalLinks.filter((item) => ['menu', 'all'].includes(item.on ?? 'all') ) return ( {nav.title} {nav.children}
{enableSearch ? ( <> ) : null} {replaceOrDefault( themeSwitch, )} {/* Sign In Button or User Menu */} {isAuthenticated && session?.user ? (

{session.user.name}

Profile Settings Stream Widget signOut()}> Sign out
) : ( )}
) } function NavbarLinkItem({ item, ...props }: { item: LinkItemType className?: string }) { if (item.type === 'custom') return
{item.children}
if (item.type === 'menu') { const children = item.items.map((child, j) => { if (child.type === 'custom') return {child.children} const { banner = child.icon ? (
{child.icon}
) : null, ...rest } = child.menu ?? {} return ( {rest.children ?? ( <> {banner}

{child.text}

{child.description ? (

{child.description}

) : null} )}
) }) return ( {item.url ? {item.text} : item.text} {children} ) } return ( {item.type === 'icon' ? item.icon : item.text} ) } function isSecondary(item: LinkItemType): boolean { return ( ('secondary' in item && item.secondary === true) || item.type === 'icon' ) }