33 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { Astal } from "astal/gtk4";
 | |
| import Notifd from "gi://AstalNotifd";
 | |
| import Hyprland from "gi://AstalHyprland";
 | |
| import { bind } from "astal";
 | |
| import { NotificationWidget } from "./modules/Notification";
 | |
| import { hyprToGdk } from "../../util/hyprland";
 | |
| 
 | |
| export default function Notifications() {
 | |
|     const notifd = Notifd.get_default();
 | |
|     const hyprland = Hyprland.get_default();
 | |
|     const { TOP, RIGHT } = Astal.WindowAnchor;
 | |
| 
 | |
|     return (
 | |
|         <window
 | |
|             name="notifications"
 | |
|             gdkmonitor={bind(hyprland, "focusedMonitor").as(
 | |
|                 (focused: Hyprland.Monitor) => hyprToGdk(focused),
 | |
|             )}
 | |
|             anchor={TOP | RIGHT}
 | |
|             visible={bind(notifd, "notifications").as(
 | |
|                 (notifications) => notifications.length > 0,
 | |
|             )}
 | |
|             child={
 | |
|                 <box vertical={true} cssClasses={["notifications"]}>
 | |
|                     {bind(notifd, "notifications").as((notifications) =>
 | |
|                         notifications.map((n) => <NotificationWidget notification={n} />),
 | |
|                     )}
 | |
|                 </box>
 | |
|             }
 | |
|         />
 | |
|     );
 | |
| }
 |