@nextgis/leaflet-map-adapter 3.0.0-alpha.13 → 3.0.0-alpha.18

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.
@@ -1 +1 @@
1
- {"version":3,"file":"leaflet-map-adapter.esm-bundler.prod.js","sources":["../src/controls/createControl.ts","../src/utils/boundsToArray.ts","../src/utils/detectType.ts","../src/utils/geometries.ts","../src/layer-adapters/BaseAdapter.ts","../src/utils/convertMapClickEvent.ts","../src/utils/createMouseEvent.ts","../src/layer-adapters/GeoJsonAdapter/utils/GeoJsonEvents.ts","../src/layer-adapters/GeoJsonAdapter/utils/GeojsonPaint.ts","../src/utils/callAjax.ts","../src/layer-adapters/ImageAdapter/imageQueue.ts","../src/layer-adapters/ImageAdapter/ImageOverlay.ts","../src/layer-adapters/ImageAdapter/ImageLayer.ts","../src/layer-adapters/ImageAdapter/ImageAdapter.ts","../src/utils/makeRemoteTileLayer.ts","../../utils/src/debounce.ts","../src/layer-adapters/TileAdapter/TileLayer.ts","../src/layer-adapters/TileAdapter/TileAdapter.ts","../src/layer-adapters/WmsAdapter/WmsLayer.ts","../src/utils/arrayToBoundsExpression.ts","../src/LeafletMapAdapter.ts","../src/controls/createButtonControl.ts","../src/layer-adapters/GeoJsonAdapter/GeoJsonAdapter.ts","../src/layer-adapters/WmsAdapter/WmsAdapter.ts","../src/layer-adapters/OsmAdapter.ts","../src/controls/Attribution.ts"],"sourcesContent":["import { Control, DomEvent } from 'leaflet';\n\nimport type {\n CreateControlOptions,\n MapAdapter,\n MapControl,\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 type { LngLatBoundsArray } from '@nextgis/utils';\nimport type { LatLngBounds } from 'leaflet';\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 type {\n Feature,\n FeatureCollection,\n GeoJsonGeometryTypes,\n GeoJsonObject,\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 { GeoJSON } from 'leaflet';\n\nimport { boundsToArray } from './boundsToArray';\n\nimport type { LngLatArray, LngLatBoundsArray } from '@nextgis/utils';\nimport type { FeaturePosition, VectorAdapterLayerType } from '@nextgis/webmap';\nimport type {\n Feature,\n FeatureCollection,\n GeoJsonGeometryTypes,\n GeoJsonObject,\n GeometryCollection,\n} from 'geojson';\nimport type { CircleMarkerOptions, LatLngBounds, PathOptions } from 'leaflet';\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} as PathOptions & CircleMarkerOptions;\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 { AdapterOptions, MainLayerAdapter } 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(\n public map: Map,\n public options: O,\n ) {\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 type { MapClickEvent } from '@nextgis/webmap';\nimport type { LeafletMouseEvent } from 'leaflet';\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 { convertMapClickEvent } from './convertMapClickEvent';\nimport { createFeaturePositionOptions } from './geometries';\n\nimport type { LayerAdapter, OnLayerMouseOptions } from '@nextgis/webmap';\nimport type { LeafletMouseEvent } from 'leaflet';\n\nimport type { LayerDef } from '../layer-adapters/GeoJsonAdapter/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","import { DomEvent, type Layer } from 'leaflet';\n\nimport { createMouseEvent } from '../../../utils/createMouseEvent';\n\nimport type { OnLayerMouseOptions } from '@nextgis/webmap';\nimport type { LeafletEvent, LeafletMouseEvent } from 'leaflet';\n\nimport type { GeoJsonAdapter } from '../GeoJsonAdapter';\n\nexport class GeoJsonEvents {\n private layer: GeoJsonAdapter;\n\n private _onclick?: (e: LeafletMouseEvent) => void;\n private _ondblclick?: (e: LeafletMouseEvent) => void;\n private _mouseout?: (e: LeafletMouseEvent) => void;\n private _mouseover?: (e: LeafletMouseEvent) => void;\n\n constructor(layer: GeoJsonAdapter) {\n this.layer = layer;\n }\n\n handleMouseEvents(layer: Layer) {\n const { onClick, onDoubleClick, onLayerClick, onMouseOut, onMouseOver } =\n this.layer.options;\n // TODO: remove backward compatibility for onLayerClick\n const onClick_ = onClick || onLayerClick;\n\n if (onClick_) {\n this._onclick = (e: LeafletMouseEvent) => {\n const selected = !!this.layer._getSelected(layer);\n onClick_({\n selected,\n ...this._createMouseEvent(e),\n });\n };\n layer.on('click', this._onclick, this);\n }\n if (onDoubleClick) {\n this._ondblclick = (e: LeafletMouseEvent) => {\n DomEvent.stopPropagation(e);\n const selected = !!this.layer._getSelected(layer);\n onDoubleClick({\n selected,\n ...this._createMouseEvent(e),\n });\n };\n layer.on('dblclick', this._ondblclick, this);\n }\n if (onMouseOut) {\n this._mouseout = (e: LeafletMouseEvent) => {\n onMouseOut(this._createMouseEvent(e));\n };\n layer.on('mouseout', this._mouseout, this);\n }\n if (onMouseOver) {\n this._mouseover = (e: LeafletMouseEvent) => {\n onMouseOver(this._createMouseEvent(e));\n };\n layer.on('mouseover', this._mouseover, this);\n }\n }\n\n stopMouseEvents(layer: Layer) {\n if (this._mouseover) {\n layer.off('mouseover', this._mouseover, this);\n }\n if (this._mouseout) {\n layer.off('mouseout', this._mouseout, this);\n }\n if (this._onclick) {\n layer.off('click', this._onclick, this);\n }\n }\n\n private _createMouseEvent(source: LeafletEvent): OnLayerMouseOptions {\n return createMouseEvent({\n layer: this.layer,\n source: source as LeafletMouseEvent,\n });\n }\n}\n","import { isPaint, isPaintCallback } from '@nextgis/paint';\nimport { defined } from '@nextgis/utils';\nimport { CircleMarker, DivIcon, Marker } from 'leaflet';\n\nimport { PAINT } from '../../../utils/geometries';\n\nimport type {\n IconPaint,\n PathPaint,\n VectorAdapterLayerPaint,\n} from '@nextgis/paint';\nimport type {\n CircleMarkerOptions,\n GeoJSONOptions,\n LatLngExpression,\n Path,\n PathOptions,\n} from 'leaflet';\n\nimport type { GeoJsonAdapter, LayerDef } from '../GeoJsonAdapter';\n\nexport class GeoJsonPaint {\n private layer: GeoJsonAdapter;\n\n constructor(layer: GeoJsonAdapter) {\n this.layer = layer;\n }\n\n setPaintEachLayer(paint: VectorAdapterLayerPaint) {\n this.layer._layers.forEach((layerDef) => {\n this.setPaint(layerDef, paint);\n });\n }\n\n setPaint(layerDef: LayerDef, paint: VectorAdapterLayerPaint) {\n let style: VectorAdapterLayerPaint | undefined = undefined;\n const { layer, feature } = layerDef;\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.layer.type === 'point' && style.type === 'icon') {\n const marker = layer as Marker;\n const divIcon = this._createDivIcon(style);\n setTimeout(() => {\n marker.setIcon(divIcon);\n }, 10);\n } else if ('setStyle' in layer) {\n (layer as Path).setStyle(this.preparePaint(style));\n }\n }\n }\n }\n\n preparePaint(\n paint: VectorAdapterLayerPaint,\n ): PathOptions & CircleMarkerOptions {\n if (paint.type !== 'get-paint') {\n const paintAliases: [keyof PathOptions, keyof PathPaint][] = [\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.layer.type === 'line'\n ? [\n ['color', 'strokeColor'],\n ['opacity', 'strokeOpacity'],\n ['weight', 'weight'],\n ]\n : paintAliases;\n\n const readyPaint = {} as 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 const opacity = this.layer.options.opacity;\n let paintProp = (paint as PathPaint)[from];\n if (defined(opacity) && from.toLowerCase().indexOf('opacity') !== -1) {\n paintProp = Number(paintProp) * 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 _createDivIcon(icon: IconPaint) {\n const { html, rotate, className, ...toLIconOpt } = icon;\n\n const element = document.createElement('div');\n if (className) {\n element.className = className;\n }\n if (rotate) {\n element.style.transform = `rotateZ(${rotate}deg)`;\n }\n if (html) {\n element.innerHTML = html;\n }\n\n const divIcon = new DivIcon({\n className: '',\n ...toLIconOpt,\n html: element,\n });\n return divIcon;\n }\n\n 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 (_: 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 (_: any, latlng: LatLngExpression) => {\n return new Marker(latlng);\n };\n }\n }\n return (_: any, latlng: LatLngExpression) => {\n const p: any = PAINT;\n return new CircleMarker(latlng, this.preparePaint({ ...p, ...icon }));\n };\n }\n\n createPaintOptions(paint: VectorAdapterLayerPaint): GeoJSONOptions {\n const geoJsonOptions: GeoJSONOptions = {};\n const newPaint = this.preparePaint(paint);\n if (paint) {\n geoJsonOptions.style = () => {\n return newPaint;\n };\n }\n if (this.layer.type === 'point') {\n (geoJsonOptions as any).pointToLayer = this.createPaintToLayer(\n paint as IconPaint,\n );\n } else if (this.layer.type === 'line') {\n newPaint.stroke = true;\n }\n return geoJsonOptions;\n }\n}\n","export function callAjax({\n src,\n headers,\n withCredentials,\n}: {\n src: string;\n headers?: Record<string, any>;\n withCredentials?: boolean;\n}): [Promise<string>, () => void] {\n let abortFunc = () => {\n // void\n };\n const promise = new Promise<string>((resolve, reject) => {\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 if (withCredentials) {\n xhr.withCredentials = withCredentials;\n }\n xhr.onload = function () {\n const arrayBufferView = new Uint8Array(this.response);\n const blob = new Blob([arrayBufferView], { type: 'image/png' });\n const urlCreator = window.URL || window.webkitURL;\n const imageUrl = urlCreator.createObjectURL(blob);\n resolve(imageUrl);\n };\n xhr.onerror = reject;\n xhr.send();\n abortFunc = () => {\n xhr.abort();\n resolve('');\n };\n });\n return [promise, abortFunc];\n}\n","import Queue from '@nextgis/queue';\n\nconst imageQueue = new Queue({ concurrency: 6, delay: 200 });\n\nexport default imageQueue;\n","import { ImageOverlay as LImageOverlay } from 'leaflet';\n\nimport { callAjax } from '../../utils/callAjax';\n\nimport imageQueue from './imageQueue';\n\nimport type { ImageOverlayOptions, LatLngBoundsExpression } from 'leaflet';\n\ntype IOptions = ImageOverlayOptions & {\n headers?: any;\n withCredentials?: boolean;\n};\n\nexport class ImageOverlay extends LImageOverlay {\n private _aborter?: () => 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._aborter) {\n this._aborter();\n this._aborter = undefined;\n }\n }\n\n _initImage(): void {\n // @ts-expect-error extend private method\n super._initImage();\n\n const { headers, withCredentials } = this.options as IOptions;\n // @ts-expect-error _image is a private property\n const img: HTMLImageElement = this._image;\n const src = img.src;\n img.src = '';\n // The queue is cleared in LeafletMapAdapter at each movestart and zoomstart event\n imageQueue.add(() => {\n const [promise, abortFunc] = callAjax({\n src,\n headers,\n withCredentials,\n });\n promise.then((imgUrl) => {\n img.src = imgUrl;\n });\n this._aborter = abortFunc;\n return promise;\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 { CRS, Layer, Util } from 'leaflet';\n\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 withCredentials?: boolean;\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 maxZoom: undefined,\n pane: 'tilePane',\n headers: null,\n withCredentials: false,\n viewPortBuffer: 0,\n setViewDelay: 100,\n };\n\n wmsParams: Record<string, string>;\n private _url?: string;\n private _currentUrl?: string;\n private _currentOverlay?: ImageOverlay;\n private _loadedOverlay?: 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(\n {},\n this.defaultWmsParams,\n params?.params ?? {},\n );\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 const viewPortBuffer = this.options.viewPortBuffer || 0;\n const bounds = this._map.getBounds().pad(viewPortBuffer);\n if (this._loadedOverlay) {\n this._loadedOverlay.cancelLoad();\n this._loadedOverlay.off('load');\n this._loadedOverlay = undefined;\n }\n const overlay = new ImageOverlay(url, bounds, {\n opacity: 0,\n pane: this.options.pane,\n headers: this.options.headers,\n withCredentials: this.options.withCredentials,\n });\n overlay.addTo(this._map);\n this._loadedOverlay = overlay;\n\n // Keep current image overlay in place until new one loads\n // (inspired by esri.leaflet)\n overlay.once(\n 'load',\n () => {\n if (!this._map) {\n return;\n }\n // @ts-expect-error override private\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._loadedOverlay = undefined;\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 { type Map, Util } from 'leaflet';\n\nimport { BaseAdapter } from '../BaseAdapter';\n\nimport { ImageLayer } from './ImageLayer';\nimport imageQueue from './imageQueue';\n\nimport type {\n MainLayerAdapter,\n UpdateLayerAdapterOptions,\n} from '@nextgis/webmap';\nimport type { ImageAdapterOptions } from '@nextgis/webmap';\n\nexport class ImageAdapter\n extends BaseAdapter<ImageAdapterOptions>\n implements MainLayerAdapter<Map>\n{\n static queue = imageQueue;\n\n layer?: ImageLayer;\n\n addLayer(options: ImageAdapterOptions): any {\n const url = options && options.url;\n if (url) {\n const updateWmsParamsFromOpt = options.updateWmsParams;\n this.layer = new ImageLayer(url, {\n pane: this.pane,\n headers: options.headers,\n setViewDelay: options.setViewDelay,\n // TODO: safe remove, use only options.nativeOptions\n ...{\n transparent: true,\n ...options,\n opacity: options.opacity ?? undefined,\n },\n ...options.params,\n ...options.nativeOptions,\n maxZoom: 12,\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 updateLayer(options?: UpdateLayerAdapterOptions): void {\n if (this.layer) {\n const params = options?.params || {};\n\n Util.extend(this.layer.wmsParams, params);\n this.layer.update();\n }\n }\n}\n","import { DomUtil, GridLayer, Util } from 'leaflet';\n\nimport { debounce } from '../../../utils/src';\n\nimport { callAjax } from './callAjax';\n\ntype Constructor = new (...args: any[]) => any;\n\nexport function makeRemote<TBase extends Constructor>(Base: TBase): TBase {\n return class RemoteTileLayer extends Base {\n constructor(...args: any[]) {\n super(...args);\n if (this.options.setViewDelay) {\n this._update = debounce((...a: any[]) => {\n // @ts-expect-error Property '_update' does not exist on type 'GridLayer'.\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 const src = this.getTileUrl(coords);\n\n const tile = document.createElement('img');\n const [promise, abortFunc] = callAjax({\n src,\n withCredentials: this.options.withCredentials,\n headers: this.options.headers,\n });\n promise.then((response) => {\n tile.src = response;\n done(null, tile);\n });\n (tile as any).abort = abortFunc;\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 const tiles = this._tiles;\n\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","// 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\n return this[key as keyof PropertyDescriptor];\n },\n };\n };\n}\n","import { TileLayer as TL } from 'leaflet';\n\nimport { makeRemote } from '../../utils/makeRemoteTileLayer';\n\nimport type { TileLayerOptions } from 'leaflet';\n\nexport type TileLayerOptionsExtended = TileLayerOptions & {\n headers?: Record<string, any>;\n withCredentials?: boolean;\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 { updateUrlParams } from '@nextgis/utils';\nimport { TileLayer } from 'leaflet';\n\nimport { BaseAdapter } from '../BaseAdapter';\n\nimport { TileLayer as TL } from './TileLayer';\n\nimport type {\n MainLayerAdapter,\n TileAdapterOptions,\n UpdateLayerAdapterOptions,\n} 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 || opt.withCredentials) {\n layer = new TL(url, {\n ...tileLayerOptions,\n headers: opt.headers,\n withCredentials: opt.withCredentials,\n setViewDelay: opt.setViewDelay,\n });\n } else {\n layer = new TileLayer(url, tileLayerOptions);\n }\n return layer;\n }\n }\n }\n\n updateLayer(options?: UpdateLayerAdapterOptions) {\n if (this.layer) {\n // @ts-expect-error the _url is private method\n const currentUrl = this.layer._url;\n if (options?.params) {\n this.layer.setUrl(updateUrlParams(currentUrl, options.params));\n }\n this.layer.redraw();\n }\n }\n}\n","import { TileLayer } from 'leaflet';\n\nimport { makeRemote } from '../../utils/makeRemoteTileLayer';\n\nimport type { WMSOptions } from 'leaflet';\n\ntype LayerOptions = WMSOptions & { headers: any; withCredentials?: boolean };\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 type { LngLatBoundsArray } from '@nextgis/utils';\nimport type { LatLngBoundsExpression } from 'leaflet';\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 { Control, latLng, latLngBounds, Map } from 'leaflet';\n\nimport { AttributionControl } from './controls/Attribution';\nimport { createButtonControl } from './controls/createButtonControl';\nimport { createControl } from './controls/createControl';\nimport { GeoJsonAdapter } from './layer-adapters/GeoJsonAdapter/GeoJsonAdapter';\nimport { ImageAdapter } from './layer-adapters/ImageAdapter/ImageAdapter';\nimport { OsmAdapter } from './layer-adapters/OsmAdapter';\nimport { TileAdapter } from './layer-adapters/TileAdapter/TileAdapter';\nimport { WmsAdapter } from './layer-adapters/WmsAdapter/WmsAdapter';\nimport { arrayToBoundsExpression } from './utils/arrayToBoundsExpression';\nimport { convertMapClickEvent } from './utils/convertMapClickEvent';\n\nimport type { LngLatArray, LngLatBoundsArray } from '@nextgis/utils';\nimport type {\n ButtonControlOptions,\n CreateControlOptions,\n FitOptions,\n LayerAdapter,\n Locate,\n LocateOptions,\n LocationEvents,\n MainMapEvents,\n MapAdapter,\n MapControl,\n MapOptions,\n ViewOptions,\n} from '@nextgis/webmap';\nimport type {\n ControlPosition,\n FitBoundsOptions,\n GridLayer,\n Layer,\n LeafletEvent,\n LeafletMouseEvent,\n LocationEvent,\n} from 'leaflet';\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\n this._updateMinZoomForBounds(minZoom);\n this._watchSizeChangeToUpdateMinZoom();\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 this._updateMinZoomForBounds();\n } else {\n // @ts-expect-error `null` works for unset maxBounds, but not in typing\n map.setMaxBounds(null);\n this._updateMinZoomForBounds();\n }\n }\n if (maxZoom !== undefined) {\n map.setMaxZoom(maxZoom);\n }\n if (minZoom !== undefined) {\n this._updateMinZoomForBounds(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 if (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() {\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 this._updateMinZoomForBounds();\n });\n this._resizeObserver.observe(container);\n }\n }\n\n private _stopWatchSizeChangeToUpdateMinZoom() {\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 map.on('movestart', () => {\n ImageAdapter.queue.abort();\n });\n map.on('zoomstart', () => {\n ImageAdapter.queue.abort();\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 private _updateMinZoomForBounds(zoom?: number) {\n const map = this.map;\n if (map) {\n zoom = zoom ?? map.getMinZoom();\n const defaultBounds = latLngBounds(\n latLng(-90, -18000),\n latLng(90, 18000),\n );\n const maxBounds = map.options.maxBounds ?? defaultBounds;\n if (maxBounds !== undefined) {\n map.setMinZoom(0);\n const boundsZoom = map.getBoundsZoom(maxBounds, true);\n const minZoom = zoom < boundsZoom ? boundsZoom : zoom;\n\n map.options.minZoom = minZoom;\n map.setMinZoom(minZoom);\n\n if (map.getZoom() < minZoom) {\n map.setZoom(minZoom);\n }\n }\n }\n }\n}\n","import { DomEvent } from 'leaflet';\n\nimport { createControl } from './createControl';\n\nimport type { ButtonControlOptions, MapAdapter } from '@nextgis/webmap';\nimport type { 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","import { debounce, defined } from '@nextgis/utils';\nimport { DomEvent, FeatureGroup, GeoJSON } from 'leaflet';\n\nimport { boundsToArray } from '../../utils/boundsToArray';\nimport { detectType } from '../../utils/detectType';\nimport {\n createFeaturePositionOptions,\n filterGeometries,\n PAINT,\n typeAlias,\n} from '../../utils/geometries';\nimport { BaseAdapter } from '../BaseAdapter';\n\nimport { GeoJsonEvents } from './utils/GeoJsonEvents';\nimport { GeoJsonPaint } from './utils/GeojsonPaint';\n\nimport type { IconPaint, Paint, VectorAdapterLayerPaint } from '@nextgis/paint';\nimport type { LngLatBoundsArray } from '@nextgis/utils';\nimport type {\n DataLayerFilter,\n GeoJsonAdapterOptions,\n LayerDefinition,\n OnLayerSelectType,\n PopupOnCloseFunction,\n PopupOptions,\n VectorAdapterLayerType,\n VectorLayerAdapter,\n} from '@nextgis/webmap';\nimport type { Feature, GeoJsonObject, Point } from 'geojson';\nimport type {\n GeoJSONOptions,\n LatLng,\n LatLngExpression,\n Layer,\n LeafletMouseEvent,\n Map,\n PopupOptions as LPopupOptions,\n} from 'leaflet';\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 type?: VectorAdapterLayerType;\n _layers: LayerDef[] = [];\n _events: GeoJsonEvents;\n private paint?: Paint;\n private selectedPaint?: Paint;\n\n private _selectedLayers: LayerDef[] = [];\n private _filteredLayers: LayerDef[] = [];\n private _filterFun?: DataLayerFilter<Feature>;\n private _openedPopup: [Layer, PopupOnCloseFunction[], LayerDef][] = [];\n private _paint: GeoJsonPaint;\n\n private $updateTooltip = debounce(() => {\n this.updateTooltip();\n }, 300);\n\n constructor(map: Map, options: GeoJsonAdapterOptions) {\n super(map, options);\n this._events = new GeoJsonEvents(this);\n this._paint = new GeoJsonPaint(this);\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 this.unselect();\n if (findFeatureFun) {\n const def = this._layers.filter(findFeatureFun);\n for (const x of def) {\n this._selectLayer(x, 'api');\n }\n } else if (!this.selected) {\n this.selected = true;\n if (this.selectedPaint) {\n this._paint.setPaintEachLayer(\n this.selectedPaint as VectorAdapterLayerPaint,\n );\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._paint.setPaintEachLayer(this.paint as VectorAdapterLayerPaint);\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._paint.setPaint(l, paint as VectorAdapterLayerPaint);\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._paint.setPaint(l, paint as VectorAdapterLayerPaint);\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._paint.setPaint(l, this.paint as VectorAdapterLayerPaint);\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._paint.setPaint(l, this.selectedPaint as VectorAdapterLayerPaint);\n }\n }\n\n _getSelected(layer: LayerDef['layer']) {\n return this._selectedLayers.find((x) => x.layer === layer);\n }\n\n private $unselect = () => {\n this.unselect();\n };\n\n private _updateTooltip(layerDef: Pick<LayerDef, 'feature' | 'layer'>) {\n const { feature, layer } = layerDef;\n const { label, labelField, labelOnHover } = this.options;\n if (layer) {\n layer.unbindTooltip();\n let message: string | undefined;\n if (feature.properties && labelField) {\n message = feature.properties[labelField];\n } else if (label) {\n message = label({\n target: this,\n ...layerDef,\n ...createFeaturePositionOptions(feature),\n });\n }\n if (message) {\n const permanent = !labelOnHover;\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 if (p) {\n p.once(\n 'remove',\n () => {\n close();\n },\n this,\n );\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 _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._paint.createPaintToLayer(\n iconOpt as IconPaint,\n );\n return pointToLayer(feature, latLng);\n };\n } else {\n lopt = {\n style: (feature) => {\n if (feature) {\n return this._paint.preparePaint({ ...PAINT, ...paint(feature) });\n } else {\n return this._paint.preparePaint({ ...PAINT, type: 'path' });\n }\n },\n };\n }\n } else {\n lopt = this._paint.createPaintOptions(paint as VectorAdapterLayerPaint);\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 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-expect-error Property 'interactive' does not exist on type 'LayerOptions'\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._events.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 _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 const { multiselect } = this.options;\n if (!multiselect) {\n // To unselect layer on another layer click\n (this.map as any)._addUnselectCb(() => {\n this._unSelectLayer(def);\n });\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._paint.setPaint(def, selectedPaint as VectorAdapterLayerPaint);\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._paint.setPaint(\n def,\n this.options.paint as VectorAdapterLayerPaint,\n );\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 _addMapClickListener() {\n const map = this.map;\n if (map) {\n const { unselectOnClick } = this.options;\n const uoc = unselectOnClick ?? true;\n if (uoc) {\n map.on('click', this.$unselect);\n }\n }\n }\n\n private _removeMapClickListener() {\n this.map.off('zoomend', this.$updateTooltip);\n this.map.off('moveend', this.$updateTooltip);\n this.map.off('click', this.$unselect);\n }\n\n private _addMapListener() {\n const map = this.map;\n if (map) {\n const { label, labelField, labelOnHover } = this.options;\n this._addMapClickListener();\n if ((labelField || label) && !labelOnHover) {\n map.on('zoomend', this.$updateTooltip);\n map.on('moveend', this.$updateTooltip);\n }\n }\n }\n\n private _removeMapListener() {\n this._removeMapClickListener();\n this.map.off('zoomend', this.$updateTooltip);\n this.map.off('moveend', this.$updateTooltip);\n }\n}\n","import { TileLayer } from 'leaflet';\n\nimport { BaseAdapter } from '../BaseAdapter';\n\nimport { WmsLayer as WMS } from './WmsLayer';\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 transparent: true,\n ...options.nativeOptions,\n };\n let layer;\n if (opt.headers || opt.withCredentials) {\n layer = new WMS(url, {\n ...layerOptions,\n headers: opt.headers,\n withCredentials: opt.withCredentials,\n });\n } else {\n layer = new TileLayer.WMS(url, layerOptions);\n }\n return layer;\n }\n }\n}\n","import { TileAdapter } from './TileAdapter/TileAdapter';\n\nimport type { MainLayerAdapter, TileAdapterOptions } from '@nextgis/webmap';\nimport type { TileLayer } from 'leaflet';\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 '&copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors',\n ...options,\n url,\n });\n }\n}\n","import { Control } from 'leaflet';\n\nimport type { AttributionControlOptions } from '@nextgis/webmap';\nimport type { ControlOptions } from 'leaflet';\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"],"names":["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","boundsToArray","bounds","ne","getNorthEast","sw","getSouthWest","lng","lat","findMostFrequentGeomType","arr","counts","fry","length","maxName","c","typeAlias","Point","LineString","MultiPoint","Polygon","MultiLineString","MultiPolygon","GeometryCollection","PAINT","stroke","opacity","backAliases","a","layerType","backAlias","push","geometryFilter","geometry","type","indexOf","featuresBounds","features","geoJsonLayer","GeoJSON","Array","isArray","forEach","f","addData","getBounds","createFeaturePositionOptions","getFeaturesBounds","getCenter","getFeaturesCenter","BaseAdapter","constructor","this","__publicField","order","pane","exist","getPane","createPane","zIndex","String","Math","round","addLayer","Object","assign","convertMapClickEvent","evt","coord","containerPoint","latLng","latlng","lngLat","pixel","left","x","top","y","source","createMouseEvent","layer","feature","target","__spreadValues","event","GeoJsonEvents","handleMouseEvents","onClick","onDoubleClick","onLayerClick","onMouseOut","onMouseOver","onClick_","_onclick","e","selected","_getSelected","_createMouseEvent","on","_ondblclick","stopPropagation","_mouseout","_mouseover","stopMouseEvents","off","GeoJsonPaint","setPaintEachLayer","paint","_layers","layerDef","setPaint","isPaintCallback","isPaint","marker","divIcon","_createDivIcon","setTimeout","setIcon","setStyle","preparePaint","aliases","readyPaint","radius","to","from","paintProp","defined","toLowerCase","Number","defineProperty","enumerable","value","icon","_a","html","rotate","className","toLIconOpt","__objRest","transform","innerHTML","DivIcon","createPaintToLayer","_","Marker","CircleMarker","createPaintOptions","geoJsonOptions","newPaint","pointToLayer","callAjax","src","headers","withCredentials","abortFunc","Promise","resolve","reject","xhr","XMLHttpRequest","open","responseType","h","setRequestHeader","onload","arrayBufferView","Uint8Array","response","blob","Blob","imageUrl","window","URL","webkitURL","createObjectURL","onerror","send","abort","imageQueue","Queue","concurrency","delay","ImageOverlay","LImageOverlay","super","cancelLoad","_aborter","_initImage","img","_image","promise","then","imgUrl","ImageLayer","Layer","url","service","request","version","layers","styles","format","transparent","crs","uppercase","attribution","isBack","minZoom","maxZoom","viewPortBuffer","setViewDelay","_url","params","opts","opt","Util","setOptions","wmsParams","defaultWmsParams","setParams","update","getAttribution","_currentOverlay","removeLayer","_currentUrl","getEvents","moveend","debounce","_map","updateWmsParams","getImageUrl","pad","_loadedOverlay","overlay","addTo","once","setOpacity","bringToBack","bringToFront","setZIndex","getZoom","size","getSize","factor","ceil","wmsVersion","parseFloat","projectionKey","nw","project","getNorthWest","se","getSouthEast","width","height","code","bbox","CRS","EPSG4326","join","pstr","getParamString","ImageAdapter","arguments","updateWmsParamsFromOpt","__spreadProps","nativeOptions","call","updateLayer","makeRemote","Base","args","_update","cb","wait","timeoutId","wrapper","clear","apply","clearTimeout","GridLayer","prototype","createTile","coords","done","getTileUrl","tile","crossOrigin","alt","setAttribute","_abortLoading","tiles","_tiles","tileZoom","_tileZoom","i","z","el","falseFn","complete","emptyImageUrl","DomUtil","remove","TileLayer","TL","urlTemplate","TileAdapter","tileLayerOptions","subdomains","setUrl","updateUrlParams","redraw","WmsLayer","WMS","arrayToBoundsExpression","_LeafletMapAdapter","layerAdapters","controlAdapters","EventEmitter","create","zoom","center","maxBounds","mb","mapAdapterOptions","Map","attributionControl","zoomControl","_updateMinZoomForBounds","_watchSizeChangeToUpdateMinZoom","defPane","_addUnselectCb","def","emitter","emit","_addMapListeners","destroy","_stopWatchSizeChangeToUpdateMinZoom","getContainer","getControlContainer","controlContainer","_controlContainer","Error","setCursor","cursor","setView","lngLatOrOpt","animate","setCenter","setZoom","fitBounds","b","setMaxBounds","setMaxZoom","panTo","offset","padding","getLayerAdapter","name","createButtonControl","link","title","href","stop","HTMLElement","addEventListener","parent","parentNode","removeChild","removeEventListener","addControl","position","replace","removeControl","showLayer","hideLayer","setLayerOpacity","setLayerOrder","onMapClick","converted","locate","events","locationfound","locationerror","locationFound","p","_unselectCb","container","ResizeObserver","_resizeObserver","observe","disconnect","_universalEvents","queue","_positionEvents","getMinZoom","defaultBounds","latLngBounds","setMinZoom","boundsZoom","getBoundsZoom","GEOJSON","updateTooltip","unselect","_events","_paint","FeatureGroup","selectedPaint","data","_addMapListener","beforeRemove","_removeMapListener","select","findFeatureFun","filter","_selectLayer","_unSelectLayer","_openedPopup","_removePopup","_selectedLayers","getSelected","getFiltered","_filteredLayers","fun","_filterFun","layer_","filteredLayers","cleanFilter","getLayers","visible","clearLayer","splice","clearLayers","setData","detectedType","geojson","geometries","g","detectType","console","warn","filterGeometries","_getGeoJsonOptions","openPopup","_openPopup","closePopup","_updateTooltip","getExtent","isValid","setSelectedPaint","l","updatePaint","updateSelectedPaint","find","label","labelField","labelOnHover","message","unbindTooltip","properties","permanent","bindTooltip","sticky","_0","_b","minWidth","autoPan","maxWidth","closeButton","closeButton_","selectOnHover","popup","_closeHandlers","onClose","handler","close","createPopupContent","popupContent","popupOptions","closeOnClick","autoClose","bindPopup","unselectOnClose","getPopup","unbindPopup","index","findIndex","closeHandlers","lopt","iconOpt","onEachFeature","_onEachFeature","ok","selectable","interactive","_selectOnLayerClick","isSelected","unselectOnSecondClick","multiselect","popupOnSelect","onSelect","_addMapClickListener","unselectOnClick","$unselect","_removeMapClickListener","$updateTooltip","IMAGE","TILE","layerOptions","OSM","ZOOM","Zoom","ATTRIBUTION","Attribution","customAttribution","attributions","addAttribution","LeafletMapAdapter"],"mappings":"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"}
1
+ {"version":3,"file":"leaflet-map-adapter.esm-bundler.prod.js","sources":["../src/controls/createControl.ts","../src/utils/boundsToArray.ts","../src/utils/detectType.ts","../src/utils/geometries.ts","../src/layer-adapters/BaseAdapter.ts","../src/utils/convertMapClickEvent.ts","../src/utils/createMouseEvent.ts","../src/layer-adapters/GeoJsonAdapter/utils/GeoJsonEvents.ts","../src/layer-adapters/GeoJsonAdapter/utils/GeojsonPaint.ts","../src/utils/callAjax.ts","../src/layer-adapters/ImageAdapter/imageQueue.ts","../src/layer-adapters/ImageAdapter/ImageOverlay.ts","../src/layer-adapters/ImageAdapter/ImageLayer.ts","../src/layer-adapters/ImageAdapter/ImageAdapter.ts","../src/utils/makeRemoteTileLayer.ts","../../utils/src/debounce.ts","../src/layer-adapters/TileAdapter/TileLayer.ts","../src/layer-adapters/TileAdapter/TileAdapter.ts","../src/layer-adapters/WmsAdapter/WmsLayer.ts","../src/utils/arrayToBoundsExpression.ts","../src/LeafletMapAdapter.ts","../src/controls/createButtonControl.ts","../src/layer-adapters/GeoJsonAdapter/GeoJsonAdapter.ts","../src/layer-adapters/WmsAdapter/WmsAdapter.ts","../src/layer-adapters/OsmAdapter.ts","../src/controls/Attribution.ts"],"sourcesContent":["import { Control, DomEvent } from 'leaflet';\n\nimport type {\n CreateControlOptions,\n MapAdapter,\n MapControl,\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 type { LngLatBoundsArray } from '@nextgis/utils';\nimport type { LatLngBounds } from 'leaflet';\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 type {\n Feature,\n FeatureCollection,\n GeoJsonGeometryTypes,\n GeoJsonObject,\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 { GeoJSON } from 'leaflet';\n\nimport { boundsToArray } from './boundsToArray';\n\nimport type { LngLatArray, LngLatBoundsArray } from '@nextgis/utils';\nimport type { FeaturePosition, VectorAdapterLayerType } from '@nextgis/webmap';\nimport type {\n Feature,\n FeatureCollection,\n GeoJsonGeometryTypes,\n GeoJsonObject,\n GeometryCollection,\n} from 'geojson';\nimport type { CircleMarkerOptions, LatLngBounds, PathOptions } from 'leaflet';\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} as PathOptions & CircleMarkerOptions;\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 { AdapterOptions, MainLayerAdapter } 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(\n public map: Map,\n public options: O,\n ) {\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 type { MapClickEvent } from '@nextgis/webmap';\nimport type { LeafletMouseEvent } from 'leaflet';\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 { convertMapClickEvent } from './convertMapClickEvent';\nimport { createFeaturePositionOptions } from './geometries';\n\nimport type { LayerAdapter, OnLayerMouseOptions } from '@nextgis/webmap';\nimport type { LeafletMouseEvent } from 'leaflet';\n\nimport type { LayerDef } from '../layer-adapters/GeoJsonAdapter/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","import { DomEvent, type Layer } from 'leaflet';\n\nimport { createMouseEvent } from '../../../utils/createMouseEvent';\n\nimport type { OnLayerMouseOptions } from '@nextgis/webmap';\nimport type { LeafletEvent, LeafletMouseEvent } from 'leaflet';\n\nimport type { GeoJsonAdapter } from '../GeoJsonAdapter';\n\nexport class GeoJsonEvents {\n private layer: GeoJsonAdapter;\n\n private _onclick?: (e: LeafletMouseEvent) => void;\n private _ondblclick?: (e: LeafletMouseEvent) => void;\n private _mouseout?: (e: LeafletMouseEvent) => void;\n private _mouseover?: (e: LeafletMouseEvent) => void;\n\n constructor(layer: GeoJsonAdapter) {\n this.layer = layer;\n }\n\n handleMouseEvents(layer: Layer) {\n const { onClick, onDoubleClick, onLayerClick, onMouseOut, onMouseOver } =\n this.layer.options;\n // TODO: remove backward compatibility for onLayerClick\n const onClick_ = onClick || onLayerClick;\n\n if (onClick_) {\n this._onclick = (e: LeafletMouseEvent) => {\n const selected = !!this.layer._getSelected(layer);\n onClick_({\n selected,\n ...this._createMouseEvent(e),\n });\n };\n layer.on('click', this._onclick, this);\n }\n if (onDoubleClick) {\n this._ondblclick = (e: LeafletMouseEvent) => {\n DomEvent.stopPropagation(e);\n const selected = !!this.layer._getSelected(layer);\n onDoubleClick({\n selected,\n ...this._createMouseEvent(e),\n });\n };\n layer.on('dblclick', this._ondblclick, this);\n }\n if (onMouseOut) {\n this._mouseout = (e: LeafletMouseEvent) => {\n onMouseOut(this._createMouseEvent(e));\n };\n layer.on('mouseout', this._mouseout, this);\n }\n if (onMouseOver) {\n this._mouseover = (e: LeafletMouseEvent) => {\n onMouseOver(this._createMouseEvent(e));\n };\n layer.on('mouseover', this._mouseover, this);\n }\n }\n\n stopMouseEvents(layer: Layer) {\n if (this._mouseover) {\n layer.off('mouseover', this._mouseover, this);\n }\n if (this._mouseout) {\n layer.off('mouseout', this._mouseout, this);\n }\n if (this._onclick) {\n layer.off('click', this._onclick, this);\n }\n }\n\n private _createMouseEvent(source: LeafletEvent): OnLayerMouseOptions {\n return createMouseEvent({\n layer: this.layer,\n source: source as LeafletMouseEvent,\n });\n }\n}\n","import { isPaint, isPaintCallback } from '@nextgis/paint';\nimport { defined } from '@nextgis/utils';\nimport { CircleMarker, DivIcon, Marker } from 'leaflet';\n\nimport { PAINT } from '../../../utils/geometries';\n\nimport type {\n IconPaint,\n PathPaint,\n VectorAdapterLayerPaint,\n} from '@nextgis/paint';\nimport type {\n CircleMarkerOptions,\n GeoJSONOptions,\n LatLngExpression,\n Path,\n PathOptions,\n} from 'leaflet';\n\nimport type { GeoJsonAdapter, LayerDef } from '../GeoJsonAdapter';\n\nexport class GeoJsonPaint {\n private layer: GeoJsonAdapter;\n\n constructor(layer: GeoJsonAdapter) {\n this.layer = layer;\n }\n\n setPaintEachLayer(paint: VectorAdapterLayerPaint) {\n this.layer._layers.forEach((layerDef) => {\n this.setPaint(layerDef, paint);\n });\n }\n\n setPaint(layerDef: LayerDef, paint: VectorAdapterLayerPaint) {\n let style: VectorAdapterLayerPaint | undefined = undefined;\n const { layer, feature } = layerDef;\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.layer.type === 'point' && style.type === 'icon') {\n const marker = layer as Marker;\n const divIcon = this._createDivIcon(style);\n setTimeout(() => {\n marker.setIcon(divIcon);\n }, 10);\n } else if ('setStyle' in layer) {\n (layer as Path).setStyle(this.preparePaint(style));\n }\n }\n }\n }\n\n preparePaint(\n paint: VectorAdapterLayerPaint,\n ): PathOptions & CircleMarkerOptions {\n if (paint.type !== 'get-paint') {\n const paintAliases: [keyof PathOptions, keyof PathPaint][] = [\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.layer.type === 'line'\n ? [\n ['color', 'strokeColor'],\n ['opacity', 'strokeOpacity'],\n ['weight', 'weight'],\n ]\n : paintAliases;\n\n const readyPaint = {} as 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 const opacity = this.layer.options.opacity;\n let paintProp = (paint as PathPaint)[from];\n if (defined(opacity) && from.toLowerCase().indexOf('opacity') !== -1) {\n paintProp = Number(paintProp) * 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 _createDivIcon(icon: IconPaint) {\n const { html, rotate, className, ...toLIconOpt } = icon;\n\n const element = document.createElement('div');\n if (className) {\n element.className = className;\n }\n if (rotate) {\n element.style.transform = `rotateZ(${rotate}deg)`;\n }\n if (html) {\n element.innerHTML = html;\n }\n\n const divIcon = new DivIcon({\n className: '',\n ...toLIconOpt,\n html: element,\n });\n return divIcon;\n }\n\n 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 (_: 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 (_: any, latlng: LatLngExpression) => {\n return new Marker(latlng);\n };\n }\n }\n return (_: any, latlng: LatLngExpression) => {\n const p: any = PAINT;\n return new CircleMarker(latlng, this.preparePaint({ ...p, ...icon }));\n };\n }\n\n createPaintOptions(paint: VectorAdapterLayerPaint): GeoJSONOptions {\n const geoJsonOptions: GeoJSONOptions = {};\n const newPaint = this.preparePaint(paint);\n if (paint) {\n geoJsonOptions.style = () => {\n return newPaint;\n };\n }\n if (this.layer.type === 'point') {\n (geoJsonOptions as any).pointToLayer = this.createPaintToLayer(\n paint as IconPaint,\n );\n } else if (this.layer.type === 'line') {\n newPaint.stroke = true;\n }\n return geoJsonOptions;\n }\n}\n","export function callAjax({\n src,\n headers,\n withCredentials,\n}: {\n src: string;\n headers?: Record<string, any>;\n withCredentials?: boolean;\n}): [Promise<string>, () => void] {\n let abortFunc = () => {\n // void\n };\n const promise = new Promise<string>((resolve, reject) => {\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 if (withCredentials) {\n xhr.withCredentials = withCredentials;\n }\n xhr.onload = function () {\n const arrayBufferView = new Uint8Array(this.response);\n const blob = new Blob([arrayBufferView], { type: 'image/png' });\n const urlCreator = window.URL || window.webkitURL;\n const imageUrl = urlCreator.createObjectURL(blob);\n resolve(imageUrl);\n };\n xhr.onerror = reject;\n xhr.send();\n abortFunc = () => {\n xhr.abort();\n resolve('');\n };\n });\n return [promise, abortFunc];\n}\n","import Queue from '@nextgis/queue';\n\nconst imageQueue = new Queue({ concurrency: 6, delay: 200 });\n\nexport default imageQueue;\n","import { ImageOverlay as LImageOverlay } from 'leaflet';\n\nimport { callAjax } from '../../utils/callAjax';\n\nimport imageQueue from './imageQueue';\n\nimport type { ImageOverlayOptions, LatLngBoundsExpression } from 'leaflet';\n\ntype IOptions = ImageOverlayOptions & {\n headers?: any;\n withCredentials?: boolean;\n};\n\nexport class ImageOverlay extends LImageOverlay {\n private _aborter?: () => 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._aborter) {\n this._aborter();\n this._aborter = undefined;\n }\n }\n\n _initImage(): void {\n // @ts-expect-error extend private method\n super._initImage();\n\n const { headers, withCredentials } = this.options as IOptions;\n // @ts-expect-error _image is a private property\n const img: HTMLImageElement = this._image;\n const src = img.src;\n img.src = '';\n // The queue is cleared in LeafletMapAdapter at each movestart and zoomstart event\n imageQueue.add(() => {\n const [promise, abortFunc] = callAjax({\n src,\n headers,\n withCredentials,\n });\n promise.then((imgUrl) => {\n img.src = imgUrl;\n });\n this._aborter = abortFunc;\n return promise;\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, isObject } from '@nextgis/utils';\nimport { CRS, Layer, Util } from 'leaflet';\n\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 withCredentials?: boolean;\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 maxZoom: undefined,\n pane: 'tilePane',\n headers: null,\n withCredentials: false,\n viewPortBuffer: 0,\n setViewDelay: 100,\n };\n\n wmsParams: Record<string, string>;\n private _url?: string;\n private _currentUrl?: string;\n private _currentOverlay?: ImageOverlay;\n private _loadedOverlay?: 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 if (!isObject(options[opt])) {\n params[opt] = options[opt];\n }\n }\n Util.setOptions(this, opts);\n this.wmsParams = Util.extend(\n {},\n this.defaultWmsParams,\n params?.params ?? {},\n );\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 const viewPortBuffer = this.options.viewPortBuffer || 0;\n const bounds = this._map.getBounds().pad(viewPortBuffer);\n if (this._loadedOverlay) {\n this._loadedOverlay.cancelLoad();\n this._loadedOverlay.off('load');\n this._loadedOverlay = undefined;\n }\n const overlay = new ImageOverlay(url, bounds, {\n opacity: 0,\n pane: this.options.pane,\n headers: this.options.headers,\n withCredentials: this.options.withCredentials,\n });\n overlay.addTo(this._map);\n this._loadedOverlay = overlay;\n\n // Keep current image overlay in place until new one loads\n // (inspired by esri.leaflet)\n overlay.once(\n 'load',\n () => {\n if (!this._map) {\n return;\n }\n // @ts-expect-error override private\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._loadedOverlay = undefined;\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 { type Map, Util } from 'leaflet';\n\nimport { BaseAdapter } from '../BaseAdapter';\n\nimport { ImageLayer } from './ImageLayer';\nimport imageQueue from './imageQueue';\n\nimport type {\n MainLayerAdapter,\n UpdateLayerAdapterOptions,\n} from '@nextgis/webmap';\nimport type { ImageAdapterOptions } from '@nextgis/webmap';\n\nexport class ImageAdapter\n extends BaseAdapter<ImageAdapterOptions>\n implements MainLayerAdapter<Map>\n{\n static queue = imageQueue;\n\n layer?: ImageLayer;\n\n addLayer(options: ImageAdapterOptions): any {\n const url = options && options.url;\n if (url) {\n const updateWmsParamsFromOpt = options.updateWmsParams;\n this.layer = new ImageLayer(url, {\n pane: this.pane,\n headers: options.headers,\n setViewDelay: options.setViewDelay,\n // TODO: safe remove, use only options.nativeOptions\n ...{\n transparent: true,\n ...options,\n opacity: options.opacity ?? undefined,\n },\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 updateLayer(options?: UpdateLayerAdapterOptions): void {\n if (this.layer) {\n const params = options?.params || {};\n\n Util.extend(this.layer.wmsParams, params);\n this.layer.update();\n }\n }\n}\n","import { DomUtil, GridLayer, Util } from 'leaflet';\n\nimport { debounce } from '../../../utils/src';\n\nimport { callAjax } from './callAjax';\n\ntype Constructor = new (...args: any[]) => any;\n\nexport function makeRemote<TBase extends Constructor>(Base: TBase): TBase {\n return class RemoteTileLayer extends Base {\n constructor(...args: any[]) {\n super(...args);\n if (this.options.setViewDelay) {\n this._update = debounce((...a: any[]) => {\n // @ts-expect-error Property '_update' does not exist on type 'GridLayer'.\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 const src = this.getTileUrl(coords);\n\n const tile = document.createElement('img');\n const [promise, abortFunc] = callAjax({\n src,\n withCredentials: this.options.withCredentials,\n headers: this.options.headers,\n });\n promise.then((response) => {\n tile.src = response;\n done(null, tile);\n });\n (tile as any).abort = abortFunc;\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 const tiles = this._tiles;\n\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","// 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\n return this[key as keyof PropertyDescriptor];\n },\n };\n };\n}\n","import { TileLayer as TL } from 'leaflet';\n\nimport { makeRemote } from '../../utils/makeRemoteTileLayer';\n\nimport type { TileLayerOptions } from 'leaflet';\n\nexport type TileLayerOptionsExtended = TileLayerOptions & {\n headers?: Record<string, any>;\n withCredentials?: boolean;\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 { updateUrlParams } from '@nextgis/utils';\nimport { TileLayer } from 'leaflet';\n\nimport { BaseAdapter } from '../BaseAdapter';\n\nimport { TileLayer as TL } from './TileLayer';\n\nimport type {\n MainLayerAdapter,\n TileAdapterOptions,\n UpdateLayerAdapterOptions,\n} 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 || opt.withCredentials) {\n layer = new TL(url, {\n ...tileLayerOptions,\n headers: opt.headers,\n withCredentials: opt.withCredentials,\n setViewDelay: opt.setViewDelay,\n });\n } else {\n layer = new TileLayer(url, tileLayerOptions);\n }\n return layer;\n }\n }\n }\n\n updateLayer(options?: UpdateLayerAdapterOptions) {\n if (this.layer) {\n // @ts-expect-error the _url is private method\n const currentUrl = this.layer._url;\n if (options?.params) {\n this.layer.setUrl(updateUrlParams(currentUrl, options.params));\n }\n this.layer.redraw();\n }\n }\n}\n","import { TileLayer } from 'leaflet';\n\nimport { makeRemote } from '../../utils/makeRemoteTileLayer';\n\nimport type { WMSOptions } from 'leaflet';\n\ntype LayerOptions = WMSOptions & { headers: any; withCredentials?: boolean };\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 type { LngLatBoundsArray } from '@nextgis/utils';\nimport type { LatLngBoundsExpression } from 'leaflet';\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 { Control, latLng, latLngBounds, Map } from 'leaflet';\n\nimport { AttributionControl } from './controls/Attribution';\nimport { createButtonControl } from './controls/createButtonControl';\nimport { createControl } from './controls/createControl';\nimport { GeoJsonAdapter } from './layer-adapters/GeoJsonAdapter/GeoJsonAdapter';\nimport { ImageAdapter } from './layer-adapters/ImageAdapter/ImageAdapter';\nimport { OsmAdapter } from './layer-adapters/OsmAdapter';\nimport { TileAdapter } from './layer-adapters/TileAdapter/TileAdapter';\nimport { WmsAdapter } from './layer-adapters/WmsAdapter/WmsAdapter';\nimport { arrayToBoundsExpression } from './utils/arrayToBoundsExpression';\nimport { convertMapClickEvent } from './utils/convertMapClickEvent';\n\nimport type { LngLatArray, LngLatBoundsArray } from '@nextgis/utils';\nimport type {\n ButtonControlOptions,\n CreateControlOptions,\n FitOptions,\n LayerAdapter,\n Locate,\n LocateOptions,\n LocationEvents,\n MainMapEvents,\n MapAdapter,\n MapControl,\n MapOptions,\n ViewOptions,\n} from '@nextgis/webmap';\nimport type {\n ControlPosition,\n FitBoundsOptions,\n GridLayer,\n Layer,\n LeafletEvent,\n LeafletMouseEvent,\n LocationEvent,\n} from 'leaflet';\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\n this._updateMinZoomForBounds(minZoom);\n this._watchSizeChangeToUpdateMinZoom();\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 this._updateMinZoomForBounds();\n } else {\n // @ts-expect-error `null` works for unset maxBounds, but not in typing\n map.setMaxBounds(null);\n this._updateMinZoomForBounds();\n }\n }\n if (maxZoom !== undefined) {\n map.setMaxZoom(maxZoom);\n }\n if (minZoom !== undefined) {\n this._updateMinZoomForBounds(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 if (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() {\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 this._updateMinZoomForBounds();\n });\n this._resizeObserver.observe(container);\n }\n }\n\n private _stopWatchSizeChangeToUpdateMinZoom() {\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 map.on('movestart', () => {\n ImageAdapter.queue.abort();\n });\n map.on('zoomstart', () => {\n ImageAdapter.queue.abort();\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 private _updateMinZoomForBounds(zoom?: number) {\n const map = this.map;\n if (map) {\n zoom = zoom ?? map.getMinZoom();\n const defaultBounds = latLngBounds(\n latLng(-90, -18000),\n latLng(90, 18000),\n );\n const maxBounds = map.options.maxBounds ?? defaultBounds;\n if (maxBounds !== undefined) {\n map.setMinZoom(0);\n const boundsZoom = map.getBoundsZoom(maxBounds, true);\n const minZoom = zoom < boundsZoom ? boundsZoom : zoom;\n\n map.options.minZoom = minZoom;\n map.setMinZoom(minZoom);\n\n if (map.getZoom() < minZoom) {\n map.setZoom(minZoom);\n }\n }\n }\n }\n}\n","import { DomEvent } from 'leaflet';\n\nimport { createControl } from './createControl';\n\nimport type { ButtonControlOptions, MapAdapter } from '@nextgis/webmap';\nimport type { 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","import { debounce, defined } from '@nextgis/utils';\nimport { DomEvent, FeatureGroup, GeoJSON } from 'leaflet';\n\nimport { boundsToArray } from '../../utils/boundsToArray';\nimport { detectType } from '../../utils/detectType';\nimport {\n createFeaturePositionOptions,\n filterGeometries,\n PAINT,\n typeAlias,\n} from '../../utils/geometries';\nimport { BaseAdapter } from '../BaseAdapter';\n\nimport { GeoJsonEvents } from './utils/GeoJsonEvents';\nimport { GeoJsonPaint } from './utils/GeojsonPaint';\n\nimport type { IconPaint, Paint, VectorAdapterLayerPaint } from '@nextgis/paint';\nimport type { LngLatBoundsArray } from '@nextgis/utils';\nimport type {\n DataLayerFilter,\n GeoJsonAdapterOptions,\n LayerDefinition,\n OnLayerSelectType,\n PopupOnCloseFunction,\n PopupOptions,\n VectorAdapterLayerType,\n VectorLayerAdapter,\n} from '@nextgis/webmap';\nimport type { Feature, GeoJsonObject, Point } from 'geojson';\nimport type {\n GeoJSONOptions,\n LatLng,\n LatLngExpression,\n Layer,\n LeafletMouseEvent,\n Map,\n PopupOptions as LPopupOptions,\n} from 'leaflet';\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 type?: VectorAdapterLayerType;\n _layers: LayerDef[] = [];\n _events: GeoJsonEvents;\n private paint?: Paint;\n private selectedPaint?: Paint;\n\n private _selectedLayers: LayerDef[] = [];\n private _filteredLayers: LayerDef[] = [];\n private _filterFun?: DataLayerFilter<Feature>;\n private _openedPopup: [Layer, PopupOnCloseFunction[], LayerDef][] = [];\n private _paint: GeoJsonPaint;\n\n private $updateTooltip = debounce(() => {\n this.updateTooltip();\n }, 300);\n\n constructor(map: Map, options: GeoJsonAdapterOptions) {\n super(map, options);\n this._events = new GeoJsonEvents(this);\n this._paint = new GeoJsonPaint(this);\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 this.unselect();\n if (findFeatureFun) {\n const def = this._layers.filter(findFeatureFun);\n for (const x of def) {\n this._selectLayer(x, 'api');\n }\n } else if (!this.selected) {\n this.selected = true;\n if (this.selectedPaint) {\n this._paint.setPaintEachLayer(\n this.selectedPaint as VectorAdapterLayerPaint,\n );\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._paint.setPaintEachLayer(this.paint as VectorAdapterLayerPaint);\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._paint.setPaint(l, paint as VectorAdapterLayerPaint);\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._paint.setPaint(l, paint as VectorAdapterLayerPaint);\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._paint.setPaint(l, this.paint as VectorAdapterLayerPaint);\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._paint.setPaint(l, this.selectedPaint as VectorAdapterLayerPaint);\n }\n }\n\n _getSelected(layer: LayerDef['layer']) {\n return this._selectedLayers.find((x) => x.layer === layer);\n }\n\n private $unselect = () => {\n this.unselect();\n };\n\n private _updateTooltip(layerDef: Pick<LayerDef, 'feature' | 'layer'>) {\n const { feature, layer } = layerDef;\n const { label, labelField, labelOnHover } = this.options;\n if (layer) {\n layer.unbindTooltip();\n let message: string | undefined;\n if (feature.properties && labelField) {\n message = feature.properties[labelField];\n } else if (label) {\n message = label({\n target: this,\n ...layerDef,\n ...createFeaturePositionOptions(feature),\n });\n }\n if (message) {\n const permanent = !labelOnHover;\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 if (p) {\n p.once(\n 'remove',\n () => {\n close();\n },\n this,\n );\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 _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._paint.createPaintToLayer(\n iconOpt as IconPaint,\n );\n return pointToLayer(feature, latLng);\n };\n } else {\n lopt = {\n style: (feature) => {\n if (feature) {\n return this._paint.preparePaint({ ...PAINT, ...paint(feature) });\n } else {\n return this._paint.preparePaint({ ...PAINT, type: 'path' });\n }\n },\n };\n }\n } else {\n lopt = this._paint.createPaintOptions(paint as VectorAdapterLayerPaint);\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 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-expect-error Property 'interactive' does not exist on type 'LayerOptions'\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._events.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 _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 const { multiselect } = this.options;\n if (!multiselect) {\n // To unselect layer on another layer click\n (this.map as any)._addUnselectCb(() => {\n this._unSelectLayer(def);\n });\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._paint.setPaint(def, selectedPaint as VectorAdapterLayerPaint);\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._paint.setPaint(\n def,\n this.options.paint as VectorAdapterLayerPaint,\n );\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 _addMapClickListener() {\n const map = this.map;\n if (map) {\n const { unselectOnClick } = this.options;\n const uoc = unselectOnClick ?? true;\n if (uoc) {\n map.on('click', this.$unselect);\n }\n }\n }\n\n private _removeMapClickListener() {\n this.map.off('zoomend', this.$updateTooltip);\n this.map.off('moveend', this.$updateTooltip);\n this.map.off('click', this.$unselect);\n }\n\n private _addMapListener() {\n const map = this.map;\n if (map) {\n const { label, labelField, labelOnHover } = this.options;\n this._addMapClickListener();\n if ((labelField || label) && !labelOnHover) {\n map.on('zoomend', this.$updateTooltip);\n map.on('moveend', this.$updateTooltip);\n }\n }\n }\n\n private _removeMapListener() {\n this._removeMapClickListener();\n this.map.off('zoomend', this.$updateTooltip);\n this.map.off('moveend', this.$updateTooltip);\n }\n}\n","import { TileLayer } from 'leaflet';\n\nimport { BaseAdapter } from '../BaseAdapter';\n\nimport { WmsLayer as WMS } from './WmsLayer';\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 transparent: true,\n ...options.nativeOptions,\n };\n let layer;\n if (opt.headers || opt.withCredentials) {\n layer = new WMS(url, {\n ...layerOptions,\n headers: opt.headers,\n withCredentials: opt.withCredentials,\n });\n } else {\n layer = new TileLayer.WMS(url, layerOptions);\n }\n return layer;\n }\n }\n}\n","import { TileAdapter } from './TileAdapter/TileAdapter';\n\nimport type { MainLayerAdapter, TileAdapterOptions } from '@nextgis/webmap';\nimport type { TileLayer } from 'leaflet';\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 '&copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors',\n ...options,\n url,\n });\n }\n}\n","import { Control } from 'leaflet';\n\nimport type { AttributionControlOptions } from '@nextgis/webmap';\nimport type { ControlOptions } from 'leaflet';\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"],"names":["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","boundsToArray","bounds","ne","getNorthEast","sw","getSouthWest","lng","lat","findMostFrequentGeomType","arr","counts","fry","length","maxName","c","typeAlias","Point","LineString","MultiPoint","Polygon","MultiLineString","MultiPolygon","GeometryCollection","PAINT","stroke","opacity","backAliases","a","layerType","backAlias","push","geometryFilter","geometry","type","indexOf","featuresBounds","features","geoJsonLayer","GeoJSON","Array","isArray","forEach","f","addData","getBounds","createFeaturePositionOptions","getFeaturesBounds","getCenter","getFeaturesCenter","BaseAdapter","constructor","this","__publicField","order","pane","exist","getPane","createPane","zIndex","String","Math","round","addLayer","Object","assign","convertMapClickEvent","evt","coord","containerPoint","latLng","latlng","lngLat","pixel","left","x","top","y","source","createMouseEvent","layer","feature","target","__spreadValues","event","GeoJsonEvents","handleMouseEvents","onClick","onDoubleClick","onLayerClick","onMouseOut","onMouseOver","onClick_","_onclick","e","selected","_getSelected","_createMouseEvent","on","_ondblclick","stopPropagation","_mouseout","_mouseover","stopMouseEvents","off","GeoJsonPaint","setPaintEachLayer","paint","_layers","layerDef","setPaint","isPaintCallback","isPaint","marker","divIcon","_createDivIcon","setTimeout","setIcon","setStyle","preparePaint","aliases","readyPaint","radius","to","from","paintProp","defined","toLowerCase","Number","defineProperty","enumerable","value","icon","_a","html","rotate","className","toLIconOpt","__objRest","transform","innerHTML","DivIcon","createPaintToLayer","_","Marker","CircleMarker","createPaintOptions","geoJsonOptions","newPaint","pointToLayer","callAjax","src","headers","withCredentials","abortFunc","Promise","resolve","reject","xhr","XMLHttpRequest","open","responseType","h","setRequestHeader","onload","arrayBufferView","Uint8Array","response","blob","Blob","imageUrl","window","URL","webkitURL","createObjectURL","onerror","send","abort","imageQueue","Queue","concurrency","delay","ImageOverlay","LImageOverlay","super","cancelLoad","_aborter","_initImage","img","_image","promise","then","imgUrl","ImageLayer","Layer","url","service","request","version","layers","styles","format","transparent","crs","uppercase","attribution","isBack","minZoom","maxZoom","viewPortBuffer","setViewDelay","_url","params","opts","opt","isObject","Util","setOptions","wmsParams","defaultWmsParams","setParams","update","getAttribution","_currentOverlay","removeLayer","_currentUrl","getEvents","moveend","debounce","_map","updateWmsParams","getImageUrl","pad","_loadedOverlay","overlay","addTo","once","setOpacity","bringToBack","bringToFront","setZIndex","getZoom","size","getSize","factor","ceil","wmsVersion","parseFloat","projectionKey","nw","project","getNorthWest","se","getSouthEast","width","height","code","bbox","CRS","EPSG4326","join","pstr","getParamString","ImageAdapter","arguments","updateWmsParamsFromOpt","nativeOptions","call","updateLayer","makeRemote","Base","args","_update","cb","wait","timeoutId","wrapper","clear","apply","clearTimeout","GridLayer","prototype","createTile","coords","done","getTileUrl","tile","crossOrigin","alt","setAttribute","_abortLoading","tiles","_tiles","tileZoom","_tileZoom","i","z","el","falseFn","complete","emptyImageUrl","DomUtil","remove","TileLayer","TL","urlTemplate","TileAdapter","tileLayerOptions","subdomains","setUrl","updateUrlParams","redraw","WmsLayer","WMS","arrayToBoundsExpression","_LeafletMapAdapter","layerAdapters","controlAdapters","EventEmitter","create","zoom","center","maxBounds","mb","mapAdapterOptions","Map","attributionControl","zoomControl","_updateMinZoomForBounds","_watchSizeChangeToUpdateMinZoom","defPane","_addUnselectCb","def","emitter","emit","_addMapListeners","destroy","_stopWatchSizeChangeToUpdateMinZoom","getContainer","getControlContainer","controlContainer","_controlContainer","Error","setCursor","cursor","setView","lngLatOrOpt","animate","setCenter","setZoom","fitBounds","b","setMaxBounds","setMaxZoom","panTo","offset","padding","getLayerAdapter","name","createButtonControl","link","title","href","stop","HTMLElement","addEventListener","parent","parentNode","removeChild","removeEventListener","addControl","position","replace","removeControl","showLayer","hideLayer","setLayerOpacity","setLayerOrder","onMapClick","converted","locate","events","locationfound","locationerror","locationFound","p","_unselectCb","container","ResizeObserver","_resizeObserver","observe","disconnect","_universalEvents","queue","_positionEvents","getMinZoom","defaultBounds","latLngBounds","setMinZoom","boundsZoom","getBoundsZoom","GEOJSON","updateTooltip","unselect","_events","_paint","FeatureGroup","__spreadProps","selectedPaint","data","_addMapListener","beforeRemove","_removeMapListener","select","findFeatureFun","filter","_selectLayer","_unSelectLayer","_openedPopup","_removePopup","_selectedLayers","getSelected","getFiltered","_filteredLayers","fun","_filterFun","layer_","filteredLayers","cleanFilter","getLayers","visible","clearLayer","splice","clearLayers","setData","detectedType","geojson","geometries","g","detectType","console","warn","filterGeometries","_getGeoJsonOptions","openPopup","_openPopup","closePopup","_updateTooltip","getExtent","isValid","setSelectedPaint","l","updatePaint","updateSelectedPaint","find","label","labelField","labelOnHover","message","unbindTooltip","properties","permanent","bindTooltip","sticky","_0","_b","minWidth","autoPan","maxWidth","closeButton","closeButton_","selectOnHover","popup","_closeHandlers","onClose","handler","close","createPopupContent","popupContent","popupOptions","closeOnClick","autoClose","bindPopup","unselectOnClose","getPopup","unbindPopup","index","findIndex","closeHandlers","lopt","iconOpt","onEachFeature","_onEachFeature","ok","selectable","interactive","_selectOnLayerClick","isSelected","unselectOnSecondClick","multiselect","popupOnSelect","onSelect","_addMapClickListener","unselectOnClick","$unselect","_removeMapClickListener","$updateTooltip","IMAGE","TILE","layerOptions","OSM","ZOOM","Zoom","ATTRIBUTION","Attribution","customAttribution","attributions","addAttribution","LeafletMapAdapter"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** Bundle of @nextgis/leaflet-map-adapter; version: 3.0.0-alpha.13; author: NextGIS */
1
+ /** Bundle of @nextgis/leaflet-map-adapter; version: 3.0.0-alpha.17; author: NextGIS */
2
2
  var LeafletMapAdapter = (function () {
3
3
  'use strict';
4
4
 
@@ -14656,6 +14656,10 @@ var LeafletMapAdapter = (function () {
14656
14656
  return val !== void 0 && val !== null;
14657
14657
  }
14658
14658
 
14659
+ function isObject(val) {
14660
+ return Object.prototype.toString.call(val) === "[object Object]";
14661
+ }
14662
+
14659
14663
  function updateUrlParams(urlStr, params) {
14660
14664
  const url = new URL(urlStr);
14661
14665
  const searchParams = new URLSearchParams(url.search);
@@ -15875,7 +15879,7 @@ var LeafletMapAdapter = (function () {
15875
15879
  for (opt in options) {
15876
15880
  if (opt in this.options) {
15877
15881
  opts[opt] = options[opt];
15878
- } else {
15882
+ } else if (!isObject(options[opt])) {
15879
15883
  params[opt] = options[opt];
15880
15884
  }
15881
15885
  }
@@ -16061,7 +16065,7 @@ var LeafletMapAdapter = (function () {
16061
16065
  const url = options && options.url;
16062
16066
  if (url) {
16063
16067
  const updateWmsParamsFromOpt = options.updateWmsParams;
16064
- this.layer = new ImageLayer(url, __spreadProps$3(__spreadValues$4(__spreadValues$4(__spreadValues$4({
16068
+ this.layer = new ImageLayer(url, __spreadValues$4(__spreadValues$4(__spreadValues$4({
16065
16069
  pane: this.pane,
16066
16070
  headers: options.headers,
16067
16071
  setViewDelay: options.setViewDelay
@@ -16069,9 +16073,7 @@ var LeafletMapAdapter = (function () {
16069
16073
  transparent: true
16070
16074
  }, options), {
16071
16075
  opacity: (_a = options.opacity) != null ? _a : void 0
16072
- })), options.params), options.nativeOptions), {
16073
- maxZoom: 12
16074
- }));
16076
+ })), options.params), options.nativeOptions));
16075
16077
  if (updateWmsParamsFromOpt) {
16076
16078
  const updateWmsParams = this.layer.updateWmsParams;
16077
16079
  this.layer.updateWmsParams = function(map) {