export enum VoiceName { Puck = 'Puck', Charon = 'Charon', Kore = 'Kore', Fenrir = 'Fenrir', Zephyr = 'Zephyr', Aoede = 'Aoede', } export enum PlaybackStatus { IDLE = 'IDLE', LOADING_TEXT = 'LOADING_TEXT', LOADING_AUDIO = 'LOADING_AUDIO', READY = 'READY', PLAYING = 'PLAYING', PAUSED = 'PAUSED', ERROR = 'ERROR', COMPLETED = 'COMPLETED' } export interface AudioSegment { id: string; text: string; audioUrl?: string; // Blob URL for this specific segment isLoading: boolean; hasError: boolean; } export interface Article { id: string; url: string; title: string; // We keep the full text for display/reference text: string; // We split content into segments for faster playback segments: AudioSegment[]; currentSegmentIndex: number; status: PlaybackStatus; errorMessage?: string; } export interface PlayerState { isPlaying: boolean; playbackRate: number; currentArticleId: string | null; selectedVoice: VoiceName; } export interface ReaderSettings { isDarkMode: boolean; fontSize: 'sm' | 'base' | 'lg' | 'xl' | '2xl'; lineHeight: 'normal' | 'relaxed' | 'loose'; fontFamily: 'sans' | 'serif' | 'mono'; autoScroll: boolean; readingTone: 'clean' | 'sepia' | 'night'; pageWidth: 'cozy' | 'standard' | 'wide'; zenMode: boolean; }