Files
OpenFrame/types/youtube.d.ts
T
Yusuf İpek 264392c2ec chore(init): scaffold OpenFrame — Next.js + Bun + shadcn
Initialize OpenFrame project with core scaffold and UI foundation.

- Project scaffold: Next.js 16.1 (App Router) + Bun runtime
- UI: shadcn/ui + TailwindCSS; landing, dashboard, project, and auth UIs
- Video support: provider abstraction (YouTube first), video player page with timestamped comments and custom timeline
- Auth & DB: NextAuth skeleton and Prisma schema (Postgres) included
- UX: dark-mode toggle, full-width layouts, comments sidebar, video route moved to /watch/[videoId]
- Dev: added YouTube iframe integration, custom controls, and TypeScript types
- Next steps: DB migrations, API routes (CRUD), real data wiring, voice-recording & sharing
2026-02-05 22:11:20 +03:00

82 lines
1.7 KiB
TypeScript

// YouTube IFrame API type declarations
interface Window {
YT: typeof YT;
onYouTubeIframeAPIReady: (() => void) | undefined;
}
declare namespace YT {
class Player {
constructor(
elementId: string | HTMLElement | null,
options?: PlayerOptions
);
playVideo(): void;
pauseVideo(): void;
stopVideo(): void;
seekTo(seconds: number, allowSeekAhead?: boolean): void;
mute(): void;
unMute(): void;
isMuted(): boolean;
setVolume(volume: number): void;
getVolume(): number;
getCurrentTime(): number;
getDuration(): number;
getPlayerState(): PlayerState;
destroy(): void;
}
interface PlayerOptions {
width?: number | string;
height?: number | string;
videoId?: string;
playerVars?: PlayerVars;
events?: PlayerEvents;
}
interface PlayerVars {
autoplay?: 0 | 1;
controls?: 0 | 1;
disablekb?: 0 | 1;
enablejsapi?: 0 | 1;
fs?: 0 | 1;
iv_load_policy?: 1 | 3;
modestbranding?: 0 | 1;
rel?: 0 | 1;
showinfo?: 0 | 1;
start?: number;
end?: number;
}
interface PlayerEvents {
onReady?: (event: PlayerEvent) => void;
onStateChange?: (event: OnStateChangeEvent) => void;
onPlaybackQualityChange?: (event: PlayerEvent) => void;
onPlaybackRateChange?: (event: PlayerEvent) => void;
onError?: (event: OnErrorEvent) => void;
onApiChange?: (event: PlayerEvent) => void;
}
interface PlayerEvent {
target: Player;
}
interface OnStateChangeEvent extends PlayerEvent {
data: PlayerState;
}
interface OnErrorEvent extends PlayerEvent {
data: number;
}
enum PlayerState {
UNSTARTED = -1,
ENDED = 0,
PLAYING = 1,
PAUSED = 2,
BUFFERING = 3,
CUED = 5,
}
}