import { RevealBoundaryStore } from './RevealBoundryStore.js';
declare type BorderDecoration = 'round' | 'bevel' | 'miter';
export interface CachedBoundingRect {
    top: number;
    left: number;
    width: number;
    height: number;
}
export interface CachedStyle {
    color: string;
    opacity: number;
    trueFillRadius: [number, number];
    borderStyle: string;
    borderColor: string;
    borderFillRadius: number;
    borderDecorationType: BorderDecoration;
    borderDecorationRadius: number;
    topLeftBorderDecorationRadius: number;
    topRightBorderDecorationRadius: number;
    bottomLeftBorderDecorationRadius: number;
    bottomRightBorderDecorationRadius: number;
    withLeftBorderFactor: number;
    withRightBorderFactor: number;
    withTopBorderFactor: number;
    withBottomBorderFactor: number;
    borderWidth: number;
    hoverLight: boolean;
    hoverLightColor: string;
    hoverLightFillMode: string;
    hoverLightFillRadius: number;
    diffuse: boolean;
    pressAnimation: boolean;
    pressAnimationFillMode: string;
    pressAnimationColor: string;
    pressAnimationSpeed: number;
    releaseAnimationAccelerateRate: number;
}
interface CachedReveal {
    radius: number;
    radiusFactor: number;
    color: string;
    opacity: number;
    pattern: CanvasPattern | null;
}
/**
 * Cached border and body pattern, for faster painting on the canvas.
 * @interface CachedRevealBitmap
 */
export interface CachedRevealBitmap {
    cachedReveal: {
        borderReveal: CachedReveal;
        fillReveal: CachedReveal;
    };
    cachedCanvas: {
        borderReveal: HTMLCanvasElement;
        fillReveal: HTMLCanvasElement;
    };
    cachedCtx: {
        borderReveal: CanvasRenderingContext2D | null;
        fillReveal: CanvasRenderingContext2D | null;
    };
}
export declare class CanvasConfig {
    protected _store: RevealBoundaryStore;
    pxRatio: number;
    readonly container: HTMLElement;
    readonly canvas: HTMLCanvasElement;
    ctx: CanvasRenderingContext2D | null;
    private readonly computedStyle;
    paintedWidth: number;
    paintedHeight: number;
    protected cachedImg: CachedRevealBitmap;
    currentFrameId: number;
    cachedBoundingRectFrameId: number;
    cachedBoundingRect: CachedBoundingRect;
    cachedStyleFrameId: number;
    cachedStyle: CachedStyle;
    dirty: boolean;
    /**
     * If is cleaned up by `RevealBoundaryStore` during animation duration
     * checkup.
     */
    cleanedUp: boolean;
    mouseUpClientX: number | null;
    mouseUpClientY: number | null;
    mouseDownAnimateStartFrame: number | null;
    mouseDownAnimateCurrentFrame: number | null;
    mouseDownAnimateReleasedFrame: number | null;
    mouseDownAnimateLogicFrame: number | null;
    mousePressed: boolean;
    mouseReleased: boolean;
    constructor(store: RevealBoundaryStore, $canvas: HTMLCanvasElement, $container: HTMLElement);
    cacheBoundingRect: () => void;
    getTrueFillRadius: (trueFillRadius?: [number, number], fillMode?: string) => [number, number];
    getPropFromMultipleSource: (domPropsName: string, cssPropsName: string) => string;
    getNumberPropFromMultipleSource: (domPropsName: string, cssPropsName: string) => number;
    cacheCanvasPaintingStyle: () => void;
    updateCachedReveal: () => void;
    updateCachedBitmap: () => void;
    mouseInCanvas: () => boolean;
    syncSizeToElement: (x: HTMLCanvasElement) => void;
    syncSizeToRevealRadius: (x: HTMLCanvasElement, factor: number) => void;
    updateAnimateGrd: (frame: number, grd: CanvasGradient) => void;
    private drawShape;
    clear: () => boolean;
    paint: (skipSamePointerPositionCheck?: boolean | undefined) => boolean;
}
export {};
//# sourceMappingURL=CanvasConfig.d.ts.map