declare namespace walk {
    export type NodePredicate<T extends Node> = (node: Node) => node is T;
    export interface TypedTreeWalker<T> {
        currentNode: T;
        readonly filter: NodeFilter | null;
        readonly root: T;
        readonly whatToShow: number;
        firstChild(): T | null;
        lastChild(): T | null;
        nextNode(): T | null;
        nextSibling(): T | null;
        parentNode(): T | null;
        previousNode(): T | null;
        previousSibling(): T | null;
    }
    export interface TypedNodeIterator<T> {
        readonly filter: NodeFilter | null;
        readonly pointerBeforeReferenceNode: boolean;
        readonly referenceNode: Node;
        readonly root: Node;
        readonly whatToShow: number;
        detach(): void;
        nextNode(): T | null;
        previousNode(): T | null;
    }
    type Constructor<T> = new (...args: any[]) => T;
    export function createWalker<T extends Node>(root: Node, accept?: NodePredicate<T>, skip?: NodePredicate<T>): TypedTreeWalker<T>;
    export function createIterator<T extends Node>(root: Node, accept?: NodePredicate<T>, skip?: NodePredicate<T>): TypedNodeIterator<T>;
    export function firstChild<T extends Node>(from: Node, predicate: NodePredicate<T>): T;
    export function lastChild<T extends Node>(from: Node, predicate: NodePredicate<T>): T;
    export function nextSibling<T extends Node>(from: Node, predicate: NodePredicate<T>): T;
    export function previousSibling<T extends Node>(from: Node, predicate: NodePredicate<T>): T;
    export function ancestor<T extends Node>(from: Node, predicate: NodePredicate<T>, root?: Node): T;
    export function ancestorOrSelf<T extends Node>(from: Node, predicate: NodePredicate<T>, root?: Node): T;
    export function next<T extends Node>(from: Node, predicate: NodePredicate<T>, root?: Node): T;
    export function previous<T extends Node>(from: Node, predicate: NodePredicate<T>, root?: Node): T;
    export function all<T extends Node>(axis: (from: Node, predicate: NodePredicate<T>, root?: Node) => T, from: Node, predicate: NodePredicate<T>, root?: Node): T[];
    export function isNode(node: Node): node is Node;
    export function isElement(node: Node): node is Element;
    export function isHTMLElement(node: Node): node is HTMLElement;
    export function isSVGElement(node: Node): node is SVGElement;
    export function isSVGRootSVGElement(node: Node): node is SVGSVGElement;
    export function isHTMLOrSVGRootSVGElement(node: Node): node is HTMLElement | SVGSVGElement;
    export function isText(node: Node): node is Element;
    export function isConstructedBy<T extends Node>(constructor: Constructor<T>): NodePredicate<T>;
    export function isInstanceOf<T extends Node>(constructor: Constructor<T>): NodePredicate<T>;
    export function isStaticStyle(style: CSSStyleDeclaration): boolean;
    export function isStatic(node: Node): boolean;
    export function isRow(style: CSSStyleDeclaration): 'table-row' | 'flex-row' | false;
    export function predicate<T extends Node>(typeGuard: NodePredicate<T>, ...predicates: ((node: Node) => boolean)[]): NodePredicate<T>;
    export function displayAsBlockStyle(style: CSSStyleDeclaration): boolean;
    export function displayAsBlock(node: Node): boolean;
    export function displayAsInlineBlock(node: Node): boolean;
    export function isDisplayed(element: HTMLElement): boolean;
    export function hasSize(element: HTMLElement): boolean;
    export function isBreakedAfter(elem: Element): boolean;
    export const isStaticNode: NodePredicate<Node>;
    export const isStaticElement: NodePredicate<Element>;
    export const isStaticHtmlElement: NodePredicate<HTMLElement>;
    export const isStaticHtmlBlock: NodePredicate<HTMLElement>;
    export const isBlockElement: NodePredicate<Element>;
    export const isInlineBlockElement: NodePredicate<Element>;
    export {};
}
export default walk;
