import { SemanticLayoutGraph } from './SemanticLayoutGraph.js'; import type { InferenceResult, TruncationInfo } from './types.js'; export interface HeuristicOptions { /** Valid design token values */ designTokens?: number[]; /** Maximum acceptable pollution score per component */ maxPollutionScore?: number; } export declare class HeuristicInferenceEngine { private options; private analyzer; private renderer; private tokenDetector; constructor(options?: HeuristicOptions); /** * Analyze the graph and produce inference results. * Optionally accepts truncation info from the propagator. */ analyze(graph: SemanticLayoutGraph, truncation?: TruncationInfo): InferenceResult; /** * Generate a summary report from inference results. */ generateSummaryReport(result: InferenceResult): string; /** * Render the graph as an ASCII tree. */ renderAscii(graph: SemanticLayoutGraph): string; private detectGapOpportunities; private detectStylePollution; private detectMarginStacking; private detectListItemIssues; private calculateHealthScore; /** * v2.5.0 "Proportional Incoherence": Detect children whose fontSize * is disproportionately small compared to their parent's height. * * Threshold: fontSize < 15% of parent height. * Only checks when both values are numeric (no coordinate calculation). * * This catches patterns like tiny text inside a tall button where * the text is visually "lost" inside the container. */ private detectProportionalIncoherences; /** * v2.5.0 "Opaque Dimension Auditor": Detect width/height values * that are string/percentage (e.g., '100%') instead of numeric pixel * values. These create blind spots in sibling dimension consistency * checks because the actual rendered size cannot be determined statically. * * Particularly problematic inside flexWrap: 'wrap' containers where * percentage widths create unpredictable wrapping behavior. */ private detectOpaqueDimensions; } //# sourceMappingURL=HeuristicInferenceEngine.d.ts.map