import { CanIEmailOptions } from 'caniemail'; type Severity = 'error' | 'warning' | 'info'; type SupportLevel = 'full' | 'partial' | 'none'; interface LintDiagnostic { severity: Severity; /** Feature title from caniemail (e.g., "cursor", "target attribute", "transform"). */ title: string; /** Human-readable diagnostic message, with note text appended when present. */ message: string; /** Original caniemail notes (already-resolved text). */ notes: string[]; /** Support level from caniemail — the raw signal for severity mapping. */ support: SupportLevel; /** Client family — e.g., "gmail", "outlook", "apple-mail". Split from "gmail.android". */ family: string; /** Affected variants within the family — e.g., ["android", "mobile-webmail"]. */ variants: string[]; /** Total variants in this family (denominator) — e.g., 4 for Gmail. */ familySize: number; position?: { start: { line: number; column: number; }; end: { line: number; column: number; }; }; /** Set true when framework filtering suppressed this diagnostic; only present when showIgnored is on. */ suppressedByFramework?: boolean; /** Which framework rule matched — e.g., "preview", "preload-image", "target-blank". */ frameworkRule?: string; } interface LintResult { diagnostics: LintDiagnostic[]; errorCount: number; warningCount: number; success: boolean; filePath?: string; } interface LintConfig { preset?: string; /** Comma-separated client globs to drop from the preset, e.g. "orange,mail-ru". */ exclude?: string; /** When set, apply framework-aware filtering. Currently only 'react-email' is supported. */ framework?: 'react-email'; /** * When true, retain framework-suppressed diagnostics in the result with * `suppressedByFramework: true` and `severity: "info"` so formatters can render * them in a separate section. Default: false. */ showIgnored?: boolean; } interface PrettyFormatterOpts { /** When true, expand collapsed diagnostics to one line per variant. */ verbose?: boolean; } declare function formatPretty(results: LintResult[], opts?: PrettyFormatterOpts): string; declare function formatGitHub(results: LintResult[]): string; declare function formatJson(results: LintResult[]): string; interface FormatterOpts extends PrettyFormatterOpts { } type Formatter = (results: LintResult[], opts?: FormatterOpts) => string; declare function getFormatter(name: string): Formatter; declare function lint(html: string, config?: LintConfig): LintResult; type ClientGlobs = CanIEmailOptions['clients']; declare const PRESET_NAMES: string[]; declare function resolvePreset(name: string): ClientGlobs; export { type Formatter, type LintConfig, type LintDiagnostic, type LintResult, PRESET_NAMES, type Severity, type SupportLevel, formatGitHub, formatJson, formatPretty, getFormatter, lint, resolvePreset };