import { CustomEventTargetBase } from './CustomEventTargetBase';
import { BasicPoint } from './point';
declare global {
    interface CSSStyleDeclaration {
        msTouchAction: string | null;
    }
}
export type DrawPadEvent = MouseEvent | Touch | PointerEvent;
export interface FromDataOptions {
    clear?: boolean;
}
export interface PointGroupOptions {
    dotSize: number;
    minWidth: number;
    maxWidth: number;
    penColor: string;
}
export interface Options extends Partial<PointGroupOptions> {
    minDistance?: number;
    velocityFilterWeight?: number;
    backgroundColor?: string;
    throttle?: number;
}
export interface PointGroup extends PointGroupOptions {
    points: BasicPoint[];
}
export default class DrawPadManager extends CustomEventTargetBase {
    private canvas;
    dotSize: import("@kwiz/common").DefaultProp<number>;
    minWidth: import("@kwiz/common").DefaultProp<number>;
    maxWidth: import("@kwiz/common").DefaultProp<number>;
    penColor: import("@kwiz/common").DefaultProp<string>;
    minDistance: import("@kwiz/common").DefaultProp<number>;
    velocityFilterWeight: import("@kwiz/common").DefaultProp<number>;
    backgroundColor: import("@kwiz/common").DefaultProp<string>;
    throttle: import("@kwiz/common").DefaultProp<number>;
    private _ctx;
    private _drawningStroke;
    private _isEmpty;
    private _lastPoints;
    private _data;
    private _lastVelocity;
    private _lastWidth;
    private _strokeMoveUpdate;
    constructor(canvas: HTMLCanvasElement, options?: Options);
    clear(): void;
    fromDataURL(dataUrl: string, 
    /** default: clear, shrink and stretch all true */
    options?: {
        clear?: boolean;
        shrinkToFit?: boolean;
        stretchToFit?: boolean;
    }): Promise<void>;
    toPng(): string;
    toDataURL(type?: 'image/png' | 'image/jpeg' | 'image/svg+xml', encoderOptions?: number): string;
    on(): void;
    off(): void;
    isEmpty(): boolean;
    canUndo(): boolean;
    undoLast(): void;
    resizeCanvas(): void;
    fromData(pointGroups: PointGroup[], { clear }?: FromDataOptions): void;
    toData(): PointGroup[];
    private _handleMouseDown;
    private _handleMouseMove;
    private _handleMouseUp;
    private _handleTouchStart;
    private _handleTouchMove;
    private _handleTouchEnd;
    private _handlePointerStart;
    private _handlePointerMove;
    private _handlePointerEnd;
    private _strokeBegin;
    private _strokeUpdate;
    private _strokeEnd;
    private _handlePointerEvents;
    private _handleMouseEvents;
    private _handleTouchEvents;
    private _reset;
    private _createPoint;
    private _addPoint;
    private _calculateCurveWidths;
    private _strokeWidth;
    private _drawCurveSegment;
    private _drawCurve;
    private _drawDot;
    private _fromData;
    private _toSVG;
}
