@defra/interactive-map 0.0.10-alpha → 0.0.11-alpha

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 (99) hide show
  1. package/README.md +1 -1
  2. package/dist/css/index.css +1 -1
  3. package/dist/esm/im-core.js +1 -1
  4. package/dist/esm/im-shell.js +1 -1
  5. package/dist/umd/im-core.js +1 -1
  6. package/dist/umd/index.js +1 -1
  7. package/docs/api/button-definition.md +21 -3
  8. package/docs/api/panel-definition.md +10 -12
  9. package/docs/api.md +80 -7
  10. package/docs/demo.mdx +70 -0
  11. package/docs/index.md +0 -4
  12. package/docs/plugins/plugin-context.md +3 -3
  13. package/docs/plugins/plugin-manifest.md +1 -1
  14. package/docusaurus.config.cjs +55 -25
  15. package/package.json +12 -7
  16. package/plugins/beta/datasets/dist/esm/im-datasets-plugin.js +1 -1
  17. package/plugins/beta/datasets/dist/umd/im-datasets-plugin.js +1 -1
  18. package/plugins/beta/datasets/src/manifest.js +3 -3
  19. package/plugins/beta/draw-ml/dist/umd/im-draw-ml-plugin.js +1 -1
  20. package/plugins/beta/map-styles/dist/esm/im-map-styles-plugin.js +1 -1
  21. package/plugins/beta/map-styles/dist/umd/im-map-styles-plugin.js +1 -1
  22. package/plugins/beta/map-styles/src/manifest.js +3 -3
  23. package/plugins/beta/use-location/dist/esm/im-use-location-plugin.js +1 -1
  24. package/plugins/beta/use-location/dist/umd/im-use-location-plugin.js +1 -1
  25. package/plugins/beta/use-location/src/manifest.js +7 -7
  26. package/plugins/search/dist/css/index.css +1 -1
  27. package/plugins/search/dist/esm/im-search-plugin.js +1 -1
  28. package/plugins/search/dist/esm/index.js +1 -1
  29. package/plugins/search/dist/umd/im-search-plugin.js +1 -1
  30. package/plugins/search/dist/umd/index.js +1 -1
  31. package/plugins/search/src/Search.jsx +9 -3
  32. package/plugins/search/src/Search.test.jsx +26 -6
  33. package/plugins/search/src/components/Form/Form.jsx +35 -7
  34. package/plugins/search/src/components/Form/Form.module.scss +27 -0
  35. package/plugins/search/src/components/Form/Form.test.jsx +99 -2
  36. package/plugins/search/src/components/SubmitButton/SubmitButton.jsx +28 -0
  37. package/plugins/search/src/components/SubmitButton/SubmitButton.module.scss +8 -0
  38. package/plugins/search/src/components/SubmitButton/SubmitButton.test.jsx +33 -0
  39. package/plugins/search/src/datasets.js +15 -11
  40. package/plugins/search/src/datasets.test.js +17 -2
  41. package/plugins/search/src/events/fetchSuggestions.js +1 -1
  42. package/plugins/search/src/index.js +1 -1
  43. package/plugins/search/src/index.test.js +4 -4
  44. package/plugins/search/src/reducer.js +9 -4
  45. package/plugins/search/src/reducer.test.js +12 -7
  46. package/plugins/search/src/search.scss +5 -1
  47. package/plugins/search/src/utils/parseOsNamesResults.js +18 -2
  48. package/plugins/search/src/utils/parseOsNamesResults.test.js +33 -15
  49. package/providers/beta/esri/dist/esm/im-esri-provider.js +1 -1
  50. package/providers/beta/esri/src/appEvents.js +8 -2
  51. package/providers/beta/esri/src/esriProvider.js +6 -14
  52. package/providers/beta/esri/src/mapEvents.js +7 -1
  53. package/providers/beta/esri/src/utils/coords.js +33 -1
  54. package/providers/beta/esri/src/utils/coords.test.js +126 -0
  55. package/providers/maplibre/dist/esm/im-maplibre-provider.js +1 -1
  56. package/providers/maplibre/dist/esm/index.js +1 -1
  57. package/providers/maplibre/dist/umd/im-maplibre-provider.js +1 -1
  58. package/providers/maplibre/dist/umd/index.js +1 -1
  59. package/providers/maplibre/src/appEvents.js +10 -1
  60. package/providers/maplibre/src/appEvents.test.js +13 -4
  61. package/providers/maplibre/src/index.js +5 -13
  62. package/providers/maplibre/src/index.test.js +34 -15
  63. package/providers/maplibre/src/mapEvents.js +9 -1
  64. package/providers/maplibre/src/maplibreProvider.js +14 -15
  65. package/providers/maplibre/src/maplibreProvider.test.js +14 -1
  66. package/providers/maplibre/src/utils/spatial.js +11 -0
  67. package/providers/maplibre/src/utils/spatial.test.js +12 -0
  68. package/src/App/components/Actions/Actions.module.scss +5 -4
  69. package/src/App/components/MapButton/MapButton.jsx +4 -16
  70. package/src/App/components/MapButton/MapButton.module.scss +12 -12
  71. package/src/App/components/MapButton/MapButton.test.jsx +0 -9
  72. package/src/App/components/Panel/Panel.jsx +6 -6
  73. package/src/App/components/Panel/Panel.test.jsx +14 -15
  74. package/src/App/components/Viewport/MapController.jsx +2 -1
  75. package/src/App/hooks/useLayoutMeasurements.js +1 -1
  76. package/src/App/hooks/useLayoutMeasurements.test.js +1 -1
  77. package/src/App/hooks/useMapProviderOverrides.js +21 -1
  78. package/src/App/hooks/useMapProviderOverrides.test.js +51 -2
  79. package/src/App/layout/Layout.jsx +4 -4
  80. package/src/App/layout/layout.module.scss +1 -0
  81. package/src/App/registry/panelRegistry.js +1 -10
  82. package/src/App/registry/panelRegistry.test.js +6 -11
  83. package/src/App/renderer/HtmlElementHost.jsx +11 -3
  84. package/src/App/renderer/HtmlElementHost.test.jsx +89 -0
  85. package/src/App/renderer/mapButtons.js +128 -28
  86. package/src/App/renderer/mapButtons.test.js +119 -19
  87. package/src/App/store/MapProvider.jsx +18 -5
  88. package/src/App/store/MapProvider.test.jsx +56 -1
  89. package/src/App/store/appActionsMap.js +17 -9
  90. package/src/App/store/appActionsMap.test.js +33 -7
  91. package/src/App/store/mapActionsMap.js +4 -7
  92. package/src/InteractiveMap/InteractiveMap.js +18 -0
  93. package/src/InteractiveMap/InteractiveMap.test.js +12 -0
  94. package/src/config/appConfig.js +17 -15
  95. package/src/config/events.js +41 -4
  96. package/src/config/getInitialOpenPanels.js +2 -2
  97. package/src/config/getInitialOpenPanels.test.js +7 -7
  98. package/src/types.js +13 -11
  99. package/src/utils/getValueForStyle.js +1 -1
@@ -1,2 +1,2 @@
1
1
  /*! For license information please see im-maplibre-provider.js.LICENSE.txt */
