import type { Root } from 'postcss';
import type { GenerationArtifact } from './types.js';
export interface SemanticCssDeclaration {
    type: 'declaration';
    property: string;
    value: string;
    important: boolean;
}
export interface SemanticCssRule {
    type: 'rule';
    selector: string;
    nodes: SemanticCssNode[];
}
export interface SemanticCssAtRule {
    type: 'at-rule';
    name: string;
    params: string;
    nodes: SemanticCssNode[];
}
export type SemanticCssNode = SemanticCssDeclaration | SemanticCssRule | SemanticCssAtRule;
export interface ArtifactSemanticFragment {
    id: string;
    kind: GenerationArtifact['fragments'][number]['kind'];
    order: number;
    scope: GenerationArtifact['fragments'][number]['scope'];
    sourceId: string;
    stage: GenerationArtifact['fragments'][number]['stage'];
    root: SemanticCssNode[];
}
export interface ArtifactSemanticSnapshot {
    present: boolean;
    fragments: ArtifactSemanticFragment[];
    classSet: string[];
    rawCandidates: string[];
    dependencies: string[];
    sourceEntries: string[];
}
export interface ArtifactSemanticDifference {
    kind: 'added' | 'removed' | 'changed';
    path: string;
    left?: unknown;
    right?: unknown;
}
export interface ArtifactSemanticSummary {
    present: boolean;
    fragments: number;
    classes: number;
    rawCandidates: number;
    dependencies: number;
    sourceEntries: number;
}
export interface ArtifactSemanticComparison {
    equal: boolean;
    differences: ArtifactSemanticDifference[];
    truncated: boolean;
    left: ArtifactSemanticSummary;
    right: ArtifactSemanticSummary;
}
export interface CompareArtifactSemanticsOptions {
    maxDifferences?: number | undefined;
}
export declare function normalizeCssRoot(root: Root): SemanticCssNode[];
export declare function createArtifactSemanticSnapshot(artifact: GenerationArtifact | undefined): ArtifactSemanticSnapshot;
export declare function createArtifactSemanticSignature(artifact: GenerationArtifact): string;
export declare function compareArtifactSemantics(left: GenerationArtifact | undefined, right: GenerationArtifact | undefined, options?: CompareArtifactSemanticsOptions): ArtifactSemanticComparison;
export declare function areArtifactsSemanticallyEqual(left: GenerationArtifact, right: GenerationArtifact): boolean;
