/*!
 * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
 * Licensed under the MIT License.
 */
export declare enum ReferenceType {
    Simple = 0,
    Tile = 1,
    NestBegin = 2,
    NestEnd = 4,
    RangeBegin = 16,
    RangeEnd = 32,
    SlideOnRemove = 64,
    Transient = 256
}
export declare enum IntervalType {
    Simple = 0,
    Nest = 1,
    SlideOnRemove = 2,
    Transient = 4
}
export interface IMarkerDef {
    refType?: ReferenceType;
}
export declare const enum MergeTreeDeltaType {
    INSERT = 0,
    REMOVE = 1,
    ANNOTATE = 2,
    GROUP = 3
}
export interface IMergeTreeDelta {
    /**
     * Type of this change.
     */
    type: MergeTreeDeltaType;
}
/**
 * A position specified relative to a segment.
 */
export interface IRelativePosition {
    /**
     * String identifier specifying a segment.
     */
    id?: string;
    /**
     * If true, insert before the specified segment.  If false or not defined,
     * insert after the specified segment.
     */
    before?: boolean;
    /**
     * A positive number \>= 1.  If before is false, offset is added to the position.
     * If before is true, offset is subtracted from the position.
     */
    offset?: number;
}
export interface IMergeTreeInsertMsg extends IMergeTreeDelta {
    type: MergeTreeDeltaType.INSERT;
    pos1?: number;
    relativePos1?: IRelativePosition;
    pos2?: number;
    relativePos2?: IRelativePosition;
    seg?: any;
}
export interface IMergeTreeRemoveMsg extends IMergeTreeDelta {
    type: MergeTreeDeltaType.REMOVE;
    pos1?: number;
    relativePos1?: IRelativePosition;
    pos2?: number;
    relativePos2?: IRelativePosition;
}
export interface ICombiningOp {
    name: string;
    defaultValue?: any;
    minValue?: any;
    maxValue?: any;
}
export interface IMergeTreeAnnotateMsg extends IMergeTreeDelta {
    type: MergeTreeDeltaType.ANNOTATE;
    pos1?: number;
    relativePos1?: IRelativePosition;
    pos2?: number;
    relativePos2?: IRelativePosition;
    props: Record<string, any>;
    combiningOp?: ICombiningOp;
}
export interface IMergeTreeGroupMsg extends IMergeTreeDelta {
    type: MergeTreeDeltaType.GROUP;
    ops: IMergeTreeDeltaOp[];
}
export interface IJSONSegment {
    props?: Record<string, any>;
}
export declare type IMergeTreeDeltaOp = IMergeTreeInsertMsg | IMergeTreeRemoveMsg | IMergeTreeAnnotateMsg;
export declare type IMergeTreeOp = IMergeTreeDeltaOp | IMergeTreeGroupMsg;
//# sourceMappingURL=ops.d.ts.map