import type { ReactNode } from "react";
import { useState } from "react";
import Anchor from "./Anchor";
import { cn } from "../node/utils";
import { config as docuConfig } from "../node/client-routes";
import {
Navbar as BaseNavbar,
Logo as BaseLogo,
NavMenu as BaseNavMenu,
NavMenuLink as BaseNavMenuLink,
type NavMenuItem as BaseNavMenuItem,
} from "@docubook/ui-react/navbar";
export type { NavMenuItem } from "@docubook/ui-react/navbar";
interface AppNavMenuItem {
title: string;
href: string;
}
interface NavbarProps {
logo?: { src?: string; alt?: string };
logoText?: string;
menu: AppNavMenuItem[];
id?: string;
className?: string;
}
function AppLogo({ logo, logoText }: { logo?: { src?: string; alt?: string }; logoText?: string }) {
return ;
}
function AppNavMenu({ menu, currentPath }: { menu: AppNavMenuItem[]; currentPath?: string }) {
return ;
}
export function Navbar({ logo, logoText, menu, id = "navbar", className }: NavbarProps) {
const [currentPath] = useState(() =>
typeof window !== "undefined" ? window.location.pathname : "/"
);
return (
);
}
export function NavbarLayout({
start,
center,
end,
className,
}: {
start?: ReactNode;
center?: ReactNode;
end?: ReactNode;
className?: string;
}) {
return (
{start && {start}
}
{center && {center}
}
{end && {end}
}
);
}
export { BaseNavbar as Logo };
export function NavMenu({ items, activePath }: { items: BaseNavMenuItem[]; activePath?: string }) {
return ;
}
export function NavMenuLink({ item, isActive }: { item: BaseNavMenuItem; isActive?: boolean }) {
return ;
}
export function NavItem({ item }: { item: BaseNavMenuItem }) {
return (
{item.title}
);
}
export function MobileMenuToggle({
menu,
currentPath,
}: {
menu: AppNavMenuItem[];
currentPath?: string;
}) {
return (
{menu.map((item) => (
-
path === item.href ||
path.startsWith(item.href + "/") ||
path.endsWith(item.href + ".html")
: undefined
}
activeClassName="text-primary font-semibold"
>
{item.title}
))}
);
}
export function NavbarBrand({
logo,
logoText,
}: {
logo?: { src?: string; alt?: string };
logoText?: string;
}) {
return (
{logo?.src ? (

) : (
)}
{logoText ?? "Logo"}
);
}
export function GitHubLink({ repoUrl }: { repoUrl?: string }) {
if (!docuConfig.repo?.edit || !repoUrl) return null;
return (
);
}
export default Navbar;