/** * Solicita permissão para notificações desktop */ export async function requestNotificationPermission(): Promise { if (!("Notification" in window)) { console.warn("Este navegador não suporta notificações desktop"); return "denied"; } if (Notification.permission === "granted") { return "granted"; } if (Notification.permission !== "denied") { return await Notification.requestPermission(); } return Notification.permission; } /** * Mostra uma notificação desktop */ export function showNotification(title: string, options?: NotificationOptions): Notification | null { if (!("Notification" in window)) { return null; } if (Notification.permission !== "granted") { return null; } try { return new Notification(title, { icon: "/favicon.png", badge: "/favicon.png", ...options, }); } catch (error) { console.error("Erro ao exibir notificação:", error); return null; } } /** * Toca o som de notificação */ export function playNotificationSound() { try { const audio = new Audio("/sounds/notification.mp3"); audio.volume = 0.5; audio.play().catch((err) => { console.warn("Não foi possível reproduzir o som de notificação:", err); }); } catch (error) { console.error("Erro ao tocar som de notificação:", error); } } /** * Verifica se o usuário está na aba ativa */ export function isTabActive(): boolean { return !document.hidden; }