/** * Geometry and clock text for {@link TxVoiceClip}. * * The clip grows with its recording, as a chat voice message does, but on a square-root curve: * the first seconds widen it noticeably and a long recording approaches the cap slowly, so a * thread of short and long messages does not alternate between stubs and full-width bars. */ /** Width of a clip whose length is unknown or under a second. */ export declare const CLIP_MIN_WIDTH = 140; /** Width reached at {@link CLIP_FULL_WIDTH_MS} and kept beyond it. */ export declare const CLIP_MAX_WIDTH = 300; export declare const CLIP_FULL_WIDTH_MS = 60000; /** One bar plus the gap after it. */ export declare const BAR_WIDTH = 3; export declare const BAR_GAP = 2; /** * Everything in the capsule that is not the waveform — inset, play key, the two gaps, the clock * and the end padding. Only the fallback for a first render with nothing measured yet: once * mounted, the bars count what the waveform's own box can hold. */ export declare const CLIP_CHROME_WIDTH = 90; /** Fewest bars a clip draws, however narrow its host squeezes it. */ export declare const MIN_BARS = 4; export declare function clipWidthFor(durationMs: number | undefined): number; export declare function barCountFor(waveWidth: number): number; /** Whole seconds a length reads as: rounded, and never 0 for a recording that has any length. */ export declare function wholeSeconds(seconds: number): number; /** * The countdown: the length as it reads at rest, less the whole seconds played. Counting down * from the rounded length means starting playback never changes the number on screen. */ export declare function remainingSeconds(total: number, position: number): number; /** `m:ss`, or `h:mm:ss` past an hour, for a count of whole seconds. */ export declare function formatClipTime(seconds: number): string;