import type { Bounds, Coordinates, GridSectionJsonResponse, LocationJsonResponse } from "@what3words/api";
export type ViewType = "road" | "hybrid" | "satellite" | "terrain";
export type EventType = "loaded" | "maptype_changed" | "zoom_changed" | "bounds_changed" | "click";
export type MapProviderName = "google";
export interface Place {
    value: string;
    id: string;
    description: string;
    distance: {
        value: number;
        units: string;
    };
}
export declare abstract class MapProvider {
    selected_zoom: number;
    abstract get center(): Coordinates | undefined;
    abstract set center(coordinate: Coordinates);
    abstract get zoom(): number | undefined;
    abstract set zoom(zoom: number);
    abstract get bounds(): Bounds;
    abstract get mapBounds(): {
        south: number;
        east: number;
        north: number;
        west: number;
    };
    abstract get viewType(): ViewType;
    abstract set viewType(type: ViewType);
    abstract set options(options: any);
    abstract set mapTypeControlPosition(position: number);
    abstract set zoomControlPosition(position: number);
    abstract set fullscreenControlPosition(position: number);
    abstract set streetViewControlPosition(position: number);
    abstract set rotateControlPosition(position: number);
    abstract set mapTypeId(id: string);
    abstract init(map: HTMLElement, opts: {
        version: string;
        api_key: string;
        libraries: string[];
        language: string;
        region: string;
        center?: {
            lat: number;
            lng: number;
        };
        tilt?: number;
        disable_default_ui?: boolean;
        zoom?: number;
        zoom_control?: boolean;
        zoom_control_position?: google.maps.ControlPosition;
        map_type_id?: ViewType;
        map_type_control?: boolean;
        map_type_control_position?: google.maps.ControlPosition;
        scale_control?: boolean;
        street_view_control?: boolean;
        street_view_control_position?: google.maps.ControlPosition;
        rotate_control?: boolean;
        rotate_control_position?: google.maps.ControlPosition;
        fullscreen_control?: boolean;
        fullscreen_control_position?: google.maps.ControlPosition;
    }, onInit?: () => void): void;
    abstract addEventListener(event: EventType, listener: (...params: any[]) => void, opts?: {
        once: boolean;
    }): void;
    abstract removeEventListener(event: EventType): void;
    abstract removeAllEventListeners(): void;
    abstract destroy(): void;
    abstract plotGrid(grid: GridSectionJsonResponse, onClick?: (coordinates: Coordinates) => void): void;
    abstract clearGrid(): void;
    abstract plotSquare(square: LocationJsonResponse["square"]): void;
    abstract plotMarker(address: LocationJsonResponse, callback?: (coordinates: Coordinates) => void, markerIcon?: string): void;
    abstract panTo(coordinate: Coordinates): void;
    abstract setMapControlPosition(control: Node, position: number): void;
    abstract addControl(control: Node | null, position: number): void;
    abstract getPlacesSuggestions(input: string, origin?: Coordinates, language?: string): Promise<Place[]>;
    abstract getCoordinatesFromPlace(id: string): Promise<Coordinates | null>;
    protected abstract createSquare(square: Bounds): any;
}
