UNPKG

@voxket-ai/voxket-live

Version:

A React widget for embedding Voxket-powered audio/video/chat experiences.

93 lines (92 loc) 2.78 kB
/** * 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; }