cone.maps 0.2__py3-none-any.whl

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.
Files changed (39) hide show
  1. cone/maps/__init__.py +64 -0
  2. cone/maps/browser/__init__.py +4 -0
  3. cone/maps/browser/map.py +139 -0
  4. cone/maps/browser/static/cone.maps.js +109 -0
  5. cone/maps/browser/static/cone.maps.min.js +1 -0
  6. cone/maps/browser/static/leaflet/images/layers-2x.png +0 -0
  7. cone/maps/browser/static/leaflet/images/layers.png +0 -0
  8. cone/maps/browser/static/leaflet/images/marker-icon-2x.png +0 -0
  9. cone/maps/browser/static/leaflet/images/marker-icon.png +0 -0
  10. cone/maps/browser/static/leaflet/images/marker-shadow.png +0 -0
  11. cone/maps/browser/static/leaflet/leaflet-src.js +14062 -0
  12. cone/maps/browser/static/leaflet/leaflet-src.js.map +1 -0
  13. cone/maps/browser/static/leaflet/leaflet.css +640 -0
  14. cone/maps/browser/static/leaflet/leaflet.js +6 -0
  15. cone/maps/browser/static/leaflet/leaflet.js.map +1 -0
  16. cone/maps/browser/static/leaflet-activearea/leaflet.activearea.js +458 -0
  17. cone/maps/browser/static/leaflet-geosearch/geosearch.css +240 -0
  18. cone/maps/browser/static/leaflet-geosearch/geosearch.umd.js +2 -0
  19. cone/maps/browser/static/leaflet-geosearch/geosearch.umd.js.map +1 -0
  20. cone/maps/browser/static/leaflet-markercluster/MarkerCluster.Default.css +60 -0
  21. cone/maps/browser/static/leaflet-markercluster/MarkerCluster.css +14 -0
  22. cone/maps/browser/static/leaflet-markercluster/leaflet.markercluster-src.js +2718 -0
  23. cone/maps/browser/static/leaflet-markercluster/leaflet.markercluster-src.js.map +1 -0
  24. cone/maps/browser/static/leaflet-markercluster/leaflet.markercluster.js +2 -0
  25. cone/maps/browser/static/leaflet-markercluster/leaflet.markercluster.js.map +1 -0
  26. cone/maps/browser/static/leaflet-nogap/L.TileLayer.NoGap.js +243 -0
  27. cone/maps/browser/static/leaflet-proj4/proj4leaflet.js +272 -0
  28. cone/maps/browser/static/proj4js/proj4-src.js +7174 -0
  29. cone/maps/browser/static/proj4js/proj4.js +1 -0
  30. cone/maps/locale/cone.maps.pot +0 -0
  31. cone/maps/tests.py +54 -0
  32. cone.maps-0.2-py3.9-nspkg.pth +1 -0
  33. cone_maps-0.2.dist-info/METADATA +179 -0
  34. cone_maps-0.2.dist-info/RECORD +39 -0
  35. cone_maps-0.2.dist-info/WHEEL +5 -0
  36. cone_maps-0.2.dist-info/licenses/LICENSE.rst +26 -0
  37. cone_maps-0.2.dist-info/licenses/LICENSE_LEAFLET.rst +23 -0
  38. cone_maps-0.2.dist-info/namespace_packages.txt +1 -0
  39. cone_maps-0.2.dist-info/top_level.txt +1 -0
