interface CyclingPhraseProps {
    /** Words to cycle through. Cycle wraps around indefinitely. */
    words: readonly string[];
    /** Optional className applied to the outer span. */
    className?: string;
    /** Milliseconds per character during the morph step. */
    charMs?: number;
    /** Milliseconds to hold a fully-typed word before starting next morph. */
    holdMs?: number;
}
/**
 * Terminal-style cycling word: a fixed-size block cursor walks left-
 * to-right through the word, overwriting the previous word's char at
 * each position with the new word's char (or trimming trailing chars
 * if the new word is shorter). On hold the cursor is hidden — the
 * morph is the only time it appears. A static "..." suffix follows
 * the word at all times.
 *
 * Visual sequence (Thinking → Vibing):
 *   Thinking... (hold, no cursor)
 *   V█hinking...  → Vi█inking... → ... → Vibing█...
 *   Vibing... (hold, no cursor)
 *   ...
 *
 * Width is pinned to the longest word in the list (rendered invisibly
 * underneath) so cycling doesn't shift the dots or surrounding layout.
 */
export declare function CyclingPhrase({ words, className, charMs, holdMs, }: CyclingPhraseProps): import("react/jsx-runtime").JSX.Element | null;
export {};
//# sourceMappingURL=cycling-phrase.d.ts.map