@nextgis/leaflet-map-adapter 1.12.1 → 1.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -18,5 +18,5 @@ PERFORMANCE OF THIS SOFTWARE.
18
18
  * A collection of Leaflet utilities for working with Web Mapping services.
19
19
  * (c) 2014-2016, Houston Engineering, Inc.
20
20
  * MIT License
21
- */function $(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=$((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=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=S(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,S(e))}),e)},a=0,s=this._positionEvents;a<s.length;a++){i(s[a])}}},n.layerAdapters={GEOJSON:R,IMAGE:H,TILE:X,WMS:Q,OSM:Y},n.controlAdapters={ZOOM:e.Zoom,ATTRIBUTION:M},n.Map=d,n}();export{et as default};
21
+ */function $(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=$((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=S(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,S(e))}),e)},a=0,s=this._positionEvents;a<s.length;a++){i(s[a])}}},n.layerAdapters={GEOJSON:R,IMAGE:H,TILE:X,WMS:Q,OSM:Y},n.controlAdapters={ZOOM:e.Zoom,ATTRIBUTION:M},n.Map=d,n}();export{et as default};
22
22
  //# 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"],"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 if (findFeatureFun) {\n const def = this._layers.filter(findFeatureFun);\n def.forEach((x) => {\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 (this.map as any)._addUnselectCb(() => {\n this._unSelectLayer(def);\n });\n if (this.options && !this.options.multiselect) {\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 _addMapListener() {\n const map = this.map;\n if (map) {\n const { labelField, labelOnHover, unselectOnClick } = this.options;\n const uoc = unselectOnClick ?? true;\n if (uoc) {\n map.on('click', this.$unselect);\n }\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.map.off('zoomend', this.$updateTooltip);\n this.map.off('moveend', this.$updateTooltip);\n this.map.off('click', this.$unselect);\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 maxZoom: 18,\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\n// applyMixins(WmsLayer, [RemoteTileLayer]);\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 = { 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): 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 this.map = 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"],"names":["convertMapClickEvent","evt","coord","containerPoint","latLng","latlng","lngLat","pixel","left","x","top","y","source","createControl","control","options","map","Control","extend","onAdd","element","document","createElement","content","classList","add","bar","addClass","margin","style","marginBottom","marginTop","marginLeft","marginRight","appendChild","DomEvent","disableClickPropagation","onRemove","_super","customAttribution","attributions","Array","isArray","forEach","_this","addAttribution","__extends","Attribution","boundsToArray","bounds","ne","getNorthEast","sw","getSouthWest","lng","lat","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","this","undefined","order","pane","exist","getPane","createPane","zIndex","String","Math","round","BaseAdapter","Object","assign","debounce","updateTooltip","unselect","GeoJsonAdapter","paint","layer","FeatureGroup","nativeOptions","selectedPaint","data","_addMapListener","_removeMapListener","findFeatureFun","_layers","filter","_selectLayer","selected","_setPaintEachLayer","_unSelectLayer","_openedPopup","_i","_removePopup","_selectedLayers","target","feature","_filteredLayers","fun","_filterFun","layer_","_map","remove","filteredLayers_1","addLayer","removeLayer","addTo","visible","cb","def","splice","clearLayers","clearLayer","geoJsonOptions","detectedType","geojson","geometries","g","detectType","console","warn","_data","filterGeometries","_getGeoJsonOptions","_openPopup","layerDef","_updateTooltip","getLayers","isValid","value","setPaint","setSelectedPaint","_setPaint","__assign","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","unselectOnClose","p","getPopup","once","openPopup","closePopup","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_1","ok","popup_1","popupOptions_1","selectable","interactive","on","e","_selectOnLayerClick","_handleMouseEvents","setTimeout","onMouseOut","onMouseOver","onClick_","_getSelected","_createMouseEvent","event","createMouseEvent","find","stopPropagation","isSelected","unselectOnSecondClick","_addUnselectCb","multiselect","popupOnSelect","onSelect","icon","toLIconOpt","DivIcon","className","html","geoJsonPoint","Marker","CircleMarker","paintOptions","unselectOnClick","$unselect","$updateTooltip","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","_initImage","img_1","_image","LImageOverlay","url","service","request","version","layers","styles","format","transparent","crs","uppercase","attribution","isBack","minZoom","maxZoom","viewPortBuffer","setViewDelay","_url","opt","params","opts","Util","setOptions","wmsParams","defaultWmsParams","ImageLayer","update","_currentOverlay","cancelLoad","_currentUrl","moveend","updateWmsParams","getImageUrl","pad","overlay","setOpacity","bringToBack","bringToFront","setZIndex","getZoom","size","getSize","factor","ceil","wmsVersion","parseFloat","projectionKey","nw","project","getNorthWest","se","getSouthEast","width","height","code","bbox","CRS","EPSG4326","join","pstr","getParamString","Layer","ImageAdapter","updateWmsParamsFromOpt_1","updateWmsParams_1","call","wait","timeoutId","wrapper","args","clear","apply","clearTimeout","makeRemote","Base","_update","GridLayer","prototype","RemoteTileLayer","coords","done","getTileUrl","tile","crossOrigin","alt","setAttribute","tiles","_tiles","tileZoom","_tileZoom","i","z","el","falseFn","onerror","complete","emptyImageUrl","DomUtil","TileLayer","urlTemplate","TL","TileAdapter","tileLayerOptions","subdomains","WmsLayer","WMS","WmsAdapter","layerOptions","OsmAdapter","name","arrayToBoundsExpression","LeafletMapAdapter","layerAdapters","controlAdapters","EventEmitter","zoom","center","mb","mapAdapterOptions","Map","attributionControl","zoomControl","maxBounds","defPane","emitter","emit","_addMapListeners","_stopWatchSizeChangeToUpdateMinZoom","getContainer","controlContainer","_controlContainer","Error","cursor","lngLatOrOpt","setView","animate","setCenter","zoom_1","setZoom","fitBounds","b","setMaxBounds","setMinZoom","getBoundsZoom","_watchSizeChangeToUpdateMinZoom","setMaxZoom","panTo","offset","padding","link","title","href","stop","HTMLElement","innerHTML","onClick","addEventListener","parent","parentNode","removeChild","removeEventListener","createButtonControl","position","replace","addControl","removeControl","converted","events","locate","locationfound_1","locationerror_1","locationFound_1","_unselectCb","container","ResizeObserver","_resizeObserver","observe","disconnect","onMapClick","_universalEvents","_positionEvents","_b","GEOJSON","IMAGE","TILE","OSM","ZOOM","Zoom","ATTRIBUTION","AttributionControl"],"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"],"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 if (findFeatureFun) {\n const def = this._layers.filter(findFeatureFun);\n def.forEach((x) => {\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 (this.map as any)._addUnselectCb(() => {\n this._unSelectLayer(def);\n });\n if (this.options && !this.options.multiselect) {\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 _addMapListener() {\n const map = this.map;\n if (map) {\n const { labelField, labelOnHover, unselectOnClick } = this.options;\n const uoc = unselectOnClick ?? true;\n if (uoc) {\n map.on('click', this.$unselect);\n }\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.map.off('zoomend', this.$updateTooltip);\n this.map.off('moveend', this.$updateTooltip);\n this.map.off('click', this.$unselect);\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 maxZoom: 18,\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\n// applyMixins(WmsLayer, [RemoteTileLayer]);\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"],"names":["convertMapClickEvent","evt","coord","containerPoint","latLng","latlng","lngLat","pixel","left","x","top","y","source","createControl","control","options","map","Control","extend","onAdd","element","document","createElement","content","classList","add","bar","addClass","margin","style","marginBottom","marginTop","marginLeft","marginRight","appendChild","DomEvent","disableClickPropagation","onRemove","_super","customAttribution","attributions","Array","isArray","forEach","_this","addAttribution","__extends","Attribution","boundsToArray","bounds","ne","getNorthEast","sw","getSouthWest","lng","lat","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","this","undefined","order","pane","exist","getPane","createPane","zIndex","String","Math","round","BaseAdapter","Object","assign","debounce","updateTooltip","unselect","GeoJsonAdapter","paint","layer","FeatureGroup","nativeOptions","selectedPaint","data","_addMapListener","_removeMapListener","findFeatureFun","_layers","filter","_selectLayer","selected","_setPaintEachLayer","_unSelectLayer","_openedPopup","_i","_removePopup","_selectedLayers","target","feature","_filteredLayers","fun","_filterFun","layer_","_map","remove","filteredLayers_1","addLayer","removeLayer","addTo","visible","cb","def","splice","clearLayers","clearLayer","geoJsonOptions","detectedType","geojson","geometries","g","detectType","console","warn","_data","filterGeometries","_getGeoJsonOptions","_openPopup","layerDef","_updateTooltip","getLayers","isValid","value","setPaint","setSelectedPaint","_setPaint","__assign","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","unselectOnClose","p","getPopup","once","openPopup","closePopup","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_1","ok","popup_1","popupOptions_1","selectable","interactive","on","e","_selectOnLayerClick","_handleMouseEvents","setTimeout","onMouseOut","onMouseOver","onClick_","_getSelected","_createMouseEvent","event","createMouseEvent","find","stopPropagation","isSelected","unselectOnSecondClick","_addUnselectCb","multiselect","popupOnSelect","onSelect","icon","toLIconOpt","DivIcon","className","html","geoJsonPoint","Marker","CircleMarker","paintOptions","unselectOnClick","$unselect","$updateTooltip","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","_initImage","img_1","_image","LImageOverlay","url","service","request","version","layers","styles","format","transparent","crs","uppercase","attribution","isBack","minZoom","maxZoom","viewPortBuffer","setViewDelay","_url","opt","params","opts","Util","setOptions","wmsParams","defaultWmsParams","ImageLayer","update","_currentOverlay","cancelLoad","_currentUrl","moveend","updateWmsParams","getImageUrl","pad","overlay","setOpacity","bringToBack","bringToFront","setZIndex","getZoom","size","getSize","factor","ceil","wmsVersion","parseFloat","projectionKey","nw","project","getNorthWest","se","getSouthEast","width","height","code","bbox","CRS","EPSG4326","join","pstr","getParamString","Layer","ImageAdapter","updateWmsParamsFromOpt_1","updateWmsParams_1","call","wait","timeoutId","wrapper","args","clear","apply","clearTimeout","makeRemote","Base","_update","GridLayer","prototype","RemoteTileLayer","coords","done","getTileUrl","tile","crossOrigin","alt","setAttribute","tiles","_tiles","tileZoom","_tileZoom","i","z","el","falseFn","onerror","complete","emptyImageUrl","DomUtil","TileLayer","urlTemplate","TL","TileAdapter","tileLayerOptions","subdomains","WmsLayer","WMS","WmsAdapter","layerOptions","OsmAdapter","name","arrayToBoundsExpression","LeafletMapAdapter","layerAdapters","controlAdapters","EventEmitter","zoom","center","mb","mapAdapterOptions","Map","attributionControl","zoomControl","maxBounds","defPane","emitter","emit","_addMapListeners","_stopWatchSizeChangeToUpdateMinZoom","getContainer","controlContainer","_controlContainer","Error","cursor","lngLatOrOpt","setView","animate","setCenter","zoom_1","setZoom","fitBounds","b","setMaxBounds","setMinZoom","getBoundsZoom","_watchSizeChangeToUpdateMinZoom","setMaxZoom","panTo","offset","padding","link","title","href","stop","HTMLElement","innerHTML","onClick","addEventListener","parent","parentNode","removeChild","removeEventListener","createButtonControl","position","replace","addControl","removeControl","converted","events","locate","locationfound_1","locationerror_1","locationFound_1","_unselectCb","container","ResizeObserver","_resizeObserver","observe","disconnect","onMapClick","_universalEvents","_positionEvents","_b","GEOJSON","IMAGE","TILE","OSM","ZOOM","Zoom","ATTRIBUTION","AttributionControl"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** Bundle of @nextgis/leaflet-map-adapter; version: 1.12.1; author: NextGIS */
