import { HighlightRule } from './composer';
export interface HighlightMatch {
    start: number;
    end: number;
    class: string | undefined;
}
/**
 * Find all non-overlapping highlight ranges in `text` for the given rules.
 *
 * - A string rule is matched as a case-insensitive literal (regex metachars are escaped).
 * - An object rule uses `new RegExp(pattern, flags ?? 'gi')`.
 * - Overlapping ranges are resolved in earliest-start order; later ranges that
 *   overlap an already-claimed span are dropped.
 * - Zero-width matches are skipped to avoid infinite loops.
 * - Returns `[]` when nothing matches.
 */
export declare function findHighlightMatches(text: string, rules: HighlightRule[]): HighlightMatch[];
declare global {
    interface CSSNamespace {
        highlights?: HighlightRegistry;
    }
    interface HighlightRegistry {
        set(name: string, highlight: CSSHighlight): void;
        delete(name: string): boolean;
        has(name: string): boolean;
    }
    class CSSHighlight {
        constructor(...ranges: Range[]);
    }
}
/**
 * Feature-detect whether the CSS Custom Highlight API is available in the
 * current environment.  Returns false in jsdom (decoration no-op).
 */
export declare function supportsHighlightAPI(): boolean;
/**
 * Apply highlight matches to a contenteditable element using the CSS Custom
 * Highlight API.  Maps text offsets (ZWSP-stripped concatenated text) to DOM
 * Ranges spanning across text nodes, builds a `Highlight`, and registers it.
 *
 * If the API is unavailable (jsdom, older browsers), this is a strict no-op.
 *
 * @param root     The contenteditable element.
 * @param matches  Pre-computed non-overlapping `{start, end}` ranges.
 * @param zwsp     The ZWSP character used in the editable (passed to avoid
 *                 a circular import; callers pass ZWSP from composer-dom).
 */
export declare function applyHighlights(root: HTMLElement, matches: HighlightMatch[], zwsp: string, name?: string): void;
