import React, { forwardRef } from 'react'; import { clsx } from 'clsx'; export interface ListItemProps extends React.HTMLAttributes { title: string; subtitle?: string; description?: string; leadingContent?: React.ReactNode; trailingContent?: React.ReactNode; variant?: 'default' | 'compact' | 'detailed'; interactive?: boolean; active?: boolean; disabled?: boolean; divider?: boolean; } const ListItem = forwardRef(({ title, subtitle, description, leadingContent, trailingContent, variant = 'default', interactive = false, active = false, disabled = false, divider = false, className, children, onClick, ...props }, ref) => { const baseClasses = [ 'flex items-center w-full', 'transition-colors duration-200', ]; const variantClasses = { default: 'py-3 px-4', compact: 'py-2 px-3', detailed: 'py-4 px-4', }; const stateClasses = { interactive: interactive ? [ 'cursor-pointer', 'hover:bg-[var(--bg-secondary)]', 'focus:outline-none focus:ring-2 focus:ring-[var(--color-primary)]/20', ] : [], active: active ? 'bg-[var(--color-primary)]/10 border-r-2 border-[var(--color-primary)]' : '', disabled: disabled ? 'opacity-50 cursor-not-allowed' : '', }; const Component = interactive ? 'button' : 'div'; return ( <> {/* Leading content */} {leadingContent && (
{leadingContent}
)} {/* Main content */}

{title}

{subtitle && (

{subtitle}

)} {description && variant === 'detailed' && (

{description}

)} {children && (
{children}
)}
{/* Trailing content */} {trailingContent && (
{trailingContent}
)}
{divider && (
)} ); }); ListItem.displayName = 'ListItem'; export default ListItem;