import * as React from "react"; import { cn } from "~/lib/utils"; interface PageLayoutProps { children: React.ReactNode; className?: string; } export function PageLayout({ children, className }: PageLayoutProps) { return
{children}
; } interface PageContentProps { children: React.ReactNode; className?: string; spacing?: "default" | "compact" | "large"; } export function PageContent({ children, className, spacing = "default", }: PageContentProps) { const spacingClasses = { default: "space-y-8", compact: "space-y-4", large: "space-y-12", }; return (
{children}
); } interface PageSectionProps { children: React.ReactNode; className?: string; title?: string; description?: string; actions?: React.ReactNode; } export function PageSection({ children, className, title, description, actions, }: PageSectionProps) { return (
{(title ?? description ?? actions) && (
{title && (

{title}

)} {description && (

{description}

)}
{actions &&
{actions}
}
)} {children}
); } interface PageGridProps { children: React.ReactNode; className?: string; columns?: 1 | 2 | 3 | 4; gap?: "default" | "compact" | "large"; } export function PageGrid({ children, className, columns = 3, gap = "default", }: PageGridProps) { const columnClasses = { 1: "grid-cols-1", 2: "grid-cols-1 md:grid-cols-2", 3: "grid-cols-1 md:grid-cols-2 lg:grid-cols-3", 4: "grid-cols-1 md:grid-cols-2 lg:grid-cols-4", }; const gapClasses = { default: "gap-4", compact: "gap-2", large: "gap-6", }; return (
{children}
); } // Empty state component for consistent empty states across pages interface EmptyStateProps { icon?: React.ReactNode; title: string; description?: string; action?: React.ReactNode; className?: string; } export function EmptyState({ icon, title, description, action, className, }: EmptyStateProps) { return (
{icon && (
{icon}
)}

{title}

{description && (

{description}

)} {action &&
{action}
}
); }