@types/react-map-gl
Version:
TypeScript definitions for react-map-gl
512 lines (439 loc) • 16.9 kB
TypeScript
/// <reference lib='dom' />
import * as GeoJSON from "geojson";
import * as MapboxGL from "mapbox-gl";
import * as React from "react";
import WebMercatorViewport from "viewport-mercator-project";
export { WebMercatorViewport } from "viewport-mercator-project";
export interface ViewState {
latitude: number;
longitude: number;
zoom: number;
bearing?: number | undefined;
pitch?: number | undefined;
altitude?: number | undefined;
}
export interface MapError {
error?: { message: string; status: number } | undefined;
status: number;
}
export interface MapRequest {
url: string;
headers?: { [index: string]: string } | undefined;
credentials?: string | undefined;
}
export interface MapLoadEvent {
type: string;
target: MapboxGL.Map;
}
export interface MapboxProps extends Partial<ViewState> {
container?: object | undefined;
gl?: object | undefined;
mapboxApiAccessToken?: string | undefined;
mapboxApiUrl?: string | undefined;
attributionControl?: boolean | undefined;
preserveDrawingBuffer?: boolean | undefined;
reuseMaps?: boolean | undefined;
transformRequest?: ((url?: string, resourceType?: string) => MapRequest) | undefined;
mapOptions?: object | undefined;
mapStyle?: string | object | undefined;
visible?: boolean | undefined;
onLoad?: ((event: MapLoadEvent) => void) | undefined;
onError?: ((e: MapError) => void) | undefined;
reuseMap?: boolean | undefined;
width: number | string;
height: number | string;
viewState?: ViewState | undefined;
}
export interface StaticMapProps extends MapboxProps {
onResize?: ((dimensions: { width: number; height: number }) => void) | undefined;
preventStyleDiffing?: boolean | undefined;
disableTokenWarning?: boolean | undefined;
className?: string | undefined;
style?: object | undefined;
visibilityConstraints?: {
minZoom?: number | undefined;
maxZoom?: number | undefined;
minPitch?: number | undefined;
maxPitch?: number | undefined;
} | undefined;
}
export interface QueryRenderedFeaturesParams {
layers?: string[] | undefined;
filter?: any[] | undefined;
}
export class StaticMap extends React.PureComponent<StaticMapProps> {
getMap(): MapboxGL.Map;
queryRenderedFeatures(
geometry?: MapboxGL.PointLike | [MapboxGL.PointLike, MapboxGL.PointLike],
parameters?: QueryRenderedFeaturesParams,
): MapboxGL.MapboxGeoJSONFeature[];
}
export interface ExtraState {
inTransition?: boolean | undefined;
isDragging?: boolean | undefined;
isHovering?: boolean | undefined;
isPanning?: boolean | undefined;
isRotating?: boolean | undefined;
isZooming?: boolean | undefined;
}
export interface PositionInput {
pos: [number, number];
}
export type ViewportChangeHandler = (viewState: ViewportProps) => void;
export type ContextViewportChangeHandler = (
viewState: ViewportProps,
interactionState: ExtraState,
oldViewState: ViewportProps,
) => void;
export interface MapControllerOptions {
onViewportChange?: ContextViewportChangeHandler | undefined;
onStateChange?: ((state: MapState) => void) | undefined;
eventManager?: any;
isInteractive: boolean;
scrollZoom?: boolean | undefined;
dragPan?: boolean | undefined;
dragRotate?: boolean | undefined;
doubleClickZoom?: boolean | undefined;
touchZoom?: boolean | undefined;
touchRotate?: boolean | undefined;
keyboard?: boolean | undefined;
}
export interface ViewportProps {
width: number | string;
height: number | string;
latitude: number;
longitude: number;
zoom: number;
bearing: number;
pitch: number;
altitude: number;
maxZoom: number;
minZoom: number;
maxPitch: number;
minPitch: number;
transitionDuration?: number | "auto" | undefined;
transitionInterpolator?: TransitionInterpolator | undefined;
transitionInterruption?: TRANSITION_EVENTS | undefined;
transitionEasing?: EasingFunction | undefined;
}
export interface InteractiveState {
startPanLngLat?: [number, number] | undefined;
startZoomLngLat?: [number, number] | undefined;
startBearing?: number | undefined;
startPitch?: number | undefined;
startZoom?: number | undefined;
}
export type MapStateProps = Partial<ViewportProps & InteractiveState>;
export class MapState {
constructor(props: MapStateProps);
getViewportProps(): ViewportProps;
getInteractiveState(): InteractiveState;
panStart(input: PositionInput): MapState;
pan(input: PositionInput & { startPos?: [number, number] | undefined }): MapState;
panEnd(): MapState;
rotateStart(input: PositionInput): MapState;
rotate(input: { deltaScaleX?: number | undefined; deltaScaleY?: number | undefined }): MapState;
rotateEnd(): MapState;
zoomStart(input: PositionInput): MapState;
zoom(input: PositionInput & { scale: number; startPos?: [number, number] | undefined }): MapState;
zoomEnd(): MapState;
}
export interface Center {
x: number;
y: number;
}
export interface MapControlEvent {
type: string;
center: Center;
offsetCenter: Center;
target: any;
srcEvent: any;
key?: number | undefined;
leftButton?: boolean | undefined;
middleButton?: boolean | undefined;
rightButton?: boolean | undefined;
pointerType?: string | undefined;
delta?: number | undefined;
}
export interface BaseMapController {
events: string[];
handleEvent(event: MapControlEvent): void;
}
export class MapController implements BaseMapController {
events: string[];
handleEvent(event: MapControlEvent): void;
getMapState(overrides: Partial<MapState>): MapState;
setOptions(options: MapControllerOptions): void;
setState(newState: MapState): void;
updateViewport(newMapState: MapState, extraProps: any, extraState: ExtraState): void;
}
export interface PointerEvent extends MouseEvent {
type: string;
point: [number, number];
offsetCenter: {
x: number;
y: number;
};
lngLat: [number, number];
target: any;
srcEvent: any;
// backward compatibility: v3 interface
features: any[];
}
export type EasingFunction = (t: number) => number;
export enum TRANSITION_EVENTS {
BREAK = 1,
SNAP_TO_END = 2,
IGNORE = 3,
UPDATE = 4,
}
export class TransitionInterpolator {}
export interface LinearInterpolatorProps {
transitionProps?: string[] | undefined;
around?: number[] | undefined;
}
export class LinearInterpolator extends TransitionInterpolator {
constructor(transitionProps?: LinearInterpolatorProps | string[]);
}
export interface FlyToInterpolatorProps {
curve?: number | undefined;
speed?: number | undefined;
screenSpeed?: number | undefined;
maxDuration?: number | undefined;
}
export class FlyToInterpolator extends TransitionInterpolator {
constructor(props?: FlyToInterpolatorProps);
}
export interface ViewStateChangeInfo {
viewState: ViewportProps;
}
export interface ContextViewStateChangeInfo {
viewState: ViewportProps;
interactionState: ExtraState;
newViewState: ViewportProps;
}
export type ViewStateChangeHandler = (info: ViewStateChangeInfo) => void;
export type ContextViewStateChangeHandler = (info: ContextViewStateChangeInfo) => void;
export interface InteractiveMapProps extends StaticMapProps {
children?: React.ReactNode;
maxZoom?: number | undefined;
minZoom?: number | undefined;
maxPitch?: number | undefined;
minPitch?: number | undefined;
onViewStateChange?: ContextViewStateChangeHandler | undefined;
onViewportChange?: ContextViewportChangeHandler | undefined;
onInteractionStateChange?: ((state: ExtraState) => void) | undefined;
transitionDuration?: number | "auto" | undefined;
transitionInterpolator?: TransitionInterpolator | undefined;
transitionInterruption?: TRANSITION_EVENTS | undefined;
transitionEasing?: EasingFunction | undefined;
onTransitionStart?: (() => void) | undefined;
onTransitionInterrupt?: (() => void) | undefined;
onTransitionEnd?: (() => void) | undefined;
scrollZoom?: boolean | undefined;
dragPan?: boolean | undefined;
dragRotate?: boolean | undefined;
doubleClickZoom?: boolean | undefined;
touchZoom?: boolean | undefined;
touchRotate?: boolean | undefined;
keyboard?: boolean | undefined;
onHover?: ((event: PointerEvent) => void) | undefined;
onClick?: ((event: PointerEvent) => void) | undefined;
onNativeClick?: ((event: PointerEvent) => void) | undefined;
onDblClick?: ((event: PointerEvent) => void) | undefined;
onContextMenu?: ((event: PointerEvent) => void) | undefined;
onMouseDown?: ((event: PointerEvent) => void) | undefined;
onMouseMove?: ((event: PointerEvent) => void) | undefined;
onMouseUp?: ((event: PointerEvent) => void) | undefined;
onTouchStart?: ((event: PointerEvent) => void) | undefined;
onTouchMove?: ((event: PointerEvent) => void) | undefined;
onTouchEnd?: ((event: PointerEvent) => void) | undefined;
onMouseEnter?: ((event: PointerEvent) => void) | undefined;
onMouseLeave?: ((event: PointerEvent) => void) | undefined;
onMouseOut?: ((event: PointerEvent) => void) | undefined;
onWheel?: ((event: PointerEvent) => void) | undefined;
touchAction?: string | undefined;
clickRadius?: number | undefined;
interactiveLayerIds?: string[] | undefined;
getCursor?: ((state: ExtraState) => void) | undefined;
controller?: MapController | undefined;
}
export class InteractiveMap extends React.PureComponent<InteractiveMapProps> {
getMap(): MapboxGL.Map;
queryRenderedFeatures(
geometry?: MapboxGL.PointLike | [MapboxGL.PointLike, MapboxGL.PointLike],
parameters?: QueryRenderedFeaturesParams,
): MapboxGL.MapboxGeoJSONFeature[];
}
export default InteractiveMap;
// class EventManager from mjolnir.js
export type EventManager = any;
export interface MapContextProps {
viewport?: WebMercatorViewport | undefined;
map?: MapboxGL.Map | undefined;
mapContainer: HTMLElement | null;
onViewStateChange?: ContextViewStateChangeHandler | undefined;
onViewportChange?: ContextViewportChangeHandler | undefined;
isDragging: boolean;
eventManager?: EventManager | undefined;
}
export const _MapContext: React.Context<MapContextProps>;
export interface BaseControlProps {
captureScroll?: boolean | undefined;
captureDrag?: boolean | undefined;
captureClick?: boolean | undefined;
captureDoubleClick?: boolean | undefined;
}
export class BaseControl<T extends BaseControlProps, S extends Element> extends React.PureComponent<T> {
_containerRef: React.RefObject<S | null>;
_context: MapContextProps;
}
export interface PopupProps extends BaseControlProps {
className?: string | undefined;
longitude: number;
latitude: number;
altitude?: number | undefined;
offsetLeft?: number | undefined;
offsetTop?: number | undefined;
tipSize?: number | undefined;
closeButton?: boolean | undefined;
closeOnClick?: boolean | undefined;
anchor?: MapboxGL.Anchor | undefined;
dynamicPosition?: boolean | undefined;
sortByDepth?: boolean | undefined;
onClose?: (() => void) | undefined;
children?: React.ReactNode | undefined;
}
export class Popup extends BaseControl<PopupProps, HTMLDivElement> {}
export interface NavigationControlProps extends BaseControlProps {
className?: string | undefined;
onViewStateChange?: ViewStateChangeHandler | undefined;
onViewportChange?: ViewportChangeHandler | undefined;
showCompass?: boolean | undefined;
showZoom?: boolean | undefined;
zoomInLabel?: string | undefined;
zoomOutLabel?: string | undefined;
compassLabel?: string | undefined;
}
export class NavigationControl extends BaseControl<NavigationControlProps, HTMLDivElement> {}
export interface FullscreenControlProps extends BaseControlProps {
className?: string | undefined;
container?: HTMLElement | null | undefined;
}
export class FullscreenControl extends BaseControl<FullscreenControlProps, HTMLDivElement> {}
// https://developer.mozilla.org/en-US/docs/Web/API/PositionOptions
interface PositionOptions {
enableHighAccuracy?: boolean | undefined;
timeout: number;
maximumAge: number;
}
export interface GeolocateControlProps extends BaseControlProps {
className?: string | undefined;
label?: string | undefined;
positionOptions?: MapboxGL.PositionOptions | undefined;
fitBoundsOptions?: MapboxGL.FitBoundsOptions | undefined;
trackUserLocation?: boolean | undefined;
showUserLocation?: boolean | undefined;
onViewStateChange?: ViewStateChangeHandler | undefined;
onViewportChange?: ViewportChangeHandler | undefined;
onGeolocate?: ((options: PositionOptions) => void) | undefined;
style?: React.CSSProperties | undefined;
auto?: boolean | undefined;
}
export class GeolocateControl extends BaseControl<GeolocateControlProps, HTMLDivElement> {}
export interface ScaleControlProps extends BaseControlProps {
maxWidth?: number | undefined;
unit?: "imperial" | "metric" | "nautical" | undefined;
}
export class ScaleControl extends BaseControl<ScaleControlProps, HTMLDivElement> {}
export interface DragEvent {
lngLat: [number, number];
[key: string]: any;
}
export interface DraggableControlProps extends BaseControlProps {
draggable?: boolean | undefined;
onDrag?: ((event: DragEvent) => void) | undefined;
onDragEnd?: ((event: DragEvent) => void) | undefined;
onDragStart?: ((event: DragEvent) => void) | undefined;
}
export class DraggableControl<T extends DraggableControlProps> extends BaseControl<T, HTMLDivElement> {}
export interface MarkerProps extends DraggableControlProps {
className?: string | undefined;
longitude: number;
latitude: number;
offsetLeft?: number | undefined;
offsetTop?: number | undefined;
children?: React.ReactNode | undefined;
}
export class Marker extends DraggableControl<MarkerProps> {}
export interface HTMLRedrawOptions {
width: number;
height: number;
project: (lnglat: number[]) => number[];
unproject: (xy: number[]) => number[];
}
export interface HTMLOverlayProps extends BaseControlProps {
redraw: (opts: HTMLRedrawOptions) => void;
style?: React.CSSProperties | undefined;
}
export class HTMLOverlay extends BaseControl<HTMLOverlayProps, HTMLDivElement> {}
export interface CanvasRedrawOptions extends HTMLRedrawOptions {
ctx: CanvasRenderingContext2D;
}
export interface CanvasOverlayProps extends BaseControlProps {
redraw: (opts: CanvasRedrawOptions) => void;
}
export class CanvasOverlay extends BaseControl<CanvasOverlayProps, HTMLCanvasElement> {}
export type SVGRedrawOptions = HTMLRedrawOptions;
export interface SVGOverlayProps extends BaseControlProps {
redraw: (opts: SVGRedrawOptions) => void;
style?: React.CSSProperties | undefined;
}
export class SVGOverlay extends BaseControl<SVGOverlayProps, Element> {}
export interface SourceProps {
id?: string | undefined;
type: string;
url?: string | undefined;
tiles?: string[] | undefined;
tileSize?: number | undefined;
bounds?: number[] | undefined;
scheme?: "xyz" | "tms" | undefined;
minzoom?: number | undefined;
maxzoom?: number | undefined;
attribution?: string | undefined;
encoding?: "terrarium" | "mapbox" | undefined;
data?: GeoJSON.Feature<GeoJSON.Geometry> | GeoJSON.FeatureCollection<GeoJSON.Geometry> | string | undefined;
buffer?: number | undefined;
tolerance?: number | undefined;
cluster?: boolean | undefined;
clusterRadius?: number | undefined;
clusterProperties?: object | undefined;
clusterMaxZoom?: number | undefined;
lineMetrics?: boolean | undefined;
generateId?: boolean | undefined;
coordinates?: number[][] | undefined;
urls?: string[] | undefined;
children?: React.ReactNode | undefined;
}
export class Source extends React.PureComponent<SourceProps> {}
export interface LayerProps {
id?: string | undefined;
type: string;
source?: string | undefined;
beforeId?: string | undefined;
layout?: MapboxGL.AnyLayout | undefined;
paint:
| MapboxGL.BackgroundPaint
| MapboxGL.FillPaint
| MapboxGL.FillExtrusionPaint
| MapboxGL.LinePaint
| MapboxGL.SymbolPaint
| MapboxGL.RasterPaint
| MapboxGL.CirclePaint
| MapboxGL.HeatmapPaint
| MapboxGL.HillshadePaint;
filter?: any[] | undefined;
minzoom?: number | undefined;
maxzoom?: number | undefined;
}
export class Layer extends React.PureComponent<LayerProps> {}