const ScoreField = ({ score, minScore, maxScore, isMachineTranslated = false, ciLower = null, ciUpper = null }) => { let percentage = 100 let barColor = "rgba(210, 106, 255, 0.1)" // light violet for missing data let ciLowerPercentage = null let ciUpperPercentage = null if (score !== null) { // Calculate percentage based on the provided min and max scores // This normalizes the score to a 0-100 range for visualization const normalizedScore = Math.min(Math.max(score, minScore), maxScore) percentage = ((normalizedScore - minScore) / (maxScore - minScore)) * 100 // Continuous color gradient from red to green based on score // For a smooth transition, calculate the RGB values directly // Red component decreases as score increases const red = Math.round(255 * (1 - percentage / 100)) // Green component increases as score increases const green = Math.round(255 * (percentage / 100)) // Use a low opacity for subtlety (0.1-0.2 range) const opacity = 0.1 + (percentage / 100) * 0.1 barColor = `rgba(${red}, ${green}, 0, ${opacity.toFixed(2)})` // Calculate CI percentages if available if (ciLower !== null && ciUpper !== null) { const normalizedCiLower = Math.min(Math.max(ciLower, minScore), maxScore) const normalizedCiUpper = Math.min(Math.max(ciUpper, minScore), maxScore) ciLowerPercentage = ((normalizedCiLower - minScore) / (maxScore - minScore)) * 100 ciUpperPercentage = ((normalizedCiUpper - minScore) / (maxScore - minScore)) * 100 } } return (