import type { Path } from "../parent/pathTypes";
/**
 * A class with the implementationm of draft.
 * Use `draft` to create an instance of this class.
 *
 * @typeparam T Data type.
 */
export declare class Draft<T extends object> {
    /**
     * Draft data object.
     */
    readonly data: T;
    /**
     * Commits current draft changes to the original object.
     */
    commit(): void;
    /**
     * Partially commits current draft changes to the original object.
     * If the path cannot be resolved in either the draft or the original object it will throw.
     * Note that model IDs are checked to be the same when resolving the paths.
     *
     * @param path Path to commit.
     */
    commitByPath(path: Path): void;
    /**
     * Resets the draft to be an exact copy of the current state of the original object.
     */
    reset(): void;
    /**
     * Partially resets current draft changes to be the same as the original object.
     * If the path cannot be resolved in either the draft or the original object it will throw.
     * Note that model IDs are checked to be the same when resolving the paths.
     *
     * @param path Path to reset.
     */
    resetByPath(path: Path): void;
    /**
     * Returns `true` if the draft has changed compared to the original object, `false` otherwise.
     */
    get isDirty(): boolean;
    /**
     * Returns `true` if the value at the given path of the draft has changed compared to the original object.
     * If the path cannot be resolved in the draft it will throw.
     * If the path cannot be resolved in the original object it will return `true`.
     * Note that model IDs are checked to be the same when resolving the paths.
     *
     * @param path Path to check.
     */
    isDirtyByPath(path: Path): boolean;
    /**
     * Original data object.
     */
    readonly originalData: T;
    private get originalSnapshot();
    /**
     * Creates an instance of Draft.
     * Do not use directly, use `draft` instead.
     *
     * @param original
     */
    constructor(original: T);
}
/**
 * Creates a draft copy of a tree node and all its children.
 *
 * @typeparam T Data type.
 * @param original Original node.
 * @returns The draft object.
 */
export declare function draft<T extends object>(original: T): Draft<T>;
