import { useState } from "react"; interface SideBySideComparisonProps { beforeSrc: string; afterSrc: string; beforeSize?: number; afterSize?: number; } function formatSize(bytes: number): string { if (bytes < 1024) return `${bytes} B`; if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`; return `${(bytes / (1024 * 1024)).toFixed(2)} MB`; } export function SideBySideComparison({ beforeSrc, afterSrc, beforeSize, afterSize, }: SideBySideComparisonProps) { const [beforeDims, setBeforeDims] = useState<{ w: number; h: number } | null>(null); const [afterDims, setAfterDims] = useState<{ w: number; h: number } | null>(null); const savingsPercent = beforeSize && afterSize && beforeSize > 0 ? ((1 - afterSize / beforeSize) * 100).toFixed(1) : null; return (
{beforeDims.w} × {beforeDims.h}
)} {beforeSize != null &&{formatSize(beforeSize)}
}{afterDims.w} × {afterDims.h}
)} {afterSize != null &&{formatSize(afterSize)}
}0 ? "text-green-600 dark:text-green-400" : "text-red-500"}`} > {Number(savingsPercent) > 0 ? `${savingsPercent}% smaller` : `${Math.abs(Number(savingsPercent))}% larger`}
)}