type HyperframeLintSeverity = "error" | "warning" | "info";
type HyperframeLintFinding = {
    code: string;
    severity: HyperframeLintSeverity;
    message: string;
    file?: string;
    selector?: string;
    elementId?: string;
    fixHint?: string;
    snippet?: string;
};
type HyperframeLintResult = {
    ok: boolean;
    errorCount: number;
    warningCount: number;
    infoCount: number;
    findings: HyperframeLintFinding[];
};
type HyperframeLinterOptions = {
    filePath?: string;
    isSubComposition?: boolean;
    externalStyles?: Array<{
        href: string;
        content: string;
    }>;
    /**
     * Set to `true` when linting compositions destined for distributed / Lambda
     * rendering, where system-font capture (`allowSystemFontCapture`) is
     * disabled.  When `true`, the `system_font_will_alias` rule is elevated from
     * `"info"` to `"warning"` because the alias substitution will NOT happen at
     * render time — the font will silently fall back to whatever the OS provides.
     */
    distributed?: boolean;
};

declare function lintHyperframeHtml(html: string, options?: HyperframeLinterOptions): Promise<HyperframeLintResult>;
/**
 * Async lint pass: HEAD-checks every remote media URL in the HTML.
 * Returns findings for URLs that are unreachable (non-2xx status or network error).
 *
 * Call this after `lintHyperframeHtml()` and merge the findings.
 *
 * @param timeoutMs - per-request timeout (default 8000ms)
 */
declare function lintMediaUrls(html: string, options?: {
    timeoutMs?: number;
}): Promise<HyperframeLintFinding[]>;

/**
 * Pure render-gate decision — no Node.js dependencies, so it is safe to import
 * from the browser entry alongside the rule engine.
 */
declare function shouldBlockRender(strictErrors: boolean, strictAll: boolean, totalErrors: number, totalWarnings: number): boolean;

export { type HyperframeLintFinding, type HyperframeLintResult, type HyperframeLintSeverity, type HyperframeLinterOptions, lintHyperframeHtml, lintMediaUrls, shouldBlockRender };
