import type { AST, SourceCode, RuleContext, LineAndColumnData } from "../../../types";
import type { VCSSStyleSheet, VCSSNode, VCSSSelectorNode } from "../../ast";
interface VisitorVCSSNode {
    exit?: boolean;
    break?: boolean;
    enterNode(node: VCSSNode): void;
    leaveNode?(node: VCSSNode): void;
}
interface VisitorVCSSSelectorNode {
    exit?: boolean;
    break?: boolean;
    enterNode(node: VCSSSelectorNode): void;
    leaveNode?(node: VCSSSelectorNode): void;
}
interface BaseStyleContext {
    readonly styleElement: AST.VElement;
    readonly sourceCode: SourceCode;
    readonly scoped: boolean;
    readonly module: boolean;
    readonly lang: string;
    traverseNodes(visitor: VisitorVCSSNode): void;
    traverseSelectorNodes(visitor: VisitorVCSSSelectorNode): void;
}
export interface ValidStyleContext extends BaseStyleContext {
    readonly invalid: null;
    readonly cssNode: VCSSStyleSheet;
}
export interface InvalidStyleContext extends BaseStyleContext {
    readonly invalid: {
        message: string;
        needReport: boolean;
        loc: LineAndColumnData;
    };
    readonly cssNode: null;
}
export type StyleContext = InvalidStyleContext | ValidStyleContext;
export declare function isValidStyleContext(context: StyleContext): context is ValidStyleContext;
export declare class StyleContextImpl {
    readonly styleElement: AST.VElement;
    readonly sourceCode: SourceCode;
    readonly invalid: {
        message: string;
        needReport: boolean;
        loc: LineAndColumnData;
    } | null;
    readonly scoped: boolean;
    readonly module: boolean;
    readonly lang: string;
    private readonly cssText;
    readonly cssNode: VCSSStyleSheet | null;
    constructor(style: AST.VElement, context: RuleContext);
    traverseNodes(visitor: VisitorVCSSNode): void;
    traverseSelectorNodes(visitor: VisitorVCSSSelectorNode): void;
}
export declare function createStyleContexts(context: RuleContext): StyleContext[];
export {};
