@nextgis/leaflet-map-adapter 1.16.1 → 1.16.5

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.
@@ -4,5 +4,5 @@ import{EventEmitter as t}from"events";import{Control as e,DomEvent as o,GeoJSON
4
4
  * A collection of Leaflet utilities for working with Web Mapping services.
5
5
  * (c) 2014-2016, Houston Engineering, Inc.
6
6
  * MIT License
7
- */function H(t,e){var o;function n(){for(var r=this,i=[],a=0;a<arguments.length;a++)i[a]=arguments[a];n.clear(),o=setTimeout((function(){o=null,t.apply(r,i)}),e)}return void 0===e&&(e=10),n.clear=function(){o&&(clearTimeout(o),o=null)},n}function q(t){return function(t){function e(){for(var e=[],o=0;o<arguments.length;o++)e[o]=arguments[o];var n=t.apply(this,e)||this;return n.options.setViewDelay&&(n._update=H((function(){for(var t,e=[],o=0;o<arguments.length;o++)e[o]=arguments[o];(t=h.prototype._update).call.apply(t,x([n],e,!1))}),n.options.setViewDelay)),n}return P(e,t),e.prototype.createTile=function(t,e){var o=this.getTileUrl(t),n=document.createElement("img");return n.abort=V(o,(function(t){n.src=t,e(null,n)}),this.options.headers),(this.options.crossOrigin||""===this.options.crossOrigin)&&(n.crossOrigin=!0===this.options.crossOrigin?"":this.options.crossOrigin),n.alt="",n.setAttribute("role","presentation"),n},e.prototype._abortLoading=function(){var t=this._tiles,e=this._tileZoom;for(var o in t)if(t[o].coords.z!==e){var n=t[o].el;n.onload=u.falseFn,n.onerror=u.falseFn,n.complete||(n.abort&&n.abort(),n.src=u.emptyImageUrl,f.remove(n),delete t[o])}},e}(t)}var J=q(function(t){function e(e,o){var n=t.call(this,e,o)||this;return Object.assign(n.options,o),n}return P(e,t),e}(y)),X=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return P(e,t),e.prototype.addLayer=function(t){if(this.options=Object.assign(this.options,t),t){var e=t.url,o=L(t,["url"]);if(e){var n=O({pane:this.pane,attribution:o.attribution,minZoom:o.minZoom,maxZoom:o.maxZoom},o.nativeOptions);o.subdomains&&(n.subdomains=o.subdomains);return o.headers?new J(e,O(O({},n),{headers:o.headers,setViewDelay:o.setViewDelay})):new y(e,n)}}},e}(D),K=q(function(t){function e(e,o){return t.call(this,e,o)||this}return P(e,t),e}(y.WMS)),Q=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return P(e,t),e.prototype.addLayer=function(t){Object.assign(this.options,t);var e=t.url,o=L(t,["url"]);if(e){var n=O({pane:this.pane,attribution:o.attribution,minZoom:o.minZoom,maxZoom:o.maxZoom,layers:t.layers,format:t.format},t.nativeOptions);return o.headers?new K(e,O(O({},n),{headers:o.headers})):new y.WMS(e,n)}},e}(D),Y=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return P(e,t),e.prototype.addLayer=function(e){return t.prototype.addLayer.call(this,O(O({name:"OpenStreetMap",attribution:'&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'},e),{url:"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"}))},e}(X);function tt(t){return[[t[3],t[0]],[t[1],t[2]]]}var et=function(){function n(){this.options={target:"map"},this.layerAdapters=n.layerAdapters,this.controlAdapters=n.controlAdapters,this.emitter=new t,this._unselectCb=[],this._universalEvents=["move","zoom","zoomend","zoomstart","moveend","movestart"],this._positionEvents=["mousemove","mouseout","mouseover"]}return n.prototype.create=function(t){var e=this;if(this.options=O({},t),this.options.target){var o=this.options,n=o.zoom,r=o.center,i=o.maxZoom,a=o.minZoom,s=o.maxBounds,p=o.mapAdapterOptions;this.map=this.options.map||new d(this.options.target,O({attributionControl:!1,zoomControl:!1,maxBounds:s?tt(s):void 0,maxZoom:i,minZoom:a,center:r&&[r[1],r[0]],zoom:n},p));var u=this.map.createPane("order-0");this.map._addUnselectCb=function(t){e._addUnselectCb(t)},u.style.zIndex=String(0),this.emitter.emit("create",this),this._addMapListeners()}},n.prototype.destroy=function(){this.map&&this.map.remove(),this._stopWatchSizeChangeToUpdateMinZoom()},n.prototype.getContainer=function(){return this.map&&this.map.getContainer()},n.prototype.getControlContainer=function(){var t=this.map&&this.map._controlContainer;if(t)return t;throw new Error("Leaflet Map is not initialized yet")},n.prototype.setCursor=function(t){this.map&&(this.map.getContainer().style.cursor=t)},n.prototype.setView=function(t,e){var o=this.map;if(o)if(Array.isArray(t)){var n=t[0],r=t[1];this.map&&("number"==typeof e?this.map.setView([r,n],e,{animate:!1}):this.setCenter([n,r]))}else{var i=t.zoom,a=t.center,s=t.maxBounds,p=t.bounds,u=t.minZoom,c=t.maxZoom;if(a&&void 0!==i?this.setView(a,i):(void 0!==i&&this.setZoom(i),a&&this.setCenter(a)),p&&this.fitBounds(p),void 0!==s)if(s){var l=tt(s);o.setMaxBounds(l),o.setMinZoom(o.getBoundsZoom(l)),this._watchSizeChangeToUpdateMinZoom(l)}else o.setMaxBounds(null),this._stopWatchSizeChangeToUpdateMinZoom();void 0!==c&&o.setMaxZoom(c),void 0!==u&&(this._stopWatchSizeChangeToUpdateMinZoom(),o.setMinZoom(u))}},n.prototype.setCenter=function(t){this.map&&this.map.panTo([t[1],t[0]])},n.prototype.getCenter=function(){var t=this.map;if(t){var e=t.getBounds().getCenter();return[e.lng,e.lat]}},n.prototype.setZoom=function(t){this.map&&this.map.setZoom(t)},n.prototype.getZoom=function(){return this.map&&this.map.getZoom()||void 0},n.prototype.getBounds=function(){if(this.map){var t=this.map.getBounds(),e=t.getSouthWest(),o=t.getNorthEast();return[e.lng,e.lat,o.lng,o.lat]}},n.prototype.fitBounds=function(t,e){if(void 0===e&&(e={}),this.map){var o=e.maxZoom,n=e.offset,r=e.padding,i={};o&&(i.maxZoom=o),r&&(i.padding=[r,r]),n&&(i.padding=n),this.map.fitBounds(tt(t),i)}},n.prototype.getLayerAdapter=function(t){return n.layerAdapters[t]},n.prototype.createControl=function(t,e){return T(t,e,this)},n.prototype.createButtonControl=function(t){return function(t,e){var n=document.createElement("a"),r=t.title||"";n.href="#",n.title=r,n.setAttribute("role","button"),n.setAttribute("aria-label",r),t.addClass&&n.classList.add(t.addClass),o.disableClickPropagation(n),o.on(n,"click",o.stop),t.html instanceof HTMLElement?n.appendChild(t.html):"string"==typeof t.html&&(n.innerHTML=t.html);var i=function(e){e.stopPropagation(),t.onClick()};return T({onAdd:function(){return void 0!==t.onClick&&n.addEventListener("click",i),n},onRemove:function(){var e=n.parentNode;e&&e.removeChild(n),void 0!==t.onClick&&n.removeEventListener("click",i)}},{bar:!0},e)}(t,this)},n.prototype.addControl=function(t,e){if(t.options.position=e.replace("-",""),this.map)return this.map.addControl(t),t},n.prototype.removeControl=function(t){this.map&&this.map.removeControl(t)},n.prototype.removeLayer=function(t){t&&t.remove&&t.remove()},n.prototype.showLayer=function(t){this.map&&t.addTo(this.map)},n.prototype.hideLayer=function(t){t.remove()},n.prototype.setLayerOpacity=function(t,e){"setOpacity"in t&&t.setOpacity(e)},n.prototype.setLayerOrder=function(t,e,o){},n.prototype.onMapClick=function(t){var e=M(t);this.emitter.emit("preclick",e),this.emitter.emit("click",e)},n.prototype.locate=function(t,e){var o=this.map;if(o&&(o.locate(t),e)){var n=e.locationfound,r=e.locationerror,i=function(t){n({lngLat:[t.latlng.lng,t.latlng.lat]})};void 0!==n&&o.on("locationfound",i,this),r&&o.on("locationerror",r,this);return{stop:function(){void 0!==n&&o.off("locationfound",i),r&&o.off("locationerror",r)}}}return{stop:function(){}}},n.prototype._addUnselectCb=function(t){for(var e=0,o=this._unselectCb;e<o.length;e++){(0,o[e])()}this._unselectCb.length=0,this._unselectCb.push(t)},n.prototype._watchSizeChangeToUpdateMinZoom=function(t){this._stopWatchSizeChangeToUpdateMinZoom();var e=this.getContainer(),o=this.map;e&&o&&window.ResizeObserver&&(this._resizeObserver=new ResizeObserver((function(){o.setMinZoom(o.getBoundsZoom(t))})),this._resizeObserver.observe(e))},n.prototype._stopWatchSizeChangeToUpdateMinZoom=function(){var t=this.map;t&&t.setMinZoom(0),this._resizeObserver&&(this._resizeObserver.disconnect(),this._resizeObserver=void 0)},n.prototype._addMapListeners=function(){var t=this,e=this.map;if(e){e.on("click",(function(e){t.onMapClick(e)}));for(var o=function(o){e.on(o,(function(){return t.emitter.emit(o,t)}),e)},n=0,r=this._universalEvents;n<r.length;n++){o(r[n])}for(var i=function(o){e.on(o,(function(e){return t.emitter.emit(o,M(e))}),e)},a=0,s=this._positionEvents;a<s.length;a++){i(s[a])}}},n.layerAdapters={GEOJSON:R,IMAGE:N,TILE:X,WMS:Q,OSM:Y},n.controlAdapters={ZOOM:e.Zoom,ATTRIBUTION:S},n.Map=d,n}(),ot=et;export{ot as default};
7
+ */function H(t,e){var o;function n(){for(var r=this,i=[],a=0;a<arguments.length;a++)i[a]=arguments[a];n.clear(),o=setTimeout((function(){o=null,t.apply(r,i)}),e)}return void 0===e&&(e=10),n.clear=function(){o&&(clearTimeout(o),o=null)},n}function q(t){return function(t){function e(){for(var e=[],o=0;o<arguments.length;o++)e[o]=arguments[o];var n=t.apply(this,e)||this;return n.options.setViewDelay&&(n._update=H((function(){for(var t,e=[],o=0;o<arguments.length;o++)e[o]=arguments[o];(t=h.prototype._update).call.apply(t,x([n],e,!1))}),n.options.setViewDelay)),n}return P(e,t),e.prototype.createTile=function(t,e){var o=this.getTileUrl(t),n=document.createElement("img");return n.abort=V(o,(function(t){n.src=t,e(null,n)}),this.options.headers),(this.options.crossOrigin||""===this.options.crossOrigin)&&(n.crossOrigin=!0===this.options.crossOrigin?"":this.options.crossOrigin),n.alt="",n.setAttribute("role","presentation"),n},e.prototype._abortLoading=function(){var t=this._tiles,e=this._tileZoom;for(var o in t)if(t[o].coords.z!==e){var n=t[o].el;n.onload=u.falseFn,n.onerror=u.falseFn,n.complete||(n.abort&&n.abort(),n.src=u.emptyImageUrl,f.remove(n),delete t[o])}},e}(t)}var J=q(function(t){function e(e,o){var n=t.call(this,e,o)||this;return Object.assign(n.options,o),n}return P(e,t),e}(y)),X=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return P(e,t),e.prototype.addLayer=function(t){if(this.options=Object.assign(this.options,t),t){var e=t.url,o=L(t,["url"]);if(e){var n=O({pane:this.pane,attribution:o.attribution,minZoom:o.minZoom,maxZoom:o.maxZoom},o.nativeOptions);o.subdomains&&(n.subdomains=o.subdomains);return o.headers?new J(e,O(O({},n),{headers:o.headers,setViewDelay:o.setViewDelay})):new y(e,n)}}},e}(D),K=q(function(t){function e(e,o){return t.call(this,e,o)||this}return P(e,t),e}(y.WMS)),Q=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return P(e,t),e.prototype.addLayer=function(t){Object.assign(this.options,t);var e=t.url,o=L(t,["url"]);if(e){var n=O({pane:this.pane,attribution:o.attribution,minZoom:o.minZoom,maxZoom:o.maxZoom,layers:t.layers,format:t.format},t.nativeOptions);return o.headers?new K(e,O(O({},n),{headers:o.headers})):new y.WMS(e,n)}},e}(D),Y=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return P(e,t),e.prototype.addLayer=function(e){return t.prototype.addLayer.call(this,O(O({name:"OpenStreetMap",attribution:'&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'},e),{url:"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"}))},e}(X);function tt(t){return[[t[3],t[0]],[t[1],t[2]]]}var et=function(){function n(){this.options={target:"map"},this.layerAdapters=n.layerAdapters,this.controlAdapters=n.controlAdapters,this.emitter=new t,this._unselectCb=[],this._universalEvents=["move","zoom","zoomend","zoomstart","moveend","movestart"],this._positionEvents=["mousemove","mouseout","mouseover"]}return n.prototype.create=function(t){var e=this;if(this.options=O({},t),this.options.target){var o=this.options,n=o.zoom,r=o.center,i=o.maxZoom,a=o.minZoom,s=o.maxBounds,p=o.mapAdapterOptions;this.map=this.options.map||new d(this.options.target,O({attributionControl:!1,zoomControl:!1,maxBounds:s?tt(s):void 0,maxZoom:i,minZoom:a,center:r&&[r[1],r[0]],zoom:n},p));var u=this.map.createPane("order-0");this.map._addUnselectCb=function(t){e._addUnselectCb(t)},u.style.zIndex=String(0),this.emitter.emit("create",this),this._addMapListeners()}},n.prototype.destroy=function(){this.map&&this.map.remove(),this._stopWatchSizeChangeToUpdateMinZoom()},n.prototype.getContainer=function(){return this.map&&this.map.getContainer()},n.prototype.getControlContainer=function(){var t=this.map&&this.map._controlContainer;if(t)return t;throw new Error("Leaflet Map is not initialized yet")},n.prototype.setCursor=function(t){this.map&&(this.map.getContainer().style.cursor=t)},n.prototype.setView=function(t,e){var o=this.map;if(o)if(Array.isArray(t)){var n=t[0],r=t[1];this.map&&("number"==typeof e?this.map.setView([r,n],e,{animate:!1}):this.setCenter([n,r]))}else{var i=t.zoom,a=t.center,s=t.maxBounds,p=t.bounds,u=t.minZoom,c=t.maxZoom;if(a&&void 0!==i?this.setView(a,i):(void 0!==i&&this.setZoom(i),a&&this.setCenter(a)),p&&this.fitBounds(p),void 0!==s)if(s){var l=tt(s);o.setMaxBounds(l),o.setMinZoom(o.getBoundsZoom(l)),this._watchSizeChangeToUpdateMinZoom(l)}else o.setMaxBounds(null),this._stopWatchSizeChangeToUpdateMinZoom();void 0!==c&&o.setMaxZoom(c),void 0!==u&&(this._stopWatchSizeChangeToUpdateMinZoom(),o.setMinZoom(u))}},n.prototype.setCenter=function(t){this.map&&this.map.panTo([t[1],t[0]])},n.prototype.getCenter=function(){var t=this.map;if(t){var e=t.getBounds().getCenter();return[e.lng,e.lat]}},n.prototype.setZoom=function(t){this.map&&this.map.setZoom(t)},n.prototype.getZoom=function(){var t;return null!==(t=this.map&&this.map.getZoom())&&void 0!==t?t:void 0},n.prototype.getBounds=function(){if(this.map){var t=this.map.getBounds(),e=t.getSouthWest(),o=t.getNorthEast();return[e.lng,e.lat,o.lng,o.lat]}},n.prototype.fitBounds=function(t,e){if(void 0===e&&(e={}),this.map){var o=e.maxZoom,n=e.offset,r=e.padding,i={};o&&(i.maxZoom=o),r&&(i.padding=[r,r]),n&&(i.padding=n),this.map.fitBounds(tt(t),i)}},n.prototype.getLayerAdapter=function(t){return n.layerAdapters[t]},n.prototype.createControl=function(t,e){return T(t,e,this)},n.prototype.createButtonControl=function(t){return function(t,e){var n=document.createElement("a"),r=t.title||"";n.href="#",n.title=r,n.setAttribute("role","button"),n.setAttribute("aria-label",r),t.addClass&&n.classList.add(t.addClass),o.disableClickPropagation(n),o.on(n,"click",o.stop),t.html instanceof HTMLElement?n.appendChild(t.html):"string"==typeof t.html&&(n.innerHTML=t.html);var i=function(e){e.stopPropagation(),t.onClick()};return T({onAdd:function(){return void 0!==t.onClick&&n.addEventListener("click",i),n},onRemove:function(){var e=n.parentNode;e&&e.removeChild(n),void 0!==t.onClick&&n.removeEventListener("click",i)}},{bar:!0},e)}(t,this)},n.prototype.addControl=function(t,e){if(t.options.position=e.replace("-",""),this.map)return this.map.addControl(t),t},n.prototype.removeControl=function(t){this.map&&this.map.removeControl(t)},n.prototype.removeLayer=function(t){t&&t.remove&&t.remove()},n.prototype.showLayer=function(t){this.map&&t.addTo(this.map)},n.prototype.hideLayer=function(t){t.remove()},n.prototype.setLayerOpacity=function(t,e){"setOpacity"in t&&t.setOpacity(e)},n.prototype.setLayerOrder=function(t,e,o){},n.prototype.onMapClick=function(t){var e=M(t);this.emitter.emit("preclick",e),this.emitter.emit("click",e)},n.prototype.locate=function(t,e){var o=this.map;if(o&&(o.locate(t),e)){var n=e.locationfound,r=e.locationerror,i=function(t){n({lngLat:[t.latlng.lng,t.latlng.lat]})};void 0!==n&&o.on("locationfound",i,this),r&&o.on("locationerror",r,this);return{stop:function(){void 0!==n&&o.off("locationfound",i),r&&o.off("locationerror",r)}}}return{stop:function(){}}},n.prototype._addUnselectCb=function(t){for(var e=0,o=this._unselectCb;e<o.length;e++){(0,o[e])()}this._unselectCb.length=0,this._unselectCb.push(t)},n.prototype._watchSizeChangeToUpdateMinZoom=function(t){this._stopWatchSizeChangeToUpdateMinZoom();var e=this.getContainer(),o=this.map;e&&o&&window.ResizeObserver&&(this._resizeObserver=new ResizeObserver((function(){o.setMinZoom(o.getBoundsZoom(t))})),this._resizeObserver.observe(e))},n.prototype._stopWatchSizeChangeToUpdateMinZoom=function(){var t=this.map;t&&t.setMinZoom(0),this._resizeObserver&&(this._resizeObserver.disconnect(),this._resizeObserver=void 0)},n.prototype._addMapListeners=function(){var t=this,e=this.map;if(e){e.on("click",(function(e){t.onMapClick(e)}));for(var o=function(o){e.on(o,(function(){return t.emitter.emit(o,t)}),e)},n=0,r=this._universalEvents;n<r.length;n++){o(r[n])}for(var i=function(o){e.on(o,(function(e){return t.emitter.emit(o,M(e))}),e)},a=0,s=this._positionEvents;a<s.length;a++){i(s[a])}}},n.layerAdapters={GEOJSON:R,IMAGE:N,TILE:X,WMS:Q,OSM:Y},n.controlAdapters={ZOOM:e.Zoom,ATTRIBUTION:S},n.Map=d,n}(),ot=et;export{ot as default};
8
8
  //# sourceMappingURL=leaflet-map-adapter.esm-bundler.prod.js.map
@@ -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 '&copy; <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/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 '&copy; <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,4 +1,4 @@
1
- /** Bundle of @nextgis/leaflet-map-adapter; version: 1.16.1; author: NextGIS */
1
+ /** Bundle of @nextgis/leaflet-map-adapter; version: 1.16.5; author: NextGIS */
2
2
  var LeafletMapAdapter = (function () {
3
3
  'use strict';
4
4
 
@@ -16165,7 +16165,8 @@ var LeafletMapAdapter = (function () {
16165
16165
  }
16166
16166
  };
16167
16167
  LeafletMapAdapter.prototype.getZoom = function () {
16168
- return (this.map && this.map.getZoom()) || undefined;
16168
+ var _a;
16169
+ return (_a = (this.map && this.map.getZoom())) !== null && _a !== void 0 ? _a : undefined;
16169
16170
  };
16170
16171
  LeafletMapAdapter.prototype.getBounds = function () {
16171
16172
  if (!this.map)