import type { Corti } from "@corti/sdk";
import type { RecordingState } from "../types.js";
export type LanguagesChangedEventDetail = {
    languages: Corti.TranscribeSupportedLanguage[];
    selectedLanguage: string | undefined;
};
export type LanguageChangedEventDetail = {
    language: string;
};
export type RecordingDevicesChangedEventDetail = {
    devices: MediaDeviceInfo[];
    selectedDevice: MediaDeviceInfo | undefined;
};
export type RecordingStateChangedEventDetail = {
    state: RecordingState;
    connection?: "CONNECTING" | "OPEN" | "CLOSING" | "CLOSED" | null;
    processing?: boolean;
};
export type AudioLevelChangedEventDetail = {
    audioLevel: number;
};
export type TranscriptEventDetail = Corti.TranscribeTranscriptMessage;
export type CommandEventDetail = Corti.TranscribeCommandMessage;
export type UsageEventDetail = Corti.TranscribeUsageMessage;
export type DeltaUsageEventDetail = Corti.TranscribeDeltaUsageMessage;
export type ErrorEventDetail = {
    message: string;
};
export declare function languagesChangedEvent(languages: Corti.TranscribeSupportedLanguage[], selectedLanguage: string | undefined): CustomEvent<LanguagesChangedEventDetail>;
/**
 * @deprecated Use languagesChangedEvent instead. This event is kept for backward compatibility.
 */
export declare function languageChangedEvent(language: string): CustomEvent<LanguageChangedEventDetail>;
export declare function recordingDevicesChangedEvent(devices: MediaDeviceInfo[], selectedDevice: MediaDeviceInfo | undefined): CustomEvent<RecordingDevicesChangedEventDetail>;
export declare function recordingStateChangedEvent(state: RecordingState, options?: Partial<{
    connection: "CONNECTING" | "OPEN" | "CLOSING" | "CLOSED" | null;
    processing: boolean;
}>): CustomEvent<RecordingStateChangedEventDetail>;
export declare function transcriptEvent(detail: TranscriptEventDetail): CustomEvent<TranscriptEventDetail>;
export declare function commandEvent(detail: CommandEventDetail): CustomEvent<CommandEventDetail>;
export declare function usageEvent(detail: UsageEventDetail): CustomEvent<UsageEventDetail>;
export declare function deltaUsageEvent(detail: DeltaUsageEventDetail): CustomEvent<DeltaUsageEventDetail>;
export declare function errorEvent(error: unknown): CustomEvent<ErrorEventDetail>;
/**
 * @deprecated Use recording-state-changed event with detail.connection field instead.
 */
export declare function streamClosedEvent(detail: unknown): CustomEvent;
export declare function readyEvent(): CustomEvent;
export declare function audioLevelChangedEvent(audioLevel: number): CustomEvent<AudioLevelChangedEventDetail>;
export type NetworkActivityEventDetail = {
    direction: "sent" | "received";
    data: unknown;
};
export declare function networkActivityEvent(direction: "sent" | "received", data: unknown): CustomEvent<NetworkActivityEventDetail>;
export type KeybindingChangedEventDetail = {
    key: string | null | undefined;
    code: string | null | undefined;
    keybinding: string | null;
    type?: "push-to-talk" | "toggle-to-talk";
};
export type KeybindingActivatedEventDetail = {
    keyboardEvent: KeyboardEvent;
};
export declare function keybindingChangedEvent(key: string | null | undefined, code: string | null | undefined, keybinding: string | null, type?: "push-to-talk" | "toggle-to-talk"): CustomEvent<KeybindingChangedEventDetail>;
export declare function keybindingActivatedEvent(keyboardEvent: KeyboardEvent): CustomEvent<KeybindingActivatedEventDetail>;
