import { default as L } from 'leaflet';
import { HeatmapLayerOptions, LanguageInfo, MapStyleVariant, PointLayerOptions, PolygonLayerOptions, PolylineLayerOptions, ReferenceMapStyle, StyleSpecification, GeolocationType, Map as MapSDK } from '@maptiler/sdk';
export { Language, MapStyle } from '@maptiler/sdk';
/**
 * A Maptiler Layer for Leaflet consists in adding a MapTiler SDK Map
 * inside of Leaflet as a custom layer.
 */
interface MaptilerLayerInterface extends L.Layer {
    /**
     * Get the Maptiler Map instance out of the layer.
     * This can be convenient to add further events and logic.
     */
    getMaptilerSDKMap: () => MapSDK;
    /**
     * Get the HTML Canvas element where the MapTiler Map is
     * instantiated.
     */
    getCanvas: () => HTMLCanvasElement;
    /**
     * Set the style of the internal MapTiler Map instance.
     * The style can be one of the built-in list (as in `MaptilerStyle`)
     * or a raw URL.
     */
    setStyle: (s: null | ReferenceMapStyle | MapStyleVariant | StyleSpecification | string) => void;
    /**
     * Set the language of the map from the built-in list of
     * supported languages (see `Language`)
     */
    setLanguage: (l: LanguageInfo | string) => void;
    /**
     * Add a heatmap layer from a geoJSON datasource or a
     * dataset hosted on MapTiler Cloud account.
     * Read more about helpers at
     * https://github.com/maptiler/maptiler-sdk-js#vector-layer-helpers
     */
    addHeatmap: (options: HeatmapLayerOptions) => {
        heatmapLayerId: string;
        heatmapSourceId: string;
    };
    /**
     * Add a polygon layer from a geoJSON datasource or a
     * dataset hosted on MapTiler Cloud account.
     * Read more about helpers at
     * https://github.com/maptiler/maptiler-sdk-js#vector-layer-helpers
     */
    addPolygon: (options: PolygonLayerOptions) => {
        polygonLayerId: string;
        polygonOutlineLayerId: string;
        polygonSourceId: string;
    };
    /**
     * Add a point layer from a geoJSON datasource or a
     * dataset hosted on MapTiler Cloud account.
     * Read more about helpers at
     * https://github.com/maptiler/maptiler-sdk-js#vector-layer-helpers
     */
    addPoint: (options: PointLayerOptions) => {
        pointLayerId: string;
        clusterLayerId: string;
        labelLayerId: string;
        pointSourceId: string;
    };
    /**
     * Add a polyline layer from a geoJSON datasource or a
     * dataset hosted on MapTiler Cloud account.
     * Read more about helpers at
     * https://github.com/maptiler/maptiler-sdk-js#vector-layer-helpers
     */
    addPolyline: (options: PolylineLayerOptions) => Promise<{
        polylineLayerId: string;
        polylineOutlineLayerId: string;
        polylineSourceId: string;
    }>;
    /**
     * Take a screenshot of the displayed map.
     * Read more about this feature at
     * https://github.com/maptiler/maptiler-sdk-js#take-screenshots-programmatically
     */
    takeScreenshot: (options?: {
        download?: boolean;
        filename?: string;
    }) => Promise<Blob>;
}
/**
 * Options to create a MaptilerLayer
 */
export type MaptilerLayerOptions = {
    /**
     * Maptiler Cloud API key
     */
    apiKey: string;
    /**
     * Style hosted on MapTiler Cloud or raw URL.
     * Default: MapTiler Streets style
     */
    style?: ReferenceMapStyle | MapStyleVariant | StyleSpecification | string;
    /**
     * Language for the map to display
     * Default: uses the language as defined in the style
     */
    language?: LanguageInfo | string;
    /**
     * If the value is `true` or `"POINT"` then the positionning uses the MapTiler Cloud
     * Geolocation to find the non-GPS location point.
     *
     * If the value is `"COUNTRY"` then the map is centered around the bounding box of the country.
     *
     * If the value is `false`, no geolocation is performed and the map centering and zooming depends on other options or on
     * the built-in defaults.
     *
     * Default: `false`
     */
    geolocate?: (typeof GeolocationType)[keyof typeof GeolocationType] | boolean;
};
/**
 * A Maptiler Layer for Leaflet consists in adding a MapTiler SDK Map
 * inside of Leaflet as a custom layer.
 */
export declare const MaptilerLayer: {
    new (options: MaptilerLayerOptions): MaptilerLayerInterface;
} & Omit<typeof L.Layer, "prototype">;
/**
 * Factory function to instantiate a MaptilerLayer.
 * Does exactly the same as calling `new MaptilerLayer(options)`
 */
export declare function maptilerLayer(options: MaptilerLayerOptions): MaptilerLayerInterface;
