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