const batteryLevel = batteryPercent => ({ "-2": "not connected", "-1": "charging" })[batteryPercent] ?? batteryPercent + "%"; const batteryIcon = batteryPercent => ({ "-2": "action-unavailable", "-1": "battery-ac-adapter" })[batteryPercent] ?? "audio-headphones-symbolic"; 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); const interpolateColor = (f, c) => { if(!f) return "transparent"; if(f >= 1) return c.pop(); if(f <= 0) return c[0]; f *= c.length - 1; const i = ~~f; f -= i; const [ c1, c2 ] = [ hex2rgb(c[i]), hex2rgb(c[i + 1]) ]; return rgb2Hex({ r: c1.r + ((c2.r - c1.r) * f) | 10, g: c1.g + ((c2.g - c1.g) * f) | 10, b: c1.b + ((c2.b - c1.b) * f) | 10 }); };