// Dashboard / Home screen. // Three composition variants controlled by the `variant` prop: // "classic" — KPI row + activity + side rail // "focused" — Today-first hero (next live session, top tasks) + KPIs below // "studio" — left = courses, right = students/inbox; KPIs as compact strip function Sparkline({ data, color = 'var(--accent)' }) { const w = 120, h = 32, p = 2; const min = Math.min(...data), max = Math.max(...data); const span = Math.max(1, max - min); const pts = data.map((v, i) => { const x = p + (i * (w - p * 2)) / (data.length - 1); const y = h - p - ((v - min) / span) * (h - p * 2); return [x, y]; }); const d = pts.map((pt, i) => (i === 0 ? `M${pt[0]},${pt[1]}` : `L${pt[0]},${pt[1]}`)).join(' '); const area = d + ` L${w - p},${h - p} L${p},${h - p} Z`; return ( ); } function KPI({ k, compact }) { return (
{k.label}
{k.value} {k.unit}
{k.delta}
); } function ActivityFeed() { const { ACTIVITY } = window.DATA; const iconFor = { lesson: 'check', chat: 'chat', cert: 'cert', sale: 'star', quiz: 'quiz' }; return (

فعالیت اخیر دانشجویان

{ACTIVITY.map(a => (
{a.who.split(' ').map(s=>s[0]).join('').slice(0,2)}
{a.who} · {a.did}
{a.course} · {a.t}
))}
); } function NextLiveCard({ hero }) { const { LIVE } = window.DATA; const next = LIVE[0]; return (
جلسه زنده‌ی بعدی {next.at}
{next.title}
{next.course}
{['#e8a07a','#7aa6c4','#a8c47a'].map((c,i) => (
))}
{next.registered} ثبت‌نام
); } function TodayCard() { const items = [ { ic: 'check', t: 'پاسخ به ۳ پرسش جدید در گفت‌وگوی دوره', done: false }, { ic: 'edit', t: 'ویرایش درس «گرید و سیستم لی‌اوت»', done: false }, { ic: 'send', t: 'ارسال پیام خوش‌آمد به ۱۲ دانشجوی جدید', done: true }, { ic: 'star', t: 'مرور تمرین‌های ارسال‌شده فصل دوم', done: false }, ]; return (

کارهای امروز

۳ از ۴ باقی‌مانده
{items.map((it, i) => (
{it.t}
))}
); } function CoursesMini() { const { COURSES } = window.DATA; return (

دوره‌های من

{COURSES.map((c, i) => (
{c.title}
{c.status === 'draft' ? `پیش‌نویس · ${c.progress}٪ آماده` : `${c.students} دانشجو · ⭐ ${c.rating}`}
{c.status === 'draft' ? پیش‌نویس : منتشر شده}
))}
); } function InboxMini() { const { INBOX } = window.DATA; return (

پیام‌های اخیر

۳ خوانده‌نشده
{INBOX.map((m, i) => (
{m.name.split(' ').map(s=>s[0]).join('').slice(0,2)}
{m.name} {m.t}
{m.msg}
{m.unread && }
))}
); } function RevenueChart() { const months = ['فر', 'ار', 'خر', 'تی', 'مر', 'شه', 'مه', 'آب', 'آذ', 'دی', 'به', 'اس']; const vals = [8, 11, 14, 12, 16, 18, 22, 20, 24, 26, 25, 28]; const max = Math.max(...vals); return (

درآمد ماهانه

۱۲ ماه گذشته · میلیون تومان
{vals.map((v, i) => (
{months[i]}
))}
); } function GreetingHero() { return (
سلام آرش 👋

امروز ۲۴ نفر در دوره‌هایت در حال یادگیری‌اند

); } function HomeScreen({ variant = 'classic' }) { const { KPIS } = window.DATA; if (variant === 'focused') { return (
{KPIS.map(k => )}
); } if (variant === 'studio') { return (
{KPIS.map(k => )}
); } // classic return (
{KPIS.map(k => )}
); } window.HomeScreen = HomeScreen;