import SWeather, { type WeatherData } from "@/services/weather"; import { ellipsize } from "@/utils/strings"; import { bindCurrentTime } from "@/utils/system"; import { setupCustomTooltip, Calendar as WCal } from "@/utils/widgets"; import PopupWindow from "@/widgets/popupwindow"; import { bind, timeout } from "astal"; import { Astal, Gtk, type Gdk } from "astal/gtk3"; const getHoursFromUpdate = (data: WeatherData, hours: number) => { const updateTime = data.location.localtime_epoch; const updateHourStart = updateTime - (updateTime % 3600); let nextHour = new Date((updateHourStart + hours * 3600) * 1000).getHours(); if (nextHour >= 24) nextHour -= 24; return nextHour; }; const Time = () => ( ); const Calendar = () => ( { self.connect("button-press-event", (_, event: Gdk.Event) => { if (event.get_button()[1] === Astal.MouseButton.MIDDLE) { const now = new Date(); const child = self.get_child() as WCal | null; if (!child) return; child.select_month(now.getMonth(), now.getFullYear()); } }); }} > { const update = () => timeout(0.1, () => { const now = new Date(); if (self.month === now.getMonth() && self.year === now.getFullYear()) self.day = now.getDate(); else self.day = 0; }); self.connect("month-changed", update); self.connect("next-month", update); self.connect("prev-month", update); self.connect("next-year", update); self.connect("prev-year", update); update(); }} /> ); const Weather = () => { const weather = SWeather.get_default(); return ( {Array.from({ length: 4 }).map((_, i) => ( ))} ); }; export default () => ( );