UNPKG

carte-facile

Version:

Une librairie de styles de cartes et surcouches prêtes à l'emploi, pour ajouter des cartes rapidement à votre application avec MapLibre ou d'autres librairies cartographiques.

106 lines 3.49 kB
import type { Map, IControl, ControlPosition } from 'maplibre-gl'; import '../../themes/styles/dsfr.css'; import '../Button/Button.css'; import './SearchControl.css'; /** * Search result returned by a provider */ export interface SearchResult { id: string; label: string; description?: string; /** Result type key set by the provider (e.g. 'address', 'city', 'train', 'poi'). */ type?: string; /** Icon to display in the results list (e.g. 'pin'). Set by the provider. */ icon?: 'pin'; /** Location context displayed in gray after the label (city, postcode, etc.) */ locationSuffix?: string; /** Coordinates [longitude, latitude] */ center?: [number, number]; /** Bounding box [west, south, east, north] */ bbox?: [number, number, number, number]; /** Additional data (geometry, properties, etc.) */ data?: unknown; } /** * Interface to implement a custom search provider */ export interface SearchProvider { name: string; placeholder?: string; search(query: string): Promise<SearchResult[]>; /** Action executed when a result is selected (move map, add marker, etc.) */ onSelect(result: SearchResult, map: Map): void | Promise<void>; /** Called when the search is cleared or the control is removed. Use to clean up map layers, markers, etc. */ onClear?(map: Map): void; } /** * SearchControl configuration options */ export interface SearchControlOptions { providers?: SearchProvider | SearchProvider[]; placeholder?: string; /** Delay before triggering search (default: 300ms) */ debounceMs?: number; /** Minimum characters required (default: 3) */ minChars?: number; /** Maximum results displayed per provider (default: 5) */ maxResults?: number; /** * Called when the user selects a result. * Use this to access the full result data (INSEE code, raw API properties, etc.) * * @example * import type { GeopfResultData } from 'carte-facile'; * onSelect: (result) => { * const data = result.data as GeopfResultData; * myService.fetchDataForCommune({ citycode: data.citycode }); * } */ onSelect?: (result: SearchResult) => void; } /** * Search control for MapLibre GL * * @example * map.addControl(new SearchControl({ * providers: [GeopfGeocoder, AdminGeocoder] * })); */ export declare class SearchControl implements IControl { private static _idCounter; private _id; private _map?; private _container; private _input; private _searchButton; private _clearButton; private _dropdown; private _providers; private _options; private _debounceTimeout?; private _dropdownEntries; private _selectedIndex; private _documentClickHandler?; private _requestId; private _confirmedEntry?; constructor(options?: SearchControlOptions); onAdd(map: Map): HTMLElement; onRemove(): void; getDefaultPosition(): ControlPosition; private _bindInputEvents; private _bindButtonEvents; private _bindDocumentEvents; private _search; private _renderDropdown; private _createResultItem; private _positionDropdown; private _confirmSelection; private _selectEntry; private _applyEntry; private _setSelectedIndex; /** Returns HTML with matching query words wrapped in <strong>. XSS-safe. */ private _highlightText; private _hideDropdown; } //# sourceMappingURL=SearchControl.d.ts.map