File size: 1,637 Bytes
			
			68a93b5 1e8952a 9dbdcb2 1e8952a 9dbdcb2 1e8952a 9dbdcb2 a3e21c6 9dbdcb2 1e8952a 9dbdcb2  | 
								1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58  | 
								const ScoreField = (score, minScore, maxScore) => {
  let percentage = 100
  let barColor = "rgba(210, 106, 255, 0.1)" // light violet for missing data
  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)})`
  }
  return (
    <div
      style={{
        width: '100%',
        height: '100%',
        position: 'relative',
        padding: '0.5rem'
      }}
    >
      <div
        style={{
          position: 'absolute',
          top: 0,
          left: 0,
          height: '100%',
          width: `${percentage}%`,
          backgroundColor: barColor,
          zIndex: 0,
          transition: 'width 0.3s, background-color 0.3s'
        }}
      />
      <span
        style={{
          position: 'relative',
          zIndex: 1
        }}
      >
        {score !== null ? (score * 100).toFixed(1)+"%" : '–'}
      </span>
    </div>
  )
}
export default ScoreField |