Spaces:
Sleeping
Sleeping
gradient
Browse files- 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 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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
|