// Type definitions for react-leaflet 1.1 // Project: https://github.com/PaulLeCam/react-leaflet // Definitions by: Dave Leaver , David Schneider , Yui T. // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.3 import * as Leaflet from 'leaflet'; import * as React from 'react'; // All events need to be lowercase so they don't collide with React.DOMAttributes // which already declares things with some of the same names export type Children = React.ReactNode | React.ReactNode[]; export interface MapEvents { onclick?(event: Leaflet.LeafletMouseEvent): void; ondblclick?(event: Leaflet.LeafletMouseEvent): void; onmousedown?(event: Leaflet.LeafletMouseEvent): void; onmouseup?(event: Leaflet.LeafletMouseEvent): void; onmouseover?(event: Leaflet.LeafletMouseEvent): void; onmouseout?(event: Leaflet.LeafletMouseEvent): void; onmousemove?(event: Leaflet.LeafletMouseEvent): void; oncontextmenu?(event: Leaflet.LeafletMouseEvent): void; onfocus?(event: Leaflet.LeafletEvent): void; onblur?(event: Leaflet.LeafletEvent): void; onpreclick?(event: Leaflet.LeafletMouseEvent): void; onload?(event: Leaflet.LeafletEvent): void; onunload?(event: Leaflet.LeafletEvent): void; onviewreset?(event: Leaflet.LeafletEvent): void; onmove?(event: Leaflet.LeafletEvent): void; onmovestart?(event: Leaflet.LeafletEvent): void; onmoveend?(event: Leaflet.LeafletEvent): void; ondragstart?(event: Leaflet.LeafletEvent): void; ondrag?(event: Leaflet.LeafletEvent): void; ondragend?(event: Leaflet.DragEndEvent): void; onzoomstart?(event: Leaflet.LeafletEvent): void; onzoomend?(event: Leaflet.LeafletEvent): void; onzoomlevelschange?(event: Leaflet.LeafletEvent): void; onresize?(event: Leaflet.ResizeEvent): void; onautopanstart?(event: Leaflet.LeafletEvent): void; onlayeradd?(event: Leaflet.LayerEvent): void; onlayerremove?(event: Leaflet.LayerEvent): void; onbaselayerchange?(event: Leaflet.LayersControlEvent): void; onoverlayadd?(event: Leaflet.LayersControlEvent): void; onoverlayremove?(event: Leaflet.LayersControlEvent): void; onlocationfound?(event: Leaflet.LocationEvent): void; onlocationerror?(event: Leaflet.ErrorEvent): void; onpopupopen?(event: Leaflet.PopupEvent): void; onpopupclose?(event: Leaflet.PopupEvent): void; } export interface MarkerEvents { onclick?(event: Leaflet.LeafletMouseEvent): void; ondblclick?(event: Leaflet.LeafletMouseEvent): void; onmousedown?(event: Leaflet.LeafletMouseEvent): void; onmouseover?(event: Leaflet.LeafletMouseEvent): void; onmouseout?(event: Leaflet.LeafletMouseEvent): void; oncontextmenu?(event: Leaflet.LeafletMouseEvent): void; ondragstart?(event: Leaflet.LeafletEvent): void; ondrag?(event: Leaflet.LeafletEvent): void; ondragend?(event: Leaflet.DragEndEvent): void; onmove?(event: Leaflet.LeafletEvent): void; onadd?(event: Leaflet.LeafletEvent): void; onremove?(event: Leaflet.LeafletEvent): void; onpopupopen?(event: Leaflet.PopupEvent): void; onpopupclose?(event: Leaflet.PopupEvent): void; } export interface TileLayerEvents { onloading?(event: Leaflet.LeafletEvent): void; onload?(event: Leaflet.LeafletEvent): void; ontileloadstart?(event: Leaflet.TileEvent): void; ontileload?(event: Leaflet.TileEvent): void; ontileunload?(event: Leaflet.TileEvent): void; ontileerror?(event: Leaflet.TileEvent): void; } export interface PathEvents { onclick?(event: Leaflet.LeafletMouseEvent): void; ondblclick?(event: Leaflet.LeafletMouseEvent): void; onmousedown?(event: Leaflet.LeafletMouseEvent): void; onmouseover?(event: Leaflet.LeafletMouseEvent): void; onmouseout?(event: Leaflet.LeafletMouseEvent): void; oncontextmenu?(event: Leaflet.LeafletMouseEvent): void; onadd?(event: Leaflet.LeafletEvent): void; onremove?(event: Leaflet.LeafletEvent): void; onpopupopen?(event: Leaflet.PopupEvent): void; onpopupclose?(event: Leaflet.PopupEvent): void; } export interface FeatureGroupEvents { onclick?(event: Leaflet.LeafletMouseEvent): void; ondblclick?(event: Leaflet.LeafletMouseEvent): void; onmouseover?(event: Leaflet.LeafletMouseEvent): void; onmouseout?(event: Leaflet.LeafletMouseEvent): void; oncontextmenu?(event: Leaflet.LeafletMouseEvent): void; onlayeradd?(event: Leaflet.LayerEvent): void; onlayerremove?(event: Leaflet.LayerEvent): void; } export interface LayersControlEvents { onbaselayerchange?(event: Leaflet.LayersControlEvent): void; onoverlayadd?(event: Leaflet.LayersControlEvent): void; onoverlayremove?(event: Leaflet.LayersControlEvent): void; } export type LeafletEvents = MapEvents & MarkerEvents & TileLayerEvents & PathEvents & FeatureGroupEvents & LayersControlEvents; // Most react-leaflet components take two type parameters: // - P : the component's props object // - E : the corresponding Leaflet element // These type parameters aren't needed for instantiating a component, but they are useful for // extending react-leaflet classes. export class MapComponent extends React.Component

