/** * TypeScript definitions for YouTube IFrame Player API * Reference: https://developers.google.com/youtube/iframe_api_reference */ export interface YouTubePlayerOptions { height?: string | number; width?: string | number; videoId?: string; playerVars?: YouTubePlayerVars; events?: YouTubePlayerEvents; } export interface YouTubePlayerVars { autoplay?: 0 | 1; cc_lang_pref?: string; cc_load_policy?: 1; color?: 'red' | 'white'; controls?: 0 | 1 | 2; disablekb?: 0 | 1; enablejsapi?: 0 | 1; end?: number; fs?: 0 | 1; hl?: string; iv_load_policy?: 1 | 3; list?: string; listType?: 'playlist' | 'search' | 'user_uploads'; loop?: 0 | 1; modestbranding?: 1; mute?: 0 | 1; origin?: string; playlist?: string; playsinline?: 0 | 1; rel?: 0 | 1; showinfo?: 0 | 1; start?: number; widget_referrer?: string; } export interface YouTubePlayerEvents { onReady?: (event: YouTubePlayerEvent) => void; onStateChange?: (event: YouTubePlayerEvent) => void; onPlaybackQualityChange?: (event: YouTubePlayerEvent) => void; onPlaybackRateChange?: (event: YouTubePlayerEvent) => void; onError?: (event: YouTubePlayerEvent) => void; onApiChange?: (event: YouTubePlayerEvent) => void; } export interface YouTubePlayerEvent { target: YouTubePlayer; data: any; } export declare enum YouTubePlayerState { UNSTARTED = -1, ENDED = 0, PLAYING = 1, PAUSED = 2, BUFFERING = 3, CUED = 5 } export interface YouTubePlayer { playVideo(): void; pauseVideo(): void; stopVideo(): void; seekTo(seconds: number, allowSeekAhead: boolean): void; mute(): void; unMute(): void; isMuted(): boolean; setVolume(volume: number): void; getVolume(): number; getPlayerState(): YouTubePlayerState; getCurrentTime(): number; getDuration(): number; getVideoLoadedFraction(): number; setPlaybackRate(suggestedRate: number): void; getPlaybackRate(): number; getAvailablePlaybackRates(): number[]; getAvailableQualityLevels(): string[]; getIframe(): HTMLIFrameElement; destroy(): void; } export interface YouTubeIframeAPI { Player: { new (elementId: string | HTMLElement, options: YouTubePlayerOptions): YouTubePlayer; }; PlayerState: typeof YouTubePlayerState; } declare global { interface Window { YT?: YouTubeIframeAPI; onYouTubeIframeAPIReady?: () => void; } }