import * as Geom from '../geom.js';
import * as Events from '../events.js';
import { Plugin, PluginApi, PluginHooks, PluginListeners } from '../plugins.js';
import type { HtmlCanvasAlternative } from './canvasrenderer.js';
export interface CanvasOptions {
    element: HTMLElement;
}
export type LazyCanvasOptions = string | HTMLElement | CanvasOptions;
export type Event<T> = Events.Event<T> & {
    /** For drawing events the rendering context of the underlying
    canvas set up for drawing the element. */
    renderingContext?: CanvasRenderingContext2D;
};
export interface HtmlCanvasApi extends PluginApi {
    /** Returns the underlying canvas element. */
    get element(): HTMLCanvasElement;
    /** Update the underlying canvas element. */
    set element(element: HTMLCanvasElement);
    /** Returns the actual canvas context */
    get context(): CanvasRenderingContext2D;
    clientToCanvas(clientPos: Geom.Point): Geom.Point;
    canvasToClient(renderPos: Geom.Point): Geom.Point;
}
export declare class HtmlCanvas implements Plugin, HtmlCanvasAlternative {
    private _update;
    private _container?;
    private _offscreenCanvas;
    private _offscreenContext;
    private _mainCanvas;
    private _context;
    private _resizeObserver;
    private _resizeHandler;
    private _prevUpdateHash;
    private _scaleFactor;
    private _cssWidth;
    private _cssHeight;
    meta: {
        name: string;
    };
    get api(): HtmlCanvasApi;
    get hooks(): PluginHooks;
    get listeners(): PluginListeners;
    private _extendEvent;
    static extractOptions(options: unknown): CanvasOptions;
    constructor(options: CanvasOptions);
    private _setCanvas;
    unregister(): void;
    get element(): HTMLCanvasElement;
    set element(element: HTMLCanvasElement);
    get context(): CanvasRenderingContext2D;
    private _calcSize;
    frameBegin(): void;
    frameEnd(): void;
    private _clientRect;
    private _canvasScale;
    private _clientToCanvas;
    private _canvasToClient;
    private _toCanvasElement;
    private _createResizeObserverFor;
}
