import { type RealtimeVoiceAudioLevelStore } from "./realtime-voice-audio-level.js"; export type RealtimeVoiceModeState = "connecting" | "listening" | "speaking" | "working" | "error" | "ending"; /** * User-visible copy stays outside the shared component so host catalogs remain * the source of truth. Callers should provide these values through `useT()`. */ export interface RealtimeVoiceModeCopy { entryButtonLabel: string; promptTitle: string; promptDescription: string; setupTitle: string; setupDescription: string; connectBuilder: string; useOpenAiKey: string; startWithOpenAiKey: string; startVoiceMode: string; keepDictating: string; rememberPreference: string; showChat: string; hideChat: string; endVoiceMode: string; voiceSettings: string; settings: { microphone: string; defaultMicrophone: string; microphoneSwitchFailed: string; language: string; autoLanguage: string; languages: Record, string>; intelligence: string; intelligenceLevels: Record; voiceStyle: string; voiceChangePending: string; voiceDescriptions: Record; }; status: Record; errors: { unsupported: string; responseFailed: string; sessionFailed: string; channelDisconnected: string; connectionTimedOut?: string; connectionFailed: string; offerFailed: string; }; } export interface RealtimeVoiceModeEntryProps { copy: RealtimeVoiceModeCopy; disabled?: boolean; providerStatusPending?: boolean; open?: boolean; onOpenChange?: (open: boolean) => void; onStartVoiceMode: () => void; onKeepDictating: () => void; preferredMode?: RealtimeVoiceInputMode | null; onRememberPreference?: (mode: RealtimeVoiceInputMode) => void; setupRequired?: boolean; openAiConfigured?: boolean; connectingBuilder?: boolean; onConnectBuilder?: () => void; onUseOpenAiKey?: () => void; className?: string; } export type RealtimeVoiceInputMode = "realtime" | "dictation"; /** * Composer mic entry point for apps that support a full-duplex voice session. * The first click offers voice mode without silently changing the existing * editable-dictation behavior. */ export declare function RealtimeVoiceModeEntry({ copy, disabled, providerStatusPending, open: controlledOpen, onOpenChange, onStartVoiceMode, onKeepDictating, preferredMode, onRememberPreference, setupRequired, openAiConfigured, connectingBuilder, onConnectBuilder, onUseOpenAiKey, className, }: RealtimeVoiceModeEntryProps): import("react").JSX.Element; export interface RealtimeVoiceModeDockProps { state: RealtimeVoiceModeState; copy: RealtimeVoiceModeCopy; chatVisible: boolean; audioLevels?: RealtimeVoiceAudioLevelStore; onToggleChat: () => void; onEndVoiceMode: () => void; settings?: RealtimeVoiceModeInlineSettings; errorMessage?: string | null; className?: string; } export interface RealtimeVoiceModeSettingOption { value: string; label: string; description?: string; } export interface RealtimeVoiceModeSelectSetting { label: string; value: string; options: readonly RealtimeVoiceModeSettingOption[]; onValueChange: (value: string) => void; disabled?: boolean; } export interface RealtimeVoiceModeInlineSettings { dialogLabel: string; appliesNextConversationNote?: string; microphoneError?: string; microphone: RealtimeVoiceModeSelectSetting; language: RealtimeVoiceModeSelectSetting; intelligence: RealtimeVoiceModeSelectSetting; voiceStyle: RealtimeVoiceModeSelectSetting; } /** * Persistent voice-session control. Toggling the main orb only changes chat * visibility; ending the realtime session is intentionally a separate action. */ export declare function RealtimeVoiceModeDock({ state, copy, chatVisible, audioLevels, onToggleChat, onEndVoiceMode, settings, errorMessage, className, }: RealtimeVoiceModeDockProps): import("react").JSX.Element; //# sourceMappingURL=RealtimeVoiceMode.d.ts.map