import { NgZone } from '@angular/core';
import { Observable } from 'rxjs';
import { BoundsLiteral } from '../interface/bounds';
import { CircleOptions } from '../interface/circle-options';
import { GeoPoint } from '../interface/geo-point';
import { MapOptions } from '../interface/map-options';
import { MarkerOptions } from '../interface/marker-options';
import { Padding } from '../interface/padding';
import { RectangleOptions } from '../interface/rectangle-options';
import { MapsAPILoader } from './maps-api-loader/maps-api-loader';
import * as i0 from "@angular/core";
export declare abstract class MapsApiWrapper<T = any, C = any, R = any, I = any> {
    protected _loader: MapsAPILoader;
    protected _zone: NgZone;
    protected _api?: Promise<T>;
    protected _mapResolver?: (value: T) => void;
    constructor(_loader: MapsAPILoader, _zone: NgZone);
    abstract createMap(el: HTMLElement, center: GeoPoint, options: MapOptions): void | Promise<void>;
    abstract setMapOptions(options: MapOptions): void | Promise<void>;
    abstract createMarker(position: GeoPoint, options?: MarkerOptions, addToMap?: boolean): Promise<any>;
    abstract clearInstanceListeners(): void;
    getNativeMap(): Promise<T | undefined>;
    abstract triggerMapEvent(eventName: string): Promise<void>;
    abstract getCenter(): Promise<GeoPoint | undefined>;
    abstract setCenter(newCenter: GeoPoint): Promise<void>;
    abstract panTo(newCenter: GeoPoint): Promise<void>;
    abstract panToBounds(bounds: BoundsLiteral, boundsPadding?: number | Padding): void | Promise<void>;
    abstract fitBounds(bounds: BoundsLiteral, boundsPadding?: number | Padding): void | Promise<void>;
    abstract getBounds(): Promise<BoundsLiteral | undefined>;
    abstract getZoom(): Promise<number | undefined>;
    abstract setZoom(zoom: number): Promise<any>;
    abstract getMapTypeId(): Promise<google.maps.MapTypeId | string | undefined>;
    abstract subscribeToMapEvent(eventName: string): Observable<any>;
    abstract createInfoWindow(center: GeoPoint | null, options: any): Promise<I>;
    abstract createDrawingManager(param: any, addToMap?: boolean): Promise<any>;
    abstract createCircle(center: GeoPoint, options: CircleOptions): Promise<C>;
    abstract createRectangle(box: BoundsLiteral, options: RectangleOptions): Promise<R>;
    abstract createPolyline(options: any): Promise<any>;
    abstract createPolygon(options: any): Promise<any>;
    static ɵfac: i0.ɵɵFactoryDeclaration<MapsApiWrapper<any, any, any, any>, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<MapsApiWrapper<any, any, any, any>>;
}
