/* Copyright (C) 2023-2026 QuantumNous This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . For commercial licensing, please contact support@quantumnous.com */ import { AlertTriangle, type LucideIcon } from 'lucide-react' import type { ReactNode } from 'react' import { useTranslation } from 'react-i18next' import { FadeIn } from '@/components/page-transition' import { Button } from '@/components/ui/button' import { Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, } from '@/components/ui/empty' import { cn } from '@/lib/utils' interface ErrorStateProps { icon?: LucideIcon title?: string description?: string onRetry?: () => void action?: ReactNode className?: string } export function ErrorState(props: ErrorStateProps) { const { t } = useTranslation() const Icon = props.icon ?? AlertTriangle return ( {props.title ?? t('Oops! Something went wrong')} {props.description != null && ( {props.description} )} {props.onRetry != null && ( )} {props.action} ) }