import Link from 'next/link'; import { Activity, MessageCircle, AtSign, MoonStar } from 'lucide-react'; export interface CardsData { active_groups: number; total_groups: number; total_messages: number; mentions: number; silent_groups: number; avg_per_group: number; } export default function StatGrid({ cards, days }: { cards?: CardsData; days: number }) { return (
} label="活跃群" value={cards?.active_groups ?? '—'} sub={cards ? `共扫 ${cards.total_groups} 个群` : '等待扫描'} /> } label="总消息" value={cards?.total_messages?.toLocaleString() ?? '—'} sub={ cards ? `过去 ${days * 24}h · 平均每群 ${cards.avg_per_group} 条` : '等待扫描' } /> } label="@ 我的" value={cards?.mentions ?? 0} sub={cards ? '需要回复' : '等待扫描'} accent="warn" href="/mentions" /> } label="静默群" value={cards?.silent_groups ?? '—'} sub={cards ? `过去 ${days * 24}h 无活动` : '等待扫描'} />
); } function Card({ icon, label, value, sub, accent, href, }: { icon: React.ReactNode; label: string; value: number | string; sub: string; accent?: 'warn'; href?: string; }) { const className = `card group relative overflow-hidden px-5 py-4 ${ href ? 'block transition-colors hover:border-[rgba(213,162,83,0.5)] hover:bg-[var(--surface-2)] focus:outline-none focus:ring-1 focus:ring-[var(--warn)]' : '' }`; const content = ( <>
{icon} {label} Metric
{value}
{sub}
); if (href) { return ( {content} ); } return (
{content}
); }