39 lines
786 B
Go
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)
|
|
}
|