import type { ReactNode, ComponentProps } from 'react' import { LayoutDashboard } from 'lucide-react' import { Sidebar, SidebarContent, SidebarFooter, SidebarHeader, SidebarMenu, SidebarMenuButton, SidebarMenuItem, } from '@mdxui/primitives/sidebar' import { useApp } from '../context/app-context' import { useNavigation } from '../context/navigation-context' import type { AppConfig } from '../types' export interface AppSidebarProps extends ComponentProps { /** Override default header content */ header?: ReactNode /** Override default navigation content */ nav?: ReactNode /** Override default footer content */ footer?: ReactNode /** Custom logo component */ logo?: ReactNode /** App config override (defaults to context) */ config?: AppConfig } /** * AppSidebar renders the main sidebar with app branding, navigation, and user menu. * Uses AppContext for configuration and navigation data. * * @example * ```tsx * } * footer={} * /> * ``` */ export function AppSidebar({ header, nav, footer, logo, config: configProp, variant = 'inset', ...props }: AppSidebarProps) { const appContext = useApp() const { Link } = useNavigation() const config = configProp ?? appContext.config const defaultHeader = ( {logo ?? (
)}
{config.name} {config.description && ( {config.description} )}
) return ( {header ?? defaultHeader} {nav && {nav}} {footer && {footer}} ) }