/**
* At (`@`) rule set.
* @memberof AST
* @typedef {ASTNode | AtRuleBase} AtRule
*/
/**
* @memberof AST
* @typedef {Object} AtRuleBase
* @property {string} type Rule node type.
* @property {string[]} props Rule parts (e.g. keyframes name or media queries).
*/
/**
* Rule set.
* @memberof AST
* @typedef {ASTNode | RuleBase} Rule
*/
/**
* @memberof AST
* @typedef {Object} RuleBase
* @property {"rule"} type Rule node type.
* @property {string[]} props Rule selectors.
*/
/**
* Comment.
* @memberof AST
* @typedef {ASTNode | CommentBase} Comment
*/
/**
* @memberof AST
* @typedef {Object} CommentBase
* @property {"comm"} type Comment node type.
* @property {"\n" | "/"} props Comment type: `'\n'` - double slash comment. `'/'` - Multiline comment.
* @property {string} children Comment value.
*/
/**
* Declaration.
* @memberof AST
* @typedef {ASTNode | DeclarationBase} Declaration
*/
/**
* @memberof AST
* @typedef {Object} DeclarationBase
* @property {"decl"} type Declaration node type.
* @property {string} props Declaration key.
* @property {string} children Declaration value.
*/
/**
* AST Node common interface.
* @memberof AST
* @typedef {Object} ASTNode
* @property {string} value CSS value.
* @property {string} type Node type.
* @property {string | string[]} props Node properties.
* @property {ASTNode[] | string} children Node children.
* @property {ASTNode} root Node's root node.
* @property {ASTNode} parent Node's parent node.
* @property {number} line Node line in CSS file.
* @property {number} column Node column in CSS file.
*/