import { IImageViewer } from "../Models/IImageViewer";
import { Bounds, PointLocation, Size } from "../Models/SelectionBoxTypes";
import { UndoCommandSupport } from "../Undo/Commands";
export declare type LayersPanelModel = {
    layerIndex?: number;
};
export declare class MergeImageLayerCommand implements UndoCommandSupport {
    newDataUrl: any;
    originalImageDataUrl: any;
    constructor(newDataUrl: any, originalImageDataUrl: any);
    name: string;
    execute(viewer: IImageViewer): Promise<void>;
    undo(viewer: IImageViewer): Promise<void>;
}
export interface IImageLayer {
    get name(): string;
    set name(name: string);
    get size(): Size;
    clear(clearCache: boolean): any;
    dispose(): any;
    ensureBackground(): Promise<void>;
    merge(): Promise<void>;
    saveToDataURL(): Promise<string>;
    drawObjects(): any;
    executeTempPaintCommand(cmd: IPaintCommand): any;
    getTempPaintCommands(): IPaintCommand[];
    clearTempPaintCommands(): any;
    get mainCanvas(): HTMLCanvasElement;
    get backCanvas(): HTMLCanvasElement;
    get mainCtx(): CanvasRenderingContext2D;
    get backCtx(): CanvasRenderingContext2D;
    get paintObjects(): IPaintObject[];
}
export declare type PointerTriggerType = "start" | "move" | "end";
export declare type PaintCommandName = "Pencil" | "Brush" | "Eraser" | "ErasePath2D" | "CloneStamp" | "TextPaintObject" | "UpdateObjectPosition" | "SetObjectProperty" | "DeleteObject" | "CopySelectedRegion" | "UpdateSelectedRegion" | "ResetSelectedRegion" | "CommitSelectedRegionImage" | "UndoSequenceMarker";
export interface IPaintDesignerContext {
    getPaintObjectDesigners(): any[];
}
export declare type IPaintExecuteOptions = {
    prevCommand?: IPaintCommand;
    context: IPaintDesignerContext;
};
export interface IPaintCommand {
    readonly name: PaintCommandName;
    point?: PointLocation;
    trigger: PointerTriggerType;
    clone(): any;
    execute(mainCtx: CanvasRenderingContext2D, backCtx: CanvasRenderingContext2D, options: IPaintExecuteOptions): any;
}
export declare type PaintObjectName = "ImagePaintObject" | "TextPaintObject";
export interface IPaintObject {
    name: PaintObjectName;
    get bounds(): Bounds;
    set bounds(bounds: Bounds);
    draw(destCtx: CanvasRenderingContext2D, mainCtx: CanvasRenderingContext2D, backCtx: CanvasRenderingContext2D, params?: PaintObjectParameters): any;
    getContentSize(ctx: CanvasRenderingContext2D): Size;
    getProperty(propertyName: PaintObjectPropertyName): any;
    setProperty(propertyName: PaintObjectPropertyName, value: any): boolean;
}
export declare type PaintObjectParameters = {
    isDesignTime?: boolean;
    context: IImageLayer;
};
export declare type PaintObjectPropertyName = "bounds" | "fontSize" | "fontName" | "fontBold" | "fontItalic" | "opacity" | "text" | "textColor";
