import React from 'react'; import { LucideIcon } from 'lucide-react'; import { Button } from '../Button'; export interface EmptyStateProps { /** * Icon component to display (from lucide-react) */ icon: LucideIcon; /** * Main title text */ title: string; /** * Description text (can be a string or React node for complex content) */ description?: string | React.ReactNode; /** * Optional action button label */ actionLabel?: string; /** * Optional action button click handler */ onAction?: () => void; /** * Optional icon for the action button */ actionIcon?: LucideIcon; /** * Optional action button variant */ actionVariant?: 'primary' | 'secondary' | 'outline' | 'ghost'; /** * Optional action button size */ actionSize?: 'sm' | 'md' | 'lg'; /** * Additional CSS classes for the container */ className?: string; } /** * EmptyState Component * * A reusable component for displaying empty states across the application * with consistent styling and behavior. * * @example * ```tsx * setShowModal(true)} * /> * ``` */ export const EmptyState: React.FC = ({ icon: Icon, title, description, actionLabel, onAction, actionIcon: ActionIcon, actionVariant = 'primary', actionSize = 'md', className = '', }) => { return (
{/* Icon */} {/* Title */}

{title}

{/* Description */} {description && (
{typeof description === 'string' ? (

{description}

) : ( description )}
)} {/* Action Button */} {actionLabel && onAction && ( )}
); }; export default EmptyState;