{ _leafletEvents: LeafletEvents; leafletElement: E; extractLeafletEvents(props: P): LeafletEvents; bindLeafletEvents(next: LeafletEvents, prev: LeafletEvents): LeafletEvents; fireLeafletEvent(type: string, data: any): void; getOptions(props: P): P; } export interface MapProps extends MapEvents, Leaflet.MapOptions, Leaflet.LocateOptions, Leaflet.FitBoundsOptions { animate?: boolean; bounds?: Leaflet.LatLngBoundsExpression; boundsOptions?: Leaflet.FitBoundsOptions; center?: Leaflet.LatLngExpression; children?: Children; className?: string; id?: string; maxBounds?: Leaflet.LatLngBoundsExpression; maxZoom?: number; minZoom?: number; style?: React.CSSProperties; useFlyTo?: boolean; zoom?: number; } export class Map

extends MapComponent { className?: string; container: HTMLDivElement; getChildContext(): { layerContainer: E, map: E }; createLeafletElement(props: P): E; updateLeafletElement(fromProps: P, toProps: P): void; bindContainer(container: HTMLDivElement): void; shouldUpdateCenter(next: Leaflet.LatLngExpression, prev: Leaflet.LatLngExpression): boolean; shouldUpdateBounds(next: Leaflet.LatLngBoundsExpression, prev: Leaflet.LatLngBoundsExpression): boolean; } export interface PaneProps { name?: string; children?: Children; map?: Leaflet.Map; className?: string; style?: React.CSSProperties; pane?: string; } export interface PaneState { name?: string; } export class Pane

extends React.Component { getChildContext(): { pane: string }; createPane(props: P): void; removePane(): void; setStyle(arg: { style?: string, className?: string }): void; getParentPane(): HTMLElement | undefined; getPane(name: string): HTMLElement | undefined; } export interface MapLayerProps { children?: Children; } export interface LayerContainer { addLayer(layer: Leaflet.Layer): this; removeLayer(layer: number | Leaflet.Layer): this; } export class MapLayer

extends MapComponent { createLeafletElement(props: P): E; updateLeafletElement(fromProps: P, toProps: P): void; readonly layerContainer: LayerContainer | Leaflet.Map; } export interface GridLayerProps extends Leaflet.GridLayerOptions { children?: Children; } export class GridLayer

extends MapLayer {} export interface TileLayerProps extends TileLayerEvents, Leaflet.TileLayerOptions { children?: Children; url: string; } export class TileLayer

extends GridLayer { } export interface WMSTileLayerProps extends TileLayerEvents, Leaflet.WMSOptions { children?: Children; url: string; } export class WMSTileLayer

extends GridLayer { } export interface ImageOverlayProps extends Leaflet.ImageOverlayOptions { bounds: Leaflet.LatLngBoundsExpression; children?: Children; url: string; } export class ImageOverlay

extends MapLayer { getChildContext(): { popupContainer: E }; } export interface LayerGroupProps { children?: Children; } export class LayerGroup

