@nextgis/leaflet-map-adapter 1.14.0 → 1.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/leaflet-map-adapter.esm-browser.js +14025 -14025
- package/lib/leaflet-map-adapter.esm-browser.js.map +1 -1
- package/lib/leaflet-map-adapter.esm-browser.prod.js +3 -17
- package/lib/leaflet-map-adapter.esm-browser.prod.js.map +1 -1
- package/lib/leaflet-map-adapter.esm-bundler.js +2 -2
- package/lib/leaflet-map-adapter.esm-bundler.js.map +1 -1
- package/lib/leaflet-map-adapter.esm-bundler.prod.js +2 -16
- package/lib/leaflet-map-adapter.esm-bundler.prod.js.map +1 -1
- package/lib/leaflet-map-adapter.global.js +14025 -14025
- package/lib/leaflet-map-adapter.global.js.map +1 -1
- package/lib/leaflet-map-adapter.global.prod.js +3 -17
- package/lib/leaflet-map-adapter.global.prod.js.map +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"leaflet-map-adapter.esm-bundler.prod.js","sources":["../src/utils/convertMapClickEvent.ts","../src/controls/createControl.ts","../src/controls/Attribution.ts","../src/utils/boundsToArray.ts","../src/utils/geometries.ts","../src/utils/detectType.ts","../src/layer-adapters/BaseAdapter.ts","../src/layer-adapters/GeoJsonAdapter.ts","../src/utils/createMouseEvent.ts","../src/utils/callAjax.ts","../src/layer-adapters/ImageAdapter/ImageOverlay.ts","../src/layer-adapters/ImageAdapter/ImageLayer.ts","../src/layer-adapters/ImageAdapter/ImageAdapter.ts","../../utils/src/debounce.ts","../src/utils/makeRemoteTileLayer.ts","../src/layer-adapters/TileAdapter/TileLayer.ts","../src/layer-adapters/TileAdapter/TileAdapter.ts","../src/layer-adapters/WmsAdapter/WmsLayer.ts","../src/layer-adapters/WmsAdapter/WmsAdapter.ts","../src/layer-adapters/OsmAdapter.ts","../src/utils/arrayToBoundsExpression.ts","../src/LeafletMapAdapter.ts","../src/controls/createButtonControl.ts"],"sourcesContent":["import type { LeafletMouseEvent } from 'leaflet';\n\nimport type { MapClickEvent } from '@nextgis/webmap';\n\nexport function convertMapClickEvent(evt: LeafletMouseEvent): MapClickEvent {\n const coord = evt.containerPoint;\n const latLng = evt.latlng;\n const { lat, lng } = latLng;\n return {\n latLng,\n lngLat: [lng, lat],\n pixel: { left: coord.x, top: coord.y },\n source: evt,\n };\n}\n","import { Control, DomEvent } from 'leaflet';\nimport type {\n MapControl,\n CreateControlOptions,\n MapAdapter,\n} from '@nextgis/webmap';\n\nexport function createControl(\n control: MapControl,\n options: CreateControlOptions = {},\n map: MapAdapter,\n): Control {\n const C = Control.extend({\n onAdd() {\n const element = document.createElement('div');\n const content = control.onAdd(map);\n element.classList.add('leaflet-control');\n if (options.bar) {\n element.classList.add('leaflet-bar');\n }\n if (options.addClass) {\n element.classList.add(options.addClass);\n }\n if (!options.margin && !options.bar) {\n element.style.marginBottom = '0px';\n element.style.marginTop = '0px';\n element.style.marginLeft = '0px';\n element.style.marginRight = '0px';\n }\n if (content) {\n element.appendChild(content);\n }\n\n DomEvent.disableClickPropagation(element);\n\n return element;\n },\n onRemove() {\n control.onRemove();\n },\n });\n return new C();\n}\n","import { Control, ControlOptions } from 'leaflet';\nimport { AttributionControlOptions } from '@nextgis/webmap';\n\nexport class AttributionControl extends Control.Attribution {\n // options: AttributionControlOptions\n constructor(options: AttributionControlOptions & ControlOptions) {\n super(options);\n const customAttribution = options && options.customAttribution;\n if (customAttribution) {\n let attributions: string[] = [];\n if (Array.isArray(customAttribution)) {\n attributions = customAttribution;\n } else if (customAttribution) {\n attributions = [customAttribution];\n }\n attributions.forEach((x) => this.addAttribution(x));\n }\n }\n}\n","import type { LatLngBounds } from 'leaflet';\nimport type { LngLatBoundsArray } from '@nextgis/utils';\n\nexport function boundsToArray(bounds: LatLngBounds): LngLatBoundsArray {\n const ne = bounds.getNorthEast();\n const sw = bounds.getSouthWest();\n return [sw.lng, sw.lat, ne.lng, ne.lat];\n}\n","import { GeoJSON } from 'leaflet';\nimport { boundsToArray } from './boundsToArray';\n\nimport type {\n Feature,\n GeoJsonObject,\n FeatureCollection,\n GeometryCollection,\n GeoJsonGeometryTypes,\n} from 'geojson';\nimport type { LatLngBounds } from 'leaflet';\nimport type { FeaturePosition, VectorAdapterLayerType } from '@nextgis/webmap';\nimport type { LngLatArray, LngLatBoundsArray } from '@nextgis/utils';\n\nexport const typeAlias: {\n [key in GeoJsonGeometryTypes]: VectorAdapterLayerType;\n} = {\n Point: 'point',\n LineString: 'line',\n MultiPoint: 'point',\n Polygon: 'polygon',\n MultiLineString: 'line',\n MultiPolygon: 'polygon',\n GeometryCollection: 'polygon',\n};\n\nexport const PAINT = {\n stroke: false,\n opacity: 1,\n};\n\nexport const backAliases: {\n [key in VectorAdapterLayerType]?: GeoJsonGeometryTypes[];\n} = {};\n\nfor (const a in typeAlias) {\n const layerType = typeAlias[a as GeoJsonGeometryTypes];\n const backAlias = backAliases[layerType] || [];\n backAlias.push(a as GeoJsonGeometryTypes);\n backAliases[layerType] = backAlias;\n}\n\nexport function geometryFilter(\n geometry: GeoJsonGeometryTypes,\n type: VectorAdapterLayerType,\n): boolean {\n const geoJsonGeometry = backAliases[type] || [];\n return geoJsonGeometry.indexOf(geometry) !== -1;\n}\n\nexport function filterGeometries(\n data: GeoJsonObject,\n type: VectorAdapterLayerType,\n): GeoJsonObject | false {\n if (data.type === 'FeatureCollection') {\n const _data = data as FeatureCollection;\n _data.features = _data.features.filter((f) =>\n geometryFilter(f.geometry.type, type),\n );\n } else if (data.type === 'Feature') {\n const allow = geometryFilter((data as Feature).geometry.type, type);\n if (!allow) {\n return false;\n }\n } else if (data.type === 'GeometryCollection') {\n const _data = data as GeometryCollection;\n _data.geometries = _data.geometries.filter((g) =>\n geometryFilter(g.type, type),\n );\n }\n return data;\n}\n\nfunction featuresBounds(features: Feature | Feature[]): LatLngBounds {\n const geoJsonLayer = new GeoJSON();\n const features_ = Array.isArray(features) ? features : [features];\n features_.forEach((f) => geoJsonLayer.addData(f));\n return geoJsonLayer.getBounds();\n}\n\nexport function getFeaturesBounds(\n features: Feature | Feature[],\n): LngLatBoundsArray {\n return boundsToArray(featuresBounds(features));\n}\n\nexport function getFeaturesCenter(features: Feature | Feature[]): LngLatArray {\n const { lat, lng } = featuresBounds(features).getCenter();\n return [lng, lat];\n}\n\nexport function createFeaturePositionOptions(\n features: Feature | Feature[],\n): FeaturePosition {\n return {\n getBounds: () => getFeaturesBounds(features),\n getCenter: () => getFeaturesCenter(features),\n };\n}\n","import type {\n GeoJsonObject,\n GeoJsonGeometryTypes,\n FeatureCollection,\n Feature,\n GeometryCollection,\n} from 'geojson';\n\nfunction findMostFrequentGeomType(\n arr: GeoJsonGeometryTypes[],\n): GeoJsonGeometryTypes {\n const counts: { [x: string]: number } = {};\n for (let fry = 0; fry < arr.length; fry++) {\n counts[arr[fry]] = 1 + (counts[arr[fry]] || 0);\n }\n let maxName = '';\n for (const c in counts) {\n const maxCount = maxName ? counts[maxName] : 0;\n if (counts[c] > maxCount) {\n maxName = c;\n }\n }\n return maxName as GeoJsonGeometryTypes;\n}\n\nexport function detectType(geojson: GeoJsonObject): GeoJsonGeometryTypes {\n let geometry: GeoJsonGeometryTypes;\n if (geojson.type === 'FeatureCollection') {\n const featuresTypes = (geojson as FeatureCollection).features.map(\n (f) => f.geometry.type,\n );\n geometry = findMostFrequentGeomType(featuresTypes);\n } else if (geojson.type === 'GeometryCollection') {\n const geometryTypes = (geojson as GeometryCollection).geometries.map(\n (g) => g.type,\n );\n geometry = findMostFrequentGeomType(geometryTypes);\n } else if (geojson.type === 'Feature') {\n geometry = (geojson as Feature).geometry.type;\n } else {\n geometry = geojson.type;\n }\n return geometry;\n}\n","import type { MainLayerAdapter, AdapterOptions } from '@nextgis/webmap';\nimport type { Map } from 'leaflet';\n\nexport class BaseAdapter<O extends AdapterOptions = AdapterOptions, L = any>\n implements MainLayerAdapter<Map, L, O>\n{\n layer?: L;\n protected pane = 'order-0';\n\n constructor(public map: Map, public options: O) {\n if (options.order !== undefined) {\n const pane = 'order-' + options.order;\n let exist = map.getPane(pane);\n if (!exist) {\n exist = map.createPane(pane);\n }\n exist.style.zIndex = String(Math.round(options.order * 100));\n this.pane = pane;\n }\n }\n\n addLayer(options: O): L | Promise<L> | undefined {\n Object.assign(this.options, options);\n return undefined;\n }\n}\n","import {\n CircleMarker,\n FeatureGroup,\n DomEvent,\n GeoJSON,\n DivIcon,\n Marker,\n Layer,\n} from 'leaflet';\nimport { debounce, defined } from '@nextgis/utils';\n\nimport { isPaintCallback, isPaint } from '@nextgis/paint';\nimport {\n PAINT,\n typeAlias,\n filterGeometries,\n createFeaturePositionOptions,\n} from '../utils/geometries';\nimport { createMouseEvent } from '../utils/createMouseEvent';\nimport { boundsToArray } from '../utils/boundsToArray';\nimport { detectType } from '../utils/detectType';\nimport { BaseAdapter } from './BaseAdapter';\n\nimport type { GeoJsonObject, Feature, Point } from 'geojson';\nimport type {\n PopupOptions as LPopupOptions,\n CircleMarkerOptions,\n LeafletMouseEvent,\n LatLngExpression,\n GeoJSONOptions,\n LeafletEvent,\n PathOptions,\n LatLng,\n Path,\n Map,\n} from 'leaflet';\nimport type {\n Paint,\n IconPaint,\n PathPaint,\n VectorAdapterLayerPaint,\n} from '@nextgis/paint';\nimport type { LngLatBoundsArray } from '@nextgis/utils';\nimport type {\n VectorAdapterLayerType,\n GeoJsonAdapterOptions,\n PopupOnCloseFunction,\n OnLayerMouseOptions,\n VectorLayerAdapter,\n OnLayerSelectType,\n LayerDefinition,\n DataLayerFilter,\n PopupOptions,\n} from '@nextgis/webmap';\n\nexport type LayerDef = LayerDefinition<Feature, Layer>;\n\nexport class GeoJsonAdapter\n extends BaseAdapter<GeoJsonAdapterOptions>\n implements VectorLayerAdapter<Map>\n{\n layer?: FeatureGroup;\n selected = false;\n\n private paint?: Paint;\n private selectedPaint?: Paint;\n private type?: VectorAdapterLayerType;\n\n private _layers: LayerDef[] = [];\n private _selectedLayers: LayerDef[] = [];\n private _filteredLayers: LayerDef[] = [];\n private _filterFun?: DataLayerFilter<Feature>;\n private _openedPopup: [Layer, PopupOnCloseFunction[], LayerDef][] = [];\n\n private $updateTooltip = debounce(() => {\n this.updateTooltip();\n }, 300);\n\n constructor(map: Map, options: GeoJsonAdapterOptions) {\n super(map, options);\n }\n\n addLayer(options: GeoJsonAdapterOptions): FeatureGroup<any> | undefined {\n Object.assign(this.options, options);\n this.paint = options.paint;\n this.layer = new FeatureGroup([], {\n ...options.nativeOptions,\n pane: this.pane,\n });\n this.selectedPaint = options.selectedPaint;\n options.paint = this.paint;\n\n if (options.data) {\n this.addData(options.data);\n }\n\n this._addMapListener();\n\n return this.layer;\n }\n\n beforeRemove(): void {\n this._removeMapListener();\n }\n\n select(findFeatureFun?: DataLayerFilter): void {\n if (findFeatureFun) {\n const def = this._layers.filter(findFeatureFun);\n def.forEach((x) => {\n this._selectLayer(x, 'api');\n });\n } else if (!this.selected) {\n this.selected = true;\n if (this.selectedPaint) {\n this._setPaintEachLayer(this.selectedPaint);\n }\n }\n }\n\n unselect(findFeatureFun?: DataLayerFilter): void {\n if (findFeatureFun) {\n const feature = this._layers.filter(findFeatureFun);\n feature.forEach((x) => {\n this._unSelectLayer(x);\n });\n } else if (this.selected) {\n for (const p of this._openedPopup) {\n this._removePopup(p[0]);\n }\n if (this.paint) {\n this._setPaintEachLayer(this.paint);\n }\n this._selectedLayers.length = 0;\n this.selected = false;\n }\n }\n\n getSelected(): LayerDefinition<Feature, LayerDef>[] {\n return this._selectedLayers.map((x) => {\n return {\n target: this,\n feature: x.feature,\n layer: x,\n ...createFeaturePositionOptions(x.feature),\n };\n });\n }\n\n getFiltered(): LayerDef[] {\n return this._filteredLayers;\n }\n\n filter(fun?: DataLayerFilter): LayerDef[] {\n // Some optimization\n this._filterFun = fun;\n const layer_ = this.layer;\n const map = layer_ && (layer_ as any)._map;\n if (layer_ && map) {\n layer_.remove();\n\n const filteredLayers: LayerDef[] = [];\n this._layers.forEach(({ feature, layer }) => {\n if (layer) {\n const ok = fun\n ? fun({\n target: this,\n feature,\n layer,\n ...createFeaturePositionOptions(feature),\n })\n : true;\n if (ok) {\n layer_.addLayer(layer);\n filteredLayers.push({\n target: this,\n feature,\n layer,\n ...createFeaturePositionOptions(feature),\n });\n } else {\n layer_.removeLayer(layer);\n }\n }\n });\n this._filteredLayers = filteredLayers;\n\n layer_.addTo(map);\n }\n return this._filteredLayers;\n }\n\n cleanFilter(): void {\n this.filter();\n }\n\n getLayers(): LayerDef[] {\n return this._layers.map(({ layer, feature }) => {\n const visible = layer && !!(layer as any)._map;\n return {\n feature,\n layer,\n visible,\n target: this,\n ...createFeaturePositionOptions(feature),\n };\n });\n }\n\n clearLayer(cb?: (feature: Feature) => boolean): void {\n this.unselect();\n const layer_ = this.layer;\n if (layer_) {\n if (cb) {\n for (let fry = this._layers.length; fry--; ) {\n const def = this._layers[fry];\n if (def) {\n const { feature, layer } = def;\n if (feature && layer) {\n const exist = cb(feature);\n if (exist) {\n layer_.removeLayer(layer);\n this._layers.splice(fry, 1);\n }\n }\n }\n }\n } else {\n layer_.clearLayers();\n this._layers = [];\n }\n }\n }\n\n setData(data: GeoJsonObject): void {\n this.clearLayer();\n this.addData(data);\n }\n\n addData(data: GeoJsonObject | false): void {\n const options = this.options;\n let geoJsonOptions: GeoJSONOptions | undefined;\n if (options) {\n if (data) {\n let type: VectorAdapterLayerType;\n\n if (!options.type) {\n const detectedType = detectType(data);\n type = typeAlias[detectedType];\n } else {\n type = options.type;\n }\n if (this.type && this.type !== type) {\n console.warn('no other data type than layer can be added');\n return;\n }\n this.type = type;\n\n data = filterGeometries(data, type);\n if (data) {\n geoJsonOptions = this._getGeoJsonOptions(options, type);\n }\n }\n new GeoJSON(data || undefined, geoJsonOptions);\n }\n }\n\n openPopup(findFeatureFun: DataLayerFilter, options?: PopupOptions): void {\n if (findFeatureFun) {\n const def = this._layers.filter(findFeatureFun);\n def.forEach((x) => {\n this._openPopup(x, options, 'api');\n });\n }\n }\n\n closePopup(findFeatureFun?: DataLayerFilter): void {\n const popupToClose = findFeatureFun\n ? this._openedPopup.filter((x) => findFeatureFun(x[2]))\n : this._openedPopup;\n\n popupToClose.forEach((x) => {\n this._removePopup(x[0]);\n });\n }\n\n updateTooltip(layerDef?: LayerDefinition): void {\n if (layerDef) {\n this._updateTooltip(layerDef);\n } else {\n this.getLayers().forEach((x) =>\n this._updateTooltip({ feature: x.feature, layer: x.layer }),\n );\n }\n }\n\n /** @deprecated use {@link GeoJsonAdapter.getBounds} instead */\n getExtent(): LngLatBoundsArray | undefined {\n return this.getBounds();\n }\n\n getBounds(): LngLatBoundsArray | undefined {\n if (this.layer) {\n const bounds = this.layer.getBounds();\n if (bounds.isValid()) {\n return boundsToArray(bounds);\n }\n }\n }\n\n setOpacity(value: number): void {\n this.options.opacity = value;\n this.setPaint(this.paint);\n this.setSelectedPaint(this.selectedPaint);\n }\n\n setPaint(paint?: Paint | null): void {\n if (paint) {\n this.paint = paint;\n for (const l of this._layers) {\n this._setPaint(l, paint);\n }\n }\n }\n setSelectedPaint(paint?: Paint | null): void {\n if (paint) {\n this.selectedPaint = paint;\n for (const l of this._selectedLayers) {\n this._setPaint(l, paint);\n }\n }\n }\n updatePaint(paint: Partial<Paint>): void {\n this.paint = { ...this.paint, ...paint } as Paint;\n for (const l of this._layers) {\n this._setPaint(l, this.paint);\n }\n }\n updateSelectedPaint(paint: Partial<Paint>): void {\n this.selectedPaint = { ...this.selectedPaint, ...paint } as Paint;\n for (const l of this._selectedLayers) {\n this._setPaint(l, this.selectedPaint);\n }\n }\n\n private $unselect = () => {\n this.unselect();\n };\n\n private _updateTooltip(layerDef: Pick<LayerDef, 'feature' | 'layer'>) {\n const { feature, layer } = layerDef;\n if (feature && layer && feature.properties && this.options.labelField) {\n layer.unbindTooltip();\n const message = feature.properties[this.options.labelField];\n if (message !== undefined) {\n const permanent = !this.options.labelOnHover;\n\n layer.bindTooltip(String(message), { permanent, sticky: false });\n }\n }\n }\n\n private async _openPopup(\n def: LayerDef,\n options: PopupOptions = {},\n type: OnLayerSelectType,\n latLng?: LatLngExpression,\n ) {\n const { feature, layer } = def;\n const {\n minWidth,\n autoPan,\n maxWidth,\n closeButton: closeButton_,\n } = {\n minWidth: 300,\n ...options,\n };\n const closeButton = closeButton_ ?? !this.options.selectOnHover;\n let popup: Layer;\n const _closeHandlers: PopupOnCloseFunction[] = [];\n const onClose = (handler: PopupOnCloseFunction) => {\n _closeHandlers.push(handler);\n };\n const close = () => {\n if (popup) {\n this._removePopup(popup);\n }\n };\n let content;\n if (options.createPopupContent) {\n content = await options.createPopupContent({\n layer,\n feature,\n target: this,\n type,\n close,\n onClose,\n ...createFeaturePositionOptions(feature),\n });\n } else {\n content = options.popupContent;\n }\n\n if (content && layer) {\n const popupOptions: LPopupOptions = {\n minWidth,\n autoPan,\n // maxWidth,\n closeButton,\n closeOnClick: false,\n autoClose: false,\n };\n if (defined(maxWidth)) {\n popupOptions.maxWidth = maxWidth;\n }\n popup = layer.bindPopup(content, popupOptions);\n\n const unselectOnClose =\n this.options.popupOptions?.unselectOnClose ?? true;\n if (unselectOnClose) {\n const p = layer.getPopup();\n p &&\n p.once(\n 'remove',\n () => {\n close();\n },\n this,\n );\n }\n this._openedPopup.push([popup, _closeHandlers, def]);\n popup.openPopup(latLng);\n }\n }\n\n private _removePopup(popup: Layer) {\n const map = this.map;\n if (map) {\n popup.closePopup().unbindPopup();\n const index = this._openedPopup.findIndex((x) => x[0] === popup);\n if (index !== -1) {\n const unselectOnClose =\n this.options.popupOptions?.unselectOnClose ?? true;\n const [, closeHandlers, def] = this._openedPopup[index];\n for (const h of closeHandlers) {\n h(def);\n }\n closeHandlers.length = 0;\n if (unselectOnClose) {\n this._unSelectLayer(def);\n }\n this._openedPopup.splice(index, 1);\n }\n }\n }\n\n private _setPaintEachLayer(paint: Paint) {\n this._layers.forEach((l) => {\n this._setPaint(l, paint);\n });\n }\n\n private _setPaint(def: LayerDef, paint: Paint) {\n let style: VectorAdapterLayerPaint | undefined = undefined;\n const { layer, feature } = def;\n if (layer && feature) {\n if (isPaintCallback(paint)) {\n style = paint(feature);\n } else if (isPaint(paint)) {\n style = paint;\n }\n if (style) {\n if (this.type === 'point' && style.type === 'icon') {\n const marker = layer as Marker;\n const divIcon = this._createDivIcon(style);\n marker.setIcon(divIcon);\n } else if ('setStyle' in layer) {\n (layer as Path).setStyle(this._preparePaint(style));\n }\n }\n }\n }\n\n private _preparePaint(paint: VectorAdapterLayerPaint): PathOptions {\n if (paint.type !== 'get-paint') {\n // const path: CircleMarkerOptions | PathOptions = paint as CircleMarkerOptions | PathOptions;\n // if (path.opacity) {\n // path.fillOpacity = path.opacity;\n // }\n\n const paintAliases: [keyof PathOptions, keyof PathPaint][] = [\n // ['color', 'color'],\n ['color', 'strokeColor'],\n ['opacity', 'strokeOpacity'],\n ['stroke', 'stroke'],\n ['fillColor', 'fillColor'],\n ['fillOpacity', 'fillOpacity'],\n ['fill', 'fill'],\n ['weight', 'weight'],\n ];\n const aliases: [keyof PathOptions, keyof PathPaint][] =\n this.type === 'line'\n ? [\n ['color', 'strokeColor'],\n ['opacity', 'strokeOpacity'],\n ['weight', 'weight'],\n ]\n : paintAliases;\n\n const readyPaint: PathOptions & CircleMarkerOptions = {};\n\n if ('radius' in paint && typeof paint.radius === 'number') {\n readyPaint.radius = paint.radius;\n }\n for (const [to, from] of aliases) {\n let paintProp = (paint as PathPaint)[from];\n if (\n defined(this.options.opacity) &&\n from.toLowerCase().indexOf('opacity') !== -1\n ) {\n paintProp = Number(paintProp) * this.options.opacity;\n }\n\n if (paintProp !== undefined) {\n Object.defineProperty(readyPaint, to, {\n enumerable: true,\n value: paintProp,\n });\n }\n }\n\n return readyPaint;\n }\n return PAINT;\n }\n\n private _getGeoJsonOptions(\n options: GeoJsonAdapterOptions,\n type: VectorAdapterLayerType,\n ): GeoJSONOptions {\n const paint = options.paint;\n let lopt: GeoJSONOptions = {};\n\n if (typeof paint === 'function') {\n if (type === 'point') {\n // TODO: fix types (@geoman-io/leaflet-geoman-free)\n (lopt as any).pointToLayer = (\n feature: Feature<Point, any>,\n latLng: LatLng,\n ) => {\n const iconOpt = paint(feature);\n const pointToLayer = this._createPaintToLayer(iconOpt as IconPaint);\n return pointToLayer(feature, latLng);\n };\n } else {\n lopt = {\n style: (feature) => {\n if (feature) {\n return this._preparePaint({ ...PAINT, ...paint(feature) });\n } else {\n return this._preparePaint({ ...PAINT, type: 'path' });\n }\n },\n };\n }\n } else {\n lopt = this._createPaintOptions(paint as VectorAdapterLayerPaint, type);\n }\n\n lopt.onEachFeature = (feature: Feature, layer) => {\n this._onEachFeature(feature, layer);\n };\n\n return lopt;\n }\n\n private _onEachFeature(feature: Feature, layer: Layer) {\n const layer_ = this.layer;\n if (layer_) {\n const def = {\n target: this,\n feature,\n layer,\n ...createFeaturePositionOptions(feature),\n };\n\n // @ts-ignore\n layer.options.pane = this.pane;\n this._layers.push(def);\n let ok = true;\n if (this._filterFun) {\n ok = this._filterFun(def);\n }\n if (ok) {\n const { popup, popupOptions, selectable, interactive, selectOnHover } =\n this.options;\n // @ts-ignore\n layer.options.interactive = defined(interactive) ? interactive : true;\n layer_.addLayer(layer);\n if (selectable) {\n if (selectOnHover) {\n layer.on('mouseover', () => {\n this._selectLayer(def, 'hover');\n });\n layer.on('mouseout', () => {\n this._unSelectLayer(def);\n });\n } else {\n layer.on(\n 'click',\n (e) => this._selectOnLayerClick(e as LeafletMouseEvent),\n this,\n );\n }\n }\n this._handleMouseEvents(layer);\n // The timeout is needed to display the popup immediately when adding a layer to the map.\n // Without a timeout, the layer may not yet have a _map object\n setTimeout(() => {\n if (popup) {\n this._openPopup(\n {\n target: this,\n layer,\n feature,\n ...createFeaturePositionOptions(feature),\n },\n popupOptions,\n 'api',\n );\n }\n this._updateTooltip({ layer, feature });\n });\n }\n }\n }\n\n private _handleMouseEvents(layer: Layer) {\n const { onClick, onLayerClick, onMouseOut, onMouseOver } = this.options;\n // TODO: remove backward compatibility for onLayerClick\n const onClick_ = onClick || onLayerClick;\n if (onClick_) {\n layer.on(\n 'click',\n (e) => {\n const selected = !!this._getSelected(layer);\n onClick_({\n selected,\n ...this._createMouseEvent(e),\n });\n },\n this,\n );\n }\n if (onMouseOut) {\n layer.on(\n 'mouseout',\n (e) => {\n onMouseOut(this._createMouseEvent(e));\n },\n this,\n );\n }\n if (onMouseOver) {\n layer.on(\n 'mouseover',\n (e) => {\n onMouseOver(this._createMouseEvent(e));\n },\n this,\n );\n }\n }\n\n private _createMouseEvent(source: LeafletEvent): OnLayerMouseOptions {\n return createMouseEvent({\n layer: this,\n source: source as LeafletMouseEvent,\n });\n }\n\n private _getSelected(layer: LayerDef['layer']) {\n return this._selectedLayers.find((x) => x.layer === layer);\n }\n\n private _selectOnLayerClick(e: LeafletMouseEvent) {\n DomEvent.stopPropagation(e);\n const layer = e.target as Layer;\n const feature = (layer as any).feature;\n const def: LayerDef = {\n target: this,\n layer,\n feature,\n ...createFeaturePositionOptions(feature),\n };\n const isSelected = this._getSelected(layer);\n if (isSelected) {\n if (this.options && this.options.unselectOnSecondClick) {\n this._unSelectLayer(isSelected);\n }\n } else {\n this._selectLayer(def, 'click', e.latlng);\n }\n }\n\n private _selectLayer(\n def: LayerDef,\n type: OnLayerSelectType,\n latlng?: LatLngExpression,\n ) {\n (this.map as any)._addUnselectCb(() => {\n this._unSelectLayer(def);\n });\n if (this.options && !this.options.multiselect) {\n this._selectedLayers.forEach((x) => this._unSelectLayer(x));\n }\n this._selectedLayers.push(def);\n this.selected = true;\n const { selectedPaint, popupOnSelect, popupOptions } = this.options;\n\n if (selectedPaint && def.layer) {\n this._setPaint(def, selectedPaint);\n }\n if (popupOnSelect) {\n this._openPopup(def, popupOptions, type, latlng);\n }\n if (this.options.onSelect) {\n const features = def.feature ? [def.feature] : [];\n this.options.onSelect({\n type,\n layer: this,\n features,\n ...createFeaturePositionOptions(features),\n });\n }\n }\n\n private _unSelectLayer(def: LayerDef) {\n const index = this._selectedLayers.indexOf(def);\n if (index !== -1) {\n this._selectedLayers.splice(index, 1);\n if (this.options) {\n if (this.options.paint) {\n this._setPaint(def, this.options.paint);\n }\n\n if (this.options.popupOnSelect && def.layer) {\n this._removePopup(def.layer);\n }\n }\n }\n this.selected = this._selectedLayers.length > 0;\n }\n\n private _createDivIcon(icon: IconPaint) {\n const { ...toLIconOpt } = icon;\n return new DivIcon({ className: '', ...toLIconOpt });\n }\n\n private _createPaintToLayer(icon: IconPaint) {\n if (icon && icon.type) {\n if (icon.type === 'icon') {\n const iconClassName = icon.className;\n const html = icon.html;\n if (iconClassName || html) {\n return (geoJsonPoint: any, latlng: LatLngExpression) => {\n const divIcon = this._createDivIcon(icon);\n return new Marker(latlng, { icon: divIcon });\n };\n }\n } else if (icon.type === 'pin') {\n return (geoJsonPoint: any, latlng: LatLngExpression) => {\n // const divIcon = this.createDivIcon(icon);\n return new Marker(latlng);\n };\n }\n }\n return (geoJsonPoint: any, latlng: LatLngExpression) => {\n const p: any = PAINT;\n return new CircleMarker(latlng, this._preparePaint({ ...p, ...icon }));\n };\n }\n\n private _createPaintOptions(\n paintOptions: VectorAdapterLayerPaint,\n type: VectorAdapterLayerType,\n ): GeoJSONOptions {\n const geoJsonOptions: GeoJSONOptions = {};\n const paint = (paintOptions && this._preparePaint(paintOptions)) || {};\n if (paintOptions) {\n geoJsonOptions.style = () => {\n return paint;\n };\n }\n if (type === 'point') {\n (geoJsonOptions as any).pointToLayer = this._createPaintToLayer(\n paintOptions as IconPaint,\n );\n } else if (type === 'line') {\n paint.stroke = true;\n }\n return geoJsonOptions;\n }\n\n private _addMapListener() {\n const map = this.map;\n if (map) {\n const { labelField, labelOnHover, unselectOnClick } = this.options;\n const uoc = unselectOnClick ?? true;\n if (uoc) {\n map.on('click', this.$unselect);\n }\n if (labelField && !labelOnHover) {\n map.on('zoomend', this.$updateTooltip);\n map.on('moveend', this.$updateTooltip);\n }\n }\n }\n\n private _removeMapListener() {\n this.map.off('zoomend', this.$updateTooltip);\n this.map.off('moveend', this.$updateTooltip);\n this.map.off('click', this.$unselect);\n }\n}\n","import { convertMapClickEvent } from './convertMapClickEvent';\nimport { createFeaturePositionOptions } from './geometries';\n\nimport type { LeafletMouseEvent } from 'leaflet';\nimport type { LayerAdapter, OnLayerMouseOptions } from '@nextgis/webmap';\nimport type { LayerDef } from '../layer-adapters/GeoJsonAdapter';\n\nexport interface CreateMouseEventOptions {\n layer: LayerAdapter;\n source: LeafletMouseEvent;\n}\n\nexport function createMouseEvent({\n layer,\n source,\n}: CreateMouseEventOptions): OnLayerMouseOptions {\n const layer_ = source.target as LayerDef;\n const feature = layer_.feature;\n const opt: OnLayerMouseOptions = {\n layer,\n feature,\n event: convertMapClickEvent(source),\n source,\n ...createFeaturePositionOptions(feature),\n };\n return opt;\n}\n","export function callAjax(\n src: string,\n callback: (resp: any) => any,\n headers: Record<string, any>,\n): () => void {\n const xhr = new XMLHttpRequest();\n xhr.open('GET', src);\n xhr.responseType = 'arraybuffer';\n for (const h in headers) {\n xhr.setRequestHeader(h, headers[h]);\n }\n xhr.onload = function () {\n const arrayBufferView = new Uint8Array(this.response);\n const blob = new Blob([arrayBufferView], { type: 'image/png' });\n // @ts-ignore for typedoc\n const urlCreator = window.URL || window.webkitURL;\n const imageUrl = urlCreator.createObjectURL(blob);\n callback(imageUrl);\n };\n xhr.send();\n return () => {\n xhr.abort();\n };\n}\n","import {\n ImageOverlay as LImageOverlay,\n LatLngBoundsExpression,\n ImageOverlayOptions,\n} from 'leaflet';\nimport { callAjax } from '../../utils/callAjax';\n\ntype IOptions = ImageOverlayOptions & { headers?: any };\n\nexport class ImageOverlay extends LImageOverlay {\n private _abort: (() => void)[] = [];\n\n constructor(\n imageUrl: string,\n bounds: LatLngBoundsExpression,\n options?: IOptions,\n ) {\n super(imageUrl, bounds, options);\n }\n\n cancelLoad(): void {\n if (this._abort) {\n this._abort.forEach((x) => x());\n this._abort = [];\n }\n }\n\n _initImage(): void {\n // @ts-ignore\n super._initImage();\n // @ts-ignore\n const headers = this.options.headers;\n if (headers) {\n // @ts-ignore\n const img: HTMLImageElement = this._image;\n const src = img.src;\n img.src = '';\n this._abort.push(\n callAjax(\n src,\n (response) => {\n img.src = response;\n },\n headers,\n ),\n );\n }\n }\n}\n","/*!\n * leaflet.wms.js\n * A collection of Leaflet utilities for working with Web Mapping services.\n * (c) 2014-2016, Houston Engineering, Inc.\n * MIT License\n */\n\nimport { debounce } from '@nextgis/utils';\nimport { Layer, Util, CRS } from 'leaflet';\nimport { ImageOverlay } from './ImageOverlay';\n\nimport type { Map } from 'leaflet';\n\ninterface OverlayOptions {\n crs?: null;\n uppercase?: boolean;\n attribution?: string;\n opacity?: number;\n isBack?: boolean;\n minZoom?: number;\n maxZoom?: number;\n zIndex?: number;\n pane?: string;\n headers?: any;\n viewPortBuffer?: number;\n setViewDelay?: number;\n}\n\n/*\n * Overlay:\n * \"Single Tile\" WMS image overlay that updates with map changes.\n * Portions of wms.Overlay are directly extracted from L.TileLayer.WMS.\n * See Leaflet license.\n */\nexport class ImageLayer extends Layer {\n defaultWmsParams = {\n service: 'WMS',\n request: 'GetMap',\n version: '1.1.1',\n layers: '',\n styles: '',\n format: 'image/jpeg',\n transparent: false,\n };\n\n options: OverlayOptions = {\n crs: null,\n uppercase: false,\n attribution: '',\n opacity: 1,\n isBack: false,\n minZoom: 0,\n pane: 'tilePane',\n headers: null,\n viewPortBuffer: 0,\n setViewDelay: 100,\n };\n\n private wmsParams: any;\n private _url?: string;\n private _currentUrl?: string;\n private _currentOverlay?: ImageOverlay;\n\n constructor(url: string, options: OverlayOptions) {\n super(options);\n this._url = url;\n\n // Move WMS parameters to params object\n const params: any = {};\n const opts: any = {};\n let opt: keyof OverlayOptions;\n for (opt in options) {\n if (opt in this.options) {\n opts[opt] = options[opt];\n } else {\n params[opt] = options[opt];\n }\n }\n Util.setOptions(this, opts);\n this.wmsParams = Util.extend({}, this.defaultWmsParams, params);\n }\n\n setParams(params: Record<string, any>): void {\n Util.extend(this.wmsParams, params);\n this.update();\n }\n\n getAttribution(): string {\n return this.options.attribution || '';\n }\n\n onAdd(): this {\n this.update();\n return this;\n }\n\n onRemove(map: Map): this {\n if (this._currentOverlay) {\n this._currentOverlay.cancelLoad();\n map.removeLayer(this._currentOverlay);\n delete this._currentOverlay;\n }\n if (this._currentUrl) {\n delete this._currentUrl;\n }\n return this;\n }\n\n getEvents(): {\n moveend: () => void;\n } {\n return {\n moveend: debounce(this.update, this.options.setViewDelay),\n };\n }\n\n update(): void {\n if (!this._map) {\n return;\n }\n // Determine image URL and whether it has changed since last update\n this.updateWmsParams();\n const url = this.getImageUrl();\n if (this._currentUrl === url) {\n return;\n }\n this._currentUrl = url;\n\n // Keep current image overlay in place until new one loads\n // (inspired by esri.leaflet)\n const viewPortBuffer = this.options.viewPortBuffer || 0;\n const bounds = this._map.getBounds().pad(viewPortBuffer);\n\n const overlay = new ImageOverlay(url, bounds, {\n opacity: 0,\n pane: this.options.pane,\n headers: this.options.headers,\n });\n overlay.addTo(this._map);\n if (this._currentOverlay) {\n this._currentOverlay.cancelLoad();\n }\n overlay.once(\n 'load',\n () => {\n if (!this._map) {\n return;\n }\n // @ts-ignore\n if (overlay._url !== this._currentUrl) {\n this._map.removeLayer(overlay);\n return;\n } else if (this._currentOverlay) {\n this._map.removeLayer(this._currentOverlay);\n }\n this._currentOverlay = overlay;\n overlay.setOpacity(\n this.options.opacity !== undefined ? this.options.opacity : 1,\n );\n if (this.options.isBack === true) {\n overlay.bringToBack();\n }\n if (this.options.isBack === false) {\n overlay.bringToFront();\n }\n if (this.options.zIndex !== undefined) {\n overlay.setZIndex(this.options.zIndex);\n }\n },\n this,\n );\n const { minZoom, maxZoom } = this.options;\n if (\n (minZoom && this._map.getZoom() < minZoom) ||\n (maxZoom && this._map.getZoom() > maxZoom)\n ) {\n this._map.removeLayer(overlay);\n }\n }\n\n setOpacity(opacity: number): void {\n this.options.opacity = opacity;\n if (this._currentOverlay) {\n this._currentOverlay.setOpacity(opacity);\n }\n }\n\n bringToBack(): void {\n this.options.isBack = true;\n if (this._currentOverlay) {\n this._currentOverlay.bringToBack();\n }\n }\n\n bringToFront(): void {\n this.options.isBack = false;\n if (this._currentOverlay) {\n this._currentOverlay.bringToFront();\n }\n }\n\n setZIndex(zIndex: number): void {\n this.options.zIndex = zIndex;\n if (this._currentOverlay) {\n this._currentOverlay.setZIndex(zIndex);\n }\n }\n\n // See L.TileLayer.WMS: onAdd() & getTileUrl()\n updateWmsParams(map?: Map): void {\n if (!map) {\n map = this._map;\n }\n // Compute WMS options\n const viewPortBuffer = this.options.viewPortBuffer || 0;\n const bounds = map.getBounds().pad(viewPortBuffer);\n const size = map.getSize();\n if (this.options.viewPortBuffer !== 0) {\n const factor = viewPortBuffer + 1;\n size.x = Math.ceil(size.x * factor);\n size.y = Math.ceil(size.y * factor);\n }\n const wmsVersion = parseFloat(this.wmsParams.version);\n const crs = this.options.crs || map.options.crs;\n const projectionKey = wmsVersion >= 1.3 ? 'crs' : 'srs';\n if (crs) {\n const nw = crs.project(bounds.getNorthWest());\n const se = crs.project(bounds.getSouthEast());\n\n // Assemble WMS parameter string\n const params: any = {\n width: size.x,\n height: size.y,\n };\n params[projectionKey] = crs.code;\n params.bbox = (\n wmsVersion >= 1.3 && crs === CRS.EPSG4326\n ? [se.y, nw.x, nw.y, se.x]\n : [nw.x, se.y, se.x, nw.y]\n ).join(',');\n\n Util.extend(this.wmsParams, params);\n }\n }\n\n getImageUrl(): string {\n const uppercase = this.options.uppercase || false;\n const pstr = Util.getParamString(this.wmsParams, this._url, uppercase);\n return this._url + pstr;\n }\n}\n","import { MainLayerAdapter } from '@nextgis/webmap';\nimport { ImageLayer } from './ImageLayer';\nimport { BaseAdapter } from '../BaseAdapter';\n\nimport type { Map } from 'leaflet';\nimport type { ImageAdapterOptions } from '@nextgis/webmap';\n\nexport class ImageAdapter\n extends BaseAdapter<ImageAdapterOptions>\n implements MainLayerAdapter<Map>\n{\n layer: any;\n\n addLayer(options: ImageAdapterOptions): any {\n const url = options && options.url;\n if (url) {\n options = { transparent: true, ...options };\n const updateWmsParamsFromOpt = options.updateWmsParams;\n this.layer = new ImageLayer(url, {\n pane: this.pane,\n headers: options.headers,\n setViewDelay: options.setViewDelay,\n /**\n * TODO: safe remove, use only options.nativeOptions\n */\n ...options,\n ...options.params,\n ...options.nativeOptions,\n });\n if (updateWmsParamsFromOpt) {\n const updateWmsParams = this.layer.updateWmsParams;\n this.layer.updateWmsParams = function (map: Map) {\n updateWmsParams.call(this, map);\n this.wmsParams = updateWmsParamsFromOpt(this.wmsParams);\n };\n }\n return this.layer;\n }\n }\n}\n","// based on https://github.com/bvaughn/debounce-decorator\n\nexport function debounce<T extends (...args: any[]) => void>(\n cb: T,\n wait = 10,\n): T & { clear: () => void } {\n let timeoutId: any;\n\n function wrapper(this: any, ...args: any[]) {\n wrapper.clear();\n\n timeoutId = setTimeout(() => {\n timeoutId = null;\n cb.apply(this, args);\n }, wait);\n }\n\n wrapper.clear = function () {\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n };\n\n return wrapper as T & { clear: () => void };\n}\n\nexport function DebounceDecorator(wait = 10) {\n return function (\n target: unknown,\n key: string,\n descriptor: PropertyDescriptor,\n ): PropertyDescriptor {\n return {\n configurable: true,\n enumerable: descriptor.enumerable,\n get: function getter() {\n // Attach this function to the instance (not the class)\n Object.defineProperty(this, key, {\n configurable: true,\n enumerable: descriptor.enumerable,\n value: debounce(descriptor.value, wait),\n });\n // @ts-ignore\n return this[key];\n },\n };\n };\n}\n","import { DomUtil, GridLayer, Util } from 'leaflet';\nimport { debounce } from '../../../utils/src';\nimport { callAjax } from './callAjax';\n\n// import type { TileLayerOptionsExtended } from './TileAdapter/TileLayer';\n\ntype Constructor = new (...args: any[]) => any;\n\nexport function makeRemote<\n TBase extends Constructor,\n // O extends TileLayerOptionsExtended = TileLayerOptionsExtended\n>(Base: TBase): TBase {\n return class RemoteTileLayer extends Base {\n constructor(...args: any[]) {\n super(...args);\n if (this.options.setViewDelay) {\n // @ts-ignore\n this._update = debounce((...a: any[]) => {\n // @ts-ignore\n GridLayer.prototype._update.call(this, ...a);\n }, this.options.setViewDelay);\n }\n }\n\n createTile(\n coords: Record<string, unknown>,\n done: (error: any, tile: HTMLImageElement) => void,\n ): HTMLImageElement {\n // @ts-ignore\n const url = this.getTileUrl(coords);\n\n const tile = document.createElement('img');\n (tile as any).abort = callAjax(\n url,\n (response) => {\n tile.src = response;\n done(null, tile);\n },\n // @ts-ignore\n this.options.headers,\n );\n\n if (this.options.crossOrigin || this.options.crossOrigin === '') {\n tile.crossOrigin =\n this.options.crossOrigin === true ? '' : this.options.crossOrigin;\n }\n\n tile.alt = '';\n tile.setAttribute('role', 'presentation');\n\n return tile;\n }\n\n _abortLoading() {\n // @ts-ignore\n const tiles = this._tiles;\n // @ts-ignore\n const tileZoom = this._tileZoom;\n for (const i in tiles) {\n if (tiles[i].coords.z !== tileZoom) {\n const tile = tiles[i].el;\n\n tile.onload = Util.falseFn;\n tile.onerror = Util.falseFn;\n if (!tile.complete) {\n if (tile.abort) {\n tile.abort();\n }\n tile.src = Util.emptyImageUrl;\n DomUtil.remove(tile);\n delete tiles[i];\n }\n }\n }\n }\n };\n}\n","import { TileLayer as TL } from 'leaflet';\nimport { makeRemote } from '../../utils/makeRemoteTileLayer';\n\nimport type { TileLayerOptions } from 'leaflet';\n\nexport type TileLayerOptionsExtended = TileLayerOptions & {\n headers: Record<string, any>;\n setViewDelay?: number;\n};\n\nclass TileLayerBase extends TL {\n constructor(urlTemplate: string, options?: TileLayerOptionsExtended) {\n super(urlTemplate, options);\n Object.assign(this.options, options);\n }\n}\n\nexport const TileLayer = makeRemote(TileLayerBase);\n","import { TileLayer } from 'leaflet';\nimport { TileLayer as TL } from './TileLayer';\nimport { BaseAdapter } from '../BaseAdapter';\n\nimport type { MainLayerAdapter, TileAdapterOptions } from '@nextgis/webmap';\nimport type { TileLayerOptions } from 'leaflet';\n\nexport class TileAdapter\n extends BaseAdapter<TileAdapterOptions, TileLayer>\n implements MainLayerAdapter\n{\n addLayer(options: TileAdapterOptions): TileLayer | undefined {\n this.options = Object.assign(this.options, options);\n if (options) {\n const { url, ...opt } = options;\n if (url) {\n const tileLayerOptions: TileLayerOptions = {\n pane: this.pane,\n attribution: opt.attribution,\n minZoom: opt.minZoom,\n maxZoom: opt.maxZoom,\n\n ...opt.nativeOptions,\n };\n if (opt.subdomains) {\n tileLayerOptions.subdomains = opt.subdomains;\n }\n let layer;\n if (opt.headers) {\n layer = new TL(url, {\n ...tileLayerOptions,\n headers: opt.headers,\n setViewDelay: opt.setViewDelay,\n });\n } else {\n layer = new TileLayer(url, tileLayerOptions);\n }\n return layer;\n }\n }\n }\n}\n","import { TileLayer } from 'leaflet';\nimport { makeRemote } from '../../utils/makeRemoteTileLayer';\nimport type { WMSOptions } from 'leaflet';\n\ntype LayerOptions = WMSOptions & { headers: any };\n\nclass WmsLayerBase extends TileLayer.WMS {\n constructor(urlTemplate: string, options: LayerOptions) {\n super(urlTemplate, options);\n }\n}\n\nexport const WmsLayer = makeRemote(WmsLayerBase);\n","import { TileLayer } from 'leaflet';\nimport { WmsLayer as WMS } from './WmsLayer';\nimport { BaseAdapter } from '../BaseAdapter';\n\nimport type { MainLayerAdapter, WmsAdapterOptions } from '@nextgis/webmap';\nimport type { WMSOptions } from 'leaflet';\n\nexport class WmsAdapter\n extends BaseAdapter<WmsAdapterOptions, TileLayer.WMS>\n implements MainLayerAdapter\n{\n addLayer(options: WmsAdapterOptions): TileLayer.WMS | undefined {\n Object.assign(this.options, options);\n const { url, ...opt } = options;\n if (url) {\n const layerOptions: WMSOptions = {\n pane: this.pane,\n attribution: opt.attribution,\n minZoom: opt.minZoom,\n maxZoom: opt.maxZoom,\n layers: options.layers,\n format: options.format,\n ...options.nativeOptions,\n };\n let layer;\n if (opt.headers) {\n layer = new WMS(url, { ...layerOptions, headers: opt.headers });\n } else {\n layer = new TileLayer.WMS(url, layerOptions);\n }\n return layer;\n }\n }\n}\n","import { MainLayerAdapter, TileAdapterOptions } from '@nextgis/webmap';\nimport { TileLayer } from 'leaflet';\n\nimport { TileAdapter } from './TileAdapter/TileAdapter';\n\nexport class OsmAdapter extends TileAdapter implements MainLayerAdapter {\n addLayer(options: Omit<TileAdapterOptions, 'url'>): TileLayer | undefined {\n const url = 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png';\n return super.addLayer({\n name: 'OpenStreetMap',\n attribution:\n '© <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors',\n ...options,\n url,\n });\n }\n}\n","import type { LatLngBoundsExpression } from 'leaflet';\nimport type { LngLatBoundsArray } from '@nextgis/utils';\n\nexport function arrayToBoundsExpression(\n bounds: LngLatBoundsArray,\n): LatLngBoundsExpression {\n const e = bounds;\n // top, left, bottom, right\n return [\n [e[3], e[0]],\n [e[1], e[2]],\n ];\n}\n","import { EventEmitter } from 'events';\nimport {\n Map,\n Control,\n FitBoundsOptions,\n LatLngBoundsExpression,\n} from 'leaflet';\nimport { convertMapClickEvent } from './utils/convertMapClickEvent';\nimport { createButtonControl } from './controls/createButtonControl';\nimport { AttributionControl } from './controls/Attribution';\nimport { createControl } from './controls/createControl';\nimport { GeoJsonAdapter } from './layer-adapters/GeoJsonAdapter';\nimport { ImageAdapter } from './layer-adapters/ImageAdapter/ImageAdapter';\nimport { TileAdapter } from './layer-adapters/TileAdapter/TileAdapter';\nimport { WmsAdapter } from './layer-adapters/WmsAdapter/WmsAdapter';\nimport { OsmAdapter } from './layer-adapters/OsmAdapter';\n\nimport type {\n Layer,\n GridLayer,\n LeafletEvent,\n LocationEvent,\n ControlPosition,\n LeafletMouseEvent,\n} from 'leaflet';\nimport type { LngLatBoundsArray, LngLatArray } from '@nextgis/utils';\nimport type {\n CreateControlOptions,\n ButtonControlOptions,\n LocationEvents,\n LocateOptions,\n MainMapEvents,\n LayerAdapter,\n ViewOptions,\n MapAdapter,\n MapOptions,\n FitOptions,\n MapControl,\n Locate,\n} from '@nextgis/webmap';\nimport { arrayToBoundsExpression } from './utils/arrayToBoundsExpression';\n\nexport type Type<T> = new (...args: any[]) => T;\nexport type UnselectCb = () => void;\nexport type UnselectDef = UnselectCb;\nexport class LeafletMapAdapter implements MapAdapter<Map, any, Control> {\n static layerAdapters: {\n [name: string]: Type<LayerAdapter<Map, any, any>>;\n } = {\n GEOJSON: GeoJsonAdapter,\n IMAGE: ImageAdapter,\n TILE: TileAdapter,\n WMS: WmsAdapter,\n // // MVT: MvtAdapter,\n OSM: OsmAdapter,\n };\n\n static controlAdapters = {\n ZOOM: Control.Zoom,\n ATTRIBUTION: AttributionControl,\n };\n\n static Map = Map;\n\n options: MapOptions<Map> = { target: 'map' };\n\n layerAdapters = LeafletMapAdapter.layerAdapters;\n controlAdapters = LeafletMapAdapter.controlAdapters;\n emitter = new EventEmitter();\n map?: Map;\n\n private _resizeObserver?: ResizeObserver;\n private _unselectCb: UnselectDef[] = [];\n private _universalEvents: (keyof MainMapEvents)[] = [\n 'move',\n 'zoom',\n 'zoomend',\n 'zoomstart',\n 'moveend',\n 'movestart',\n ];\n private _positionEvents: (keyof MainMapEvents)[] = [\n 'mousemove',\n 'mouseout',\n 'mouseover',\n ];\n\n create(options: MapOptions<Map>): void {\n this.options = { ...options };\n if (this.options.target) {\n const {\n zoom,\n center,\n maxZoom,\n minZoom,\n maxBounds: mb,\n mapAdapterOptions,\n } = this.options;\n\n this.map =\n this.options.map ||\n new Map(this.options.target, {\n attributionControl: false,\n zoomControl: false,\n maxBounds: mb ? arrayToBoundsExpression(mb) : undefined,\n maxZoom,\n minZoom,\n center: center && [center[1], center[0]],\n zoom,\n ...mapAdapterOptions,\n });\n // create default pane\n const defPane = this.map.createPane('order-0');\n (this.map as any)._addUnselectCb = (def: UnselectDef) => {\n this._addUnselectCb(def);\n };\n defPane.style.zIndex = String(0);\n this.emitter.emit('create', this);\n this._addMapListeners();\n }\n }\n\n destroy(): void {\n if (this.map) {\n this.map.remove();\n }\n this._stopWatchSizeChangeToUpdateMinZoom();\n }\n\n getContainer(): HTMLElement | undefined {\n return this.map && this.map.getContainer();\n }\n\n getControlContainer(): HTMLElement {\n const controlContainer = this.map && (this.map as any)._controlContainer;\n if (controlContainer) {\n return controlContainer;\n }\n throw new Error('Leaflet Map is not initialized yet');\n }\n\n setCursor(cursor: string): void {\n if (this.map) {\n this.map.getContainer().style.cursor = cursor;\n }\n }\n\n setView(lngLat: LngLatArray, zoom?: number): void;\n setView(options: ViewOptions): void;\n setView(lngLatOrOpt: LngLatArray | ViewOptions, zoom?: number): void {\n const map = this.map;\n if (!map) return;\n if (Array.isArray(lngLatOrOpt)) {\n const lngLat = lngLatOrOpt;\n const [lng, lat] = lngLat;\n if (this.map) {\n if (typeof zoom === 'number') {\n this.map.setView([lat, lng], zoom, { animate: false });\n } else {\n this.setCenter([lng, lat]);\n }\n }\n } else {\n const { zoom, center, maxBounds, bounds, minZoom, maxZoom } = lngLatOrOpt;\n if (center && zoom !== undefined) {\n this.setView(center, zoom);\n } else {\n if (zoom !== undefined) {\n this.setZoom(zoom);\n }\n if (center) {\n this.setCenter(center);\n }\n }\n if (bounds) {\n this.fitBounds(bounds);\n }\n if (maxBounds !== undefined) {\n if (maxBounds) {\n const b = arrayToBoundsExpression(maxBounds);\n map.setMaxBounds(b);\n map.setMinZoom(map.getBoundsZoom(b));\n this._watchSizeChangeToUpdateMinZoom(b);\n } else {\n // @ts-ignore `null` works for unset maxBounds, but not in typing\n map.setMaxBounds(null);\n this._stopWatchSizeChangeToUpdateMinZoom();\n }\n }\n if (maxZoom !== undefined) {\n map.setMaxZoom(maxZoom);\n }\n if (minZoom !== undefined) {\n this._stopWatchSizeChangeToUpdateMinZoom();\n map.setMinZoom(minZoom);\n }\n }\n }\n\n setCenter(lngLat: LngLatArray): void {\n const [lng, lat] = lngLat;\n if (this.map) {\n this.map.panTo([lat, lng]);\n }\n }\n\n getCenter(): LngLatArray | undefined {\n const map = this.map;\n if (map) {\n const bounds = map.getBounds();\n const center = bounds.getCenter();\n return [center.lng, center.lat];\n }\n }\n\n setZoom(zoom: number): void {\n if (this.map) {\n this.map.setZoom(zoom);\n }\n }\n\n getZoom(): number | undefined {\n return (this.map && this.map.getZoom()) || undefined;\n }\n\n getBounds(): LngLatBoundsArray | undefined {\n if (!this.map) return undefined;\n const b = this.map.getBounds();\n const sw = b.getSouthWest();\n const ne = b.getNorthEast();\n return [sw.lng, sw.lat, ne.lng, ne.lat];\n }\n\n // [west, south, east, north]\n fitBounds(bounds: LngLatBoundsArray, options: FitOptions = {}): void {\n if (this.map) {\n const { maxZoom, offset, padding } = options;\n const opt: FitBoundsOptions = {};\n if (maxZoom) {\n opt.maxZoom = maxZoom;\n }\n if (padding) {\n opt.padding = [padding, padding];\n }\n if (offset) {\n opt.padding = offset;\n }\n\n this.map.fitBounds(arrayToBoundsExpression(bounds), opt);\n }\n }\n\n getLayerAdapter(name: string): Type<LayerAdapter<Map, any, any>> {\n return LeafletMapAdapter.layerAdapters[name];\n }\n\n createControl(control: MapControl, options: CreateControlOptions): Control {\n return createControl(control, options, this);\n }\n\n createButtonControl(options: ButtonControlOptions): Control {\n return createButtonControl(options, this);\n }\n\n addControl(control: Control, position: string): Control | undefined {\n control.options.position = position.replace('-', '') as ControlPosition;\n if (this.map) {\n this.map.addControl(control);\n return control;\n }\n }\n\n removeControl(control: Control): void {\n if (this.map) {\n this.map.removeControl(control);\n }\n }\n\n removeLayer(layer: Layer): void {\n layer && layer.remove && layer.remove();\n }\n\n showLayer(layer: Layer): void {\n if (this.map) {\n layer.addTo(this.map);\n }\n }\n\n hideLayer(layer: Layer): void {\n layer.remove();\n }\n\n setLayerOpacity(layer: GridLayer | Layer, value: number): void {\n if ('setOpacity' in layer) {\n layer.setOpacity(value);\n }\n }\n\n setLayerOrder(\n layer: Layer,\n order: number,\n layers: { [x: string]: LayerAdapter },\n ): void {\n //\n }\n\n onMapClick(evt: LeafletMouseEvent): void {\n const converted = convertMapClickEvent(evt);\n this.emitter.emit('preclick', converted);\n this.emitter.emit('click', converted);\n }\n\n locate(opt: LocateOptions, events?: LocationEvents): Locate {\n const map = this.map;\n if (map) {\n map.locate(opt);\n if (events) {\n const { locationfound, locationerror } = events;\n const locationFound = (e: LeafletEvent) => {\n const event = e as LocationEvent;\n const lngLat: [number, number] = [event.latlng.lng, event.latlng.lat];\n locationfound({ lngLat });\n };\n if (locationfound !== undefined) {\n map.on('locationfound', locationFound, this);\n }\n if (locationerror) {\n map.on('locationerror', locationerror, this);\n }\n const stop = () => {\n if (locationfound !== undefined) {\n map.off('locationfound', locationFound);\n }\n if (locationerror) {\n map.off('locationerror', locationerror);\n }\n };\n return { stop };\n }\n }\n const stop = () => void 'fake function';\n return { stop };\n }\n\n private _addUnselectCb(cb: UnselectDef) {\n for (const p of this._unselectCb) {\n p();\n }\n this._unselectCb.length = 0;\n this._unselectCb.push(cb);\n }\n\n private _watchSizeChangeToUpdateMinZoom(bounds: LatLngBoundsExpression) {\n this._stopWatchSizeChangeToUpdateMinZoom();\n const container = this.getContainer();\n const map = this.map;\n if (container && map && window.ResizeObserver) {\n this._resizeObserver = new ResizeObserver(() => {\n map.setMinZoom(map.getBoundsZoom(bounds));\n });\n this._resizeObserver.observe(container);\n }\n }\n\n private _stopWatchSizeChangeToUpdateMinZoom() {\n const map = this.map;\n if (map) {\n map.setMinZoom(0);\n }\n if (this._resizeObserver) {\n this._resizeObserver.disconnect();\n this._resizeObserver = undefined;\n }\n }\n\n private _addMapListeners() {\n const map = this.map;\n if (map) {\n map.on('click', (evt) => {\n this.onMapClick(evt as LeafletMouseEvent);\n });\n for (const e of this._universalEvents) {\n map.on(e, () => this.emitter.emit(e, this), map);\n }\n\n for (const e of this._positionEvents) {\n map.on(\n e,\n (evt) =>\n this.emitter.emit(\n e,\n convertMapClickEvent(evt as LeafletMouseEvent),\n ),\n map,\n );\n }\n }\n }\n}\n","import { ButtonControlOptions, MapAdapter } from '@nextgis/webmap';\nimport { createControl } from './createControl';\nimport { DomEvent, Control } from 'leaflet';\n\nexport function createButtonControl(\n options: ButtonControlOptions,\n map: MapAdapter,\n): Control {\n const link = document.createElement('a');\n\n const title = options.title || '';\n link.href = '#';\n link.title = title;\n\n link.setAttribute('role', 'button');\n link.setAttribute('aria-label', title);\n\n if (options.addClass) {\n link.classList.add(options.addClass);\n }\n\n DomEvent.disableClickPropagation(link);\n DomEvent.on(link, 'click', DomEvent.stop);\n\n if (options.html instanceof HTMLElement) {\n link.appendChild(options.html);\n } else if (typeof options.html === 'string') {\n link.innerHTML = options.html;\n }\n\n const onClick = (e: Event) => {\n e.stopPropagation();\n options.onClick();\n };\n\n return createControl(\n {\n onAdd() {\n if (options.onClick !== undefined) {\n link.addEventListener('click', onClick);\n }\n return link;\n },\n onRemove() {\n const parent = link.parentNode;\n if (parent) {\n parent.removeChild(link);\n }\n if (options.onClick !== undefined) {\n link.removeEventListener('click', onClick);\n }\n },\n },\n { bar: true },\n map,\n );\n}\n"],"names":["convertMapClickEvent","evt","coord","containerPoint","latLng","latlng","lngLat","pixel","left","x","top","y","source","createControl","control","options","map","Control","extend","onAdd","element","document","createElement","content","classList","add","bar","addClass","margin","style","marginBottom","marginTop","marginLeft","marginRight","appendChild","DomEvent","disableClickPropagation","onRemove","_super","customAttribution","attributions","Array","isArray","forEach","_this","addAttribution","__extends","Attribution","boundsToArray","bounds","ne","getNorthEast","sw","getSouthWest","lng","lat","typeAlias","Point","LineString","MultiPoint","Polygon","MultiLineString","MultiPolygon","GeometryCollection","PAINT","stroke","opacity","backAliases","a","layerType","backAlias","push","geometryFilter","geometry","type","indexOf","featuresBounds","features","geoJsonLayer","GeoJSON","f","addData","getBounds","createFeaturePositionOptions","getFeaturesBounds","getCenter","_a","getFeaturesCenter","findMostFrequentGeomType","arr","counts","fry","length","maxName","c","this","undefined","order","pane","exist","getPane","createPane","zIndex","String","Math","round","BaseAdapter","Object","assign","debounce","updateTooltip","unselect","GeoJsonAdapter","paint","layer","FeatureGroup","nativeOptions","selectedPaint","data","_addMapListener","_removeMapListener","findFeatureFun","_layers","filter","_selectLayer","selected","_setPaintEachLayer","_unSelectLayer","_openedPopup","_i","_removePopup","_selectedLayers","target","feature","_filteredLayers","fun","_filterFun","layer_","_map","remove","filteredLayers_1","addLayer","removeLayer","addTo","visible","cb","def","splice","clearLayers","clearLayer","geoJsonOptions","detectedType","geojson","geometries","g","detectType","console","warn","_data","filterGeometries","_getGeoJsonOptions","_openPopup","layerDef","_updateTooltip","getLayers","isValid","value","setPaint","setSelectedPaint","_setPaint","__assign","properties","labelField","unbindTooltip","message","permanent","labelOnHover","bindTooltip","sticky","_c","minWidth","autoPan","maxWidth","closeButton","closeButton_","selectOnHover","_closeHandlers","onClose","handler","close","popup","createPopupContent","_d","popupContent","popupOptions","closeOnClick","autoClose","defined","bindPopup","unselectOnClose","p","getPopup","once","openPopup","closePopup","unbindPopup","index","findIndex","closeHandlers","closeHandlers_1","h","l","isPaintCallback","isPaint","marker","divIcon","_createDivIcon","setIcon","setStyle","_preparePaint","aliases","readyPaint","radius","aliases_1","to","from","paintProp","toLowerCase","Number","defineProperty","enumerable","lopt","pointToLayer","iconOpt","_createPaintToLayer","_createPaintOptions","onEachFeature","_onEachFeature","def_1","ok","popup_1","popupOptions_1","selectable","interactive","on","e","_selectOnLayerClick","_handleMouseEvents","setTimeout","onMouseOut","onMouseOver","onClick_","_getSelected","_createMouseEvent","event","createMouseEvent","find","stopPropagation","isSelected","unselectOnSecondClick","_addUnselectCb","multiselect","popupOnSelect","onSelect","icon","toLIconOpt","DivIcon","className","html","geoJsonPoint","Marker","CircleMarker","paintOptions","unselectOnClick","$unselect","$updateTooltip","off","callAjax","src","callback","headers","xhr","XMLHttpRequest","open","responseType","setRequestHeader","onload","arrayBufferView","Uint8Array","response","blob","Blob","imageUrl","window","URL","webkitURL","createObjectURL","send","abort","ImageOverlay","_abort","_initImage","img_1","_image","LImageOverlay","url","service","request","version","layers","styles","format","transparent","crs","uppercase","attribution","isBack","minZoom","viewPortBuffer","setViewDelay","_url","opt","params","opts","Util","setOptions","wmsParams","defaultWmsParams","ImageLayer","update","_currentOverlay","cancelLoad","_currentUrl","moveend","updateWmsParams","getImageUrl","pad","overlay","setOpacity","bringToBack","bringToFront","setZIndex","maxZoom","getZoom","size","getSize","factor","ceil","wmsVersion","parseFloat","projectionKey","nw","project","getNorthWest","se","getSouthEast","width","height","code","bbox","CRS","EPSG4326","join","pstr","getParamString","Layer","ImageAdapter","updateWmsParamsFromOpt_1","updateWmsParams_1","call","wait","timeoutId","wrapper","args","clear","apply","clearTimeout","makeRemote","Base","_update","GridLayer","prototype","RemoteTileLayer","coords","done","getTileUrl","tile","crossOrigin","alt","setAttribute","tiles","_tiles","tileZoom","_tileZoom","i","z","el","falseFn","onerror","complete","emptyImageUrl","DomUtil","TileLayer","urlTemplate","TL","TileAdapter","tileLayerOptions","subdomains","WmsLayer","WMS","WmsAdapter","layerOptions","OsmAdapter","name","arrayToBoundsExpression","LeafletMapAdapter","layerAdapters","controlAdapters","EventEmitter","zoom","center","mb","mapAdapterOptions","Map","attributionControl","zoomControl","maxBounds","defPane","emitter","emit","_addMapListeners","_stopWatchSizeChangeToUpdateMinZoom","getContainer","controlContainer","_controlContainer","Error","cursor","lngLatOrOpt","setView","animate","setCenter","zoom_1","setZoom","fitBounds","b","setMaxBounds","setMinZoom","getBoundsZoom","_watchSizeChangeToUpdateMinZoom","setMaxZoom","panTo","offset","padding","link","title","href","stop","HTMLElement","innerHTML","onClick","addEventListener","parent","parentNode","removeChild","removeEventListener","createButtonControl","position","replace","addControl","removeControl","converted","events","locate","locationfound_1","locationerror_1","locationFound_1","_unselectCb","container","ResizeObserver","_resizeObserver","observe","disconnect","onMapClick","_universalEvents","_positionEvents","_b","GEOJSON","IMAGE","TILE","OSM","ZOOM","Zoom","ATTRIBUTION","AttributionControl"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"leaflet-map-adapter.esm-bundler.prod.js","sources":["../src/utils/convertMapClickEvent.ts","../src/controls/createControl.ts","../src/controls/Attribution.ts","../src/utils/boundsToArray.ts","../src/utils/geometries.ts","../src/utils/detectType.ts","../src/layer-adapters/BaseAdapter.ts","../src/layer-adapters/GeoJsonAdapter.ts","../src/utils/createMouseEvent.ts","../src/utils/callAjax.ts","../src/layer-adapters/ImageAdapter/ImageOverlay.ts","../src/layer-adapters/ImageAdapter/ImageLayer.ts","../src/layer-adapters/ImageAdapter/ImageAdapter.ts","../../utils/src/debounce.ts","../src/utils/makeRemoteTileLayer.ts","../src/layer-adapters/TileAdapter/TileLayer.ts","../src/layer-adapters/TileAdapter/TileAdapter.ts","../src/layer-adapters/WmsAdapter/WmsLayer.ts","../src/layer-adapters/WmsAdapter/WmsAdapter.ts","../src/layer-adapters/OsmAdapter.ts","../src/utils/arrayToBoundsExpression.ts","../src/LeafletMapAdapter.ts","../src/controls/createButtonControl.ts","../src/index.ts"],"sourcesContent":["import type { LeafletMouseEvent } from 'leaflet';\n\nimport type { MapClickEvent } from '@nextgis/webmap';\n\nexport function convertMapClickEvent(evt: LeafletMouseEvent): MapClickEvent {\n const coord = evt.containerPoint;\n const latLng = evt.latlng;\n const { lat, lng } = latLng;\n return {\n latLng,\n lngLat: [lng, lat],\n pixel: { left: coord.x, top: coord.y },\n source: evt,\n };\n}\n","import { Control, DomEvent } from 'leaflet';\nimport type {\n MapControl,\n CreateControlOptions,\n MapAdapter,\n} from '@nextgis/webmap';\n\nexport function createControl(\n control: MapControl,\n options: CreateControlOptions = {},\n map: MapAdapter,\n): Control {\n const C = Control.extend({\n onAdd() {\n const element = document.createElement('div');\n const content = control.onAdd(map);\n element.classList.add('leaflet-control');\n if (options.bar) {\n element.classList.add('leaflet-bar');\n }\n if (options.addClass) {\n element.classList.add(options.addClass);\n }\n if (!options.margin && !options.bar) {\n element.style.marginBottom = '0px';\n element.style.marginTop = '0px';\n element.style.marginLeft = '0px';\n element.style.marginRight = '0px';\n }\n if (content) {\n element.appendChild(content);\n }\n\n DomEvent.disableClickPropagation(element);\n\n return element;\n },\n onRemove() {\n control.onRemove();\n },\n });\n return new C();\n}\n","import { Control, ControlOptions } from 'leaflet';\nimport { AttributionControlOptions } from '@nextgis/webmap';\n\nexport class AttributionControl extends Control.Attribution {\n // options: AttributionControlOptions\n constructor(options: AttributionControlOptions & ControlOptions) {\n super(options);\n const customAttribution = options && options.customAttribution;\n if (customAttribution) {\n let attributions: string[] = [];\n if (Array.isArray(customAttribution)) {\n attributions = customAttribution;\n } else if (customAttribution) {\n attributions = [customAttribution];\n }\n attributions.forEach((x) => this.addAttribution(x));\n }\n }\n}\n","import type { LatLngBounds } from 'leaflet';\nimport type { LngLatBoundsArray } from '@nextgis/utils';\n\nexport function boundsToArray(bounds: LatLngBounds): LngLatBoundsArray {\n const ne = bounds.getNorthEast();\n const sw = bounds.getSouthWest();\n return [sw.lng, sw.lat, ne.lng, ne.lat];\n}\n","import { GeoJSON } from 'leaflet';\nimport { boundsToArray } from './boundsToArray';\n\nimport type {\n Feature,\n GeoJsonObject,\n FeatureCollection,\n GeometryCollection,\n GeoJsonGeometryTypes,\n} from 'geojson';\nimport type { LatLngBounds } from 'leaflet';\nimport type { FeaturePosition, VectorAdapterLayerType } from '@nextgis/webmap';\nimport type { LngLatArray, LngLatBoundsArray } from '@nextgis/utils';\n\nexport const typeAlias: {\n [key in GeoJsonGeometryTypes]: VectorAdapterLayerType;\n} = {\n Point: 'point',\n LineString: 'line',\n MultiPoint: 'point',\n Polygon: 'polygon',\n MultiLineString: 'line',\n MultiPolygon: 'polygon',\n GeometryCollection: 'polygon',\n};\n\nexport const PAINT = {\n stroke: false,\n opacity: 1,\n};\n\nexport const backAliases: {\n [key in VectorAdapterLayerType]?: GeoJsonGeometryTypes[];\n} = {};\n\nfor (const a in typeAlias) {\n const layerType = typeAlias[a as GeoJsonGeometryTypes];\n const backAlias = backAliases[layerType] || [];\n backAlias.push(a as GeoJsonGeometryTypes);\n backAliases[layerType] = backAlias;\n}\n\nexport function geometryFilter(\n geometry: GeoJsonGeometryTypes,\n type: VectorAdapterLayerType,\n): boolean {\n const geoJsonGeometry = backAliases[type] || [];\n return geoJsonGeometry.indexOf(geometry) !== -1;\n}\n\nexport function filterGeometries(\n data: GeoJsonObject,\n type: VectorAdapterLayerType,\n): GeoJsonObject | false {\n if (data.type === 'FeatureCollection') {\n const _data = data as FeatureCollection;\n _data.features = _data.features.filter((f) =>\n geometryFilter(f.geometry.type, type),\n );\n } else if (data.type === 'Feature') {\n const allow = geometryFilter((data as Feature).geometry.type, type);\n if (!allow) {\n return false;\n }\n } else if (data.type === 'GeometryCollection') {\n const _data = data as GeometryCollection;\n _data.geometries = _data.geometries.filter((g) =>\n geometryFilter(g.type, type),\n );\n }\n return data;\n}\n\nfunction featuresBounds(features: Feature | Feature[]): LatLngBounds {\n const geoJsonLayer = new GeoJSON();\n const features_ = Array.isArray(features) ? features : [features];\n features_.forEach((f) => geoJsonLayer.addData(f));\n return geoJsonLayer.getBounds();\n}\n\nexport function getFeaturesBounds(\n features: Feature | Feature[],\n): LngLatBoundsArray {\n return boundsToArray(featuresBounds(features));\n}\n\nexport function getFeaturesCenter(features: Feature | Feature[]): LngLatArray {\n const { lat, lng } = featuresBounds(features).getCenter();\n return [lng, lat];\n}\n\nexport function createFeaturePositionOptions(\n features: Feature | Feature[],\n): FeaturePosition {\n return {\n getBounds: () => getFeaturesBounds(features),\n getCenter: () => getFeaturesCenter(features),\n };\n}\n","import type {\n GeoJsonObject,\n GeoJsonGeometryTypes,\n FeatureCollection,\n Feature,\n GeometryCollection,\n} from 'geojson';\n\nfunction findMostFrequentGeomType(\n arr: GeoJsonGeometryTypes[],\n): GeoJsonGeometryTypes {\n const counts: { [x: string]: number } = {};\n for (let fry = 0; fry < arr.length; fry++) {\n counts[arr[fry]] = 1 + (counts[arr[fry]] || 0);\n }\n let maxName = '';\n for (const c in counts) {\n const maxCount = maxName ? counts[maxName] : 0;\n if (counts[c] > maxCount) {\n maxName = c;\n }\n }\n return maxName as GeoJsonGeometryTypes;\n}\n\nexport function detectType(geojson: GeoJsonObject): GeoJsonGeometryTypes {\n let geometry: GeoJsonGeometryTypes;\n if (geojson.type === 'FeatureCollection') {\n const featuresTypes = (geojson as FeatureCollection).features.map(\n (f) => f.geometry.type,\n );\n geometry = findMostFrequentGeomType(featuresTypes);\n } else if (geojson.type === 'GeometryCollection') {\n const geometryTypes = (geojson as GeometryCollection).geometries.map(\n (g) => g.type,\n );\n geometry = findMostFrequentGeomType(geometryTypes);\n } else if (geojson.type === 'Feature') {\n geometry = (geojson as Feature).geometry.type;\n } else {\n geometry = geojson.type;\n }\n return geometry;\n}\n","import type { MainLayerAdapter, AdapterOptions } from '@nextgis/webmap';\nimport type { Map } from 'leaflet';\n\nexport class BaseAdapter<O extends AdapterOptions = AdapterOptions, L = any>\n implements MainLayerAdapter<Map, L, O>\n{\n layer?: L;\n protected pane = 'order-0';\n\n constructor(public map: Map, public options: O) {\n if (options.order !== undefined) {\n const pane = 'order-' + options.order;\n let exist = map.getPane(pane);\n if (!exist) {\n exist = map.createPane(pane);\n }\n exist.style.zIndex = String(Math.round(options.order * 100));\n this.pane = pane;\n }\n }\n\n addLayer(options: O): L | Promise<L> | undefined {\n Object.assign(this.options, options);\n return undefined;\n }\n}\n","import {\n CircleMarker,\n FeatureGroup,\n DomEvent,\n GeoJSON,\n DivIcon,\n Marker,\n Layer,\n} from 'leaflet';\nimport { debounce, defined } from '@nextgis/utils';\n\nimport { isPaintCallback, isPaint } from '@nextgis/paint';\nimport {\n PAINT,\n typeAlias,\n filterGeometries,\n createFeaturePositionOptions,\n} from '../utils/geometries';\nimport { createMouseEvent } from '../utils/createMouseEvent';\nimport { boundsToArray } from '../utils/boundsToArray';\nimport { detectType } from '../utils/detectType';\nimport { BaseAdapter } from './BaseAdapter';\n\nimport type { GeoJsonObject, Feature, Point } from 'geojson';\nimport type {\n PopupOptions as LPopupOptions,\n CircleMarkerOptions,\n LeafletMouseEvent,\n LatLngExpression,\n GeoJSONOptions,\n LeafletEvent,\n PathOptions,\n LatLng,\n Path,\n Map,\n} from 'leaflet';\nimport type {\n Paint,\n IconPaint,\n PathPaint,\n VectorAdapterLayerPaint,\n} from '@nextgis/paint';\nimport type { LngLatBoundsArray } from '@nextgis/utils';\nimport type {\n VectorAdapterLayerType,\n GeoJsonAdapterOptions,\n PopupOnCloseFunction,\n OnLayerMouseOptions,\n VectorLayerAdapter,\n OnLayerSelectType,\n LayerDefinition,\n DataLayerFilter,\n PopupOptions,\n} from '@nextgis/webmap';\n\nexport type LayerDef = LayerDefinition<Feature, Layer>;\n\nexport class GeoJsonAdapter\n extends BaseAdapter<GeoJsonAdapterOptions>\n implements VectorLayerAdapter<Map>\n{\n layer?: FeatureGroup;\n selected = false;\n\n private paint?: Paint;\n private selectedPaint?: Paint;\n private type?: VectorAdapterLayerType;\n\n private _layers: LayerDef[] = [];\n private _selectedLayers: LayerDef[] = [];\n private _filteredLayers: LayerDef[] = [];\n private _filterFun?: DataLayerFilter<Feature>;\n private _openedPopup: [Layer, PopupOnCloseFunction[], LayerDef][] = [];\n\n private $updateTooltip = debounce(() => {\n this.updateTooltip();\n }, 300);\n\n constructor(map: Map, options: GeoJsonAdapterOptions) {\n super(map, options);\n }\n\n addLayer(options: GeoJsonAdapterOptions): FeatureGroup<any> | undefined {\n Object.assign(this.options, options);\n this.paint = options.paint;\n this.layer = new FeatureGroup([], {\n ...options.nativeOptions,\n pane: this.pane,\n });\n this.selectedPaint = options.selectedPaint;\n options.paint = this.paint;\n\n if (options.data) {\n this.addData(options.data);\n }\n\n this._addMapListener();\n\n return this.layer;\n }\n\n beforeRemove(): void {\n this._removeMapListener();\n }\n\n select(findFeatureFun?: DataLayerFilter): void {\n if (findFeatureFun) {\n const def = this._layers.filter(findFeatureFun);\n def.forEach((x) => {\n this._selectLayer(x, 'api');\n });\n } else if (!this.selected) {\n this.selected = true;\n if (this.selectedPaint) {\n this._setPaintEachLayer(this.selectedPaint);\n }\n }\n }\n\n unselect(findFeatureFun?: DataLayerFilter): void {\n if (findFeatureFun) {\n const feature = this._layers.filter(findFeatureFun);\n feature.forEach((x) => {\n this._unSelectLayer(x);\n });\n } else if (this.selected) {\n for (const p of this._openedPopup) {\n this._removePopup(p[0]);\n }\n if (this.paint) {\n this._setPaintEachLayer(this.paint);\n }\n this._selectedLayers.length = 0;\n this.selected = false;\n }\n }\n\n getSelected(): LayerDefinition<Feature, LayerDef>[] {\n return this._selectedLayers.map((x) => {\n return {\n target: this,\n feature: x.feature,\n layer: x,\n ...createFeaturePositionOptions(x.feature),\n };\n });\n }\n\n getFiltered(): LayerDef[] {\n return this._filteredLayers;\n }\n\n filter(fun?: DataLayerFilter): LayerDef[] {\n // Some optimization\n this._filterFun = fun;\n const layer_ = this.layer;\n const map = layer_ && (layer_ as any)._map;\n if (layer_ && map) {\n layer_.remove();\n\n const filteredLayers: LayerDef[] = [];\n this._layers.forEach(({ feature, layer }) => {\n if (layer) {\n const ok = fun\n ? fun({\n target: this,\n feature,\n layer,\n ...createFeaturePositionOptions(feature),\n })\n : true;\n if (ok) {\n layer_.addLayer(layer);\n filteredLayers.push({\n target: this,\n feature,\n layer,\n ...createFeaturePositionOptions(feature),\n });\n } else {\n layer_.removeLayer(layer);\n }\n }\n });\n this._filteredLayers = filteredLayers;\n\n layer_.addTo(map);\n }\n return this._filteredLayers;\n }\n\n cleanFilter(): void {\n this.filter();\n }\n\n getLayers(): LayerDef[] {\n return this._layers.map(({ layer, feature }) => {\n const visible = layer && !!(layer as any)._map;\n return {\n feature,\n layer,\n visible,\n target: this,\n ...createFeaturePositionOptions(feature),\n };\n });\n }\n\n clearLayer(cb?: (feature: Feature) => boolean): void {\n this.unselect();\n const layer_ = this.layer;\n if (layer_) {\n if (cb) {\n for (let fry = this._layers.length; fry--; ) {\n const def = this._layers[fry];\n if (def) {\n const { feature, layer } = def;\n if (feature && layer) {\n const exist = cb(feature);\n if (exist) {\n layer_.removeLayer(layer);\n this._layers.splice(fry, 1);\n }\n }\n }\n }\n } else {\n layer_.clearLayers();\n this._layers = [];\n }\n }\n }\n\n setData(data: GeoJsonObject): void {\n this.clearLayer();\n this.addData(data);\n }\n\n addData(data: GeoJsonObject | false): void {\n const options = this.options;\n let geoJsonOptions: GeoJSONOptions | undefined;\n if (options) {\n if (data) {\n let type: VectorAdapterLayerType;\n\n if (!options.type) {\n const detectedType = detectType(data);\n type = typeAlias[detectedType];\n } else {\n type = options.type;\n }\n if (this.type && this.type !== type) {\n console.warn('no other data type than layer can be added');\n return;\n }\n this.type = type;\n\n data = filterGeometries(data, type);\n if (data) {\n geoJsonOptions = this._getGeoJsonOptions(options, type);\n }\n }\n new GeoJSON(data || undefined, geoJsonOptions);\n }\n }\n\n openPopup(findFeatureFun: DataLayerFilter, options?: PopupOptions): void {\n if (findFeatureFun) {\n const def = this._layers.filter(findFeatureFun);\n def.forEach((x) => {\n this._openPopup(x, options, 'api');\n });\n }\n }\n\n closePopup(findFeatureFun?: DataLayerFilter): void {\n const popupToClose = findFeatureFun\n ? this._openedPopup.filter((x) => findFeatureFun(x[2]))\n : this._openedPopup;\n\n popupToClose.forEach((x) => {\n this._removePopup(x[0]);\n });\n }\n\n updateTooltip(layerDef?: LayerDefinition): void {\n if (layerDef) {\n this._updateTooltip(layerDef);\n } else {\n this.getLayers().forEach((x) =>\n this._updateTooltip({ feature: x.feature, layer: x.layer }),\n );\n }\n }\n\n /** @deprecated use {@link GeoJsonAdapter.getBounds} instead */\n getExtent(): LngLatBoundsArray | undefined {\n return this.getBounds();\n }\n\n getBounds(): LngLatBoundsArray | undefined {\n if (this.layer) {\n const bounds = this.layer.getBounds();\n if (bounds.isValid()) {\n return boundsToArray(bounds);\n }\n }\n }\n\n setOpacity(value: number): void {\n this.options.opacity = value;\n this.setPaint(this.paint);\n this.setSelectedPaint(this.selectedPaint);\n }\n\n setPaint(paint?: Paint | null): void {\n if (paint) {\n this.paint = paint;\n for (const l of this._layers) {\n this._setPaint(l, paint);\n }\n }\n }\n setSelectedPaint(paint?: Paint | null): void {\n if (paint) {\n this.selectedPaint = paint;\n for (const l of this._selectedLayers) {\n this._setPaint(l, paint);\n }\n }\n }\n updatePaint(paint: Partial<Paint>): void {\n this.paint = { ...this.paint, ...paint } as Paint;\n for (const l of this._layers) {\n this._setPaint(l, this.paint);\n }\n }\n updateSelectedPaint(paint: Partial<Paint>): void {\n this.selectedPaint = { ...this.selectedPaint, ...paint } as Paint;\n for (const l of this._selectedLayers) {\n this._setPaint(l, this.selectedPaint);\n }\n }\n\n private $unselect = () => {\n this.unselect();\n };\n\n private _updateTooltip(layerDef: Pick<LayerDef, 'feature' | 'layer'>) {\n const { feature, layer } = layerDef;\n if (feature && layer && feature.properties && this.options.labelField) {\n layer.unbindTooltip();\n const message = feature.properties[this.options.labelField];\n if (message !== undefined) {\n const permanent = !this.options.labelOnHover;\n\n layer.bindTooltip(String(message), { permanent, sticky: false });\n }\n }\n }\n\n private async _openPopup(\n def: LayerDef,\n options: PopupOptions = {},\n type: OnLayerSelectType,\n latLng?: LatLngExpression,\n ) {\n const { feature, layer } = def;\n const {\n minWidth,\n autoPan,\n maxWidth,\n closeButton: closeButton_,\n } = {\n minWidth: 300,\n ...options,\n };\n const closeButton = closeButton_ ?? !this.options.selectOnHover;\n let popup: Layer;\n const _closeHandlers: PopupOnCloseFunction[] = [];\n const onClose = (handler: PopupOnCloseFunction) => {\n _closeHandlers.push(handler);\n };\n const close = () => {\n if (popup) {\n this._removePopup(popup);\n }\n };\n let content;\n if (options.createPopupContent) {\n content = await options.createPopupContent({\n layer,\n feature,\n target: this,\n type,\n close,\n onClose,\n ...createFeaturePositionOptions(feature),\n });\n } else {\n content = options.popupContent;\n }\n\n if (content && layer) {\n const popupOptions: LPopupOptions = {\n minWidth,\n autoPan,\n // maxWidth,\n closeButton,\n closeOnClick: false,\n autoClose: false,\n };\n if (defined(maxWidth)) {\n popupOptions.maxWidth = maxWidth;\n }\n popup = layer.bindPopup(content, popupOptions);\n\n const unselectOnClose =\n this.options.popupOptions?.unselectOnClose ?? true;\n if (unselectOnClose) {\n const p = layer.getPopup();\n p &&\n p.once(\n 'remove',\n () => {\n close();\n },\n this,\n );\n }\n this._openedPopup.push([popup, _closeHandlers, def]);\n popup.openPopup(latLng);\n }\n }\n\n private _removePopup(popup: Layer) {\n const map = this.map;\n if (map) {\n popup.closePopup().unbindPopup();\n const index = this._openedPopup.findIndex((x) => x[0] === popup);\n if (index !== -1) {\n const unselectOnClose =\n this.options.popupOptions?.unselectOnClose ?? true;\n const [, closeHandlers, def] = this._openedPopup[index];\n for (const h of closeHandlers) {\n h(def);\n }\n closeHandlers.length = 0;\n if (unselectOnClose) {\n this._unSelectLayer(def);\n }\n this._openedPopup.splice(index, 1);\n }\n }\n }\n\n private _setPaintEachLayer(paint: Paint) {\n this._layers.forEach((l) => {\n this._setPaint(l, paint);\n });\n }\n\n private _setPaint(def: LayerDef, paint: Paint) {\n let style: VectorAdapterLayerPaint | undefined = undefined;\n const { layer, feature } = def;\n if (layer && feature) {\n if (isPaintCallback(paint)) {\n style = paint(feature);\n } else if (isPaint(paint)) {\n style = paint;\n }\n if (style) {\n if (this.type === 'point' && style.type === 'icon') {\n const marker = layer as Marker;\n const divIcon = this._createDivIcon(style);\n marker.setIcon(divIcon);\n } else if ('setStyle' in layer) {\n (layer as Path).setStyle(this._preparePaint(style));\n }\n }\n }\n }\n\n private _preparePaint(paint: VectorAdapterLayerPaint): PathOptions {\n if (paint.type !== 'get-paint') {\n // const path: CircleMarkerOptions | PathOptions = paint as CircleMarkerOptions | PathOptions;\n // if (path.opacity) {\n // path.fillOpacity = path.opacity;\n // }\n\n const paintAliases: [keyof PathOptions, keyof PathPaint][] = [\n // ['color', 'color'],\n ['color', 'strokeColor'],\n ['opacity', 'strokeOpacity'],\n ['stroke', 'stroke'],\n ['fillColor', 'fillColor'],\n ['fillOpacity', 'fillOpacity'],\n ['fill', 'fill'],\n ['weight', 'weight'],\n ];\n const aliases: [keyof PathOptions, keyof PathPaint][] =\n this.type === 'line'\n ? [\n ['color', 'strokeColor'],\n ['opacity', 'strokeOpacity'],\n ['weight', 'weight'],\n ]\n : paintAliases;\n\n const readyPaint: PathOptions & CircleMarkerOptions = {};\n\n if ('radius' in paint && typeof paint.radius === 'number') {\n readyPaint.radius = paint.radius;\n }\n for (const [to, from] of aliases) {\n let paintProp = (paint as PathPaint)[from];\n if (\n defined(this.options.opacity) &&\n from.toLowerCase().indexOf('opacity') !== -1\n ) {\n paintProp = Number(paintProp) * this.options.opacity;\n }\n\n if (paintProp !== undefined) {\n Object.defineProperty(readyPaint, to, {\n enumerable: true,\n value: paintProp,\n });\n }\n }\n\n return readyPaint;\n }\n return PAINT;\n }\n\n private _getGeoJsonOptions(\n options: GeoJsonAdapterOptions,\n type: VectorAdapterLayerType,\n ): GeoJSONOptions {\n const paint = options.paint;\n let lopt: GeoJSONOptions = {};\n\n if (typeof paint === 'function') {\n if (type === 'point') {\n // TODO: fix types (@geoman-io/leaflet-geoman-free)\n (lopt as any).pointToLayer = (\n feature: Feature<Point, any>,\n latLng: LatLng,\n ) => {\n const iconOpt = paint(feature);\n const pointToLayer = this._createPaintToLayer(iconOpt as IconPaint);\n return pointToLayer(feature, latLng);\n };\n } else {\n lopt = {\n style: (feature) => {\n if (feature) {\n return this._preparePaint({ ...PAINT, ...paint(feature) });\n } else {\n return this._preparePaint({ ...PAINT, type: 'path' });\n }\n },\n };\n }\n } else {\n lopt = this._createPaintOptions(paint as VectorAdapterLayerPaint, type);\n }\n\n lopt.onEachFeature = (feature: Feature, layer) => {\n this._onEachFeature(feature, layer);\n };\n\n return lopt;\n }\n\n private _onEachFeature(feature: Feature, layer: Layer) {\n const layer_ = this.layer;\n if (layer_) {\n const def = {\n target: this,\n feature,\n layer,\n ...createFeaturePositionOptions(feature),\n };\n\n // @ts-ignore\n layer.options.pane = this.pane;\n this._layers.push(def);\n let ok = true;\n if (this._filterFun) {\n ok = this._filterFun(def);\n }\n if (ok) {\n const { popup, popupOptions, selectable, interactive, selectOnHover } =\n this.options;\n // @ts-ignore\n layer.options.interactive = defined(interactive) ? interactive : true;\n layer_.addLayer(layer);\n if (selectable) {\n if (selectOnHover) {\n layer.on('mouseover', () => {\n this._selectLayer(def, 'hover');\n });\n layer.on('mouseout', () => {\n this._unSelectLayer(def);\n });\n } else {\n layer.on(\n 'click',\n (e) => this._selectOnLayerClick(e as LeafletMouseEvent),\n this,\n );\n }\n }\n this._handleMouseEvents(layer);\n // The timeout is needed to display the popup immediately when adding a layer to the map.\n // Without a timeout, the layer may not yet have a _map object\n setTimeout(() => {\n if (popup) {\n this._openPopup(\n {\n target: this,\n layer,\n feature,\n ...createFeaturePositionOptions(feature),\n },\n popupOptions,\n 'api',\n );\n }\n this._updateTooltip({ layer, feature });\n });\n }\n }\n }\n\n private _handleMouseEvents(layer: Layer) {\n const { onClick, onLayerClick, onMouseOut, onMouseOver } = this.options;\n // TODO: remove backward compatibility for onLayerClick\n const onClick_ = onClick || onLayerClick;\n if (onClick_) {\n layer.on(\n 'click',\n (e) => {\n const selected = !!this._getSelected(layer);\n onClick_({\n selected,\n ...this._createMouseEvent(e),\n });\n },\n this,\n );\n }\n if (onMouseOut) {\n layer.on(\n 'mouseout',\n (e) => {\n onMouseOut(this._createMouseEvent(e));\n },\n this,\n );\n }\n if (onMouseOver) {\n layer.on(\n 'mouseover',\n (e) => {\n onMouseOver(this._createMouseEvent(e));\n },\n this,\n );\n }\n }\n\n private _createMouseEvent(source: LeafletEvent): OnLayerMouseOptions {\n return createMouseEvent({\n layer: this,\n source: source as LeafletMouseEvent,\n });\n }\n\n private _getSelected(layer: LayerDef['layer']) {\n return this._selectedLayers.find((x) => x.layer === layer);\n }\n\n private _selectOnLayerClick(e: LeafletMouseEvent) {\n DomEvent.stopPropagation(e);\n const layer = e.target as Layer;\n const feature = (layer as any).feature;\n const def: LayerDef = {\n target: this,\n layer,\n feature,\n ...createFeaturePositionOptions(feature),\n };\n const isSelected = this._getSelected(layer);\n if (isSelected) {\n if (this.options && this.options.unselectOnSecondClick) {\n this._unSelectLayer(isSelected);\n }\n } else {\n this._selectLayer(def, 'click', e.latlng);\n }\n }\n\n private _selectLayer(\n def: LayerDef,\n type: OnLayerSelectType,\n latlng?: LatLngExpression,\n ) {\n (this.map as any)._addUnselectCb(() => {\n this._unSelectLayer(def);\n });\n if (this.options && !this.options.multiselect) {\n this._selectedLayers.forEach((x) => this._unSelectLayer(x));\n }\n this._selectedLayers.push(def);\n this.selected = true;\n const { selectedPaint, popupOnSelect, popupOptions } = this.options;\n\n if (selectedPaint && def.layer) {\n this._setPaint(def, selectedPaint);\n }\n if (popupOnSelect) {\n this._openPopup(def, popupOptions, type, latlng);\n }\n if (this.options.onSelect) {\n const features = def.feature ? [def.feature] : [];\n this.options.onSelect({\n type,\n layer: this,\n features,\n ...createFeaturePositionOptions(features),\n });\n }\n }\n\n private _unSelectLayer(def: LayerDef) {\n const index = this._selectedLayers.indexOf(def);\n if (index !== -1) {\n this._selectedLayers.splice(index, 1);\n if (this.options) {\n if (this.options.paint) {\n this._setPaint(def, this.options.paint);\n }\n\n if (this.options.popupOnSelect && def.layer) {\n this._removePopup(def.layer);\n }\n }\n }\n this.selected = this._selectedLayers.length > 0;\n }\n\n private _createDivIcon(icon: IconPaint) {\n const { ...toLIconOpt } = icon;\n return new DivIcon({ className: '', ...toLIconOpt });\n }\n\n private _createPaintToLayer(icon: IconPaint) {\n if (icon && icon.type) {\n if (icon.type === 'icon') {\n const iconClassName = icon.className;\n const html = icon.html;\n if (iconClassName || html) {\n return (geoJsonPoint: any, latlng: LatLngExpression) => {\n const divIcon = this._createDivIcon(icon);\n return new Marker(latlng, { icon: divIcon });\n };\n }\n } else if (icon.type === 'pin') {\n return (geoJsonPoint: any, latlng: LatLngExpression) => {\n // const divIcon = this.createDivIcon(icon);\n return new Marker(latlng);\n };\n }\n }\n return (geoJsonPoint: any, latlng: LatLngExpression) => {\n const p: any = PAINT;\n return new CircleMarker(latlng, this._preparePaint({ ...p, ...icon }));\n };\n }\n\n private _createPaintOptions(\n paintOptions: VectorAdapterLayerPaint,\n type: VectorAdapterLayerType,\n ): GeoJSONOptions {\n const geoJsonOptions: GeoJSONOptions = {};\n const paint = (paintOptions && this._preparePaint(paintOptions)) || {};\n if (paintOptions) {\n geoJsonOptions.style = () => {\n return paint;\n };\n }\n if (type === 'point') {\n (geoJsonOptions as any).pointToLayer = this._createPaintToLayer(\n paintOptions as IconPaint,\n );\n } else if (type === 'line') {\n paint.stroke = true;\n }\n return geoJsonOptions;\n }\n\n private _addMapListener() {\n const map = this.map;\n if (map) {\n const { labelField, labelOnHover, unselectOnClick } = this.options;\n const uoc = unselectOnClick ?? true;\n if (uoc) {\n map.on('click', this.$unselect);\n }\n if (labelField && !labelOnHover) {\n map.on('zoomend', this.$updateTooltip);\n map.on('moveend', this.$updateTooltip);\n }\n }\n }\n\n private _removeMapListener() {\n this.map.off('zoomend', this.$updateTooltip);\n this.map.off('moveend', this.$updateTooltip);\n this.map.off('click', this.$unselect);\n }\n}\n","import { convertMapClickEvent } from './convertMapClickEvent';\nimport { createFeaturePositionOptions } from './geometries';\n\nimport type { LeafletMouseEvent } from 'leaflet';\nimport type { LayerAdapter, OnLayerMouseOptions } from '@nextgis/webmap';\nimport type { LayerDef } from '../layer-adapters/GeoJsonAdapter';\n\nexport interface CreateMouseEventOptions {\n layer: LayerAdapter;\n source: LeafletMouseEvent;\n}\n\nexport function createMouseEvent({\n layer,\n source,\n}: CreateMouseEventOptions): OnLayerMouseOptions {\n const layer_ = source.target as LayerDef;\n const feature = layer_.feature;\n const opt: OnLayerMouseOptions = {\n layer,\n feature,\n event: convertMapClickEvent(source),\n source,\n ...createFeaturePositionOptions(feature),\n };\n return opt;\n}\n","export function callAjax(\n src: string,\n callback: (resp: any) => any,\n headers: Record<string, any>,\n): () => void {\n const xhr = new XMLHttpRequest();\n xhr.open('GET', src);\n xhr.responseType = 'arraybuffer';\n for (const h in headers) {\n xhr.setRequestHeader(h, headers[h]);\n }\n xhr.onload = function () {\n const arrayBufferView = new Uint8Array(this.response);\n const blob = new Blob([arrayBufferView], { type: 'image/png' });\n // @ts-ignore for typedoc\n const urlCreator = window.URL || window.webkitURL;\n const imageUrl = urlCreator.createObjectURL(blob);\n callback(imageUrl);\n };\n xhr.send();\n return () => {\n xhr.abort();\n };\n}\n","import {\n ImageOverlay as LImageOverlay,\n LatLngBoundsExpression,\n ImageOverlayOptions,\n} from 'leaflet';\nimport { callAjax } from '../../utils/callAjax';\n\ntype IOptions = ImageOverlayOptions & { headers?: any };\n\nexport class ImageOverlay extends LImageOverlay {\n private _abort: (() => void)[] = [];\n\n constructor(\n imageUrl: string,\n bounds: LatLngBoundsExpression,\n options?: IOptions,\n ) {\n super(imageUrl, bounds, options);\n }\n\n cancelLoad(): void {\n if (this._abort) {\n this._abort.forEach((x) => x());\n this._abort = [];\n }\n }\n\n _initImage(): void {\n // @ts-ignore\n super._initImage();\n // @ts-ignore\n const headers = this.options.headers;\n if (headers) {\n // @ts-ignore\n const img: HTMLImageElement = this._image;\n const src = img.src;\n img.src = '';\n this._abort.push(\n callAjax(\n src,\n (response) => {\n img.src = response;\n },\n headers,\n ),\n );\n }\n }\n}\n","/*!\n * leaflet.wms.js\n * A collection of Leaflet utilities for working with Web Mapping services.\n * (c) 2014-2016, Houston Engineering, Inc.\n * MIT License\n */\n\nimport { debounce } from '@nextgis/utils';\nimport { Layer, Util, CRS } from 'leaflet';\nimport { ImageOverlay } from './ImageOverlay';\n\nimport type { Map } from 'leaflet';\n\ninterface OverlayOptions {\n crs?: null;\n uppercase?: boolean;\n attribution?: string;\n opacity?: number;\n isBack?: boolean;\n minZoom?: number;\n maxZoom?: number;\n zIndex?: number;\n pane?: string;\n headers?: any;\n viewPortBuffer?: number;\n setViewDelay?: number;\n}\n\n/*\n * Overlay:\n * \"Single Tile\" WMS image overlay that updates with map changes.\n * Portions of wms.Overlay are directly extracted from L.TileLayer.WMS.\n * See Leaflet license.\n */\nexport class ImageLayer extends Layer {\n defaultWmsParams = {\n service: 'WMS',\n request: 'GetMap',\n version: '1.1.1',\n layers: '',\n styles: '',\n format: 'image/jpeg',\n transparent: false,\n };\n\n options: OverlayOptions = {\n crs: null,\n uppercase: false,\n attribution: '',\n opacity: 1,\n isBack: false,\n minZoom: 0,\n pane: 'tilePane',\n headers: null,\n viewPortBuffer: 0,\n setViewDelay: 100,\n };\n\n private wmsParams: any;\n private _url?: string;\n private _currentUrl?: string;\n private _currentOverlay?: ImageOverlay;\n\n constructor(url: string, options: OverlayOptions) {\n super(options);\n this._url = url;\n\n // Move WMS parameters to params object\n const params: any = {};\n const opts: any = {};\n let opt: keyof OverlayOptions;\n for (opt in options) {\n if (opt in this.options) {\n opts[opt] = options[opt];\n } else {\n params[opt] = options[opt];\n }\n }\n Util.setOptions(this, opts);\n this.wmsParams = Util.extend({}, this.defaultWmsParams, params);\n }\n\n setParams(params: Record<string, any>): void {\n Util.extend(this.wmsParams, params);\n this.update();\n }\n\n getAttribution(): string {\n return this.options.attribution || '';\n }\n\n onAdd(): this {\n this.update();\n return this;\n }\n\n onRemove(map: Map): this {\n if (this._currentOverlay) {\n this._currentOverlay.cancelLoad();\n map.removeLayer(this._currentOverlay);\n delete this._currentOverlay;\n }\n if (this._currentUrl) {\n delete this._currentUrl;\n }\n return this;\n }\n\n getEvents(): {\n moveend: () => void;\n } {\n return {\n moveend: debounce(this.update, this.options.setViewDelay),\n };\n }\n\n update(): void {\n if (!this._map) {\n return;\n }\n // Determine image URL and whether it has changed since last update\n this.updateWmsParams();\n const url = this.getImageUrl();\n if (this._currentUrl === url) {\n return;\n }\n this._currentUrl = url;\n\n // Keep current image overlay in place until new one loads\n // (inspired by esri.leaflet)\n const viewPortBuffer = this.options.viewPortBuffer || 0;\n const bounds = this._map.getBounds().pad(viewPortBuffer);\n\n const overlay = new ImageOverlay(url, bounds, {\n opacity: 0,\n pane: this.options.pane,\n headers: this.options.headers,\n });\n overlay.addTo(this._map);\n if (this._currentOverlay) {\n this._currentOverlay.cancelLoad();\n }\n overlay.once(\n 'load',\n () => {\n if (!this._map) {\n return;\n }\n // @ts-ignore\n if (overlay._url !== this._currentUrl) {\n this._map.removeLayer(overlay);\n return;\n } else if (this._currentOverlay) {\n this._map.removeLayer(this._currentOverlay);\n }\n this._currentOverlay = overlay;\n overlay.setOpacity(\n this.options.opacity !== undefined ? this.options.opacity : 1,\n );\n if (this.options.isBack === true) {\n overlay.bringToBack();\n }\n if (this.options.isBack === false) {\n overlay.bringToFront();\n }\n if (this.options.zIndex !== undefined) {\n overlay.setZIndex(this.options.zIndex);\n }\n },\n this,\n );\n const { minZoom, maxZoom } = this.options;\n if (\n (minZoom && this._map.getZoom() < minZoom) ||\n (maxZoom && this._map.getZoom() > maxZoom)\n ) {\n this._map.removeLayer(overlay);\n }\n }\n\n setOpacity(opacity: number): void {\n this.options.opacity = opacity;\n if (this._currentOverlay) {\n this._currentOverlay.setOpacity(opacity);\n }\n }\n\n bringToBack(): void {\n this.options.isBack = true;\n if (this._currentOverlay) {\n this._currentOverlay.bringToBack();\n }\n }\n\n bringToFront(): void {\n this.options.isBack = false;\n if (this._currentOverlay) {\n this._currentOverlay.bringToFront();\n }\n }\n\n setZIndex(zIndex: number): void {\n this.options.zIndex = zIndex;\n if (this._currentOverlay) {\n this._currentOverlay.setZIndex(zIndex);\n }\n }\n\n // See L.TileLayer.WMS: onAdd() & getTileUrl()\n updateWmsParams(map?: Map): void {\n if (!map) {\n map = this._map;\n }\n // Compute WMS options\n const viewPortBuffer = this.options.viewPortBuffer || 0;\n const bounds = map.getBounds().pad(viewPortBuffer);\n const size = map.getSize();\n if (this.options.viewPortBuffer !== 0) {\n const factor = viewPortBuffer + 1;\n size.x = Math.ceil(size.x * factor);\n size.y = Math.ceil(size.y * factor);\n }\n const wmsVersion = parseFloat(this.wmsParams.version);\n const crs = this.options.crs || map.options.crs;\n const projectionKey = wmsVersion >= 1.3 ? 'crs' : 'srs';\n if (crs) {\n const nw = crs.project(bounds.getNorthWest());\n const se = crs.project(bounds.getSouthEast());\n\n // Assemble WMS parameter string\n const params: any = {\n width: size.x,\n height: size.y,\n };\n params[projectionKey] = crs.code;\n params.bbox = (\n wmsVersion >= 1.3 && crs === CRS.EPSG4326\n ? [se.y, nw.x, nw.y, se.x]\n : [nw.x, se.y, se.x, nw.y]\n ).join(',');\n\n Util.extend(this.wmsParams, params);\n }\n }\n\n getImageUrl(): string {\n const uppercase = this.options.uppercase || false;\n const pstr = Util.getParamString(this.wmsParams, this._url, uppercase);\n return this._url + pstr;\n }\n}\n","import { MainLayerAdapter } from '@nextgis/webmap';\nimport { ImageLayer } from './ImageLayer';\nimport { BaseAdapter } from '../BaseAdapter';\n\nimport type { Map } from 'leaflet';\nimport type { ImageAdapterOptions } from '@nextgis/webmap';\n\nexport class ImageAdapter\n extends BaseAdapter<ImageAdapterOptions>\n implements MainLayerAdapter<Map>\n{\n layer: any;\n\n addLayer(options: ImageAdapterOptions): any {\n const url = options && options.url;\n if (url) {\n options = { transparent: true, ...options };\n const updateWmsParamsFromOpt = options.updateWmsParams;\n this.layer = new ImageLayer(url, {\n pane: this.pane,\n headers: options.headers,\n setViewDelay: options.setViewDelay,\n /**\n * TODO: safe remove, use only options.nativeOptions\n */\n ...options,\n ...options.params,\n ...options.nativeOptions,\n });\n if (updateWmsParamsFromOpt) {\n const updateWmsParams = this.layer.updateWmsParams;\n this.layer.updateWmsParams = function (map: Map) {\n updateWmsParams.call(this, map);\n this.wmsParams = updateWmsParamsFromOpt(this.wmsParams);\n };\n }\n return this.layer;\n }\n }\n}\n","// based on https://github.com/bvaughn/debounce-decorator\n\nexport function debounce<T extends (...args: any[]) => void>(\n cb: T,\n wait = 10,\n): T & { clear: () => void } {\n let timeoutId: any;\n\n function wrapper(this: any, ...args: any[]) {\n wrapper.clear();\n\n timeoutId = setTimeout(() => {\n timeoutId = null;\n cb.apply(this, args);\n }, wait);\n }\n\n wrapper.clear = function () {\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n };\n\n return wrapper as T & { clear: () => void };\n}\n\nexport function DebounceDecorator(wait = 10) {\n return function (\n target: unknown,\n key: string,\n descriptor: PropertyDescriptor,\n ): PropertyDescriptor {\n return {\n configurable: true,\n enumerable: descriptor.enumerable,\n get: function getter() {\n // Attach this function to the instance (not the class)\n Object.defineProperty(this, key, {\n configurable: true,\n enumerable: descriptor.enumerable,\n value: debounce(descriptor.value, wait),\n });\n // @ts-ignore\n return this[key];\n },\n };\n };\n}\n","import { DomUtil, GridLayer, Util } from 'leaflet';\nimport { debounce } from '../../../utils/src';\nimport { callAjax } from './callAjax';\n\n// import type { TileLayerOptionsExtended } from './TileAdapter/TileLayer';\n\ntype Constructor = new (...args: any[]) => any;\n\nexport function makeRemote<\n TBase extends Constructor,\n // O extends TileLayerOptionsExtended = TileLayerOptionsExtended\n>(Base: TBase): TBase {\n return class RemoteTileLayer extends Base {\n constructor(...args: any[]) {\n super(...args);\n if (this.options.setViewDelay) {\n // @ts-ignore\n this._update = debounce((...a: any[]) => {\n // @ts-ignore\n GridLayer.prototype._update.call(this, ...a);\n }, this.options.setViewDelay);\n }\n }\n\n createTile(\n coords: Record<string, unknown>,\n done: (error: any, tile: HTMLImageElement) => void,\n ): HTMLImageElement {\n // @ts-ignore\n const url = this.getTileUrl(coords);\n\n const tile = document.createElement('img');\n (tile as any).abort = callAjax(\n url,\n (response) => {\n tile.src = response;\n done(null, tile);\n },\n // @ts-ignore\n this.options.headers,\n );\n\n if (this.options.crossOrigin || this.options.crossOrigin === '') {\n tile.crossOrigin =\n this.options.crossOrigin === true ? '' : this.options.crossOrigin;\n }\n\n tile.alt = '';\n tile.setAttribute('role', 'presentation');\n\n return tile;\n }\n\n _abortLoading() {\n // @ts-ignore\n const tiles = this._tiles;\n // @ts-ignore\n const tileZoom = this._tileZoom;\n for (const i in tiles) {\n if (tiles[i].coords.z !== tileZoom) {\n const tile = tiles[i].el;\n\n tile.onload = Util.falseFn;\n tile.onerror = Util.falseFn;\n if (!tile.complete) {\n if (tile.abort) {\n tile.abort();\n }\n tile.src = Util.emptyImageUrl;\n DomUtil.remove(tile);\n delete tiles[i];\n }\n }\n }\n }\n };\n}\n","import { TileLayer as TL } from 'leaflet';\nimport { makeRemote } from '../../utils/makeRemoteTileLayer';\n\nimport type { TileLayerOptions } from 'leaflet';\n\nexport type TileLayerOptionsExtended = TileLayerOptions & {\n headers: Record<string, any>;\n setViewDelay?: number;\n};\n\nclass TileLayerBase extends TL {\n constructor(urlTemplate: string, options?: TileLayerOptionsExtended) {\n super(urlTemplate, options);\n Object.assign(this.options, options);\n }\n}\n\nexport const TileLayer = makeRemote(TileLayerBase);\n","import { TileLayer } from 'leaflet';\nimport { TileLayer as TL } from './TileLayer';\nimport { BaseAdapter } from '../BaseAdapter';\n\nimport type { MainLayerAdapter, TileAdapterOptions } from '@nextgis/webmap';\nimport type { TileLayerOptions } from 'leaflet';\n\nexport class TileAdapter\n extends BaseAdapter<TileAdapterOptions, TileLayer>\n implements MainLayerAdapter\n{\n addLayer(options: TileAdapterOptions): TileLayer | undefined {\n this.options = Object.assign(this.options, options);\n if (options) {\n const { url, ...opt } = options;\n if (url) {\n const tileLayerOptions: TileLayerOptions = {\n pane: this.pane,\n attribution: opt.attribution,\n minZoom: opt.minZoom,\n maxZoom: opt.maxZoom,\n\n ...opt.nativeOptions,\n };\n if (opt.subdomains) {\n tileLayerOptions.subdomains = opt.subdomains;\n }\n let layer;\n if (opt.headers) {\n layer = new TL(url, {\n ...tileLayerOptions,\n headers: opt.headers,\n setViewDelay: opt.setViewDelay,\n });\n } else {\n layer = new TileLayer(url, tileLayerOptions);\n }\n return layer;\n }\n }\n }\n}\n","import { TileLayer } from 'leaflet';\nimport { makeRemote } from '../../utils/makeRemoteTileLayer';\nimport type { WMSOptions } from 'leaflet';\n\ntype LayerOptions = WMSOptions & { headers: any };\n\nclass WmsLayerBase extends TileLayer.WMS {\n constructor(urlTemplate: string, options: LayerOptions) {\n super(urlTemplate, options);\n }\n}\n\nexport const WmsLayer = makeRemote(WmsLayerBase);\n","import { TileLayer } from 'leaflet';\nimport { WmsLayer as WMS } from './WmsLayer';\nimport { BaseAdapter } from '../BaseAdapter';\n\nimport type { MainLayerAdapter, WmsAdapterOptions } from '@nextgis/webmap';\nimport type { WMSOptions } from 'leaflet';\n\nexport class WmsAdapter\n extends BaseAdapter<WmsAdapterOptions, TileLayer.WMS>\n implements MainLayerAdapter\n{\n addLayer(options: WmsAdapterOptions): TileLayer.WMS | undefined {\n Object.assign(this.options, options);\n const { url, ...opt } = options;\n if (url) {\n const layerOptions: WMSOptions = {\n pane: this.pane,\n attribution: opt.attribution,\n minZoom: opt.minZoom,\n maxZoom: opt.maxZoom,\n layers: options.layers,\n format: options.format,\n ...options.nativeOptions,\n };\n let layer;\n if (opt.headers) {\n layer = new WMS(url, { ...layerOptions, headers: opt.headers });\n } else {\n layer = new TileLayer.WMS(url, layerOptions);\n }\n return layer;\n }\n }\n}\n","import { MainLayerAdapter, TileAdapterOptions } from '@nextgis/webmap';\nimport { TileLayer } from 'leaflet';\n\nimport { TileAdapter } from './TileAdapter/TileAdapter';\n\nexport class OsmAdapter extends TileAdapter implements MainLayerAdapter {\n addLayer(options: Omit<TileAdapterOptions, 'url'>): TileLayer | undefined {\n const url = 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png';\n return super.addLayer({\n name: 'OpenStreetMap',\n attribution:\n '© <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors',\n ...options,\n url,\n });\n }\n}\n","import type { LatLngBoundsExpression } from 'leaflet';\nimport type { LngLatBoundsArray } from '@nextgis/utils';\n\nexport function arrayToBoundsExpression(\n bounds: LngLatBoundsArray,\n): LatLngBoundsExpression {\n const e = bounds;\n // top, left, bottom, right\n return [\n [e[3], e[0]],\n [e[1], e[2]],\n ];\n}\n","import { EventEmitter } from 'events';\nimport {\n Map,\n Control,\n FitBoundsOptions,\n LatLngBoundsExpression,\n} from 'leaflet';\nimport { convertMapClickEvent } from './utils/convertMapClickEvent';\nimport { createButtonControl } from './controls/createButtonControl';\nimport { AttributionControl } from './controls/Attribution';\nimport { createControl } from './controls/createControl';\nimport { GeoJsonAdapter } from './layer-adapters/GeoJsonAdapter';\nimport { ImageAdapter } from './layer-adapters/ImageAdapter/ImageAdapter';\nimport { TileAdapter } from './layer-adapters/TileAdapter/TileAdapter';\nimport { WmsAdapter } from './layer-adapters/WmsAdapter/WmsAdapter';\nimport { OsmAdapter } from './layer-adapters/OsmAdapter';\n\nimport type {\n Layer,\n GridLayer,\n LeafletEvent,\n LocationEvent,\n ControlPosition,\n LeafletMouseEvent,\n} from 'leaflet';\nimport type { LngLatBoundsArray, LngLatArray } from '@nextgis/utils';\nimport type {\n CreateControlOptions,\n ButtonControlOptions,\n LocationEvents,\n LocateOptions,\n MainMapEvents,\n LayerAdapter,\n ViewOptions,\n MapAdapter,\n MapOptions,\n FitOptions,\n MapControl,\n Locate,\n} from '@nextgis/webmap';\nimport { arrayToBoundsExpression } from './utils/arrayToBoundsExpression';\n\nexport type Type<T> = new (...args: any[]) => T;\nexport type UnselectCb = () => void;\nexport type UnselectDef = UnselectCb;\nexport class LeafletMapAdapter implements MapAdapter<Map, any, Control> {\n static layerAdapters: {\n [name: string]: Type<LayerAdapter<Map, any, any>>;\n } = {\n GEOJSON: GeoJsonAdapter,\n IMAGE: ImageAdapter,\n TILE: TileAdapter,\n WMS: WmsAdapter,\n // // MVT: MvtAdapter,\n OSM: OsmAdapter,\n };\n\n static controlAdapters = {\n ZOOM: Control.Zoom,\n ATTRIBUTION: AttributionControl,\n };\n\n static Map = Map;\n\n options: MapOptions<Map> = { target: 'map' };\n\n layerAdapters = LeafletMapAdapter.layerAdapters;\n controlAdapters = LeafletMapAdapter.controlAdapters;\n emitter = new EventEmitter();\n map?: Map;\n\n private _resizeObserver?: ResizeObserver;\n private _unselectCb: UnselectDef[] = [];\n private _universalEvents: (keyof MainMapEvents)[] = [\n 'move',\n 'zoom',\n 'zoomend',\n 'zoomstart',\n 'moveend',\n 'movestart',\n ];\n private _positionEvents: (keyof MainMapEvents)[] = [\n 'mousemove',\n 'mouseout',\n 'mouseover',\n ];\n\n create(options: MapOptions<Map>): void {\n this.options = { ...options };\n if (this.options.target) {\n const {\n zoom,\n center,\n maxZoom,\n minZoom,\n maxBounds: mb,\n mapAdapterOptions,\n } = this.options;\n\n this.map =\n this.options.map ||\n new Map(this.options.target, {\n attributionControl: false,\n zoomControl: false,\n maxBounds: mb ? arrayToBoundsExpression(mb) : undefined,\n maxZoom,\n minZoom,\n center: center && [center[1], center[0]],\n zoom,\n ...mapAdapterOptions,\n });\n // create default pane\n const defPane = this.map.createPane('order-0');\n (this.map as any)._addUnselectCb = (def: UnselectDef) => {\n this._addUnselectCb(def);\n };\n defPane.style.zIndex = String(0);\n this.emitter.emit('create', this);\n this._addMapListeners();\n }\n }\n\n destroy(): void {\n if (this.map) {\n this.map.remove();\n }\n this._stopWatchSizeChangeToUpdateMinZoom();\n }\n\n getContainer(): HTMLElement | undefined {\n return this.map && this.map.getContainer();\n }\n\n getControlContainer(): HTMLElement {\n const controlContainer = this.map && (this.map as any)._controlContainer;\n if (controlContainer) {\n return controlContainer;\n }\n throw new Error('Leaflet Map is not initialized yet');\n }\n\n setCursor(cursor: string): void {\n if (this.map) {\n this.map.getContainer().style.cursor = cursor;\n }\n }\n\n setView(lngLat: LngLatArray, zoom?: number): void;\n setView(options: ViewOptions): void;\n setView(lngLatOrOpt: LngLatArray | ViewOptions, zoom?: number): void {\n const map = this.map;\n if (!map) return;\n if (Array.isArray(lngLatOrOpt)) {\n const lngLat = lngLatOrOpt;\n const [lng, lat] = lngLat;\n if (this.map) {\n if (typeof zoom === 'number') {\n this.map.setView([lat, lng], zoom, { animate: false });\n } else {\n this.setCenter([lng, lat]);\n }\n }\n } else {\n const { zoom, center, maxBounds, bounds, minZoom, maxZoom } = lngLatOrOpt;\n if (center && zoom !== undefined) {\n this.setView(center, zoom);\n } else {\n if (zoom !== undefined) {\n this.setZoom(zoom);\n }\n if (center) {\n this.setCenter(center);\n }\n }\n if (bounds) {\n this.fitBounds(bounds);\n }\n if (maxBounds !== undefined) {\n if (maxBounds) {\n const b = arrayToBoundsExpression(maxBounds);\n map.setMaxBounds(b);\n map.setMinZoom(map.getBoundsZoom(b));\n this._watchSizeChangeToUpdateMinZoom(b);\n } else {\n // @ts-ignore `null` works for unset maxBounds, but not in typing\n map.setMaxBounds(null);\n this._stopWatchSizeChangeToUpdateMinZoom();\n }\n }\n if (maxZoom !== undefined) {\n map.setMaxZoom(maxZoom);\n }\n if (minZoom !== undefined) {\n this._stopWatchSizeChangeToUpdateMinZoom();\n map.setMinZoom(minZoom);\n }\n }\n }\n\n setCenter(lngLat: LngLatArray): void {\n const [lng, lat] = lngLat;\n if (this.map) {\n this.map.panTo([lat, lng]);\n }\n }\n\n getCenter(): LngLatArray | undefined {\n const map = this.map;\n if (map) {\n const bounds = map.getBounds();\n const center = bounds.getCenter();\n return [center.lng, center.lat];\n }\n }\n\n setZoom(zoom: number): void {\n if (this.map) {\n this.map.setZoom(zoom);\n }\n }\n\n getZoom(): number | undefined {\n return (this.map && this.map.getZoom()) || undefined;\n }\n\n getBounds(): LngLatBoundsArray | undefined {\n if (!this.map) return undefined;\n const b = this.map.getBounds();\n const sw = b.getSouthWest();\n const ne = b.getNorthEast();\n return [sw.lng, sw.lat, ne.lng, ne.lat];\n }\n\n // [west, south, east, north]\n fitBounds(bounds: LngLatBoundsArray, options: FitOptions = {}): void {\n if (this.map) {\n const { maxZoom, offset, padding } = options;\n const opt: FitBoundsOptions = {};\n if (maxZoom) {\n opt.maxZoom = maxZoom;\n }\n if (padding) {\n opt.padding = [padding, padding];\n }\n if (offset) {\n opt.padding = offset;\n }\n\n this.map.fitBounds(arrayToBoundsExpression(bounds), opt);\n }\n }\n\n getLayerAdapter(name: string): Type<LayerAdapter<Map, any, any>> {\n return LeafletMapAdapter.layerAdapters[name];\n }\n\n createControl(control: MapControl, options: CreateControlOptions): Control {\n return createControl(control, options, this);\n }\n\n createButtonControl(options: ButtonControlOptions): Control {\n return createButtonControl(options, this);\n }\n\n addControl(control: Control, position: string): Control | undefined {\n control.options.position = position.replace('-', '') as ControlPosition;\n if (this.map) {\n this.map.addControl(control);\n return control;\n }\n }\n\n removeControl(control: Control): void {\n if (this.map) {\n this.map.removeControl(control);\n }\n }\n\n removeLayer(layer: Layer): void {\n layer && layer.remove && layer.remove();\n }\n\n showLayer(layer: Layer): void {\n if (this.map) {\n layer.addTo(this.map);\n }\n }\n\n hideLayer(layer: Layer): void {\n layer.remove();\n }\n\n setLayerOpacity(layer: GridLayer | Layer, value: number): void {\n if ('setOpacity' in layer) {\n layer.setOpacity(value);\n }\n }\n\n setLayerOrder(\n layer: Layer,\n order: number,\n layers: { [x: string]: LayerAdapter },\n ): void {\n //\n }\n\n onMapClick(evt: LeafletMouseEvent): void {\n const converted = convertMapClickEvent(evt);\n this.emitter.emit('preclick', converted);\n this.emitter.emit('click', converted);\n }\n\n locate(opt: LocateOptions, events?: LocationEvents): Locate {\n const map = this.map;\n if (map) {\n map.locate(opt);\n if (events) {\n const { locationfound, locationerror } = events;\n const locationFound = (e: LeafletEvent) => {\n const event = e as LocationEvent;\n const lngLat: [number, number] = [event.latlng.lng, event.latlng.lat];\n locationfound({ lngLat });\n };\n if (locationfound !== undefined) {\n map.on('locationfound', locationFound, this);\n }\n if (locationerror) {\n map.on('locationerror', locationerror, this);\n }\n const stop = () => {\n if (locationfound !== undefined) {\n map.off('locationfound', locationFound);\n }\n if (locationerror) {\n map.off('locationerror', locationerror);\n }\n };\n return { stop };\n }\n }\n const stop = () => void 'fake function';\n return { stop };\n }\n\n private _addUnselectCb(cb: UnselectDef) {\n for (const p of this._unselectCb) {\n p();\n }\n this._unselectCb.length = 0;\n this._unselectCb.push(cb);\n }\n\n private _watchSizeChangeToUpdateMinZoom(bounds: LatLngBoundsExpression) {\n this._stopWatchSizeChangeToUpdateMinZoom();\n const container = this.getContainer();\n const map = this.map;\n if (container && map && window.ResizeObserver) {\n this._resizeObserver = new ResizeObserver(() => {\n map.setMinZoom(map.getBoundsZoom(bounds));\n });\n this._resizeObserver.observe(container);\n }\n }\n\n private _stopWatchSizeChangeToUpdateMinZoom() {\n const map = this.map;\n if (map) {\n map.setMinZoom(0);\n }\n if (this._resizeObserver) {\n this._resizeObserver.disconnect();\n this._resizeObserver = undefined;\n }\n }\n\n private _addMapListeners() {\n const map = this.map;\n if (map) {\n map.on('click', (evt) => {\n this.onMapClick(evt as LeafletMouseEvent);\n });\n for (const e of this._universalEvents) {\n map.on(e, () => this.emitter.emit(e, this), map);\n }\n\n for (const e of this._positionEvents) {\n map.on(\n e,\n (evt) =>\n this.emitter.emit(\n e,\n convertMapClickEvent(evt as LeafletMouseEvent),\n ),\n map,\n );\n }\n }\n }\n}\n","import { ButtonControlOptions, MapAdapter } from '@nextgis/webmap';\nimport { createControl } from './createControl';\nimport { DomEvent, Control } from 'leaflet';\n\nexport function createButtonControl(\n options: ButtonControlOptions,\n map: MapAdapter,\n): Control {\n const link = document.createElement('a');\n\n const title = options.title || '';\n link.href = '#';\n link.title = title;\n\n link.setAttribute('role', 'button');\n link.setAttribute('aria-label', title);\n\n if (options.addClass) {\n link.classList.add(options.addClass);\n }\n\n DomEvent.disableClickPropagation(link);\n DomEvent.on(link, 'click', DomEvent.stop);\n\n if (options.html instanceof HTMLElement) {\n link.appendChild(options.html);\n } else if (typeof options.html === 'string') {\n link.innerHTML = options.html;\n }\n\n const onClick = (e: Event) => {\n e.stopPropagation();\n options.onClick();\n };\n\n return createControl(\n {\n onAdd() {\n if (options.onClick !== undefined) {\n link.addEventListener('click', onClick);\n }\n return link;\n },\n onRemove() {\n const parent = link.parentNode;\n if (parent) {\n parent.removeChild(link);\n }\n if (options.onClick !== undefined) {\n link.removeEventListener('click', onClick);\n }\n },\n },\n { bar: true },\n map,\n );\n}\n","/**\n * @module leaflet-map-adapter\n */\n\nimport { LeafletMapAdapter } from './LeafletMapAdapter';\n\nexport default LeafletMapAdapter;\n"],"names":["convertMapClickEvent","evt","coord","containerPoint","latLng","latlng","lngLat","lng","lat","pixel","left","x","top","y","source","createControl","control","options","map","Control","extend","onAdd","element","document","createElement","content","classList","add","bar","addClass","margin","style","marginBottom","marginTop","marginLeft","marginRight","appendChild","DomEvent","disableClickPropagation","onRemove","AttributionControl","_super","_this","call","this","customAttribution","attributions","Array","isArray","forEach","addAttribution","__extends","Attribution","boundsToArray","bounds","ne","getNorthEast","sw","getSouthWest","typeAlias","Point","LineString","MultiPoint","Polygon","MultiLineString","MultiPolygon","GeometryCollection","PAINT","stroke","opacity","backAliases","a","layerType","backAlias","push","geometryFilter","geometry","type","indexOf","featuresBounds","features","geoJsonLayer","GeoJSON","f","addData","getBounds","createFeaturePositionOptions","getFeaturesBounds","getCenter","_a","getFeaturesCenter","findMostFrequentGeomType","arr","counts","fry","length","maxName","c","BaseAdapter","pane","undefined","order","exist","getPane","createPane","zIndex","String","Math","round","prototype","addLayer","Object","assign","GeoJsonAdapter","selected","_layers","_selectedLayers","_filteredLayers","_openedPopup","$updateTooltip","debounce","updateTooltip","$unselect","unselect","paint","layer","FeatureGroup","__assign","nativeOptions","selectedPaint","data","_addMapListener","beforeRemove","_removeMapListener","select","findFeatureFun","filter","_selectLayer","_setPaintEachLayer","_unSelectLayer","_i","_removePopup","getSelected","target","feature","getFiltered","fun","_filterFun","layer_","_map","remove","filteredLayers_1","removeLayer","addTo","cleanFilter","getLayers","visible","clearLayer","cb","def","splice","clearLayers","setData","geoJsonOptions","detectedType","geojson","geometries","g","detectType","console","warn","_data","filterGeometries","_getGeoJsonOptions","openPopup","_openPopup","closePopup","layerDef","_updateTooltip","getExtent","isValid","setOpacity","value","setPaint","setSelectedPaint","_setPaint","updatePaint","updateSelectedPaint","properties","labelField","unbindTooltip","message","permanent","labelOnHover","bindTooltip","sticky","_c","minWidth","autoPan","maxWidth","closeButton","closeButton_","selectOnHover","_closeHandlers","onClose","handler","close","popup","createPopupContent","_d","popupContent","popupOptions","closeOnClick","autoClose","defined","bindPopup","_b","unselectOnClose","p","getPopup","once","unbindPopup","index","findIndex","closeHandlers","closeHandlers_1","h","l","isPaintCallback","isPaint","marker","divIcon","_createDivIcon","setIcon","setStyle","_preparePaint","aliases","readyPaint","radius","aliases_1","to","from","paintProp","toLowerCase","Number","defineProperty","enumerable","lopt","pointToLayer","iconOpt","_createPaintToLayer","_createPaintOptions","onEachFeature","_onEachFeature","def_1","ok","popup_1","popupOptions_1","selectable","interactive","on","e","_selectOnLayerClick","_handleMouseEvents","setTimeout","onMouseOut","onMouseOver","onClick_","onClick","onLayerClick","_getSelected","_createMouseEvent","event","createMouseEvent","find","stopPropagation","isSelected","unselectOnSecondClick","_addUnselectCb","multiselect","popupOnSelect","onSelect","icon","toLIconOpt","__rest","DivIcon","className","html","geoJsonPoint","Marker","CircleMarker","paintOptions","unselectOnClick","off","callAjax","src","callback","headers","xhr","XMLHttpRequest","open","responseType","setRequestHeader","onload","arrayBufferView","Uint8Array","response","blob","Blob","imageUrl","window","URL","webkitURL","createObjectURL","send","abort","ImageOverlay","_abort","cancelLoad","_initImage","img_1","_image","LImageOverlay","ImageLayer","url","defaultWmsParams","service","request","version","layers","styles","format","transparent","crs","uppercase","attribution","isBack","minZoom","viewPortBuffer","setViewDelay","_url","opt","params","opts","Util","setOptions","wmsParams","setParams","update","getAttribution","_currentOverlay","_currentUrl","getEvents","moveend","updateWmsParams","getImageUrl","pad","overlay","bringToBack","bringToFront","setZIndex","maxZoom","getZoom","size","getSize","factor","ceil","wmsVersion","parseFloat","projectionKey","nw","project","getNorthWest","se","getSouthEast","width","height","code","bbox","CRS","EPSG4326","join","pstr","getParamString","Layer","ImageAdapter","updateWmsParamsFromOpt_1","updateWmsParams_1","wait","timeoutId","wrapper","args","arguments","clear","apply","clearTimeout","makeRemote","Base","RemoteTileLayer","_update","GridLayer","__spreadArray","createTile","coords","done","getTileUrl","tile","crossOrigin","alt","setAttribute","_abortLoading","tiles","_tiles","tileZoom","_tileZoom","i","z","el","falseFn","onerror","complete","emptyImageUrl","DomUtil","TileLayer","TileLayerBase","urlTemplate","TL","TileAdapter","tileLayerOptions","subdomains","WmsLayer","WmsLayerBase","WMS","WmsAdapter","layerOptions","OsmAdapter","name","arrayToBoundsExpression","LeafletMapAdapter","layerAdapters","controlAdapters","emitter","EventEmitter","_unselectCb","_universalEvents","_positionEvents","create","zoom","center","mb","maxBounds","mapAdapterOptions","Map","attributionControl","zoomControl","defPane","emit","_addMapListeners","destroy","_stopWatchSizeChangeToUpdateMinZoom","getContainer","getControlContainer","controlContainer","_controlContainer","Error","setCursor","cursor","setView","lngLatOrOpt","animate","setCenter","zoom_1","setZoom","fitBounds","b","setMaxBounds","setMinZoom","getBoundsZoom","_watchSizeChangeToUpdateMinZoom","setMaxZoom","panTo","offset","padding","getLayerAdapter","createButtonControl","link","title","href","stop","HTMLElement","innerHTML","addEventListener","parent","parentNode","removeChild","removeEventListener","addControl","position","replace","removeControl","showLayer","hideLayer","setLayerOpacity","setLayerOrder","onMapClick","converted","locate","events","locationfound_1","locationfound","locationerror_1","locationerror","locationFound_1","container","ResizeObserver","_resizeObserver","observe","disconnect","GEOJSON","IMAGE","TILE","OSM","ZOOM","Zoom","ATTRIBUTION"],"mappings":"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"}
|