UNPKG

leaflet-control-geocoder

Version:

Extendable geocoder with builtin support for OpenStreetMap Nominatim, Bing, Google, Mapbox, MapQuest, What3Words, Photon, Pelias, HERE, Neutrino, Plus codes

162 lines (161 loc) 5.36 kB
import * as L from 'leaflet'; import { IGeocoder, GeocodingResult } from './geocoders/api'; export interface GeocoderControlOptions extends L.ControlOptions { /** * Collapse control unless hovered/clicked */ collapsed: boolean; /** * How to expand a collapsed control: `touch` or `click` or `hover` */ expand: 'touch' | 'click' | 'hover'; /** * Placeholder text for text input */ placeholder: string; /** * Message when no result found / geocoding error occurs */ errorMessage: string; /** * Accessibility label for the search icon used by screen readers */ iconLabel: string; /** * Object to perform the actual geocoding queries */ geocoder?: IGeocoder; /** * Immediately show the unique result without prompting for alternatives */ showUniqueResult: boolean; /** * Show icons for geocoding results (if available); supported by Nominatim */ showResultIcons: boolean; /** * Minimum number characters before suggest functionality is used (if available from geocoder) */ suggestMinLength: number; /** * Number of milliseconds after typing stopped before suggest functionality is used (if available from geocoder) */ suggestTimeout: number; /** * Initial query string for text input */ query: string; /** * Minimum number of characters in search text before performing a query */ queryMinLength: number; /** * Whether to mark a geocoding result on the map by default */ defaultMarkGeocode: boolean; } /** * Event is fired when selecting a geocode result. * By default, the control will center the map on it and place a marker at its location. * To remove the control's default handler for marking a result, set {@link GeocoderControlOptions.defaultMarkGeocode} to `false`. */ export type MarkGeocodeEvent = { geocode: GeocodingResult; }; export type MarkGeocodeEventHandlerFn = (event: MarkGeocodeEvent) => void; /** * Event is fired before invoking {@link IGeocoder.geocode} (or {@link IGeocoder.suggest}). * The event data contains the query string as `input`. */ export type StartGeocodeEvent = { input: string; }; export type StartGeocodeEventHandlerFn = (event: StartGeocodeEvent) => void; /** * Event is fired before after receiving results from {@link IGeocoder.geocode} (or {@link IGeocoder.suggest}). * The event data contains the query string as `input` and the geocoding `results`. */ export type FinishGeocodeEvent = { input: string; results: GeocodingResult[]; }; export type FinishGeocodeEventHandlerFn = (event: FinishGeocodeEvent) => void; declare module 'leaflet' { interface Evented { on(type: 'markgeocode', fn: MarkGeocodeEventHandlerFn, context?: any): this; on(type: 'startgeocode', fn: StartGeocodeEventHandlerFn, context?: any): this; on(type: 'startsuggest', fn: StartGeocodeEventHandlerFn, context?: any): this; on(type: 'finishsuggest', fn: FinishGeocodeEventHandlerFn, context?: any): this; on(type: 'finishgeocode', fn: FinishGeocodeEventHandlerFn, context?: any): this; } } /** * Leaflet mixins https://leafletjs.com/reference-1.7.1.html#class-includes * for TypeScript https://www.typescriptlang.org/docs/handbook/mixins.html * @internal */ declare class EventedControl { constructor(...args: any[]); } /** * @internal */ interface EventedControl extends L.Control, L.Evented { } /** * This is the geocoder control. It works like any other [Leaflet control](https://leafletjs.com/reference.html#control), and is added to the map. */ export declare class GeocoderControl extends EventedControl { options: GeocoderControlOptions; private _alts; private _container; private _errorElement; private _geocodeMarker; private _input; private _lastGeocode; private _map; private _preventBlurCollapse; private _requestCount; private _results; private _selection; private _suggestTimeout; /** * Instantiates a geocoder control (to be invoked using `new`) * @param options the options */ constructor(options?: Partial<GeocoderControlOptions>); addThrobberClass(): void; removeThrobberClass(): void; /** * Returns the container DOM element for the control and add listeners on relevant map events. * @param map the map instance * @see https://leafletjs.com/reference.html#control-onadd */ onAdd(map: L.Map): HTMLDivElement; /** * Sets the query string on the text input * @param string the query string */ setQuery(string: string): this; private _geocodeResult; /** * Marks a geocoding result on the map * @param result the geocoding result */ markGeocode(event: MarkGeocodeEvent): this; private _geocode; private _geocodeResultSelected; private _toggle; private _expand; private _collapse; private _clearResults; private _createAlt; private _keydown; private _change; } /** * [Class factory method](https://leafletjs.com/reference.html#class-class-factories) for {@link GeocoderControl} * @param options the options */ export declare function geocoder(options?: Partial<GeocoderControlOptions>): GeocoderControl; export {};