@voxket-ai/voxket-live
Version:
A React widget for embedding Voxket-powered audio/video/chat experiences.
93 lines (92 loc) • 2.78 kB
TypeScript
/**
* Video Component Types
* Core types for video functionality in the Voxket SDK
*/
export interface VideoTrack {
id: string;
participantId: string;
isLocal: boolean;
isEnabled: boolean;
isScreenShare: boolean;
dimensions?: {
width: number;
height: number;
};
source?: 'camera' | 'screen' | 'app';
}
export interface VideoLayout {
type: 'grid' | 'speaker' | 'sidebar' | 'picture-in-picture' | 'gallery';
maxParticipants?: number;
showLocalVideo?: boolean;
aspectRatio?: '16:9' | '4:3' | '1:1' | 'auto';
}
export interface VideoTileProps {
track: VideoTrack;
participantName?: string;
showControls?: boolean;
showName?: boolean;
showMuteIndicator?: boolean;
isPinned?: boolean;
className?: string;
onClick?: (track: VideoTrack) => void;
onPin?: (track: VideoTrack) => void;
onUnpin?: (track: VideoTrack) => void;
}
export interface VideoGridProps {
tracks: VideoTrack[];
layout: VideoLayout;
className?: string;
onLayoutChange?: (layout: VideoLayout) => void;
onTrackClick?: (track: VideoTrack) => void;
maxVisibleTracks?: number;
showPagination?: boolean;
}
export interface VideoControlsProps {
localTrack?: VideoTrack;
onToggleCamera?: () => void;
onToggleScreenShare?: () => void;
onLayoutChange?: (layout: VideoLayout) => void;
showLayoutControls?: boolean;
showCameraControls?: boolean;
showScreenShareControls?: boolean;
className?: string;
}
export interface PictureInPictureProps {
primaryTrack: VideoTrack;
secondaryTrack?: VideoTrack;
position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
size?: 'small' | 'medium' | 'large';
showControls?: boolean;
draggable?: boolean;
onSwap?: () => void;
className?: string;
}
export interface VideoState {
tracks: VideoTrack[];
layout: VideoLayout;
pinnedTrack?: VideoTrack;
isRecording: boolean;
pictureInPicture?: {
enabled: boolean;
primaryTrack?: VideoTrack;
secondaryTrack?: VideoTrack;
};
}
export interface VideoHookReturn {
tracks: VideoTrack[];
localTrack?: VideoTrack;
remoteTraracks: VideoTrack[];
pinnedTrack?: VideoTrack;
layout: VideoLayout;
isRecording: boolean;
toggleCamera: () => Promise<void>;
toggleScreenShare: () => Promise<void>;
setLayout: (layout: VideoLayout) => void;
pinTrack: (track: VideoTrack) => void;
unpinTrack: () => void;
startRecording: () => Promise<void>;
stopRecording: () => Promise<void>;
getTrackById: (id: string) => VideoTrack | undefined;
getTracksByParticipant: (participantId: string) => VideoTrack[];
isTrackActive: (track: VideoTrack) => boolean;
}