import { OutputEmitterRef } from '@angular/core';
import type { GeolocateControl, Map, MapLibreEvent, MapLibreZoomEvent, MapContextEvent, MapDataEvent, MapLayerMouseEvent, MapLayerTouchEvent, MapMouseEvent, MapSourceDataEvent, MapStyleDataEvent, MapTouchEvent, MapWheelEvent } from 'maplibre-gl';
export interface EventData {
    [key: string]: any;
}
export interface MapEvent {
    mapResize: OutputEmitterRef<MapLibreEvent & EventData>;
    mapRemove: OutputEmitterRef<MapLibreEvent & EventData>;
    mapMouseDown: OutputEmitterRef<MapMouseEvent & EventData>;
    mapMouseUp: OutputEmitterRef<MapMouseEvent & EventData>;
    mapMouseMove: OutputEmitterRef<MapMouseEvent & EventData>;
    mapClick: OutputEmitterRef<MapMouseEvent & EventData>;
    mapDblClick: OutputEmitterRef<MapMouseEvent & EventData>;
    mapMouseOver: OutputEmitterRef<MapMouseEvent & EventData>;
    mapMouseOut: OutputEmitterRef<MapMouseEvent & EventData>;
    mapContextMenu: OutputEmitterRef<MapMouseEvent & EventData>;
    mapTouchStart: OutputEmitterRef<MapTouchEvent & EventData>;
    mapTouchEnd: OutputEmitterRef<MapTouchEvent & EventData>;
    mapTouchMove: OutputEmitterRef<MapTouchEvent & EventData>;
    mapTouchCancel: OutputEmitterRef<MapTouchEvent & EventData>;
    mapWheel: OutputEmitterRef<MapWheelEvent & EventData>;
    moveStart: OutputEmitterRef<MapLibreEvent<MouseEvent | TouchEvent | WheelEvent | undefined> & EventData>;
    move: OutputEmitterRef<MapLibreEvent<MouseEvent | TouchEvent | WheelEvent | undefined> & EventData>;
    moveEnd: OutputEmitterRef<MapLibreEvent<MouseEvent | TouchEvent | WheelEvent | undefined> & EventData>;
    mapDragStart: OutputEmitterRef<MapLibreEvent<MouseEvent | TouchEvent | undefined> & EventData>;
    mapDrag: OutputEmitterRef<MapLibreEvent<MouseEvent | TouchEvent | undefined> & EventData>;
    mapDragEnd: OutputEmitterRef<MapLibreEvent<MouseEvent | TouchEvent | undefined> & EventData>;
    zoomStart: OutputEmitterRef<MapLibreEvent<MouseEvent | TouchEvent | WheelEvent | undefined> & EventData>;
    zoomEvt: OutputEmitterRef<MapLibreEvent<MouseEvent | TouchEvent | WheelEvent | undefined> & EventData>;
    zoomEnd: OutputEmitterRef<MapLibreEvent<MouseEvent | TouchEvent | WheelEvent | undefined> & EventData>;
    rotateStart: OutputEmitterRef<MapLibreEvent<MouseEvent | TouchEvent | undefined> & EventData>;
    rotate: OutputEmitterRef<MapLibreEvent<MouseEvent | TouchEvent | undefined> & EventData>;
    rotateEnd: OutputEmitterRef<MapLibreEvent<MouseEvent | TouchEvent | undefined> & EventData>;
    pitchStart: OutputEmitterRef<MapLibreEvent<MouseEvent | TouchEvent | undefined> & EventData>;
    pitchEvt: OutputEmitterRef<MapLibreEvent<MouseEvent | TouchEvent | undefined> & EventData>;
    pitchEnd: OutputEmitterRef<MapLibreEvent<MouseEvent | TouchEvent | undefined> & EventData>;
    boxZoomStart: OutputEmitterRef<MapLibreZoomEvent & EventData>;
    boxZoomEnd: OutputEmitterRef<MapLibreZoomEvent & EventData>;
    boxZoomCancel: OutputEmitterRef<MapLibreZoomEvent & EventData>;
    webGlContextLost: OutputEmitterRef<MapContextEvent & EventData>;
    webGlContextRestored: OutputEmitterRef<MapContextEvent & EventData>;
    mapLoad: OutputEmitterRef<Map>;
    render: OutputEmitterRef<MapLibreEvent & EventData>;
    mapError: OutputEmitterRef<ErrorEvent & EventData>;
    data: OutputEmitterRef<MapDataEvent & EventData>;
    styleData: OutputEmitterRef<MapStyleDataEvent & EventData>;
    sourceData: OutputEmitterRef<MapSourceDataEvent & EventData>;
    dataLoading: OutputEmitterRef<MapDataEvent & EventData>;
    styleDataLoading: OutputEmitterRef<MapStyleDataEvent & EventData>;
    sourceDataLoading: OutputEmitterRef<MapSourceDataEvent & EventData>;
    styleImageMissing: OutputEmitterRef<{
        id: string;
    } & EventData>;
    idle: OutputEmitterRef<MapLibreEvent & EventData>;
}
export interface LayerEvents {
    layerClick: OutputEmitterRef<MapLayerMouseEvent & EventData>;
    layerDblClick: OutputEmitterRef<MapLayerMouseEvent & EventData>;
    layerMouseDown: OutputEmitterRef<MapLayerMouseEvent & EventData>;
    layerMouseUp: OutputEmitterRef<MapLayerMouseEvent & EventData>;
    layerMouseEnter: OutputEmitterRef<MapLayerMouseEvent & EventData>;
    layerMouseLeave: OutputEmitterRef<MapLayerMouseEvent & EventData>;
    layerMouseMove: OutputEmitterRef<MapLayerMouseEvent & EventData>;
    layerMouseOver: OutputEmitterRef<MapLayerMouseEvent & EventData>;
    layerMouseOut: OutputEmitterRef<MapLayerMouseEvent & EventData>;
    layerContextMenu: OutputEmitterRef<MapLayerMouseEvent & EventData>;
    layerTouchStart: OutputEmitterRef<MapLayerTouchEvent & EventData>;
    layerTouchEnd: OutputEmitterRef<MapLayerTouchEvent & EventData>;
    layerTouchCancel: OutputEmitterRef<MapLayerTouchEvent & EventData>;
}
/**
 * in typescript 4.1 DOM interface Position and Coordinates renamed to GeolocationPosition GeolocationCoordinates
 * to avoid deprecation angular version < 11.0.0 we declared own Coordinates, Position interface
 */
export interface NgxMapLibreGeolocationCoordinates {
    readonly accuracy: number;
    readonly altitude: number | null;
    readonly altitudeAccuracy: number | null;
    readonly heading: number | null;
    readonly latitude: number;
    readonly longitude: number;
    readonly speed: number | null;
}
export interface Position {
    coords: NgxMapLibreGeolocationCoordinates;
    target: GeolocateControl;
    timestamp: number;
    type: string;
}
export type MapImageData = HTMLImageElement | ArrayBufferView | {
    width: number;
    height: number;
    data: Uint8Array | Uint8ClampedArray;
} | ImageData | ImageBitmap;
export interface MapImageOptions {
    pixelRatio: number;
    sdf: boolean;
}
