Files
Dotfiles/roles/ags/files/widget/bar/buttons/Launcher.ts
Keule0010 8aa6bcd5cb Added ags
TODO copy ags config
2024-04-16 00:28:26 +02:00

50 lines
1.3 KiB
TypeScript

import PanelButton from "../PanelButton"
import options from "options"
import nix from "service/nix"
const { icon, label, action } = options.bar.launcher
function Spinner() {
const child = Widget.Icon({
icon: icon.icon.bind(),
class_name: Utils.merge([
icon.colored.bind(),
nix.bind("ready"),
], (c, r) => `${c ? "colored" : ""} ${r ? "" : "spinning"}`),
css: `
@keyframes spin {
to { -gtk-icon-transform: rotate(1turn); }
}
image.spinning {
animation-name: spin;
animation-duration: 1s;
animation-timing-function: linear;
animation-iteration-count: infinite;
}
`,
})
return Widget.Revealer({
transition: "slide_left",
child,
reveal_child: Utils.merge([
icon.icon.bind(),
nix.bind("ready"),
], (i, r) => Boolean(i || r)),
})
}
export default () => PanelButton({
window: "launcher",
on_clicked: action.bind(),
child: Widget.Box([
Spinner(),
Widget.Label({
class_name: label.colored.bind().as(c => c ? "colored" : ""),
visible: label.label.bind().as(v => !!v),
label: label.label.bind(),
}),
]),
})