'use client' import { getMasteryLevelInfo } from '@/lib/utils/masteryCalculator' interface MasteryIndicatorProps { level: number; // 0-100 isDecaying?: boolean; // 是否正在衰減 showPercentage?: boolean; // 是否顯示百分比數字 size?: 'small' | 'medium' | 'large'; baseMasteryLevel?: number; // 基礎熟悉度,用於判斷是否衰減 } export const MasteryIndicator: React.FC = ({ level, isDecaying = false, showPercentage = true, size = 'medium', baseMasteryLevel }) => { // 自動判斷是否衰減 const actualIsDecaying = isDecaying || (baseMasteryLevel !== undefined && level < baseMasteryLevel); const { label, color, bgColor } = getMasteryLevelInfo(level); const getColor = (level: number, isDecaying: boolean) => { if (isDecaying) return '#ff9500'; // 橙色表示衰減中 if (level >= 80) return '#34c759'; // 綠色表示熟悉 if (level >= 60) return '#007aff'; // 藍色表示良好 if (level >= 40) return '#ff9500'; // 橙色表示一般 return '#ff3b30'; // 紅色表示需要加強 }; const sizeClasses = { small: 'w-8 h-8', medium: 'w-12 h-12', large: 'w-16 h-16' }; const textSizes = { small: 'text-xs', medium: 'text-sm', large: 'text-base' }; return (
{/* 背景圓圈 */} {/* 進度圓圈 */} {showPercentage && (
{level}%
{actualIsDecaying && (
)}
)}
{label}
{actualIsDecaying && (
記憶衰減中
)}
) } export default MasteryIndicator