extends MapLayer { getChildContext(): { layerContainer: E }; } export interface MarkerProps extends MarkerEvents, Leaflet.MarkerOptions { children?: Children; position: Leaflet.LatLngExpression; } export class Marker

extends MapLayer { getChildContext(): { popupContainer: E }; } export interface PathProps extends PathEvents, Leaflet.PathOptions, MapLayerProps { } export abstract class Path

extends MapLayer { getChildContext(): { popupContainer: E }; getPathOptions(props: P): Leaflet.PathOptions; setStyle(options: Leaflet.PathOptions): void; setStyleIfChanged(fromProps: P, toProps: P): void; } export interface CircleProps extends PathEvents, Leaflet.CircleMarkerOptions { center: Leaflet.LatLngExpression; children?: Children; radius: number; } export class Circle

extends Path { } export interface CircleMarkerProps extends PathEvents, Leaflet.CircleMarkerOptions { center: Leaflet.LatLngExpression; children?: Children; radius: number; } export class CircleMarker

extends Path { } export interface FeatureGroupProps extends FeatureGroupEvents, Leaflet.PathOptions { children?: Children; } export class FeatureGroup

extends Path { getChildContext(): { layerContainer: E, popupContainer: E }; } export interface GeoJSONProps extends FeatureGroupEvents, Leaflet.GeoJSONOptions { children?: Children; data: GeoJSON.GeoJsonObject; style?: Leaflet.StyleFunction; } export class GeoJSON

extends Path { } export interface PolylineProps extends PathEvents, Leaflet.PolylineOptions { children?: Children; positions: Leaflet.LatLngExpression[] | Leaflet.LatLngExpression[][]; } export class Polyline

extends Path { } export interface PolygonProps extends PathEvents, Leaflet.PolylineOptions { children?: Children; popupContainer?: Leaflet.FeatureGroup; positions: Leaflet.LatLngExpression[] | Leaflet.LatLngExpression[][] | Leaflet.LatLngExpression[][][]; } export class Polygon

extends Path { } export interface RectangleProps extends PathEvents, Leaflet.PolylineOptions { children?: Children; bounds: Leaflet.LatLngBoundsExpression; popupContainer?: Leaflet.FeatureGroup; } export class Rectangle

extends Path { } export interface PopupProps extends Leaflet.PopupOptions { children?: Children; position?: Leaflet.LatLngExpression; } export class Popup

extends MapComponent { onPopupOpen(arg: { popup: E }): void; onPopupClose(arg: { popup: E }): void; renderPopupContent(): void; removePopupContent(): void; } export interface TooltipProps extends Leaflet.TooltipOptions { children?: Children; } export class Tooltip

extends MapComponent { onTooltipOpen(arg: { tooltip: E }): void; onTooltipClose(arg: { tooltip: E }): void; renderTooltipContent(): void; removeTooltipContent(): void; } export type MapControlProps = Leaflet.ControlOptions; export class MapControl

extends React.Component

{ leafletElement: E; createLeafletElement(props: P): E; updateLeafletElement(fromProps: P, toProps: P): void; } export type AttributionControlProps = Leaflet.Control.AttributionOptions; export class AttributionControl

extends MapControl { } export interface LayersControlProps extends LayersControlEvents, Leaflet.Control.LayersOptions { baseLayers?: Leaflet.Control.LayersObject; children?: Children; overlays?: Leaflet.Control.LayersObject; } export class LayersControl

extends MapControl { } export namespace LayersControl { interface BaseControlledLayerProps { checked?: boolean; children?: Children; removeLayer?(layer: Leaflet.Layer): void; removeLayerControl?(layer: Leaflet.Layer): void; } interface ControlledLayerProps extends BaseControlledLayerProps { addBaseLayer?(layer: Leaflet.Layer, name: string, checked: boolean): void; addOverlay?(layer: Leaflet.Layer, name: string, checked: boolean): void; name: string; } class ControlledLayer

extends React.Component

{ layer?: Leaflet.Layer; getChildContext(): { layerContainer: LayerContainer }; addLayer(): void; removeLayer(layer: Leaflet.Layer): void; } class BaseLayer

extends ControlledLayer

{ } class Overlay

extends ControlledLayer

{ } } export type ScaleControlProps = Leaflet.Control.ScaleOptions; export class ScaleControl

extends MapControl { } export type ZoomControlProps = Leaflet.Control.ZoomOptions; export class ZoomControl

extends MapControl { }