Files
tia-love/internal/ui/components/sparkline.go
T

39 lines
786 B
Go

package components
import "math"
// sparkChars — delapan level blok (PRD F-005).
var sparkChars = []rune("▁▂▃▄▅▆▇█")
// Sparkline — grafik mini dari nilai (normalisasi ke maksimum).
// w = lebar maksimum; nilai terbaru ada di kanan. Kosong → "".
func Sparkline(vals []float64, w int) string {
if len(vals) == 0 || w <= 0 {
return ""
}
if len(vals) > w {
vals = vals[len(vals)-w:]
}
maxV := 0.0
for _, v := range vals {
if v > maxV {
maxV = v
}
}
if maxV <= 0 {
maxV = 1
}
out := make([]rune, len(vals))
for i, v := range vals {
idx := int(math.Round(v / maxV * float64(len(sparkChars)-1)))
if idx < 0 {
idx = 0
}
if idx >= len(sparkChars) {
idx = len(sparkChars) - 1
}
out[i] = sparkChars[idx]
}
return string(out)
}