// Generated by dts-bundle-generator v6.5.0

import { BBox, FeatureCollection, Geometry } from 'geojson';
import { Map as MapboxMap } from 'mapbox-gl';
import { Listener as MaplibreListener, Map as MaplibreMap } from 'maplibre-gl';

export declare type Level = number;
export declare type LevelsRange = {
	min: Level;
	max: Level;
};
export declare type IndoorMapOptions = {
	beforeLayerId?: string;
	defaultLevel?: number;
	layers?: Array<LayerSpecification>;
	layersToHide?: Array<string>;
	showFeaturesWithEmptyLevel?: boolean;
};
export declare type IndoorMapGeoJSON = FeatureCollection<Geometry>;
export declare type LayerSpecification = any;
export declare type FilterSpecification = any[] | null;
export declare type MapGL = MapboxMap | MaplibreMap;
export declare type MapboxMapWithIndoor = MapboxMap & {
	indoor: IndoorLayer;
};
export declare type IndoorMapEvent = "indoor.map.loaded" | "indoor.map.unloaded" | "indoor.level.changed";
export declare type MaplibreMapWithIndoor = MaplibreMap & {
	indoor: IndoorLayer;
	on(type: IndoorMapEvent, listener: MaplibreListener): MaplibreMap;
	off(type: IndoorMapEvent, listener: MaplibreListener): MaplibreMap;
};
export declare type MapGLWithIndoor = MapboxMapWithIndoor | MaplibreMapWithIndoor;
export declare class IndoorMap {
	bounds: BBox;
	geojson: IndoorMapGeoJSON;
	layers: Array<LayerSpecification>;
	levelsRange: LevelsRange;
	beforeLayerId?: string;
	layersToHide: Array<string>;
	defaultLevel: number;
	showFeaturesWithEmptyLevel: boolean;
	constructor(bounds: BBox, geojson: IndoorMapGeoJSON, layers: Array<LayerSpecification>, levelsRange: LevelsRange, layersToHide: Array<string>, defaultLevel: number, showFeaturesWithEmptyLevel: boolean, beforeLayerId?: string);
	static fromGeojson(geojson: IndoorMapGeoJSON, options?: IndoorMapOptions): IndoorMap;
}
export declare type SavedFilter = {
	layerId: string;
	filter: FilterSpecification;
};
/**
 * Manage indoor levels
 * @param {Map} map the Mapbox map
 */
export declare class IndoorLayer {
	_map: MapGL;
	_level: Level | null;
	_indoorMaps: Array<IndoorMap>;
	_selectedMap: IndoorMap | null;
	_previousSelectedMap: IndoorMap | null;
	_previousSelectedLevel: Level | null;
	_savedFilters: Array<SavedFilter>;
	_mapLoadedPromise: Promise<void>;
	_updateMapPromise: Promise<void>;
	constructor(map: MapGL);
	getSelectedMap(): IndoorMap | null;
	getLevel(): Level | null;
	setLevel(level: Level | null, fireEvent?: Boolean): void;
	/**
	 * ***********************
	 * Handle level change
	 * ***********************
	 */
	_addLayerForFiltering(layer: LayerSpecification, beforeLayerId?: string): void;
	addLayerForFiltering(layer: LayerSpecification, beforeLayerId?: string): void;
	_removeLayerForFiltering(layerId: string): void;
	removeLayerForFiltering(layerId: string): void;
	_updateFiltering(): void;
	/**
	 * **************
	 * Handle maps
	 * **************
	 */
	addMap(map: IndoorMap): Promise<void>;
	removeMap(map: IndoorMap): Promise<void>;
	_updateSelectedMapIfNeeded(): Promise<void>;
	_updateSelectedMap(indoorMap: IndoorMap | null): void;
	_closestMap(): IndoorMap | null;
}
/**
 * Creates a indoor control with floors buttons

 * @implements {IControl}
 */
export declare class IndoorControl {
	_map?: MapGLWithIndoor;
	_indoor?: IndoorLayer;
	_indoorMap: IndoorMap | null;
	_container?: HTMLElement;
	_levelsButtons: Array<HTMLElement>;
	_selectedButton: HTMLElement | null;
	constructor();
	onAdd(map: MapGL | MapGLWithIndoor): HTMLDivElement;
	onRemove(): void;
	_onMapLoaded: ({ indoorMap }: {
		indoorMap: IndoorMap;
	}) => void;
	_onMapUnLoaded: () => void;
	_onLevelChanged: ({ level }: {
		level: Level | null;
	}) => void;
	_updateNavigationBar(): void;
	_setSelected(level: Level | null): void;
	_createLevelButton(container: HTMLElement, level: Level): HTMLButtonElement;
	_onContextMenu(e: Event): void;
}
export declare type RemoteMap = {
	name: string;
	path: string;
	indoorMap?: IndoorMap;
};
export declare class MapServerHandler {
	serverUrl: string;
	map: MapGLWithIndoor;
	remoteMapsDownloaded: RemoteMap[];
	downloadedBounds: BBox | null;
	loadMapsPromise: Promise<void>;
	indoorMapOptions?: IndoorMapOptions;
	private constructor();
	private loadMapsIfNecessary;
	private loadMapsInBounds;
	private addCustomMap;
	private removeCustomMap;
	static manage(server: string, map: MapGL, indoorMapOptions?: IndoorMapOptions): MapServerHandler;
}
declare const _default: {
	DefaultLayers: any[];
};
export function addIndoorTo(map: MapGL): MapGLWithIndoor;

export {
	_default as DefaultStyle,
};

export {};
