import { AlertTriangle, CheckCircle2, Copy, Loader2, MoonStar, Sparkles, XCircle } from "lucide-react";
import type { ReactNode } from "react";
import { cx } from "../utils/classes";
interface EmptyStateProps {
title: string;
description: string;
actionLabel?: string;
onAction?: () => void;
icon?: ReactNode;
}
export function EmptyState({ title, description, actionLabel, onAction, icon }: EmptyStateProps) {
return (
{icon ?? }
{title}
{description}
{actionLabel && onAction && (
)}
);
}
interface LoadingStateProps {
label: string;
compact?: boolean;
}
export function LoadingState({ label, compact }: LoadingStateProps) {
return (
{label}
);
}
interface ErrorStateProps {
title: string;
reason?: string;
diagnosticId?: string;
onRetry?: () => void;
compact?: boolean;
}
export function ErrorState({ title, reason, diagnosticId, onRetry, compact }: ErrorStateProps) {
return (
{title}
{reason &&
{reason}
}
{diagnosticId &&
}
{onRetry && (
)}
);
}
interface ResultBadgeProps {
status: "pending" | "succeeded" | "failed";
label: string;
}
export function ResultBadge({ status, label }: ResultBadgeProps) {
const icon =
status === "pending" ? : status === "succeeded" ? : ;
return (
{icon}
{label}
);
}
interface DiagnosticSummaryProps {
diagnosticId: string;
detail?: string;
}
export function DiagnosticSummary({ diagnosticId, detail }: DiagnosticSummaryProps) {
const summary = detail ? `${diagnosticId} ${detail}` : diagnosticId;
return (
{diagnosticId}
);
}