@nextgis/leaflet-map-adapter 4.0.0-alpha.1 → 4.0.0-alpha.4

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/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/layer-adapters/GeoJsonAdapter/GeoJsonAdapter.ts","../src/layer-adapters/WmsAdapter/WmsAdapter.ts","../src/layer-adapters/OsmAdapter.ts","../src/controls/Attribution.ts"],"sourcesContent":["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","import { getLayerRequestOptions } from '@nextgis/webmap';\n\nimport type { LayerRequestOptions } from '@nextgis/webmap';\n\nexport function callAjax({\n src,\n headers,\n withCredentials,\n request,\n}: {\n src: string;\n /** @deprecated use request.headers instead. */\n headers?: Record<string, any>;\n /** @deprecated use request.credentials instead. */\n withCredentials?: boolean;\n request?: LayerRequestOptions;\n}): [Promise<string>, () => void] {\n const layerRequest = getLayerRequestOptions({\n headers,\n request,\n withCredentials,\n });\n const requestHeaders = layerRequest?.headers || {};\n const controller = new AbortController();\n const promise = fetch(src, {\n cache: layerRequest?.cache,\n credentials: layerRequest?.credentials,\n headers: requestHeaders,\n signal: controller.signal,\n })\n .then((response) => {\n if (!response.ok) {\n throw new Error(response.statusText);\n }\n return response.blob();\n })\n .then((blob) => {\n const urlCreator = window.URL || window.webkitURL;\n return urlCreator.createObjectURL(blob);\n })\n .catch((er: Error) => {\n if (er.name === 'AbortError') {\n return '';\n }\n throw er;\n });\n const abortFunc = () => {\n controller.abort();\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 { LayerRequestOptions } from '@nextgis/webmap';\nimport type { ImageOverlayOptions, LatLngBoundsExpression } from 'leaflet';\n\ntype IOptions = ImageOverlayOptions & {\n /** @deprecated use request.headers instead. */\n headers?: any;\n request?: LayerRequestOptions;\n /** @deprecated use request.credentials instead. */\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, request, 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 request,\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 { Layer, Util } from 'leaflet';\n\nimport { ImageOverlay } from './ImageOverlay';\n\nimport type { LayerRequestOptions } from '@nextgis/webmap';\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 /** @deprecated use request.headers instead. */\n headers?: any;\n request?: LayerRequestOptions;\n /** @deprecated use request.credentials instead. */\n withCredentials?: boolean;\n viewPortBuffer?: number;\n setViewDelay?: number;\n params?: Record<string, unknown>;\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 request: 'GetMap',\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 const val = options[opt];\n if (opt in this.options) {\n opts[opt] = val;\n }\n }\n\n if (options.params) {\n for (const param in options.params) {\n const val = options.params[param];\n if (\n !isObject(val) &&\n !Array.isArray(val) &&\n typeof val !== 'function'\n ) {\n params[param] = val;\n }\n }\n }\n Util.setOptions(this, opts);\n this.wmsParams = Util.extend({}, this.defaultWmsParams, params);\n }\n\n setParams(params: Record<string, any>): void {\n Util.extend(this.wmsParams, params);\n this.update();\n }\n\n getAttribution(): string {\n return this.options.attribution || '';\n }\n\n onAdd(): this {\n this.update();\n return this;\n }\n\n onRemove(map: Map): this {\n if (this._currentOverlay) {\n this._currentOverlay.cancelLoad();\n map.removeLayer(this._currentOverlay);\n delete this._currentOverlay;\n }\n if (this._currentUrl) {\n delete this._currentUrl;\n }\n return this;\n }\n\n getEvents(): {\n moveend: () => void;\n } {\n return {\n moveend: debounce(this.update, this.options.setViewDelay),\n };\n }\n\n update(): void {\n if (!this._map) {\n return;\n }\n // Determine image URL and whether it has changed since last update\n this.updateWmsParams();\n const url = this.getImageUrl();\n if (this._currentUrl === url) {\n return;\n }\n this._currentUrl = url;\n\n 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 request: this.options.request,\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 crs = this.options.crs || map.options.crs;\n\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.bbox = [nw.x, se.y, se.x, nw.y];\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 { getLayerRequestOptions } from '@nextgis/webmap';\nimport { 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 const request = getLayerRequestOptions(options);\n this.layer = new ImageLayer(url, {\n pane: this.pane,\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 request,\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 request: this.options.request,\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 { LayerRequestOptions } from '@nextgis/webmap';\nimport type { TileLayerOptions } from 'leaflet';\n\nexport type TileLayerOptionsExtended = TileLayerOptions & {\n /** @deprecated use request.headers instead. */\n headers?: Record<string, any>;\n request?: LayerRequestOptions;\n /** @deprecated use request.credentials instead. */\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 { getLayerRequestOptions } from '@nextgis/webmap';\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 const request = getLayerRequestOptions(opt);\n if (request) {\n layer = new TL(url, {\n ...tileLayerOptions,\n request,\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 { LayerRequestOptions } from '@nextgis/webmap';\nimport type { WMSOptions } from 'leaflet';\n\ntype LayerOptions = WMSOptions & {\n /** @deprecated use request.headers instead. */\n headers?: any;\n request?: LayerRequestOptions;\n /** @deprecated use request.credentials instead. */\n withCredentials?: boolean;\n};\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 {\n createButtonControl,\n createControl,\n createToggleControl,\n LeafletControlContainer,\n} from '@nextgis/leaflet-control-container';\nimport { EventEmitter } from 'events';\nimport { Control, latLng, latLngBounds, Map } from 'leaflet';\n\nimport { AttributionControl } from './controls/Attribution';\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 AddControlOptions,\n ButtonControlOptions,\n ControlTargetPosition,\n CreateControlOptions,\n FitOptions,\n LayerAdapter,\n Locate,\n LocateOptions,\n LocationEvents,\n MainMapEvents,\n MapAdapter,\n MapControl,\n MapOptions,\n ToggleControl,\n ToggleControlOptions,\n ViewOptions,\n} from '@nextgis/webmap';\nimport type {\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 _controlContainer?: LeafletControlContainer;\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._controlContainer = new LeafletControlContainer(this.map);\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 if (this._controlContainer) {\n this._controlContainer.detach();\n this._controlContainer = undefined;\n }\n this._stopWatchSizeChangeToUpdateMinZoom();\n }\n\n getContainer(): HTMLElement | undefined {\n return this.map && this.map.getContainer();\n }\n\n getControlContainer(): HTMLElement {\n if (this._controlContainer) {\n return this._controlContainer.getContainer();\n }\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 createToggleControl(options: ToggleControlOptions): Control & ToggleControl {\n return createToggleControl(options, this);\n }\n\n addControl(\n control: Control,\n position: ControlTargetPosition,\n options?: AddControlOptions,\n ): Control | undefined {\n if (this._controlContainer) {\n return this._controlContainer.addControl(control, position, options);\n }\n }\n\n removeControl(control: Control): void {\n if (this._controlContainer) {\n this._controlContainer.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 { 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 { getLayerRequestOptions } from '@nextgis/webmap';\nimport { 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 const request = getLayerRequestOptions(opt);\n if (request) {\n layer = new WMS(url, {\n ...layerOptions,\n request,\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":["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","map","options","this","__publicField","order","pane","exist","getPane","createPane","style","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","DomEvent","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","element","document","createElement","transform","innerHTML","DivIcon","createPaintToLayer","_","Marker","CircleMarker","createPaintOptions","geoJsonOptions","newPaint","pointToLayer","callAjax","src","headers","withCredentials","request","layerRequest","getLayerRequestOptions","requestHeaders","controller","AbortController","fetch","cache","credentials","signal","then","response","ok","Error","statusText","blob","window","URL","webkitURL","createObjectURL","catch","er","name","abort","imageQueue","Queue","concurrency","delay","ImageOverlay","LImageOverlay","imageUrl","super","cancelLoad","_aborter","_initImage","img","_image","add","promise","abortFunc","imgUrl","ImageLayer","Layer","url","crs","uppercase","attribution","isBack","minZoom","maxZoom","viewPortBuffer","setViewDelay","_url","params","opts","opt","param","val","isObject","Util","setOptions","wmsParams","extend","defaultWmsParams","setParams","update","getAttribution","onAdd","onRemove","_currentOverlay","removeLayer","_currentUrl","getEvents","moveend","debounce","_map","updateWmsParams","getImageUrl","pad","_loadedOverlay","overlay","addTo","once","setOpacity","bringToBack","bringToFront","setZIndex","getZoom","size","getSize","factor","ceil","nw","project","getNorthWest","se","getSouthEast","width","height","bbox","pstr","getParamString","ImageAdapter","arguments","updateWmsParamsFromOpt","__spreadProps","transparent","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","onload","falseFn","onerror","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","_controlContainer","LeafletControlContainer","_addUnselectCb","def","emitter","emit","_addMapListeners","destroy","detach","_stopWatchSizeChangeToUpdateMinZoom","getContainer","getControlContainer","controlContainer","setCursor","cursor","setView","lngLatOrOpt","animate","setCenter","setZoom","fitBounds","b","setMaxBounds","setMaxZoom","panTo","offset","padding","getLayerAdapter","createControl","control","createButtonControl","createToggleControl","addControl","position","removeControl","showLayer","hideLayer","setLayerOpacity","setLayerOrder","layers","onMapClick","converted","locate","events","locationfound","locationerror","locationFound","stop","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","content","createPopupContent","popupContent","popupOptions","closeOnClick","autoClose","bindPopup","unselectOnClose","getPopup","unbindPopup","index","findIndex","closeHandlers","h","lopt","iconOpt","onEachFeature","_onEachFeature","selectable","interactive","_selectOnLayerClick","isSelected","unselectOnSecondClick","multiselect","popupOnSelect","onSelect","_addMapClickListener","unselectOnClick","$unselect","_removeMapClickListener","$updateTooltip","IMAGE","TILE","layerOptions","format","OSM","ZOOM","Control","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/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/layer-adapters/GeoJsonAdapter/GeoJsonAdapter.ts","../src/layer-adapters/WmsAdapter/WmsAdapter.ts","../src/layer-adapters/OsmAdapter.ts","../src/controls/Attribution.ts"],"sourcesContent":["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","import { getLayerRequestOptions } from '@nextgis/webmap';\n\nimport type { LayerRequestOptions } from '@nextgis/webmap';\n\nexport function callAjax({\n src,\n headers,\n withCredentials,\n request,\n}: {\n src: string;\n /** @deprecated use request.headers instead. */\n headers?: Record<string, any>;\n /** @deprecated use request.credentials instead. */\n withCredentials?: boolean;\n request?: LayerRequestOptions;\n}): [Promise<string>, () => void] {\n const layerRequest = getLayerRequestOptions({\n headers,\n request,\n withCredentials,\n });\n const requestHeaders = layerRequest?.headers || {};\n const controller = new AbortController();\n const promise = fetch(src, {\n cache: layerRequest?.cache,\n credentials: layerRequest?.credentials,\n headers: requestHeaders,\n signal: controller.signal,\n })\n .then((response) => {\n if (!response.ok) {\n throw new Error(response.statusText);\n }\n return response.blob();\n })\n .then((blob) => {\n const urlCreator = window.URL || window.webkitURL;\n return urlCreator.createObjectURL(blob);\n })\n .catch((er: Error) => {\n if (er.name === 'AbortError') {\n return '';\n }\n throw er;\n });\n const abortFunc = () => {\n controller.abort();\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 { LayerRequestOptions } from '@nextgis/webmap';\nimport type { ImageOverlayOptions, LatLngBoundsExpression } from 'leaflet';\n\ntype IOptions = ImageOverlayOptions & {\n /** @deprecated use request.headers instead. */\n headers?: any;\n request?: LayerRequestOptions;\n /** @deprecated use request.credentials instead. */\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, request, 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 request,\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 { Layer, Util } from 'leaflet';\n\nimport { ImageOverlay } from './ImageOverlay';\n\nimport type { LayerRequestOptions } from '@nextgis/webmap';\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 /** @deprecated use request.headers instead. */\n headers?: any;\n request?: LayerRequestOptions;\n /** @deprecated use request.credentials instead. */\n withCredentials?: boolean;\n viewPortBuffer?: number;\n setViewDelay?: number;\n params?: Record<string, unknown>;\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 request: 'GetMap',\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 const val = options[opt];\n if (opt in this.options) {\n opts[opt] = val;\n }\n }\n\n if (options.params) {\n for (const param in options.params) {\n const val = options.params[param];\n if (\n !isObject(val) &&\n !Array.isArray(val) &&\n typeof val !== 'function'\n ) {\n params[param] = val;\n }\n }\n }\n Util.setOptions(this, opts);\n this.wmsParams = Util.extend({}, this.defaultWmsParams, params);\n }\n\n setParams(params: Record<string, any>): void {\n Util.extend(this.wmsParams, params);\n this.update();\n }\n\n getAttribution(): string {\n return this.options.attribution || '';\n }\n\n onAdd(): this {\n this.update();\n return this;\n }\n\n onRemove(map: Map): this {\n if (this._currentOverlay) {\n this._currentOverlay.cancelLoad();\n map.removeLayer(this._currentOverlay);\n delete this._currentOverlay;\n }\n if (this._currentUrl) {\n delete this._currentUrl;\n }\n return this;\n }\n\n getEvents(): {\n moveend: () => void;\n } {\n return {\n moveend: debounce(this.update, this.options.setViewDelay),\n };\n }\n\n update(): void {\n if (!this._map) {\n return;\n }\n // Determine image URL and whether it has changed since last update\n this.updateWmsParams();\n const url = this.getImageUrl();\n if (this._currentUrl === url) {\n return;\n }\n this._currentUrl = url;\n\n 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 request: this.options.request,\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 crs = this.options.crs || map.options.crs;\n\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.bbox = [nw.x, se.y, se.x, nw.y];\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 { getLayerRequestOptions } from '@nextgis/webmap';\nimport { 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 const request = getLayerRequestOptions(options);\n this.layer = new ImageLayer(url, {\n pane: this.pane,\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 request,\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 request: this.options.request,\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 { LayerRequestOptions } from '@nextgis/webmap';\nimport type { TileLayerOptions } from 'leaflet';\n\nexport type TileLayerOptionsExtended = TileLayerOptions & {\n /** @deprecated use request.headers instead. */\n headers?: Record<string, any>;\n request?: LayerRequestOptions;\n /** @deprecated use request.credentials instead. */\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 { getLayerRequestOptions } from '@nextgis/webmap';\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 const request = getLayerRequestOptions(opt);\n if (request) {\n layer = new TL(url, {\n ...tileLayerOptions,\n request,\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 { LayerRequestOptions } from '@nextgis/webmap';\nimport type { WMSOptions } from 'leaflet';\n\ntype LayerOptions = WMSOptions & {\n /** @deprecated use request.headers instead. */\n headers?: any;\n request?: LayerRequestOptions;\n /** @deprecated use request.credentials instead. */\n withCredentials?: boolean;\n};\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 {\n createButtonControl,\n createControl,\n createToggleControl,\n LeafletControlContainer,\n} from '@nextgis/leaflet-control-container';\nimport { EventEmitter } from 'events';\nimport { Control, latLng, latLngBounds, Map } from 'leaflet';\n\nimport { AttributionControl } from './controls/Attribution';\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 AddControlOptions,\n ButtonControlOptions,\n ControlTargetPosition,\n CreateControlOptions,\n FitOptions,\n LayerAdapter,\n Locate,\n LocateOptions,\n LocationEvents,\n MainMapEvents,\n MapAdapter,\n MapControl,\n MapOptions,\n ToggleControl,\n ToggleControlOptions,\n ViewOptions,\n} from '@nextgis/webmap';\nimport type {\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 _controlContainer?: LeafletControlContainer;\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._controlContainer = new LeafletControlContainer(this.map);\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 if (this._controlContainer) {\n this._controlContainer.detach();\n this._controlContainer = undefined;\n }\n this._stopWatchSizeChangeToUpdateMinZoom();\n }\n\n getContainer(): HTMLElement | undefined {\n return this.map && this.map.getContainer();\n }\n\n getControlContainer(): HTMLElement {\n if (this._controlContainer) {\n return this._controlContainer.getContainer();\n }\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 createToggleControl(options: ToggleControlOptions): Control & ToggleControl {\n return createToggleControl(options, this);\n }\n\n addControl(\n control: Control,\n position: ControlTargetPosition,\n options?: AddControlOptions,\n ): Control | undefined {\n if (this._controlContainer) {\n return this._controlContainer.addControl(control, position, options);\n }\n }\n\n removeControl(control: Control): void {\n if (this._controlContainer) {\n this._controlContainer.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 { 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 { getLayerRequestOptions } from '@nextgis/webmap';\nimport { 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 version: options.version,\n transparent: options.transparent ?? true,\n ...options.params,\n ...options.nativeOptions,\n };\n let layer;\n const request = getLayerRequestOptions(opt);\n if (request) {\n layer = new WMS(url, {\n ...layerOptions,\n request,\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":["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","map","options","this","__publicField","order","pane","exist","getPane","createPane","style","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","DomEvent","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","element","document","createElement","transform","innerHTML","DivIcon","createPaintToLayer","_","Marker","CircleMarker","createPaintOptions","geoJsonOptions","newPaint","pointToLayer","callAjax","src","headers","withCredentials","request","layerRequest","getLayerRequestOptions","requestHeaders","controller","AbortController","fetch","cache","credentials","signal","then","response","ok","Error","statusText","blob","window","URL","webkitURL","createObjectURL","catch","er","name","abort","imageQueue","Queue","concurrency","delay","ImageOverlay","LImageOverlay","imageUrl","super","cancelLoad","_aborter","_initImage","img","_image","add","promise","abortFunc","imgUrl","ImageLayer","Layer","url","crs","uppercase","attribution","isBack","minZoom","maxZoom","viewPortBuffer","setViewDelay","_url","params","opts","opt","param","val","isObject","Util","setOptions","wmsParams","extend","defaultWmsParams","setParams","update","getAttribution","onAdd","onRemove","_currentOverlay","removeLayer","_currentUrl","getEvents","moveend","debounce","_map","updateWmsParams","getImageUrl","pad","_loadedOverlay","overlay","addTo","once","setOpacity","bringToBack","bringToFront","setZIndex","getZoom","size","getSize","factor","ceil","nw","project","getNorthWest","se","getSouthEast","width","height","bbox","pstr","getParamString","ImageAdapter","arguments","updateWmsParamsFromOpt","__spreadProps","transparent","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","onload","falseFn","onerror","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","_controlContainer","LeafletControlContainer","_addUnselectCb","def","emitter","emit","_addMapListeners","destroy","detach","_stopWatchSizeChangeToUpdateMinZoom","getContainer","getControlContainer","controlContainer","setCursor","cursor","setView","lngLatOrOpt","animate","setCenter","setZoom","fitBounds","b","setMaxBounds","setMaxZoom","panTo","offset","padding","getLayerAdapter","createControl","control","createButtonControl","createToggleControl","addControl","position","removeControl","showLayer","hideLayer","setLayerOpacity","setLayerOrder","layers","onMapClick","converted","locate","events","locationfound","locationerror","locationFound","stop","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","content","createPopupContent","popupContent","popupOptions","closeOnClick","autoClose","bindPopup","unselectOnClose","getPopup","unbindPopup","index","findIndex","closeHandlers","h","lopt","iconOpt","onEachFeature","_onEachFeature","selectable","interactive","_selectOnLayerClick","isSelected","unselectOnSecondClick","multiselect","popupOnSelect","onSelect","_addMapClickListener","unselectOnClick","$unselect","_removeMapClickListener","$updateTooltip","IMAGE","TILE","layerOptions","format","version","OSM","ZOOM","Control","Zoom","ATTRIBUTION","Attribution","customAttribution","attributions","addAttribution","LeafletMapAdapter"],"mappings":"0pBAGO,SAASA,EAAcC,GAC5B,MAAMC,EAAKD,EAAOE,eACZC,EAAKH,EAAOI,eAClB,MAAO,CAACD,EAAGE,IAAKF,EAAGG,IAAKL,EAAGI,IAAKJ,EAAGK,IACrC,CCCA,SAASC,EACPC,GAEA,MAAMC,EAAkC,CAAA,EACxC,IAAA,IAASC,EAAM,EAAGA,EAAMF,EAAIG,OAAQD,IAClCD,EAAOD,EAAIE,IAAQ,GAAKD,EAAOD,EAAIE,KAAS,GAE9C,IAAIE,EAAU,GACd,IAAA,MAAWC,KAAKJ,EAAQ,CAElBA,EAAOI,IADMD,EAAUH,EAAOG,GAAW,KAE3CA,EAAUC,EAEd,CACA,OAAOD,CACT,CCRO,MAAME,EAET,CACFC,MAAO,QACPC,WAAY,OACZC,WAAY,QACZC,QAAS,UACTC,gBAAiB,OACjBC,aAAc,UACdC,mBAAoB,WAGTC,EAAQ,CACnBC,QAAQ,EACRC,QAAS,GAGEC,EAET,CAAA,EAEJ,IAAA,MAAWC,MAAKZ,EAAW,CACzB,MAAMa,EAAYb,EAAUY,IACtBE,EAAYH,EAAYE,IAAc,GAC5CC,EAAUC,KAAKH,IACfD,EAAYE,GAAaC,CAC3B,CAEO,SAASE,EACdC,EACAC,GAGA,OAA6C,KADrBP,EAAYO,IAAS,IACtBC,QAAQF,EACjC,CAyBA,SAASG,EAAeC,GACtB,MAAMC,EAAe,IAAIC,EAGzB,OAFkBC,MAAMC,QAAQJ,GAAYA,EAAW,CAACA,IAC9CK,QAASC,GAAML,EAAaM,QAAQD,IACvCL,EAAaO,WACtB,CAaO,SAASC,EACdT,GAEA,MAAO,CACLQ,UAAW,IAfR,SACLR,GAEA,OAAOpC,EAAcmC,EAAeC,GACtC,CAWqBU,CAAkBV,GACnCW,UAAW,IAVR,SAA2BX,GAChC,MAAM7B,IAAEA,EAAAD,IAAKA,GAAQ6B,EAAeC,GAAUW,YAC9C,MAAO,CAACzC,EAAKC,EACf,CAOqByC,CAAkBZ,GAEvC,2JChGO,MAAMa,EAMX,WAAAC,CACSC,EACAC,GAEP,GAHOC,KAAAF,IAAAA,EACAE,KAAAD,QAAAA,EALTE,EAAAD,KAAA,SACAC,EAAAD,KAAU,OAAO,gBAMO,IAAlBD,EAAQG,MAAqB,CAC/B,MAAMC,EAAO,SAAWJ,EAAQG,MAChC,IAAIE,EAAQN,EAAIO,QAAQF,GACnBC,IACHA,EAAQN,EAAIQ,WAAWH,IAEzBC,EAAMG,MAAMC,OAASC,OAAOC,KAAKC,MAAsB,IAAhBZ,EAAQG,QAC/CF,KAAKG,KAAOA,CACd,CACF,CAEA,QAAAS,CAASb,GACPc,OAAOC,OAAOd,KAAKD,QAASA,EAE9B,ECxBK,SAASgB,EAAqBC,GACnC,MAAMC,EAAQD,EAAIE,eACZC,EAASH,EAAII,QACblE,IAAEA,EAAAD,IAAKA,GAAQkE,EACrB,MAAO,CACLA,SACAE,OAAQ,CAACpE,EAAKC,GACdoE,MAAO,CAAEC,KAAMN,EAAMO,EAAGC,IAAKR,EAAMS,GACnCC,OAAQX,EAEZ,0NCAO,SAASY,GAAiBC,MAC/BA,EAAAF,OACAA,IAEA,MACMG,EADSH,EAAOI,OACCD,QAQvB,yHAPiCE,CAAA,CAC/BH,QACAC,UACAG,MAAOlB,EAAqBY,GAC5BA,UACGnC,EAA6BsC,GAGpC,0XClBO,MAAMI,GAQX,WAAArC,CAAYgC,GAPZ5B,EAAAD,KAAQ,SAERC,EAAAD,KAAQ,YACRC,EAAAD,KAAQ,eACRC,EAAAD,KAAQ,aACRC,EAAAD,KAAQ,cAGNA,KAAK6B,MAAQA,CACf,CAEA,iBAAAM,CAAkBN,GAChB,MAAMO,QAAEA,gBAASC,EAAAC,aAAeA,EAAAC,WAAcA,cAAYC,GACxDxC,KAAK6B,MAAM9B,QAEP0C,EAAWL,GAAWE,EAExBG,IACFzC,KAAK0C,SAAYC,IACf,MAAMC,IAAa5C,KAAK6B,MAAMgB,aAAahB,GAC3CY,EAAST,EAAA,CACPY,YACG5C,KAAK8C,kBAAkBH,MAG9Bd,EAAMkB,GAAG,QAAS/C,KAAK0C,SAAU1C,OAE/BqC,IACFrC,KAAKgD,YAAeL,IAClBM,EAASC,gBAAgBP,GACzB,MAAMC,IAAa5C,KAAK6B,MAAMgB,aAAahB,GAC3CQ,EAAcL,EAAA,CACZY,YACG5C,KAAK8C,kBAAkBH,MAG9Bd,EAAMkB,GAAG,WAAY/C,KAAKgD,YAAahD,OAErCuC,IACFvC,KAAKmD,UAAaR,IAChBJ,EAAWvC,KAAK8C,kBAAkBH,KAEpCd,EAAMkB,GAAG,WAAY/C,KAAKmD,UAAWnD,OAEnCwC,IACFxC,KAAKoD,WAAcT,IACjBH,EAAYxC,KAAK8C,kBAAkBH,KAErCd,EAAMkB,GAAG,YAAa/C,KAAKoD,WAAYpD,MAE3C,CAEA,eAAAqD,CAAgBxB,GACV7B,KAAKoD,YACPvB,EAAMyB,IAAI,YAAatD,KAAKoD,WAAYpD,MAEtCA,KAAKmD,WACPtB,EAAMyB,IAAI,WAAYtD,KAAKmD,UAAWnD,MAEpCA,KAAK0C,UACPb,EAAMyB,IAAI,QAAStD,KAAK0C,SAAU1C,KAEtC,CAEQ,iBAAA8C,CAAkBnB,GACxB,OAAOC,EAAiB,CACtBC,MAAO7B,KAAK6B,MACZF,UAEJ,2ZC1DK,MAAM4B,GAGX,WAAA1D,CAAYgC,YAFZ7B,KAAQ,cAGNA,KAAK6B,MAAQA,CACf,CAEA,iBAAA2B,CAAkBC,GAChBzD,KAAK6B,MAAM6B,QAAQtE,QAASuE,IAC1B3D,KAAK4D,SAASD,EAAUF,IAE5B,CAEA,QAAAG,CAASD,EAAoBF,GAC3B,IAAIlD,EACJ,MAAMsB,MAAEA,EAAAC,QAAOA,GAAY6B,EAC3B,GAAI9B,GAASC,IACP+B,EAAgBJ,GAClBlD,EAAQkD,EAAM3B,GACLgC,EAAQL,KACjBlD,EAAQkD,GAENlD,GACF,GAAwB,UAApBP,KAAK6B,MAAMjD,MAAmC,SAAf2B,EAAM3B,KAAiB,CACxD,MAAMmF,EAASlC,EACTmC,EAAUhE,KAAKiE,eAAe1D,GACpC2D,WAAW,KACTH,EAAOI,QAAQH,IACd,GACL,KAAW,aAAcnC,GACtBA,EAAeuC,SAASpE,KAAKqE,aAAa9D,GAInD,CAEA,YAAA8D,CACEZ,GAEA,GAAmB,cAAfA,EAAM7E,KAAsB,CAC9B,MASM0F,EACgB,SAApBtE,KAAK6B,MAAMjD,KACP,CACE,CAAC,QAAS,eACV,CAAC,UAAW,iBACZ,CAAC,SAAU,WAd0C,CAC3D,CAAC,QAAS,eACV,CAAC,UAAW,iBACZ,CAAC,SAAU,UACX,CAAC,YAAa,aACd,CAAC,cAAe,eAChB,CAAC,OAAQ,QACT,CAAC,SAAU,WAWP2F,EAAa,CAAA,EAEf,WAAYd,GAAiC,iBAAjBA,EAAMe,SACpCD,EAAWC,OAASf,EAAMe,QAE5B,IAAA,MAAYC,EAAIC,KAASJ,EAAS,CAChC,MAAMlG,EAAU4B,KAAK6B,MAAM9B,QAAQ3B,QACnC,IAAIuG,EAAalB,EAAoBiB,GACjCE,EAAQxG,SAAYsG,EAAKG,cAAchG,QAAQ,aACjD8F,EAAYG,OAAOH,GAAavG,QAGhB,IAAduG,GACF9D,OAAOkE,eAAeR,EAAYE,EAAI,CACpCO,YAAY,EACZC,MAAON,GAGb,CAEA,OAAOJ,CACT,CACA,OAAOrG,CACT,CAEA,cAAA+F,CAAeiB,GACb,MAAmDC,EAAAD,GAA3CE,KAAAA,EAAAC,OAAMA,EAAAC,UAAQA,GAA6BH,EAAfI,mKAAAC,CAAeL,EAAf,CAA5B,OAAM,SAAQ,cAEhBM,EAAUC,SAASC,cAAc,OACnCL,IACFG,EAAQH,UAAYA,GAElBD,IACFI,EAAQlF,MAAMqF,UAAY,WAAWP,SAEnCD,IACFK,EAAQI,UAAYT,SAQtB,OALgB,IAAIU,KAAQ9D,GAAA,CAC1BsD,UAAW,IACRC,WAFuB,CAG1BH,KAAMK,MAGV,CAEA,kBAAAM,CAAmBb,GACjB,GAAIA,GAAQA,EAAKtG,KACf,GAAkB,SAAdsG,EAAKtG,KAAiB,CAGxB,GAFsBsG,EAAKI,WACdJ,EAAKE,KAEhB,MAAO,CAACY,EAAQ5E,KACd,MAAM4C,EAAUhE,KAAKiE,eAAeiB,GACpC,OAAO,IAAIe,EAAO7E,EAAQ,CAAE8D,KAAMlB,IAGxC,MAAA,GAAyB,QAAdkB,EAAKtG,KACd,MAAO,CAACoH,EAAQ5E,IACP,IAAI6E,EAAO7E,GAIxB,MAAO,CAAC4E,EAAQ5E,IAEP,IAAI8E,EAAa9E,EAAQpB,KAAKqE,aAAarC,GAAAA,GAAA,GADnC9D,GAC8CgH,IAEjE,CAEA,kBAAAiB,CAAmB1C,GACjB,MAAM2C,EAAiC,CAAA,EACjCC,EAAWrG,KAAKqE,aAAaZ,GAanC,OAZIA,IACF2C,EAAe7F,MAAQ,IACd8F,GAGa,UAApBrG,KAAK6B,MAAMjD,KACZwH,EAAuBE,aAAetG,KAAK+F,mBAC1CtC,GAE2B,SAApBzD,KAAK6B,MAAMjD,OACpByH,EAASlI,QAAS,GAEbiI,CACT,+dCjKK,SAASG,IAASC,IACvBA,EAAAC,QACAA,EAAAC,gBACAA,EAAAC,QACAA,IASA,MAAMC,EAAeC,EAAuB,CAC1CJ,UACAE,UACAD,oBAEII,GAAiB,MAAAF,OAAA,EAAAA,EAAcH,UAAW,CAAA,EAC1CM,EAAa,IAAIC,gBA0BvB,MAAO,CAzBSC,MAAMT,EAAK,CACzBU,MAAO,MAAAN,OAAA,EAAAA,EAAcM,MACrBC,YAAa,MAAAP,OAAA,EAAAA,EAAcO,YAC3BV,QAASK,EACTM,OAAQL,EAAWK,SAElBC,KAAMC,IACL,IAAKA,EAASC,GACZ,MAAM,IAAIC,MAAMF,EAASG,YAE3B,OAAOH,EAASI,SAEjBL,KAAMK,IACcC,OAAOC,KAAOD,OAAOE,WACtBC,gBAAgBJ,IAEnCK,MAAOC,IACN,GAAgB,eAAZA,EAAGC,KACL,MAAO,GAET,MAAMD,IAEQ,KAChBjB,EAAWmB,SAGf,CChDA,MAAMC,GAAa,IAAIC,EAAM,CAAEC,YAAa,EAAGC,MAAO,8ICe/C,MAAMC,WAAqBC,EAGhC,WAAA3I,CACE4I,EACA7L,EACAmD,GAEA2I,MAAMD,EAAU7L,EAAQmD,GAP1BE,GAAAD,KAAQ,WAQR,CAEA,UAAA2I,GACM3I,KAAK4I,WACP5I,KAAK4I,WACL5I,KAAK4I,cAAW,EAEpB,CAEA,UAAAC,GAEEH,MAAMG,aAEN,MAAMpC,QAAEA,EAAAE,QAASA,EAAAD,gBAASA,GAAoB1G,KAAKD,QAE7C+I,EAAwB9I,KAAK+I,OAC7BvC,EAAMsC,EAAItC,IAChBsC,EAAItC,IAAM,GAEV2B,GAAWa,IAAI,KACb,MAAOC,EAASC,GAAa3C,GAAS,CACpCC,MACAC,UACAE,UACAD,oBAMF,OAJAuC,EAAQ5B,KAAM8B,IACZL,EAAItC,IAAM2C,IAEZnJ,KAAK4I,SAAWM,EACTD,GAEX,+JCjBK,MAAMG,WAAmBC,EA0B9B,WAAAxJ,CAAYyJ,EAAavJ,GACvB2I,MAAM3I,GA1BRE,GAAAD,KAAA,mBAAmB,CACjB2G,QAAS,WAGX1G,GAAAD,KAAA,UAA0B,CACxBuJ,IAAK,KACLC,WAAW,EACXC,YAAa,GACbrL,QAAS,EACTsL,QAAQ,EACRC,QAAS,EACTC,aAAS,EACTzJ,KAAM,WACNsG,QAAS,KACTC,iBAAiB,EACjBmD,eAAgB,EAChBC,aAAc,MAGhB7J,GAAAD,KAAA,aACAC,GAAAD,KAAQ,QACRC,GAAAD,KAAQ,eACRC,GAAAD,KAAQ,mBACRC,GAAAD,KAAQ,kBAINA,KAAK+J,KAAOT,EAGZ,MAAMU,EAAc,CAAA,EACdC,EAAY,CAAA,EAClB,IAAIC,EACJ,IAAKA,KAAOnK,EAAS,CAEfmK,KAAOlK,KAAKD,UACdkK,EAAKC,GAFKnK,EAAQmK,GAItB,CAEA,GAAInK,EAAQiK,OACV,IAAA,MAAWG,KAASpK,EAAQiK,OAAQ,CAClC,MAAMI,EAAMrK,EAAQiK,OAAOG,GAExBE,EAASD,IACTlL,MAAMC,QAAQiL,IACA,mBAARA,IAEPJ,EAAOG,GAASC,EAEpB,CAEFE,EAAKC,WAAWvK,KAAMiK,GACtBjK,KAAKwK,UAAYF,EAAKG,OAAO,CAAA,EAAIzK,KAAK0K,iBAAkBV,EAC1D,CAEA,SAAAW,CAAUX,GACRM,EAAKG,OAAOzK,KAAKwK,UAAWR,GAC5BhK,KAAK4K,QACP,CAEA,cAAAC,GACE,OAAO7K,KAAKD,QAAQ0J,aAAe,EACrC,CAEA,KAAAqB,GAEE,OADA9K,KAAK4K,SACE5K,IACT,CAEA,QAAA+K,CAASjL,GASP,OARIE,KAAKgL,kBACPhL,KAAKgL,gBAAgBrC,aACrB7I,EAAImL,YAAYjL,KAAKgL,wBACdhL,KAAKgL,iBAEVhL,KAAKkL,oBACAlL,KAAKkL,YAEPlL,IACT,CAEA,SAAAmL,GAGE,MAAO,CACLC,QAASC,EAASrL,KAAK4K,OAAQ5K,KAAKD,QAAQ+J,cAEhD,CAEA,MAAAc,GACE,IAAK5K,KAAKsL,KACR,OAGFtL,KAAKuL,kBACL,MAAMjC,EAAMtJ,KAAKwL,cACjB,GAAIxL,KAAKkL,cAAgB5B,EACvB,OAEFtJ,KAAKkL,YAAc5B,EAEnB,MAAMO,EAAiB7J,KAAKD,QAAQ8J,gBAAkB,EAChDjN,EAASoD,KAAKsL,KAAK/L,YAAYkM,IAAI5B,GACrC7J,KAAK0L,iBACP1L,KAAK0L,eAAe/C,aACpB3I,KAAK0L,eAAepI,IAAI,QACxBtD,KAAK0L,oBAAiB,GAExB,MAAMC,EAAU,IAAIpD,GAAae,EAAK1M,EAAQ,CAC5CwB,QAAS,EACT+B,KAAMH,KAAKD,QAAQI,KACnBsG,QAASzG,KAAKD,QAAQ0G,QACtBE,QAAS3G,KAAKD,QAAQ4G,QACtBD,gBAAiB1G,KAAKD,QAAQ2G,kBAEhCiF,EAAQC,MAAM5L,KAAKsL,MACnBtL,KAAK0L,eAAiBC,EAItBA,EAAQE,KACN,OACA,KACO7L,KAAKsL,OAINK,EAAQ5B,OAAS/J,KAAKkL,aAGflL,KAAKgL,iBACdhL,KAAKsL,KAAKL,YAAYjL,KAAKgL,iBAE7BhL,KAAK0L,oBAAiB,EACtB1L,KAAKgL,gBAAkBW,EACvBA,EAAQG,gBACmB,IAAzB9L,KAAKD,QAAQ3B,QAAwB4B,KAAKD,QAAQ3B,QAAU,IAElC,IAAxB4B,KAAKD,QAAQ2J,QACfiC,EAAQI,eAEkB,IAAxB/L,KAAKD,QAAQ2J,QACfiC,EAAQK,oBAEkB,IAAxBhM,KAAKD,QAAQS,QACfmL,EAAQM,UAAUjM,KAAKD,QAAQS,SAjB/BR,KAAKsL,KAAKL,YAAYU,KAoB1B3L,MAEF,MAAM2J,QAAEA,EAAAC,QAASA,GAAY5J,KAAKD,SAE/B4J,GAAW3J,KAAKsL,KAAKY,UAAYvC,GACjCC,GAAW5J,KAAKsL,KAAKY,UAAYtC,IAElC5J,KAAKsL,KAAKL,YAAYU,EAE1B,CAEA,UAAAG,CAAW1N,GACT4B,KAAKD,QAAQ3B,QAAUA,EACnB4B,KAAKgL,iBACPhL,KAAKgL,gBAAgBc,WAAW1N,EAEpC,CAEA,WAAA2N,GACE/L,KAAKD,QAAQ2J,QAAS,EAClB1J,KAAKgL,iBACPhL,KAAKgL,gBAAgBe,aAEzB,CAEA,YAAAC,GACEhM,KAAKD,QAAQ2J,QAAS,EAClB1J,KAAKgL,iBACPhL,KAAKgL,gBAAgBgB,cAEzB,CAEA,SAAAC,CAAUzL,GACRR,KAAKD,QAAQS,OAASA,EAClBR,KAAKgL,iBACPhL,KAAKgL,gBAAgBiB,UAAUzL,EAEnC,CAGA,eAAA+K,CAAgBzL,GACTA,IACHA,EAAME,KAAKsL,MAGb,MAAMzB,EAAiB7J,KAAKD,QAAQ8J,gBAAkB,EAChDjN,EAASkD,EAAIP,YAAYkM,IAAI5B,GAC7BsC,EAAOrM,EAAIsM,UACjB,GAAoC,IAAhCpM,KAAKD,QAAQ8J,eAAsB,CACrC,MAAMwC,EAASxC,EAAiB,EAChCsC,EAAK3K,EAAId,KAAK4L,KAAKH,EAAK3K,EAAI6K,GAC5BF,EAAKzK,EAAIhB,KAAK4L,KAAKH,EAAKzK,EAAI2K,EAC9B,CACA,MAAM9C,EAAMvJ,KAAKD,QAAQwJ,KAAOzJ,EAAIC,QAAQwJ,IAE5C,GAAIA,EAAK,CACP,MAAMgD,EAAKhD,EAAIiD,QAAQ5P,EAAO6P,gBACxBC,EAAKnD,EAAIiD,QAAQ5P,EAAO+P,gBAGxB3C,EAAc,CAClB4C,MAAOT,EAAK3K,EACZqL,OAAQV,EAAKzK,GAEfsI,EAAO8C,KAAO,CAACP,EAAG/K,EAAGkL,EAAGhL,EAAGgL,EAAGlL,EAAG+K,EAAG7K,GAEpC4I,EAAKG,OAAOzK,KAAKwK,UAAWR,EAC9B,CACF,CAEA,WAAAwB,GACE,MACMuB,EAAOzC,EAAK0C,eAAehN,KAAKwK,UAAWxK,KAAK+J,KADpC/J,KAAKD,QAAQyJ,YAAa,GAE5C,OAAOxJ,KAAK+J,KAAOgD,CACrB,+dC3PK,MAAME,WACHrN,EADH,WAAAC,GAAA6I,SAAAwE,WAMLjN,GAAAD,KAAA,QAAA,CAEA,QAAAY,CAASb,GAtBX,IAAAoF,EAuBI,MAAMmE,EAAMvJ,GAAWA,EAAQuJ,IAC/B,GAAIA,EAAK,CACP,MAAM6D,EAAyBpN,EAAQwL,gBACjC5E,EAAUE,EAAuB9G,GAcvC,GAbAC,KAAK6B,MAAQ,IAAIuH,GAAWE,EAAK8D,GAAApL,GAAAA,GAAAA,GAAA,CAC/B7B,KAAMH,KAAKG,KACX2J,aAAc/J,EAAQ+J,cAEnBsD,GAAApL,GAAA,CACDqL,aAAa,GACVtN,GAFF,CAGD3B,QAAS,OAAA+G,EAAApF,EAAQ3B,SAAR+G,OAAmB,KAE3BpF,EAAQiK,QACRjK,EAAQuN,eAVoB,CAW/B3G,aAEEwG,EAAwB,CAC1B,MAAM5B,EAAkBvL,KAAK6B,MAAM0J,gBACnCvL,KAAK6B,MAAM0J,gBAAkB,SAAUzL,GACrCyL,EAAgBgC,KAAKvN,KAAMF,GAC3BE,KAAKwK,UAAY2C,EAAuBnN,KAAKwK,UAC/C,CACF,CACA,OAAOxK,KAAK6B,KACd,CACF,CAEA,WAAA2L,CAAYzN,GACV,GAAIC,KAAK6B,MAAO,CAGdyI,EAAKG,OAAOzK,KAAK6B,MAAM2I,WAFR,MAAAzK,OAAA,EAAAA,EAASiK,SAAU,CAAA,GAGlChK,KAAK6B,MAAM+I,QACb,CACF,EClDK,SAAS6C,GAAsCC,GACpD,OAAO,cAA8BA,EACnC,WAAA7N,IAAe8N,GACbjF,SAASiF,GACL3N,KAAKD,QAAQ+J,eACf9J,KAAK4N,QCXN,SACLC,EACAC,EAAO,IAEP,IAAIC,EAEJ,SAASC,KAAsBL,GAC7BK,EAAQC,QAERF,EAAY7J,WAAW,KACrB6J,EAAY,KACZF,EAAGK,MAAMlO,KAAM2N,IACdG,EACL,CASA,OAPAE,EAAQC,MAAQ,WACVF,IACFI,aAAaJ,GACbA,EAAY,KAEhB,EAEOC,CACT,CDZuB3C,CAAS,IAAI/M,KAE1B8P,EAAUC,UAAUT,QAAQL,KAAKvN,QAAS1B,IACzC0B,KAAKD,QAAQ+J,cAEpB,CAEA,UAAAwE,CACEC,EACAC,GAEA,MAAMhI,EAAMxG,KAAKyO,WAAWF,GAEtBG,EAAOhJ,SAASC,cAAc,QAC7BsD,EAASC,GAAa3C,GAAS,CACpCC,MACAE,gBAAiB1G,KAAKD,QAAQ2G,gBAC9BD,QAASzG,KAAKD,QAAQ0G,QACtBE,QAAS3G,KAAKD,QAAQ4G,UAgBxB,OAdAsC,EAAQ5B,KAAMC,IACZoH,EAAKlI,IAAMc,EACXkH,EAAK,KAAME,KAEZA,EAAaxG,MAAQgB,GAElBlJ,KAAKD,QAAQ4O,aAA4C,KAA7B3O,KAAKD,QAAQ4O,eAC3CD,EAAKC,aAC0B,IAA7B3O,KAAKD,QAAQ4O,YAAuB,GAAK3O,KAAKD,QAAQ4O,aAG1DD,EAAKE,IAAM,GACXF,EAAKG,aAAa,OAAQ,gBAEnBH,CACT,CAEA,aAAAI,GACE,MAAMC,EAAQ/O,KAAKgP,OAEbC,EAAWjP,KAAKkP,UACtB,IAAA,MAAWC,KAAKJ,EACd,GAAIA,EAAMI,GAAGZ,OAAOa,IAAMH,EAAU,CAClC,MAAMP,EAAOK,EAAMI,GAAGE,GAEtBX,EAAKY,OAAShF,EAAKiF,QACnBb,EAAKc,QAAUlF,EAAKiF,QACfb,EAAKe,WACJf,EAAKxG,OACPwG,EAAKxG,QAEPwG,EAAKlI,IAAM8D,EAAKoF,cAChBC,EAAQC,OAAOlB,UACRK,EAAMI,GAEjB,CAEJ,EAEJ,CDtDElP,GAJWgN,GAIJ,QAAQ9E,IGKV,MAAM0H,GAAYpC,GAPzB,cAA4BqC,EAC1B,WAAAjQ,CAAYkQ,EAAqBhQ,GAC/B2I,MAAMqH,EAAahQ,GACnBc,OAAOC,OAAOd,KAAKD,QAASA,EAC9B,6ZCLK,MAAMiQ,WACHpQ,EAGR,QAAAgB,CAASb,GAEP,GADAC,KAAKD,QAAUc,OAAOC,OAAOd,KAAKD,QAASA,GACvCA,EAAS,CACX,MAAwBoF,KAAhBmE,IAAAA,GAAgBnE,EAAR+E,mKAAA1E,CAAQL,EAAR,CAAR,QACR,GAAImE,EAAK,CACP,MAAM2G,EAAqCjO,GAAA,CACzC7B,KAAMH,KAAKG,KACXsJ,YAAaS,EAAIT,YACjBE,QAASO,EAAIP,QACbC,QAASM,EAAIN,SAEVM,EAAIoD,eAKT,IAAIzL,EAHAqI,EAAIgG,aACND,EAAiBC,WAAahG,EAAIgG,YAGpC,MAAMvJ,EAAUE,EAAuBqD,GAUvC,OARErI,EADE8E,EACM,IAAImJ,GAAGxG,KAAKtH,GAAA,CAAA,EACfiO,WADe,CAElBtJ,UACAmD,aAAcI,EAAIJ,kBAGZ,IAAI+F,EAAUvG,EAAK2G,GAEtBpO,CACT,CACF,MACF,CAEA,WAAA2L,CAAYzN,GACV,GAAIC,KAAK6B,MAAO,QAGV9B,WAASiK,SACXhK,KAAK6B,MAAMsO,OAAOC,EAFDpQ,KAAK6B,MAAMkI,KAEkBhK,EAAQiK,SAExDhK,KAAK6B,MAAMwO,QACb,CACF,gSCvCK,MAAMC,GAAW7C,GANxB,cAA2BoC,EAAUU,IACnC,WAAA1Q,CAAYkQ,EAAqBhQ,GAC/B2I,MAAMqH,EAAahQ,EACrB,6ZCfK,SAASyQ,GACd5T,GAIA,MAAO,CACL,CAHQA,EAGL,GAHKA,EAGC,IACT,CAJQA,EAIL,GAJKA,EAIC,IAEb,yYCqCO,MAAM6T,GAAN,MAAMA,EAAN,WAAA5Q,GAmBLI,GAAAD,KAAA,UAA2B,CAAE+B,OAAQ,QAErC9B,GAAAD,KAAA,gBAAgByQ,EAAkBC,eAClCzQ,GAAAD,KAAA,kBAAkByQ,EAAkBE,iBACpC1Q,GAAAD,KAAA,UAAU,IAAI4Q,GACd3Q,GAAAD,KAAA,OAEAC,GAAAD,KAAQ,mBACRC,GAAAD,KAAQ,qBACRC,GAAAD,KAAQ,cAA6B,IACrCC,GAAAD,KAAQ,mBAA4C,CAClD,OACA,OACA,UACA,YACA,UACA,cAEFC,GAAAD,KAAQ,kBAA2C,CACjD,YACA,WACA,aACF,CAEA,MAAA6Q,CAAO9Q,GAEL,GADAC,KAAKD,QAAUiC,GAAA,CAAA,EAAKjC,GAChBC,KAAKD,QAAQgC,OAAQ,CACvB,MAAM+O,KACJA,EAAAC,OACAA,EAAAnH,QACAA,EAAAD,QACAA,EACAqH,UAAWC,EAAAC,kBACXA,GACElR,KAAKD,QAETC,KAAKF,IACHE,KAAKD,QAAQD,KACb,IAAIqR,EAAInR,KAAKD,QAAQgC,OAAQC,GAAA,CAC3BoP,oBAAoB,EACpBC,aAAa,EACbL,UAAWC,EAAKT,GAAwBS,QAAM,EAC9CrH,UACAD,UACAoH,OAAQA,GAAU,CAACA,EAAO,GAAIA,EAAO,IACrCD,QACGI,IAGPlR,KAAKsR,wBAAwB3H,GAC7B3J,KAAKuR,kCAEL,MAAMC,EAAUxR,KAAKF,IAAIQ,WAAW,WACpCN,KAAKyR,kBAAoB,IAAIC,EAAwB1R,KAAKF,KACzDE,KAAKF,IAAY6R,eAAkBC,IAClC5R,KAAK2R,eAAeC,IAEtBJ,EAAQjR,MAAMC,OAASC,OAAO,GAC9BT,KAAK6R,QAAQC,KAAK,SAAU9R,MAC5BA,KAAK+R,kBACP,CACF,CAEA,OAAAC,GACMhS,KAAKF,KACPE,KAAKF,IAAI8P,SAEP5P,KAAKyR,oBACPzR,KAAKyR,kBAAkBQ,SACvBjS,KAAKyR,uBAAoB,GAE3BzR,KAAKkS,qCACP,CAEA,YAAAC,GACE,OAAOnS,KAAKF,KAAOE,KAAKF,IAAIqS,cAC9B,CAEA,mBAAAC,GACE,GAAIpS,KAAKyR,kBACP,OAAOzR,KAAKyR,kBAAkBU,eAEhC,MAAME,EAAmBrS,KAAKF,KAAQE,KAAKF,IAAY2R,kBACvD,GAAIY,EACF,OAAOA,EAET,MAAM,IAAI7K,MAAM,qCAClB,CAEA,SAAA8K,CAAUC,GACJvS,KAAKF,MACPE,KAAKF,IAAIqS,eAAe5R,MAAMgS,OAASA,EAE3C,CAIA,OAAAC,CAAQC,EAAwC3B,GAC9C,MAAMhR,EAAME,KAAKF,IACjB,GAAKA,EACL,GAAIZ,MAAMC,QAAQsT,GAAc,CAC9B,MAAMpR,EAASoR,GACRxV,EAAKC,GAAOmE,EACfrB,KAAKF,MACa,iBAATgR,EACT9Q,KAAKF,IAAI0S,QAAQ,CAACtV,EAAKD,GAAM6T,EAAM,CAAE4B,SAAS,IAE9C1S,KAAK2S,UAAU,CAAC1V,EAAKC,IAG3B,KAAO,CACL,MAAQ4T,KAAAA,EAAAA,OAAMC,EAAAC,UAAQA,SAAWpU,EAAA+M,QAAQA,EAAAC,QAASA,GAAY6I,EAc9D,GAbI1B,QAAmB,IAATD,EACZ9Q,KAAKwS,QAAQzB,EAAQD,SAER,IAATA,GACF9Q,KAAK4S,QAAQ9B,GAEXC,GACF/Q,KAAK2S,UAAU5B,IAGfnU,GACFoD,KAAK6S,UAAUjW,QAEC,IAAdoU,EACF,GAAIA,EAAW,CACb,MAAM8B,EAAItC,GAAwBQ,GAClClR,EAAIiT,aAAaD,GACjB9S,KAAKsR,yBACP,MAEExR,EAAIiT,aAAa,MACjB/S,KAAKsR,+BAGO,IAAZ1H,GACF9J,EAAIkT,WAAWpJ,QAED,IAAZD,GACF3J,KAAKsR,wBAAwB3H,EAEjC,CACF,CAEA,SAAAgJ,CAAUtR,GACR,MAAOpE,EAAKC,GAAOmE,EACfrB,KAAKF,KACPE,KAAKF,IAAImT,MAAM,CAAC/V,EAAKD,GAEzB,CAEA,SAAAyC,GACE,MAAMI,EAAME,KAAKF,IACjB,GAAIA,EAAK,CACP,MACMiR,EADSjR,EAAIP,YACGG,YACtB,MAAO,CAACqR,EAAO9T,IAAK8T,EAAO7T,IAC7B,CACF,CAEA,OAAA0V,CAAQ9B,GACF9Q,KAAKF,KACPE,KAAKF,IAAI8S,QAAQ9B,EAErB,CAEA,OAAA5E,GA3OF,IAAA/G,EA4OI,OAAQ,OAAAA,OAAKrF,KAAOE,KAAKF,IAAIoM,WAArB/G,OAAmC,CAC7C,CAEA,SAAA5F,GACE,IAAKS,KAAKF,IAAK,OACf,MAAMgT,EAAI9S,KAAKF,IAAIP,YACbxC,EAAK+V,EAAE9V,eACPH,EAAKiW,EAAEhW,eACb,MAAO,CAACC,EAAGE,IAAKF,EAAGG,IAAKL,EAAGI,IAAKJ,EAAGK,IACrC,CAGA,SAAA2V,CAAUjW,EAA2BmD,EAAsB,IACzD,GAAIC,KAAKF,IAAK,CACZ,MAAM8J,QAAEA,EAAAsJ,OAASA,EAAAC,QAAQA,GAAYpT,EAC/BmK,EAAwB,CAAA,EAC1BN,IACFM,EAAIN,QAAUA,GAEZuJ,IACFjJ,EAAIiJ,QAAU,CAACA,EAASA,IAEtBD,IACFhJ,EAAIiJ,QAAUD,GAGhBlT,KAAKF,IAAI+S,UAAUrC,GAAwB5T,GAASsN,EACtD,CACF,CAEA,eAAAkJ,CAAgBnL,GACd,OAAOwI,EAAkBC,cAAczI,EACzC,CAEA,aAAAoL,CAAcC,EAAqBvT,GACjC,OAAOsT,EAAcC,EAASvT,EAASC,KACzC,CAEA,mBAAAuT,CAAoBxT,GAClB,OAAOwT,EAAoBxT,EAASC,KACtC,CAEA,mBAAAwT,CAAoBzT,GAClB,OAAOyT,EAAoBzT,EAASC,KACtC,CAEA,UAAAyT,CACEH,EACAI,EACA3T,GAEA,GAAIC,KAAKyR,kBACP,OAAOzR,KAAKyR,kBAAkBgC,WAAWH,EAASI,EAAU3T,EAEhE,CAEA,aAAA4T,CAAcL,GACRtT,KAAKyR,mBACPzR,KAAKyR,kBAAkBkC,cAAcL,EAEzC,CAEA,WAAArI,CAAYpJ,GACNA,GAASA,EAAM+N,QAAQ/N,EAAM+N,QACnC,CAEA,SAAAgE,CAAU/R,GACJ7B,KAAKF,KACP+B,EAAM+J,MAAM5L,KAAKF,IAErB,CAEA,SAAA+T,CAAUhS,GACRA,EAAM+N,QACR,CAEA,eAAAkE,CAAgBjS,EAA0BoD,GACpC,eAAgBpD,GAClBA,EAAMiK,WAAW7G,EAErB,CAEA,aAAA8O,CACElS,EACA3B,EACA8T,GAGF,CAEA,UAAAC,CAAWjT,GACT,MAAMkT,EAAYnT,EAAqBC,GACvChB,KAAK6R,QAAQC,KAAK,WAAYoC,GAC9BlU,KAAK6R,QAAQC,KAAK,QAASoC,EAC7B,CAEA,MAAAC,CAAOjK,EAAoBkK,GACzB,MAAMtU,EAAME,KAAKF,IACjB,GAAIA,IACFA,EAAIqU,OAAOjK,GACPkK,GAAQ,CACV,MAAMC,cAAEA,EAAAC,cAAeA,GAAkBF,EACnCG,EAAiB5R,IAGrB0R,EAAc,CAAEhT,OADiB,CADnBsB,EAC0BvB,OAAOnE,IADjC0F,EAC4CvB,OAAOlE,aAG7C,IAAlBmX,GACFvU,EAAIiD,GAAG,gBAAiBwR,EAAevU,MAErCsU,GACFxU,EAAIiD,GAAG,gBAAiBuR,EAAetU,MAUzC,MAAO,CAAEwU,KARI,UACW,IAAlBH,GACFvU,EAAIwD,IAAI,gBAAiBiR,GAEvBD,GACFxU,EAAIwD,IAAI,gBAAiBgR,IAI/B,CAGF,MAAO,CAAEE,KADI,OAEf,CAEQ,cAAA7C,CAAe9D,GACrB,IAAA,MAAW4G,KAAKzU,KAAK0U,YACnBD,IAEFzU,KAAK0U,YAAYnX,OAAS,EAC1ByC,KAAK0U,YAAYjW,KAAKoP,EACxB,CAEQ,+BAAA0D,GACNvR,KAAKkS,sCACL,MAAMyC,EAAY3U,KAAKmS,eAEnBwC,GADQ3U,KAAKF,KACO6H,OAAOiN,iBAC7B5U,KAAK6U,gBAAkB,IAAID,eAAe,KACxC5U,KAAKsR,4BAEPtR,KAAK6U,gBAAgBC,QAAQH,GAEjC,CAEQ,mCAAAzC,GACFlS,KAAK6U,kBACP7U,KAAK6U,gBAAgBE,aACrB/U,KAAK6U,qBAAkB,EAE3B,CAEQ,gBAAA9C,GACN,MAAMjS,EAAME,KAAKF,IACjB,GAAIA,EAAK,CACPA,EAAIiD,GAAG,QAAU/B,IACfhB,KAAKiU,WAAWjT,KAElB,IAAA,MAAW2B,KAAK3C,KAAKgV,iBACnBlV,EAAIiD,GAAGJ,EAAG,IAAM3C,KAAK6R,QAAQC,KAAKnP,EAAG3C,MAAOF,GAG9CA,EAAIiD,GAAG,YAAa,KAClBkK,GAAagI,MAAM/M,UAErBpI,EAAIiD,GAAG,YAAa,KAClBkK,GAAagI,MAAM/M,UAGrB,IAAA,MAAWvF,KAAK3C,KAAKkV,gBACnBpV,EAAIiD,GACFJ,EACC3B,GACChB,KAAK6R,QAAQC,KACXnP,EACA5B,EAAqBC,IAEzBlB,EAGN,CACF,CAEQ,uBAAAwR,CAAwBR,GAtalC,IAAA3L,EAuaI,MAAMrF,EAAME,KAAKF,IACjB,GAAIA,EAAK,CACPgR,EAAO,MAAAA,EAAAA,EAAQhR,EAAIqV,aACnB,MAAMC,EAAgBC,EACpBlU,GAAO,UACPA,EAAO,GAAI,OAEP6P,EAAY,OAAA7L,EAAArF,EAAIC,QAAQiR,WAAZ7L,EAAyBiQ,EAC3C,QAAkB,IAAdpE,EAAyB,CAC3BlR,EAAIwV,WAAW,GACf,MAAMC,EAAazV,EAAI0V,cAAcxE,GAAW,GAC1CrH,EAAUmH,EAAOyE,EAAaA,EAAazE,EAEjDhR,EAAIC,QAAQ4J,QAAUA,EACtB7J,EAAIwV,WAAW3L,GAEX7J,EAAIoM,UAAYvC,GAClB7J,EAAI8S,QAAQjJ,EAEhB,CACF,CACF,GA1YA1J,GADWwQ,GACJ,gBAEH,CACFgF,QCZG,cACG7V,EAsBR,WAAAC,CAAYC,EAAUC,GACpB2I,MAAM5I,EAAKC,GApBbE,GAAAD,KAAA,SACAC,GAAAD,KAAA,YAAW,GAEXC,GAAAD,KAAA,QACAC,GAAAD,KAAA,UAAsB,IACtBC,GAAAD,KAAA,WACAC,GAAAD,KAAQ,SACRC,GAAAD,KAAQ,iBAERC,GAAAD,KAAQ,kBAA8B,IACtCC,GAAAD,KAAQ,kBAA8B,IACtCC,GAAAD,KAAQ,cACRC,GAAAD,KAAQ,eAA4D,IACpEC,GAAAD,KAAQ,UAERC,GAAAD,KAAQ,iBAAiBqL,EAAS,KAChCrL,KAAK0V,iBACJ,MAqRHzV,GAAAD,KAAQ,YAAY,KAClBA,KAAK2V,aAlRL3V,KAAK4V,QAAU,IAAI1T,GAAclC,MACjCA,KAAK6V,OAAS,IAAItS,GAAavD,KACjC,CAEA,QAAAY,CAASb,GAgBP,OAfAc,OAAOC,OAAOd,KAAKD,QAASA,GAC5BC,KAAKyD,MAAQ1D,EAAQ0D,MACrBzD,KAAK6B,MAAQ,IAAIiU,EAAa,GAAI1I,GAAApL,GAAA,CAAA,EAC7BjC,EAAQuN,eADqB,CAEhCnN,KAAMH,KAAKG,QAEbH,KAAK+V,cAAgBhW,EAAQgW,cAC7BhW,EAAQ0D,MAAQzD,KAAKyD,MAEjB1D,EAAQiW,MACVhW,KAAKV,QAAQS,EAAQiW,MAGvBhW,KAAKiW,kBAEEjW,KAAK6B,KACd,CAEA,YAAAqU,GACElW,KAAKmW,oBACP,CAEA,MAAAC,CAAOC,GAEL,GADArW,KAAK2V,WACDU,EAAgB,CAClB,MAAMzE,EAAM5R,KAAK0D,QAAQ4S,OAAOD,GAChC,IAAA,MAAW7U,KAAKoQ,EACd5R,KAAKuW,aAAa/U,EAAG,MAEzB,MAAYxB,KAAK4C,WACf5C,KAAK4C,UAAW,EACZ5C,KAAK+V,eACP/V,KAAK6V,OAAOrS,kBACVxD,KAAK+V,eAIb,CAEA,QAAAJ,CAASU,GACP,GAAIA,EAAgB,CACFrW,KAAK0D,QAAQ4S,OAAOD,GAC5BjX,QAASoC,IACfxB,KAAKwW,eAAehV,IAExB,MAAA,GAAWxB,KAAK4C,SAAU,CACxB,IAAA,MAAW6R,KAAKzU,KAAKyW,aACnBzW,KAAK0W,aAAajC,EAAE,IAElBzU,KAAKyD,OACPzD,KAAK6V,OAAOrS,kBAAkBxD,KAAKyD,OAErCzD,KAAK2W,gBAAgBpZ,OAAS,EAC9ByC,KAAK4C,UAAW,CAClB,CACF,CAEA,WAAAgU,GACE,OAAO5W,KAAK2W,gBAAgB7W,IAAK0B,GACxBQ,GAAA,CACLD,OAAQ/B,KACR8B,QAASN,EAAEM,QACXD,MAAOL,GACJhC,EAA6BgC,EAAEM,UAGxC,CAEA,WAAA+U,GACE,OAAO7W,KAAK8W,eACd,CAEA,MAAAR,CAAOS,GAEL/W,KAAKgX,WAAaD,EAClB,MAAME,EAASjX,KAAK6B,MACd/B,EAAMmX,GAAWA,EAAe3L,KACtC,GAAI2L,GAAUnX,EAAK,CACjBmX,EAAOrH,SAEP,MAAMsH,EAA6B,GACnClX,KAAK0D,QAAQtE,QAAQ,EAAG0C,UAASD,YAC/B,GAAIA,EAAO,EACEkV,GACPA,EAAI/U,GAAA,CACFD,OAAQ/B,KACR8B,UACAD,SACGrC,EAA6BsC,MAIpCmV,EAAOrW,SAASiB,GAChBqV,EAAezY,KAAKuD,GAAA,CAClBD,OAAQ/B,KACR8B,UACAD,SACGrC,EAA6BsC,MAGlCmV,EAAOhM,YAAYpJ,EAEvB,IAEF7B,KAAK8W,gBAAkBI,EAEvBD,EAAOrL,MAAM9L,EACf,CACA,OAAOE,KAAK8W,eACd,CAEA,WAAAK,GACEnX,KAAKsW,QACP,CAEA,SAAAc,GACE,OAAOpX,KAAK0D,QAAQ5D,IAAI,EAAG+B,QAAOC,aAEzBE,GAAA,CACLF,UACAD,QACAwV,QAJcxV,KAAYA,EAAcyJ,KAKxCvJ,OAAQ/B,MACLR,EAA6BsC,IAGtC,CAEA,UAAAwV,CAAWzJ,GACT7N,KAAK2V,WACL,MAAMsB,EAASjX,KAAK6B,MACpB,GAAIoV,EACF,GAAIpJ,EACF,IAAA,IAASvQ,EAAM0C,KAAK0D,QAAQnG,OAAQD,KAAS,CAC3C,MAAMsU,EAAM5R,KAAK0D,QAAQpG,GACzB,GAAIsU,EAAK,CACP,MAAM9P,QAAEA,EAAAD,MAASA,GAAU+P,EAC3B,GAAI9P,GAAWD,EAAO,CACNgM,EAAG/L,KAEfmV,EAAOhM,YAAYpJ,GACnB7B,KAAK0D,QAAQ6T,OAAOja,EAAK,GAE7B,CACF,CACF,MAEA2Z,EAAOO,cACPxX,KAAK0D,QAAU,EAGrB,CAEA,OAAA+T,CAAQzB,GACNhW,KAAKsX,aACLtX,KAAKV,QAAQ0W,EACf,CAEA,OAAA1W,CAAQ0W,GACN,MAAMjW,EAAUC,KAAKD,QACrB,IAAIqG,EACJ,GAAIrG,EAAS,CACX,GAAIiW,EAAM,CACR,IAAIpX,EAEJ,GAAKmB,EAAQnB,KAIXA,EAAOmB,EAAQnB,SAJE,CACjB,MAAM8Y,EnBpNT,SAAoBC,GACzB,IAAIhZ,EAKFA,EAJmB,sBAAjBgZ,EAAQ/Y,KAICzB,EAHYwa,EAA8B5Y,SAASe,IAC3DT,GAAMA,EAAEV,SAASC,OAGM,uBAAjB+Y,EAAQ/Y,KAINzB,EAHYwa,EAA+BC,WAAW9X,IAC9D+X,GAAMA,EAAEjZ,OAGe,YAAjB+Y,EAAQ/Y,KACL+Y,EAAoBhZ,SAASC,KAE9B+Y,EAAQ/Y,KAErB,OAAOD,CACT,CmBkM+BmZ,CAAW9B,GAChCpX,EAAOlB,EAAUga,EACnB,CAGA,GAAI1X,KAAKpB,MAAQoB,KAAKpB,OAASA,EAE7B,YADAmZ,QAAQC,KAAK,8CAGfhY,KAAKpB,KAAOA,EAEZoX,ElBrMD,SACLA,EACApX,GAEA,GAAkB,sBAAdoX,EAAKpX,KACOoX,EACRjX,SADQiX,EACSjX,SAASuX,OAAQjX,GACtCX,EAAeW,EAAEV,SAASC,KAAMA,SAEpC,GAAyB,YAAdoX,EAAKpX,MAEd,IADcF,EAAgBsX,EAAiBrX,SAASC,KAAMA,GAE5D,OAAO,MAEc,uBAAdoX,EAAKpX,OACAoX,EACR4B,WADQ5B,EACW4B,WAAWtB,OAAQuB,GAC1CnZ,EAAemZ,EAAEjZ,KAAMA,KAG3B,OAAOoX,CACT,CkBgLeiC,CAAiBjC,EAAMpX,GAC1BoX,IACF5P,EAAiBpG,KAAKkY,mBAAmBnY,EAASnB,GAEtD,CACA,IAAIK,EAAQ+W,QAAQ,EAAW5P,EACjC,CACF,CAEA,SAAA+R,CAAU9B,EAAiCtW,GACzC,GAAIsW,EAAgB,CACNrW,KAAK0D,QAAQ4S,OAAOD,GAC5BjX,QAASoC,IACXxB,KAAKoY,WAAW5W,EAAGzB,EAAS,QAEhC,CACF,CAEA,UAAAsY,CAAWhC,IACYA,EACjBrW,KAAKyW,aAAaH,OAAQ9U,GAAM6U,EAAe7U,EAAE,KACjDxB,KAAKyW,cAEIrX,QAASoC,IACpBxB,KAAK0W,aAAalV,EAAE,KAExB,CAEA,aAAAkU,CAAc/R,GACRA,EACF3D,KAAKsY,eAAe3U,GAEpB3D,KAAKoX,YAAYhY,QAASoC,GACxBxB,KAAKsY,eAAe,CAAExW,QAASN,EAAEM,QAASD,MAAOL,EAAEK,QAGzD,CAGA,SAAA0W,GACE,OAAOvY,KAAKT,WACd,CAEA,SAAAA,GACE,GAAIS,KAAK6B,MAAO,CACd,MAAMjF,EAASoD,KAAK6B,MAAMtC,YAC1B,GAAI3C,EAAO4b,UACT,OAAO7b,EAAcC,EAEzB,CACF,CAEA,UAAAkP,CAAW7G,GACTjF,KAAKD,QAAQ3B,QAAU6G,EACvBjF,KAAK4D,SAAS5D,KAAKyD,OACnBzD,KAAKyY,iBAAiBzY,KAAK+V,cAC7B,CAEA,QAAAnS,CAASH,GACP,GAAIA,EAAO,CACTzD,KAAKyD,MAAQA,EACb,IAAA,MAAWiV,KAAK1Y,KAAK0D,QACnB1D,KAAK6V,OAAOjS,SAAS8U,EAAGjV,EAE5B,CACF,CACA,gBAAAgV,CAAiBhV,GACf,GAAIA,EAAO,CACTzD,KAAK+V,cAAgBtS,EACrB,IAAA,MAAWiV,KAAK1Y,KAAK2W,gBACnB3W,KAAK6V,OAAOjS,SAAS8U,EAAGjV,EAE5B,CACF,CACA,WAAAkV,CAAYlV,GACVzD,KAAKyD,MAAQzB,GAAAA,GAAA,CAAA,EAAKhC,KAAKyD,OAAUA,GACjC,IAAA,MAAWiV,KAAK1Y,KAAK0D,QACnB1D,KAAK6V,OAAOjS,SAAS8U,EAAG1Y,KAAKyD,MAEjC,CACA,mBAAAmV,CAAoBnV,GAClBzD,KAAK+V,cAAgB/T,GAAAA,GAAA,CAAA,EAAKhC,KAAK+V,eAAkBtS,GACjD,IAAA,MAAWiV,KAAK1Y,KAAK2W,gBACnB3W,KAAK6V,OAAOjS,SAAS8U,EAAG1Y,KAAK+V,cAEjC,CAEA,YAAAlT,CAAahB,GACX,OAAO7B,KAAK2W,gBAAgBkC,KAAMrX,GAAMA,EAAEK,QAAUA,EACtD,CAMQ,cAAAyW,CAAe3U,GACrB,MAAM7B,QAAEA,EAAAD,MAASA,GAAU8B,GACrBmV,MAAEA,EAAAC,WAAOA,EAAAC,aAAYA,GAAiBhZ,KAAKD,QACjD,GAAI8B,EAAO,CAET,IAAIoX,EAUJ,GAXApX,EAAMqX,gBAEFpX,EAAQqX,YAAcJ,EACxBE,EAAUnX,EAAQqX,WAAWJ,GACpBD,IACTG,EAAUH,EAAM9W,GAAAA,GAAA,CACdD,OAAQ/B,MACL2D,GACAnE,EAA6BsC,MAGhCmX,EAAS,CACX,MAAMG,GAAaJ,EACnBnX,EAAMwX,YAAY5Y,OAAOwY,GAAU,CAAEG,YAAWE,QAAQ,GAC1D,CACF,CACF,CAEc,UAAAlB,CACZmB,GAIA,SAAAvZ,OAAAkN,YAAA,UAJA0E,EACA7R,EAAwB,CAAA,EACxBnB,EACAuC,GAjXJ,IAAAgE,EAAAqU,EAmXI,MAAM1X,QAAEA,EAAAD,MAASA,GAAU+P,GACrB6H,SACJA,EAAAC,QACAA,EAAAC,SACAA,EACAC,YAAaC,GACX7X,GAAA,CACFyX,SAAU,KACP1Z,GAEC6Z,EAAc,MAAAC,EAAAA,GAAiB7Z,KAAKD,QAAQ+Z,cAClD,IAAIC,EACJ,MAAMC,EAAyC,GACzCC,EAAWC,IACfF,EAAevb,KAAKyb,IAEhBC,EAAQ,KACRJ,GACF/Z,KAAK0W,aAAaqD,IAGtB,IAAIK,EAeJ,GAbEA,EADEra,EAAQsa,yBACMta,EAAQsa,mBAAmBrY,GAAA,CACzCH,QACAC,UACAC,OAAQ/B,KACRpB,OACAub,QACAF,WACGza,EAA6BsC,KAGxB/B,EAAQua,aAGhBF,GAAWvY,EAAO,CACpB,MAAM0Y,EAA8B,CAClCd,WACAC,UAEAE,cACAY,cAAc,EACdC,WAAW,GASb,GAPI7V,EAAQ+U,KACVY,EAAaZ,SAAWA,GAE1BI,EAAQlY,EAAM6Y,UAAUN,EAASG,GAG/B,OAAAf,EAAA,OAAArU,EAAAnF,KAAKD,QAAQwa,mBAAb,EAAApV,EAA2BwV,kBAA3BnB,EACmB,CACnB,MAAM/E,EAAI5S,EAAM+Y,WACZnG,GACFA,EAAE5I,KACA,SACA,KACEsO,KAEFna,KAGN,CACAA,KAAKyW,aAAahY,KAAK,CAACsb,EAAOC,EAAgBpI,IAC/CmI,EAAM5B,UAAUhX,EAClB,CACF,yMAAA,CAEQ,YAAAuV,CAAaqD,GAxbvB,IAAA5U,EAAAqU,EA0bI,GADYxZ,KAAKF,IACR,CACPia,EAAM1B,aAAawC,cACnB,MAAMC,EAAQ9a,KAAKyW,aAAasE,UAAWvZ,GAAMA,EAAE,KAAOuY,GAC1D,IAAc,IAAVe,EAAc,CAChB,MAAMH,EACJ,OAAAnB,EAAA,OAAArU,EAAAnF,KAAKD,QAAQwa,mBAAb,EAAApV,EAA2BwV,kBAA3BnB,GACI,CAAGwB,EAAepJ,GAAO5R,KAAKyW,aAAaqE,GACjD,IAAA,MAAWG,KAAKD,EACdC,EAAErJ,GAEJoJ,EAAczd,OAAS,EACnBod,GACF3a,KAAKwW,eAAe5E,GAEtB5R,KAAKyW,aAAac,OAAOuD,EAAO,EAClC,CACF,CACF,CAEQ,kBAAA5C,CACNnY,EACAnB,GAEA,MAAM6E,EAAQ1D,EAAQ0D,MACtB,IAAIyX,EAAuB,CAAA,EAkC3B,MAhCqB,mBAAVzX,EACI,UAAT7E,EAEDsc,EAAa5U,aAAe,CAC3BxE,EACAX,KAEA,MAAMga,EAAU1X,EAAM3B,GAItB,OAHqB9B,KAAK6V,OAAO9P,mBAC/BoV,EAEK7U,CAAaxE,EAASX,IAG/B+Z,EAAO,CACL3a,MAAQuB,GAEG9B,KAAK6V,OAAOxR,aADjBvC,EAC8BE,SAAK9D,GAAUuF,EAAM3B,IAErBsL,GAAApL,GAAA,GAAK9D,GAAL,CAAYU,KAAM,WAM1Dsc,EAAOlb,KAAK6V,OAAO1P,mBAAmB1C,GAGxCyX,EAAKE,cAAgB,CAACtZ,EAAkBD,KACtC7B,KAAKqb,eAAevZ,EAASD,IAGxBqZ,CACT,CAEQ,cAAAG,CAAevZ,EAAkBD,GACvC,MAAMoV,EAASjX,KAAK6B,MACpB,GAAIoV,EAAQ,CACV,MAAMrF,EAAM5P,GAAA,CACVD,OAAQ/B,KACR8B,UACAD,SACGrC,EAA6BsC,IAElCD,EAAM9B,QAAQI,KAAOH,KAAKG,KAC1BH,KAAK0D,QAAQjF,KAAKmT,GAClB,IAAIrK,GAAK,EAIT,GAHIvH,KAAKgX,aACPzP,EAAKvH,KAAKgX,WAAWpF,IAEnBrK,EAAI,CACN,MAAMwS,MAAEA,EAAAQ,aAAOA,EAAAe,WAAcA,cAAYC,EAAAzB,cAAaA,GACpD9Z,KAAKD,QAEP8B,EAAM9B,QAAQwb,aAAc3W,EAAQ2W,IAAeA,EACnDtE,EAAOrW,SAASiB,GACZyZ,IACExB,GACFjY,EAAMkB,GAAG,YAAa,KACpB/C,KAAKuW,aAAa3E,EAAK,WAEzB/P,EAAMkB,GAAG,WAAY,KACnB/C,KAAKwW,eAAe5E,MAGtB/P,EAAMkB,GACJ,QACCJ,GAAM3C,KAAKwb,oBAAoB7Y,GAChC3C,OAINA,KAAK4V,QAAQzT,kBAAkBN,GAG/BqC,WAAW,KACL6V,GACF/Z,KAAKoY,WACHpW,GAAA,CACED,OAAQ/B,KACR6B,QACAC,WACGtC,EAA6BsC,IAElCyY,EACA,OAGJva,KAAKsY,eAAe,CAAEzW,QAAOC,aAEjC,CACF,CACF,CAEQ,mBAAA0Z,CAAoB7Y,GAC1BM,EAASC,gBAAgBP,GACzB,MAAMd,EAAQc,EAAEZ,OACVD,EAAWD,EAAcC,QACzB8P,EAAgB5P,GAAA,CACpBD,OAAQ/B,KACR6B,QACAC,WACGtC,EAA6BsC,IAE5B2Z,EAAazb,KAAK6C,aAAahB,GACjC4Z,EACEzb,KAAKD,SAAWC,KAAKD,QAAQ2b,uBAC/B1b,KAAKwW,eAAeiF,GAGtBzb,KAAKuW,aAAa3E,EAAK,QAASjP,EAAEvB,OAEtC,CAEQ,YAAAmV,CACN3E,EACAhT,EACAwC,GAEA,MAAMua,YAAEA,GAAgB3b,KAAKD,QACxB4b,IAEF3b,KAAKF,IAAY6R,eAAe,KAC/B3R,KAAKwW,eAAe5E,KAEtB5R,KAAK2W,gBAAgBvX,QAASoC,GAAMxB,KAAKwW,eAAehV,KAE1DxB,KAAK2W,gBAAgBlY,KAAKmT,GAC1B5R,KAAK4C,UAAW,EAChB,MAAMmT,cAAEA,EAAA6F,cAAeA,EAAArB,aAAeA,GAAiBva,KAAKD,QAQ5D,GANIgW,GAAiBnE,EAAI/P,OACvB7B,KAAK6V,OAAOjS,SAASgO,EAAKmE,GAExB6F,GACF5b,KAAKoY,WAAWxG,EAAK2I,EAAc3b,EAAMwC,GAEvCpB,KAAKD,QAAQ8b,SAAU,CACzB,MAAM9c,EAAW6S,EAAI9P,QAAU,CAAC8P,EAAI9P,SAAW,GAC/C9B,KAAKD,QAAQ8b,SAAS7Z,GAAA,CACpBpD,OACAiD,MAAO7B,KACPjB,YACGS,EAA6BT,IAEpC,CACF,CAEQ,cAAAyX,CAAe5E,GACrB,MAAMkJ,EAAQ9a,KAAK2W,gBAAgB9X,QAAQ+S,IAC7B,IAAVkJ,IACF9a,KAAK2W,gBAAgBY,OAAOuD,EAAO,GAC/B9a,KAAKD,UACHC,KAAKD,QAAQ0D,OACfzD,KAAK6V,OAAOjS,SACVgO,EACA5R,KAAKD,QAAQ0D,OAIbzD,KAAKD,QAAQ6b,eAAiBhK,EAAI/P,OACpC7B,KAAK0W,aAAa9E,EAAI/P,SAI5B7B,KAAK4C,SAAW5C,KAAK2W,gBAAgBpZ,OAAS,CAChD,CAEQ,oBAAAue,GACN,MAAMhc,EAAME,KAAKF,IACjB,GAAIA,EAAK,CACP,MAAMic,gBAAEA,GAAoB/b,KAAKD,SACrB,MAAAgc,GAAAA,IAEVjc,EAAIiD,GAAG,QAAS/C,KAAKgc,UAEzB,CACF,CAEQ,uBAAAC,GACNjc,KAAKF,IAAIwD,IAAI,UAAWtD,KAAKkc,gBAC7Blc,KAAKF,IAAIwD,IAAI,UAAWtD,KAAKkc,gBAC7Blc,KAAKF,IAAIwD,IAAI,QAAStD,KAAKgc,UAC7B,CAEQ,eAAA/F,GACN,MAAMnW,EAAME,KAAKF,IACjB,GAAIA,EAAK,CACP,MAAMgZ,MAAEA,EAAAC,WAAOA,EAAAC,aAAYA,GAAiBhZ,KAAKD,QACjDC,KAAK8b,wBACA/C,IAAcD,GAAWE,IAC5BlZ,EAAIiD,GAAG,UAAW/C,KAAKkc,gBACvBpc,EAAIiD,GAAG,UAAW/C,KAAKkc,gBAE3B,CACF,CAEQ,kBAAA/F,GACNnW,KAAKic,0BACLjc,KAAKF,IAAIwD,IAAI,UAAWtD,KAAKkc,gBAC7Blc,KAAKF,IAAIwD,IAAI,UAAWtD,KAAKkc,eAC/B,GDvmBEC,MAAOlP,GACPmP,KAAMpM,GACNO,IE9CG,cACG3Q,EAGR,QAAAgB,CAASb,GAdX,IAAAyZ,EAeI3Y,OAAOC,OAAOd,KAAKD,QAASA,GAC5B,MAAwBoF,KAAhBmE,IAAAA,GAAgBnE,EAAR+E,mKAAA1E,CAAQL,EAAR,CAAR,QACR,GAAImE,EAAK,CACP,MAAM+S,EAA2Bra,GAAAA,GAAA,CAC/B7B,KAAMH,KAAKG,KACXsJ,YAAaS,EAAIT,YACjBE,QAASO,EAAIP,QACbC,QAASM,EAAIN,QACboK,OAAQjU,EAAQiU,OAChBsI,OAAQvc,EAAQuc,OAChBC,QAASxc,EAAQwc,QACjBlP,YAAa,OAAAmM,EAAAzZ,EAAQsN,cAARmM,GACVzZ,EAAQiK,QACRjK,EAAQuN,eAEb,IAAIzL,EACJ,MAAM8E,EAAUE,EAAuBqD,GASvC,OAPErI,EADE8E,EACM,IAAI4J,GAAIjH,KAAKtH,GAAA,CAAA,EAChBqa,WADgB,CAEnB1V,eAGM,IAAIkJ,EAAUU,IAAIjH,EAAK+S,GAE1Bxa,CACT,MACF,GFgBE2a,IGrDG,cAAyBxM,GAC9B,QAAApP,CAASb,GAEP,OAAO2I,MAAM9H,qIAASoB,CAAA,CACpBiG,KAAM,gBACNwB,YACE,2FACC1J,WAJiB,CAKpBuJ,IANU,+DAQd,KH8CArJ,GAZWwQ,GAYJ,kBAAkB,CACvBgM,KAAMC,EAAQC,KACdC,YI1DG,cAAiCF,EAAQG,YAE9C,WAAAhd,CAAYE,GACV2I,MAAM3I,GACN,MAAM+c,EAAoB/c,GAAWA,EAAQ+c,kBAC7C,GAAIA,EAAmB,CACrB,IAAIC,EAAyB,GACzB7d,MAAMC,QAAQ2d,GAChBC,EAAeD,EACNA,IACTC,EAAe,CAACD,IAElBC,EAAa3d,QAASoC,GAAMxB,KAAKgd,eAAexb,GAClD,CACF,KJ+CAvB,GAjBWwQ,GAiBJ,MAAMU,GAjBR,IAAM8L,GAANxM"}
@@ -1,4 +1,4 @@
1
- /** Bundle of @nextgis/leaflet-map-adapter; version: 4.0.0-alpha.1; author: NextGIS */
1
+ /** Bundle of @nextgis/leaflet-map-adapter; version: 4.0.0-alpha.2; author: NextGIS */
2
2
  var LeafletMapAdapter = (function () {
3
3
  'use strict';
4
4
 
@@ -17056,18 +17056,20 @@ var LeafletMapAdapter = (function () {
17056
17056
  };
17057
17057
  class WmsAdapter extends BaseAdapter {
17058
17058
  addLayer(options) {
17059
+ var _b;
17059
17060
  Object.assign(this.options, options);
17060
17061
  const _a = options, { url } = _a, opt = __objRest(_a, ["url"]);
17061
17062
  if (url) {
17062
- const layerOptions = __spreadValues$1({
17063
+ const layerOptions = __spreadValues$1(__spreadValues$1({
17063
17064
  pane: this.pane,
17064
17065
  attribution: opt.attribution,
17065
17066
  minZoom: opt.minZoom,
17066
17067
  maxZoom: opt.maxZoom,
17067
17068
  layers: options.layers,
17068
17069
  format: options.format,
17069
- transparent: true
17070
- }, options.nativeOptions);
17070
+ version: options.version,
17071
+ transparent: (_b = options.transparent) != null ? _b : true
17072
+ }, options.params), options.nativeOptions);
17071
17073
  let layer;
17072
17074
  const request = getLayerRequestOptions(opt);
17073
17075
  if (request) {