/*!
 * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
 * Licensed under the MIT License.
 */
import { EndOfTreeSegment } from "./endOfTreeSegment";
import { LocalReferencePosition } from "./localReference";
import { IMergeTreeDeltaCallbackArgs } from "./mergeTreeDeltaCallback";
import { ITrackingGroup } from "./mergeTreeTracking";
import { IJSONSegment, MergeTreeDeltaType } from "./ops";
import { PropertySet } from "./properties";
import { MergeTree } from "./mergeTree";
/**
 * Revertibles are new and require the option
 * mergeTreeUseNewLengthCalculations to be set as true on the underlying merge tree
 * in order to function correctly.
 *
 * @alpha
 */
export declare type MergeTreeDeltaRevertible = {
    operation: typeof MergeTreeDeltaType.INSERT;
    trackingGroup: ITrackingGroup;
} | {
    operation: typeof MergeTreeDeltaType.REMOVE;
    trackingGroup: ITrackingGroup;
} | {
    operation: typeof MergeTreeDeltaType.ANNOTATE;
    trackingGroup: ITrackingGroup;
    propertyDeltas: PropertySet;
};
/**
 * Tests whether x is a MergeTreeDeltaRevertible
 *
 * @alpha
 */
export declare function isMergeTreeDeltaRevertible(x: unknown): x is MergeTreeDeltaRevertible;
/**
 * Revertibles are new and require the option
 * mergeTreeUseNewLengthCalculations to be set as true on the underlying merge tree
 * in order to function correctly.
 *
 * @alpha
 */
export interface MergeTreeRevertibleDriver {
    insertFromSpec(pos: number, spec: IJSONSegment): any;
    removeRange(start: number, end: number): any;
    annotateRange(start: number, end: number, props: PropertySet): any;
}
/**
 * exported for test only. should not be exported out the the package
 * @internal
 */
export interface MergeTreeWithRevert extends MergeTree {
    __mergeTreeRevertible: {
        detachedReferences: EndOfTreeSegment;
        refCallbacks: LocalReferencePosition["callbacks"];
    };
}
export declare type PickPartial<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
/**
 * Revertibles are new and require the option
 * mergeTreeUseNewLengthCalculations to be set as true on the underlying merge tree
 * in order to function correctly.
 * @alpha
 */
export declare function appendToMergeTreeDeltaRevertibles(deltaArgs: IMergeTreeDeltaCallbackArgs, revertibles: MergeTreeDeltaRevertible[]): void;
/**
 * Revertibles are new and require the option
 * mergeTreeUseNewLengthCalculations to be set as true on the underlying merge tree
 * in order to function correctly.
 * @alpha
 */
export declare function discardMergeTreeDeltaRevertible(revertibles: MergeTreeDeltaRevertible[]): void;
/**
 * Revertibles are new and require the option
 * mergeTreeUseNewLengthCalculations to be set as true on the underlying merge tree
 * in order to function correctly.
 * @alpha
 */
export declare function revertMergeTreeDeltaRevertibles(driver: MergeTreeRevertibleDriver, revertibles: MergeTreeDeltaRevertible[]): void;
//# sourceMappingURL=revertibles.d.ts.map