/**
 * RecorderService - Handles all MediaRecorder, audio monitoring, and video export logic
 */
export interface IRecorderEvents {
    onDurationUpdate?: (duration: number) => void;
    onRecordingComplete?: (blob: Blob) => void;
    onAudioLevelUpdate?: (level: number) => void;
    onError?: (error: Error) => void;
    onStreamEnded?: () => void;
}
export interface IRecordingOptions {
    mode: 'viewport' | 'screen';
    audioDeviceId?: string;
    viewportElement?: HTMLElement;
}
export declare class RecorderService {
    private mediaRecorder;
    private recordedChunks;
    private durationInterval;
    private _duration;
    private _recordedBlob;
    private _isRecording;
    private audioContext;
    private audioAnalyser;
    private audioMonitoringInterval;
    private monitoringStream;
    private currentStream;
    private events;
    constructor(events?: IRecorderEvents);
    get isRecording(): boolean;
    get duration(): number;
    get recordedBlob(): Blob | null;
    setEvents(events: IRecorderEvents): void;
    loadMicrophones(requestPermission?: boolean): Promise<MediaDeviceInfo[]>;
    startAudioMonitoring(deviceId: string): Promise<void>;
    stopAudioMonitoring(): void;
    startRecording(options: IRecordingOptions): Promise<void>;
    stopRecording(): void;
    private handleRecordingComplete;
    exportTrimmedVideo(videoElement: HTMLVideoElement, trimStart: number, trimEnd: number): Promise<Blob>;
    private recordTrimmedStream;
    reset(): void;
    dispose(): void;
}
