'use client'; const cohorts = [ { label: 'Week 1', values: [100, 68, 45, 38, 31] }, { label: 'Week 2', values: [100, 72, 51, 42, 35] }, { label: 'Week 3', values: [100, 65, 48, 39, null] }, { label: 'Week 4', values: [100, 70, null, null, null] }, ]; const headers = ['Day 0', 'Day 1', 'Day 7', 'Day 14', 'Day 30']; function cellStyle(v: number | null) { if (v === null) { return { backgroundColor: 'transparent', borderColor: 'var(--border)', color: 'var(--muted-foreground)', }; } const opacity = 0.12 + (v / 100) * 0.7; return { backgroundColor: `rgba(34, 197, 94, ${opacity})`, borderColor: `rgba(34, 197, 94, 0.3)`, color: v > 55 ? 'rgba(0,0,0,0.75)' : 'var(--foreground)', }; } export function RetentionIllustration() { return (
{headers.map((h) => (
{h}
))}
{cohorts.map(({ label, values }) => (
{label}
{values.map((v, i) => (
{v !== null ? `${v}%` : '—'}
))}
))}
); }