File size: 1,493 Bytes
9dbdcb2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a3e21c6
 
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
const ScoreField = (score, minScore, maxScore) => {
  // 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)
  const 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

  const 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 * 100).toFixed(1)}%
      </span>
    </div>
  )
}

export default ScoreField