import { formatBytes } from '~/lib/util' import DynamicIcon, { DynamicIconName } from './DynamicIcon' import { CuratedCategory, CategoryTier } from '../../types/downloads' import classNames from 'classnames' import { IconChevronRight, IconCircleCheck } from '@tabler/icons-react' export interface CategoryCardProps { category: CuratedCategory selectedTier?: CategoryTier | null onClick?: (category: CuratedCategory) => void } const CategoryCard: React.FC = ({ category, selectedTier, onClick }) => { // Calculate total size range across all tiers const getTierTotalSize = (tier: CategoryTier, allTiers: CategoryTier[]): number => { let total = tier.resources.reduce((acc, r) => acc + r.size_mb * 1024 * 1024, 0) // Add included tier sizes recursively if (tier.includesTier) { const includedTier = allTiers.find(t => t.slug === tier.includesTier) if (includedTier) { total += getTierTotalSize(includedTier, allTiers) } } return total } const minSize = getTierTotalSize(category.tiers[0], category.tiers) const maxSize = getTierTotalSize(category.tiers[category.tiers.length - 1], category.tiers) return (
onClick?.(category)} >

{category.name}

{selectedTier ? (
{selectedTier.name}
) : ( )}

{category.description}

{category.tiers.length} tiers available

{category.tiers.map((tier) => ( {tier.name} {tier.recommended && ' *'} ))}

Size: {formatBytes(minSize, 1)} - {formatBytes(maxSize, 1)}

) } export default CategoryCard