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