import type { Monitor } from "@/services/monitors"; import Players from "@/services/players"; import { lengthStr } from "@/utils/strings"; import { bind, Variable } from "astal"; import { App, Astal, Gtk } from "astal/gtk3"; import AstalMpris from "gi://AstalMpris"; import Visualiser from "./visualiser"; type Selected = Variable; const bindIcon = (player: AstalMpris.Player) => bind(player, "identity").as(i => { const icon = `caelestia-${i?.toLowerCase().replaceAll(" ", "-")}-symbolic`; return Astal.Icon.lookup_icon(icon) ? icon : "caelestia-media-generic-symbolic"; }); const PlayerButton = ({ player, selected, showDropdown, }: { player: AstalMpris.Player; selected: Selected; showDropdown: Variable; }) => ( ); const Selector = ({ player, selected }: { player?: AstalMpris.Player; selected: Selected }) => { const showDropdown = Variable(false); return ( {bind(Players.get_default(), "list").as(ps => ps .filter(p => p !== player) .map(p => ) )} ); }; const NoMedia = ({ selected }: { selected: Selected }) => (