"use client"; import { cn } from "@/lib/utils"; interface NutritionBarProps { label: string; value: string; unit?: string; percentage?: number; isHigh?: boolean; isLow?: boolean; recommended?: string; className?: string; } export function NutritionBar({ label, value, unit = "", percentage = 0, isHigh = false, isLow = false, className, }: NutritionBarProps) { const barWidth = Math.min(Math.max(percentage, 2), 100); const barColor = isHigh ? "bg-[var(--score-e)]" : isLow ? "bg-[var(--score-a)]" : percentage > 75 ? "bg-[var(--score-d)]" : percentage > 50 ? "bg-[var(--score-c)]" : "bg-[var(--accent)]"; const valueColor = isHigh ? "text-[var(--score-e)]" : isLow ? "text-[var(--score-a)]" : "text-[var(--fg-primary)]"; return (
{label} {value} {unit}
{/* Hairline track */}
); } interface NutritionGridProps { nutritionData: { energy?: string; fat?: string; carbohydrates?: string; proteins?: string; sugars?: string; fiber?: string; sodium?: string; }; className?: string; } const REFERENCE = { energy: 2000, fat: 65, carbohydrates: 300, proteins: 50, sugars: 50, fiber: 25, sodium: 2.3, }; function extractNumber(val?: string): number { if (!val) return 0; const m = val.match(/(\d+(?:\.\d+)?)/); return m ? parseFloat(m[1]) : 0; } function pct(val: string | undefined, ref: number): number { return (extractNumber(val) / ref) * 100; } export function NutritionGrid({ nutritionData, className }: NutritionGridProps) { const items = [ { label: "Energia", value: nutritionData.energy, unit: "kcal", ref: REFERENCE.energy }, { label: "Gorduras", value: nutritionData.fat, unit: "g", ref: REFERENCE.fat }, { label: "Carboidratos", value: nutritionData.carbohydrates, unit: "g", ref: REFERENCE.carbohydrates }, { label: "Proteínas", value: nutritionData.proteins, unit: "g", ref: REFERENCE.proteins }, { label: "Açúcares", value: nutritionData.sugars, unit: "g", ref: REFERENCE.sugars }, { label: "Fibras", value: nutritionData.fiber, unit: "g", ref: REFERENCE.fiber }, { label: "Sódio", value: nutritionData.sodium, unit: "g", ref: REFERENCE.sodium }, ]; return (
{items.map((item) => { const p = pct(item.value, item.ref); return ( 80} isLow={p < 20 && p > 0} /> ); })} {/* Legend */}
{[ { color: "bg-[var(--score-a)]", label: "Baixo" }, { color: "bg-[var(--accent)]", label: "Moderado" }, { color: "bg-[var(--score-e)]", label: "Alto" }, ].map(({ color, label }) => (
{label}
))} % do VDR
); }