1
+ /** Bundle of @nextgis/leaflet-map-adapter; version: 1.13.0; author: NextGIS */
2
2
  var LeafletMapAdapter = (function () {
3
3
  'use strict';
4
4
 
@@ -16044,7 +16044,9 @@ var LeafletMapAdapter = (function () {
16044
16044
  this.options = __assign({}, options);
16045
16045
  if (this.options.target) {
16046
16046
  var _a = this.options, zoom = _a.zoom, center = _a.center, maxZoom = _a.maxZoom, minZoom = _a.minZoom, mb = _a.maxBounds, mapAdapterOptions = _a.mapAdapterOptions;
16047
- this.map = new leafletSrc.exports.Map(this.options.target, __assign({ attributionControl: false, zoomControl: false, maxBounds: mb ? arrayToBoundsExpression(mb) : undefined, maxZoom: maxZoom, minZoom: minZoom, center: center && [center[1], center[0]], zoom: zoom }, mapAdapterOptions));
16047
+ this.map =
16048
+ this.options.map ||
16049
+ new leafletSrc.exports.Map(this.options.target, __assign({ attributionControl: false, zoomControl: false, maxBounds: mb ? arrayToBoundsExpression(mb) : undefined, maxZoom: maxZoom, minZoom: minZoom, center: center && [center[1], center[0]], zoom: zoom }, mapAdapterOptions));
16048
16050
  // create default pane
16049
16051
  var defPane = this.map.createPane('order-0');
16050
16052
  this.map._addUnselectCb = function (def) {