56 lines
1.7 KiB
TypeScript
56 lines
1.7 KiB
TypeScript
|
|
/**
|
|||
|
|
* Resolve nested selectors following the CSS nesting specification.
|
|||
|
|
*
|
|||
|
|
* @example
|
|||
|
|
*
|
|||
|
|
* ```js
|
|||
|
|
* import { resolveNestedSelector } from '@csstools/selector-resolve-nested';
|
|||
|
|
* import parser from 'postcss-selector-parser';
|
|||
|
|
*
|
|||
|
|
* const selector = parser().astSync('.foo &');
|
|||
|
|
* const parent = parser().astSync('.bar');
|
|||
|
|
*
|
|||
|
|
* // .foo .bar
|
|||
|
|
* console.log(
|
|||
|
|
* resolveNestedSelector(selector, parent).toString()
|
|||
|
|
* )
|
|||
|
|
* ```
|
|||
|
|
*
|
|||
|
|
* @packageDocumentation
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
import type { Root } from 'postcss-selector-parser';
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Flatten a nested selector against a given parent selector.
|
|||
|
|
*
|
|||
|
|
* ⚠️ This is not a method to generate the equivalent un-nested selector.
|
|||
|
|
* It is purely a method to construct a single selector AST that contains the parts of both the current and parent selector.
|
|||
|
|
* It will not have the correct specificity and it will not match the right elements when used as a selector.
|
|||
|
|
* It will not always serialize to a valid selector.
|
|||
|
|
*
|
|||
|
|
* @param selector - The selector to resolve.
|
|||
|
|
* @param parentSelector - The parent selector to resolve against.
|
|||
|
|
* @returns The resolved selector.
|
|||
|
|
*/
|
|||
|
|
export declare function flattenNestedSelector(selector: Root, parentSelector: Root): Root;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Resolve a nested selector against a given parent selector.
|
|||
|
|
*
|
|||
|
|
* @param selector - The selector to resolve.
|
|||
|
|
* @param parentSelector - The parent selector to resolve against.
|
|||
|
|
* @param options - Change how resolving happens.
|
|||
|
|
* @returns The resolved selector.
|
|||
|
|
*/
|
|||
|
|
export declare function resolveNestedSelector(selector: Root, parentSelector: Root, options?: ResolveOptions): Root;
|
|||
|
|
|
|||
|
|
export declare interface ResolveOptions {
|
|||
|
|
/**
|
|||
|
|
* If implicit `&` selectors should be prepended to the selector before resolving
|
|||
|
|
*/
|
|||
|
|
ignoreImplicitNesting: boolean;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
export { }
|