/**
 * Above this fraction of a line changing, intra-line word highlighting reads as
 * noise — almost every span is "changed", so a flat whole-line colour is
 * clearer. Below it we paint only the genuinely altered sub-ranges brighter.
 */
export declare const CHANGE_THRESHOLD = 0.4;
/** One contiguous run of a removed/added line, flagged whether it changed. */
export interface WordSpan {
    text: string;
    /** True when this run differs between the old and new line. */
    changed: boolean;
}
/**
 * Pair a removed line with the added line that replaced it and return the
 * per-segment word diff for ONE side.
 *
 * `side` selects which line's segments we want: a removed-line render wants the
 * segments present in the old text (unchanged + removed), an added-line render
 * wants the segments present in the new text (unchanged + added). The other
 * side's segments are dropped so the caller paints exactly the line it is on.
 *
 * Word highlighting is suppressed — the whole line is returned as a single
 * `changed: true` span — when the changed character fraction exceeds
 * {@link CHANGE_THRESHOLD}, where scattered word spans read worse than a flat
 * line colour. The returned spans always concatenate back to the original line.
 */
export declare function wordDiffLine(oldLine: string, newLine: string, side: "removed" | "added"): WordSpan[];
