import { default as Layer } from 'ol/layer/Layer.js';
import { WebGL2Renderer, WebGL2WarpedMap } from '@allmaps/render/webgl2';
import { WarpedMapList, WarpedMapLayerOptions } from '@allmaps/render';
import { FrameState } from 'ol/Map.js';
import { Extent } from 'ol/extent';
import { DistortionMeasure, TransformationType } from '@allmaps/transform';
import { Ring, ImageInformations, Gcp } from '@allmaps/types';

export type OpenLayersWarpedMapLayerOptions = WarpedMapLayerOptions;
/**
 * WarpedMapLayer class.
 *
 * This class renders georeferenced maps from a Georeference Annotation on an OpenLayers map.
 * WarpedMapLayer is a subclass of [Layer](https://openlayers.org/en/latest/apidoc/module-ol_layer_Layer-Layer.html).
 */
export declare class WarpedMapLayer extends Layer {
    container: HTMLElement;
    canvas: HTMLCanvasElement;
    gl: WebGL2RenderingContext;
    canvasSize: [number, number];
    renderer: WebGL2Renderer;
    private resizeObserver;
    /**
     * Creates a WarpedMapLayer instance
     * @param options - the WebGL2 renderer options
     */
    constructor(options?: Partial<OpenLayersWarpedMapLayerOptions>);
    /**
     * Adds a [Georeference Annotation](https://iiif.io/api/extension/georef/).
     * @param annotation - Georeference Annotation
     * @returns - the map IDs of the maps that were added, or an error per map
     */
    addGeoreferenceAnnotation(annotation: unknown): Promise<(string | Error)[]>;
    /**
     * Removes a [Georeference Annotation](https://iiif.io/api/extension/georef/).
     * @param annotation - Georeference Annotation
     * @returns - the map IDs of the maps that were removed, or an error per map
     */
    removeGeoreferenceAnnotation(annotation: unknown): Promise<(string | Error)[]>;
    /**
     * Adds a [Georeference Annotation](https://iiif.io/api/extension/georef/) by URL.
     * @param annotationUrl - Georeference Annotation
     * @returns - the map IDs of the maps that were added, or an error per map
     */
    addGeoreferenceAnnotationByUrl(annotationUrl: string): Promise<(string | Error)[]>;
    /**
     * Removes a [Georeference Annotation](https://iiif.io/api/extension/georef/) by URL.
     * @param annotationUrl - Georeference Annotation
     * @returns - the map IDs of the maps that were removed, or an error per map
     */
    removeGeoreferenceAnnotationByUrl(annotationUrl: string): Promise<(string | Error)[]>;
    /**
     * Adds a Georeferenced map.
     * @param georeferencedMap - Georeferenced map
     * @returns - the map ID of the map that was added, or an error
     */
    addGeoreferencedMap(georeferencedMap: unknown): Promise<string | Error>;
    /**
     * Removes a Georeferenced map.
     * @param georeferencedMap - Georeferenced map
     * @returns - the map ID of the map that was remvoed, or an error
     */
    removeGeoreferencedMap(georeferencedMap: unknown): Promise<string | Error>;
    /**
     * Returns the WarpedMapList object that contains a list of the warped maps of all loaded maps
     * @returns the warped map list
     */
    getWarpedMapList(): WarpedMapList<WebGL2WarpedMap>;
    /**
     * Returns a single map's warped map
     * @param mapId - ID of the map
     * @returns the warped map
     */
    getWarpedMap(mapId: string): WebGL2WarpedMap | undefined;
    /**
     * Make a single map visible
     * @param mapId - ID of the map
     */
    showMap(mapId: string): void;
    /**
     * Make multiple maps visible
     * @param mapIds - IDs of the maps
     */
    showMaps(mapIds: Iterable<string>): void;
    /**
     * Make a single map invisible
     * @param mapId - ID of the map
     */
    hideMap(mapId: string): void;
    /**
     * Make multiple maps invisible
     * @param mapIds - IDs of the maps
     */
    hideMaps(mapIds: Iterable<string>): void;
    /**
     * Returns the visibility of a single map
     * @returns - whether the map is visible
     */
    isMapVisible(mapId: string): boolean | undefined;
    /**
     * Sets the resource mask of a single map
     * @param mapId - ID of the map
     * @param resourceMask - new resource mask
     */
    setMapResourceMask(mapId: string, resourceMask: Ring): void;
    /**
     * Sets the GCOs of a single map
     * @param mapId - ID of the map
     * @param gcos - new GCPs
     */
    setMapGcps(mapId: string, gcps: Gcp[]): void;
    /**
     * Sets the transformation type of multiple maps
     * @param mapIds - IDs of the maps
     * @param transformation - new transformation type
     */
    setMapsTransformationType(mapIds: Iterable<string>, transformation: TransformationType): void;
    /**
     * Sets the transformation type of a single map
     * @param mapId - ID of the map
     * @param transformation - new transformation type
     */
    setMapTransformationType(mapId: string, transformation: TransformationType): void;
    /**
     * Sets the distortion measure of multiple maps
     * @param mapIds - IDs of the maps
     * @param distortionMeasure - new distortion measure
     */
    setMapsDistortionMeasure(mapIds: Iterable<string>, distortionMeasure?: DistortionMeasure): void;
    removeGeoreferencedMapById(mapId: string): void;
    /**
     * Return the bounding box of all visible maps in the layer (inside or outside of the Viewport), in longitude/latitude coordinates.
     * @returns - Bounding box of all warped maps
     */
    getLonLatExtent(): Extent | undefined;
    /**
     * Return the bounding box of all visible maps in the layer (inside or outside of the Viewport), in projected coordinates.
     * @returns - bounding box of all warped maps
     */
    getExtent(): Extent | undefined;
    /**
     * Bring maps to front
     * @param mapIds - IDs of the maps
     */
    bringMapsToFront(mapIds: Iterable<string>): void;
    /**
     * Send maps to back
     * @param mapIds - IDs of the maps
     */
    sendMapsToBack(mapIds: string[]): void;
    /**
     * Bring maps forward
     * @param mapIds - IDs of the maps
     */
    bringMapsForward(mapIds: Iterable<string>): void;
    /**
     * Send maps backward
     * @param mapIds - IDs of the maps
     */
    sendMapsBackward(mapIds: Iterable<string>): void;
    /**
     * Returns the z-index of a single map
     * @param mapId - ID of the warped map
     * @returns - z-index of the warped map
     */
    getMapZIndex(mapId: string): number | undefined;
    /**
     * Sets the object that caches image information
     * @param imageInformations - Object that caches image information
     */
    setImageInformations(imageInformations: ImageInformations): void;
    /**
     * Gets the HTML container element of the layer
     * @returns HTML element
     */
    getContainer(): HTMLElement;
    /**
     * Gets the HTML canvas element of the layer
     * @returns HTML Canvas element
     */
    getCanvas(): HTMLCanvasElement | null;
    /**
     * Sets the options
     *
     * @param options - Options
     */
    setOptions(options?: Partial<OpenLayersWarpedMapLayerOptions>): void;
    /**
     * Gets the opacity of a single map
     * @param mapId - ID of the map
     * @returns Opacity of the map
     */
    getMapOpacity(mapId: string): number | undefined;
    /**
     * Sets the opacity of a single map
     * @param mapId - ID of the map
     * @param opacity - opacity between 0 and 1, where 0 is fully transparent and 1 is fully opaque
     */
    setMapOpacity(mapId: string, opacity: number): void;
    /**
     * Resets the opacity of a single map to fully opaque
     * @param mapId - ID of the map
     */
    resetMapOpacity(mapId: string): void;
    /**
     * Sets the saturation of a single map
     * @param saturation - saturation between 0 and 1, where 0 is grayscale and 1 are the original colors
     */
    setSaturation(saturation: number): void;
    /**
     * Resets the saturation of a single map to the original colors
     */
    resetSaturation(): void;
    /**
     * Sets the saturation of a single map
     * @param mapId - ID of the map
     * @param saturation - saturation between 0 and 1, where 0 is grayscale and 1 are the original colors
     */
    setMapSaturation(mapId: string, saturation: number): void;
    /**
     * Resets the saturation of a single map to the original colors
     * @param mapId - ID of the map
     */
    resetMapSaturation(mapId: string): void;
    /**
     * Removes a color from all maps
     * @param transformOptions - remove color options
     * @param transformOptions.hexColor - hex color to remove
     * @param transformOptions.threshold - threshold between 0 and 1
     * @param transformOptions.hardness - hardness between 0 and 1
     */
    setRemoveColor(options: Partial<{
        hexColor: string;
        threshold: number;
        hardness: number;
    }>): void;
    /**
     * Resets the color removal for all maps
     */
    resetRemoveColor(): void;
    /**
     * Removes a color from a single map
     * @param mapId - ID of the map
     * @param transformOptions - remove color options
     * @param transformOptions.hexColor] - hex color to remove
     * @param transformOptions.threshold] - threshold between 0 and 1
     * @param transformOptions.hardness] - hardness between 0 and 1
     */
    setMapRemoveColor(mapId: string, options: Partial<{
        hexColor: string;
        threshold: number;
        hardness: number;
    }>): void;
    /**
     * Resets the color for a single map
     * @param mapId - ID of the map
     */
    resetMapRemoveColor(mapId: string): void;
    /**
     * Sets the colorization for all maps
     * @param hexColor - desired hex color
     */
    setColorize(hexColor: string): void;
    /**
     * Resets the colorization for all maps
     */
    resetColorize(): void;
    /**
     * Sets the colorization for a single mapID of the map
     * @param mapId - ID of the map
     * @param hexColor - desired hex color
     */
    setMapColorize(mapId: string, hexColor: string): void;
    /**
     * Resets the colorization of a single map
     * @param mapId - ID of the map
     */
    resetMapColorize(mapId: string): void;
    /**
     * Sets the grid for all maps
     * @param enabled - whether to show the grid
     */
    setGrid(enabled: boolean): void;
    /**
     * Resets the grid for all maps
     */
    resetGrid(): void;
    /**
     * Sets the grid for a single mapID of the map
     * @param mapId - ID of the map
     * @param enabled - whether to show the grid
     */
    setMapGrid(mapId: string, enabled: boolean): void;
    /**
     * Resets the grid of a single map
     * @param mapId - ID of the map
     */
    resetMapGrid(mapId: string): void;
    /**
     * Disposes all WebGL resources and cached tiles
     */
    dispose(): void;
    /**
     * Clears: removes all maps
     */
    clear(): void;
    /**
     * Render the layer.
     * @param frameState - OpenLayers frame state
     * @returns The rendered element
     */
    render(frameState: FrameState): HTMLElement;
    private resized;
    private resizeCanvas;
    private contextLost;
    private contextRestored;
    private addEventListeners;
    private removeEventListeners;
    private passWarpedMapEvent;
}
