/**
 * CSS Materialization
 *
 * Converts condition trees into CSS selectors and at-rules.
 * This is the final stage that produces actual CSS output.
 */
import { ConditionNode } from './conditions';
/**
 * A single selector variant (one term in a DNF expression)
 */
export interface SelectorVariant {
    /** Attribute/pseudo selectors to add to element selector (e.g., '[data-hovered]', ':not([data-disabled])') */
    modifierSelectors: string[];
    /** Selector suffixes for @own states (applied to sub-element) */
    ownSelectors: string[];
    /** Media at-rules (e.g., '@media (width < 768px)') */
    mediaRules: string[];
    /** Container at-rules (e.g., '@container layout (width < 600px)') */
    containerRules: string[];
    /** Root state prefix (e.g., ':root[data-theme="dark"]') */
    rootPrefix?: string;
    /** Whether to wrap in @starting-style */
    startingStyle: boolean;
}
/**
 * CSS output components extracted from a condition
 * Supports multiple variants for OR conditions (DNF form)
 */
export interface CSSComponents {
    /** Selector variants - OR means multiple variants, AND means single variant with combined selectors */
    variants: SelectorVariant[];
    /** Whether condition is impossible (should skip) */
    isImpossible: boolean;
}
/**
 * Final CSS rule output
 */
export interface CSSRule {
    /** Single selector or array of selector fragments (for OR conditions) */
    selector: string | string[];
    declarations: string;
    atRules?: string[];
    rootPrefix?: string;
}
/**
 * Convert a condition tree to CSS components
 */
export declare function conditionToCSS(node: ConditionNode): CSSComponents;
/**
 * Clear the condition cache (for testing)
 */
export declare function clearConditionCache(): void;
/**
 * Build a complete CSS selector from a single variant
 */
export declare function buildCSSSelectorFromVariant(className: string, variant: SelectorVariant, selectorSuffix?: string): string;
/**
 * Build at-rules array from a variant
 */
export declare function buildAtRulesFromVariant(variant: SelectorVariant): string[];
/**
 * Materialize a computed rule into final CSS format
 *
 * Returns an array of CSSRules because OR conditions may require multiple rules
 * (when different branches have different at-rules)
 */
export declare function materializeRule(condition: ConditionNode, declarations: Record<string, string>, selectorSuffix: string, className: string): CSSRule[];
