* Implement strict typing (WIP). * changes * Finish type checks * Fix notification icon, matugen settings and update tsconfig. * OSD Styling updates and added the ability to configure OSD duration.
70 lines
2.8 KiB
TypeScript
70 lines
2.8 KiB
TypeScript
const powerProfiles = await Service.import("powerprofiles");
|
|
import { PowerProfile, PowerProfileObject, PowerProfiles } from "lib/types/powerprofiles.js";
|
|
import icons from "../../../icons/index.js";
|
|
|
|
const EnergyProfiles = () => {
|
|
const isValidProfile = (profile: string): profile is PowerProfile =>
|
|
profile === "power-saver" || profile === "balanced" || profile === "performance";
|
|
|
|
return Widget.Box({
|
|
class_name: "menu-section-container energy",
|
|
vertical: true,
|
|
children: [
|
|
Widget.Box({
|
|
class_name: "menu-label-container",
|
|
hpack: "fill",
|
|
child: Widget.Label({
|
|
class_name: "menu-label",
|
|
hexpand: true,
|
|
hpack: "start",
|
|
label: "Power Profile",
|
|
}),
|
|
}),
|
|
Widget.Box({
|
|
class_name: "menu-items-section",
|
|
vpack: "fill",
|
|
vexpand: true,
|
|
vertical: true,
|
|
children: powerProfiles.bind("profiles").as((profiles: PowerProfiles) => {
|
|
return profiles.map((prof: PowerProfileObject) => {
|
|
const profileLabels = {
|
|
"power-saver": "Power Saver",
|
|
balanced: "Balanced",
|
|
performance: "Performance",
|
|
};
|
|
|
|
const profileType = prof.Profile;
|
|
|
|
if (!isValidProfile(profileType)) {
|
|
return profileLabels.balanced;
|
|
}
|
|
|
|
return Widget.Button({
|
|
on_primary_click: () => {
|
|
powerProfiles.active_profile = prof.Profile;
|
|
},
|
|
class_name: powerProfiles.bind("active_profile").as((active) => {
|
|
return `power-profile-item ${active === prof.Profile ? "active" : ""}`;
|
|
}),
|
|
child: Widget.Box({
|
|
children: [
|
|
Widget.Icon({
|
|
class_name: "power-profile-icon",
|
|
icon: icons.powerprofile[profileType],
|
|
}),
|
|
Widget.Label({
|
|
class_name: "power-profile-label",
|
|
label: profileLabels[profileType],
|
|
}),
|
|
],
|
|
}),
|
|
});
|
|
});
|
|
}),
|
|
}),
|
|
],
|
|
});
|
|
};
|
|
|
|
export { EnergyProfiles };
|