'use client'; import { ReactNode } from 'react'; import { Header } from './Header'; import { Sidebar } from './Sidebar'; import { Breadcrumbs } from './Breadcrumbs'; /** * Layout Props */ interface LayoutProps { /** * Page content */ children: ReactNode; /** * Show sidebar (desktop only) * @default true */ showSidebar?: boolean; /** * Show header * @default true */ showHeader?: boolean; /** * Show breadcrumbs * @default true */ showBreadcrumbs?: boolean; /** * Maximum content width * @default '7xl' (1280px) */ maxWidth?: 'full' | '7xl' | '6xl' | '5xl' | '4xl'; /** * Custom page title (shown in breadcrumbs if provided) */ title?: string; } /** * Max width classes mapping */ const maxWidthClasses = { full: '', '7xl': 'max-w-7xl', '6xl': 'max-w-6xl', '5xl': 'max-w-5xl', '4xl': 'max-w-4xl', }; /** * Main Layout Component * * Provides consistent layout structure for authenticated pages. * * Layout structure: * - Desktop (lg+): Sidebar + Header + Main content * - Mobile/Tablet: Header + Main content * * Features: * - Responsive sidebar (desktop only) * - Sticky header * - Breadcrumb navigation * - Configurable max-width * - Proper spacing and padding * * @example * ```tsx * // Default layout (all features enabled) * *

Dashboard

*

Content here

*
* * // Custom layout without sidebar * *

Profile

*
* * // Full-width layout * *
Full width content
*
* ``` */ export function Layout({ children, showSidebar = true, showHeader = true, showBreadcrumbs = true, maxWidth = '7xl', title, }: LayoutProps) { const maxWidthClass = maxWidthClasses[maxWidth]; return (
{/* Sidebar - Desktop only */} {showSidebar && } {/* Main content area */}
{/* Header */} {showHeader &&
} {/* Page content */}
{/* Breadcrumbs */} {showBreadcrumbs && (
)} {/* Page title (if provided) */} {title && (

{title}

)} {/* Page content */} {children}
); }