import type * as ESTree from "estree"; import type { Rule } from "eslint"; import type { RuleListener } from "../types"; import type { CallReference } from "./extract-calls-references"; import type { ParsedValue as PostcssParsedValue } from "postcss-value-parser"; type CSSHelperContext = { isFixable(targetNode?: T | null): targetNode is T; }; type DefineStyleArgument = { argument: ESTree.Expression; callReference: CallReference; }; type CSSObjectPropsContext = { define: ESTree.ObjectExpression | ESTree.ArrayExpression; scope: ESTree.Expression; on: "jsx-style"; } | { define: ESTree.ObjectExpression | ESTree.ArrayExpression; scope: ESTree.Expression; on: "vue-style"; } | { define: ESTree.ObjectExpression; scope: ESTree.Expression; on: "define-function"; defineStyleArgument: DefineStyleArgument; } | { define: ESTree.ObjectExpression; scope: ESTree.Expression; on: "mark"; }; export type CSSObjectContext = CSSHelperContext & CSSObjectPropsContext; export type CSSPropertyName = { name: string; expression: ESTree.Expression; directExpression: ESTree.Expression | null; }; export type CSSPropertyValue = { value: string | number; expression: ESTree.Expression; directExpression: ESTree.Expression | null; parsed: Readonly; }; export type CSSSelector = { selector: string; expression: ESTree.Expression; directExpression: ESTree.Expression | null; }; export type CSSPropertyContext = { getName: () => CSSPropertyName | null; getValue: () => CSSPropertyValue | null; }; export type CSSRuleContext = { getSelector: () => CSSSelector | null; }; export type CSSVisitorHandlers = { onRoot?: (context: CSSObjectContext) => void; "onRoot:exit"?: (context: CSSObjectContext) => void; onProperty?: (property: CSSPropertyContext) => void; onRule?: (rule: CSSRuleContext) => void; "onRule:exit"?: (rule: CSSRuleContext) => void; }; export type DefineCSSVisitorRule = { createVisitor: (context: CSSObjectContext) => CSSVisitorHandlers; }; export declare function defineCSSVisitor(context: Rule.RuleContext, rule: DefineCSSVisitorRule): RuleListener; export declare function compositingVisitors(visitor: RuleListener, ...visitors: RuleListener[]): RuleListener; export {};