function clampIndex(index, length) { if (length <= 0) return 0 return Math.max(0, Math.min(length - 1, index)) } function selectProfileIndex(index, delta, profiles) { var values = Array.isArray(profiles) ? profiles : [] if (values.length === 0) return 0 return clampIndex(index + delta, values.length) } function parseKeyValue(raw) { var next = {} var lines = String(raw || "").split("\n") for (var i = 0; i < lines.length; i++) { var idx = lines[i].indexOf("\t") if (idx <= 0) continue next[lines[i].substring(0, idx)] = lines[i].substring(idx + 1).trim() } return next } function parseProfiles(raw, previousIndex) { var lines = String(raw || "").split("\n") var list = [] var active = "" for (var i = 0; i < lines.length; i++) { var line = lines[i].trim() if (!line) continue var parts = line.split("\t") list.push(parts[0]) if (parts[1] === "1") active = parts[0] } return { profiles: list, activeProfile: active, profileIndex: clampIndex(previousIndex || 0, list.length) } } function profileIcon(name) { if (name === "power-saver") return "󰌪" if (name === "balanced") return "󰊚" if (name === "performance") return "󰓅" return "󰂄" } function batteryFraction(device) { return device && device.isPresent ? Math.max(0, Math.min(1, device.percentage)) : 0 } function chargeThresholdActive(device, onBattery, states) { var d = device || {} var s = states || {} if (!(d && d.isPresent && !onBattery)) return false var fraction = batteryFraction(d) if (d.state === s.Discharging || d.state === s.PendingCharge) return true if (d.state === s.FullyCharged && fraction < 0.99) return true if (d.state !== s.Charging || fraction >= 0.99) return false return Number(d.changeRate || 0) <= 0.2 || Number(d.timeToFull || 0) >= 8 * 60 * 60 } function batteryIcon(device, onBattery, states) { var d = device || {} if (!d.isPresent) return "" var chargingIcons = ["󰢜", "󰂆", "󰂇", "󰂈", "󰢝", "󰂉", "󰢞", "󰂊", "󰂋", "󰂅"] var defaultIcons = ["󰁺", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"] var index = Math.max(0, Math.min(9, Math.floor(d.percentage * 10))) var threshold = chargeThresholdActive(d, onBattery, states) if (threshold) return defaultIcons[index] if (d.state === states.FullyCharged) return "󰂅" if (d.state === states.Charging) return chargingIcons[index] if (!onBattery) return "" return defaultIcons[index] } function modeLabel(device, onBattery, states) { var d = device || {} if (!d.isPresent) return "" var percentage = d.isPresent ? d.percentage : 0 if (chargeThresholdActive(d, onBattery, states)) return "Threshold" if (!onBattery && percentage >= 1) return "Fully charged" if (onBattery) return "On battery" return "Charging" } if (typeof module !== "undefined") { module.exports = { clampIndex: clampIndex, selectProfileIndex: selectProfileIndex, parseKeyValue: parseKeyValue, parseProfiles: parseProfiles, profileIcon: profileIcon, batteryFraction: batteryFraction, chargeThresholdActive: chargeThresholdActive, batteryIcon: batteryIcon, modeLabel: modeLabel } }