@@ -0,0 +1,2 @@
1
+ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("leaflet")):"function"==typeof define&&define.amd?define(["exports","leaflet"],e):e((t=t||self).GeoSearch={},t.L)}(this,function(t,e){function r(){return(r=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var r=arguments[e];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(t[n]=r[n])}return t}).apply(this,arguments)}function n(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,t.__proto__=e}function o(t,e){return(o=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function s(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(t){return!1}}function i(t,e,r){return(i=s()?Reflect.construct:function(t,e,r){var n=[null];n.push.apply(n,e);var s=new(Function.bind.apply(t,n));return r&&o(s,r.prototype),s}).apply(null,arguments)}function a(t,e,r,n){void 0===e&&(e=""),void 0===n&&(n={});var o=document.createElement(t);return e&&(o.className=e),Object.keys(n).forEach(function(t){if("function"==typeof n[t]){var e=0===t.indexOf("on")?t.substr(2).toLowerCase():t;o.addEventListener(e,n[t])}else"html"===t?o.innerHTML=n[t]:"text"===t?o.innerText=n[t]:o.setAttribute(t,n[t])}),r&&r.appendChild(o),o}function u(t){t.preventDefault(),t.stopPropagation()}e=e&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e;var l=function(){for(var t=arguments.length,e=new Array(t),r=0;r<t;r++)e[r]=arguments[r];return e.filter(Boolean).join(" ").trim()};function c(t,e){t&&t.classList&&(Array.isArray(e)?e:[e]).forEach(function(e){t.classList.contains(e)||t.classList.add(e)})}function h(t,e){t&&t.classList&&(Array.isArray(e)?e:[e]).forEach(function(e){t.classList.contains(e)&&t.classList.remove(e)})}var p,d=13,f=40,m=38,v=[d,27,f,m,37,39],y=function(){function t(t){var e=this,r=t.handleSubmit,n=t.searchLabel,o=t.classNames,s=void 0===o?{}:o;this.hasError=!1,this.container=a("div",l("geosearch",s.container)),this.form=a("form",["",s.form].join(" "),this.container,{autocomplete:"none",onClick:u,onDblClick:u,touchStart:u,touchEnd:u}),this.input=a("input",["glass",s.input].join(" "),this.form,{type:"text",placeholder:n||"search",onInput:this.onInput,onKeyUp:function(t){return e.onKeyUp(t)},onKeyPress:function(t){return e.onKeyPress(t)},onFocus:this.onFocus,onBlur:this.onBlur,onClick:function(){e.input.focus(),e.input.dispatchEvent(new Event("focus"))}}),this.handleSubmit=r}var e=t.prototype;return e.onFocus=function(){c(this.form,"active")},e.onBlur=function(){h(this.form,"active")},e.onSubmit=function(t){try{var e=this;return u(t),h(r=e.container,"error"),c(r,"pending"),Promise.resolve(e.handleSubmit({query:e.input.value})).then(function(){h(e.container,"pending")})}catch(t){return Promise.reject(t)}var r},e.onInput=function(){this.hasError&&(h(this.container,"error"),this.hasError=!1)},e.onKeyUp=function(t){27===t.keyCode&&(h(this.container,["pending","active"]),this.input.value="",document.body.focus(),document.body.blur())},e.onKeyPress=function(t){t.keyCode===d&&this.onSubmit(t)},e.setQuery=function(t){this.input.value=t},t}(),g=function(){function t(t){var e=this,r=t.handleClick,n=t.classNames,o=void 0===n?{}:n,s=t.notFoundMessage;this.selected=-1,this.results=[],this.onClick=function(t){if("function"==typeof e.handleClick){var r=t.target;if(r&&e.container.contains(r)&&r.hasAttribute("data-key")){var n=Number(r.getAttribute("data-key"));e.clear(),e.handleClick({result:e.results[n]})}}},this.handleClick=r,this.notFoundMessage=s?a("div",l(o.notfound),void 0,{html:s}):void 0,this.container=a("div",l("results",o.resultlist)),this.container.addEventListener("click",this.onClick,!0),this.resultItem=a("div",l(o.item))}var e=t.prototype;return e.render=function(t,e){var r=this;void 0===t&&(t=[]),this.clear(),t.forEach(function(t,n){var o=r.resultItem.cloneNode(!0);o.setAttribute("data-key",""+n),o.innerHTML=e({result:t}),r.container.appendChild(o)}),t.length>0?(c(this.container.parentElement,"open"),c(this.container,"active")):this.notFoundMessage&&(this.container.appendChild(this.notFoundMessage),c(this.container.parentElement,"open")),this.results=t},e.select=function(t){return Array.from(this.container.children).forEach(function(e,r){return r===t?c(e,"active"):h(e,"active")}),this.selected=t,this.results[t]},e.count=function(){return this.results?this.results.length:0},e.clear=function(){for(this.selected=-1;this.container.lastChild;)this.container.removeChild(this.container.lastChild);h(this.container.parentElement,"open"),h(this.container,"active")},t}(),b={position:"topleft",style:"button",showMarker:!0,showPopup:!1,popupFormat:function(t){return""+t.result.label},resultFormat:function(t){return""+t.result.label},marker:{icon:e&&e.Icon?new e.Icon.Default:void 0,draggable:!1},maxMarkers:1,maxSuggestions:5,retainZoomLevel:!1,animateZoom:!0,searchLabel:"Enter address",notFoundMessage:"",messageHideDelay:3e3,zoomLevel:18,classNames:{container:"leaflet-bar leaflet-control leaflet-control-geosearch",button:"leaflet-bar-part leaflet-bar-part-single",resetButton:"reset",msgbox:"leaflet-bar message",form:"",input:"",resultlist:"",item:"",notfound:"leaflet-bar-notfound"},autoComplete:!0,autoCompleteDelay:250,autoClose:!1,keepResult:!1,updateMap:!0},E="Leaflet must be loaded before instantiating the GeoSearch control",x={options:r({},b),classNames:r({},b.classNames),initialize:function(t){var n,o,s,i,u=this;if(!e)throw new Error(E);if(!t.provider)throw new Error("Provider is missing from options");this.options=r({},this.options,{},t),this.classNames=r({},this.classNames,{},t.classNames),this.markers=new e.FeatureGroup,this.classNames.container+=" leaflet-geosearch-"+this.options.style,this.searchElement=new y({searchLabel:this.options.searchLabel,classNames:{container:this.classNames.container,form:this.classNames.form,input:this.classNames.input},handleSubmit:function(t){return u.onSubmit(t)}}),this.button=a("a",this.classNames.button,this.searchElement.container,{title:this.options.searchLabel,href:"#",onClick:function(t){return u.onClick(t)}}),e.DomEvent.disableClickPropagation(this.button),this.resetButton=a("a",this.classNames.resetButton,this.searchElement.form,{text:"×",href:"#",onClick:function(){return u.clearResults(null,!0)}}),e.DomEvent.disableClickPropagation(this.resetButton),this.options.autoComplete&&(this.resultList=new g({handleClick:function(t){var e=t.result;u.searchElement.input.value=e.label,u.onSubmit({query:e.label,data:e})},classNames:{resultlist:this.classNames.resultlist,item:this.classNames.item,notfound:this.classNames.notfound},notFoundMessage:this.options.notFoundMessage}),this.searchElement.form.appendChild(this.resultList.container),this.searchElement.input.addEventListener("keyup",(n=function(t){return u.autoSearch(t)},void 0===(o=this.options.autoCompleteDelay)&&(o=250),void 0===s&&(s=!1),function(){for(var t=arguments.length,e=new Array(t),r=0;r<t;r++)e[r]=arguments[r];i&&clearTimeout(i),i=setTimeout(function(){i=null,s||n.apply(void 0,e)},o),s&&!i&&n.apply(void 0,e)}),!0),this.searchElement.input.addEventListener("keydown",function(t){return u.selectResult(t)},!0),this.searchElement.input.addEventListener("keydown",function(t){return u.clearResults(t,!0)},!0)),this.searchElement.form.addEventListener("click",function(t){t.preventDefault()},!1)},onAdd:function(t){var r=this.options,n=r.showMarker,o=r.style;if(this.map=t,n&&this.markers.addTo(t),"bar"===o){var s=t.getContainer().querySelector(".leaflet-control-container");this.container=a("div","leaflet-control-geosearch leaflet-geosearch-bar"),this.container.appendChild(this.searchElement.form),s.appendChild(this.container)}return e.DomEvent.disableClickPropagation(this.searchElement.form),this.searchElement.container},onRemove:function(){var t;return null==(t=this.container)||t.remove(),this},onClick:function(t){t.preventDefault(),t.stopPropagation();var e=this.searchElement,r=e.container,n=e.input;r.classList.contains("active")?(h(r,"active"),this.clearResults()):(c(r,"active"),n.focus())},selectResult:function(t){if(-1!==[d,f,m].indexOf(t.keyCode))if(t.preventDefault(),t.keyCode!==d){var e=this.resultList.count()-1;if(!(e<0)){var r=this.resultList.selected,n=t.keyCode===f?r+1:r-1,o=this.resultList.select(n<0?e:n>e?0:n);this.searchElement.input.value=o.label}}else{var s=this.resultList.select(this.resultList.selected);this.onSubmit({query:this.searchElement.input.value,data:s})}},clearResults:function(t,e){if(void 0===e&&(e=!1),!t||27===t.keyCode){var r=this.options,n=r.autoComplete;!e&&r.keepResult||(this.searchElement.input.value="",this.markers.clearLayers()),n&&this.resultList.clear()}},autoSearch:function(t){try{var e=this;if(v.indexOf(t.keyCode)>-1)return Promise.resolve();var r=t.target.value,n=e.options.provider,o=function(){if(r.length)return Promise.resolve(n.search({query:r})).then(function(t){t=t.slice(0,e.options.maxSuggestions),e.resultList.render(t,e.options.resultFormat)});e.resultList.clear()}();return Promise.resolve(o&&o.then?o.then(function(){}):void 0)}catch(t){return Promise.reject(t)}},onSubmit:function(t){try{var e=this;return Promise.resolve(e.options.provider.search(t)).then(function(r){r&&r.length>0&&e.showResult(r[0],t)})}catch(t){return Promise.reject(t)}},showResult:function(t,e){var r=this.options,n=r.autoClose,o=r.updateMap,s=this.markers.getLayers();s.length>=this.options.maxMarkers&&this.markers.removeLayer(s[0]);var i=this.addMarker(t,e);o&&this.centerMap(t),this.map.fireEvent("geosearch/showlocation",{location:t,marker:i}),n&&this.closeResults()},closeResults:function(){var t=this.searchElement.container;t.classList.contains("active")&&h(t,"active"),this.clearResults()},addMarker:function(t,r){var n=this,o=this.options,s=o.marker,i=o.showPopup,a=o.popupFormat,u=new e.Marker([t.y,t.x],s),l=t.label;return"function"==typeof a&&(l=a({query:r,result:t})),u.bindPopup(l),this.markers.addLayer(u),i&&u.openPopup(),s.draggable&&u.on("dragend",function(t){n.map.fireEvent("geosearch/marker/dragend",{location:u.getLatLng(),event:t})}),u},centerMap:function(t){var r=this.options,n=r.retainZoomLevel,o=r.animateZoom,s=t.bounds?new e.LatLngBounds(t.bounds):new e.LatLng(t.y,t.x).toBounds(10),i=s.isValid()?s:this.markers.getBounds();!n&&s.isValid()&&!t.bounds||n||!s.isValid()?this.map.setView(i.getCenter(),this.getZoom(),{animate:o}):this.map.fitBounds(i,{animate:o})},getZoom:function(){var t=this.options,e=t.zoomLevel;return t.retainZoomLevel?this.map.getZoom():e}};function L(){if(!e)throw new Error(E);for(var t=e.Control.extend(x),r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];return i(t,n)}!function(t){t[t.SEARCH=0]="SEARCH",t[t.REVERSE=1]="REVERSE"}(p||(p={}));var w=function(){function t(t){void 0===t&&(t={}),this.options=t}var e=t.prototype;return e.getParamString=function(t){void 0===t&&(t={});var e=r({},this.options.params,{},t);return Object.keys(e).map(function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])}).join("&")},e.getUrl=function(t,e){return t+"?"+this.getParamString(e)},e.search=function(t){try{var e=this,r=e.endpoint({query:t.query,type:p.SEARCH});return Promise.resolve(fetch(r)).then(function(t){return Promise.resolve(t.json()).then(function(t){return e.parse({data:t})})})}catch(t){return Promise.reject(t)}},t}(),k=function(t){function e(){return t.apply(this,arguments)||this}n(e,t);var o=e.prototype;return o.endpoint=function(){return"https://places-dsn.algolia.net/1/places/query"},o.findBestMatchLevelIndex=function(t){var e=t.find(function(t){return"full"===t.matchLevel})||t.find(function(t){return"partial"===t.matchLevel});return e?t.indexOf(e):0},o.getLabel=function(t){var e,r,n,o;return[null==(e=t.locale_names)?void 0:e.default[this.findBestMatchLevelIndex(t._highlightResult.locale_names.default)],null==(r=t.city)?void 0:r.default[this.findBestMatchLevelIndex(t._highlightResult.city.default)],t.administrative[this.findBestMatchLevelIndex(t._highlightResult.administrative)],null==(n=t.postcode)?void 0:n[this.findBestMatchLevelIndex(t._highlightResult.postcode)],null==(o=t.country)?void 0:o.default].filter(Boolean).join(", ")},o.parse=function(t){var e=this;return t.data.hits.map(function(t){return{x:t._geoloc.lng,y:t._geoloc.lat,label:e.getLabel(t),bounds:null,raw:t}})},o.search=function(t){var e=t.query;try{var n=this,o="string"==typeof e?{query:e}:e;return Promise.resolve(fetch(n.endpoint(),{method:"POST",body:JSON.stringify(r({},n.options.params,{},o))})).then(function(t){return Promise.resolve(t.json()).then(function(t){return n.parse({data:t})})})}catch(t){return Promise.reject(t)}},e}(w),C=function(t){function e(){var e;return(e=t.apply(this,arguments)||this).searchUrl="https://dev.virtualearth.net/REST/v1/Locations",e}n(e,t);var r=e.prototype;return r.endpoint=function(t){var e=t.query,r="string"==typeof e?{q:e}:e;return r.jsonp=t.jsonp,this.getUrl(this.searchUrl,r)},r.parse=function(t){return 0===t.data.resourceSets.length?[]:t.data.resourceSets[0].resources.map(function(t){return{x:t.point.coordinates[1],y:t.point.coordinates[0],label:t.address.formattedAddress,bounds:[[t.bbox[0],t.bbox[1]],[t.bbox[2],t.bbox[3]]],raw:t}})},r.search=function(t){var e,r,n,o=t.query;try{var s=this,i="BING_JSONP_CB_"+Date.now();return Promise.resolve((e=s.endpoint({query:o,jsonp:i}),r=i,n=a("script",null,document.body),n.setAttribute("type","text/javascript"),new Promise(function(t){window[r]=function(e){n.remove(),delete window[r],t(e)},n.setAttribute("src",e)}))).then(function(t){return s.parse({data:t})})}catch(t){return Promise.reject(t)}},e}(w),P=function(t){function e(){var e;return(e=t.apply(this,arguments)||this).searchUrl="https://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer/find",e}n(e,t);var r=e.prototype;return r.endpoint=function(t){var e=t.query,r="string"==typeof e?{text:e}:e;return r.f="json",this.getUrl(this.searchUrl,r)},r.parse=function(t){return t.data.locations.map(function(t){return{x:t.feature.geometry.x,y:t.feature.geometry.y,label:t.name,bounds:[[t.extent.ymin,t.extent.xmin],[t.extent.ymax,t.extent.xmax]],raw:t}})},e}(w),U=function(t){function e(){var e;return(e=t.apply(this,arguments)||this).searchUrl="https://maps.googleapis.com/maps/api/geocode/json",e}n(e,t);var r=e.prototype;return r.endpoint=function(t){var e=t.query;return this.getUrl(this.searchUrl,"string"==typeof e?{address:e}:e)},r.parse=function(t){return t.data.results.map(function(t){return{x:t.geometry.location.lng,y:t.geometry.location.lat,label:t.formatted_address,bounds:[[t.geometry.viewport.southwest.lat,t.geometry.viewport.southwest.lng],[t.geometry.viewport.northeast.lat,t.geometry.viewport.northeast.lng]],raw:t}})},e}(w),S=function(t){function e(){var e;return(e=t.apply(this,arguments)||this).searchUrl="https://geocode.search.hereapi.com/v1/geocode",e}n(e,t);var r=e.prototype;return r.endpoint=function(t){var e=t.query;return this.getUrl(this.searchUrl,"string"==typeof e?{q:e}:e)},r.parse=function(t){return t.data.items.map(function(t){return{x:t.position.lng,y:t.position.lat,label:t.address.label,bounds:null,raw:t}})},e}(w),R=function(t){function e(e){var r;void 0===e&&(e={});var n="https://nominatim.openstreetmap.org";return(r=t.call(this,e)||this).searchUrl=e.searchUrl||n+"/search",r.reverseUrl=e.reverseUrl||n+"/reverse",r}n(e,t);var r=e.prototype;return r.endpoint=function(t){var e=t.query,r=t.type,n="string"==typeof e?{q:e}:e;switch(n.format="json",r){case p.REVERSE:return this.getUrl(this.reverseUrl,n);default:return this.getUrl(this.searchUrl,n)}},r.parse=function(t){return(Array.isArray(t.data)?t.data:[t.data]).map(function(t){return{x:Number(t.lon),y:Number(t.lat),label:t.display_name,bounds:[[parseFloat(t.boundingbox[0]),parseFloat(t.boundingbox[2])],[parseFloat(t.boundingbox[1]),parseFloat(t.boundingbox[3])]],raw:t}})},e}(w),j=function(t){function e(e){return t.call(this,r({},e,{searchUrl:"https://locationiq.org/v1/search.php",reverseUrl:"https://locationiq.org/v1/reverse.php"}))||this}return n(e,t),e}(R),q=function(t){function e(){var e;return(e=t.apply(this,arguments)||this).searchUrl="https://api.opencagedata.com/geocode/v1/json",e}n(e,t);var r=e.prototype;return r.endpoint=function(t){var e=t.query,r="string"==typeof e?{q:e}:e;return r.format="json",this.getUrl(this.searchUrl,r)},r.parse=function(t){return t.data.results.map(function(t){return{x:t.geometry.lng,y:t.geometry.lat,label:t.formatted,bounds:[[t.bounds.southwest.lat,t.bounds.southwest.lng],[t.bounds.northeast.lat,t.bounds.northeast.lng]],raw:t}})},r.search=function(e){try{return Promise.resolve(e.query.length<2?[]:t.prototype.search.call(this,e))}catch(t){return Promise.reject(t)}},e}(w),N=function(t){function e(e){var r;return void 0===e&&(e={}),(r=t.call(this,e)||this).searchUrl=e.searchUrl||"https://a.tiles.mapbox.com/v4/geocode/mapbox.places/",r}n(e,t);var r=e.prototype;return r.endpoint=function(t){return this.getUrl(""+this.searchUrl+t.query+".json")},r.parse=function(t){return(Array.isArray(t.data.features)?t.data.features:[]).map(function(t){var e=null;return t.bbox&&(e=[[parseFloat(t.bbox[1]),parseFloat(t.bbox[0])],[parseFloat(t.bbox[3]),parseFloat(t.bbox[2])]]),{x:Number(t.center[0]),y:Number(t.center[1]),label:t.place_name?t.place_name:t.text,bounds:e,raw:t}})},e}(w),M=function(t){function e(e){var r;void 0===e&&(e={});var n="https://api-adresse.data.gouv.fr";return(r=t.call(this,e)||this).searchUrl=e.searchUrl||n+"/search",r.reverseUrl=e.reverseUrl||n+"/reverse",r}n(e,t);var r=e.prototype;return r.endpoint=function(t){var e=t.query,r="string"==typeof e?{q:e}:e;switch(t.type){case p.REVERSE:return this.getUrl(this.reverseUrl,r);default:return this.getUrl(this.searchUrl,r)}},r.parse=function(t){return t.data.features.map(function(t){return{x:t.geometry.coordinates[0],y:t.geometry.coordinates[1],label:t.properties.label,bounds:null,raw:t}})},e}(w);t.AlgoliaProvider=k,t.BingProvider=C,t.EsriProvider=P,t.GeoApiFrProvider=M,t.GeoSearchControl=L,t.GoogleProvider=U,t.HereProvider=S,t.JsonProvider=w,t.LocationIQProvider=j,t.MapBoxProvider=N,t.OpenCageProvider=q,t.OpenStreetMapProvider=R,t.SearchControl=L,t.SearchElement=y});
2
+ //# sourceMappingURL=geosearch.umd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geosearch.umd.js","sources":["../src/domUtils.ts","../src/providers/provider.ts","../src/constants.ts","../src/SearchElement.ts","../src/resultList.ts","../src/SearchControl.ts","../src/lib/debounce.ts","../src/providers/algoliaProvider.ts","../src/providers/bingProvider.ts","../src/providers/esriProvider.ts","../src/providers/googleProvider.ts","../src/providers/hereProvider.ts","../src/providers/openStreetMapProvider.ts","../src/providers/locationIQProvider.ts","../src/providers/openCageProvider.ts","../src/providers/mapBoxProvider.ts","../src/providers/geoApiFrProvider.ts"],"sourcesContent":["export function createElement<T extends HTMLElement = HTMLElement>(\n element: string,\n className: string | null = '',\n parent?: Element | null,\n attributes: { [key: string]: string | ((event: any) => void) } = {},\n): T {\n const el = document.createElement(element) as T;\n\n if (className) {\n el.className = className;\n }\n\n Object.keys(attributes).forEach((key) => {\n if (typeof attributes[key] === 'function') {\n // IE doesn't support startsWith\n const type = (key.indexOf('on') === 0\n ? key.substr(2).toLowerCase()\n : key) as keyof HTMLElementEventMap;\n el.addEventListener(type, attributes[key] as () => void);\n } else if (key === 'html') {\n el.innerHTML = attributes[key] as string;\n } else if (key === 'text') {\n el.innerText = attributes[key] as string;\n } else {\n el.setAttribute(key, attributes[key] as string);\n }\n });\n\n if (parent) {\n parent.appendChild(el);\n }\n\n return el;\n}\n\nexport function stopPropagation(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n}\n\nexport function createScriptElement<T = object>(\n url: string,\n cb: string,\n): Promise<T> {\n const script = createElement('script', null, document.body);\n script.setAttribute('type', 'text/javascript');\n\n return new Promise((resolve) => {\n (window as any)[cb] = (json: T): void => {\n script.remove();\n delete (window as any)[cb];\n resolve(json);\n };\n\n script.setAttribute('src', url);\n });\n}\n\nexport const cx = (...classNames: (string | undefined)[]): string =>\n classNames.filter(Boolean).join(' ').trim();\n\nexport function addClassName(\n element: Element | null,\n className: string | string[],\n): void {\n if (!element || !element.classList) {\n return;\n }\n\n // IE doesn't support adding multiple classes at once :(\n const classNames = Array.isArray(className) ? className : [className];\n classNames.forEach((name) => {\n if (!element.classList.contains(name)) {\n element.classList.add(name);\n }\n });\n}\n\nexport function removeClassName(\n element: Element | null,\n className: string | string[],\n): void {\n if (!element || !element.classList) {\n return;\n }\n\n // IE doesn't support removing multiple classes at once :(\n const classNames = Array.isArray(className) ? className : [className];\n classNames.forEach((name) => {\n if (element.classList.contains(name)) {\n element.classList.remove(name);\n }\n });\n}\n\nexport function replaceClassName(\n element: Element,\n find: string,\n replace: string,\n): void {\n removeClassName(element, find);\n addClassName(element, replace);\n}\n","export type PointTuple = [number, number];\nexport type BoundsTuple = [PointTuple, PointTuple];\n\nexport interface LatLng {\n lat: number;\n lng: number;\n}\n\nexport interface SearchResult<TRawResult = any> {\n x: number;\n y: number;\n label: string;\n bounds: BoundsTuple | null;\n raw: TRawResult;\n}\n\nexport interface ProviderParams {\n [key: string]: string | number | boolean;\n}\n\nexport interface ProviderOptions {\n params?: ProviderParams;\n}\n\nexport enum RequestType {\n SEARCH,\n REVERSE,\n}\n\nexport interface EndpointArgument {\n query: string | { [key: string]: string | number | boolean };\n type?: RequestType;\n}\n\nexport interface SearchArgument {\n query: string;\n}\n\nexport interface ParseArgument<TData> {\n data: TData;\n}\n\nexport interface Provider<TRequestResult, TRawResult> {\n options: ProviderOptions;\n\n endpoint(options: EndpointArgument): string;\n getParamString(params: ProviderParams): string;\n parse(response: ParseArgument<TRequestResult>): SearchResult<TRawResult>[];\n search(options: SearchArgument): Promise<SearchResult<TRawResult>[]>;\n}\n\nexport default abstract class AbstractProvider<\n TRequestResult = any,\n TRawResult = any\n> implements Provider<TRequestResult, TRawResult> {\n options: ProviderOptions;\n\n constructor(options: ProviderOptions = {}) {\n this.options = options;\n }\n\n abstract endpoint(options: EndpointArgument): string;\n abstract parse(\n response: ParseArgument<TRequestResult>,\n ): SearchResult<TRawResult>[];\n\n getParamString(params: ProviderParams = {}): string {\n const set = { ...this.options.params, ...params };\n return Object.keys(set)\n .map(\n (key) => `${encodeURIComponent(key)}=${encodeURIComponent(set[key])}`,\n )\n .join('&');\n }\n\n getUrl(url: string, params?: ProviderParams): string {\n return `${url}?${this.getParamString(params)}`;\n }\n\n async search(options: SearchArgument): Promise<SearchResult<TRawResult>[]> {\n const url = this.endpoint({\n query: options.query,\n type: RequestType.SEARCH,\n });\n\n const request = await fetch(url);\n const json: TRequestResult = await request.json();\n return this.parse({ data: json });\n }\n}\n","export const ENTER_KEY = 13;\nexport const ESCAPE_KEY = 27;\nexport const ARROW_DOWN_KEY = 40;\nexport const ARROW_UP_KEY = 38;\nexport const ARROW_LEFT_KEY = 37;\nexport const ARROW_RIGHT_KEY = 39;\n\nexport const SPECIAL_KEYS = [\n ENTER_KEY,\n ESCAPE_KEY,\n ARROW_DOWN_KEY,\n ARROW_UP_KEY,\n ARROW_LEFT_KEY,\n ARROW_RIGHT_KEY,\n];\n","import {\n createElement,\n addClassName,\n removeClassName,\n cx,\n stopPropagation,\n replaceClassName,\n} from './domUtils';\n\nimport { ESCAPE_KEY, ENTER_KEY } from './constants';\n\ninterface SearchElementProps {\n searchLabel?: string;\n handleSubmit: (args: { query: string }) => void;\n classNames?: {\n container?: string;\n form?: string;\n input?: string;\n };\n}\n\nexport default class SearchElement {\n container: HTMLDivElement;\n form: HTMLFormElement;\n input: HTMLInputElement;\n handleSubmit: (args: { query: string }) => void;\n hasError = false;\n\n constructor({\n handleSubmit,\n searchLabel,\n classNames = {},\n }: SearchElementProps) {\n this.container = createElement<HTMLDivElement>(\n 'div',\n cx('geosearch', classNames.container),\n );\n\n this.form = createElement<HTMLFormElement>(\n 'form',\n ['', classNames.form].join(' '),\n this.container,\n {\n autocomplete: 'none',\n onClick: stopPropagation,\n onDblClick: stopPropagation,\n touchStart: stopPropagation,\n touchEnd: stopPropagation,\n },\n );\n\n this.input = createElement<HTMLInputElement>(\n 'input',\n ['glass', classNames.input].join(' '),\n this.form,\n {\n type: 'text',\n placeholder: searchLabel || 'search',\n onInput: this.onInput,\n onKeyUp: (e) => this.onKeyUp(e),\n onKeyPress: (e) => this.onKeyPress(e),\n onFocus: this.onFocus,\n onBlur: this.onBlur,\n\n // For some reason, leaflet is blocking the 'touchstart', manually give\n // focus to the input onClick\n // > Ignored attempt to cancel a touchstart event with cancelable=false,\n // > for example because scrolling is in progress and cannot be interrupted.\n onClick: () => {\n this.input.focus();\n this.input.dispatchEvent(new Event('focus'));\n },\n },\n );\n\n this.handleSubmit = handleSubmit;\n }\n\n onFocus(): void {\n addClassName(this.form, 'active');\n }\n\n onBlur(): void {\n removeClassName(this.form, 'active');\n }\n\n async onSubmit(event: Event): Promise<void> {\n stopPropagation(event);\n replaceClassName(this.container, 'error', 'pending');\n\n await this.handleSubmit({ query: this.input.value });\n removeClassName(this.container, 'pending');\n }\n\n onInput(): void {\n if (!this.hasError) {\n return;\n }\n\n removeClassName(this.container, 'error');\n this.hasError = false;\n }\n\n onKeyUp(event: KeyboardEvent): void {\n if (event.keyCode !== ESCAPE_KEY) {\n return;\n }\n\n removeClassName(this.container, ['pending', 'active']);\n\n this.input.value = '';\n\n document.body.focus();\n document.body.blur();\n }\n\n onKeyPress(event: KeyboardEvent): void {\n if (event.keyCode !== ENTER_KEY) {\n return;\n }\n\n this.onSubmit(event);\n }\n\n setQuery(query: string): void {\n this.input.value = query;\n }\n}\n","import { createElement, addClassName, removeClassName, cx } from './domUtils';\nimport { SearchResult } from './providers/provider';\n\ninterface ResultListProps {\n handleClick: (args: { result: SearchResult }) => void;\n classNames?: {\n resultlist?: string;\n item?: string;\n notfound?: string;\n };\n notFoundMessage?: string;\n}\n\nexport default class ResultList {\n handleClick?: (args: { result: SearchResult }) => void;\n selected = -1;\n results: SearchResult[] = [];\n\n container: HTMLDivElement;\n resultItem: HTMLDivElement;\n notFoundMessage?: HTMLDivElement;\n\n constructor({\n handleClick,\n classNames = {},\n notFoundMessage,\n }: ResultListProps) {\n this.handleClick = handleClick;\n this.notFoundMessage = !!notFoundMessage\n ? createElement<HTMLDivElement>(\n 'div',\n cx(classNames.notfound),\n undefined,\n { html: notFoundMessage! },\n )\n : undefined;\n\n this.container = createElement<HTMLDivElement>(\n 'div',\n cx('results', classNames.resultlist),\n );\n this.container.addEventListener('click', this.onClick, true);\n\n this.resultItem = createElement<HTMLDivElement>('div', cx(classNames.item));\n }\n\n render(results: SearchResult[] = [], resultFormat: Function): void {\n this.clear();\n\n results.forEach((result, idx) => {\n const child = this.resultItem.cloneNode(true) as HTMLDivElement;\n child.setAttribute('data-key', `${idx}`);\n child.innerHTML = resultFormat({ result });\n this.container.appendChild(child);\n });\n\n if (results.length > 0) {\n addClassName(this.container.parentElement, 'open');\n addClassName(this.container, 'active');\n } else if (!!this.notFoundMessage) {\n this.container.appendChild(this.notFoundMessage);\n addClassName(this.container.parentElement, 'open');\n }\n\n this.results = results;\n }\n\n select(index: number): SearchResult {\n // eslint-disable-next-line no-confusing-arrow\n Array.from(this.container.children).forEach((child, idx) =>\n idx === index\n ? addClassName(child, 'active')\n : removeClassName(child, 'active'),\n );\n\n this.selected = index;\n return this.results[index];\n }\n\n count(): number {\n return this.results ? this.results.length : 0;\n }\n\n clear(): void {\n this.selected = -1;\n\n while (this.container.lastChild) {\n this.container.removeChild(this.container.lastChild);\n }\n\n removeClassName(this.container.parentElement, 'open');\n removeClassName(this.container, 'active');\n }\n\n onClick = (event: Event): void => {\n if (typeof this.handleClick !== 'function') {\n return;\n }\n\n const target = event.target as HTMLDivElement;\n if (\n !target ||\n !this.container.contains(target) ||\n !target.hasAttribute('data-key')\n ) {\n return;\n }\n\n const idx = Number(target.getAttribute('data-key'));\n this.clear();\n this.handleClick({ result: this.results[idx] });\n };\n}\n","import L, { ControlPosition, FeatureGroup, MarkerOptions, Map } from 'leaflet';\nimport SearchElement from './SearchElement';\nimport ResultList from './resultList';\nimport debounce from './lib/debounce';\n\nimport {\n createElement,\n addClassName,\n removeClassName,\n stopPropagation,\n} from './domUtils';\nimport {\n ENTER_KEY,\n SPECIAL_KEYS,\n ARROW_UP_KEY,\n ARROW_DOWN_KEY,\n ESCAPE_KEY,\n} from './constants';\nimport AbstractProvider, { SearchResult } from './providers/provider';\nimport { Provider } from './providers';\n\nconst defaultOptions: Omit<SearchControlProps, 'provider'> = {\n position: 'topleft',\n style: 'button',\n showMarker: true,\n showPopup: false,\n popupFormat: ({ result }) => `${result.label}`,\n resultFormat: ({ result }) => `${result.label}`,\n marker: {\n icon: L && L.Icon ? new L.Icon.Default() : undefined,\n draggable: false,\n },\n maxMarkers: 1,\n maxSuggestions: 5,\n retainZoomLevel: false,\n animateZoom: true,\n searchLabel: 'Enter address',\n notFoundMessage: '',\n messageHideDelay: 3000,\n zoomLevel: 18,\n classNames: {\n container: 'leaflet-bar leaflet-control leaflet-control-geosearch',\n button: 'leaflet-bar-part leaflet-bar-part-single',\n resetButton: 'reset',\n msgbox: 'leaflet-bar message',\n form: '',\n input: '',\n resultlist: '',\n item: '',\n notfound: 'leaflet-bar-notfound',\n },\n autoComplete: true,\n autoCompleteDelay: 250,\n autoClose: false,\n keepResult: false,\n updateMap: true,\n};\n\nconst UNINITIALIZED_ERR =\n 'Leaflet must be loaded before instantiating the GeoSearch control';\n\ninterface SearchControlProps {\n /** the provider to use for searching */\n provider: Provider;\n /** the leaflet position to render the element in */\n position: ControlPosition;\n /**\n * the stye of the search element\n * @default bar\n **/\n style: 'button' | 'bar';\n\n marker: MarkerOptions;\n maxMarkers: number;\n showMarker: boolean;\n showPopup: boolean;\n popupFormat<T = any>(args: {\n query: Selection;\n result: SearchResult<T>;\n }): string;\n\n resultFormat<T = any>(args: { result: SearchResult<T> }): string;\n\n searchLabel: string;\n notFoundMessage: string;\n messageHideDelay: number;\n\n animateZoom: boolean;\n zoomLevel: number;\n retainZoomLevel: boolean;\n\n classNames: {\n container: string;\n button: string;\n resetButton: string;\n msgbox: string;\n form: string;\n input: string;\n resultlist: string;\n item: string;\n notfound: string;\n };\n\n autoComplete: boolean;\n autoCompleteDelay: number;\n maxSuggestions: number;\n autoClose: boolean;\n keepResult: boolean;\n updateMap: boolean;\n}\n\nexport type SearchControlOptions = Partial<SearchControlProps> & {\n provider: Provider;\n};\n\ninterface Selection {\n query: string;\n data?: SearchResult;\n}\n\ninterface SearchControl {\n options: Omit<SearchControlProps, 'provider'> & {\n provider?: SearchControlProps['provider'];\n };\n markers: FeatureGroup;\n searchElement: SearchElement;\n resultList: ResultList;\n classNames: SearchControlProps['classNames'];\n container: HTMLDivElement;\n input: HTMLInputElement;\n button: HTMLAnchorElement;\n resetButton: HTMLAnchorElement;\n map: Map;\n\n // [key: string]: any;\n initialize(options: SearchControlProps): void;\n onSubmit(result: Selection): void;\n onClick(event: Event): void;\n clearResults(event?: KeyboardEvent | null, force?: boolean): void;\n autoSearch(event: KeyboardEvent): void;\n selectResult(event: KeyboardEvent): void;\n showResult(result: SearchResult, query: Selection): void;\n addMarker(result: SearchResult, selection: Selection): void;\n centerMap(result: SearchResult): void;\n closeResults(): void;\n getZoom(): number;\n onAdd(map: Map): HTMLDivElement;\n onRemove(): SearchControl;\n}\n\n// @ts-ignore\nconst Control: SearchControl = {\n options: { ...defaultOptions },\n classNames: { ...defaultOptions.classNames },\n\n initialize(options: SearchControlOptions) {\n if (!L) {\n throw new Error(UNINITIALIZED_ERR);\n }\n\n if (!options.provider) {\n throw new Error('Provider is missing from options');\n }\n\n // merge given options with control defaults\n this.options = { ...this.options, ...options };\n this.classNames = { ...this.classNames, ...options.classNames };\n\n this.markers = new L.FeatureGroup();\n this.classNames.container += ` leaflet-geosearch-${this.options.style}`;\n\n this.searchElement = new SearchElement({\n searchLabel: this.options.searchLabel,\n classNames: {\n container: this.classNames.container,\n form: this.classNames.form,\n input: this.classNames.input,\n },\n handleSubmit: (result) => this.onSubmit(result),\n });\n\n this.button = createElement<HTMLAnchorElement>(\n 'a',\n this.classNames.button,\n this.searchElement.container,\n {\n title: this.options.searchLabel,\n href: '#',\n onClick: (e) => this.onClick(e),\n },\n );\n\n L.DomEvent.disableClickPropagation(this.button);\n\n this.resetButton = createElement<HTMLAnchorElement>(\n 'a',\n this.classNames.resetButton,\n this.searchElement.form,\n {\n text: '×',\n href: '#',\n onClick: () => this.clearResults(null, true),\n },\n );\n\n L.DomEvent.disableClickPropagation(this.resetButton);\n\n if (this.options.autoComplete) {\n this.resultList = new ResultList({\n handleClick: ({ result }): void => {\n this.searchElement.input.value = result.label;\n this.onSubmit({ query: result.label, data: result });\n },\n classNames: {\n resultlist: this.classNames.resultlist,\n item: this.classNames.item,\n notfound: this.classNames.notfound,\n },\n notFoundMessage: this.options.notFoundMessage,\n });\n\n this.searchElement.form.appendChild(this.resultList.container);\n\n this.searchElement.input.addEventListener(\n 'keyup',\n debounce(\n (e: KeyboardEvent) => this.autoSearch(e),\n this.options.autoCompleteDelay,\n ),\n true,\n );\n\n this.searchElement.input.addEventListener(\n 'keydown',\n (e: KeyboardEvent) => this.selectResult(e),\n true,\n );\n\n this.searchElement.input.addEventListener(\n 'keydown',\n (e: KeyboardEvent) => this.clearResults(e, true),\n true,\n );\n }\n\n this.searchElement.form.addEventListener(\n 'click',\n (e) => {\n e.preventDefault();\n },\n false,\n );\n },\n\n onAdd(map: Map) {\n const { showMarker, style } = this.options;\n\n this.map = map;\n if (showMarker) {\n this.markers.addTo(map);\n }\n\n if (style === 'bar') {\n const root = map\n .getContainer()\n .querySelector('.leaflet-control-container');\n\n this.container = createElement<HTMLDivElement>(\n 'div',\n 'leaflet-control-geosearch leaflet-geosearch-bar',\n );\n\n this.container.appendChild(this.searchElement.form);\n root!.appendChild(this.container);\n }\n\n L.DomEvent.disableClickPropagation(this.searchElement.form);\n return this.searchElement.container;\n },\n\n onRemove() {\n this.container?.remove();\n return this;\n },\n\n onClick(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n\n const { container, input } = this.searchElement;\n\n if (container.classList.contains('active')) {\n removeClassName(container, 'active');\n this.clearResults();\n } else {\n addClassName(container, 'active');\n input.focus();\n }\n },\n\n selectResult(event) {\n if (\n [ENTER_KEY, ARROW_DOWN_KEY, ARROW_UP_KEY].indexOf(event.keyCode) === -1\n ) {\n return;\n }\n\n event.preventDefault();\n\n if (event.keyCode === ENTER_KEY) {\n const item = this.resultList.select(this.resultList.selected);\n this.onSubmit({ query: this.searchElement.input.value, data: item });\n return;\n }\n\n const max = this.resultList.count() - 1;\n if (max < 0) {\n return;\n }\n\n const { selected } = this.resultList;\n const next = event.keyCode === ARROW_DOWN_KEY ? selected + 1 : selected - 1;\n const idx = next < 0 ? max : next > max ? 0 : next;\n\n const item = this.resultList.select(idx);\n this.searchElement.input.value = item.label;\n },\n\n clearResults(event: KeyboardEvent | null, force = false) {\n if (event && event.keyCode !== ESCAPE_KEY) {\n return;\n }\n\n const { keepResult, autoComplete } = this.options;\n\n if (force || !keepResult) {\n this.searchElement.input.value = '';\n this.markers.clearLayers();\n }\n\n if (autoComplete) {\n this.resultList.clear();\n }\n },\n\n async autoSearch(event) {\n if (SPECIAL_KEYS.indexOf(event.keyCode) > -1) {\n return;\n }\n\n const query = (event.target as HTMLInputElement).value;\n const { provider } = this.options;\n\n if (query.length) {\n let results = await provider!.search({ query });\n results = results.slice(0, this.options.maxSuggestions);\n this.resultList.render(results, this.options.resultFormat);\n } else {\n this.resultList.clear();\n }\n },\n\n async onSubmit(query) {\n const { provider } = this.options;\n\n const results = await provider!.search(query);\n\n if (results && results.length > 0) {\n this.showResult(results[0], query);\n }\n },\n\n showResult(result, query) {\n const { autoClose, updateMap } = this.options;\n\n const markers = this.markers.getLayers();\n if (markers.length >= this.options.maxMarkers) {\n this.markers.removeLayer(markers[0]);\n }\n\n const marker = this.addMarker(result, query);\n\n if (updateMap) {\n this.centerMap(result);\n }\n\n this.map.fireEvent('geosearch/showlocation', {\n location: result,\n marker,\n });\n\n if (autoClose) {\n this.closeResults();\n }\n },\n\n closeResults() {\n const { container } = this.searchElement;\n\n if (container.classList.contains('active')) {\n removeClassName(container, 'active');\n }\n\n this.clearResults();\n },\n\n addMarker(result, query) {\n const { marker: options, showPopup, popupFormat } = this.options;\n const marker = new L.Marker([result.y, result.x], options);\n let popupLabel = result.label;\n\n if (typeof popupFormat === 'function') {\n popupLabel = popupFormat({ query, result });\n }\n\n marker.bindPopup(popupLabel);\n\n this.markers.addLayer(marker);\n\n if (showPopup) {\n marker.openPopup();\n }\n\n if (options.draggable) {\n marker.on('dragend', (args) => {\n this.map.fireEvent('geosearch/marker/dragend', {\n location: marker.getLatLng(),\n event: args,\n });\n });\n }\n\n return marker;\n },\n\n centerMap(result) {\n const { retainZoomLevel, animateZoom } = this.options;\n\n const resultBounds = result.bounds\n ? new L.LatLngBounds(result.bounds)\n : new L.LatLng(result.y, result.x).toBounds(10);\n\n const bounds = resultBounds.isValid()\n ? resultBounds\n : this.markers.getBounds();\n\n if (!retainZoomLevel && resultBounds.isValid() && !result.bounds) {\n this.map.setView(bounds.getCenter(), this.getZoom(), {\n animate: animateZoom,\n });\n } else if (!retainZoomLevel && resultBounds.isValid()) {\n this.map.fitBounds(bounds, { animate: animateZoom });\n } else {\n this.map.setView(bounds.getCenter(), this.getZoom(), {\n animate: animateZoom,\n });\n }\n },\n\n getZoom(): number {\n const { retainZoomLevel, zoomLevel } = this.options;\n return retainZoomLevel ? this.map.getZoom() : zoomLevel;\n },\n};\n\nexport default function SearchControl(...options: any[]) {\n if (!L) {\n throw new Error(UNINITIALIZED_ERR);\n }\n\n const LControl = L.Control.extend(Control);\n return new LControl(...options);\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nexport default function debounce(\n cb: (...args: any[]) => void,\n wait = 250,\n immediate = false,\n): (...args: any[]) => void {\n let timeout: ReturnType<typeof setTimeout> | null;\n\n return (...args: any[]): void => {\n if (timeout) {\n clearTimeout(timeout);\n }\n\n timeout = setTimeout(() => {\n timeout = null;\n\n if (!immediate) {\n cb(...args);\n }\n }, wait);\n\n if (immediate && !timeout) {\n cb(...args);\n }\n };\n}\n","import AbstractProvider, {\n LatLng,\n ParseArgument,\n SearchArgument,\n SearchResult,\n} from './provider';\n\ninterface RequestResult {\n hits: RawResult[];\n}\n\ninterface ValueMatch {\n value: string;\n matchLevel: string;\n matchedWords: string[];\n fullyHighlighted?: boolean;\n}\n\ninterface RawResult {\n country: { [key: string]: string };\n country_code: string;\n city: { [key: string]: string[] };\n importance: number;\n _tags: string[];\n postcode: string[];\n population: number;\n is_country: boolean;\n is_highway: boolean;\n is_city: boolean;\n is_popular: boolean;\n administrative: string[];\n admin_level: number;\n is_suburb: boolean;\n locale_names: {\n default: string[];\n };\n _geoloc: LatLng;\n objectID: string;\n _highlightResult: {\n country: {\n default: ValueMatch;\n [key: string]: ValueMatch;\n };\n city: {\n default: ValueMatch[];\n [key: string]: ValueMatch[];\n };\n postcode: ValueMatch[];\n administrative: ValueMatch[];\n locale_names: {\n default: ValueMatch[];\n };\n };\n}\n\ninterface ProviderOptions {\n key?: string;\n [key: string]: string | boolean | number | undefined;\n}\n\nexport default class Provider extends AbstractProvider<\n RequestResult,\n RawResult\n> {\n endpoint(): string {\n // No query, Algolia requires POST request\n return 'https://places-dsn.algolia.net/1/places/query';\n }\n\n /**\n * Find index of value with best match\n * (full, fallback to partial, and then to 0)\n */\n findBestMatchLevelIndex(vms: ValueMatch[]): number {\n const match =\n vms.find((vm) => vm.matchLevel === 'full') ||\n vms.find((vm) => vm.matchLevel === 'partial');\n return match ? vms.indexOf(match) : 0;\n }\n\n /**\n * Algolia not provides labels for hits, so\n * we will implement that builder ourselves\n */\n getLabel(result: RawResult): string {\n return [\n // Building + Street\n result.locale_names?.default[\n this.findBestMatchLevelIndex(\n result._highlightResult.locale_names.default,\n )\n ],\n // City\n result.city?.default[\n this.findBestMatchLevelIndex(result._highlightResult.city.default)\n ],\n // Administrative (State / Province)\n result.administrative[\n this.findBestMatchLevelIndex(result._highlightResult.administrative)\n ],\n // Zip code / Postal code\n result.postcode?.[\n this.findBestMatchLevelIndex(result._highlightResult.postcode)\n ],\n // Country\n result.country?.default,\n ]\n .filter(Boolean)\n .join(', ');\n }\n\n parse(response: ParseArgument<RequestResult>): SearchResult<RawResult>[] {\n return response.data.hits.map((r) => ({\n x: r._geoloc.lng,\n y: r._geoloc.lat,\n label: this.getLabel(r),\n bounds: null, // Algolia API does not provide bounds\n raw: r,\n }));\n }\n\n async search({ query }: SearchArgument): Promise<SearchResult<RawResult>[]> {\n const params = typeof query === 'string' ? { query } : query;\n\n const request = await fetch(this.endpoint(), {\n method: 'POST',\n body: JSON.stringify({\n ...this.options.params,\n ...params,\n }),\n });\n\n const json = await request.json();\n return this.parse({ data: json });\n }\n}\n","import AbstractProvider, {\n EndpointArgument,\n ParseArgument,\n SearchArgument,\n SearchResult,\n} from './provider';\nimport { createScriptElement } from '../domUtils';\n\nexport interface RequestResult {\n authenticationResultCode: string;\n brandLogoUri: string;\n copyright: string;\n resourceSets: {\n estimatedTotal: number;\n resources: RawResult[];\n }[];\n statusCode: number;\n statusDescription: string;\n traceId: string;\n}\n\nexport interface RawResult {\n __type: string;\n bbox: [number, number, number, number];\n name: string;\n point: { type: 'Point'; coordinates: [number, number] };\n address: {\n adminDistrict: string;\n adminDistrict2: string;\n countryRegion: string;\n formattedAddress: string;\n locality: string;\n };\n confidence: string;\n entityType: string;\n geocodePoints: [\n {\n type: 'Point';\n coordinates: [number, number];\n calculationMethod: string;\n usageTypes: string[];\n },\n ];\n matchCodes: string[];\n}\n\nexport default class BingProvider extends AbstractProvider<\n RequestResult,\n RawResult\n> {\n searchUrl = 'https://dev.virtualearth.net/REST/v1/Locations';\n\n endpoint({ query, jsonp }: EndpointArgument & { jsonp: string }): string {\n const params = typeof query === 'string' ? { q: query } : query;\n params.jsonp = jsonp;\n\n return this.getUrl(this.searchUrl, params);\n }\n\n parse(response: ParseArgument<RequestResult>): SearchResult<RawResult>[] {\n if (response.data.resourceSets.length === 0) {\n return [];\n }\n\n return response.data.resourceSets[0].resources.map((r) => ({\n x: r.point.coordinates[1],\n y: r.point.coordinates[0],\n label: r.address.formattedAddress,\n bounds: [\n [r.bbox[0], r.bbox[1]], // s, w\n [r.bbox[2], r.bbox[3]], // n, e\n ],\n raw: r,\n }));\n }\n\n async search({ query }: SearchArgument): Promise<SearchResult<RawResult>[]> {\n const jsonp = `BING_JSONP_CB_${Date.now()}`;\n const json = await createScriptElement<RequestResult>(\n this.endpoint({ query, jsonp }),\n jsonp,\n );\n\n return this.parse({ data: json });\n }\n}\n","import AbstractProvider, {\n EndpointArgument,\n ParseArgument,\n SearchResult,\n} from './provider';\n\ninterface RequestResult {\n spatialReference: { wkid: number; latestWkid: number };\n locations: RawResult[];\n}\n\ninterface RawResult {\n name: string;\n extent: {\n xmin: number;\n ymin: number;\n xmax: number;\n ymax: number;\n };\n feature: {\n geometry: { x: number; y: number };\n attributes: { Score: number; Addr_Type: string };\n };\n}\n\nexport default class EsriProvider extends AbstractProvider<\n RequestResult,\n RawResult\n> {\n searchUrl =\n 'https://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer/find';\n\n endpoint({ query }: EndpointArgument): string {\n const params = typeof query === 'string' ? { text: query } : query;\n params.f = 'json';\n\n return this.getUrl(this.searchUrl, params);\n }\n\n parse(result: ParseArgument<RequestResult>): SearchResult<RawResult>[] {\n return result.data.locations.map((r) => ({\n x: r.feature.geometry.x,\n y: r.feature.geometry.y,\n label: r.name,\n bounds: [\n [r.extent.ymin, r.extent.xmin], // s, w\n [r.extent.ymax, r.extent.xmax], // n, e\n ],\n raw: r,\n }));\n }\n}\n","import AbstractProvider, {\n EndpointArgument,\n LatLng,\n ParseArgument,\n SearchResult,\n} from './provider';\n\nexport interface RequestResult {\n results: RawResult[];\n status: string;\n}\n\nexport interface RawResult {\n address_components: {\n long_name: string;\n short_name: string;\n types: string[];\n }[];\n formatted_address: string;\n geometry: {\n location: LatLng;\n location_type: string;\n viewport: {\n northeast: LatLng;\n southwest: LatLng;\n };\n };\n place_id: string;\n plus_code: {\n compound_code: string;\n global_code: string;\n };\n types: string[];\n}\n\nexport default class GoogleProvider extends AbstractProvider<\n RequestResult,\n RawResult\n> {\n searchUrl = 'https://maps.googleapis.com/maps/api/geocode/json';\n\n endpoint({ query }: EndpointArgument) {\n const params = typeof query === 'string' ? { address: query } : query;\n return this.getUrl(this.searchUrl, params);\n }\n\n parse(result: ParseArgument<RequestResult>): SearchResult<RawResult>[] {\n return result.data.results.map((r) => ({\n x: r.geometry.location.lng,\n y: r.geometry.location.lat,\n label: r.formatted_address,\n bounds: [\n [r.geometry.viewport.southwest.lat, r.geometry.viewport.southwest.lng], // s, w\n [r.geometry.viewport.northeast.lat, r.geometry.viewport.northeast.lng], // n, e\n ],\n raw: r,\n }));\n }\n}\n","import AbstractProvider, {\n EndpointArgument,\n LatLng,\n ParseArgument,\n SearchResult,\n} from './provider';\n\nexport interface RequestResult {\n items: RawResult[];\n}\n\nexport interface RawResult {\n title: string;\n id: string;\n resultType: string;\n address: {\n label: string;\n countryCode: string;\n countryName: string;\n state: string;\n county: string;\n city: string;\n district: string;\n street: string;\n postalCode: string;\n houseNumber: string;\n };\n position: LatLng;\n access: LatLng[];\n categories: { id: string }[];\n contacts: { [key: string]: { value: string }[] }[];\n scoring: {\n queryScore: number;\n fieldScore: {\n placeName: number;\n };\n };\n}\n\nexport default class HereProvider extends AbstractProvider<\n RequestResult,\n RawResult\n> {\n searchUrl = 'https://geocode.search.hereapi.com/v1/geocode';\n\n endpoint({ query }: EndpointArgument): string {\n const params = typeof query === 'string' ? { q: query } : query;\n return this.getUrl(this.searchUrl, params);\n }\n\n parse(response: ParseArgument<RequestResult>): SearchResult<RawResult>[] {\n return response.data.items.map((r) => ({\n x: r.position.lng,\n y: r.position.lat,\n label: r.address.label,\n bounds: null,\n raw: r,\n }));\n }\n}\n","/* eslint-disable @typescript-eslint/camelcase */\nimport AbstractProvider, {\n EndpointArgument,\n ParseArgument,\n ProviderOptions,\n RequestType,\n SearchResult,\n} from './provider';\nimport hasShape from '../lib/hasShape';\n\nexport type RequestResult = RawResult[];\n\nexport interface RawResult {\n place_id: string;\n license: string;\n osm_type: string;\n osm_id: number;\n boundingbox: [string, string, string, string];\n lat: string;\n lon: string;\n display_name: string;\n class: string;\n type: string;\n importance: number;\n icon?: string;\n}\n\nexport type OpenStreetMapProviderOptions = {\n searchUrl?: string;\n reverseUrl?: string;\n} & ProviderOptions;\n\nexport default class OpenStreetMapProvider extends AbstractProvider<\n RawResult[],\n RawResult\n> {\n searchUrl: string;\n reverseUrl: string;\n\n constructor(options: OpenStreetMapProviderOptions = {}) {\n super(options);\n\n const host = 'https://nominatim.openstreetmap.org';\n this.searchUrl = options.searchUrl || `${host}/search`;\n this.reverseUrl = options.reverseUrl || `${host}/reverse`;\n }\n\n endpoint({ query, type }: EndpointArgument): string {\n const params = typeof query === 'string' ? { q: query } : query;\n params.format = 'json';\n\n switch (type) {\n case RequestType.REVERSE:\n return this.getUrl(this.reverseUrl, params);\n\n default:\n return this.getUrl(this.searchUrl, params);\n }\n }\n\n parse(response: ParseArgument<RequestResult>): SearchResult<RawResult>[] {\n const records = Array.isArray(response.data)\n ? response.data\n : [response.data];\n\n return records.map((r) => ({\n x: Number(r.lon),\n y: Number(r.lat),\n label: r.display_name,\n bounds: [\n [parseFloat(r.boundingbox[0]), parseFloat(r.boundingbox[2])], // s, w\n [parseFloat(r.boundingbox[1]), parseFloat(r.boundingbox[3])], // n, e\n ],\n raw: r,\n }));\n }\n}\n","import OpenStreetMapProvider, {\n OpenStreetMapProviderOptions,\n} from './openStreetMapProvider';\n\nexport default class LocationIQProvider extends OpenStreetMapProvider {\n constructor(options: OpenStreetMapProviderOptions) {\n super({\n ...options,\n searchUrl: `https://locationiq.org/v1/search.php`,\n reverseUrl: `https://locationiq.org/v1/reverse.php`,\n });\n }\n}\n","import AbstractProvider, {\n EndpointArgument,\n LatLng,\n ParseArgument,\n SearchArgument,\n SearchResult,\n} from './provider';\n\nexport interface RequestResult {\n results: RawResult[];\n}\n\nexport interface RawResult {\n annotations: {\n DMS: { lat: string; lng: string };\n MGRS: string;\n Maidenhead: string;\n Mercator: { x: number; y: number };\n OSM: {\n edit_url: string;\n note_url: string;\n url: string;\n };\n UN_M49: {\n regions: { [key: string]: string };\n statistical_groupings: string[];\n };\n callingcode: number;\n currency: {\n alternate_symbols: string[];\n decimal_mark: string;\n html_entity: string;\n iso_code: string;\n iso_numeric: string;\n name: string;\n smallest_denomination: number;\n subunit: string;\n subunit_to_unit: number;\n symbol: string;\n symbol_first: number;\n thousands_separator: string;\n };\n flag: string;\n geohash: string;\n qibla: number;\n roadinfo: {\n drive_on: string;\n road: string;\n road_type: string;\n speed_in: string;\n };\n sun: {\n rise: {\n apparent: number;\n astronomical: number;\n civil: number;\n nautical: number;\n };\n set: {\n apparent: number;\n astronomical: number;\n civil: number;\n nautical: number;\n };\n };\n timezone: {\n name: string;\n now_in_dst: number;\n offset_sec: number;\n offset_string: string;\n short_name: string;\n };\n what3words: { words: string };\n };\n bounds: {\n northeast: LatLng;\n southwest: LatLng;\n };\n formatted: string;\n geometry: LatLng;\n}\n\nexport default class OpenCageProvider extends AbstractProvider<\n RequestResult,\n RawResult\n> {\n searchUrl = 'https://api.opencagedata.com/geocode/v1/json';\n\n endpoint({ query }: EndpointArgument) {\n const params = typeof query === 'string' ? { q: query } : query;\n params.format = 'json';\n\n return this.getUrl(this.searchUrl, params);\n }\n\n parse(response: ParseArgument<RequestResult>): SearchResult<RawResult>[] {\n return response.data.results.map((r) => ({\n x: r.geometry.lng,\n y: r.geometry.lat,\n label: r.formatted,\n bounds: [\n [r.bounds.southwest.lat, r.bounds.southwest.lng], // s, w\n [r.bounds.northeast.lat, r.bounds.northeast.lng], // n, e\n ],\n raw: r,\n }));\n }\n\n async search(options: SearchArgument): Promise<SearchResult<RawResult>[]> {\n // opencage returns a 400 error when query length < 2\n if (options.query.length < 2) {\n return [];\n }\n\n return super.search(options);\n }\n}\n","import AbstractProvider, {\n EndpointArgument,\n ParseArgument,\n ProviderOptions,\n SearchResult,\n BoundsTuple,\n} from './provider';\n\nexport type RequestResult = {\n features: RawResult[];\n};\nexport interface RawResult {\n center: [string, string];\n text: string;\n place_name: string;\n bbox: [string, string, string, string];\n}\n\nexport type MapBoxProviderOptions = {\n searchUrl?: string;\n reverseUrl?: string;\n} & ProviderOptions;\n\nexport default class MapBoxProvider extends AbstractProvider<\n RequestResult,\n RawResult\n> {\n searchUrl: string;\n\n constructor(options: MapBoxProviderOptions = {}) {\n super(options);\n\n const host = 'https://a.tiles.mapbox.com';\n this.searchUrl = options.searchUrl || `${host}/v4/geocode/mapbox.places/`;\n }\n\n endpoint({ query }: EndpointArgument): string {\n return this.getUrl(`${this.searchUrl}${query}.json`);\n }\n\n parse(response: ParseArgument<RequestResult>): SearchResult<RawResult>[] {\n const records = Array.isArray(response.data.features)\n ? response.data.features\n : [];\n\n return records.map((r) => {\n let bounds = null;\n if (r.bbox) {\n bounds = [\n [parseFloat(r.bbox[1]), parseFloat(r.bbox[0])], // s, w\n [parseFloat(r.bbox[3]), parseFloat(r.bbox[2])], // n, e\n ] as BoundsTuple;\n }\n\n return {\n x: Number(r.center[0]),\n y: Number(r.center[1]),\n label: r.place_name ? r.place_name : r.text,\n bounds,\n raw: r,\n };\n });\n }\n}\n","import AbstractProvider, {\n EndpointArgument,\n ParseArgument,\n ProviderOptions,\n SearchResult,\n RequestType,\n} from './provider';\n\nexport interface RequestResult {\n features: RawResult[];\n type: string;\n version: string;\n attribution: string;\n licence: string;\n query: string;\n limit: string;\n}\n\nexport interface RawResult {\n properties: {\n label: string;\n score: number;\n importance: number;\n x: number;\n y: number;\n housenumber: string;\n id: string;\n type: string;\n name: string;\n postcode: string;\n citycode: string;\n city: string;\n context: string;\n street: string;\n };\n type: string;\n geometry: {\n coordinates: number[];\n type: string;\n };\n}\n\nexport type GeoApiFrProviderOptions = {\n searchUrl?: string;\n reverseUrl?: string;\n} & ProviderOptions;\n\nexport default class GeoApiFrProvider extends AbstractProvider<\n RequestResult,\n RawResult\n> {\n searchUrl: string;\n reverseUrl: string;\n\n constructor(options: GeoApiFrProviderOptions = {}) {\n super(options);\n\n const host = 'https://api-adresse.data.gouv.fr';\n this.searchUrl = options.searchUrl || `${host}/search`;\n this.reverseUrl = options.reverseUrl || `${host}/reverse`;\n }\n\n endpoint({ query, type }: EndpointArgument) {\n const params = typeof query === 'string' ? { q: query } : query;\n\n switch (type) {\n case RequestType.REVERSE:\n return this.getUrl(this.reverseUrl, params);\n\n default:\n return this.getUrl(this.searchUrl, params);\n }\n }\n\n parse(result: ParseArgument<RequestResult>): SearchResult<RawResult>[] {\n return result.data.features.map((r) => ({\n x: r.geometry.coordinates[0],\n y: r.geometry.coordinates[1],\n label: r.properties.label,\n bounds: null,\n raw: r,\n }));\n }\n}\n"],"names":["createElement","element","className","parent","attributes","el","document","Object","keys","forEach","key","type","indexOf","substr","toLowerCase","addEventListener","innerHTML","innerText","setAttribute","appendChild","stopPropagation","event","preventDefault","cx","classNames","filter","Boolean","join","trim","addClassName","classList","Array","isArray","name","contains","add","removeClassName","remove","RequestType","ENTER_KEY","ARROW_DOWN_KEY","ARROW_UP_KEY","SPECIAL_KEYS","SearchElement","handleSubmit","searchLabel","this","container","form","autocomplete","onClick","onDblClick","touchStart","touchEnd","input","placeholder","onInput","onKeyUp","e","_this","onKeyPress","onFocus","onBlur","focus","dispatchEvent","Event","onSubmit","_this3","query","value","hasError","keyCode","body","blur","setQuery","ResultList","handleClick","notFoundMessage","target","hasAttribute","idx","Number","getAttribute","clear","result","results","notfound","undefined","html","resultlist","resultItem","item","render","resultFormat","child","_this2","cloneNode","length","parentElement","select","index","from","children","selected","count","lastChild","removeChild","defaultOptions","position","style","showMarker","showPopup","popupFormat","label","marker","icon","L","Icon","Default","draggable","maxMarkers","maxSuggestions","retainZoomLevel","animateZoom","messageHideDelay","zoomLevel","button","resetButton","msgbox","autoComplete","autoCompleteDelay","autoClose","keepResult","updateMap","UNINITIALIZED_ERR","Control","options","initialize","cb","wait","immediate","timeout","Error","provider","markers","FeatureGroup","searchElement","title","href","DomEvent","disableClickPropagation","text","clearResults","resultList","data","autoSearch","args","clearTimeout","setTimeout","selectResult","onAdd","map","addTo","root","getContainer","querySelector","onRemove","max","next","force","clearLayers","search","slice","_this5","showResult","getLayers","removeLayer","addMarker","centerMap","fireEvent","location","closeResults","Marker","y","x","popupLabel","bindPopup","addLayer","openPopup","on","_this6","getLatLng","resultBounds","bounds","LatLngBounds","LatLng","toBounds","isValid","getBounds","setView","getCenter","getZoom","animate","fitBounds","SearchControl","LControl","extend","AbstractProvider","getParamString","params","set","encodeURIComponent","getUrl","url","endpoint","SEARCH","fetch","request","json","parse","Provider","findBestMatchLevelIndex","vms","match","find","vm","matchLevel","getLabel","locale_names","_result$locale_names","_highlightResult","city","_result$city","administrative","postcode","_result$postcode","country","_result$country","response","hits","r","_geoloc","lng","lat","raw","method","JSON","stringify","BingProvider","q","jsonp","searchUrl","resourceSets","resources","point","coordinates","address","formattedAddress","bbox","script","Date","now","Promise","resolve","window","EsriProvider","f","locations","feature","geometry","extent","ymin","xmin","ymax","xmax","GoogleProvider","formatted_address","viewport","southwest","northeast","HereProvider","items","OpenStreetMapProvider","host","reverseUrl","format","REVERSE","lon","display_name","parseFloat","boundingbox","LocationIQProvider","OpenCageProvider","formatted","MapBoxProvider","features","center","place_name","GeoApiFrProvider","properties"],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ .marker-cluster-small {
2
+ background-color: rgba(181, 226, 140, 0.6);
3
+ }
4
+ .marker-cluster-small div {
5
+ background-color: rgba(110, 204, 57, 0.6);
6
+ }
7
+
8
+ .marker-cluster-medium {
9
+ background-color: rgba(241, 211, 87, 0.6);
10
+ }
11
+ .marker-cluster-medium div {
12
+ background-color: rgba(240, 194, 12, 0.6);
13
+ }
14
+
15
+ .marker-cluster-large {
16
+ background-color: rgba(253, 156, 115, 0.6);
17
+ }
18
+ .marker-cluster-large div {
19
+ background-color: rgba(241, 128, 23, 0.6);
20
+ }
21
+
22
+ /* IE 6-8 fallback colors */
23
+ .leaflet-oldie .marker-cluster-small {
24
+ background-color: rgb(181, 226, 140);
25
+ }
26
+ .leaflet-oldie .marker-cluster-small div {
27
+ background-color: rgb(110, 204, 57);
28
+ }
29
+
30
+ .leaflet-oldie .marker-cluster-medium {
31
+ background-color: rgb(241, 211, 87);
32
+ }
33
+ .leaflet-oldie .marker-cluster-medium div {
34
+ background-color: rgb(240, 194, 12);
35
+ }
36
+
37
+ .leaflet-oldie .marker-cluster-large {
38
+ background-color: rgb(253, 156, 115);
39
+ }
40
+ .leaflet-oldie .marker-cluster-large div {
41
+ background-color: rgb(241, 128, 23);
42
+ }
43
+
44
+ .marker-cluster {
45
+ background-clip: padding-box;
46
+ border-radius: 20px;
47
+ }
48
+ .marker-cluster div {
49
+ width: 30px;
50
+ height: 30px;
51
+ margin-left: 5px;
52
+ margin-top: 5px;
53
+
54
+ text-align: center;
55
+ border-radius: 15px;
56
+ font: 12px "Helvetica Neue", Arial, Helvetica, sans-serif;
57
+ }
58
+ .marker-cluster span {
59
+ line-height: 30px;
60
+ }
@@ -0,0 +1,14 @@
1
+ .leaflet-cluster-anim .leaflet-marker-icon, .leaflet-cluster-anim .leaflet-marker-shadow {
2
+ -webkit-transition: -webkit-transform 0.3s ease-out, opacity 0.3s ease-in;
3
+ -moz-transition: -moz-transform 0.3s ease-out, opacity 0.3s ease-in;
4
+ -o-transition: -o-transform 0.3s ease-out, opacity 0.3s ease-in;
5
+ transition: transform 0.3s ease-out, opacity 0.3s ease-in;
6
+ }
7
+
8
+ .leaflet-cluster-spider-leg {
9
+ /* stroke-dashoffset (duration and function) should match with leaflet-marker-icon transform in order to track it exactly */
10
+ -webkit-transition: -webkit-stroke-dashoffset 0.3s ease-out, -webkit-stroke-opacity 0.3s ease-in;
11
+ -moz-transition: -moz-stroke-dashoffset 0.3s ease-out, -moz-stroke-opacity 0.3s ease-in;
12
+ -o-transition: -o-stroke-dashoffset 0.3s ease-out, -o-stroke-opacity 0.3s ease-in;
13
+ transition: stroke-dashoffset 0.3s ease-out, stroke-opacity 0.3s ease-in;
14
+ }