2024-01-20 03:55:08 +00:00
|
|
|
const batteryLevel = batteryPercent => ({
|
|
|
|
"-2": "not connected",
|
|
|
|
"-1": "charging"
|
|
|
|
})[batteryPercent] ?? batteryPercent + "%";
|
2024-01-20 03:49:58 +00:00
|
|
|
|
2024-01-20 03:55:08 +00:00
|
|
|
const batteryIcon = batteryPercent => ({
|
|
|
|
"-2": "action-unavailable",
|
|
|
|
"-1": "battery-ac-adapter"
|
|
|
|
})[batteryPercent] ?? "audio-headphones-symbolic";
|
2024-01-20 12:16:48 +00:00
|
|
|
|
2024-01-20 15:20:14 +00:00
|
|
|
const hex2rgb = (hex, h = hex.replace('#', '0x')) => ({ r: h >> 16 & 255, g: h >> 8 & 255, b: h & 255 });
|
|
|
|
const rgb2Hex = rgb => "#" + ((1 << 24) + (rgb.r << 16) + (rgb.g << 8) + rgb.b).toString(16).slice(1);
|
2024-01-20 14:16:18 +00:00
|
|
|
|
2024-01-20 15:20:14 +00:00
|
|
|
const interpolateColor = (ff, c) => {
|
|
|
|
if(!ff) return "transparent";
|
|
|
|
if(ff >= 1) return c.pop();
|
|
|
|
if(ff <= 0) return c[0];
|
2024-01-20 14:16:18 +00:00
|
|
|
|
2024-01-20 15:20:14 +00:00
|
|
|
let f = ff * (c.length - 1);
|
|
|
|
const i = ~~f;
|
|
|
|
f -= i;
|
|
|
|
const [ c1, c2 ] = [ hex2rgb(c[i]), hex2rgb(c[i + 1]) ];
|
2024-01-20 14:16:18 +00:00
|
|
|
|
|
|
|
return rgb2Hex({
|
2024-01-20 15:20:14 +00:00
|
|
|
r: parseInt(~~(c1.r + ((c2.r - c1.r) * f)), 10),
|
|
|
|
g: parseInt(~~(c1.g + ((c2.g - c1.g) * f)), 10),
|
|
|
|
b: parseInt(~~(c1.b + ((c2.b - c1.b) * f)), 10)
|
2024-01-20 14:16:18 +00:00
|
|
|
});
|
2024-01-20 12:16:48 +00:00
|
|
|
};
|