import { formatRelativeTime, formatTokensCompact } from '@renderer/utils/formatters'; import type { MemberDetailTab } from './memberDetailTypes'; interface MemberDetailStatsProps { totalTasks: number; inProgressTasks: number; completedTasks: number; activityCount: number; totalTokens: number | null; statsLoading?: boolean; statsComputedAt?: string; onTabChange?: (tab: MemberDetailTab) => void; } const baseClasses = 'rounded-md border border-[var(--color-border)] bg-[var(--color-surface-raised)] px-2.5 py-1.5'; const clickableClasses = 'cursor-pointer transition-colors hover:border-[var(--color-border-emphasis)] hover:bg-[var(--color-surface-overlay)]'; const StatBlock = ({ label, value, sub, onClick, }: { label: string; value: string | number; sub?: string; onClick?: () => void; }): React.JSX.Element => { const classes = onClick ? `${baseClasses} ${clickableClasses}` : baseClasses; const content = ( <>

{value}

{label}

{sub &&

{sub}

} ); if (onClick) { return ( ); } return
{content}
; }; export const MemberDetailStats = ({ totalTasks, inProgressTasks, completedTasks, activityCount, totalTokens, statsLoading, statsComputedAt, onTabChange, }: MemberDetailStatsProps): React.JSX.Element => { const tokensValue = statsLoading ? '...' : totalTokens != null ? formatTokensCompact(totalTokens) : '—'; const tokensSub = !statsLoading && statsComputedAt ? `updated ${formatRelativeTime(statsComputedAt)}` : undefined; return (
0 ? `in progress: ${inProgressTasks}` : undefined} onClick={onTabChange ? () => onTabChange('tasks') : undefined} /> onTabChange('tasks') : undefined} /> onTabChange('activity') : undefined} /> onTabChange('stats') : undefined} />
); };