import AstalBattery from "gi://AstalBattery" import { Variable, bind } from "astal" import Dropdown from "./Dropdown" const battery = AstalBattery.get_default() const CHARGING = 1 const DISCHARGING = 2 const FULLY_CHARGED = 4 function fmtTime(seconds: number) { if (!seconds || seconds <= 0) return null const h = Math.floor(seconds / 3600) const m = Math.round((seconds % 3600) / 60) return h > 0 ? `${h}h ${m}m` : `${m}m` } const status = Variable.derive( [bind(battery, "state"), bind(battery, "time-to-empty"), bind(battery, "time-to-full")], (state, toEmpty, toFull) => { if (state === FULLY_CHARGED) return "fully charged" if (state === CHARGING) { const t = fmtTime(toFull) return t ? `charging ยท ${t} to full` : "charging" } if (state === DISCHARGING) { const t = fmtTime(toEmpty) return t ? `${t} left` : "on battery" } return "" }, ) export function BatteryWidget(gdkmonitor: Gdk.Monitor) { if (!battery.isBattery) return { button: null, popup: null } const open = Variable(false) const button = ( ) const popup = ( ) return { button, popup } }