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 }
}