/**
 * @author Thomas Barnekow
 * @license MIT
 */
import { LinqElements, LinqNodes, XElement, XName, XNode } from './internal.js';
/**
 * Represents a node that can contain other nodes.
 * The two classes that derive from {@link XContainer} are {@link XDocument} and {@link XElement}.
 */
export declare abstract class XContainer extends XNode {
    protected constructor();
    /**
     * Gets this container's first `XNode` or `null`, if this container does not
     * have any nodes.
     */
    get firstNode(): XNode | null;
    /**
     * Gets this container's last `XNode` or `null`, if this container does not
     * have any nodes.
     */
    get lastNode(): XNode | null;
    /**
     * Adds the specified content as a child (or children) of this `XContainer`.
     *
     * @param content A content object containing simple content or a collection
     * of content objects to be added.
     */
    add(content: any): void;
    /**
     * Gets the descendant `XElement`s of this `XContainer`.
     *
     * @param name The optional name of the descendants to return.
     * @returns The descendant `XElement`s of this `XContainer`.
     */
    descendants(name?: XName | null): LinqElements;
    element(name: XName): XElement | null;
    /**
     * Gets the child `XElement`s of this `XContainer`.
     *
     * @param name The optional name of the elements to return.
     * @returns The child `XElement`s of this `XContainer`.
     */
    elements(name?: XName | null): LinqElements;
    /**
     * Returns the content of this `XContainer`.
     * Note that the content does not include `XAttribute`s.
     *
     * @returns The content of this `XContainer` as an `IterableOfXNode`.
     */
    nodes(): LinqNodes;
    /**
     *  Removes the nodes from this `XContainer`.
     *  Note that this method does not remove the attributes.
     */
    removeNodes(): void;
    private removeNodesSkipNotify;
    /**
     * Replaces the child nodes of this `XContainer` with the specified content.
     * The content can be simple content, a collection of content objects, a param
     * list of content objects, or null.
     *
     * @param content The new content.
     */
    replaceNodes(...content: any[]): void;
}
