// NTF-2: optional browser notifications for urgent notes and finished check-ins. // They name the patient at most, never health details (YCI-29). export const notificationsSupported = () => typeof window !== "undefined" && "Notification" in window; export const notificationsAllowed = () => notificationsSupported() && Notification.permission === "granted"; export async function askForNotifications(): Promise { if (!notificationsSupported()) return false; if (Notification.permission === "granted") return true; if (Notification.permission === "denied") return false; return (await Notification.requestPermission()) === "granted"; } export function notify(title: string, body: string, tag: string, onOpen?: () => void) { if (!notificationsAllowed()) return; try { const n = new Notification(title, { body, tag, icon: "/assets/logo-mark.svg" }); n.onclick = () => { window.focus(); onOpen?.(); n.close(); }; } catch { // Some browsers only allow notifications from a service worker; Context shows its own banner anyway. } }