mirror of
https://github.com/yusufipk/OpenFrame.git
synced 2026-09-11 17:46:06 +00:00
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
This commit is contained in:
Vendored
+81
@@ -0,0 +1,81 @@
|
||||
// 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,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user