glutamatt HF Staff commited on
Commit
4ffc435
·
verified ·
1 Parent(s): 520340a
Files changed (1) hide show
  1. src/components/charts.ts +29 -5
src/components/charts.ts CHANGED
@@ -9,13 +9,37 @@ let durationChart: Chart | null = null;
9
  let tssChart: Chart | null = null;
10
  let caloriesChart: Chart | null = null;
11
 
12
- // ACWR color zones
13
  function getACWRColor(value: number | null): string {
14
  if (value === null || value === undefined) return 'rgba(148, 163, 184, 0.3)';
15
- if (value < 0.8) return 'rgba(59, 130, 246, 0.9)'; // Blue - Detraining risk
16
- if (value <= 1.3) return 'rgba(16, 185, 129, 0.9)'; // Green - Optimal
17
- if (value <= 1.5) return 'rgba(249, 115, 22, 0.9)'; // Orange - Warning
18
- return 'rgba(239, 68, 68, 0.9)'; // Red - Injury risk
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  }
20
 
21
  // Plugin to draw gradient-colored ACWR line
 
9
  let tssChart: Chart | null = null;
10
  let caloriesChart: Chart | null = null;
11
 
12
+ // ACWR color zones - gradual HSV-based color
13
  function getACWRColor(value: number | null): string {
14
  if (value === null || value === undefined) return 'rgba(148, 163, 184, 0.3)';
15
+
16
+ // Map ACWR value to hue (0-360)
17
+ // 0.0 -> 240 (blue)
18
+ // 0.8 -> 240 (blue)
19
+ // 1.0 -> 120 (green)
20
+ // 1.3 -> 120 (green)
21
+ // 1.5 -> 30 (orange)
22
+ // 2.0+ -> 0 (red)
23
+
24
+ const greenCenter = 0.8 + (1.3 - 0.8) / 2;
25
+ const orangeCenter = 1.3 + (1.5 - 1.3) / 2;
26
+
27
+ const lerp = (x: number, y: number, a: number) => x * (1 - a) + y * a;
28
+
29
+ let hue: number;
30
+ if (value < 0.8) {
31
+ hue = 240;
32
+ } else if (value <= greenCenter) {
33
+ hue = lerp(240, 120, (value - 0.8) / (greenCenter - 0.8)); // to green
34
+ } else if (value <= orangeCenter) {
35
+ hue = lerp(120, 30, (value - greenCenter) / (orangeCenter - greenCenter)); // to orange
36
+ } else if (value <= 1.5) {
37
+ hue = lerp(30, 0, (value - orangeCenter) / (1.5 - orangeCenter)); // to red
38
+ } else {
39
+ hue = 0;
40
+ }
41
+
42
+ return `hsla(${hue}, 85%, 55%, 0.9)`;
43
  }
44
 
45
  // Plugin to draw gradient-colored ACWR line