import type { CssList } from './list'; export declare interface BaseNode { type: CssNodeType loc?: CssLocation | null } export declare interface CssLocation { source: string start: { offset: number, line: number, column: number } end: { offset: number, line: number, column: number } } // ----- Containers ----- export declare interface StyleSheet extends BaseNode { type: 'StyleSheet' children: CssList } export declare interface Rule extends BaseNode { type: 'Rule' prelude: SelectorList | Raw block: Block } export declare interface Atrule extends BaseNode { type: 'Atrule' name: string prelude: AtrulePrelude | Raw | null block: Block | null } export declare interface AtrulePrelude extends BaseNode { type: 'AtrulePrelude' children: CssList } export declare interface Block extends BaseNode { type: 'Block' children: CssList } // ----- Declarations ----- export declare interface Declaration extends BaseNode { type: 'Declaration' important: boolean | string property: string value: Value | Raw } export declare interface DeclarationList extends BaseNode { type: 'DeclarationList' children: CssList } export declare interface Value extends BaseNode { type: 'Value' children: CssList } // ----- Selectors ----- export declare interface SelectorList extends BaseNode { type: 'SelectorList' children: CssList } export declare interface Selector extends BaseNode { type: 'Selector' children: CssList } export declare interface TypeSelector extends BaseNode { type: 'TypeSelector' name: string } export declare interface IdSelector extends BaseNode { type: 'IdSelector' name: string } export declare interface ClassSelector extends BaseNode { type: 'ClassSelector' name: string } export declare interface AttributeSelector extends BaseNode { type: 'AttributeSelector' name: Identifier matcher: string | null value: StringNode | Identifier | null flags: string | null } export declare interface PseudoClassSelector extends BaseNode { type: 'PseudoClassSelector' name: string children: CssList | null } export declare interface PseudoElementSelector extends BaseNode { type: 'PseudoElementSelector' name: string children: CssList | null } export declare interface Combinator extends BaseNode { type: 'Combinator' name: string } export declare interface NestingSelector extends BaseNode { type: 'NestingSelector' } // ----- Atomic values ----- export declare interface Identifier extends BaseNode { type: 'Identifier' name: string } export declare interface NumberNode extends BaseNode { type: 'Number' value: string } export declare interface PercentageNode extends BaseNode { type: 'Percentage' value: string } export declare interface DimensionNode extends BaseNode { type: 'Dimension' value: string unit: string } export declare interface StringNode extends BaseNode { type: 'String' value: string } export declare interface UrlNode extends BaseNode { type: 'Url' value: string } export declare interface HashNode extends BaseNode { type: 'Hash' name: string } export declare interface OperatorNode extends BaseNode { type: 'Operator' value: string } export declare interface FunctionNode extends BaseNode { type: 'Function' name: string children: CssList } export declare interface ParenthesesNode extends BaseNode { type: 'Parentheses' children: CssList } export declare interface BracketsNode extends BaseNode { type: 'Brackets' children: CssList } export declare interface RawNode extends BaseNode { type: 'Raw' value: string } export declare interface CommentNode extends BaseNode { type: 'Comment' value: string } export declare interface WhiteSpaceNode extends BaseNode { type: 'WhiteSpace' value: string } export declare interface CDONode extends BaseNode { type: 'CDO' } export declare interface CDCNode extends BaseNode { type: 'CDC' } export declare interface NthNode extends BaseNode { type: 'Nth' nth: AnPlusBNode | Identifier selector: SelectorList | null } export declare interface AnPlusBNode extends BaseNode { type: 'AnPlusB' a: string | null b: string | null } export declare interface RatioNode extends BaseNode { type: 'Ratio' left: NumberNode right: NumberNode } export declare interface UnicodeRangeNode extends BaseNode { type: 'UnicodeRange' value: string } export declare interface MediaQueryListNode extends BaseNode { type: 'MediaQueryList' children: CssList } export declare interface MediaQueryNode extends BaseNode { type: 'MediaQuery' children: CssList } export declare interface MediaFeatureNode extends BaseNode { type: 'MediaFeature' name: string value: NumberNode | DimensionNode | RatioNode | Identifier | null } export declare interface ParseOptions { filename?: string positions?: boolean context?: ParseContext parseValue?: boolean parseAtrulePrelude?: boolean parseCustomProperty?: boolean parseRulePrelude?: boolean onParseError?: (error: SyntaxError, fallbackNode: CssNode) => void } export type CssNodeType = | 'AnPlusB' | 'Atrule' | 'AtrulePrelude' | 'AttributeSelector' | 'Block' | 'Brackets' | 'CDC' | 'CDO' | 'ClassSelector' | 'Combinator' | 'Comment' | 'Declaration' | 'DeclarationList' | 'Dimension' | 'Function' | 'Hash' | 'IdSelector' | 'Identifier' | 'MediaFeature' | 'MediaQuery' | 'MediaQueryList' | 'NestingSelector' | 'Nth' | 'Number' | 'Operator' | 'Parentheses' | 'Percentage' | 'PseudoClassSelector' | 'PseudoElementSelector' | 'Ratio' | 'Raw' | 'Rule' | 'Selector' | 'SelectorList' | 'StyleSheet' | 'TypeSelector' | 'UnicodeRange' | 'Url' | 'Value' | 'WhiteSpace' | 'String'; // ----- Aliases ----- export type Raw = RawNode; export type CssNode = | StyleSheet | Rule | Atrule | AtrulePrelude | Block | Declaration | DeclarationList | Value | SelectorList | Selector | TypeSelector | IdSelector | ClassSelector | AttributeSelector | PseudoClassSelector | PseudoElementSelector | Combinator | NestingSelector | Identifier | NumberNode | PercentageNode | DimensionNode | StringNode | UrlNode | HashNode | OperatorNode | FunctionNode | ParenthesesNode | BracketsNode | RawNode | CommentNode | WhiteSpaceNode | CDONode | CDCNode | NthNode | AnPlusBNode | RatioNode | UnicodeRangeNode | MediaQueryListNode | MediaQueryNode | MediaFeatureNode; export type ParseContext = | 'stylesheet' | 'atrule' | 'atrulePrelude' | 'mediaQuery' | 'mediaQueryList' | 'rule' | 'selectorList' | 'selector' | 'block' | 'declarationList' | 'declaration' | 'value' | 'raw';