import { Color } from "tns-core-modules/color/color";
import { ContentView } from "tns-core-modules/ui/content-view";
import { ImageSource } from "tns-core-modules/image-source";
export declare enum MapStyle {
    DARK,
    OUTDOORS,
    LIGHT,
    SATELLITE,
    SATELLITE_STREETS,
    STREETS,
    TRAFFIC_DAY,
    TRAFFIC_NIGHT
}
export interface Point {
    x: number;
    y: number;
}
export interface CoordinateRegion {
    minLat: number;
    maxLat: number;
    minLng: number;
    maxLng: number;
}
export interface LatLng {
    lat: number;
    lng: number;
}
export interface QueryRenderedFeaturesOptions {
    point: LatLng;
    layerIds?: string[];
}
export interface Feature {
    id: any;
    type?: string;
    properties: Object;
}
export interface AddPolygonOptions {
    id?: any;
    points: LatLng[];
    fillColor?: string | Color;
    fillOpacity?: number;
    strokeColor?: string | Color;
    strokeWidth?: number;
    strokeOpacity?: number;
}
export interface UserLocation {
    location: LatLng;
    speed: number;
}
export interface SetCenterOptions extends LatLng {
    animated?: boolean;
}
export interface AddPolylineOptions {
    id?: any;
    width?: number;
    color?: string | Color;
    opacity?: number;
    points: LatLng[];
    drawArrows?: boolean;
}
export interface MapboxMarker extends LatLng {
    id?: any;
    title?: string;
    subtitle?: string;
    icon?: string;
    iconPath?: string;
    onTap?: Function;
    onCalloutTap?: Function;
    selected?: boolean;
    update?: (newSettings: MapboxMarker) => void;
    ios?: any;
    android?: any;
}
export interface SetZoomLevelOptions {
    level: number;
    animated: boolean;
}
export interface SetTiltOptions {
    tilt: number;
    duration: number;
}
export interface ShowOptionsMargins {
    left?: number;
    right?: number;
    top?: number;
    bottom?: number;
}
export interface Bounds {
    north: number;
    east: number;
    south: number;
    west: number;
}
export interface Viewport {
    bounds: Bounds;
    zoomLevel: number;
}
export interface SetViewportOptions {
    bounds: Bounds;
    animated?: boolean;
    padding?: number;
}
export interface DeleteOfflineRegionOptions {
    name: string;
}
export interface MapboxCluster {
    points: number;
    color: string;
}
export interface AddGeoJsonClusteredOptions {
    name: string;
    data: string;
    clusterMaxZoom?: number;
    clusterRadius?: number;
    clusters?: Array<MapboxCluster>;
}
export interface AddLayerOptions {
    id: string;
    source: string;
    sourceLayer: string;
    type: string;
    circleColor?: string | Color;
    circleOpacity?: number;
    circleRadius?: number;
    circleStrokeColor?: string | Color;
    circleStrokeWidth?: number;
    fillColor?: string | Color;
    fillOpacity?: number;
    lineCap?: string;
    lineJoin?: string;
    lineColor?: string | Color;
    lineOpacity?: number;
    lineWidth?: number;
}
export declare type UserTrackingMode = "NONE" | "FOLLOW" | "FOLLOW_WITH_HEADING" | "FOLLOW_WITH_COURSE";
export interface AddSourceOptions {
    url: string;
    type: string;
    data?: any;
}
export declare type UserLocationCameraMode = "NONE" | "NONE_COMPASS" | "NONE_GPS" | "TRACKING" | "TRACK_COMPASS" | "TRACKING_GPS" | "TRACK_GPS_NORTH";
export interface TrackUserOptions {
    mode: UserLocationCameraMode;
    animated?: boolean;
}
export interface AddExtrusionOptions {
}
export interface OfflineRegion {
    name: string;
    bounds: Bounds;
    minZoom: number;
    maxZoom: number;
    style: MapStyle;
}
export interface DownloadProgress {
    name: string;
    completed: number;
    expected: number;
    percentage: number;
    complete: boolean;
    completedSize?: number;
}
export interface DownloadOfflineRegionOptions extends OfflineRegion {
    onProgress?: (data: DownloadProgress) => void;
    accessToken?: string;
}
export interface ListOfflineRegionsOptions {
    accessToken?: string;
}
export interface ShowOptions {
    accessToken: string;
    style?: MapStyle;
    margins?: ShowOptionsMargins;
    center?: LatLng;
    zoomLevel?: number;
    showUserLocation?: boolean;
    hideLogo?: boolean;
    hideAttribution?: boolean;
    hideCompass?: boolean;
    disableRotation?: boolean;
    disableScroll?: boolean;
    disableZoom?: boolean;
    disableTilt?: boolean;
    markers?: MapboxMarker[];
    onLocationPermissionGranted?: any;
    onLocationPermissionDenied?: any;
    onMapReady?: any;
    onScrollEvent?: any;
    onMoveBeginEvent?: any;
    context?: any;
    parentView?: any;
}
export interface ShowResult {
    ios: any;
    android: any;
}
export interface AnimateCameraOptions {
    target: LatLng;
    zoomLevel?: number;
    altitude?: number;
    bearing?: number;
    tilt?: number;
    duration?: number;
}
export interface MapboxCommonApi {
    requestFineLocationPermission(): Promise<any>;
    hasFineLocationPermission(): Promise<boolean>;
}
export interface MapboxApi {
    setMapboxViewInstance(mapboxNativeViewInstance: any): void;
    setMapboxMapInstance(mapboxNativeMapInstance: any): void;
    initEventHandlerShim(settings: any, mapboxNativeViewInstance: any): void;
    onMapEvent(eventName: any, id: any, callback: any, nativeMapView?: any): void;
    offMapEvent(eventName: any, id: any, nativeMapView?: any): void;
    show(options: ShowOptions): Promise<ShowResult>;
    hide(): Promise<any>;
    unhide(): Promise<any>;
    destroy(nativeMap?: any): Promise<any>;
    onStart(nativeMap?: any): Promise<any>;
    onResume(nativeMap?: any): Promise<any>;
    onPause(nativeMap?: any): Promise<any>;
    onStop(nativeMap?: any): Promise<any>;
    onLowMemory(nativeMap?: any): Promise<any>;
    onDestroy(nativeMap?: any): Promise<any>;
    setMapStyle(style: string | MapStyle, nativeMap?: any): Promise<any>;
    addMarkers(markers: MapboxMarker[], nativeMap?: any): Promise<any>;
    removeMarkers(options?: any, nativeMap?: any): Promise<any>;
    setCenter(options: SetCenterOptions, nativeMap?: any): Promise<any>;
    getCenter(nativeMap?: any): Promise<LatLng>;
    setZoomLevel(options: SetZoomLevelOptions, nativeMap?: any): Promise<any>;
    getZoomLevel(nativeMap?: any): Promise<number>;
    setTilt(options: SetTiltOptions, nativeMap?: any): Promise<any>;
    getTilt(nativeMap?: any): Promise<number>;
    getUserLocation(nativeMap?: any): Promise<UserLocation>;
    showUserLocationMarker(options: any, nativeMap?: any): void;
    hideUserLocationMarker(nativeMap?: any): void;
    changeUserLocationMarkerMode(renderModeString: any, cameraModeString: UserLocationCameraMode, nativeMap?: any): void;
    forceUserLocationUpdate(location: any, nativeMap?: any): void;
    trackUser(options: TrackUserOptions, nativeMap?: any): Promise<void>;
    getTrackingMode(nativeMap?: any): UserLocationCameraMode;
    addSource(id: string, options: AddSourceOptions, nativeMapView?: any): Promise<any>;
    removeSource(id: string, nativeMap?: any): Promise<any>;
    addLayer(style: any, nativeMapView?: any): Promise<any>;
    removeLayer(id: string, nativeMapView?: any): Promise<any>;
    addLinePoint(id: string, point: any, nativeMapView?: any): Promise<any>;
    queryRenderedFeatures(options: QueryRenderedFeaturesOptions, nativeMap?: any): Promise<Array<Feature>>;
    addPolygon(options: AddPolygonOptions, nativeMap?: any): Promise<any>;
    removePolygons(ids?: Array<any>, nativeMap?: any): Promise<any>;
    addPolyline(options: AddPolylineOptions, nativeMap?: any): string;
    removePolylines(ids?: Array<any>, nativeMap?: any): any;
    updatePolyline(id: string, newPoints: Array<LatLng>, nativeMap?: any): any;
    animateCamera(options: AnimateCameraOptions, nativeMap?: any): Promise<any>;
    setOnMapClickListener(listener: (data: LatLng) => void, nativeMap?: any): Promise<any>;
    setOnMapLongClickListener(listener: (data: LatLng) => void, nativeMap?: any): Promise<any>;
    setOnScrollListener(listener: (data?: LatLng) => void, nativeMap?: any): Promise<void>;
    setOnMoveBeginListener(listener: (data?: LatLng) => void, nativeMap?: any): Promise<void>;
    setOnFlingListener(listener: () => void, nativeMap?: any): Promise<any>;
    setOnCameraMoveListener(listener: () => void, nativeMap?: any): Promise<any>;
    setOnCameraMoveCancelListener(listener: () => void, nativeMap?: any): Promise<any>;
    setOnCameraIdleListener(listener: () => void, nativeMap?: any): Promise<any>;
    requestFineLocationPermission(): Promise<any>;
    hasFineLocationPermission(): Promise<boolean>;
    getViewport(nativeMap?: any): Promise<Viewport>;
    setViewport(options: SetViewportOptions, nativeMap?: any): Promise<any>;
    downloadOfflineRegion(options: DownloadOfflineRegionOptions): Promise<any>;
    listOfflineRegions(options?: ListOfflineRegionsOptions): Promise<Array<OfflineRegion>>;
    deleteOfflineRegion(options: DeleteOfflineRegionOptions): Promise<any>;
    addGeoJsonClustered(options: AddGeoJsonClusteredOptions): Promise<any>;
    removeSource(id: string, nativeMap?: any): Promise<any>;
    addLayer(options: AddLayerOptions): Promise<any>;
    removeLayer(id: string, nativeMap?: any): Promise<any>;
    isScrollingEnabled(nativeMap?: any): Promise<boolean>;
    setScrollingEnabled(enabled: boolean, nativeMap?: any): Promise<any>;
    convertToMapCoordinate(point: Point, nativeMap?: any): Promise<LatLng>;
    convertToOnScreenCoordinate(coordinate: LatLng, nativeMap?: any): Promise<Point>;
    getDistanceBetween(from: LatLng, to: LatLng, nativeMap?: any): Promise<number>;
    takeSnapshot(nativeMap?: any): Promise<ImageSource>;
}
export declare abstract class MapboxCommon implements MapboxCommonApi {
    static defaults: {
        style: string;
        mapStyle: string;
        margins: {
            left: number;
            right: number;
            top: number;
            bottom: number;
        };
        zoomLevel: number;
        showUserLocation: boolean;
        hideLogo: boolean;
        hideAttribution: boolean;
        hideCompass: boolean;
        disableRotation: boolean;
        disableScroll: boolean;
        disableZoom: boolean;
        disableTilt: boolean;
        delay: number;
    };
    static merge(obj1: {}, obj2: {}): any;
    requestFineLocationPermission(): Promise<any>;
    hasFineLocationPermission(): Promise<boolean>;
}
export interface MapboxViewApi {
    addMarkers(markers: MapboxMarker[]): Promise<any>;
    onMapEvent(eventName: any, id: any, callback: any): void;
    offMapEvent(eventName: any, id: any): void;
    removeMarkers(options?: any): Promise<any>;
    queryRenderedFeatures(options: QueryRenderedFeaturesOptions): Promise<Array<Feature>>;
    setOnMapClickListener(listener: (data: LatLng) => void): Promise<any>;
    setOnMapLongClickListener(listener: (data: LatLng) => void): Promise<any>;
    setOnScrollListener(listener: (data?: LatLng) => void): Promise<void>;
    setOnMoveBeginListener(listener: (data?: LatLng) => void): Promise<void>;
    setOnFlingListener(listener: () => void): Promise<any>;
    setOnCameraMoveListener(listener: () => void): Promise<any>;
    setOnCameraMoveCancelListener(listener: () => void): Promise<any>;
    setOnCameraIdleListener(listener: () => void): Promise<any>;
    getViewport(): Promise<Viewport>;
    setViewport(options: SetViewportOptions): Promise<any>;
    setMapStyle(style: string | MapStyle): Promise<any>;
    getCenter(): Promise<LatLng>;
    setCenter(options: SetCenterOptions): Promise<any>;
    getZoomLevel(): Promise<number>;
    setZoomLevel(options: SetZoomLevelOptions): Promise<any>;
    getTilt(): Promise<number>;
    setTilt(options: SetTiltOptions): Promise<any>;
    getUserLocation(): Promise<UserLocation>;
    trackUser(options: TrackUserOptions): Promise<any>;
    getTrackingMode(): UserLocationCameraMode;
    showUserLocationMarker(options: any): void;
    hideUserLocationMarker(options: any): void;
    changeUserLocationMarkerMode(renderModeString: any, cameraModeString: UserLocationCameraMode): void;
    forceUserLocationUpdate(location: any): void;
    addSource(id: string, options: AddSourceOptions): Promise<any>;
    removeSource(id: string, nativeMap?: any): Promise<any>;
    addLayer(style: any): Promise<any>;
    removeLayer(id: string): Promise<any>;
    addLinePoint(id: string, point: any): Promise<any>;
    queryRenderedFeatures(options: QueryRenderedFeaturesOptions): Promise<Array<Feature>>;
    addPolygon(options: AddPolygonOptions): Promise<any>;
    removePolygons(ids?: Array<any>): Promise<any>;
    addPolyline(options: AddPolylineOptions): string;
    removePolylines(ids?: Array<any>): any;
    updatePolyline(id: string, newPoints: Array<LatLng>): any;
    animateCamera(options: AnimateCameraOptions): Promise<any>;
    destroy(): Promise<any>;
    onStart(): Promise<any>;
    onResume(): Promise<any>;
    onPause(): Promise<any>;
    onStop(): Promise<any>;
    onLowMemory(): Promise<any>;
    onDestroy(): Promise<any>;
    isScrollingEnabled(): Promise<boolean>;
    setScrollingEnabled(enabled: boolean): Promise<any>;
    convertToMapCoordinate(point: Point): Promise<LatLng>;
    convertToOnScreenCoordinate(coordinate: LatLng): Promise<Point>;
    getDistanceBetween(from: LatLng, to: LatLng): Promise<number>;
    getPixelDistanceBetween(from: LatLng, to: LatLng): Promise<number>;
    getCoordinateRegionAroundPoint(around: Point, pixelDistance: number): Promise<CoordinateRegion>;
    takeSnapshot(): Promise<ImageSource>;
}
export declare abstract class MapboxViewCommonBase extends ContentView implements MapboxViewApi {
    protected mapbox: MapboxApi;
    abstract getNativeMapView(): any;
    onMapEvent(eventName: any, id: any, callback: any): void;
    offMapEvent(eventName: any, id: any): void;
    addMarkers(markers: MapboxMarker[]): Promise<any>;
    removeMarkers(options?: any): Promise<any>;
    setOnMapClickListener(listener: (data: LatLng) => void): Promise<any>;
    setOnMapLongClickListener(listener: (data: LatLng) => void): Promise<any>;
    setOnScrollListener(listener: (data?: LatLng) => void, nativeMap?: any): Promise<void>;
    setOnMoveBeginListener(listener: (data?: LatLng) => void, nativeMap?: any): Promise<void>;
    setOnFlingListener(listener: () => void, nativeMap?: any): Promise<any>;
    setOnCameraMoveListener(listener: () => void, nativeMap?: any): Promise<any>;
    setOnCameraMoveCancelListener(listener: () => void, nativeMap?: any): Promise<any>;
    setOnCameraIdleListener(listener: () => void, nativeMap?: any): Promise<any>;
    getViewport(): Promise<Viewport>;
    setViewport(options: SetViewportOptions): Promise<any>;
    setMapStyle(style: string | MapStyle): Promise<any>;
    getCenter(): Promise<LatLng>;
    setCenter(options: SetCenterOptions): Promise<any>;
    getZoomLevel(): Promise<number>;
    setZoomLevel(options: SetZoomLevelOptions): Promise<any>;
    getTilt(): Promise<number>;
    setTilt(options: SetTiltOptions): Promise<any>;
    getUserLocation(): Promise<UserLocation>;
    showUserLocationMarker(options: any): void;
    hideUserLocationMarker(): void;
    changeUserLocationMarkerMode(renderModeString: any, cameraModeString: UserLocationCameraMode): void;
    forceUserLocationUpdate(location: any): void;
    trackUser(options: TrackUserOptions): Promise<any>;
    getTrackingMode(): UserLocationCameraMode;
    addSource(id: string, options: AddSourceOptions): Promise<any>;
    removeSource(id: string): Promise<any>;
    addLayer(style: any): Promise<any>;
    removeLayer(id: string): Promise<any>;
    addLinePoint(id: string, point: any): Promise<any>;
    queryRenderedFeatures(options: QueryRenderedFeaturesOptions): Promise<Array<Feature>>;
    addPolygon(options: AddPolygonOptions): Promise<any>;
    removePolygons(ids?: Array<any>): Promise<any>;
    addPolyline(options: AddPolylineOptions): string;
    removePolylines(ids?: Array<any>): void;
    updatePolyline(id: string, newPoints: Array<LatLng>): void;
    animateCamera(options: AnimateCameraOptions): Promise<any>;
    destroy(): Promise<any>;
    onStart(): Promise<any>;
    onResume(nativeMap?: any): Promise<any>;
    onPause(nativeMap?: any): Promise<any>;
    onStop(nativeMap?: any): Promise<any>;
    onLowMemory(nativeMap?: any): Promise<any>;
    onDestroy(nativeMap?: any): Promise<any>;
    convertToMapCoordinate(point: Point): Promise<LatLng>;
    isScrollingEnabled(): Promise<boolean>;
    setScrollingEnabled(enabled: boolean): Promise<any>;
    convertToOnScreenCoordinate(coordinate: LatLng): Promise<Point>;
    getDistanceBetween(from: LatLng, to: LatLng): Promise<number>;
    takeSnapshot(): Promise<ImageSource>;
    getPixelDistanceBetween(from: LatLng, to: LatLng): Promise<number>;
    getCoordinateRegionAroundPoint(around: Point, pixelDistance: number): Promise<CoordinateRegion>;
}
export declare const mapReadyProperty: any;
export declare const zoomLevelProperty: any;
export declare const accessTokenProperty: any;
export declare const mapStyleProperty: any;
export declare const latitudeProperty: any;
export declare const longitudeProperty: any;
export declare const showUserLocationProperty: any;
export declare const hideLogoProperty: any;
export declare const hideAttributionProperty: any;
export declare const hideCompassProperty: any;
export declare const disableZoomProperty: any;
export declare const disableRotationProperty: any;
export declare const disableScrollProperty: any;
export declare const disableTiltProperty: any;
export declare const delayProperty: any;
export declare abstract class MapboxViewBase extends MapboxViewCommonBase {
    static mapReadyEvent: string;
    static scrollEvent: string;
    static moveBeginEvent: string;
    static locationPermissionGrantedEvent: string;
    static locationPermissionDeniedEvent: string;
    protected config: any;
}
