import { Card, Stack, Group, Text, Badge, Button, Loader, Progress, rem, } from '@mantine/core'; import { Download } from 'lucide-react'; import { MouseEvent } from 'react'; import styles from '@/styles/layout.module.css'; interface DownloadCardProps { name: string; size: string; version?: string; description?: string; isRecommended?: boolean; isCurrent?: boolean; isInstalled?: boolean; isDownloading?: boolean; downloadProgress?: number; disabled?: boolean; hasUpdate?: boolean; newerVersion?: string; onDownload?: (e: MouseEvent) => void; onMakeCurrent?: () => void; onUpdate?: (e: MouseEvent) => void; } export const DownloadCard = ({ name, size, version, description, isRecommended = false, isCurrent = false, isInstalled = false, isDownloading = false, downloadProgress = 0, disabled = false, hasUpdate = false, newerVersion, onDownload, onMakeCurrent, onUpdate, }: DownloadCardProps) => { const renderActionButton = () => { if (hasUpdate && onUpdate) { return ( ); } if (!isInstalled && onDownload) { return ( ); } if (isInstalled && !isCurrent && onMakeCurrent) { return ( ); } return null; }; return (
{name} {isCurrent && ( Current )} {isRecommended && ( Recommended )} {hasUpdate && ( Update Available )} {description && ( {description} )} {version && ( Version {version} )} {size && ( <> {size} )}
{renderActionButton()}
{isDownloading && downloadProgress !== undefined && ( {Math.min(downloadProgress, 100).toFixed(1)}% complete )}
); };