import { INode } from "./Generic/INode.js";
import { INodeOptions } from "./INodeOptions.js";
import { NodeItem } from "./NodeItem.js";
/**
 * Represents a node.
 *
 * @template TItem
 * The type of the node-item.
 *
 * @template TOptions
 * The type of the options for generating nodes.
 */
export declare class Node<TItem extends NodeItem, TOptions> implements INode<TItem> {
    /**
     * The id of the node.
     */
    private id;
    /**
     * The name of the node.
     */
    private name;
    /**
     * The item of the node.
     */
    private item;
    /**
     * The parent of the node.
     */
    private parent;
    /**
     * The children of the node.
     */
    private nodes;
    /**
     * Initializes a new instance of the {@link Node `Node<TItem, TOptions>`} class.
     *
     * @param options
     * The options for generating the object.
     *
     * @param generator
     * The generator-function for generating sub-nodes.
     */
    constructor(options: INodeOptions<TOptions>, generator: (node: Node<TItem, TOptions>, options: TOptions) => TItem);
    /**
     * Gets the parents of the node.
     */
    protected get Parents(): Array<Node<TItem, TOptions>>;
    /**
     * Gets or sets the id of the node.
     */
    get ID(): string;
    /**
     * @inheritdoc
     */
    set ID(value: string);
    /**
     * Gets or sets the name of the node.
     */
    get Name(): string;
    /**
     * @inheritdoc
     */
    set Name(value: string);
    /**
     * Gets the full name of the node.
     */
    get FullName(): string;
    /**
     * @inheritdoc
     */
    get Item(): TItem;
    /**
     * @inheritdoc
     */
    get Parent(): Node<TItem, TOptions>;
    /**
     * @inheritdoc
     */
    set Parent(value: Node<TItem, TOptions>);
    /**
     * @inheritdoc
     */
    get Nodes(): Array<Node<TItem, TOptions>>;
    /**
     * @inheritdoc
     *
     * @returns
     * All nodes inside this node.
     */
    GetAllNodes(): Array<Node<TItem, TOptions>>;
    /**
     * @inheritdoc
     *
     * @returns
     * The objects of the node.
     */
    GetObjects(): Record<string, unknown>;
    /**
     * Returns a string which represents the current object.
     *
     * @returns
     * A string which represents the object.
     */
    toString(): string;
}
