mirror of
https://github.com/tuxdotrs/tpanel.git
synced 2025-10-10 21:01:54 +05:30
feat: add dynamic battery icon
This commit is contained in:
@@ -1,12 +1,28 @@
|
||||
import { bind } from "astal";
|
||||
import { bind, Variable } from "astal";
|
||||
import AstalBattery from "gi://AstalBattery";
|
||||
|
||||
export const Battery = () => {
|
||||
const battery = AstalBattery.get_default();
|
||||
const chargingIcon = Variable.derive(
|
||||
[
|
||||
bind(battery, "percentage"),
|
||||
bind(battery, "charging"),
|
||||
bind(battery, "state"),
|
||||
],
|
||||
(percentage, charging, state) => {
|
||||
const batFull = state === AstalBattery.State.FULLY_CHARGED;
|
||||
const p = percentage * 100;
|
||||
|
||||
if (batFull) return "fa-battery-full-symbolic";
|
||||
if (charging) return "fa-battery-charging-symbolic";
|
||||
if (p < 30) return "fa-battery-low-symbolic";
|
||||
return p < 70 ? "fa-battery-medium-symbolic" : "fa-battery-full-symbolic";
|
||||
},
|
||||
);
|
||||
|
||||
return (
|
||||
<box cssClasses={["pill"]} visible={bind(battery, "isPresent")} spacing={5}>
|
||||
<image iconName="fa-battery-full-symbolic" />
|
||||
<image iconName={chargingIcon()} onDestroy={() => chargingIcon.drop()} />
|
||||
<label
|
||||
label={bind(battery, "percentage").as((p) => `${Math.floor(p * 100)}%`)}
|
||||
/>
|
||||
|
Reference in New Issue
Block a user