Files
YoutubeRedzone/youtube.d.ts
2025-06-14 18:25:25 -04:00

70 lines
1.9 KiB
TypeScript

// A type for the global YT object and its Player constructor
declare global {
interface Window {
YT?: {
Player: new (frameId: string | HTMLDivElement, options: YT.PlayerOptions) => YT.Player;
// Add other YT properties if needed, like enums for player states
PlayerState?: {
ENDED: number;
PLAYING: number;
PAUSED: number;
BUFFERING: number;
CUED: number;
};
};
onYouTubeIframeAPIReady?: () => void;
}
}
// Minimal YT.Player and YT.PlayerOptions types (can be expanded)
declare namespace YT {
interface Player {
playVideo: () => void;
pauseVideo: () => void;
stopVideo: () => void;
mute: () => void;
unMute: () => void;
isMuted: () => boolean;
getVolume: () => number;
setVolume: (volume: number) => void;
getPlayerState: () => number;
addEventListener: <E extends keyof Events>(event: E, listener: Events[E]) => void;
destroy: () => void;
// Add more methods as needed
getIframe: () => HTMLIFrameElement;
getVideoUrl: () => string;
loadVideoById: (videoId: string, startSeconds?: number, suggestedQuality?: string) => void;
cueVideoById: (videoId: string, startSeconds?: number, suggestedQuality?: string) => void;
}
interface PlayerOptions {
height?: string;
width?: string;
videoId?: string;
playerVars?: PlayerVars;
events?: Events;
}
interface PlayerVars {
autoplay?: 0 | 1;
controls?: 0 | 1 | 2;
enablejsapi?: 0 | 1;
origin?: string;
rel?: 0 | 1;
showinfo?: 0 | 1;
// Add more playerVars as needed
[key: string]: any; // Allow other player vars
}
interface Events {
onReady?: (event: { target: Player }) => void;
onStateChange?: (event: { data: number; target: Player }) => void;
onError?: (event: { data: number; target: Player }) => void;
// Add more events as needed
}
}
// Add this export to make the file a module
export {};