import { useEffect, useState } from 'react'; // Voice UI is gated on the `voiceEnabled` UI preference (toggled in Quick Settings / // the Settings modal). This is a lightweight read-only view of that preference so the // mic/speak controls can hide themselves, kept in sync via the same events // useUiPreferences emits. No server probe. const STORAGE_KEY = 'uiPreferences'; const SYNC_EVENT = 'ui-preferences:sync'; function readVoiceEnabled(): boolean { try { const raw = localStorage.getItem(STORAGE_KEY); if (!raw) return false; const parsed = JSON.parse(raw); return parsed?.voiceEnabled === true || parsed?.voiceEnabled === 'true'; } catch { return false; } } export function useVoiceAvailable(): boolean { const [enabled, setEnabled] = useState(() => typeof window === 'undefined' ? false : readVoiceEnabled(), ); useEffect(() => { const update = () => setEnabled(readVoiceEnabled()); window.addEventListener('storage', update); window.addEventListener(SYNC_EVENT, update as EventListener); return () => { window.removeEventListener('storage', update); window.removeEventListener(SYNC_EVENT, update as EventListener); }; }, []); return enabled; }