2
- "use strict";(this.webpackChunkdefra_DefraMap=this.webpackChunkdefra_DefraMap||[]).push([[772],{809(t,e,n){n.r(e),n.d(e,{default:()=>nt});var r=400,a=["showKeyboardHelp","selectControl","moveLarge","nudgeMap","zoomLarge","nudgeZoom","highlightLabelAtCenter","highlightNextLabel"];function o(t){var e=t.getCanvas();e.removeAttribute("role"),e.setAttribute("tabindex",-1),e.removeAttribute("aria-label"),e.style.display="block"}function i(t){var e=Event.prototype.preventDefault;Event.prototype.preventDefault=function(){if(("touchmove"===this.type||"touchstart"===this.type)&&!this.cancelable){var n=t.getCanvas();if(n&&(this.target===n||n.contains(this.target)))return}e.call(this)}}var l=function(t,e){var n=null,r=function(){for(var r=arguments.length,a=new Array(r),o=0;o<r;o++)a[o]=arguments[o];clearTimeout(n),n=setTimeout(function(){t.apply(void 0,a)},e)};return r.cancel=function(){n&&(clearTimeout(n),n=null)},r};function s(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}function u(t){var e=t.map,n=t.events,r=t.eventBus,a=t.getCenter,o=t.getZoom,i=t.getBounds,u=t.getResolution,c=[],h=[],f=function(){var t=o();return{center:a(),bounds:i(),resolution:u(),zoom:t,isAtMaxZoom:e.getMaxZoom()<=t,isAtMinZoom:e.getMinZoom()>=t}},p=function(t,e){return r.emit(t,e)},d=function(){return p(n.MAP_LOADED)};e.on("load",d),c.push(["load",d]),e.once("idle",function(){return p(n.MAP_FIRST_IDLE,f())});var y=function(){return p(n.MAP_MOVE_START)};e.on("movestart",y),c.push(["movestart",y]);var g=l(function(){p(n.MAP_MOVE_END,f())},500);e.on("moveend",g),c.push(["moveend",g]),h.push(g);var v,m,b=(v=function(){p(n.MAP_MOVE,f())},m=0,function(){var t=Date.now();t-m>=10&&(m=t,v.apply(void 0,arguments))});e.on("zoom",b),c.push(["zoom",b]),h.push(b);var M=function(){return p(n.MAP_RENDER)};e.on("render",M),c.push(["render",M]);var w=l(function(){p(n.MAP_DATA_CHANGE,f())},500);e.on("styledata",w),c.push(["styledata",w]),h.push(w);var S=function(){return p(n.MAP_STYLE_CHANGE)};e.on("style.load",S),c.push(["style.load",S]);var x=function(t){return p(n.MAP_CLICK,{point:t.point,coords:[t.lngLat.lng,t.lngLat.lat]})};return e.on("click",x),c.push(["click",x]),{remove:function(){h.forEach(function(t){return t.cancel()}),c.forEach(function(t){var n,r,a=(r=2,function(t){if(Array.isArray(t))return t}(n=t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,a,o,i,l=[],s=!0,u=!1;try{if(o=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(l.push(r.value),l.length!==e);s=!0);}catch(t){u=!0,a=t}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return l}}(n,r)||function(t,e){if(t){if("string"==typeof t)return s(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?s(t,e):void 0}}(n,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),o=a[0],i=a[1];return e.off(o,i)})}}}function c(t){var e=t.map,n=t.events,r=t.eventBus,a=function(t){e.setStyle(t.url,{diff:!1})},o=function(t){e.setPixelRatio(t)};return r.on(n.MAP_SET_STYLE,a),r.on(n.MAP_SET_PIXEL_RATIO,o),{remove:function(){r.off(n.MAP_SET_STYLE,a),r.off(n.MAP_SET_PIXEL_RATIO,o)}}}let h=" ";class f{static get separator(){return h}static set separator(t){h=t}static parse(t){if(!isNaN(parseFloat(t))&&isFinite(t))return Number(t);const e=String(t).trim().replace(/^-/,"").replace(/[NSEW]$/i,"").split(/[^0-9.,]+/);if(""==e[e.length-1]&&e.splice(e.length-1),""==e)return NaN;let n=null;switch(e.length){case 3:n=e[0]/1+e[1]/60+e[2]/3600;break;case 2:n=e[0]/1+e[1]/60;break;case 1:n=e[0];break;default:return NaN}return/^-|[WS]$/i.test(t.trim())&&(n=-n),Number(n)}static toDms(t,e="d",n=void 0){if(isNaN(t))return null;if("string"==typeof t&&""==t.trim())return null;if("boolean"==typeof t)return null;if(t==1/0)return null;if(null==t)return null;if(void 0===n)switch(e){case"d":case"deg":n=4;break;case"dm":case"deg+min":n=2;break;case"dms":case"deg+min+sec":n=0;break;default:e="d",n=4}t=Math.abs(t);let r=null,a=null,o=null,i=null;switch(e){default:case"d":case"deg":a=t.toFixed(n),a<100&&(a="0"+a),a<10&&(a="0"+a),r=a+"°";break;case"dm":case"deg+min":a=Math.floor(t),o=(60*t%60).toFixed(n),60==o&&(o=(0).toFixed(n),a++),a=("000"+a).slice(-3),o<10&&(o="0"+o),r=a+"°"+f.separator+o+"′";break;case"dms":case"deg+min+sec":a=Math.floor(t),o=Math.floor(3600*t/60)%60,i=(3600*t%60).toFixed(n),60==i&&(i=(0).toFixed(n),o++),60==o&&(o=0,a++),a=("000"+a).slice(-3),o=("00"+o).slice(-2),i<10&&(i="0"+i),r=a+"°"+f.separator+o+"′"+f.separator+i+"″"}return r}static toLat(t,e,n){const r=f.toDms(f.wrap90(t),e,n);return null===r?"–":r.slice(1)+f.separator+(t<0?"S":"N")}static toLon(t,e,n){const r=f.toDms(f.wrap180(t),e,n);return null===r?"–":r+f.separator+(t<0?"W":"E")}static toBrng(t,e,n){const r=f.toDms(f.wrap360(t),e,n);return null===r?"–":r.replace("360","0")}static fromLocale(t){const e=123456.789.toLocaleString(),n={thousands:e.slice(3,4),decimal:e.slice(7,8)};return t.replace(n.thousands,"⁜").replace(n.decimal,".").replace("⁜",",")}static toLocale(t){const e=123456.789.toLocaleString(),n={thousands:e.slice(3,4),decimal:e.slice(7,8)};return t.replace(/,([0-9])/,"⁜$1").replace(".",n.decimal).replace("⁜",n.thousands)}static compassPoint(t,e=3){if(![1,2,3].includes(Number(e)))throw new RangeError(`invalid precision ‘${e}’`);t=f.wrap360(t);const n=4*2**(e-1);return["N","NNE","NE","ENE","E","ESE","SE","SSE","S","SSW","SW","WSW","W","WNW","NW","NNW"][Math.round(t*n/360)%n*16/n]}static wrap90(t){if(-90<=t&&t<=90)return t;const e=t;return 1*Math.abs(((e-90)%360+360)%360-180)-90}static wrap180(t){if(-180<=t&&t<=180)return t;const e=360;return((360*t/e-180)%e+e)%e-180}static wrap360(t){if(0<=t&&t<360)return t;const e=360;return(360*t/e%e+e)%e}}Number.prototype.toRadians=function(){return this*Math.PI/180},Number.prototype.toDegrees=function(){return 180*this/Math.PI};const p=f,d=Math.PI;class y{constructor(t,e){if(isNaN(t))throw new TypeError(`invalid lat ‘${t}’`);if(isNaN(e))throw new TypeError(`invalid lon ‘${e}’`);this._lat=p.wrap90(Number(t)),this._lon=p.wrap180(Number(e))}get lat(){return this._lat}get latitude(){return this._lat}set lat(t){if(this._lat=isNaN(t)?p.wrap90(p.parse(t)):p.wrap90(Number(t)),isNaN(this._lat))throw new TypeError(`invalid lat ‘${t}’`)}set latitude(t){if(this._lat=isNaN(t)?p.wrap90(p.parse(t)):p.wrap90(Number(t)),isNaN(this._lat))throw new TypeError(`invalid latitude ‘${t}’`)}get lon(){return this._lon}get lng(){return this._lon}get longitude(){return this._lon}set lon(t){if(this._lon=isNaN(t)?p.wrap180(p.parse(t)):p.wrap180(Number(t)),isNaN(this._lon))throw new TypeError(`invalid lon ‘${t}’`)}set lng(t){if(this._lon=isNaN(t)?p.wrap180(p.parse(t)):p.wrap180(Number(t)),isNaN(this._lon))throw new TypeError(`invalid lng ‘${t}’`)}set longitude(t){if(this._lon=isNaN(t)?p.wrap180(p.parse(t)):p.wrap180(Number(t)),isNaN(this._lon))throw new TypeError(`invalid longitude ‘${t}’`)}static get metresToKm(){return.001}static get metresToMiles(){return 1/1609.344}static get metresToNauticalMiles(){return 1/1852}static parse(...t){if(0==t.length)throw new TypeError("invalid (empty) point");if(null===t[0]||null===t[1])throw new TypeError("invalid (null) point");let e,n;if(2==t.length&&([e,n]=t,e=p.wrap90(p.parse(e)),n=p.wrap180(p.parse(n)),isNaN(e)||isNaN(n)))throw new TypeError(`invalid point ‘${t.toString()}’`);if(1==t.length&&"string"==typeof t[0]&&([e,n]=t[0].split(","),e=p.wrap90(p.parse(e)),n=p.wrap180(p.parse(n)),isNaN(e)||isNaN(n)))throw new TypeError(`invalid point ‘${t[0]}’`);if(1==t.length&&"object"==typeof t[0]){const r=t[0];if("Point"==r.type&&Array.isArray(r.coordinates)?[n,e]=r.coordinates:(null!=r.latitude&&(e=r.latitude),null!=r.lat&&(e=r.lat),null!=r.longitude&&(n=r.longitude),null!=r.lng&&(n=r.lng),null!=r.lon&&(n=r.lon),e=p.wrap90(p.parse(e)),n=p.wrap180(p.parse(n))),isNaN(e)||isNaN(n))throw new TypeError(`invalid point ‘${JSON.stringify(t[0])}’`)}if(isNaN(e)||isNaN(n))throw new TypeError(`invalid point ‘${t.toString()}’`);return new y(e,n)}distanceTo(t,e=6371e3){if(t instanceof y||(t=y.parse(t)),isNaN(e))throw new TypeError(`invalid radius ‘${e}’`);const n=e,r=this.lat.toRadians(),a=this.lon.toRadians(),o=t.lat.toRadians(),i=o-r,l=t.lon.toRadians()-a,s=Math.sin(i/2)*Math.sin(i/2)+Math.cos(r)*Math.cos(o)*Math.sin(l/2)*Math.sin(l/2);return n*(2*Math.atan2(Math.sqrt(s),Math.sqrt(1-s)))}initialBearingTo(t){if(t instanceof y||(t=y.parse(t)),this.equals(t))return NaN;const e=this.lat.toRadians(),n=t.lat.toRadians(),r=(t.lon-this.lon).toRadians(),a=Math.cos(e)*Math.sin(n)-Math.sin(e)*Math.cos(n)*Math.cos(r),o=Math.sin(r)*Math.cos(n),i=Math.atan2(o,a).toDegrees();return p.wrap360(i)}finalBearingTo(t){t instanceof y||(t=y.parse(t));const e=t.initialBearingTo(this)+180;return p.wrap360(e)}midpointTo(t){t instanceof y||(t=y.parse(t));const e=this.lat.toRadians(),n=this.lon.toRadians(),r=t.lat.toRadians(),a=(t.lon-this.lon).toRadians(),o=Math.cos(e),i=Math.sin(e),l={x:o+Math.cos(r)*Math.cos(a),y:0+Math.cos(r)*Math.sin(a),z:i+Math.sin(r)},s=Math.atan2(l.z,Math.sqrt(l.x*l.x+l.y*l.y)),u=n+Math.atan2(l.y,l.x),c=s.toDegrees(),h=u.toDegrees();return new y(c,h)}intermediatePointTo(t,e){if(t instanceof y||(t=y.parse(t)),this.equals(t))return new y(this.lat,this.lon);const n=this.lat.toRadians(),r=this.lon.toRadians(),a=t.lat.toRadians(),o=t.lon.toRadians(),i=a-n,l=o-r,s=Math.sin(i/2)*Math.sin(i/2)+Math.cos(n)*Math.cos(a)*Math.sin(l/2)*Math.sin(l/2),u=2*Math.atan2(Math.sqrt(s),Math.sqrt(1-s)),c=Math.sin((1-e)*u)/Math.sin(u),h=Math.sin(e*u)/Math.sin(u),f=c*Math.cos(n)*Math.cos(r)+h*Math.cos(a)*Math.cos(o),p=c*Math.cos(n)*Math.sin(r)+h*Math.cos(a)*Math.sin(o),d=c*Math.sin(n)+h*Math.sin(a),g=Math.atan2(d,Math.sqrt(f*f+p*p)),v=Math.atan2(p,f),m=g.toDegrees(),b=v.toDegrees();return new y(m,b)}destinationPoint(t,e,n=6371e3){const r=t/n,a=Number(e).toRadians(),o=this.lat.toRadians(),i=this.lon.toRadians(),l=Math.sin(o)*Math.cos(r)+Math.cos(o)*Math.sin(r)*Math.cos(a),s=Math.asin(l),u=Math.sin(a)*Math.sin(r)*Math.cos(o),c=Math.cos(r)-Math.sin(o)*l,h=i+Math.atan2(u,c),f=s.toDegrees(),p=h.toDegrees();return new y(f,p)}static intersection(t,e,n,r){if(t instanceof y||(t=y.parse(t)),n instanceof y||(n=y.parse(n)),isNaN(e))throw new TypeError(`invalid brng1 ‘${e}’`);if(isNaN(r))throw new TypeError(`invalid brng2 ‘${r}’`);const a=t.lat.toRadians(),o=t.lon.toRadians(),i=n.lat.toRadians(),l=n.lon.toRadians(),s=Number(e).toRadians(),u=Number(r).toRadians(),c=i-a,h=l-o,f=2*Math.asin(Math.sqrt(Math.sin(c/2)*Math.sin(c/2)+Math.cos(a)*Math.cos(i)*Math.sin(h/2)*Math.sin(h/2)));if(Math.abs(f)<Number.EPSILON)return new y(t.lat,t.lon);const p=(Math.sin(i)-Math.sin(a)*Math.cos(f))/(Math.sin(f)*Math.cos(a)),g=(Math.sin(a)-Math.sin(i)*Math.cos(f))/(Math.sin(f)*Math.cos(i)),v=Math.acos(Math.min(Math.max(p,-1),1)),m=Math.acos(Math.min(Math.max(g,-1),1)),b=s-(Math.sin(l-o)>0?v:2*d-v),M=(Math.sin(l-o)>0?2*d-m:m)-u;if(0==Math.sin(b)&&0==Math.sin(M))return null;if(Math.sin(b)*Math.sin(M)<0)return null;const w=-Math.cos(b)*Math.cos(M)+Math.sin(b)*Math.sin(M)*Math.cos(f),S=Math.atan2(Math.sin(f)*Math.sin(b)*Math.sin(M),Math.cos(M)+Math.cos(b)*w),x=Math.asin(Math.min(Math.max(Math.sin(a)*Math.cos(S)+Math.cos(a)*Math.sin(S)*Math.cos(s),-1),1)),N=o+Math.atan2(Math.sin(s)*Math.sin(S)*Math.cos(a),Math.cos(S)-Math.sin(a)*Math.sin(x)),P=x.toDegrees(),O=N.toDegrees();return new y(P,O)}crossTrackDistanceTo(t,e,n=6371e3){t instanceof y||(t=y.parse(t)),e instanceof y||(e=y.parse(e));const r=n;if(this.equals(t))return 0;const a=t.distanceTo(this,r)/r,o=t.initialBearingTo(this).toRadians(),i=t.initialBearingTo(e).toRadians();return Math.asin(Math.sin(a)*Math.sin(o-i))*r}alongTrackDistanceTo(t,e,n=6371e3){t instanceof y||(t=y.parse(t)),e instanceof y||(e=y.parse(e));const r=n;if(this.equals(t))return 0;const a=t.distanceTo(this,r)/r,o=t.initialBearingTo(this).toRadians(),i=t.initialBearingTo(e).toRadians(),l=Math.asin(Math.sin(a)*Math.sin(o-i));return Math.acos(Math.cos(a)/Math.abs(Math.cos(l)))*Math.sign(Math.cos(i-o))*r}maxLatitude(t){const e=Number(t).toRadians(),n=this.lat.toRadians();return Math.acos(Math.abs(Math.sin(e)*Math.cos(n))).toDegrees()}static crossingParallels(t,e,n){if(t.equals(e))return null;const r=Number(n).toRadians(),a=t.lat.toRadians(),o=t.lon.toRadians(),i=e.lat.toRadians(),l=e.lon.toRadians()-o,s=Math.sin(a)*Math.cos(i)*Math.cos(r)*Math.sin(l),u=Math.sin(a)*Math.cos(i)*Math.cos(r)*Math.cos(l)-Math.cos(a)*Math.sin(i)*Math.cos(r),c=Math.cos(a)*Math.cos(i)*Math.sin(r)*Math.sin(l);if(c*c>s*s+u*u)return null;const h=Math.atan2(-u,s),f=Math.acos(c/Math.sqrt(s*s+u*u)),d=o+h+f,y=(o+h-f).toDegrees(),g=d.toDegrees();return{lon1:p.wrap180(y),lon2:p.wrap180(g)}}rhumbDistanceTo(t,e=6371e3){t instanceof y||(t=y.parse(t));const n=e,r=this.lat.toRadians(),a=t.lat.toRadians(),o=a-r;let i=Math.abs(t.lon-this.lon).toRadians();Math.abs(i)>d&&(i=i>0?-(2*d-i):2*d+i);const l=Math.log(Math.tan(a/2+d/4)/Math.tan(r/2+d/4)),s=Math.abs(l)>1e-11?o/l:Math.cos(r);return Math.sqrt(o*o+s*s*i*i)*n}rhumbBearingTo(t){if(t instanceof y||(t=y.parse(t)),this.equals(t))return NaN;const e=this.lat.toRadians(),n=t.lat.toRadians();let r=(t.lon-this.lon).toRadians();Math.abs(r)>d&&(r=r>0?-(2*d-r):2*d+r);const a=Math.log(Math.tan(n/2+d/4)/Math.tan(e/2+d/4)),o=Math.atan2(r,a).toDegrees();return p.wrap360(o)}rhumbDestinationPoint(t,e,n=6371e3){const r=this.lat.toRadians(),a=this.lon.toRadians(),o=Number(e).toRadians(),i=t/n,l=i*Math.cos(o);let s=r+l;Math.abs(s)>d/2&&(s=s>0?d-s:-d-s);const u=Math.log(Math.tan(s/2+d/4)/Math.tan(r/2+d/4)),c=Math.abs(u)>1e-11?l/u:Math.cos(r),h=a+i*Math.sin(o)/c,f=s.toDegrees(),p=h.toDegrees();return new y(f,p)}rhumbMidpointTo(t){t instanceof y||(t=y.parse(t));const e=this.lat.toRadians();let n=this.lon.toRadians();const r=t.lat.toRadians(),a=t.lon.toRadians();Math.abs(a-n)>d&&(n+=2*d);const o=(e+r)/2,i=Math.tan(d/4+e/2),l=Math.tan(d/4+r/2),s=Math.tan(d/4+o/2);let u=((a-n)*Math.log(s)+n*Math.log(l)-a*Math.log(i))/Math.log(l/i);isFinite(u)||(u=(n+a)/2);const c=o.toDegrees(),h=u.toDegrees();return new y(c,h)}static areaOf(t,e=6371e3){const n=e,r=t[0].equals(t[t.length-1]);r||t.push(t[0]);const a=t.length-1;let o=0;for(let e=0;e<a;e++){const n=t[e].lat.toRadians(),r=t[e+1].lat.toRadians(),a=(t[e+1].lon-t[e].lon).toRadians();o+=2*Math.atan2(Math.tan(a/2)*(Math.tan(n/2)+Math.tan(r/2)),1+Math.tan(n/2)*Math.tan(r/2))}(function(t){let e=0,n=t[0].initialBearingTo(t[1]);for(let r=0;r<t.length-1;r++){const a=t[r].initialBearingTo(t[r+1]),o=t[r].finalBearingTo(t[r+1]);e+=(a-n+540)%360-180,e+=(o-a+540)%360-180,n=o}return e+=(t[0].initialBearingTo(t[1])-n+540)%360-180,Math.abs(e)<90})(t)&&(o=Math.abs(o)-2*d);const i=Math.abs(o*n*n);return r||t.pop(),i}equals(t){return t instanceof y||(t=y.parse(t)),!(Math.abs(this.lat-t.lat)>Number.EPSILON||Math.abs(this.lon-t.lon)>Number.EPSILON)}toGeoJSON(){return{type:"Point",coordinates:[this.lon,this.lat]}}toString(t="d",e=void 0){if(!["d","dm","dms","n"].includes(t))throw new RangeError(`invalid format ‘${t}’`);return"n"==t?(null==e&&(e=4),`${this.lat.toFixed(e)},${this.lon.toFixed(e)}`):`${p.toLat(this.lat,t,e)}, ${p.toLon(this.lon,t,e)}`}}function g(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,a,o,i,l=[],s=!0,u=!1;try{if(o=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(l.push(r.value),l.length!==e);s=!0);}catch(t){u=!0,a=t}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return l}}(t,e)||function(t,e){if(t){if("string"==typeof t)return v(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?v(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function v(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}var m=function(t,e){var n=g(t,2),r=n[0],a=n[1],o=g(e,2),i=o[0],l=o[1],s=new y(a,r),u=new y(l,i);return s.distanceTo(u)},b=function(t){var e=t/1609.344;if(e<.5)return"".concat(Math.round(t),"m");if(e<10){var n=Number.parseFloat(e.toFixed(1)),r=1===n?"mile":"miles";return"".concat(n," ").concat(r)}var a=Math.round(e);return"".concat(a," miles")};function M(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,a,o,i,l=[],s=!0,u=!1;try{if(o=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(l.push(r.value),l.length!==e);s=!0);}catch(t){u=!0,a=t}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return l}}(t,e)||function(t,e){if(t){if("string"==typeof t)return w(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?w(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function w(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}function S(t){return S="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},S(t)}function x(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function N(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?x(Object(n),!0).forEach(function(e){P(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):x(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function P(t,e,n){return(e=function(t){var e=function(t){if("object"!=S(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,"string");if("object"!=S(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==S(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function O(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}var E="highlighted-label";function A(t,e){if("number"==typeof t)return t;if(!Array.isArray(t)||"interpolate"!==t[0])return function(t,e){var n=t.stops;if(n.length<2)return n.length>0?n[0][1]:0;for(var r=n[0],a=n[n.length-1],o=1;o<n.length;o++){var i=n[o];if(i[0]>e){a=i,r=n[o-1];break}r=n[o-1],a=i}var l=M(r,2),s=l[0],u=l[1],c=M(a,2),h=c[0],f=c[1];return e<=s?u:e>=h?f:u+(e-s)/(h-s)*(f-u)}(t,e);var n,r=function(t){if(Array.isArray(t))return t}(n=t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(n)||function(t,e){if(t){if("string"==typeof t)return O(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?O(t,e):void 0}}(n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),a=r[2],o=O(r).slice(3);if("zoom"!==a[0])throw new Error("Only zoom-based expressions supported");for(var i=0;i<o.length-2;i+=2){var l=o[i],s=o[i+1],u=o[i+2],c=o[i+3];if(e<=l)return s;if(e<=u)return s+(e-l)/(u-l)*(c-s)}return o[o.length-1]}function j(t,e){if(e.highlightLayerId&&t.getLayer(e.highlightLayerId)){try{t.removeLayer(e.highlightLayerId)}catch(t){}e.highlightLayerId=null,e.highlightedExpr=null}}function T(t,e,n){var r,a,o,i;if(null!=e&&null!==(r=e.feature)&&void 0!==r&&r.layer){j(t,n);var l=e.feature,s=e.layer;n.highlightLayerId="highlight-".concat(s.id);var u=l.id,c=l.type,h=l.properties,f=l.geometry;t.getSource(E).setData({id:u,type:c,properties:h,geometry:f}),n.highlightedExpr=s.layout["text-size"];var p=t.getZoom(),d=(a=s,o=1.5*A(n.highlightedExpr,p),i=n.isDarkStyle?{text:"#ffffff",halo:"#000000"}:{text:"#000000",halo:"#ffffff"},{id:"highlight-".concat(a.id),type:a.type,source:E,layout:N(N({},a.layout),{},{"text-size":o,"text-allow-overlap":!0,"text-ignore-placement":!0,"text-max-angle":90}),paint:N(N({},a.paint),{},{"text-color":i.text,"text-halo-color":i.halo,"text-halo-width":3,"text-halo-blur":1,"text-opacity":1})});t.addLayer(d),t.moveLayer(n.highlightLayerId)}}function R(t){t.getSource(E)||t.addSource(E,{type:"geojson",data:{type:"FeatureCollection",features:[]}})}function L(t){t.getStyle().layers.filter(function(t){var e;return"line"===(null===(e=t.layout)||void 0===e?void 0:e["symbol-placement"])}).forEach(function(e){return t.setLayoutProperty(e.id,"symbol-placement","line-center")})}function k(t,e,n,r){var a={isDarkStyle:"dark"===e,labels:[],currentPixel:null,highlightLayerId:null,highlightedExpr:null};function o(){var e=t.getStyle().layers.filter(function(t){return"symbol"===t.type}),n=t.queryRenderedFeatures({layers:e.map(function(t){return t.id})});a.labels=function(t,e,n){return e.flatMap(function(e){var r,a,o,i,l="string"==typeof(a=null===(r=e.layout)||void 0===r?void 0:r["text-field"])?null===(o=/^{(.+)}$/.exec(a))||void 0===o?void 0:o[1]:Array.isArray(a)?null===(i=a.find(function(t){return Array.isArray(t)&&"get"===t[0]}))||void 0===i?void 0:i[1]:null;return l?n.filter(function(t){var n;return t.layer.id===e.id&&(null===(n=t.properties)||void 0===n?void 0:n[l])}).map(function(n){return function(t,e,n,r){var a=function(t){var e=t.type,n=t.coordinates;if("Point"===e)return n;if("MultiPoint"===e)return n[0];if(e.includes("LineString")){var r="LineString"===e?n:n[0];return[(r[0][0]+r[r.length-1][0])/2,(r[0][1]+r[r.length-1][1])/2]}if(e.includes("Polygon")){var a="Polygon"===e?n[0]:n[0][0],o=a.reduce(function(t,e){return[t[0]+e[0],t[1]+e[1]]},[0,0]);return[o[0]/a.length,o[1]/a.length]}return null}(t.geometry);if(!a)return null;var o=r.project({lng:a[0],lat:a[1]});return{text:t.properties[n],x:o.x,y:o.y,feature:t,layer:e}}(n,e,l,t)}).filter(Boolean):[]})}(t,e,n)}function i(){if(o(),!a.labels.length)return null;var e=t.project(t.getCenter()),n=function(t,e){var n;return null===(n=t.reduce(function(t,n){var r=Math.pow(n.x-e.x,2)+Math.pow(n.y-e.y,2);return!t||r<t.dist?{label:n,dist:r}:t},null))||void 0===n?void 0:n.label}(a.labels,e);return a.currentPixel={x:n.x,y:n.y},T(t,n,a),"".concat(n.text," (").concat(n.layer.id,")")}return L(t),R(t),null==r||r.on(n.MAP_SET_STYLE,function(e){t.once("styledata",function(){return t.once("idle",function(){L(t),R(t),a.isDarkStyle="dark"===(null==e?void 0:e.mapColorScheme)})})}),t.on("zoom",function(){if(a.highlightLayerId&&a.highlightedExpr){var e=A(a.highlightedExpr,t.getZoom());t.setLayoutProperty(a.highlightLayerId,"text-size",1.5*e)}}),function(t){t.getStyle().layers.filter(function(t){return"symbol"===t.type}).forEach(function(e){t.setPaintProperty(e.id,"text-opacity",["case",["boolean",["feature-state","highlighted"],!1],0,1])})}(t),{refreshLabels:o,highlightNextLabel:function(e){if(o(),!a.labels.length)return null;if(!a.currentPixel)return i();var n=function(t,e){if(!e.currentPixel)return null;var n=e.labels.map(function(t,e){return{pixel:[t.x,t.y],index:e}}).filter(function(t){return t.pixel[0]!==e.currentPixel.x||t.pixel[1]!==e.currentPixel.y});if(!n.length)return null;var r=n.map(function(t){return t.pixel}),a=function(t,e,n){var r=g(e,2),a=r[0],o=r[1],i=n.filter(function(e){var n=g(e,2),r=n[0],i=n[1];return(r!==a||i!==o)&&function(t,e,n){switch(t){case"ArrowUp":return n<0&&Math.abs(n)>=Math.abs(e);case"ArrowDown":return n>0&&Math.abs(n)>=Math.abs(e);case"ArrowLeft":return e<0&&Math.abs(e)>Math.abs(n);case"ArrowRight":return e>0&&Math.abs(e)>Math.abs(n);default:return!1}}(t,r-a,i-o)});if(!i.length)return n.findIndex(function(t){return t[0]===a&&t[1]===o});var l=-1,s=1/0;return i.forEach(function(t){var e=t[0]-a,r=t[1]-o,i=e*e+r*r;i<s&&(s=i,l=n.indexOf(t))}),l}(t,[e.currentPixel.x,e.currentPixel.y],r);return(null==a||a<0||a>=n.length)&&(a=0),e.labels[n[a].index]}(e,a);return n?(a.currentPixel={x:n.x,y:n.y},T(t,n,a),"".concat(n.text," (").concat(n.layer.id,")")):null},highlightLabelAtCenter:i,clearHighlightedLabel:function(){return j(t,a)}}}function D(t){return D="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},D(t)}function I(t){return function(t){if(Array.isArray(t))return B(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||_(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _(t,e){if(t){if("string"==typeof t)return B(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?B(t,e):void 0}}function B(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}function C(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function F(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?C(Object(n),!0).forEach(function(e){$(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):C(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function $(t,e,n){return(e=function(t){var e=function(t){if("object"!=D(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,"string");if("object"!=D(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==D(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var z=function(t,e,n,r,a,o,i){t.getLayer(e)||t.addLayer(F(F({id:e,type:n,source:r},a&&{"source-layer":a}),{},{paint:o})),Object.entries(o).forEach(function(n){var r,a,o=(a=2,function(t){if(Array.isArray(t))return t}(r=n)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,a,o,i,l=[],s=!0,u=!1;try{if(o=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(l.push(r.value),l.length!==e);s=!0);}catch(t){u=!0,a=t}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return l}}(r,a)||_(r,a)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),i=o[0],l=o[1];t.setPaintProperty(e,i,l)}),t.setFilter(e,i)};function q(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,a,o,i,l=[],s=!0,u=!1;try{if(o=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(l.push(r.value),l.length!==e);s=!0);}catch(t){u=!0,a=t}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return l}}(t,e)||function(t,e){if(t){if("string"==typeof t)return Z(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Z(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Z(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}var W=function(t,e,n){var r=Math.pow(e.x-n.x,2)+Math.pow(e.y-n.y,2);if(0===r)return Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2);var a=((t.x-e.x)*(n.x-e.x)+(t.y-e.y)*(n.y-e.y))/r;return a=Math.max(0,Math.min(1,a)),Math.pow(t.x-(e.x+a*(n.x-e.x)),2)+Math.pow(t.y-(e.y+a*(n.y-e.y)),2)},G=["container","padding","mapStyle","center","zoom","bounds","pixelRatio"];function H(t){return H="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},H(t)}function U(){var t,e,n="function"==typeof Symbol?Symbol:{},r=n.iterator||"@@iterator",a=n.toStringTag||"@@toStringTag";function o(n,r,a,o){var s=r&&r.prototype instanceof l?r:l,u=Object.create(s.prototype);return V(u,"_invoke",function(n,r,a){var o,l,s,u=0,c=a||[],h=!1,f={p:0,n:0,v:t,a:p,f:p.bind(t,4),d:function(e,n){return o=e,l=0,s=t,f.n=n,i}};function p(n,r){for(l=n,s=r,e=0;!h&&u&&!a&&e<c.length;e++){var a,o=c[e],p=f.p,d=o[2];n>3?(a=d===r)&&(s=o[(l=o[4])?5:(l=3,3)],o[4]=o[5]=t):o[0]<=p&&((a=n<2&&p<o[1])?(l=0,f.v=r,f.n=o[1]):p<d&&(a=n<3||o[0]>r||r>d)&&(o[4]=n,o[5]=r,f.n=d,l=0))}if(a||n>1)return i;throw h=!0,r}return function(a,c,d){if(u>1)throw TypeError("Generator is already running");for(h&&1===c&&p(c,d),l=c,s=d;(e=l<2?t:s)||!h;){o||(l?l<3?(l>1&&(f.n=-1),p(l,s)):f.n=s:f.v=s);try{if(u=2,o){if(l||(a="next"),e=o[a]){if(!(e=e.call(o,s)))throw TypeError("iterator result is not an object");if(!e.done)return e;s=e.value,l<2&&(l=0)}else 1===l&&(e=o.return)&&e.call(o),l<2&&(s=TypeError("The iterator does not provide a '"+a+"' method"),l=1);o=t}else if((e=(h=f.n<0)?s:n.call(r,f))!==i)break}catch(e){o=t,l=1,s=e}finally{u=1}}return{value:e,done:h}}}(n,a,o),!0),u}var i={};function l(){}function s(){}function u(){}e=Object.getPrototypeOf;var c=[][r]?e(e([][r]())):(V(e={},r,function(){return this}),e),h=u.prototype=l.prototype=Object.create(c);function f(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,u):(t.__proto__=u,V(t,a,"GeneratorFunction")),t.prototype=Object.create(h),t}return s.prototype=u,V(h,"constructor",u),V(u,"constructor",s),s.displayName="GeneratorFunction",V(u,a,"GeneratorFunction"),V(h),V(h,a,"Generator"),V(h,r,function(){return this}),V(h,"toString",function(){return"[object Generator]"}),(U=function(){return{w:o,m:f}})()}function V(t,e,n,r){var a=Object.defineProperty;try{a({},"",{})}catch(t){a=0}V=function(t,e,n,r){function o(e,n){V(t,e,function(t){return this._invoke(e,n,t)})}e?a?a(t,e,{value:n,enumerable:!r,configurable:!r,writable:!r}):t[e]=n:(o("next",0),o("throw",1),o("return",2))},V(t,e,n,r)}function Y(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function J(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Y(Object(n),!0).forEach(function(e){K(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Y(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function K(t,e,n){return(e=et(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function X(t,e){if(null==t)return{};var n,r,a=function(t,e){if(null==t)return{};var n={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(-1!==e.indexOf(r))continue;n[r]=t[r]}return n}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(r=0;r<o.length;r++)n=o[r],-1===e.indexOf(n)&&{}.propertyIsEnumerable.call(t,n)&&(a[n]=t[n])}return a}function Q(t,e,n,r,a,o,i){try{var l=t[o](i),s=l.value}catch(t){return void n(t)}l.done?e(s):Promise.resolve(s).then(r,a)}function tt(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,et(r.key),r)}}function et(t){var e=function(t){if("object"!=H(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,"string");if("object"!=H(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==H(e)?e:e+""}var nt=function(){return t=function t(e){var n=e.mapFramework,r=e.mapProviderConfig,o=void 0===r?{}:r,i=e.events,l=e.eventBus;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.maplibreModule=n,this.events=i,this.eventBus=l,this.capabilities={supportedShortcuts:a,supportsMapSizes:!0},Object.assign(this,o)},e=[{key:"initMap",value:(n=U().m(function t(e){var n,r,a,l,s,h,f,p,d,y,g,v,m=this;return U().w(function(t){for(;;)switch(t.n){case 0:n=e.container,r=e.padding,a=e.mapStyle,l=e.center,s=e.zoom,h=e.bounds,f=e.pixelRatio,p=X(e,G),d=this.maplibreModule.Map,y=this.events,g=this.eventBus,(v=new d(J(J({},p),{},{container:n,style:null==a?void 0:a.url,pixelRatio:f,padding:r,center:l,zoom:s,fadeDuration:0,attributionControl:!1,dragRotate:!1,doubleClickZoom:!1}))).touchZoomRotate.disableRotation(),this.map=v,this.map.setPadding(r),h&&v.fitBounds(h,{duration:0}),i(v),o(v),u({map:v,events:y,eventBus:g,getCenter:this.getCenter.bind(this),getZoom:this.getZoom.bind(this),getBounds:this.getBounds.bind(this),getResolution:this.getResolution.bind(this)}),c({map:v,events:y,eventBus:g}),v.on("load",function(){m.labelNavigator=k(v,null==a?void 0:a.mapColorScheme,y,g)}),this.eventBus.emit(y.MAP_READY,this.getMapAPI());case 1:return t.a(2)}},t,this)}),l=function(){var t=this,e=arguments;return new Promise(function(r,a){var o=n.apply(t,e);function i(t){Q(o,r,a,i,l,"next",t)}function l(t){Q(o,r,a,i,l,"throw",t)}i(void 0)})},function(t){return l.apply(this,arguments)})},{key:"getMapAPI",value:function(){return{map:this.map,crs:this.crs,fitToBounds:this.fitToBounds.bind(this),setView:this.setView.bind(this)}}},{key:"destroyMap",value:function(){var t,e;null===(t=this.mapEvents)||void 0===t||t.remove(),null===(e=this.appEvents)||void 0===e||e.remove(),this.mapEvents=null,this.appEvents=null,this.map.remove()}},{key:"setView",value:function(t){var e=t.center,n=t.zoom;this.map.flyTo({center:e||this.getCenter(),zoom:n||this.getZoom(),duration:r})}},{key:"zoomIn",value:function(t){this.map.easeTo({zoom:this.getZoom()+t,duration:r})}},{key:"zoomOut",value:function(t){this.map.easeTo({zoom:this.getZoom()-t,duration:r})}},{key:"panBy",value:function(t){this.map.panBy(t,{duration:r})}},{key:"fitToBounds",value:function(t){this.map.fitBounds(t,{duration:r})}},{key:"setPadding",value:function(t){this.map.setPadding(t)}},{key:"updateHighlightedFeatures",value:function(t,e){return function(t){var e=t.LngLatBounds,n=t.map,r=t.selectedFeatures,a=t.stylesMap;if(!n)return null;var o=function(t,e){var n={};return null==e||e.forEach(function(e){var r=e.featureId,a=e.layerId,o=e.idProperty,i=e.geometry,l=t.getLayer(a);if(l){var s=l.source;n[s]||(n[s]={ids:new Set,fillIds:new Set,idProperty:o,layerId:a,hasFillGeometry:!1}),!i||"Polygon"!==i.type&&"MultiPolygon"!==i.type||(n[s].hasFillGeometry=!0,n[s].fillIds.add(r)),n[s].ids.add(r)}}),n}(n,r),i=[],l=new Set(Object.keys(o)),s=n._highlightedSources||new Set;return function(t,e,n){e.forEach(function(e){if(!n.has(e)){var r="highlight-".concat(e);["".concat(r,"-fill"),"".concat(r,"-line")].forEach(function(e){t.getLayer(e)&&t.setFilter(e,["==","id",""])})}})}(n,s,l),n._highlightedSources=l,l.forEach(function(t){var e=o[t],r=e.ids,l=e.fillIds,s=e.idProperty,u=e.layerId,c=e.hasFillGeometry,h=n.getLayer(u),f=h.sourceLayer,p=c?"fill":h.type,d="highlight-".concat(t),y=a[u],g=y.stroke,v=y.strokeWidth,m=y.fill,b=s?["get",s]:["id"],M=["in",b,["literal",I(r)]],w=["in",b,["literal",I(l)]],S={"line-color":g,"line-width":v};"fill"===p&&(z(n,"".concat(d,"-fill"),"fill",t,f,{"fill-color":m},w),z(n,"".concat(d,"-line"),"line",t,f,S,M)),"line"===p&&(n.getLayer("".concat(d,"-fill"))&&n.setFilter("".concat(d,"-fill"),["==","id",""]),z(n,"".concat(d,"-line"),"line",t,f,S,M)),i.push.apply(i,I(n.queryRenderedFeatures({layers:[u]}).filter(function(t){var e;return r.has(s?null===(e=t.properties)||void 0===e?void 0:e[s]:t.id)})))}),function(t,e){if(!e.length)return null;var n=new t;return e.forEach(function(t){var e=function(t){return"number"==typeof t[0]?n.extend(t):t.forEach(e)};e(t.geometry.coordinates)}),[n.getWest(),n.getSouth(),n.getEast(),n.getNorth()]}(e,i)}({LngLatBounds:this.maplibreModule.LngLatBounds,map:this.map,selectedFeatures:t,stylesMap:e})}},{key:"highlightNextLabel",value:function(t){var e;return(null===(e=this.labelNavigator)||void 0===e?void 0:e.highlightNextLabel(t))||null}},{key:"highlightLabelAtCenter",value:function(){var t;return(null===(t=this.labelNavigator)||void 0===t?void 0:t.highlightLabelAtCenter())||null}},{key:"clearHighlightedLabel",value:function(){var t;return(null===(t=this.labelNavigator)||void 0===t?void 0:t.clearHighlightedLabel())||null}},{key:"getCenter",value:function(){var t=this.map.getCenter();return[Number(t.lng.toFixed(7)),Number(t.lat.toFixed(7))]}},{key:"getZoom",value:function(){return Number(this.map.getZoom().toFixed(7))}},{key:"getBounds",value:function(){return this.map.getBounds().toArray().flat(1)}},{key:"getFeaturesAtPoint",value:function(t,e){return function(t,e){var n=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}).radius,r=void 0===n?10:n,a=[[e.x-r,e.y-r],[e.x+r,e.y+r]],o=t.queryRenderedFeatures(a);if(0===o.length)return[];var i=[];o.forEach(function(t){!1===i.includes(t.layer.id)&&i.push(t.layer.id)});for(var l=new Set,s=[],u=o.length-1;u>=0;u--){var c=o[u],h=void 0===c.id?JSON.stringify(c.properties):c.id;!1===l.has(h)&&(l.add(h),s.push(c))}var f=t.unproject(e),p=[f.lng,f.lat];return s.map(function(n){var r=0,a=n.geometry.type,o=function(t,e,n){var r=n.coordinates,a=n.type,o=1/0,i=function(e){return t.project(e)},l=function(t){for(var n=0;n<t.length-1;n++){var r=W(e,i(t[n]),i(t[n+1]));r<o&&(o=r)}};if("Point"===a){var s=i(r);o=Math.pow(e.x-s.x,2)+Math.pow(e.y-s.y,2)}else"LineString"===a||"MultiPoint"===a?"LineString"===a?l(r):r.forEach(function(t){var n=i(t),r=Math.pow(e.x-n.x,2)+Math.pow(e.y-n.y,2);r<o&&(o=r)}):"Polygon"===a||"MultiLineString"===a?r.forEach(l):"MultiPolygon"===a&&r.forEach(function(t){return t.forEach(l)});return o}(t,e,n.geometry);if(r+=1e6*i.indexOf(n.layer.id),a.includes("Polygon")){var l=("Polygon"===a?[n.geometry.coordinates]:n.geometry.coordinates).some(function(t){return function(t,e){for(var n=q(t,2),r=n[0],a=n[1],o=!1,i=0,l=e.length-1;i<e.length;l=i,i++){var s=q(e[i],2),u=s[0],c=s[1],h=q(e[l],2),f=h[0],p=h[1];c>a!=p>a&&r<(f-u)*(a-c)/(p-c)+u&&(o=!o)}return o}(p,t[0])});!0===l?r-=5e5:r+=1e5}return{f:n,score:r+=o}}).sort(function(t,e){return t.score-e.score}).map(function(t){return t.f})}(this.map,t,e)}},{key:"getAreaDimensions",value:function(){return function(t){var e,n,r,a;if(t&&"function"==typeof t.getWest)e=t.getWest(),n=t.getSouth(),r=t.getEast(),a=t.getNorth();else{if(!Array.isArray(t)||2!==t.length)return"";var o=g(t,2),i=g(o[0],2);e=i[0],n=i[1];var l=g(o[1],2);r=l[0],a=l[1]}var s=m([e,n],[r,n]),u=m([e,n],[e,a]),c=b(s),h=b(u);return"".concat(h," by ").concat(c)}((t=this.maplibreModule.LngLatBounds,e=this.map,n=e.getContainer().getBoundingClientRect(),r=n.width,a=n.height,o=e.getPadding(),i=[o.left,a-o.bottom],l=[r-o.right,o.top],new t(e.unproject(i),e.unproject(l))));var t,e,n,r,a,o,i,l}},{key:"getCardinalMove",value:function(t,e){return function(t,e){var n=g(t,2),r=n[0],a=n[1],o=g(e,2),i=o[0],l=o[1],s=l-a,u=i-r,c=[];if(Math.abs(s)>1e-4){var h=Math.round(m([r,a],[r,l]));c.push("".concat(s>0?"north":"south"," ").concat(b(h)))}if(Math.abs(u)>1e-4){var f=Math.round(m([r,a],[i,a]));c.push("".concat(u>0?"east":"west"," ").concat(b(f)))}return c.join(", ")}(t,e)}},{key:"getResolution",value:function(){return t=this.map.getCenter(),e=this.map.getZoom(),n=t.lat,r=Math.pow(2,e),40075016.686*Math.cos(n*Math.PI/180)/(512*r);var t,e,n,r}},{key:"mapToScreen",value:function(t){return this.map.project(t)}},{key:"screenToMap",value:function(t){var e=this.map.unproject([t.x,t.y]);return[e.lng,e.lat]}}],e&&tt(t.prototype,e),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,n,l}()}}]);
2
+ "use strict";(this.webpackChunkdefra_DefraMap=this.webpackChunkdefra_DefraMap||[]).push([[772],{662(t,e,r){r.r(e),r.d(e,{default:()=>at});var n=400,a=["showKeyboardHelp","selectControl","moveLarge","nudgeMap","zoomLarge","nudgeZoom","highlightLabelAtCenter","highlightNextLabel"];function o(t){var e=t.getCanvas();e.removeAttribute("role"),e.setAttribute("tabindex",-1),e.removeAttribute("aria-label"),e.style.display="block"}function i(t){var e=Event.prototype.preventDefault;Event.prototype.preventDefault=function(){if(("touchmove"===this.type||"touchstart"===this.type)&&!this.cancelable){var r=t.getCanvas();if(r&&(this.target===r||r.contains(this.target)))return}e.call(this)}}var l=function(t,e){var r=null,n=function(){for(var n=arguments.length,a=new Array(n),o=0;o<n;o++)a[o]=arguments[o];clearTimeout(r),r=setTimeout(function(){t.apply(void 0,a)},e)};return n.cancel=function(){r&&(clearTimeout(r),r=null)},n};function s(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}function u(t){var e=t.map,r=t.events,n=t.eventBus,a=t.getCenter,o=t.getZoom,i=t.getBounds,u=t.getResolution,c=[],h=[],f=function(){var t=o();return{center:a(),bounds:i(),resolution:u(),zoom:t,isAtMaxZoom:e.getMaxZoom()<=t,isAtMinZoom:e.getMinZoom()>=t}},p=function(t,e){return n.emit(t,e)},y=function(){return p(r.MAP_LOADED)};e.on("load",y),c.push(["load",y]),e.once("idle",function(){return p(r.MAP_FIRST_IDLE,f())});var d=function(){return p(r.MAP_MOVE_START)};e.on("movestart",d),c.push(["movestart",d]);var g=l(function(){p(r.MAP_MOVE_END,f())},500);e.on("moveend",g),c.push(["moveend",g]),h.push(g);var m,v,b=(m=function(){p(r.MAP_MOVE,f())},v=0,function(){var t=Date.now();t-v>=10&&(v=t,m.apply(void 0,arguments))});e.on("zoom",b),c.push(["zoom",b]),h.push(b);var M=function(){return p(r.MAP_RENDER)};e.on("render",M),c.push(["render",M]);var w=l(function(){p(r.MAP_DATA_CHANGE,f())},500);e.on("styledata",w),c.push(["styledata",w]),h.push(w);var S=function(){return p(r.MAP_STYLE_CHANGE)};e.on("style.load",S),c.push(["style.load",S]);var P=function(t){return p(r.MAP_CLICK,{point:t.point,coords:[t.lngLat.lng,t.lngLat.lat]})};return e.on("click",P),c.push(["click",P]),{remove:function(){h.forEach(function(t){return t.cancel()}),c.forEach(function(t){var r,n,a=(n=2,function(t){if(Array.isArray(t))return t}(r=t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,a,o,i,l=[],s=!0,u=!1;try{if(o=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;s=!1}else for(;!(s=(n=o.call(r)).done)&&(l.push(n.value),l.length!==e);s=!0);}catch(t){u=!0,a=t}finally{try{if(!s&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(u)throw a}}return l}}(r,n)||function(t,e){if(t){if("string"==typeof t)return s(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?s(t,e):void 0}}(r,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),o=a[0],i=a[1];return e.off(o,i)})}}}function c(t){var e=t.map,r=t.events,n=t.eventBus,a=function(t){e.once("style.load",function(){n.emit(r.MAP_STYLE_CHANGE,{mapStyleId:t.id})}),e.setStyle(t.url,{diff:!1})},o=function(t){e.setPixelRatio(t)};return n.on(r.MAP_SET_STYLE,a),n.on(r.MAP_SET_PIXEL_RATIO,o),{remove:function(){n.off(r.MAP_SET_STYLE,a),n.off(r.MAP_SET_PIXEL_RATIO,o)}}}let h=" ";class f{static get separator(){return h}static set separator(t){h=t}static parse(t){if(!isNaN(parseFloat(t))&&isFinite(t))return Number(t);const e=String(t).trim().replace(/^-/,"").replace(/[NSEW]$/i,"").split(/[^0-9.,]+/);if(""==e[e.length-1]&&e.splice(e.length-1),""==e)return NaN;let r=null;switch(e.length){case 3:r=e[0]/1+e[1]/60+e[2]/3600;break;case 2:r=e[0]/1+e[1]/60;break;case 1:r=e[0];break;default:return NaN}return/^-|[WS]$/i.test(t.trim())&&(r=-r),Number(r)}static toDms(t,e="d",r=void 0){if(isNaN(t))return null;if("string"==typeof t&&""==t.trim())return null;if("boolean"==typeof t)return null;if(t==1/0)return null;if(null==t)return null;if(void 0===r)switch(e){case"d":case"deg":r=4;break;case"dm":case"deg+min":r=2;break;case"dms":case"deg+min+sec":r=0;break;default:e="d",r=4}t=Math.abs(t);let n=null,a=null,o=null,i=null;switch(e){default:case"d":case"deg":a=t.toFixed(r),a<100&&(a="0"+a),a<10&&(a="0"+a),n=a+"°";break;case"dm":case"deg+min":a=Math.floor(t),o=(60*t%60).toFixed(r),60==o&&(o=(0).toFixed(r),a++),a=("000"+a).slice(-3),o<10&&(o="0"+o),n=a+"°"+f.separator+o+"′";break;case"dms":case"deg+min+sec":a=Math.floor(t),o=Math.floor(3600*t/60)%60,i=(3600*t%60).toFixed(r),60==i&&(i=(0).toFixed(r),o++),60==o&&(o=0,a++),a=("000"+a).slice(-3),o=("00"+o).slice(-2),i<10&&(i="0"+i),n=a+"°"+f.separator+o+"′"+f.separator+i+"″"}return n}static toLat(t,e,r){const n=f.toDms(f.wrap90(t),e,r);return null===n?"–":n.slice(1)+f.separator+(t<0?"S":"N")}static toLon(t,e,r){const n=f.toDms(f.wrap180(t),e,r);return null===n?"–":n+f.separator+(t<0?"W":"E")}static toBrng(t,e,r){const n=f.toDms(f.wrap360(t),e,r);return null===n?"–":n.replace("360","0")}static fromLocale(t){const e=123456.789.toLocaleString(),r={thousands:e.slice(3,4),decimal:e.slice(7,8)};return t.replace(r.thousands,"⁜").replace(r.decimal,".").replace("⁜",",")}static toLocale(t){const e=123456.789.toLocaleString(),r={thousands:e.slice(3,4),decimal:e.slice(7,8)};return t.replace(/,([0-9])/,"⁜$1").replace(".",r.decimal).replace("⁜",r.thousands)}static compassPoint(t,e=3){if(![1,2,3].includes(Number(e)))throw new RangeError(`invalid precision ‘${e}’`);t=f.wrap360(t);const r=4*2**(e-1);return["N","NNE","NE","ENE","E","ESE","SE","SSE","S","SSW","SW","WSW","W","WNW","NW","NNW"][Math.round(t*r/360)%r*16/r]}static wrap90(t){if(-90<=t&&t<=90)return t;const e=t;return 1*Math.abs(((e-90)%360+360)%360-180)-90}static wrap180(t){if(-180<=t&&t<=180)return t;const e=360;return((360*t/e-180)%e+e)%e-180}static wrap360(t){if(0<=t&&t<360)return t;const e=360;return(360*t/e%e+e)%e}}Number.prototype.toRadians=function(){return this*Math.PI/180},Number.prototype.toDegrees=function(){return 180*this/Math.PI};const p=f,y=Math.PI;class d{constructor(t,e){if(isNaN(t))throw new TypeError(`invalid lat ‘${t}’`);if(isNaN(e))throw new TypeError(`invalid lon ‘${e}’`);this._lat=p.wrap90(Number(t)),this._lon=p.wrap180(Number(e))}get lat(){return this._lat}get latitude(){return this._lat}set lat(t){if(this._lat=isNaN(t)?p.wrap90(p.parse(t)):p.wrap90(Number(t)),isNaN(this._lat))throw new TypeError(`invalid lat ‘${t}’`)}set latitude(t){if(this._lat=isNaN(t)?p.wrap90(p.parse(t)):p.wrap90(Number(t)),isNaN(this._lat))throw new TypeError(`invalid latitude ‘${t}’`)}get lon(){return this._lon}get lng(){return this._lon}get longitude(){return this._lon}set lon(t){if(this._lon=isNaN(t)?p.wrap180(p.parse(t)):p.wrap180(Number(t)),isNaN(this._lon))throw new TypeError(`invalid lon ‘${t}’`)}set lng(t){if(this._lon=isNaN(t)?p.wrap180(p.parse(t)):p.wrap180(Number(t)),isNaN(this._lon))throw new TypeError(`invalid lng ‘${t}’`)}set longitude(t){if(this._lon=isNaN(t)?p.wrap180(p.parse(t)):p.wrap180(Number(t)),isNaN(this._lon))throw new TypeError(`invalid longitude ‘${t}’`)}static get metresToKm(){return.001}static get metresToMiles(){return 1/1609.344}static get metresToNauticalMiles(){return 1/1852}static parse(...t){if(0==t.length)throw new TypeError("invalid (empty) point");if(null===t[0]||null===t[1])throw new TypeError("invalid (null) point");let e,r;if(2==t.length&&([e,r]=t,e=p.wrap90(p.parse(e)),r=p.wrap180(p.parse(r)),isNaN(e)||isNaN(r)))throw new TypeError(`invalid point ‘${t.toString()}’`);if(1==t.length&&"string"==typeof t[0]&&([e,r]=t[0].split(","),e=p.wrap90(p.parse(e)),r=p.wrap180(p.parse(r)),isNaN(e)||isNaN(r)))throw new TypeError(`invalid point ‘${t[0]}’`);if(1==t.length&&"object"==typeof t[0]){const n=t[0];if("Point"==n.type&&Array.isArray(n.coordinates)?[r,e]=n.coordinates:(null!=n.latitude&&(e=n.latitude),null!=n.lat&&(e=n.lat),null!=n.longitude&&(r=n.longitude),null!=n.lng&&(r=n.lng),null!=n.lon&&(r=n.lon),e=p.wrap90(p.parse(e)),r=p.wrap180(p.parse(r))),isNaN(e)||isNaN(r))throw new TypeError(`invalid point ‘${JSON.stringify(t[0])}’`)}if(isNaN(e)||isNaN(r))throw new TypeError(`invalid point ‘${t.toString()}’`);return new d(e,r)}distanceTo(t,e=6371e3){if(t instanceof d||(t=d.parse(t)),isNaN(e))throw new TypeError(`invalid radius ‘${e}’`);const r=e,n=this.lat.toRadians(),a=this.lon.toRadians(),o=t.lat.toRadians(),i=o-n,l=t.lon.toRadians()-a,s=Math.sin(i/2)*Math.sin(i/2)+Math.cos(n)*Math.cos(o)*Math.sin(l/2)*Math.sin(l/2);return r*(2*Math.atan2(Math.sqrt(s),Math.sqrt(1-s)))}initialBearingTo(t){if(t instanceof d||(t=d.parse(t)),this.equals(t))return NaN;const e=this.lat.toRadians(),r=t.lat.toRadians(),n=(t.lon-this.lon).toRadians(),a=Math.cos(e)*Math.sin(r)-Math.sin(e)*Math.cos(r)*Math.cos(n),o=Math.sin(n)*Math.cos(r),i=Math.atan2(o,a).toDegrees();return p.wrap360(i)}finalBearingTo(t){t instanceof d||(t=d.parse(t));const e=t.initialBearingTo(this)+180;return p.wrap360(e)}midpointTo(t){t instanceof d||(t=d.parse(t));const e=this.lat.toRadians(),r=this.lon.toRadians(),n=t.lat.toRadians(),a=(t.lon-this.lon).toRadians(),o=Math.cos(e),i=Math.sin(e),l={x:o+Math.cos(n)*Math.cos(a),y:0+Math.cos(n)*Math.sin(a),z:i+Math.sin(n)},s=Math.atan2(l.z,Math.sqrt(l.x*l.x+l.y*l.y)),u=r+Math.atan2(l.y,l.x),c=s.toDegrees(),h=u.toDegrees();return new d(c,h)}intermediatePointTo(t,e){if(t instanceof d||(t=d.parse(t)),this.equals(t))return new d(this.lat,this.lon);const r=this.lat.toRadians(),n=this.lon.toRadians(),a=t.lat.toRadians(),o=t.lon.toRadians(),i=a-r,l=o-n,s=Math.sin(i/2)*Math.sin(i/2)+Math.cos(r)*Math.cos(a)*Math.sin(l/2)*Math.sin(l/2),u=2*Math.atan2(Math.sqrt(s),Math.sqrt(1-s)),c=Math.sin((1-e)*u)/Math.sin(u),h=Math.sin(e*u)/Math.sin(u),f=c*Math.cos(r)*Math.cos(n)+h*Math.cos(a)*Math.cos(o),p=c*Math.cos(r)*Math.sin(n)+h*Math.cos(a)*Math.sin(o),y=c*Math.sin(r)+h*Math.sin(a),g=Math.atan2(y,Math.sqrt(f*f+p*p)),m=Math.atan2(p,f),v=g.toDegrees(),b=m.toDegrees();return new d(v,b)}destinationPoint(t,e,r=6371e3){const n=t/r,a=Number(e).toRadians(),o=this.lat.toRadians(),i=this.lon.toRadians(),l=Math.sin(o)*Math.cos(n)+Math.cos(o)*Math.sin(n)*Math.cos(a),s=Math.asin(l),u=Math.sin(a)*Math.sin(n)*Math.cos(o),c=Math.cos(n)-Math.sin(o)*l,h=i+Math.atan2(u,c),f=s.toDegrees(),p=h.toDegrees();return new d(f,p)}static intersection(t,e,r,n){if(t instanceof d||(t=d.parse(t)),r instanceof d||(r=d.parse(r)),isNaN(e))throw new TypeError(`invalid brng1 ‘${e}’`);if(isNaN(n))throw new TypeError(`invalid brng2 ‘${n}’`);const a=t.lat.toRadians(),o=t.lon.toRadians(),i=r.lat.toRadians(),l=r.lon.toRadians(),s=Number(e).toRadians(),u=Number(n).toRadians(),c=i-a,h=l-o,f=2*Math.asin(Math.sqrt(Math.sin(c/2)*Math.sin(c/2)+Math.cos(a)*Math.cos(i)*Math.sin(h/2)*Math.sin(h/2)));if(Math.abs(f)<Number.EPSILON)return new d(t.lat,t.lon);const p=(Math.sin(i)-Math.sin(a)*Math.cos(f))/(Math.sin(f)*Math.cos(a)),g=(Math.sin(a)-Math.sin(i)*Math.cos(f))/(Math.sin(f)*Math.cos(i)),m=Math.acos(Math.min(Math.max(p,-1),1)),v=Math.acos(Math.min(Math.max(g,-1),1)),b=s-(Math.sin(l-o)>0?m:2*y-m),M=(Math.sin(l-o)>0?2*y-v:v)-u;if(0==Math.sin(b)&&0==Math.sin(M))return null;if(Math.sin(b)*Math.sin(M)<0)return null;const w=-Math.cos(b)*Math.cos(M)+Math.sin(b)*Math.sin(M)*Math.cos(f),S=Math.atan2(Math.sin(f)*Math.sin(b)*Math.sin(M),Math.cos(M)+Math.cos(b)*w),P=Math.asin(Math.min(Math.max(Math.sin(a)*Math.cos(S)+Math.cos(a)*Math.sin(S)*Math.cos(s),-1),1)),x=o+Math.atan2(Math.sin(s)*Math.sin(S)*Math.cos(a),Math.cos(S)-Math.sin(a)*Math.sin(P)),N=P.toDegrees(),E=x.toDegrees();return new d(N,E)}crossTrackDistanceTo(t,e,r=6371e3){t instanceof d||(t=d.parse(t)),e instanceof d||(e=d.parse(e));const n=r;if(this.equals(t))return 0;const a=t.distanceTo(this,n)/n,o=t.initialBearingTo(this).toRadians(),i=t.initialBearingTo(e).toRadians();return Math.asin(Math.sin(a)*Math.sin(o-i))*n}alongTrackDistanceTo(t,e,r=6371e3){t instanceof d||(t=d.parse(t)),e instanceof d||(e=d.parse(e));const n=r;if(this.equals(t))return 0;const a=t.distanceTo(this,n)/n,o=t.initialBearingTo(this).toRadians(),i=t.initialBearingTo(e).toRadians(),l=Math.asin(Math.sin(a)*Math.sin(o-i));return Math.acos(Math.cos(a)/Math.abs(Math.cos(l)))*Math.sign(Math.cos(i-o))*n}maxLatitude(t){const e=Number(t).toRadians(),r=this.lat.toRadians();return Math.acos(Math.abs(Math.sin(e)*Math.cos(r))).toDegrees()}static crossingParallels(t,e,r){if(t.equals(e))return null;const n=Number(r).toRadians(),a=t.lat.toRadians(),o=t.lon.toRadians(),i=e.lat.toRadians(),l=e.lon.toRadians()-o,s=Math.sin(a)*Math.cos(i)*Math.cos(n)*Math.sin(l),u=Math.sin(a)*Math.cos(i)*Math.cos(n)*Math.cos(l)-Math.cos(a)*Math.sin(i)*Math.cos(n),c=Math.cos(a)*Math.cos(i)*Math.sin(n)*Math.sin(l);if(c*c>s*s+u*u)return null;const h=Math.atan2(-u,s),f=Math.acos(c/Math.sqrt(s*s+u*u)),y=o+h+f,d=(o+h-f).toDegrees(),g=y.toDegrees();return{lon1:p.wrap180(d),lon2:p.wrap180(g)}}rhumbDistanceTo(t,e=6371e3){t instanceof d||(t=d.parse(t));const r=e,n=this.lat.toRadians(),a=t.lat.toRadians(),o=a-n;let i=Math.abs(t.lon-this.lon).toRadians();Math.abs(i)>y&&(i=i>0?-(2*y-i):2*y+i);const l=Math.log(Math.tan(a/2+y/4)/Math.tan(n/2+y/4)),s=Math.abs(l)>1e-11?o/l:Math.cos(n);return Math.sqrt(o*o+s*s*i*i)*r}rhumbBearingTo(t){if(t instanceof d||(t=d.parse(t)),this.equals(t))return NaN;const e=this.lat.toRadians(),r=t.lat.toRadians();let n=(t.lon-this.lon).toRadians();Math.abs(n)>y&&(n=n>0?-(2*y-n):2*y+n);const a=Math.log(Math.tan(r/2+y/4)/Math.tan(e/2+y/4)),o=Math.atan2(n,a).toDegrees();return p.wrap360(o)}rhumbDestinationPoint(t,e,r=6371e3){const n=this.lat.toRadians(),a=this.lon.toRadians(),o=Number(e).toRadians(),i=t/r,l=i*Math.cos(o);let s=n+l;Math.abs(s)>y/2&&(s=s>0?y-s:-y-s);const u=Math.log(Math.tan(s/2+y/4)/Math.tan(n/2+y/4)),c=Math.abs(u)>1e-11?l/u:Math.cos(n),h=a+i*Math.sin(o)/c,f=s.toDegrees(),p=h.toDegrees();return new d(f,p)}rhumbMidpointTo(t){t instanceof d||(t=d.parse(t));const e=this.lat.toRadians();let r=this.lon.toRadians();const n=t.lat.toRadians(),a=t.lon.toRadians();Math.abs(a-r)>y&&(r+=2*y);const o=(e+n)/2,i=Math.tan(y/4+e/2),l=Math.tan(y/4+n/2),s=Math.tan(y/4+o/2);let u=((a-r)*Math.log(s)+r*Math.log(l)-a*Math.log(i))/Math.log(l/i);isFinite(u)||(u=(r+a)/2);const c=o.toDegrees(),h=u.toDegrees();return new d(c,h)}static areaOf(t,e=6371e3){const r=e,n=t[0].equals(t[t.length-1]);n||t.push(t[0]);const a=t.length-1;let o=0;for(let e=0;e<a;e++){const r=t[e].lat.toRadians(),n=t[e+1].lat.toRadians(),a=(t[e+1].lon-t[e].lon).toRadians();o+=2*Math.atan2(Math.tan(a/2)*(Math.tan(r/2)+Math.tan(n/2)),1+Math.tan(r/2)*Math.tan(n/2))}(function(t){let e=0,r=t[0].initialBearingTo(t[1]);for(let n=0;n<t.length-1;n++){const a=t[n].initialBearingTo(t[n+1]),o=t[n].finalBearingTo(t[n+1]);e+=(a-r+540)%360-180,e+=(o-a+540)%360-180,r=o}return e+=(t[0].initialBearingTo(t[1])-r+540)%360-180,Math.abs(e)<90})(t)&&(o=Math.abs(o)-2*y);const i=Math.abs(o*r*r);return n||t.pop(),i}equals(t){return t instanceof d||(t=d.parse(t)),!(Math.abs(this.lat-t.lat)>Number.EPSILON||Math.abs(this.lon-t.lon)>Number.EPSILON)}toGeoJSON(){return{type:"Point",coordinates:[this.lon,this.lat]}}toString(t="d",e=void 0){if(!["d","dm","dms","n"].includes(t))throw new RangeError(`invalid format ‘${t}’`);return"n"==t?(null==e&&(e=4),`${this.lat.toFixed(e)},${this.lon.toFixed(e)}`):`${p.toLat(this.lat,t,e)}, ${p.toLon(this.lon,t,e)}`}}function g(t,e,r){if(null!==t)for(var n,a,o,i,l,s,u,c,h=0,f=0,p=t.type,y="FeatureCollection"===p,d="Feature"===p,m=y?t.features.length:1,v=0;v<m;v++){l=(c=!!(u=y?t.features[v].geometry:d?t.geometry:t)&&"GeometryCollection"===u.type)?u.geometries.length:1;for(var b=0;b<l;b++){var M=0,w=0;if(null!==(i=c?u.geometries[b]:u)){s=i.coordinates;var S=i.type;switch(h=!r||"Polygon"!==S&&"MultiPolygon"!==S?0:1,S){case null:break;case"Point":if(!1===e(s,f,v,M,w))return!1;f++,M++;break;case"LineString":case"MultiPoint":for(n=0;n<s.length;n++){if(!1===e(s[n],f,v,M,w))return!1;f++,"MultiPoint"===S&&M++}"LineString"===S&&M++;break;case"Polygon":case"MultiLineString":for(n=0;n<s.length;n++){for(a=0;a<s[n].length-h;a++){if(!1===e(s[n][a],f,v,M,w))return!1;f++}"MultiLineString"===S&&M++,"Polygon"===S&&w++}"Polygon"===S&&M++;break;case"MultiPolygon":for(n=0;n<s.length;n++){for(w=0,a=0;a<s[n].length;a++){for(o=0;o<s[n][a].length-h;o++){if(!1===e(s[n][a][o],f,v,M,w))return!1;f++}w++}M++}break;case"GeometryCollection":for(n=0;n<i.geometries.length;n++)if(!1===g(i.geometries[n],e,r))return!1;break;default:throw new Error("Unknown Geometry Type")}}}}}var m=function(t,e={}){if(null!=t.bbox&&!0!==e.recompute)return t.bbox;const r=[1/0,1/0,-1/0,-1/0];return g(t,t=>{r[0]>t[0]&&(r[0]=t[0]),r[1]>t[1]&&(r[1]=t[1]),r[2]<t[0]&&(r[2]=t[0]),r[3]<t[1]&&(r[3]=t[1])}),r};function v(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,a,o,i,l=[],s=!0,u=!1;try{if(o=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;s=!1}else for(;!(s=(n=o.call(r)).done)&&(l.push(n.value),l.length!==e);s=!0);}catch(t){u=!0,a=t}finally{try{if(!s&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(u)throw a}}return l}}(t,e)||function(t,e){if(t){if("string"==typeof t)return b(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?b(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function b(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}var M=function(t,e){var r=v(t,2),n=r[0],a=r[1],o=v(e,2),i=o[0],l=o[1],s=new d(a,n),u=new d(l,i);return s.distanceTo(u)},w=function(t){var e=t/1609.344;if(e<.5)return"".concat(Math.round(t),"m");if(e<10){var r=Number.parseFloat(e.toFixed(1)),n=1===r?"mile":"miles";return"".concat(r," ").concat(n)}var a=Math.round(e);return"".concat(a," miles")};function S(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,a,o,i,l=[],s=!0,u=!1;try{if(o=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;s=!1}else for(;!(s=(n=o.call(r)).done)&&(l.push(n.value),l.length!==e);s=!0);}catch(t){u=!0,a=t}finally{try{if(!s&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(u)throw a}}return l}}(t,e)||function(t,e){if(t){if("string"==typeof t)return P(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?P(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function P(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}function x(t){return x="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},x(t)}function N(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function E(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?N(Object(r),!0).forEach(function(e){O(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):N(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function O(t,e,r){return(e=function(t){var e=function(t){if("object"!=x(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,"string");if("object"!=x(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==x(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function A(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}var j="highlighted-label";function T(t,e){if("number"==typeof t)return t;if(!Array.isArray(t)||"interpolate"!==t[0])return function(t,e){var r=t.stops;if(r.length<2)return r.length>0?r[0][1]:0;for(var n=r[0],a=r[r.length-1],o=1;o<r.length;o++){var i=r[o];if(i[0]>e){a=i,n=r[o-1];break}n=r[o-1],a=i}var l=S(n,2),s=l[0],u=l[1],c=S(a,2),h=c[0],f=c[1];return e<=s?u:e>=h?f:u+(e-s)/(h-s)*(f-u)}(t,e);var r,n=function(t){if(Array.isArray(t))return t}(r=t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(r)||function(t,e){if(t){if("string"==typeof t)return A(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?A(t,e):void 0}}(r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),a=n[2],o=A(n).slice(3);if("zoom"!==a[0])throw new Error("Only zoom-based expressions supported");for(var i=0;i<o.length-2;i+=2){var l=o[i],s=o[i+1],u=o[i+2],c=o[i+3];if(e<=l)return s;if(e<=u)return s+(e-l)/(u-l)*(c-s)}return o[o.length-1]}function L(t,e){if(e.highlightLayerId&&t.getLayer(e.highlightLayerId)){try{t.removeLayer(e.highlightLayerId)}catch(t){}e.highlightLayerId=null,e.highlightedExpr=null}}function R(t,e,r){var n,a,o,i;if(null!=e&&null!==(n=e.feature)&&void 0!==n&&n.layer){L(t,r);var l=e.feature,s=e.layer;r.highlightLayerId="highlight-".concat(s.id);var u=l.id,c=l.type,h=l.properties,f=l.geometry;t.getSource(j).setData({id:u,type:c,properties:h,geometry:f}),r.highlightedExpr=s.layout["text-size"];var p=t.getZoom(),y=(a=s,o=1.5*T(r.highlightedExpr,p),i=r.isDarkStyle?{text:"#ffffff",halo:"#000000"}:{text:"#000000",halo:"#ffffff"},{id:"highlight-".concat(a.id),type:a.type,source:j,layout:E(E({},a.layout),{},{"text-size":o,"text-allow-overlap":!0,"text-ignore-placement":!0,"text-max-angle":90}),paint:E(E({},a.paint),{},{"text-color":i.text,"text-halo-color":i.halo,"text-halo-width":3,"text-halo-blur":1,"text-opacity":1})});t.addLayer(y),t.moveLayer(r.highlightLayerId)}}function k(t){t.getSource(j)||t.addSource(j,{type:"geojson",data:{type:"FeatureCollection",features:[]}})}function D(t){t.getStyle().layers.filter(function(t){var e;return"line"===(null===(e=t.layout)||void 0===e?void 0:e["symbol-placement"])}).forEach(function(e){return t.setLayoutProperty(e.id,"symbol-placement","line-center")})}function I(t,e,r,n){var a={isDarkStyle:"dark"===e,labels:[],currentPixel:null,highlightLayerId:null,highlightedExpr:null};function o(){var e=t.getStyle().layers.filter(function(t){return"symbol"===t.type}),r=t.queryRenderedFeatures({layers:e.map(function(t){return t.id})});a.labels=function(t,e,r){return e.flatMap(function(e){var n,a,o,i,l="string"==typeof(a=null===(n=e.layout)||void 0===n?void 0:n["text-field"])?null===(o=/^{(.+)}$/.exec(a))||void 0===o?void 0:o[1]:Array.isArray(a)?null===(i=a.find(function(t){return Array.isArray(t)&&"get"===t[0]}))||void 0===i?void 0:i[1]:null;return l?r.filter(function(t){var r;return t.layer.id===e.id&&(null===(r=t.properties)||void 0===r?void 0:r[l])}).map(function(r){return function(t,e,r,n){var a=function(t){var e=t.type,r=t.coordinates;if("Point"===e)return r;if("MultiPoint"===e)return r[0];if(e.includes("LineString")){var n="LineString"===e?r:r[0];return[(n[0][0]+n[n.length-1][0])/2,(n[0][1]+n[n.length-1][1])/2]}if(e.includes("Polygon")){var a="Polygon"===e?r[0]:r[0][0],o=a.reduce(function(t,e){return[t[0]+e[0],t[1]+e[1]]},[0,0]);return[o[0]/a.length,o[1]/a.length]}return null}(t.geometry);if(!a)return null;var o=n.project({lng:a[0],lat:a[1]});return{text:t.properties[r],x:o.x,y:o.y,feature:t,layer:e}}(r,e,l,t)}).filter(Boolean):[]})}(t,e,r)}function i(){if(o(),!a.labels.length)return null;var e=t.project(t.getCenter()),r=function(t,e){var r;return null===(r=t.reduce(function(t,r){var n=Math.pow(r.x-e.x,2)+Math.pow(r.y-e.y,2);return!t||n<t.dist?{label:r,dist:n}:t},null))||void 0===r?void 0:r.label}(a.labels,e);return a.currentPixel={x:r.x,y:r.y},R(t,r,a),"".concat(r.text," (").concat(r.layer.id,")")}return D(t),k(t),null==n||n.on(r.MAP_SET_STYLE,function(e){t.once("styledata",function(){return t.once("idle",function(){D(t),k(t),a.isDarkStyle="dark"===(null==e?void 0:e.mapColorScheme)})})}),t.on("zoom",function(){if(a.highlightLayerId&&a.highlightedExpr){var e=T(a.highlightedExpr,t.getZoom());t.setLayoutProperty(a.highlightLayerId,"text-size",1.5*e)}}),function(t){t.getStyle().layers.filter(function(t){return"symbol"===t.type}).forEach(function(e){t.setPaintProperty(e.id,"text-opacity",["case",["boolean",["feature-state","highlighted"],!1],0,1])})}(t),{refreshLabels:o,highlightNextLabel:function(e){if(o(),!a.labels.length)return null;if(!a.currentPixel)return i();var r=function(t,e){if(!e.currentPixel)return null;var r=e.labels.map(function(t,e){return{pixel:[t.x,t.y],index:e}}).filter(function(t){return t.pixel[0]!==e.currentPixel.x||t.pixel[1]!==e.currentPixel.y});if(!r.length)return null;var n=r.map(function(t){return t.pixel}),a=function(t,e,r){var n=v(e,2),a=n[0],o=n[1],i=r.filter(function(e){var r=v(e,2),n=r[0],i=r[1];return(n!==a||i!==o)&&function(t,e,r){switch(t){case"ArrowUp":return r<0&&Math.abs(r)>=Math.abs(e);case"ArrowDown":return r>0&&Math.abs(r)>=Math.abs(e);case"ArrowLeft":return e<0&&Math.abs(e)>Math.abs(r);case"ArrowRight":return e>0&&Math.abs(e)>Math.abs(r);default:return!1}}(t,n-a,i-o)});if(!i.length)return r.findIndex(function(t){return t[0]===a&&t[1]===o});var l=-1,s=1/0;return i.forEach(function(t){var e=t[0]-a,n=t[1]-o,i=e*e+n*n;i<s&&(s=i,l=r.indexOf(t))}),l}(t,[e.currentPixel.x,e.currentPixel.y],n);return(null==a||a<0||a>=r.length)&&(a=0),e.labels[r[a].index]}(e,a);return r?(a.currentPixel={x:r.x,y:r.y},R(t,r,a),"".concat(r.text," (").concat(r.layer.id,")")):null},highlightLabelAtCenter:i,clearHighlightedLabel:function(){return L(t,a)}}}function _(t){return _="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},_(t)}function C(t){return function(t){if(Array.isArray(t))return F(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||B(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function B(t,e){if(t){if("string"==typeof t)return F(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?F(t,e):void 0}}function F(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}function $(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function z(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?$(Object(r),!0).forEach(function(e){q(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):$(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function q(t,e,r){return(e=function(t){var e=function(t){if("object"!=_(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,"string");if("object"!=_(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==_(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var Z=function(t,e,r,n,a,o,i){t.getLayer(e)||t.addLayer(z(z({id:e,type:r,source:n},a&&{"source-layer":a}),{},{paint:o})),Object.entries(o).forEach(function(r){var n,a,o=(a=2,function(t){if(Array.isArray(t))return t}(n=r)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,a,o,i,l=[],s=!0,u=!1;try{if(o=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;s=!1}else for(;!(s=(n=o.call(r)).done)&&(l.push(n.value),l.length!==e);s=!0);}catch(t){u=!0,a=t}finally{try{if(!s&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(u)throw a}}return l}}(n,a)||B(n,a)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),i=o[0],l=o[1];t.setPaintProperty(e,i,l)}),t.setFilter(e,i)};function G(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,a,o,i,l=[],s=!0,u=!1;try{if(o=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;s=!1}else for(;!(s=(n=o.call(r)).done)&&(l.push(n.value),l.length!==e);s=!0);}catch(t){u=!0,a=t}finally{try{if(!s&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(u)throw a}}return l}}(t,e)||function(t,e){if(t){if("string"==typeof t)return W(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?W(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function W(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}var H=function(t,e,r){var n=Math.pow(e.x-r.x,2)+Math.pow(e.y-r.y,2);if(0===n)return Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2);var a=((t.x-e.x)*(r.x-e.x)+(t.y-e.y)*(r.y-e.y))/n;return a=Math.max(0,Math.min(1,a)),Math.pow(t.x-(e.x+a*(r.x-e.x)),2)+Math.pow(t.y-(e.y+a*(r.y-e.y)),2)},U=["container","padding","mapStyle","mapSize","center","zoom","bounds","pixelRatio"];function Y(t){return Y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Y(t)}function V(){var t,e,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",a=r.toStringTag||"@@toStringTag";function o(r,n,a,o){var s=n&&n.prototype instanceof l?n:l,u=Object.create(s.prototype);return J(u,"_invoke",function(r,n,a){var o,l,s,u=0,c=a||[],h=!1,f={p:0,n:0,v:t,a:p,f:p.bind(t,4),d:function(e,r){return o=e,l=0,s=t,f.n=r,i}};function p(r,n){for(l=r,s=n,e=0;!h&&u&&!a&&e<c.length;e++){var a,o=c[e],p=f.p,y=o[2];r>3?(a=y===n)&&(s=o[(l=o[4])?5:(l=3,3)],o[4]=o[5]=t):o[0]<=p&&((a=r<2&&p<o[1])?(l=0,f.v=n,f.n=o[1]):p<y&&(a=r<3||o[0]>n||n>y)&&(o[4]=r,o[5]=n,f.n=y,l=0))}if(a||r>1)return i;throw h=!0,n}return function(a,c,y){if(u>1)throw TypeError("Generator is already running");for(h&&1===c&&p(c,y),l=c,s=y;(e=l<2?t:s)||!h;){o||(l?l<3?(l>1&&(f.n=-1),p(l,s)):f.n=s:f.v=s);try{if(u=2,o){if(l||(a="next"),e=o[a]){if(!(e=e.call(o,s)))throw TypeError("iterator result is not an object");if(!e.done)return e;s=e.value,l<2&&(l=0)}else 1===l&&(e=o.return)&&e.call(o),l<2&&(s=TypeError("The iterator does not provide a '"+a+"' method"),l=1);o=t}else if((e=(h=f.n<0)?s:r.call(n,f))!==i)break}catch(e){o=t,l=1,s=e}finally{u=1}}return{value:e,done:h}}}(r,a,o),!0),u}var i={};function l(){}function s(){}function u(){}e=Object.getPrototypeOf;var c=[][n]?e(e([][n]())):(J(e={},n,function(){return this}),e),h=u.prototype=l.prototype=Object.create(c);function f(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,u):(t.__proto__=u,J(t,a,"GeneratorFunction")),t.prototype=Object.create(h),t}return s.prototype=u,J(h,"constructor",u),J(u,"constructor",s),s.displayName="GeneratorFunction",J(u,a,"GeneratorFunction"),J(h),J(h,a,"Generator"),J(h,n,function(){return this}),J(h,"toString",function(){return"[object Generator]"}),(V=function(){return{w:o,m:f}})()}function J(t,e,r,n){var a=Object.defineProperty;try{a({},"",{})}catch(t){a=0}J=function(t,e,r,n){function o(e,r){J(t,e,function(t){return this._invoke(e,r,t)})}e?a?a(t,e,{value:r,enumerable:!n,configurable:!n,writable:!n}):t[e]=r:(o("next",0),o("throw",1),o("return",2))},J(t,e,r,n)}function K(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function X(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?K(Object(r),!0).forEach(function(e){Q(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):K(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function Q(t,e,r){return(e=nt(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function tt(t,e){if(null==t)return{};var r,n,a=function(t,e){if(null==t)return{};var r={};for(var n in t)if({}.hasOwnProperty.call(t,n)){if(-1!==e.indexOf(n))continue;r[n]=t[n]}return r}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(n=0;n<o.length;n++)r=o[n],-1===e.indexOf(r)&&{}.propertyIsEnumerable.call(t,r)&&(a[r]=t[r])}return a}function et(t,e,r,n,a,o,i){try{var l=t[o](i),s=l.value}catch(t){return void r(t)}l.done?e(s):Promise.resolve(s).then(n,a)}function rt(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,nt(n.key),n)}}function nt(t){var e=function(t){if("object"!=Y(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,"string");if("object"!=Y(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==Y(e)?e:e+""}var at=function(){return t=function t(e){var r=e.mapFramework,n=e.mapProviderConfig,o=void 0===n?{}:n,i=e.events,l=e.eventBus;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.maplibreModule=r,this.events=i,this.eventBus=l,this.capabilities={supportedShortcuts:a,supportsMapSizes:!0},Object.assign(this,o)},e=[{key:"initMap",value:(r=V().m(function t(e){var r,n,a,l,s,h,f,p,y,d,g,m,v,b=this;return V().w(function(t){for(;;)switch(t.n){case 0:r=e.container,n=e.padding,a=e.mapStyle,l=e.mapSize,s=e.center,h=e.zoom,f=e.bounds,p=e.pixelRatio,y=tt(e,U),this.mapStyleId=null==a?void 0:a.id,this.mapSize=l,d=this.maplibreModule.Map,g=this.events,m=this.eventBus,(v=new d(X(X({},y),{},{container:r,style:null==a?void 0:a.url,pixelRatio:p,padding:n,center:s,zoom:h,fadeDuration:0,attributionControl:!1,dragRotate:!1,doubleClickZoom:!1}))).touchZoomRotate.disableRotation(),this.map=v,this.map.setPadding(n),f&&v.fitBounds(f,{duration:0}),i(v),o(v),u({map:v,events:g,eventBus:m,getCenter:this.getCenter.bind(this),getZoom:this.getZoom.bind(this),getBounds:this.getBounds.bind(this),getResolution:this.getResolution.bind(this)}),c({mapProvider:this,map:v,events:g,eventBus:m}),v.on("load",function(){b.labelNavigator=I(v,null==a?void 0:a.mapColorScheme,g,m)}),this.eventBus.emit(g.MAP_READY,{map:this.map,mapStyleId:this.mapStyleId,mapSize:this.mapSize,crs:this.crs});case 1:return t.a(2)}},t,this)}),l=function(){var t=this,e=arguments;return new Promise(function(n,a){var o=r.apply(t,e);function i(t){et(o,n,a,i,l,"next",t)}function l(t){et(o,n,a,i,l,"throw",t)}i(void 0)})},function(t){return l.apply(this,arguments)})},{key:"destroyMap",value:function(){var t,e;null===(t=this.mapEvents)||void 0===t||t.remove(),null===(e=this.appEvents)||void 0===e||e.remove(),this.mapEvents=null,this.appEvents=null,this.map.remove()}},{key:"setView",value:function(t){var e=t.center,r=t.zoom;this.map.flyTo({center:e||this.getCenter(),zoom:r||this.getZoom(),duration:n})}},{key:"zoomIn",value:function(t){this.map.easeTo({zoom:this.getZoom()+t,duration:n})}},{key:"zoomOut",value:function(t){this.map.easeTo({zoom:this.getZoom()-t,duration:n})}},{key:"panBy",value:function(t){this.map.panBy(t,{duration:n})}},{key:"fitToBounds",value:function(t){var e=Array.isArray(t)?t:m(t);this.map.fitBounds(e,{duration:n})}},{key:"setPadding",value:function(t){this.map.setPadding(t)}},{key:"updateHighlightedFeatures",value:function(t,e){return function(t){var e=t.LngLatBounds,r=t.map,n=t.selectedFeatures,a=t.stylesMap;if(!r)return null;var o=function(t,e){var r={};return null==e||e.forEach(function(e){var n=e.featureId,a=e.layerId,o=e.idProperty,i=e.geometry,l=t.getLayer(a);if(l){var s=l.source;r[s]||(r[s]={ids:new Set,fillIds:new Set,idProperty:o,layerId:a,hasFillGeometry:!1}),!i||"Polygon"!==i.type&&"MultiPolygon"!==i.type||(r[s].hasFillGeometry=!0,r[s].fillIds.add(n)),r[s].ids.add(n)}}),r}(r,n),i=[],l=new Set(Object.keys(o)),s=r._highlightedSources||new Set;return function(t,e,r){e.forEach(function(e){if(!r.has(e)){var n="highlight-".concat(e);["".concat(n,"-fill"),"".concat(n,"-line")].forEach(function(e){t.getLayer(e)&&t.setFilter(e,["==","id",""])})}})}(r,s,l),r._highlightedSources=l,l.forEach(function(t){var e=o[t],n=e.ids,l=e.fillIds,s=e.idProperty,u=e.layerId,c=e.hasFillGeometry,h=r.getLayer(u),f=h.sourceLayer,p=c?"fill":h.type,y="highlight-".concat(t),d=a[u],g=d.stroke,m=d.strokeWidth,v=d.fill,b=s?["get",s]:["id"],M=["in",b,["literal",C(n)]],w=["in",b,["literal",C(l)]],S={"line-color":g,"line-width":m};"fill"===p&&(Z(r,"".concat(y,"-fill"),"fill",t,f,{"fill-color":v},w),Z(r,"".concat(y,"-line"),"line",t,f,S,M)),"line"===p&&(r.getLayer("".concat(y,"-fill"))&&r.setFilter("".concat(y,"-fill"),["==","id",""]),Z(r,"".concat(y,"-line"),"line",t,f,S,M)),i.push.apply(i,C(r.queryRenderedFeatures({layers:[u]}).filter(function(t){var e;return n.has(s?null===(e=t.properties)||void 0===e?void 0:e[s]:t.id)})))}),function(t,e){if(!e.length)return null;var r=new t;return e.forEach(function(t){var e=function(t){return"number"==typeof t[0]?r.extend(t):t.forEach(e)};e(t.geometry.coordinates)}),[r.getWest(),r.getSouth(),r.getEast(),r.getNorth()]}(e,i)}({LngLatBounds:this.maplibreModule.LngLatBounds,map:this.map,selectedFeatures:t,stylesMap:e})}},{key:"highlightNextLabel",value:function(t){var e;return(null===(e=this.labelNavigator)||void 0===e?void 0:e.highlightNextLabel(t))||null}},{key:"highlightLabelAtCenter",value:function(){var t;return(null===(t=this.labelNavigator)||void 0===t?void 0:t.highlightLabelAtCenter())||null}},{key:"clearHighlightedLabel",value:function(){var t;return(null===(t=this.labelNavigator)||void 0===t?void 0:t.clearHighlightedLabel())||null}},{key:"getCenter",value:function(){var t=this.map.getCenter();return[Number(t.lng.toFixed(7)),Number(t.lat.toFixed(7))]}},{key:"getZoom",value:function(){return Number(this.map.getZoom().toFixed(7))}},{key:"getBounds",value:function(){return this.map.getBounds().toArray().flat(1)}},{key:"getFeaturesAtPoint",value:function(t,e){return function(t,e){var r=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}).radius,n=void 0===r?10:r,a=[[e.x-n,e.y-n],[e.x+n,e.y+n]],o=t.queryRenderedFeatures(a);if(0===o.length)return[];var i=[];o.forEach(function(t){!1===i.includes(t.layer.id)&&i.push(t.layer.id)});for(var l=new Set,s=[],u=o.length-1;u>=0;u--){var c=o[u],h=void 0===c.id?JSON.stringify(c.properties):c.id;!1===l.has(h)&&(l.add(h),s.push(c))}var f=t.unproject(e),p=[f.lng,f.lat];return s.map(function(r){var n=0,a=r.geometry.type,o=function(t,e,r){var n=r.coordinates,a=r.type,o=1/0,i=function(e){return t.project(e)},l=function(t){for(var r=0;r<t.length-1;r++){var n=H(e,i(t[r]),i(t[r+1]));n<o&&(o=n)}};if("Point"===a){var s=i(n);o=Math.pow(e.x-s.x,2)+Math.pow(e.y-s.y,2)}else"LineString"===a||"MultiPoint"===a?"LineString"===a?l(n):n.forEach(function(t){var r=i(t),n=Math.pow(e.x-r.x,2)+Math.pow(e.y-r.y,2);n<o&&(o=n)}):"Polygon"===a||"MultiLineString"===a?n.forEach(l):"MultiPolygon"===a&&n.forEach(function(t){return t.forEach(l)});return o}(t,e,r.geometry);if(n+=1e6*i.indexOf(r.layer.id),a.includes("Polygon")){var l=("Polygon"===a?[r.geometry.coordinates]:r.geometry.coordinates).some(function(t){return function(t,e){for(var r=G(t,2),n=r[0],a=r[1],o=!1,i=0,l=e.length-1;i<e.length;l=i,i++){var s=G(e[i],2),u=s[0],c=s[1],h=G(e[l],2),f=h[0],p=h[1];c>a!=p>a&&n<(f-u)*(a-c)/(p-c)+u&&(o=!o)}return o}(p,t[0])});!0===l?n-=5e5:n+=1e5}return{f:r,score:n+=o}}).sort(function(t,e){return t.score-e.score}).map(function(t){return t.f})}(this.map,t,e)}},{key:"getAreaDimensions",value:function(){return function(t){var e,r,n,a;if(t&&"function"==typeof t.getWest)e=t.getWest(),r=t.getSouth(),n=t.getEast(),a=t.getNorth();else{if(!Array.isArray(t)||2!==t.length)return"";var o=v(t,2),i=v(o[0],2);e=i[0],r=i[1];var l=v(o[1],2);n=l[0],a=l[1]}var s=M([e,r],[n,r]),u=M([e,r],[e,a]),c=w(s),h=w(u);return"".concat(h," by ").concat(c)}((t=this.maplibreModule.LngLatBounds,e=this.map,r=e.getContainer().getBoundingClientRect(),n=r.width,a=r.height,o=e.getPadding(),i=[o.left,a-o.bottom],l=[n-o.right,o.top],new t(e.unproject(i),e.unproject(l))));var t,e,r,n,a,o,i,l}},{key:"getCardinalMove",value:function(t,e){return function(t,e){var r=v(t,2),n=r[0],a=r[1],o=v(e,2),i=o[0],l=o[1],s=l-a,u=i-n,c=[];if(Math.abs(s)>1e-4){var h=Math.round(M([n,a],[n,l]));c.push("".concat(s>0?"north":"south"," ").concat(w(h)))}if(Math.abs(u)>1e-4){var f=Math.round(M([n,a],[i,a]));c.push("".concat(u>0?"east":"west"," ").concat(w(f)))}return c.join(", ")}(t,e)}},{key:"getResolution",value:function(){return t=this.map.getCenter(),e=this.map.getZoom(),r=t.lat,n=Math.pow(2,e),40075016.686*Math.cos(r*Math.PI/180)/(512*n);var t,e,r,n}},{key:"mapToScreen",value:function(t){return this.map.project(t)}},{key:"screenToMap",value:function(t){var e=this.map.unproject([t.x,t.y]);return[e.lng,e.lat]}}],e&&rt(t.prototype,e),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,r,l}()}}]);
@@ -1,2 +1,2 @@
1
1
  /*! For license information please see index.js.LICENSE.txt */
2
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("defra",[],t):"object"==typeof exports?exports.defra=t():(e.defra=e.defra||{},e.defra.maplibreProvider=t())}(this,()=>(()=>{"use strict";var e,t,r,n,o={},i={};function a(e){var t=i[e];if(void 0!==t)return t.exports;var r=i[e]={exports:{}};return o[e].call(r.exports,r,r.exports,a),r.exports}a.m=o,t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,a.t=function(r,n){if(1&n&&(r=this(r)),8&n)return r;if("object"==typeof r&&r){if(4&n&&r.__esModule)return r;if(16&n&&"function"==typeof r.then)return r}var o=Object.create(null);a.r(o);var i={};e=e||[null,t({}),t([]),t(t)];for(var u=2&n&&r;("object"==typeof u||"function"==typeof u)&&!~e.indexOf(u);u=t(u))Object.getOwnPropertyNames(u).forEach(e=>i[e]=()=>r[e]);return i.default=()=>r,a.d(o,i),o},a.d=(e,t)=>{for(var r in t)a.o(t,r)&&!a.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},a.f={},a.e=e=>Promise.all(Object.keys(a.f).reduce((t,r)=>(a.f[r](e,t),t),[])),a.u=e=>({649:"im-maplibre-framework",772:"im-maplibre-provider"}[e]+".js"),a.miniCssF=e=>{},a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r={},n="defra.maplibreProvider:",a.l=(e,t,o,i)=>{if(r[e])r[e].push(t);else{var u,c;if(void 0!==o)for(var f=document.getElementsByTagName("script"),l=0;l<f.length;l++){var p=f[l];if(p.getAttribute("src")==e||p.getAttribute("data-webpack")==n+o){u=p;break}}u||(c=!0,(u=document.createElement("script")).charset="utf-8",a.nc&&u.setAttribute("nonce",a.nc),u.setAttribute("data-webpack",n+o),u.src=e),r[e]=[t];var s=(t,n)=>{u.onerror=u.onload=null,clearTimeout(d);var o=r[e];if(delete r[e],u.parentNode&&u.parentNode.removeChild(u),o&&o.forEach(e=>e(n)),t)return t(n)},d=setTimeout(s.bind(null,void 0,{type:"timeout",target:u}),12e4);u.onerror=s.bind(null,u.onerror),u.onload=s.bind(null,u.onload),c&&document.head.appendChild(u)}},a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;a.g.importScripts&&(e=a.g.location+"");var t=a.g.document;if(!e&&t&&(t.currentScript&&"SCRIPT"===t.currentScript.tagName.toUpperCase()&&(e=t.currentScript.src),!e)){var r=t.getElementsByTagName("script");if(r.length)for(var n=r.length-1;n>-1&&(!e||!/^http(s?):/.test(e));)e=r[n--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),a.p=e})(),(()=>{var e={57:0};a.f.j=(t,r)=>{var n=a.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[2]);else{var o=new Promise((r,o)=>n=e[t]=[r,o]);r.push(n[2]=o);var i=a.p+a.u(t),u=new Error;a.l(i,r=>{if(a.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var o=r&&("load"===r.type?"missing":r.type),i=r&&r.target&&r.target.src;u.message="Loading chunk "+t+" failed.\n("+o+": "+i+")",u.name="ChunkLoadError",u.type=o,u.request=i,n[1](u)}},"chunk-"+t,t)}};var t=(t,r)=>{var n,o,[i,u,c]=r,f=0;if(i.some(t=>0!==e[t])){for(n in u)a.o(u,n)&&(a.m[n]=u[n]);c&&c(a)}for(t&&t(r);f<i.length;f++)o=i[f],a.o(e,o)&&e[o]&&e[o][0](),e[o]=0},r=this.webpackChunkdefra_DefraMap=this.webpackChunkdefra_DefraMap||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})();var u={};function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}a.d(u,{default:()=>h});var f=function(e){if(!window.WebGLRenderingContext)return{isEnabled:!1,error:"WebGL is not supported"};var t,r=document.createElement("canvas"),n=!1,o=function(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return c(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return a=e.done,e},e:function(e){u=!0,i=e},f:function(){try{a||null==r.return||r.return()}finally{if(u)throw i}}}}(e);try{for(o.s();!(t=o.n()).done;){var i=t.value;try{if((n=r.getContext(i))&&"function"==typeof n.getParameter)return{isEnabled:!0}}catch(e){}}}catch(e){o.e(e)}finally{o.f()}return{isEnabled:!1,error:"WebGL is supported, but disabled"}};function l(e){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},l(e)}function p(){var e,t,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function i(r,n,o,i){var c=n&&n.prototype instanceof u?n:u,f=Object.create(c.prototype);return s(f,"_invoke",function(r,n,o){var i,u,c,f=0,l=o||[],p=!1,s={p:0,n:0,v:e,a:d,f:d.bind(e,4),d:function(t,r){return i=t,u=0,c=e,s.n=r,a}};function d(r,n){for(u=r,c=n,t=0;!p&&f&&!o&&t<l.length;t++){var o,i=l[t],d=s.p,b=i[2];r>3?(o=b===n)&&(c=i[(u=i[4])?5:(u=3,3)],i[4]=i[5]=e):i[0]<=d&&((o=r<2&&d<i[1])?(u=0,s.v=n,s.n=i[1]):d<b&&(o=r<3||i[0]>n||n>b)&&(i[4]=r,i[5]=n,s.n=b,u=0))}if(o||r>1)return a;throw p=!0,n}return function(o,l,b){if(f>1)throw TypeError("Generator is already running");for(p&&1===l&&d(l,b),u=l,c=b;(t=u<2?e:c)||!p;){i||(u?u<3?(u>1&&(s.n=-1),d(u,c)):s.n=c:s.v=c);try{if(f=2,i){if(u||(o="next"),t=i[o]){if(!(t=t.call(i,c)))throw TypeError("iterator result is not an object");if(!t.done)return t;c=t.value,u<2&&(u=0)}else 1===u&&(t=i.return)&&t.call(i),u<2&&(c=TypeError("The iterator does not provide a '"+o+"' method"),u=1);i=e}else if((t=(p=s.n<0)?c:r.call(n,s))!==a)break}catch(t){i=e,u=1,c=t}finally{f=1}}return{value:t,done:p}}}(r,o,i),!0),f}var a={};function u(){}function c(){}function f(){}t=Object.getPrototypeOf;var l=[][n]?t(t([][n]())):(s(t={},n,function(){return this}),t),d=f.prototype=u.prototype=Object.create(l);function b(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,f):(e.__proto__=f,s(e,o,"GeneratorFunction")),e.prototype=Object.create(d),e}return c.prototype=f,s(d,"constructor",f),s(f,"constructor",c),c.displayName="GeneratorFunction",s(f,o,"GeneratorFunction"),s(d),s(d,o,"Generator"),s(d,n,function(){return this}),s(d,"toString",function(){return"[object Generator]"}),(p=function(){return{w:i,m:b}})()}function s(e,t,r,n){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}s=function(e,t,r,n){function i(t,r){s(e,t,function(e){return this._invoke(t,r,e)})}t?o?o(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(i("next",0),i("throw",1),i("return",2))},s(e,t,r,n)}function d(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function b(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?d(Object(r),!0).forEach(function(t){y(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):d(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function y(e,t,r){return(t=function(e){var t=function(e){if("object"!=l(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=l(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==l(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function v(e,t,r,n,o,i,a){try{var u=e[i](a),c=u.value}catch(e){return void r(e)}u.done?t(c):Promise.resolve(c).then(n,o)}function m(){try{return new Function("var x = null ?? 5; var y = ({a:1})?.a;"),!0}catch(e){return!1}}function h(){var e,t,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{checkDeviceCapabilities:function(){var e=f(["webgl2","webgl1"]),t=document.documentMode;return{isSupported:e.isEnabled&&m(),error:t?"Internet Explorer is not supported":e.error}},load:(e=p().m(function e(){var t,n,o;return p().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,a.e(649).then(a.t.bind(a,443,19));case 1:return t=e.v,e.n=2,a.e(772).then(a.bind(a,809));case 2:return n=e.v.default,o=b(b({},r),{},{crs:"EPSG:4326"}),e.a(2,{MapProvider:n,mapProviderConfig:o,mapFramework:t})}},e)}),t=function(){var t=this,r=arguments;return new Promise(function(n,o){var i=e.apply(t,r);function a(e){v(i,n,o,a,u,"next",e)}function u(e){v(i,n,o,a,u,"throw",e)}a(void 0)})},function(){return t.apply(this,arguments)})}}return u.default})());
2
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("defra",[],t):"object"==typeof exports?exports.defra=t():(e.defra=e.defra||{},e.defra.maplibreProvider=t())}(this,()=>(()=>{"use strict";var e,t,r,n,o={},i={};function a(e){var t=i[e];if(void 0!==t)return t.exports;var r=i[e]={exports:{}};return o[e].call(r.exports,r,r.exports,a),r.exports}a.m=o,t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,a.t=function(r,n){if(1&n&&(r=this(r)),8&n)return r;if("object"==typeof r&&r){if(4&n&&r.__esModule)return r;if(16&n&&"function"==typeof r.then)return r}var o=Object.create(null);a.r(o);var i={};e=e||[null,t({}),t([]),t(t)];for(var u=2&n&&r;("object"==typeof u||"function"==typeof u)&&!~e.indexOf(u);u=t(u))Object.getOwnPropertyNames(u).forEach(e=>i[e]=()=>r[e]);return i.default=()=>r,a.d(o,i),o},a.d=(e,t)=>{for(var r in t)a.o(t,r)&&!a.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},a.f={},a.e=e=>Promise.all(Object.keys(a.f).reduce((t,r)=>(a.f[r](e,t),t),[])),a.u=e=>({649:"im-maplibre-framework",772:"im-maplibre-provider"}[e]+".js"),a.miniCssF=e=>{},a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r={},n="defra.maplibreProvider:",a.l=(e,t,o,i)=>{if(r[e])r[e].push(t);else{var u,c;if(void 0!==o)for(var f=document.getElementsByTagName("script"),l=0;l<f.length;l++){var p=f[l];if(p.getAttribute("src")==e||p.getAttribute("data-webpack")==n+o){u=p;break}}u||(c=!0,(u=document.createElement("script")).charset="utf-8",a.nc&&u.setAttribute("nonce",a.nc),u.setAttribute("data-webpack",n+o),u.src=e),r[e]=[t];var s=(t,n)=>{u.onerror=u.onload=null,clearTimeout(d);var o=r[e];if(delete r[e],u.parentNode&&u.parentNode.removeChild(u),o&&o.forEach(e=>e(n)),t)return t(n)},d=setTimeout(s.bind(null,void 0,{type:"timeout",target:u}),12e4);u.onerror=s.bind(null,u.onerror),u.onload=s.bind(null,u.onload),c&&document.head.appendChild(u)}},a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;a.g.importScripts&&(e=a.g.location+"");var t=a.g.document;if(!e&&t&&(t.currentScript&&"SCRIPT"===t.currentScript.tagName.toUpperCase()&&(e=t.currentScript.src),!e)){var r=t.getElementsByTagName("script");if(r.length)for(var n=r.length-1;n>-1&&(!e||!/^http(s?):/.test(e));)e=r[n--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),a.p=e})(),(()=>{var e={57:0};a.f.j=(t,r)=>{var n=a.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[2]);else{var o=new Promise((r,o)=>n=e[t]=[r,o]);r.push(n[2]=o);var i=a.p+a.u(t),u=new Error;a.l(i,r=>{if(a.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var o=r&&("load"===r.type?"missing":r.type),i=r&&r.target&&r.target.src;u.message="Loading chunk "+t+" failed.\n("+o+": "+i+")",u.name="ChunkLoadError",u.type=o,u.request=i,n[1](u)}},"chunk-"+t,t)}};var t=(t,r)=>{var n,o,[i,u,c]=r,f=0;if(i.some(t=>0!==e[t])){for(n in u)a.o(u,n)&&(a.m[n]=u[n]);c&&c(a)}for(t&&t(r);f<i.length;f++)o=i[f],a.o(e,o)&&e[o]&&e[o][0](),e[o]=0},r=this.webpackChunkdefra_DefraMap=this.webpackChunkdefra_DefraMap||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})();var u={};function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}a.d(u,{default:()=>m});var f=function(e){if(!window.WebGLRenderingContext)return{isEnabled:!1,error:"WebGL is not supported"};var t,r=document.createElement("canvas"),n=!1,o=function(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return c(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return a=e.done,e},e:function(e){u=!0,i=e},f:function(){try{a||null==r.return||r.return()}finally{if(u)throw i}}}}(e);try{for(o.s();!(t=o.n()).done;){var i=t.value;try{if((n=r.getContext(i))&&"function"==typeof n.getParameter)return{isEnabled:!0}}catch(e){}}}catch(e){o.e(e)}finally{o.f()}return{isEnabled:!1,error:"WebGL is supported, but disabled"}};function l(e){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},l(e)}function p(){var e,t,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function i(r,n,o,i){var c=n&&n.prototype instanceof u?n:u,f=Object.create(c.prototype);return s(f,"_invoke",function(r,n,o){var i,u,c,f=0,l=o||[],p=!1,s={p:0,n:0,v:e,a:d,f:d.bind(e,4),d:function(t,r){return i=t,u=0,c=e,s.n=r,a}};function d(r,n){for(u=r,c=n,t=0;!p&&f&&!o&&t<l.length;t++){var o,i=l[t],d=s.p,b=i[2];r>3?(o=b===n)&&(c=i[(u=i[4])?5:(u=3,3)],i[4]=i[5]=e):i[0]<=d&&((o=r<2&&d<i[1])?(u=0,s.v=n,s.n=i[1]):d<b&&(o=r<3||i[0]>n||n>b)&&(i[4]=r,i[5]=n,s.n=b,u=0))}if(o||r>1)return a;throw p=!0,n}return function(o,l,b){if(f>1)throw TypeError("Generator is already running");for(p&&1===l&&d(l,b),u=l,c=b;(t=u<2?e:c)||!p;){i||(u?u<3?(u>1&&(s.n=-1),d(u,c)):s.n=c:s.v=c);try{if(f=2,i){if(u||(o="next"),t=i[o]){if(!(t=t.call(i,c)))throw TypeError("iterator result is not an object");if(!t.done)return t;c=t.value,u<2&&(u=0)}else 1===u&&(t=i.return)&&t.call(i),u<2&&(c=TypeError("The iterator does not provide a '"+o+"' method"),u=1);i=e}else if((t=(p=s.n<0)?c:r.call(n,s))!==a)break}catch(t){i=e,u=1,c=t}finally{f=1}}return{value:t,done:p}}}(r,o,i),!0),f}var a={};function u(){}function c(){}function f(){}t=Object.getPrototypeOf;var l=[][n]?t(t([][n]())):(s(t={},n,function(){return this}),t),d=f.prototype=u.prototype=Object.create(l);function b(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,f):(e.__proto__=f,s(e,o,"GeneratorFunction")),e.prototype=Object.create(d),e}return c.prototype=f,s(d,"constructor",f),s(f,"constructor",c),c.displayName="GeneratorFunction",s(f,o,"GeneratorFunction"),s(d),s(d,o,"Generator"),s(d,n,function(){return this}),s(d,"toString",function(){return"[object Generator]"}),(p=function(){return{w:i,m:b}})()}function s(e,t,r,n){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}s=function(e,t,r,n){function i(t,r){s(e,t,function(e){return this._invoke(t,r,e)})}t?o?o(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(i("next",0),i("throw",1),i("return",2))},s(e,t,r,n)}function d(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function b(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?d(Object(r),!0).forEach(function(t){y(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):d(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function y(e,t,r){return(t=function(e){var t=function(e){if("object"!=l(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=l(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==l(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function v(e,t,r,n,o,i,a){try{var u=e[i](a),c=u.value}catch(e){return void r(e)}u.done?t(c):Promise.resolve(c).then(n,o)}function m(){var e,t,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{checkDeviceCapabilities:function(){var e=f(["webgl2","webgl1"]),t=document.documentMode;return{isSupported:e.isEnabled&&"function"==typeof"".replaceAll,error:t?"Internet Explorer is not supported":e.error}},load:(e=p().m(function e(){var t,n,o;return p().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,a.e(649).then(a.t.bind(a,443,19));case 1:return t=e.v,e.n=2,a.e(772).then(a.bind(a,662));case 2:return n=e.v.default,o=b(b({},r),{},{crs:"EPSG:4326"}),e.a(2,{MapProvider:n,mapProviderConfig:o,mapFramework:t})}},e)}),t=function(){var t=this,r=arguments;return new Promise(function(n,o){var i=e.apply(t,r);function a(e){v(i,n,o,a,u,"next",e)}function u(e){v(i,n,o,a,u,"throw",e)}a(void 0)})},function(){return t.apply(this,arguments)})}}return u.default})());
@@ -1,5 +1,14 @@
1
- export function attachAppEvents ({ map, events, eventBus }) {
1
+ export function attachAppEvents ({
2
+ map,
3
+ events,
4
+ eventBus
5
+ }) {
2
6
  const handleSetMapStyle = (mapStyle) => {
7
+ map.once('style.load', () => {
8
+ eventBus.emit(events.MAP_STYLE_CHANGE, {
9
+ mapStyleId: mapStyle.id
10
+ })
11
+ })
3
12
  map.setStyle(mapStyle.url, { diff: false })
4
13
  }
5
14
 
@@ -6,15 +6,18 @@ describe('attachAppEvents', () => {
6
6
  beforeEach(() => {
7
7
  map = {
8
8
  setStyle: jest.fn(),
9
- setPixelRatio: jest.fn()
9
+ setPixelRatio: jest.fn(),
10
+ once: jest.fn()
10
11
  }
11
12
  eventBus = {
12
13
  on: jest.fn(),
13
- off: jest.fn()
14
+ off: jest.fn(),
15
+ emit: jest.fn()
14
16
  }
15
17
  events = {
16
18
  MAP_SET_STYLE: 'map:set-style',
17
- MAP_SET_PIXEL_RATIO: 'map:set-pixel-ratio'
19
+ MAP_SET_PIXEL_RATIO: 'map:set-pixel-ratio',
20
+ MAP_STYLE_CHANGE: 'map:stylechange'
18
21
  }
19
22
  })
20
23
 
@@ -30,12 +33,18 @@ describe('attachAppEvents', () => {
30
33
  const pixelHandler = eventBus.on.mock.calls.find(c => c[0] === events.MAP_SET_PIXEL_RATIO)[1]
31
34
 
32
35
  // Call handlers to verify map methods
33
- styleHandler({ url: 'style.json' })
36
+ styleHandler({ id: 'outdoor', url: 'style.json' })
34
37
  pixelHandler(2)
35
38
 
36
39
  expect(map.setStyle).toHaveBeenCalledWith('style.json', { diff: false })
40
+ expect(map.once).toHaveBeenCalledWith('style.load', expect.any(Function))
37
41
  expect(map.setPixelRatio).toHaveBeenCalledWith(2)
38
42
 
43
+ // Simulate style.load firing — should emit MAP_STYLE_CHANGE
44
+ const styleLoadCallback = map.once.mock.calls.find(c => c[0] === 'style.load')[1]
45
+ styleLoadCallback()
46
+ expect(eventBus.emit).toHaveBeenCalledWith(events.MAP_STYLE_CHANGE, { mapStyleId: 'outdoor' })
47
+
39
48
  // Verify remove detaches handlers
40
49
  controller.remove()
41
50
  expect(eventBus.off).toHaveBeenCalledWith(events.MAP_SET_STYLE, styleHandler)
@@ -7,23 +7,15 @@
7
7
  import { getWebGL } from './utils/detectWebgl.js'
8
8
 
9
9
  /**
10
- * Checks whether the browser supports modern ES2020 syntax
11
- * (optional chaining `?.` and nullish coalescing `??`), which
12
- * Chrome 80+ supports. Safe to use in ES5 bootstrap code.
10
+ * Checks whether the browser supports the ES2020+ feature set required by
11
+ * MapLibre, using `String.prototype.replaceAll` as a proxy. This method
12
+ * landed in Chrome 85 / Firefox 77 / Safari 13.1 the same cohort that
13
+ * supports optional chaining `?.` and nullish coalescing `??`.
13
14
  *
14
15
  * @returns {boolean} true if modern syntax is supported, false otherwise
15
16
  */
16
17
  function supportsModernMaplibre() {
17
- try {
18
- // Try compiling ES2020 syntax dynamically
19
- new Function('var x = null ?? 5; var y = ({a:1})?.a;')
20
- return true
21
- }
22
- catch (e) {
23
- // Exception intentionally ignored; returns false for unsupported syntax
24
- void e // NOSONAR
25
- return false
26
- }
18
+ return typeof ''.replaceAll === 'function'
27
19
  }
28
20
 
29
21
  /**
@@ -9,10 +9,18 @@ describe('createMapLibreProvider', () => {
9
9
 
10
10
  beforeEach(() => {
11
11
  getWebGL.mockReturnValue({ isEnabled: true, error: null })
12
+
13
+ // Ensure modern support by default
14
+ String.prototype.replaceAll = jest.fn()
15
+ })
16
+
17
+ afterEach(() => {
18
+ jest.restoreAllMocks()
12
19
  })
13
20
 
14
- test('checkDeviceCapabilities: WebGL enabled, no IE → isSupported true, no error', () => {
21
+ test('checkDeviceCapabilities: WebGL enabled, modern browser, no IE → isSupported true', () => {
15
22
  const result = createMapLibreProvider().checkDeviceCapabilities()
23
+
16
24
  expect(result.isSupported).toBe(true)
17
25
  expect(result.error).toBeFalsy()
18
26
  expect(getWebGL).toHaveBeenCalledWith(['webgl2', 'webgl1'])
@@ -20,41 +28,52 @@ describe('createMapLibreProvider', () => {
20
28
 
21
29
  test('checkDeviceCapabilities: WebGL disabled → isSupported false, returns webGL error', () => {
22
30
  getWebGL.mockReturnValue({ isEnabled: false, error: 'WebGL not supported' })
31
+
23
32
  const result = createMapLibreProvider().checkDeviceCapabilities()
33
+
24
34
  expect(result.isSupported).toBe(false)
25
35
  expect(result.error).toBe('WebGL not supported')
26
36
  })
27
37
 
28
38
  test('checkDeviceCapabilities: IE detected → error is IE message', () => {
29
- Object.defineProperty(document, 'documentMode', { get: () => 11, configurable: true })
39
+ Object.defineProperty(document, 'documentMode', {
40
+ get: () => 11,
41
+ configurable: true
42
+ })
43
+
30
44
  try {
31
45
  const result = createMapLibreProvider().checkDeviceCapabilities()
32
46
  expect(result.error).toBe('Internet Explorer is not supported')
33
47
  } finally {
34
- Object.defineProperty(document, 'documentMode', { get: () => undefined, configurable: true })
48
+ Object.defineProperty(document, 'documentMode', {
49
+ get: () => undefined,
50
+ configurable: true
51
+ })
35
52
  }
36
53
  })
37
54
 
38
- test('supportsModernMaplibre returns false when Function constructor throws → isSupported false', () => {
39
- const RealFunction = global.Function
40
- global.Function = function () { throw new SyntaxError('unsupported') }
41
- try {
42
- const result = createMapLibreProvider().checkDeviceCapabilities()
43
- expect(result.isSupported).toBe(false)
44
- } finally {
45
- global.Function = RealFunction
46
- }
55
+ test('checkDeviceCapabilities: no replaceAll support → isSupported false', () => {
56
+ delete String.prototype.replaceAll
57
+
58
+ const result = createMapLibreProvider().checkDeviceCapabilities()
59
+
60
+ expect(result.isSupported).toBe(false)
47
61
  })
48
62
 
49
- test('load returns MapProvider, mapFramework, and mapProviderConfig with config spread', async () => {
63
+ test('load returns MapProvider, mapFramework, and merged mapProviderConfig', async () => {
50
64
  const result = await createMapLibreProvider({ tileSize: 512 }).load()
65
+
51
66
  expect(result.MapProvider).toBeDefined()
52
67
  expect(result.mapFramework).toBeDefined()
53
- expect(result.mapProviderConfig).toEqual({ tileSize: 512, crs: 'EPSG:4326' })
68
+ expect(result.mapProviderConfig).toEqual({
69
+ tileSize: 512,
70
+ crs: 'EPSG:4326'
71
+ })
54
72
  })
55
73
 
56
74
  test('load uses empty default config', async () => {
57
75
  const { mapProviderConfig } = await createMapLibreProvider().load()
76
+
58
77
  expect(mapProviderConfig).toEqual({ crs: 'EPSG:4326' })
59
78
  })
60
- })
79
+ })
@@ -4,7 +4,15 @@ import { throttle } from '../../../src/utils/throttle.js'
4
4
  const DEBOUNCE_IDLE_TIME = 500
5
5
  const MOVE_THROTTLE_TIME = 10
6
6
 
7
- export function attachMapEvents ({ map, events, eventBus, getCenter, getZoom, getBounds, getResolution }) {
7
+ export function attachMapEvents ({
8
+ map,
9
+ events,
10
+ eventBus,
11
+ getCenter,
12
+ getZoom,
13
+ getBounds,
14
+ getResolution
15
+ }) {
8
16
  const handlers = []
9
17
  const debouncers = []
10
18
 
@@ -7,7 +7,7 @@ import { DEFAULTS, supportedShortcuts } from './defaults.js'
7
7
  import { cleanCanvas, applyPreventDefaultFix } from './utils/maplibreFixes.js'
8
8
  import { attachMapEvents } from './mapEvents.js'
9
9
  import { attachAppEvents } from './appEvents.js'
10
- import { getAreaDimensions, getCardinalMove, getResolution, getPaddedBounds } from './utils/spatial.js'
10
+ import { getAreaDimensions, getCardinalMove, getBboxFromGeoJSON, getResolution, getPaddedBounds } from './utils/spatial.js'
11
11
  import { createMapLabelNavigator } from './utils/labels.js'
12
12
  import { updateHighlightedFeatures } from './utils/highlightFeatures.js'
13
13
  import { queryFeatures } from './utils/queryFeatures.js'
@@ -44,7 +44,9 @@ export default class MapLibreProvider {
44
44
  * @returns {Promise<void>}
45
45
  */
46
46
  async initMap (config) {
47
- const { container, padding, mapStyle, center, zoom, bounds, pixelRatio, ...initConfig } = config
47
+ const { container, padding, mapStyle, mapSize, center, zoom, bounds, pixelRatio, ...initConfig } = config
48
+ this.mapStyleId = mapStyle?.id
49
+ this.mapSize = mapSize
48
50
  const { Map: MaplibreMap } = this.maplibreModule
49
51
  const { events, eventBus } = this
50
52
 
@@ -90,6 +92,7 @@ export default class MapLibreProvider {
90
92
  })
91
93
 
92
94
  attachAppEvents({
95
+ mapProvider: this,
93
96
  map,
94
97
  events,
95
98
  eventBus
@@ -100,17 +103,12 @@ export default class MapLibreProvider {
100
103
  this.labelNavigator = createMapLabelNavigator(map, mapStyle?.mapColorScheme, events, eventBus)
101
104
  })
102
105
 
103
- this.eventBus.emit(events.MAP_READY, this.getMapAPI())
104
- }
105
-
106
- /** Returns the public API exposed via the map:ready event. */
107
- getMapAPI () {
108
- return {
106
+ this.eventBus.emit(events.MAP_READY, {
109
107
  map: this.map,
110
- crs: this.crs,
111
- fitToBounds: this.fitToBounds.bind(this),
112
- setView: this.setView.bind(this)
113
- }
108
+ mapStyleId: this.mapStyleId,
109
+ mapSize: this.mapSize,
110
+ crs: this.crs
111
+ })
114
112
  }
115
113
 
116
114
  /** Destroy the map and clean up resources. */
@@ -177,12 +175,13 @@ export default class MapLibreProvider {
177
175
  }
178
176
 
179
177
  /**
180
- * Fit map view to the specified bounds [west, south, east, north].
178
+ * Fit map view to the specified bounds or GeoJSON geometry.
181
179
  *
182
- * @param {[number, number, number, number]} bounds - Bounds as [west, south, east, north].
180
+ * @param {[number, number, number, number] | object} bounds - Bounds as [west, south, east, north], or a GeoJSON Feature, FeatureCollection, or geometry. Bbox is computed from GeoJSON using @turf/bbox.
183
181
  */
184
182
  fitToBounds (bounds) {
185
- this.map.fitBounds(bounds, { duration: DEFAULTS.animationDuration })
183
+ const bbox = Array.isArray(bounds) ? bounds : getBboxFromGeoJSON(bounds)
184
+ this.map.fitBounds(bbox, { duration: DEFAULTS.animationDuration })
186
185
  }
187
186
 
188
187
  /**
@@ -19,6 +19,7 @@ jest.mock('./appEvents.js', () => ({ attachAppEvents: jest.fn() }))
19
19
  jest.mock('./utils/spatial.js', () => ({
20
20
  getAreaDimensions: jest.fn(() => '400m by 750m'),
21
21
  getCardinalMove: jest.fn(() => 'north'),
22
+ getBboxFromGeoJSON: jest.fn(() => [-1, 50, 1, 52]),
22
23
  getResolution: jest.fn(() => 10),
23
24
  getPaddedBounds: jest.fn(() => [[0, 0], [1, 1]])
24
25
  }))
@@ -84,7 +85,7 @@ describe('MapLibreProvider', () => {
84
85
  expect(map.setPadding).toHaveBeenCalled()
85
86
  expect(attachMapEvents).toHaveBeenCalled()
86
87
  expect(attachAppEvents).toHaveBeenCalled()
87
- expect(eventBus.emit).toHaveBeenCalledWith('map:ready', expect.any(Object))
88
+ expect(eventBus.emit).toHaveBeenCalledWith('map:ready', { map, mapStyleId: undefined, mapSize: undefined, crs: undefined })
88
89
  })
89
90
 
90
91
  test('initMap: fitBounds called when bounds provided; skipped when absent; null mapStyle → style undefined', async () => {
@@ -157,6 +158,18 @@ describe('MapLibreProvider', () => {
157
158
  expect(map.setPadding).toHaveBeenCalledWith({ top: 5 })
158
159
  })
159
160
 
161
+ test('fitToBounds accepts GeoJSON: computes bbox via getBboxFromGeoJSON', async () => {
162
+ const { getBboxFromGeoJSON } = require('./utils/spatial.js')
163
+ const p = makeProvider()
164
+ await doInitMap(p)
165
+ const feature = { type: 'Feature', geometry: { type: 'Point', coordinates: [1, 52] }, properties: {} }
166
+
167
+ p.fitToBounds(feature)
168
+
169
+ expect(getBboxFromGeoJSON).toHaveBeenCalledWith(feature)
170
+ expect(map.fitBounds).toHaveBeenCalledWith([-1, 50, 1, 52], { duration: 400 })
171
+ })
172
+
160
173
  test('getCenter, getZoom, getBounds return formatted values', async () => {
161
174
  const p = makeProvider()
162
175
  await doInitMap(p)
@@ -1,5 +1,6 @@
1
1
  // src/utils/spatial.js
2
2
  import LatLon from 'geodesy/latlon-spherical.js'
3
+ import turfBbox from '@turf/bbox'
3
4
 
4
5
  // -----------------------------------------------------------------------------
5
6
  // Internal (not exported)
@@ -186,9 +187,19 @@ const getPaddedBounds = (LngLatBounds, map) => {
186
187
  }
187
188
 
188
189
 
190
+ /**
191
+ * Get a flat bbox [west, south, east, north] from any GeoJSON object
192
+ * (Feature, FeatureCollection, or geometry).
193
+ *
194
+ * @param {object} geojson - GeoJSON Feature, FeatureCollection, or geometry
195
+ * @returns {[number, number, number, number]}
196
+ */
197
+ const getBboxFromGeoJSON = (geojson) => turfBbox(geojson)
198
+
189
199
  export {
190
200
  getAreaDimensions,
191
201
  getCardinalMove,
202
+ getBboxFromGeoJSON,
192
203
  spatialNavigate,
193
204
  getResolution,
194
205
  getPaddedBounds,
@@ -7,6 +7,8 @@ jest.mock('geodesy/latlon-spherical.js', () =>
7
7
  }))
8
8
  )
9
9
 
10
+ jest.mock('@turf/bbox', () => jest.fn(() => [-1, 50, 1, 52]))
11
+
10
12
  describe('spatial utils', () => {
11
13
 
12
14
  test('formatDimension hits all branches', () => {
@@ -93,4 +95,14 @@ describe('spatial utils', () => {
93
95
  expect(bounds.sw).toBeDefined()
94
96
  expect(bounds.ne).toBeDefined()
95
97
  })
98
+
99
+ test('getBboxFromGeoJSON delegates to @turf/bbox and returns flat bbox array', () => {
100
+ const turfBbox = require('@turf/bbox')
101
+ const feature = { type: 'Feature', geometry: { type: 'Point', coordinates: [1, 52] }, properties: {} }
102
+
103
+ const result = spatial.getBboxFromGeoJSON(feature)
104
+
105
+ expect(turfBbox).toHaveBeenCalledWith(feature)
106
+ expect(result).toEqual([-1, 50, 1, 52])
107
+ })
96
108
  })