import type { ReactiveController, ReactiveControllerHost } from "lit";
interface MediaControllerHost extends ReactiveControllerHost {
    _selectedDevice?: MediaDeviceInfo;
    _debug_displayAudio?: boolean;
    dispatchEvent(event: Event): boolean;
}
export declare class MediaController implements ReactiveController {
    #private;
    host: MediaControllerHost;
    constructor(host: MediaControllerHost);
    hostDisconnected(): void;
    initialize(onTrackEnded?: () => void, dataHandler?: (data: Blob) => void): Promise<void>;
    getAudioLevel(): number;
    startAudioLevelMonitoring(onAudioLevelChange?: (level: number) => void): void;
    stopAudioLevelMonitoring(): void;
    cleanup(): Promise<void>;
    /**
     * Stops the media recorder and waits for all buffered data to be flushed.
     * This ensures the final ondataavailable event fires before resolving.
     */
    stopRecording(): Promise<void>;
    get mediaRecorder(): MediaRecorder | null;
    get audioLevel(): number;
}
export {};
