import { AccessibilityProps, TokenContract } from '../shared/index.js';

type VoicePillSpeaker = 'ai' | 'user' | (string & {});
type VoicePillPosition = 'inline' | 'top-start' | 'top-center' | 'top-end' | 'bottom-start' | 'bottom-center' | 'bottom-end' | 'left-start' | 'left-center' | 'left-end' | 'right-start' | 'right-center' | 'right-end';
interface VoicePillProps {
    /** Speaker identity used for labels and data-speaker theming */
    speaker?: VoicePillSpeaker;
    /** Primary voice status text */
    label: string;
    /** Optional secondary status text */
    sub?: string;
    /** Voice activity intensity, clamped from 0 to 1 */
    intensity?: number;
    /** Whether voice output/input is muted */
    muted?: boolean;
    /** Callback for the optional mute toggle */
    onToggleMute?: () => void;
    /** Viewport position, or inline for embedding inside another layout */
    position?: VoicePillPosition;
}
interface VoicePillStyleVars {
    [key: `--${string}`]: string;
}
interface VoicePillAPI {
    /** Display speaker label */
    speaker: string;
    /** Normalized key for data-speaker */
    speakerKey: string;
    /** Primary label */
    label: string;
    /** Secondary label */
    sub?: string;
    /** Clamped raw intensity */
    intensity: number;
    /** Intensity used for visual animation after muted state is applied */
    visualIntensity: number;
    /** Muted state */
    muted: boolean;
    /** Viewport position, or inline for embedding inside another layout */
    position: VoicePillPosition;
    /** Fallback initials for the speaker avatar */
    initials: string;
    /** Invoke the mute callback when provided */
    toggleMute(): void;
    /** ARIA props for the live status pill */
    ariaProps: Partial<AccessibilityProps> & Record<string, unknown>;
    /** ARIA props for the mute toggle */
    toggleMuteAriaProps: Record<string, unknown>;
    /** Data attributes reflecting speaker/state */
    dataAttributes: Record<string, string>;
    /** CSS custom properties that drive pulse visuals */
    style: VoicePillStyleVars;
}
declare const DEFAULT_VOICE_PILL_SPEAKER = "ai";
declare const DEFAULT_VOICE_PILL_POSITION: VoicePillPosition;
declare function clampVoicePillIntensity(intensity?: number): number;
declare function getVoicePillSpeakerKey(speaker?: VoicePillSpeaker): string;
declare function getVoicePillSpeakerLabel(speaker?: VoicePillSpeaker): string;
declare function getVoicePillInitials(speaker?: VoicePillSpeaker): string;
declare function getVoicePillPosition(position?: VoicePillPosition): VoicePillPosition;
declare function getVoicePillAriaLabel(props: {
    speaker?: VoicePillSpeaker;
    label: string;
    sub?: string;
    muted?: boolean;
}): string;
declare function getVoicePillPulseStyle(intensity?: number, muted?: boolean): VoicePillStyleVars;
declare function createVoicePill(props: VoicePillProps): VoicePillAPI;

declare const voicePillTokens: TokenContract;
declare const voicePillRootStyles = "inline-flex min-w-0 max-w-[min(calc(100vw-2rem),22rem)] items-center gap-3 rounded-full border border-border bg-background px-3 py-2 text-foreground shadow-lg ring-1 ring-border/50 transition-opacity data-[muted=true]:opacity-80";
declare const voicePillSpeakerStyles = "[--rfr-voice-pill-accent:hsl(var(--primary))] [--rfr-voice-pill-accent-foreground:hsl(var(--primary-foreground))] data-[speaker=user]:[--rfr-voice-pill-accent:hsl(var(--accent-foreground))] data-[speaker=user]:[--rfr-voice-pill-accent-foreground:hsl(var(--accent))] data-[muted=true]:[--rfr-voice-pill-accent:hsl(var(--muted-foreground))]";
declare const voicePillPositionVariants: (props?: ({
    position?: "inline" | "top-start" | "top-center" | "top-end" | "bottom-start" | "bottom-center" | "bottom-end" | "left-start" | "left-center" | "left-end" | "right-start" | "right-center" | "right-end" | undefined;
} & {
    className?: string;
}) | undefined) => string;
declare const voicePillAvatarWrapStyles = "relative flex h-10 w-10 shrink-0 items-center justify-center";
declare const voicePillPulseRingStyles = "pointer-events-none absolute inset-0 rounded-full border border-[var(--rfr-voice-pill-accent)] opacity-[var(--rfr-voice-pill-ring-opacity)] motion-safe:animate-ping motion-reduce:animate-none";
declare const voicePillAvatarStyles = "relative z-10 flex h-10 w-10 items-center justify-center overflow-hidden rounded-full bg-[var(--rfr-voice-pill-accent)] text-[var(--rfr-voice-pill-accent-foreground)] text-xs font-semibold uppercase";
declare const voicePillTextStyles = "min-w-0 flex-1";
declare const voicePillLabelStyles = "block truncate text-sm font-medium leading-tight";
declare const voicePillSubStyles = "block truncate text-xs leading-tight text-muted-foreground";
declare const voicePillMuteButtonStyles = "inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-full border border-border text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring";

export { DEFAULT_VOICE_PILL_POSITION, DEFAULT_VOICE_PILL_SPEAKER, type VoicePillAPI, type VoicePillPosition, type VoicePillProps, type VoicePillSpeaker, type VoicePillStyleVars, clampVoicePillIntensity, createVoicePill, getVoicePillAriaLabel, getVoicePillInitials, getVoicePillPosition, getVoicePillPulseStyle, getVoicePillSpeakerKey, getVoicePillSpeakerLabel, voicePillAvatarStyles, voicePillAvatarWrapStyles, voicePillLabelStyles, voicePillMuteButtonStyles, voicePillPositionVariants, voicePillPulseRingStyles, voicePillRootStyles, voicePillSpeakerStyles, voicePillSubStyles, voicePillTextStyles, voicePillTokens };
