aura-glass
Version:
A comprehensive glassmorphism design system for React applications with 142+ production-ready components
147 lines • 4.74 kB
TypeScript
import React from "react";
export interface MediaFile {
id: string;
type: "audio" | "video";
src: string;
title?: string;
description?: string;
duration?: number;
thumbnail?: string;
poster?: string;
size?: number;
format?: string;
quality?: "auto" | "144p" | "240p" | "360p" | "480p" | "720p" | "1080p" | "1440p" | "2160p";
chapters?: MediaChapter[];
subtitles?: MediaSubtitle[];
metadata?: Record<string, any>;
}
export interface MediaChapter {
id: string;
title: string;
startTime: number;
endTime: number;
thumbnail?: string;
description?: string;
}
export interface MediaSubtitle {
id: string;
language: string;
label: string;
src?: string;
content?: SubtitleEntry[];
isDefault?: boolean;
}
export interface SubtitleEntry {
id: string;
startTime: number;
endTime: number;
text: string;
speaker?: string;
confidence?: number;
}
export interface TranscriptEntry {
id: string;
startTime: number;
endTime: number;
text: string;
speaker?: string;
confidence?: number;
keywords?: string[];
sentiment?: "positive" | "neutral" | "negative";
summary?: string;
}
export interface MediaAnalytics {
totalViews: number;
averageWatchTime: number;
completionRate: number;
engagementPoints: Array<{
time: number;
engagement: number;
}>;
heatmapData: Array<{
time: number;
views: number;
}>;
deviceStats: Record<string, number>;
locationStats: Record<string, number>;
}
export interface PlaybackState {
mediaId: string;
currentTime: number;
duration: number;
isPlaying: boolean;
isLoading: boolean;
isError: boolean;
volume: number;
playbackRate: number;
quality: string;
isFullscreen: boolean;
isMuted: boolean;
buffered: TimeRanges | null;
activeChapter?: string;
activeSubtitle?: string;
}
interface MediaContextValue {
mediaFiles: MediaFile[];
addMediaFile: (file: MediaFile) => void;
removeMediaFile: (id: string) => void;
getMediaFile: (id: string) => MediaFile | undefined;
updateMediaFile: (id: string, updates: Partial<MediaFile>) => void;
playbackState: PlaybackState | null;
setPlaybackState: (state: PlaybackState | null) => void;
play: (mediaId: string) => void;
pause: () => void;
stop: () => void;
seekTo: (time: number) => void;
setVolume: (volume: number) => void;
setPlaybackRate: (rate: number) => void;
toggleMute: () => void;
toggleFullscreen: () => void;
setQuality: (quality: string) => void;
transcripts: Record<string, TranscriptEntry[]>;
generateTranscript: (mediaId: string) => Promise<void>;
searchTranscript: (mediaId: string, query: string) => TranscriptEntry[];
getTranscriptAtTime: (mediaId: string, time: number) => TranscriptEntry | undefined;
setActiveChapter: (mediaId: string, chapterId: string) => void;
getChapterAtTime: (mediaId: string, time: number) => MediaChapter | undefined;
setActiveSubtitle: (mediaId: string, subtitleId: string) => void;
generateSubtitles: (mediaId: string, language: string) => Promise<void>;
analytics: Record<string, MediaAnalytics>;
trackView: (mediaId: string, watchTime: number) => void;
trackEngagement: (mediaId: string, time: number, type: "play" | "pause" | "seek" | "fullscreen") => void;
generateSummary: (mediaId: string) => Promise<string>;
identifySpeakers: (mediaId: string) => Promise<string[]>;
extractKeywords: (mediaId: string) => Promise<string[]>;
analyzeSentiment: (mediaId: string) => Promise<Record<number, "positive" | "neutral" | "negative">>;
isRecording: boolean;
recordingDevices: MediaDeviceInfo[];
startRecording: (type: "audio" | "video", options?: RecordingOptions) => Promise<void>;
stopRecording: () => Promise<MediaFile | null>;
pauseRecording: () => void;
resumeRecording: () => void;
}
export interface RecordingOptions {
audio?: {
deviceId?: string;
echoCancellation?: boolean;
noiseSuppression?: boolean;
sampleRate?: number;
};
video?: {
deviceId?: string;
width?: number;
height?: number;
frameRate?: number;
facingMode?: "user" | "environment";
};
quality?: "low" | "medium" | "high";
format?: "webm" | "mp4" | "ogg";
}
export declare const MediaProvider: React.FC<{
children: React.ReactNode;
className?: string;
"data-testid"?: string;
}>;
export { MediaProvider as GlassMediaProvider };
export declare const useMedia: () => MediaContextValue;
//# sourceMappingURL=GlassMediaProvider.d.ts.map