export declare function parseXml(src: string): Document;
export declare function nodeIsNonShadowStatementOrValue(node: Element): boolean;
export declare function getAncestor(target: Element, test: (node: Element) => boolean): Element | null;
/**
 * Scans a XML document for start blocks. Returns a list of the blocks to start generating from.
 * This will mutate the tree to separate the start node from the tree.
 * @param root The XML document where the start nodes are
 */
export declare function findStartNodes(root: XMLDocument): HTMLElement[];
export declare enum DiffResultType {
    NODE = 0,
    INNER_TEXT = 1,
    EQUAL = 2
}
export interface INodeDiffResult {
    type: DiffResultType.NODE;
    from: HTMLElement | null;
    to: HTMLElement | null;
}
export interface IInnerTextDiffResult {
    type: DiffResultType.INNER_TEXT;
    from: string | null;
    to: string | null;
    aNode: HTMLElement;
    bNode: HTMLElement;
}
export interface IEqualDiffResult {
    type: DiffResultType.EQUAL;
}
export declare type IDiffResult = INodeDiffResult | IInnerTextDiffResult | IEqualDiffResult;
/**
 * Compares two blockly DOM tree and returns the first difference
 * @param treeA A Blockly tree to compare from
 * @param treeB A Blockly tree to compare to
 */
export declare function findFirstTreeDiff(treeA: HTMLElement, treeB: HTMLElement): IDiffResult;
export declare function getSelectorForNode(node: HTMLElement, limit: HTMLElement): string;
