import Link from 'fumadocs-core/link'; import { LanguageToggle, LanguageToggleText, } from 'fumadocs-ui/components/layout/language-toggle'; import { LargeSearchToggle, SearchToggle, } from 'fumadocs-ui/components/layout/search-toggle'; import { NavigationMenuList } from 'fumadocs-ui/components/ui/navigation-menu'; import type { HomeLayoutProps } from 'fumadocs-ui/layouts/home'; import { NavbarLink, NavbarMenu, NavbarMenuContent, NavbarMenuTrigger, } from 'fumadocs-ui/layouts/home/navbar'; import type { LinkItemType } from 'fumadocs-ui/layouts/links'; import { SearchOnly } from 'fumadocs-ui/provider'; import { ChevronDown, Languages } from 'lucide-react'; import { ThemeToggle } from '../../theme-toggle'; import { Menu, MenuContent, MenuLinkItem, MenuTrigger } from './menu'; import { Navbar, NavbarMenuLink } from './navbar'; export const Header = ({ nav: { enableSearch = true, ...nav } = {}, i18n = false, finalLinks, }: HomeLayoutProps & { finalLinks: LinkItemType[]; }) => { 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} {navItems .filter((item) => !isSecondary(item)) .map((item, i) => ( ))}
{enableSearch ? ( ) : null} {navItems.filter(isSecondary).map((item, i) => ( ))} {menuItems .filter((item) => !isSecondary(item)) .map((item, i) => ( ))}
{menuItems.filter(isSecondary).map((item, i) => ( ))}
{i18n ? ( ) : null}
); }; const 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, footer, ...rest } = child.menu ?? {}; return ( {banner ?? (child.icon ? (
{child.icon}
) : null)}

{child.text}

{child.description ? (

{child.description}

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