import { EventCallback } from "@openremote/core";
import { LitElement, PropertyValues } from "lit";
import { IControl, LngLat, LngLatBoundsLike, LngLatLike } from "maplibre-gl";
import { ClusterConfig, MapWidget } from "./mapwidget";
import "./markers/or-map-marker";
import "./markers/or-map-marker-asset";
import { OrMapMarkerChangedEvent } from "./markers/or-map-marker";
import * as Util from "./util";
import { ValueInputProviderGenerator } from "@openremote/or-mwc-components/or-mwc-input";
import { Asset, Attribute, GeoJsonConfig, GeoJSONPoint, MapType, WellknownAttributes } from "@openremote/model";
export { Util, LngLatLike, LngLat, ClusterConfig };
export * from "./markers/or-map-marker";
export * from "./markers/or-map-marker-asset";
export * from "./markers/or-cluster-marker";
export { IControl } from "maplibre-gl";
export * from "./or-map-asset-card";
export * from "./or-map-legend";
export interface AssetWithLocation extends Asset {
    attributes: {
        [index: string]: Attribute<any>;
    } & {
        [WellknownAttributes.LOCATION]: Attribute<GeoJSONPoint>;
    };
}
export interface ViewSettings {
    center: LngLatLike;
    bounds?: LngLatBoundsLike | null;
    zoom: number;
    maxZoom: number;
    minZoom: number;
    boxZoom: boolean;
    geocodeUrl: string;
    geoJson?: GeoJsonConfig;
}
export interface MapEventDetail {
    lngLat: LngLat;
    doubleClick: boolean;
}
export interface MapGeocoderEventDetail {
    geocode: any;
}
export declare class OrMapLoadedEvent extends CustomEvent<void> {
    static readonly NAME = "or-map-loaded";
    constructor();
}
export declare class OrMapClickedEvent extends CustomEvent<MapEventDetail> {
    static readonly NAME = "or-map-clicked";
    constructor(lngLat: LngLat, doubleClick?: boolean);
}
export declare class OrMapLongPressEvent extends CustomEvent<MapEventDetail> {
    static readonly NAME = "or-map-long-press";
    constructor(lngLat: LngLat);
}
export declare class OrMapGeocoderChangeEvent extends CustomEvent<MapGeocoderEventDetail> {
    static readonly NAME = "or-map-geocoder-change";
    constructor(geocode: any);
}
export declare class OrMapMarkersChangedEvent extends CustomEvent<AssetWithLocation[]> {
    static readonly NAME = "or-map-markers-changed";
    constructor(assets: AssetWithLocation[]);
}
declare global {
    export interface HTMLElementEventMap {
        [OrMapClickedEvent.NAME]: OrMapClickedEvent;
        [OrMapLoadedEvent.NAME]: OrMapLoadedEvent;
        [OrMapLongPressEvent.NAME]: OrMapLongPressEvent;
        [OrMapGeocoderChangeEvent.NAME]: OrMapGeocoderChangeEvent;
        [OrMapMarkersChangedEvent.NAME]: OrMapMarkersChangedEvent;
    }
}
export type ControlPosition = "top-right" | "top-left" | "bottom-right" | "bottom-left";
export declare const geoJsonPointInputTemplateProvider: ValueInputProviderGenerator;
export declare class OrMap extends LitElement {
    static styles: import("lit").CSSResult;
    type: MapType;
    cluster?: ClusterConfig;
    center?: LngLatLike;
    zoom?: number;
    showGeoCodingControl: boolean;
    showBoundaryBoxControl: boolean;
    useZoomControl: boolean;
    geoJson?: GeoJsonConfig;
    showGeoJson: boolean;
    boundary: string[];
    controls?: (IControl | [IControl, ControlPosition?])[];
    protected _initCallback?: EventCallback;
    protected _map?: MapWidget;
    protected _loaded: boolean;
    protected _resizeObserver?: ResizeObserver;
    protected _mapContainer?: HTMLElement;
    protected _slotElement?: HTMLSlotElement;
    constructor();
    addAssetMarker(asset: AssetWithLocation): void;
    cleanUpAssetMarkers(): void;
    reload(): Promise<void>;
    protected firstUpdated(_changedProperties: PropertyValues): void;
    connectedCallback(): void;
    disconnectedCallback(): void;
    protected render(): import("lit").TemplateResult<1>;
    protected updated(changedProperties: PropertyValues): void;
    refresh(): void;
    loadMap(): void;
    resize(): void;
    flyTo(coordinates?: LngLatLike, zoom?: number): void;
    protected _onMarkerChangedEvent(evt: OrMapMarkerChangedEvent): void;
}
