import React, {ReactNode} from 'react'; import {ChevronRight} from 'lucide-react'; type EntityListItemSize = 'sm' | 'md'; type EntityListItemVariant = 'default' | 'transparent'; interface EntityListItemProps { onClick: () => void; avatar: ReactNode; title: string; subtitle?: string | null; extra?: ReactNode; size?: EntityListItemSize; variant?: EntityListItemVariant; } const rowClasses: Record> = { sm: { default: 'group flex items-center p-3 bg-tertiary rounded-lg cursor-pointer hover:bg-secondary transition-colors duration-150', transparent: 'group flex items-center p-3 rounded-lg cursor-pointer hover:bg-dark-background transition-colors duration-150', }, md: { default: 'group flex items-center p-4 bg-tertiary rounded-xl cursor-pointer hover:bg-secondary transition-colors duration-150', transparent: 'group flex items-center p-4 rounded-xl cursor-pointer hover:bg-dark-background transition-colors duration-150', }, }; const contentClasses: Record = { sm: { margin: 'ml-3', title: 'text-text-primary font-semibold text-sm group-hover:text-primary transition-colors truncate', subtitle: 'text-muted text-xs truncate', }, md: { margin: 'ml-4', title: 'text-text-primary font-bold text-base group-hover:text-primary transition-colors', subtitle: 'text-text-secondary text-sm mt-0.5 truncate', }, }; const chevronClasses: Record = { sm: { container: 'w-6 flex justify-center', icon: 'text-muted group-hover:text-primary group-hover:translate-x-1 transition-all w-3 h-3', }, md: { container: 'w-8 flex justify-center', icon: 'text-muted group-hover:text-primary group-hover:translate-x-1 transition-all w-4 h-4', }, }; export default function EntityListItem({ onClick, avatar, title, subtitle, extra, size = 'md', variant = 'default', }: EntityListItemProps): React.JSX.Element { const content: { margin: string; title: string; subtitle: string } = contentClasses[size]; const chevron: { container: string; icon: string } = chevronClasses[size]; return (
{avatar}
{title}
{subtitle && (
{subtitle}
)}
{extra && (
{extra}
)}
); }