import Config from "../Config";
import { AnnotatorContainer } from "../AnnotatorContainer";
import DrawStyle from "../model/Styles";
import FillStyle from "../model/Styles";
import { StrokeType } from "../model/Styles";
import InternalConfig from "../utils/InternalConfig";
export declare class BaseAnnotator {
    protected properties: Array<string>;
    protected readonly RESIZE_ELEM_SIZE = 8;
    protected svgGroupElement: SVGGElement;
    protected baseSVGElement: SVGGElement;
    protected fillPattern: SVGPatternElement;
    protected isDragging: boolean;
    protected x: number;
    protected y: number;
    protected width: number;
    protected height: number;
    protected startX: number;
    protected startY: number;
    /**
     * Original matrix of the element, so we can translate from original point.
     */
    private elementMatrix;
    protected selected: boolean;
    onSelectHandler: (element: BaseAnnotator) => void;
    protected parent: AnnotatorContainer;
    protected config: InternalConfig;
    protected filters: any;
    protected drawStyle: DrawStyle;
    protected fillStyle: FillStyle;
    constructor(config: InternalConfig, parent: AnnotatorContainer);
    getElement(): SVGGElement;
    clean(): void;
    protected init(): void;
    protected startDrag: (x: number, y: number) => void;
    protected onTouchStart: (evt: TouchEvent) => void;
    protected onMouseDown: (evt: MouseEvent) => void;
    protected doMouseDown(evt: MouseEvent): void;
    protected getPixelRatio(): number;
    protected onTouchEnd: (evt: TouchEvent) => void;
    protected onMouseUp: (evt: MouseEvent) => void;
    processMouseUp(): void;
    protected onTouchMove: (evt: TouchEvent) => void;
    protected onMouseMove: (evt: MouseEvent) => void;
    private move;
    moveBy(dx: number, dy: number, evt: MouseEvent | Touch): void;
    protected createResizeElement(config: Config): SVGGraphicsElement;
    intersects(x: number, y: number, width: number, height: number): boolean;
    containsPoint(px: number, py: number): boolean;
    setStrokeType(strokeType: StrokeType): void;
    getStrokeType(): StrokeType;
    getStrokeWidth(): number;
    setStrokeWidth(width: number): void;
    setDrawColor(color: string): void;
    setFillColor(color: string): void;
    setFillType(fillType: number): void;
    setSelected(selected: boolean): void;
    protected _setStrokeType(svgElement: SVGElement, strokeType: StrokeType): void;
    protected _setStrokeWidth(svgElement: SVGElement, width: number): void;
    setDrawStyle(drawStyle: DrawStyle): void;
    getDrawStyle(): DrawStyle;
    setFillStyle(fillStyle: FillStyle): void;
    getFillStyle(): DrawStyle;
    setOpacity(opacity: number): void;
    isOnTop(): boolean;
    toXML(): Element;
    fromXML(element: Element): void;
    getWidth(): number;
    getHeight(): number;
    protected loadXMLDraw(element: Element): void;
    protected loadXMLFill(element: Element): void;
    protected getXMLNumber(elem: Element, attributeName: string): number;
    toJSON(): Object;
    fromJSON(obj: Object): void;
    protected addDraw(element: Element): void;
    protected addFill(element: Element): void;
    protected addJSONDraw(obj: any): void;
    protected loadJSONDraw(obj: any): void;
    protected loadJSONFill(obj: any): void;
    protected addJSONFill(obj: any): void;
    getProperties(): string[];
    getType(): string;
}
