import type { CircleLayerSpecification, SymbolLayerSpecification, StyleSpecification, GeoJSONFeature, LngLatLike, RequestTransformFunction, GestureOptions, StyleImageMetadata } from 'maplibre-gl';
import type { BBox, GeoJsonProperties } from 'geojson';
import type { Color, Source } from '../types';
import type { CategoryLegend } from '../Legend/types';
export declare type PoiMapData = Partial<{
    sources: StyleSpecification['sources'];
    layers: Layer[];
}>;
export declare type Images = Record<string, {
    id: string;
    url: string;
    options?: Partial<StyleImageMetadata>;
}>;
export interface PoiMapOptions {
    style?: string | PoiMapStyleOption;
    /**
     * A callback run before the Map makes a request for an external URL.
     * The callback can be used to modify the url, set headers, or set the credentials property for cross-origin requests.
     * Expected to return an object with a url property and optionally headers and credentials properties.
     *
     * Especially useful for mapbox://
     */
    transformRequest?: RequestTransformFunction;
    /**
     * Maximum boundaries of the map, outside of which the user cannot zoom/move
     * Also set the position of the map when rendering.
     */
    bbox?: BBox;
    center?: LngLatLike;
    zoom?: number;
    minZoom?: number;
    maxZoom?: number;
    aspectRatio?: number;
    interactive?: boolean;
    title?: string;
    subtitle?: string;
    description?: string;
    legend?: CategoryLegend;
    /** Link button to source */
    sourceLink?: Source;
    cooperativeGestures?: boolean | GestureOptions;
    /** Images to load by the Map. keys are image ids  */
    images?: Images;
}
export declare type PoiMapStyleOption = Partial<Pick<StyleSpecification, 'sources' | 'layers'>>;
export declare type LayerSpecification = CircleLayerSpecification | SymbolLayerSpecification;
declare type BaseLayer = {
    id: string;
    source: string;
    sourceLayer?: string;
    /**
     * A feature for which a popup is defined will update the cursor style in pointer mode
     */
    popup?: PopupLayer;
};
/**
 * Base on Maplibre layers https://maplibre.org/maplibre-style-spec/layers/
 * Use only part of the configuration to build layers with consistent styles.
 */
export declare type CircleLayer = BaseLayer & {
    type: CircleLayerSpecification['type'];
    color: Color;
    borderColor?: Color;
    circleRadius?: number;
    circleStrokeWidth?: number;
    /**
     * Set a marker color based on a value.
     * If no match, default color comes from `color`
     */
    colorMatch?: {
        key: string;
        colors: {
            [key: string]: Color;
        };
        borderColors?: {
            [key: string]: Color;
        };
    };
};
export declare type SymbolLayer = BaseLayer & {
    type: SymbolLayerSpecification['type'];
    /** id of the image to use as icon-image */
    iconImageId: string;
    /**
     * Set a icon image based on a value.
     * If no match, default icon image comes from `iconImageId`
     */
    iconImageMatch?: {
        key: string;
        /** Keys must match from the options.images keys  */
        imageIds: Record<string, string>;
    };
};
export declare type Layer = CircleLayer | SymbolLayer;
export declare const POPUP_DISPLAY: {
    readonly tooltip: "tooltip";
    readonly sidebar: "sidebar";
    readonly modal: "modal";
};
export declare type PopupDisplayTypes = keyof typeof POPUP_DISPLAY;
export declare type PopupLayer = {
    /**
     * Control where to display the popup
     * - `sidebar`: As a side element (on the left)
     * - `tooltip`: Above the feature that has been clicked
     * - `modal`: As a modal (takes all width)
     */
    display: PopupDisplayTypes;
    getContent: (id?: GeoJSONFeature['id'], properties?: GeoJsonProperties) => Promise<string>;
    getLoadingContent: () => string;
};
export declare type GeoPoint = {
    lat: number;
    lon: number;
};
/** A configuration map for popups where keys are layer ids and values are PopupLayer object. */
export declare type PopupConfigurationByLayers = {
    [key: string]: PopupLayer;
};
export declare type CenterZoomOptions = {
    zoom?: number;
    center?: LngLatLike;
};
export {};
