/*!
 * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
 * Licensed under the MIT License.
 */
import { Value, Anchor, FieldKey, TreeNavigationResult, ITreeSubscriptionCursor, FieldStoredSchema, TreeSchemaIdentifier, TreeStoredSchema, ITreeCursor, AnchorNode } from "../../core";
import { FieldKind } from "../modular-schema";
import { ProxyContext } from "./editableTreeContext";
import { EditableField, EditableTree, EditableTreeEvents, UnwrappedEditableField } from "./editableTreeTypes";
import { ProxyTarget } from "./ProxyTarget";
export declare function makeTree(context: ProxyContext, cursor: ITreeSubscriptionCursor): EditableTree;
/**
 * A Proxy target, which together with a `nodeProxyHandler` implements a basic access to
 * the fields of {@link EditableTree} by means of the cursors.
 */
export declare class NodeProxyTarget extends ProxyTarget<Anchor> {
    readonly anchorNode: AnchorNode;
    readonly proxy: EditableTree;
    private readonly removeDeleteCallback;
    constructor(context: ProxyContext, cursor: ITreeSubscriptionCursor, anchorNode: AnchorNode, anchor: Anchor);
    protected buildAnchor(): Anchor;
    protected tryMoveCursorToAnchor(anchor: Anchor, cursor: ITreeSubscriptionCursor): TreeNavigationResult;
    protected forgetAnchor(anchor: Anchor): void;
    get typeName(): TreeSchemaIdentifier;
    get type(): TreeStoredSchema;
    get value(): Value;
    set value(value: Value);
    get currentIndex(): number;
    lookupFieldKind(field: FieldKey): FieldKind;
    getFieldSchema(field: FieldKey): FieldStoredSchema;
    getFieldKeys(): FieldKey[];
    has(field: FieldKey): boolean;
    unwrappedField(field: FieldKey): UnwrappedEditableField;
    getField(fieldKey: FieldKey): EditableField;
    [Symbol.iterator](): IterableIterator<EditableField>;
    createField(fieldKey: FieldKey, newContent: ITreeCursor | ITreeCursor[]): void;
    private fieldLength;
    deleteField(fieldKey: FieldKey): void;
    replaceField(fieldKey: FieldKey, newContent: undefined | ITreeCursor | ITreeCursor[]): void;
    get parentField(): {
        readonly parent: EditableField;
        readonly index: number;
    };
    on<K extends keyof EditableTreeEvents>(eventName: K, listener: EditableTreeEvents[K]): () => void;
}
/**
 * Checks the type of an UnwrappedEditableField.
 * @alpha
 */
export declare function isUnwrappedNode(field: UnwrappedEditableField): field is EditableTree;
//# sourceMappingURL=editableTree.d.ts.map