import { IShapeData } from '../declarations/shapes';
import { IEvent } from '../event-sourcing/declarations';
export declare type IHistoryEvent = IShapeAddEvent | IShapeUpdateEvent | IShapeRemoveEvent | IShapeChangeOrderEvent | IEraseAllEvent | IHistoryEventsGroup | IIdentityEvent;
export declare function isHistoryEvent(event: IHistoryEvent | void): event is IHistoryEvent;
export interface IPersistedHistoryEvent extends IEvent {
    id: string;
    author: string;
    applied: boolean;
    ev: IHistoryEvent;
}
export declare function isPersistedHistoryEvent(event: IPersistedHistoryEvent | undefined): event is IPersistedHistoryEvent;
export interface IPersistedHistoryEventParams {
    id: string;
    author: string;
    applied?: boolean;
}
export declare function getPersistedHistoryEvent(params: IPersistedHistoryEventParams, ev: IHistoryEvent): IPersistedHistoryEvent;
export declare function getHistoryEventFromPersisted(persisted: IPersistedHistoryEvent): IHistoryEvent;
export declare const enum HistoryEventType {
    Identity = 0,
    AddShape = 1,
    UpdateShape = 2,
    RemoveShape = 3,
    ChangeShapeOrder = 4,
    EraseAll = 5,
    Grouped = 6
}
export interface IIdentityEvent {
    type: HistoryEventType.Identity;
}
export interface IShapeAddEvent {
    type: HistoryEventType.AddShape;
    payload: IShapeData;
}
export interface IShapeUpdateEvent {
    type: HistoryEventType.UpdateShape;
    payload: {
        id: string;
        shapeData: IShapeData;
    };
}
export interface IShapeRemoveEvent {
    type: HistoryEventType.RemoveShape;
    payload: {
        id: string;
    };
}
export interface IShapeChangeOrderEvent {
    type: HistoryEventType.ChangeShapeOrder;
    payload: {
        id: string;
        value: number;
        relative: boolean;
    };
}
export interface IEraseAllEvent {
    type: HistoryEventType.EraseAll;
}
export interface IHistoryEventsGroup {
    type: HistoryEventType.Grouped;
    payload: IHistoryEvent[];
}
export declare function isIdentityEvent(base: IHistoryEvent): base is IIdentityEvent;
export declare function isShapeAddEvent(base: IHistoryEvent): base is IShapeAddEvent;
export declare function isShapeUpdateEvent(base: IHistoryEvent): base is IShapeUpdateEvent;
export declare function isShapeRemoveEvent(base: IHistoryEvent): base is IShapeRemoveEvent;
export declare function isShapeChangeOrderEvent(base: IHistoryEvent): base is IShapeChangeOrderEvent;
export declare function isEraseAllEvent(base: IHistoryEvent): base is IEraseAllEvent;
export declare function isHistoryEventsGroup(base: IHistoryEvent): base is IHistoryEventsGroup;
export declare function identityHistoryEvent(): IIdentityEvent;
export declare function shapeAddEvent(shapeData: IShapeData): IShapeAddEvent;
export declare function shapeUpdateEvent(id: string, shapeData: IShapeData): IShapeUpdateEvent;
export declare function shapeRemoveEvent(shapeId: string): IShapeRemoveEvent;
export declare function shapesRemoveEvent(shapesIds: string[]): IHistoryEventsGroup;
export declare function shapeChangeOrderEvent(params: {
    shapeId: string;
    value: number;
    relative: boolean;
}): IShapeChangeOrderEvent;
export declare function eraseAllEvent(): IEraseAllEvent;
export declare function historyEventsGroup(events: IHistoryEvent[]): IHistoryEventsGroup;
