import { FC, ReactNode } from 'react'; import { VoiceStageState } from '../../voice/voiceStageState'; /** * Docked voice: a compact live controller, not the full stage shrunk. * * Measured in prod, the docked panel was 554px tall — the expanded composition * scaled down, with the same generous vertical rhythm in a space that cannot * carry it. Docked is a glance-and-listen surface: state, the last thing said, * and the controls. Everything else belongs to the expanded stage or the * transcript. * * ★ Two to three lines of caption, hard-clamped. The point is not to save * pixels — it is that a docked panel scrolling a long reply is the chat window * this feature exists to stop being. If the user wants the whole answer, they * expand or open the transcript. * * The row is deliberately horizontal: status and caption on the left, controls * on the right, so the panel reads as one strip rather than a stack. That is * what makes it feel like a controller instead of a small conversation. */ interface Props { state: VoiceStageState; /** Live user transcript, or the assistant's caption while speaking. */ caption: string | null; /** * Per-sentence progress through the spoken reply, when the engine reports it. * * ★★ Without this the docked strip showed the whole reply as one static * block: four acceptance criteria — caption/audio sync, current-sentence * emphasis, previous-sentence dimming, and not showing text ahead of the * audio — were implemented in `VoiceCaption` and simply unreachable here, * because the stage that renders it is only mounted when NOT docked. Docked * is the view every session opens in. */ spokenChunks?: { chunks: string[]; index: number; } | null; statusText: string; /** * Visible alongside a rotating status, e.g. "Microphone off". Only meaningful * with `rotateStatus`; `statusText` already carries it for the announcement. */ statusSuffix?: string | null; /** * Ask for the SHOWN status to rotate through the thinking phrases while the * assistant thinks — suppressed under reduced motion (OS or app setting, see * `usePrefersReducedMotion`). What is ANNOUNCED is always `statusText` — see * `VoiceStatusText`. */ rotateStatus?: boolean; /** Mic / interrupt control — the same orb, in its compact size. */ control: ReactNode; errorText?: string | null; } export declare const VoiceMiniController: FC; export {}; //# sourceMappingURL=VoiceMiniController.d.ts.map