PageSourceSearch

https://www.windy.com/v/51.2.1.ind.3f7b/index.js

js windy.com collected 2026-09-24 07:27:12 UTC 395,713 bytes, 259 lines download raw bytes

1import{Bounds as e,DivIcon as t,DomUtil as n,GridLayer as r,Icon as i,KML as a,LatLng as o,LatLngBounds as s,LatLngGraticule as c,LeafletGlMap as l,LngLat as u,LngLatBounds as d,Marker as f,MercatorCoordinate as p,Point as m,PointLGL as h,ReferenceCountedCache as g,TileCache as _,addProtocol as ee,createTileMesh as te,falseFn as ne,getCoordsKey as v,isWebGL2 as re,wrappedCoords as ie}from"@leafletGl";var ae=Object.defineProperty,y=(e,t)=>{let n={};for(var r in e)ae(n,r,{get:e[r],enumerable:!0});return t||ae(n,Symbol.toStringTag,{value:`Module`}),n},oe=y({adjustCssValue:()=>se,defaultPluginsAttachPoint:()=>b,replaceClass:()=>le,toggleClass:()=>ce});const se=(e,t,n=-1/0,r=1/0)=>{let i=getComputedStyle(document.documentElement).getPropertyValue(e),a=i?parseInt(i.replace(/^\D*(\d+)\D*.*$/,`$1`)):0;a>=n&&a<=r&&document.documentElement.style.setProperty(e,` ${a+t}px`)},ce=(e,t,n)=>e.classList[t?`add`:`remove`](n),le=(e,t,n=document.body)=>{let r=n.className;e.test(r)?n.className=r.replace(e,t):n.classList.add(t)},b=`[data-plugin="plugins"]`;var ue=y({device:()=>pe,platform:()=>fe});const de=window.navigator.userAgent,fe=/android/i.test(de)?`android`:/(iPhone|iPod|iPad)/i.test(de)?`ios`:`desktop`,pe=W.detectedDevice;{let e=()=>{document.body.classList.add(`platform-${fe}`);let e=()=>document.documentElement.style.setProperty(`--vh`,`${window.innerHeight/100}px`);window.addEventListener(`resize`,e),window.addEventListener(`orientationchange`,e),e()};document.readyState===`complete`?e():window.addEventListener(`load`,e)}var me=y({airPointProducts:()=>Ie,airQualityProducts:()=>Ae,assets:()=>xe,autoOpenArticleImportance:()=>qe,detailDefaults:()=>Je,device:()=>ve,extendedForecastDaysLength:()=>15,fallbackAirProducts:()=>Ne,forecastDaysLength:()=>7,freeForecastDaysLength:()=>5,globalPointProducts:()=>Me,globalProducts:()=>Ee,iconsDir:()=>Ce,isDesktop:()=>Re,isDesktopOrTablet:()=>ze,isMobile:()=>x,isMobileOrTablet:()=>S,isRetina:()=>Be,isTablet:()=>Le,isolinesType:()=>We,levels:()=>Se,levelsData:()=>Ve,localPointProducts:()=>je,localProducts:()=>Te,maxFavPoisDesktop:()=>7,overlays:()=>we,platform:()=>_e,pluginsLocation:()=>Ge,poiGroups:()=>Ue,pointForecastOnlyGlobalProducts:()=>ke,pointProducts:()=>Fe,pois:()=>He,pollenProducts:()=>Ke,products:()=>Pe,seaProducts:()=>De,server:()=>be,supportedLanguages:()=>ye,target:()=>ge,version:()=>he,waveProducts:()=>Oe});const he=`51.2.1`,ge=`index`,_e=fe,ve=pe,ye=`en.zh-TW.zh.ja.fr.ko.it.ru.nl.cs.tr.pl.sv.fi.ro.el.hu.hr.ca.da.ar.fa.hi.ta.sk.uk.bg.he.is.lt.et.vi.sl.sr.id.th.sq.pt.nb.es.de.bn`.split(`.`),be=`https://ims.windy.com`,xe=`v/51.2.1.ind.3f7b`,Se=[`surface`,`100m`,`975h`,`950h`,`925h`,`900h`,`850h`,`800h`,`700h`,`600h`,`500h`,`400h`,`300h`,`250h`,`200h`,`150h`,`10h`],Ce=`/img/icons7`,we=`radar.satellite.wind.gust.gustAccu.turbulence.icing.rain.rainAccu.snowAccu.snowcover.ptype.thunder.temp.dewpoint.rh.deg0.wetbulbtemp.solarpower.uvindex.clouds.hclouds.mclouds.lclouds.fog.cloudtop.cbase.visibility.cape.ccl.waves.swell1.swell2.swell3.wwaves.sst.currents.currentsTide.wavePower.aqi.no2.pm2p5.aod550.gtco3.tcso2.go3.cosc.dustsm.pressure.efiTemp.efiWind.efiRain.capAlerts.avalancheDanger.soilMoisture40.soilMoisture100.moistureAnom40.moistureAnom100.drought40.drought100.fwi.dfm10h.dfm100h.dfm1000h.heatmaps.topoMap.hurricanes`.split(`.`),Te=`nems.namConus.namHawaii.namAlaska.iconEu.iconD2.arome.aromeAntilles.aromeFrance.aromeReunion.canHrdps.canRdwpsWaves.camsEu.czeAladin.iconEuWaves.hrrrAlaska.hrrrConus.bomAccess.bomAccessAd.bomAccessBn.bomAccessDn.bomAccessNq.bomAccessPh.bomAccessSy.bomAccessVt.ukv.jmaMsm.jmaCwmWaves`.split(`.`),Ee=[`gfs`,`ecmwf`,`ecmwfAnalysis`,`radar`,`ecmwfWaves`,`gfsWaves`,`icon`,`capAlerts`,`avalancheDanger`,`cams`,`efi`,`satellite`,`cmems`,`drought`,`fireDanger`,`activeFires`,`topoMap`],De=[`ecmwfWaves`,`gfsWaves`,`iconEuWaves`,`canRdwpsWaves`,`cmems`,`jmaCwmWaves`],Oe=[`ecmwfWaves`,`gfsWaves`,`iconEuWaves`,`jmaCwmWaves`,`canRdwpsWaves`],ke=[`mblue`],Ae=[`cams`,`camsEu`],je=`namConus.namHawaii.namAlaska.iconD2.iconEu.iconEuWaves.arome.aromeAntilles.aromeFrance.aromeReunion.canHrdps.canRdwpsWaves.camsEu.czeAladin.hrrrAlaska.hrrrConus.bomAccess.bomAccessAd.bomAccessBn.bomAccessDn.bomAccessNq.bomAccessPh.bomAccessSy.bomAccessVt.ukv.jmaMsm.jmaCwmWaves`.split(`.`),Me=[...ke,`gfs`,`ecmwf`,`icon`],Ne=[`gfs`,`ecmwf`,`jmaMsm`,`canHrdps`,`iconEu`],Pe=[...ke,...Ee,...Te,...Ae,...Oe],Fe=[...Oe,...Me,...je,...Ae],Ie=Fe.filter(e=>!Oe.includes(e)&&!Ae.includes(e)),x=ve===`mobile`,Le=ve===`tablet`,Re=ve===`desktop`,S=x||Le,ze=Re||Le,Be=!!(window.devicePixelRatio&&window.devicePixelRatio>1),Ve={"10h":[`10hPa`,`30km FL980`,3e4,98e3],"150h":[`150hPa`,`13.5km FL450`,13500,45e3],"200h":[`200hPa`,`11.7km FL390`,11700,39e3],"250h":[`250hPa`,`10km FL340`,1e4,34e3],"300h":[`300hPa`,`9000m FL300`,9e3,3e4],"400h":[`400hPa`,`7000m FL240`,7e3,24e3],"500h":[`500hPa`,`5500m FL180`,5500,18e3],"600h":[`600hPa`,`4200m FL140`,4200,14e3],"700h":[`700hPa`,`3000m FL100`,3e3,1e4],"800h":[`800hPa`,`2000m 6400ft`,2e3,6400],"850h":[`850hPa`,`1500m 5000ft`,1500,5e3],"900h":[`900hPa`,`900m 3000ft`,900,3e3],"925h":[`925hPa`,`750m 2500ft`,750,2500],"950h":[`950hPa`,`600m 2000ft`,600,2e3],"975h":[`975hPa`,`300m 1000ft`,300,1e3],"100m":[`100m`,`330ft`,100,330],surface:[``,``,0,0]},He={favs:{title:`POI_FAVS`,icon:`k`},cities:{title:`POI_FCST`,icon:`&`},stations:{title:`POI_STATIONS`,icon:``},wind:{title:`POI_WIND`,titleShort:`POI_WIND_SHORT`,icon:`|`},temp:{title:`POI_TEMP`,titleShort:`POI_TEMP_SHORT`,icon:``},precip:{title:`POI_PRECIP`,titleShort:`POI_PRECIP_SHORT`,icon:`H`},metars:{title:`POI_AD`,icon:`Q`},cams:{title:`POI_CAMS`,icon:`l`},pgspots:{title:`POI_PG`,icon:``},kitespots:{title:`POI_KITE`,icon:``},surfspots:{title:`POI_SURF`,icon:`{`},tide:{title:`POI_TIDE`,icon:`q`},firespots:{title:`ACTIVE_FIRES`,icon:``},airq:{title:`POI_AIRQ`,icon:``},radiosonde:{title:`POI_RADIOSONDE`,icon:``},empty:{title:`POI_EMPTY`,icon:`t`}},Ue={stations:[`wind`,`temp`,`precip`]},We=[`pressure`,`gh`,`temp`,`deg0`],Ge=`/${xe}/plugins`,Ke={pollenAlder:[`POLLEN_ALDER`,`POLLEN_ALDER_SHORT`],pollenBirch:[`POLLEN_BIRC
1H`,`POLLEN_BIRCH_SHORT`],pollenGrass:[`POLLEN_GRASS`,`POLLEN_GRASS_SHORT`],pollenMugwort:[`POLLEN_MUGWORT`,`POLLEN_MUGWORT_SHORT`],pollenOlive:[`POLLEN_OLIVE`,`POLLEN_OLIVE_SHORT`],pollenRagweed:[`POLLEN_RAGWEED`,`POLLEN_RAGWEED_SHORT`]},qe=`whatsNew`,Je={pointFcstDisplay:`table`};var Ye=y({HttpError:()=>Xe}),Xe=class extends Error{constructor(e,t,n){super(t),this.status=e,this.message=t,this.responseText=n}};function Ze(e){"@babel/helpers - typeof";return Ze=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},Ze(e)}function Qe(e,t){if(Ze(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(Ze(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function $e(e){var t=Qe(e,`string`);return Ze(t)==`symbol`?t:t+``}function C(e,t,n){return(t=$e(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function et(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function w(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?et(Object(n),!0).forEach(function(t){C(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):et(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var tt=y({$:()=>qt,addQs:()=>Vt,bicubicFiltering:()=>Qt,c2kelvin:()=>fn,canvasRatio:()=>sn,capitalize:()=>gn,char2num:()=>ct,clamp:()=>D,clamp0X:()=>$t,clone:()=>vt,computeDewPointCelsius:()=>Mn,computeDewPointKelvin:()=>Nn,copy2clipboard:()=>Wt,createColorGradient:()=>Tn,cubicHermite:()=>Zt,debounce:()=>St,deg2rad:()=>yt,degToRad:()=>bt,download:()=>Gt,each:()=>_t,emptyFun:()=>pt,emptyGIF:()=>mt,escapeRegExp:()=>Pn,extractTileCoordsUrlPositionsFromParametricUrl:()=>kn,generateUuidV4:()=>Cn,getErrorMessage:()=>wn,getLeafletZoom:()=>An,getNativePlugin:()=>Kt,getPathFromTs:()=>_n,getRefs:()=>nn,hasDirection:()=>Ot,intersect:()=>cn,isEmptyObject:()=>ht,isFunction:()=>Jt,isNear:()=>At,isProfessionalStation:()=>ln,isTouchEvent:()=>Yt,isValidLang:()=>zt,isValidLatLonObj:()=>gt,isValidNumber:()=>dn,joinPath:()=>Bt,kelvin2c:()=>pn,lat01ToYUnit:()=>Nt,latDegToYUnit:()=>Pt,latLon2str:()=>dt,lerp:()=>en,lerpColor256:()=>tn,loadScript:()=>Ut,logError:()=>O,lonDegToXUnit:()=>Mt,longPressTime:()=>600,maxCanvasRatio:()=>2,normalizeLatLon:()=>E,num2char:()=>st,openInApp:()=>Dn,pad:()=>wt,parseQueryString:()=>vn,parseSeoUrl:()=>bn,preventDefault:()=>En,qs:()=>Ht,radToDeg:()=>xt,removeDiacritics:()=>hn,sanitizeHTML:()=>rn,scaleExponential:()=>on,scaleLinear:()=>an,seoLangRegex:()=>yn,smoothstep:()=>jt,spline:()=>Xt,startupPath:()=>Sn,str2latLon:()=>ft,subscribeToChange:()=>jn,template:()=>Tt,throttle:()=>Ct,toLocalTime:()=>On,tsDay:()=>it,tsHour:()=>T,tsMinute:()=>rt,tsSecond:()=>nt,unitXToLonDeg:()=>Ft,unitXToLonRad:()=>Lt,unitYToLatDeg:()=>It,unitYToLatRad:()=>Rt,unloadVideo:()=>Fn,vec2dir:()=>ut,vec2size:()=>lt,wait:()=>mn,wave2obj:()=>Dt,wind2obj:()=>Et,windDir2html:()=>kt,wrapCoords:()=>un});const nt=1e3,rt=60*nt,T=60*rt,it=24*T,at=`bcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789a`,ot=at.split(``),st=e=>{let t=``;do t=at.charAt(e%60)+t,e=Math.floor(e/60);while(e);return t},ct=e=>{let t=0;for(let n=0;n<e.length;n++)t=t*60+ot.indexOf(e.charAt(n));return t},lt=(e,t)=>Math.sqrt(e*e+t*t),ut=(e,t,n=1)=>Math.floor((Math.atan2(e,t)*180/Math.PI+180)/n)*n,dt=e=>{let t=Math.floor((e.lat+90)*100),n=Math.floor((e.lon+180)*100);return`${st(t)}a${st(n)}`},ft=e=>{let t=e.split(`a`);return{lat:ct(t[0])/100-90,lon:ct(t[1])/100-180}},pt=()=>{},mt=`data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==`,ht=e=>Object.keys(e).length===0,gt=e=>e&&typeof e==`object`&&`lat`in e&&`lon`in e&&!isNaN(+e.lat)&&!isNaN(+e.lon)||!1,E=e=>parseFloat(e).toFixed(3),_t=(e,t)=>{for(let n in e)t(e[n],n)},vt=(e,t)=>{if(e===null)return e;if(e instanceof Date)return new Date(e.getTime());if(e instanceof Array){let t=[];
1return e.forEach(e=>{t.push(e)}),t.map(e=>vt(e))}else if(typeof e==`object`){let n=w({},e);return Object.keys(n).forEach(e=>{(!t||t.includes(e))&&(n[e]=vt(n[e]))}),n}return e},yt=e=>e*Math.PI/180,bt=.017453292,xt=57.2957795,St=function(e,t,n){let r;return function(...i){let a=this;function o(){clearTimeout(r),r=0,n||e.apply(a,i)}let s=n&&!r;clearTimeout(r),r=setTimeout(o,t),s&&e.apply(a,i)}},Ct=function(e,t){let n,r,i=this;function a(){n=!1,r&&(o.apply(i,r),r=!1)}function o(...o){n?r=o:(e.apply(i,o),setTimeout(a,t),n=!0)}return o},wt=(e,t=2)=>{let n=String(e);for(;n.length<t;)n=`0`+n;return n},Tt=(e,t)=>e?e.replace(/\{\{?\s*(.+?)\s*\}?\}/g,(e,n)=>t&&n in t?String(t[n]):``):``,Et=([e,t])=>({wind:lt(e,t),dir:ut(e,t,10)}),Dt=([e,t,n])=>({period:lt(e,t),dir:ut(e,t,10),size:n}),Ot=e=>typeof e.dir==`number`&&typeof e.wind==`number`&&e.dir<=360&&e.wind>=0,kt=e=>Ot(e)?`<div class="iconfont" style="transform: rotate(${e.dir}deg); -webkit-transform:rotate(${e.dir}deg);">"</div>`:``,At=(e,t)=>Math.abs(e.lat-+t.lat)<.01&&Math.abs(e.lon-+t.lon)<.01,D=(e,t,n)=>
1Math.max(Math.min(e,n),t),jt=(e,t,n)=>{let r=D((n-e)/(t-e),0,1);return r*r*r*(r*(r*6-15)+10)},Mt=e=>.5+.00277777777777777*e,Nt=e=>(Math.PI-Math.log(Math.tan((1-e)*.5*Math.PI)))/(2*Math.PI),Pt=e=>Nt(.5-.00555555555555555*e),Ft=e=>(e-.5)*360,It=e=>180*(Math.atan(Math.exp(Math.PI-2*Math.PI*e))/(.5*Math.PI))-90,Lt=e=>(e-.5)*2*Math.PI,Rt=e=>2*Math.atan(Math.exp(Math.PI-2*e*Math.PI))-.5*Math.PI,zt=e=>ye.includes(e),Bt=(e,t)=>(e.endsWith(`/`)&&(e=e.slice(0,-1)),t.startsWith(`/`)?`${e}${t}`:`${e}/${t}`),Vt=(e,t)=>`${e}${/\?/.test(e)?`&`:`?`}${t}`,Ht=e=>{let t=[];return Object.entries(e).forEach(([e,n])=>{n!==void 0&&t.push(`${e}=${n}`)}),t.sort().join(`&`)},Ut=(e,t)=>new Promise((n,r)=>{let i=document.createElement(`script`);i.type=`text/javascript`,i.async=!0,i.onload=()=>{n()},i.onerror=e=>{r(e)},document.head.appendChild(i),t&&typeof t==`function`&&t(i),i.src=e}),Wt=e=>{let t=document.createElement(`textarea`);t.value=e,document.body.appendChild(t),t.select(),document.execCommand(`copy`),document.body.removeChild(t)},Gt=(e,t,n)=>{let r=document.createElement(`a`),i=e instanceof Blob?e:new Blob([e],{type:t});r.style.display=`none`,document.body.appendChild(r),window.URL&&(r.href=window.URL.createObjectURL(i)),r.setAttribute(`download`,n),r.click(),window.URL&&window.URL.revokeObjectURL(r.href),document.body.removeChild(r)};function Kt(e){return null}const qt=(e,t)=>(t||document).querySelector(e),Jt=e=>typeof e==`function`,Yt=e=>!!(`touches`in e&&e.touches),Xt=(e,t,n,r,i)=>.5*(2*t+(-e+n)*i+(2*e-5*t+4*n-r)*i*i+(-e+3*t-3*n+r)*i*i*i),Zt=(e,t,n,r,i)=>{let a=-e*.5+3*t*.5-3*n*.5+r*.5,o=e-5*t*.5+2*n-r*.5,s=-e*.5+n*.5,c=t;return a*i*i*i+o*i*i+s*i+c},Qt=(e,t,n)=>Zt(Zt(e[0],e[1],e[2],e[3],t),Zt(e[4],e[5],e[6],e[7],t),Zt(e[8],e[9],e[10],e[11],t),Zt(e[12],e[13],e[14],e[15],t),n),$t=(e,t)=>Math.min(Math.max(e,0),t-1),en=(e,t,n)=>e+n*(t-e),tn=(e,t,n)=>e.map((r,i)=>D(en(e[i],t[i],n),0,255)),nn=e=>{var t;let n=typeof e==`string`?qt(e):e,r={};return((t=n==null?void 0:n.querySelectorAll(`[data-ref]`))==null?[]:t).forEach(e=>{e.dataset.ref&&(r[e.dataset.ref]=e)}),{node:n,refs:r}},rn=e=>e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&#x27;`).replace(/\//g,`&#x2F;`);function O(e,t,n,r){let i=new CustomEvent(`windyCustomError`,{detail:{moduleName:e,msg:t,errorObject:n,additionalInfo:r}});document.dispatchEvent(i),console.error(e,t,n,r)}const an=({domain:e,range:t,clip:n})=>{let[r,i]=t,[a,o]=e,s=(i-r)/(o-a),[c,l]=r>i?[r,i]:[i,r],u=e=>(e-a)*s+r,d=e=>D(u(e),l,c),[f,p]=a>o?[a,o]:[o,a],m=e=>(e-r)/s+a;return{get:n?d:u,invert:n?e=>D(m(e),p,f):m}},on=({domain:e,range:t,clip:n})=>{let[r,i]=e,[a,o]=t,s=i-r,c=o/a,[l,u]=a>o?[a,o]:[o,a],d=e=>a*c**+((e-r)/s),f=e=>D(d(e),u,l),[p,m]=r>i?[r,i]:[i,r],h=e=>r+Math.log(e/a)/Math.log(c)*s;return{get:n?f:d,invert:n?e=>D(h(e),m,p):h}},sn=Math.min(window.devicePixelRatio||1,2),cn=e=>{let t=new Set(e[0]);for(let n of e.slice(1)){let e=new Set(n);for(let n of t)e.has(n)||t.delete(n)}return[...t]},ln=e=>/^(ad|wmo|buoy|ship)$/.test(e),un=e=>{let t=1<<e.z;return e.x%=t,e.x<0&&(e.x+=t),e},dn=e=>typeof e==`number`&&!isNaN(e),fn=e=>e+273.15,pn=e=>e-273.15,mn=e=>new Promise(t=>setTimeout(t,e)),hn=e=>e.normalize(`NFD`).replace(/[\u0300-\u036f]/g,``),gn=e=>e.charAt(0).toUpperCase()+e.slice(1),_n=(e,t=`$1$2$3$4`)=>new Date(e).toISOString().replace(/(\d\d\d\d)-(\d\d)-(\d\d)T(\d\d):.*/,t),vn=e=>{if(!e||!/\S+=\S+/.test(e))return;e=e.replace(/^\?/,``);let t=e.split(`&`),n={};for(let e=0;e<t.length;e++){let r=t[e].split(`=`);try{n[decodeURIComponent(r[0])]=decodeURIComponent(r[1]||``)}catch(e){}}return n},yn=/^\/(zh-TW|[a-z]{2})(\/.*)?$/,bn=e=>{let t=null,n=e,r=yn.exec(e);r&&(n=r[2]);let i;return(i=/^\/-(?:[^0-9/][^/]+)(?:-(\w+))(?:[^/]*)$/.exec(n))?(t=i[1],n=`/`):(i=/^\/-(?:[^0-9/][^/]+)?(\/.+)$/.exec(n))&&(n=i[1]),{purl:n,overlay:t}};let xn;try{xn=decodeURIComponent(window.location.pathname)}catch(e){console.error(e)}const Sn=xn||`/`,Cn=()=>{let e=()=>Math.floor((1+Math.random())*65536).toString(16).substring(1);return e()+e()+`-`+e()+`-`+e()+`-`+e()+`-`+e()+e()+e()},wn=e=>{if(e instanceof Xe)return e.responseText||e.message;if(e instanceof Error)return e.message;if(typeof e==`string`)return e;if(typeof e==`object`&&e){if(`message`in e&&typeof e.message==`string`)return e.message;try{return JSON.stringify(e)}catch(t){return e.toString()}}return`Unknown error`},Tn=(e,t)=>t.map((t,n)=>[t,e[n]]),En=e=>t=>{t.preventDefault(),e(t)}
1,Dn=()=>{window.location.href=_e===`ios`?`https://apps.apple.com/app/apple-store/id1161387262?pt=118417623&ct=webapp&mt=8`:`https://play.google.com/store/apps/details?id=com.windyty.android&utm_source=menu&utm_medium=windy&utm_campaign=openAppLink&utm_content=openAppLink`},On=(e,t)=>{let n=new Date(e+t*T);return{h:n.getUTCHours(),m:n.getUTCMinutes(),day:n.getUTCDate(),weekDay:n.getUTCDay(),yearMonthDay:n.toISOString().split(`T`)[0]}};function kn(e){let t={x:-1,y:-1,z:-1};return e.split(`/`).forEach((e,n)=>{switch(e){case`{x}`:t.x=n;break;case`{y}`:t.y=n;break;case`{z}`:t.z=n;break}}),t}const An=e=>e+1,jn=(e,t)=>{let n=!0,r=e.subscribe(e=>{n||t(e)});return n=!1,r},Mn=(e,t)=>{let n=17.62,r=243.12;e=D(e,1e-5,100);let i=Math.log(e/100)+n*t/(r+t);return r*i/(n-i)},Nn=(e,t)=>fn(Mn(e,pn(t))),Pn=e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`),Fn=e=>{e.pause(),e.removeAttribute(`src`);let t=e.querySelectorAll(`source`);for(let e=0;e<t.length;e++)t[e].removeAttribute(`src`);e.load()},In=[],Ln=(e,t,n)=>{In.push({ts:Date.now(),txt:`${e}: ${t}${typeof n==`string`?` `+n:``}`}),In.length>5&&In.shift()},Rn=e=>{let t=e-1e3,n=In.filter(({ts:e})=>e>t);return n.length?n.map(({ts:t,txt:n})=>`${n} (${e-t}ms ago at ${t})`).join(`
2`):void 0};var zn=y({Evented:()=>Bn}),Bn=class{constructor(e){C(this,`latestId`,void 0),C(this,`_eventedCache`,void 0),C(this,`listenAllMethod`,void 0),C(this,`terminalColor`,void 0),C(this,`ident`,void 0),C(this,`trigger`,void 0),C(this,`fire`,void 0),this.latestId=1,this._eventedCache={},this.trigger=this.emit,this.fire=this.emit,this.ident=e.ident}emit(e,...t){Ln(this.ident,String(e),t[0]);let n=this._eventedCache[e];if(n)for(let r=n.length;r--;){let i=n[r];try{i.callback.call(i.context,...t),i.once&&this.off(i.id)}catch(n){O(`Evented`,`Failed to call ${String(e)}`,n,{extra:{data:t}})}}this.listenAllMethod&&this.listenAllMethod(e,...t)}on(e,t,n,r){return this.latestId=this.latestId||0,this._eventedCache?(e in this._eventedCache||(this._eventedCache[e]=[]),this._eventedCache[e].push({id:++this.latestId,callback:t,context:n||this,once:r||!1}),this.latestId):this.latestId}once(e,t,n){return this.on(e,t,n,!0)}off(e,t,n){if(typeof e==`number`)for(let t in this._eventedCache){let n=this._eventedCache[t];if(n){for(let t=n.length;t--;)n[t].id===e&&n.splice(t,1);n.length===0&&delete this._eventedCache[t]}}else{let r=this._eventedCache[e];if(r){for(let e=r.length;e--;)r[e].callback===t&&(!n||n===r[e].context)&&r.splice(e,1);this._eventedCache&&r.length===0&&delete this._eventedCache[e]}}}offAll(){this._eventedCache={}}listenAll(e){this.listenAllMethod=e}};const k=[!0,!1],Vn=e=>typeof+e==`number`&&!isNaN(+e),A=e=>e!==void 0&&typeof e==`object`,Hn=e=>gt(e)||e==null,Un=e=>e!==null&&gt(e)&&Number.isInteger(e.zoom)&&(e.source===`maps`||e.source===`globe`),Wn=e=>e!==void 0&&typeof e==`string`,Gn=e=>e===null||Wn(e),Kn=e=>e===null||!isNaN(Number(e)),qn=e=>e.slice().sort().toString(),Jn=(e,t)=>qn(e)===qn(t),j={overlay:{def:`wind`,allowed:we},level:{def:`surface`,allowed:Se},acRange:{def:12,allowed:Vn},levelsRange:{def:`850h-300h`,allowed:Wn},timestamp:{def:Date.now(),allowed:Vn},isolinesType:{def:`pressure`,allowed:We,save:!0},isolinesOn:{def:!1,allowed:k,save:!0},startUpLastProduct:{def:null,allowed:[...Pe,null],save:!0,nativeSync:!0,premiumOnly:!0},product:{def:`ecmwf`,allowed:Pe},availProducts:{def:[`ecmwf`],allowed:Array.isArray,compare:Jn,readOnly:!0},visibleProducts:{def:[`ecmwf`],allowed:Array.isArray,compare:Jn},preferredProduct:{def:`mblue`,allowed:[`mblue`,`ecmwf`,`gfs`,`icon`,`iconEu`],readOnly:!0},animation:{def:!1,allowed:k},animationSpeed:{def:`normal`,allowed:[`normal`,`fast`,`very-fast`],save:!0},calendar:{def:null,allowed:A,readOnly:!0},availLevels:{def:[...Se],allowed:e=>e.every(e=>Se.includes(e)),readOnly:!0},particlesAnim:{def:`on`,allowed:[`on`,`off`,`intensive`],save:!0},camsPreviews:{def:!0,allowed:k,save:!0},graticule:{def:!1,allowed:k,save:!0},latlon:{def:!1,allowed:k,save:!0},showPickerElevation:{def:!1,allowed:k,save:!0,premiumOnly:!0},pickerDragging:{def:!1,allowed:k,save:!1},lang:{def:`auto`,allowed:e=>e===`auto`||zt(e),save:!0,sync:!0},englishLabels:{def:!1,allowed:k,save:!0,sync:!0},numDirection:{def:!1,allowed:k,save:!0,sync:!0},marketingConsent:{def:!1,allowed:k,save:!0,sync:!0},hourFormat:{def:`24h`,allowed:[`12h`,`24h`],save:!0,sync:!0,nativeSync:!0},country:{def:`xx`,save:!0,allowed:e=>/[a-z][a-z0-9]/.test(e)},defaultUnits:{def:`unset`,allowed:[`unset`,`imperial`,`metric`],save:!0},map:{def:`sznmap`,allowed:[`sznmap`,`sat`,`winter`]},mapLibrary:{def:`leafletGl`,allowed:[`leafletGl`,`globe`]},showWeather:{def:!0,allowed:k,save:!0,premiumOnly:!0},stormSettingsLightning:{def:!0,allowed:k,save:!0},usedLang:{def:`en`,allowed:ye,save:!0,sync:!0},lastTimezoneOffset:{def:new Date().getTimezoneOffset(),allowed:Vn,save:!0,sync:!0},particles:{def:{multiplier:1,velocity:1,width:1,blending:1,opacity:1},save:!0,allowed(e){let t;if(!e||typeof e!=`object`)return!1;for(let n in this.def)if(t=e[n],typeof t!=`number`||t>2||t<0)return!1;return!0}},startUp:{def:`ip`,allowed:[`ip`,`gps`,`location`,`last`],save:!0,nativeSync:!0},startUpLastPosition:{def:{lat:50,lon:14,zoom:4,source:`maps`},allowed:Un,save:!0,nativeSync:!0},homeLocation:{def:null,allowed:Hn,save:!0,sync:!0,nativeSync:!0}
2,startUpOverlay:{def:`wind`,allowed:we,save:!0,nativeSync:!0,premiumOnly:!0},startUpLastOverlay:{def:!1,allowed:k,save:!0,nativeSync:!0,premiumOnly:!0},startUpZoom:{def:null,allowed:e=>e===null||e>=3&&e<=11,save:!0,nativeSync:!0},ipLocation:{def:null,allowed:Hn,save:!0,nativeSync:!0},gpsLocation:{def:null,allowed:Hn,save:!0,nativeSync:!0},startupReverseName:{def:null,allowed:A,save:!0},email:{def:``,allowed:e=>/\S+@\S+/.test(e),save:!0,sync:!0},metarsRAW:{def:!1,allowed:k,save:!0,sync:!0},sessionCounter:{def:0,allowed:Vn,save:!0},firstUserSession:{def:0,allowed:Vn,save:!0},seenRadarInfo:{def:!1,save:!0,allowed:k},liveAlertsWarningDismissed:{def:!1,save:!0,allowed:k},detailLocation:{def:null,allowed:Hn},detailDefault1h:{def:!1,save:!0,sync:!0,premiumOnly:!0,allowed:k},detailDefaultExtended:{def:!1,save:!0,sync:!0,premiumOnly:!0,allowed:k},detailDefaultEnabled:{def:!1,save:!0,sync:!0,premiumOnly:!0,allowed:k},detailDefaultDisplay:{def:`table`,save:!0,sync:!0,premiumOnly:!0,allowed:[`table`,`meteogram`,`airgram`,`waves`,`wind`,`airq`]},detailDefaultProduct:{def:null,save:!0,sync:!0,premiumOnly:!0,allowed:e=>e===null||Fe.includes(e)},detailRememberLast:{def:!1,save:!0,sync:!0,premiumOnly:!0,allowed:k},detailSyncTimeWithMap2:{def:!0,save:!0,sync:!0,allowed:k},detailDebugMode:{def:!1,save:!0,allowed:k},webcamsDaylight:{def:!1,allowed:k},capDisplay:{def:`all`,allowed:[`all`,`today`,`tomm`,`later`]},radarTimestamp:{def:Date.now(),allowed:Vn},radarCalendar:{def:null,allowed:A},blitzOn:{def:!0,allowed:k,save:!0},blitzSoundOn:{def:!0,allowed:k,save:!0},blitzRenderMode:{def:`normal`,allowed:[`normal`,`satellite`]},showThickBorders:{def:!1,allowed:k,save:!1},satelliteTimestamp:{def:Date.now(),allowed:Vn},satelliteCalendar:{def:null,allowed:A},satelliteLastOutageMessageTs:{def:null,allowed:Kn,save:!0},radSatFlowOn:{def:!0,allowed:k,save:!0},radarRenderPType:{def:!0,allowed:k,save:!0},radsatTimestamp:{def:Date.now(),allowed:Vn},lastRenderedTimestamp:{def:null,allowed:Kn},archiveOn:{def:!1,allowed:k},archiveTimestamp:{def:0,allowed:Vn,save:!0},archiveRange:{def:24,allowed:Vn,save:!0},pois:{def:`favs`,allowed:Object.keys(He),save:!0},subPois:{def:{},allowed:A,save:!0},poisTemporary:{def:`empty`,allowed:Object.keys(He)},favPois:{def:[`cams`,`cities`,`wind`,`temp`,`metars`,`empty`],allowed:e=>Array.isArray(e),save:!0,sync:!0},visibility:{def:!0,allowed:k},displayLocation:{def:!0,allowed:k,save:!0},vibrate:{def:!0,allowed:k,save:!0},donations:{def:[],allowed:Array.isArray,compare:Jn,save:!0,sync:!0},zuluMode:{def:!1,allowed:k,save:!0,premiumOnly:!0},stationsSort:{def:`profi`,allowed:[`profi`,`distance`],save:!0},stationCompareModel:{def:`noModel`,allowed:Wn,save:!0},subscription:{def:null,allowed:e=>!0,save:!0,nativeSync:!0},subscriptionInfo:{def:null,allowed:A},pendingSubscription:{def:null,allowed:Gn,save:!0},failedSubscriptionPayment:{def:null,allowed:Gn,save:!0},notifications:{def:null,allowed:A,save:!0,sync:!0},badgeNumber:{def:0,allowed:Vn,save:!0},user:{def:null,allowed:A,save:!0,nativeSync:!0},userToken:{def:null,allowed:Wn,save:!0,nativeSync:!0},authHash:{def:null,allowed:Wn,save:!0,nativeSync:!0,watchSync:!0},lastPoiLocation:{def:null,allowed:Hn},pickerLocation:{def:null,allowed:e=>e===null||Hn(e)},mapCoords:{def:null,allowed:Hn},unresolvedErrors:{def:[],allowed:Array.isArray},closedErrors:{def:[],allowed:Array.isArray,save:!0,nativeSync:!0},showDailyNotifications:{def:!1,allowed:k,nativeSync:!0,save:!0},appReviewPluginShown:{def:null,allowed:Kn,nativeSync:!0,save:!0},systemAppReviewDialogShown:{def:null,allowed:Kn,nativeSync:!0,save:!0},appReviewLastVersion:{def:null,allowed:Gn,nativeSync:!0,save:!0},appReviewDialogLeaveForLater:{def:!1,allowed:k,save:!0},skipAppReviewNecessaryConditions:{def:!1,allowed:k,save:!0},favOverlaysMobile:{def:[],allowed:Array.isArray,save:!0,sync:!0},favOverlaysDesktop:{def:[],allowed:Array.isArray,save:!0,sync:!0},favPoisMobile:{def:[],allowed:Array.isArray,save:!0,sync:!0},mobileMenuFilter:{def:`all`,allowed:[`all`,`wind`,`rain`,`sea`,`airQ`,`drought`,`temp`,`warnings`,`clouds`,`search`]},connection:{def:!0,allowed:k},pickerMobileTimeout:{def:`6`,allowed:[`3`,`6`,`9`,`12`,`always`],save:!0,sync:!0},changeDetailOnMapDrag:{def:!1,allowed:k,save:!0,sync:!1},displayHeliports:{def:!1,allowed:k,save:!0},displayAirspaces:{def:!0,allowed:k,save:!0},displayAdStations:{def:!0,allowed:k,save:!0},displayWMOStations:{def:!0,allowed:k,save:!0},displayMadisPWStations:{def:!0,allowed:k,save:!0},displayShipStations:{def:!0,allowed:k,save:!0},stationCompareHiddenProducts:{def:[],allowed:Array.isArray,save:!0,sync:!0},consent:{def:null,allowed:A,save:!0,sync:!0},analyticsConsentRequired:{def:null,allowed:k,save:!0},youtubeConsent:{def:null,allowed:A,save:!0,sync:!0},twitterConsent:{def:null,allowed:A,save:!0,sync:!0},soundingIsSkewTlogP:{def:!1,save:!0,allowed:k},appLocalStorageCounter:{def:0,allowed:Vn,nativeSync:!1,save:!0},rhMenuArrangeMode:{def:!1,allowed:k},userInterests:{def:[],allowed:Array.isArray,save:!0,sync:!0},onboardingFinished:{def:!1,allowed:k,save:!0,sync:!0},locationPermissionsGranted:{def:!1,allowed:k,save:!0},doNotShowLocationPermissionsPopup:{def:!1,allowed:k,save:!0},pTypeMultiSampled:{def:!1,allowed:k},locationPermissionsPopupShown:{def:null,allowed:Kn,save:!0},loginAndFinishAction:{def:null,allowed:A,save:!0},favsFilter:{def:[],allowed:Array.isArray,save:!0},pushNotificationsReady:{def:!1,allowed:k},rplannerDir:{def:`north`,allowed:[`horizontal`,`vertical`,`north`],save:!0}
2,rplannerMotionSpeed:{def:{elevation:0,car:22.2222,boat:6.17333,vfr:56.5889,ifr:144.044,airgram:22.2222},allowed:A,save:!0},suspendSoundAndHaptic:{def:!1,allowed:k},advancedDebugConsole:{def:!1,save:!0,allowed:k},pinMenuActiveTab:{def:`layers`,allowed:[`models`,`layers`],save:!0},radarPlusSegmentRange:{def:`short`,allowed:[`short`,`medium`,`long`],save:!1},radarPlusAnimationRange:{def:null,allowed:[`short`,`medium`,`long`,null],save:!1},perfOverlayEnabled:{def:!1,save:!0,allowed:k},tiledPoiLayer:{def:null,allowed:A},airportDebugMode:{def:!1,save:!0,allowed:k},showMyPosition:{def:!1,allowed:k},searchInputValue:{def:``,allowed:Wn},searchInputLoading:{def:!1,allowed:k},soundingProduct:{def:`ecmwf`,allowed:Pe,save:!0},multimodelPinnedModels:{def:[],allowed:e=>Array.isArray(e)&&e.every(e=>Fe.includes(e)),save:!0,sync:!0},multimodelBlockedModels:{def:[],allowed:e=>Array.isArray(e)&&e.every(e=>Fe.includes(e)),save:!0,sync:!0},userSelectedPointFcstModel:{def:null,allowed:[`ecmwf`,`mblue`,null],save:!0,sync:!0},tileLayerLoaderPresent:{def:!1,allowed:k},promoControls:{def:{globeRotationSpeed:0,showLabels:!0,showCityLabels:!0,showCapitalCityLabels:!0,showBigCityLabels:!0,showTownLabels:!0,showVillageLabels:!0,showCountryLabels:!0,showGeographyLabels:!0,showMarkers:!0,showHtLabels:!0,showStars:!0,hideGui:!1},allowed:A}},Yn={isAvbl:!1,put:(e,t)=>window.localStorage.setItem(e,JSON.stringify(t)),hasKey:e=>e in window.localStorage,get:e=>{let t=window.localStorage.getItem(e);return t?JSON.parse(t):null},remove:e=>window.localStorage.removeItem(e)},Xn={},Zn={isAvbl:!1,put:(e,t)=>Xn[e]=t,hasKey:e=>e in Xn,get:e=>e in Xn?Xn[e]:null,remove:e=>delete Xn[e]};try{if(window.localStorage.setItem(`test`,`bar`),window.localStorage.getItem(`test`)!==`bar`)throw Error(`Comparsion failed`);window.localStorage.removeItem(`test`),Yn.isAvbl=!0}catch(e){}var M=Yn.isAvbl?Yn:Zn;const Qn=new Map;let $n=!1;const N=new class extends Bn{constructor(...e){super(...e),C(this,`defineProperty`,(e,t,n)=>{j[e][t]=n}),C(this,`remove`,(e,t={doNotCheckValidity:!0})=>{this.set(e,null,t)}),C(this,`insert`,(e,t)=>{j[e]=t})}setDefault(e,t){j[e].def=t,Qn.delete(e)}set(e,t,n={}){let r=j[e];if(!r)throw Error(`Cannot find "${e}" key in dataSpecifications`);if(!n.doNotCheckValidity&&!this.isValid(r,t))return this.isAsyncStore(r)?Promise.reject():!1;if(r.syncSet&&(n.forceChange||this.wasChanged(e,r,t))){let i=r.syncSet(t);if(n.forceChange||this.wasChanged(e,r,i))return this.setFinally(e,r,n,i),!0}else if(this.isAsyncStore(r))if(n.forceChange||this.wasChanged(e,r,t)){let i=r.asyncSet(t);return i.then(t=>{(n.forceChange||this.wasChanged(e,r,t))&&this.setFinally(e,r,n,t)}).catch(n=>console.error(`store: Unable to change store value ${e}, ${t}`,n)),i}else return Promise.resolve(t);else if(n.forceChange||this.wasChanged(e,r,t))return this.setFinally(e,r,n,t),!0;return!1}getDefault(e){return j[e].def}get(e,t){if(Qn.has(e)&&!(t!=null&&t.forceGet))return Qn.get(e);let{premiumOnly:n,def:r,save:i}=j[e];if(n&&!$n)return r;let a;return i&&M.isAvbl?(a=M.get(`settings_${e}`),a===null&&!(t!=null&&t.forceGet)?a=r:this.isValid(j[e],a)||(console.error(`store: Attempt to get invalid value from localStorage: ${e}`),a=r)):a=r,t!=null&&t.forceGet||Qn.set(e,a),a}isAsyncStore(e){return!!(`asyncSet`in e&&e.asyncSet)}wasChanged(e,t,n){return t.compare?!t.compare(n,this.get(e)):Qn.has(e)?Qn.get(e)!==n:this.getDefault(e)!==n}isValid(e,t){return typeof e.allowed==`function`?e.allowed(t):Array.isArray(e.def)?Array.isArray(t)&&t.every(t=>e.allowed.includes(t)):e.allowed.includes(t)}setFinally(e,t,n,r){if(r===null?Qn.delete(e):Qn.set(e,r),t.save&&!n.doNotStore&&M.isAvbl){let i=n.update||Date.now();M.put(`settings_${e}`,r),t.sync&&(t.update=i,M.put(`settings_${e}_ts`,i),M.put(`lastSyncableUpdatedItem`,i)),this.get(`user`)&&t.sync&&!n.doNotSaveToCloud&&this.emit(`_cloudSync`)}
2this.emit(e,r===null?t.def:r,n.UIident)}}({ident:`store`});$n=!!N.get(`subscription`),$n||N.once(`subscription`,e=>$n=!!e);const P=new Bn({ident:`bcast`});var er=y({generateDeviceId:()=>tr,getDeviceID:()=>ar,getDeviceInfo:()=>or});const tr=()=>{let e=Cn();return M.put(`UUID`,e),e};let nr=null;const rr=M.get(`UUID`)||tr(),ir=Kt(`Device`);ir&&ir.getInfo().then(e=>{nr=e}),N.get(`firstUserSession`)||N.set(`firstUserSession`,Date.now());const ar=()=>rr,or=()=>nr;var sr=y({addAuthParams:()=>gr,addTileAuthParams:()=>_r});const cr=[`https://ims.windy.com`,`https://rdr.windy.com`,`https://sat.windy.com`];let lr=``,ur=0;const dr=ar(),fr=N.get(`sessionCounter`),pr=e=>{lr=Ht({token2:N.get(`userToken`)||`pending`,uid:dr,sc:fr,pr:+e,v:he})},mr=e=>cr.some(t=>e.startsWith(t)),hr=e=>lr?Vt(e,lr):e,gr=e=>Vt(hr(e),`poc=${++ur}`),_r=e=>mr(e)?hr(e):e;pr(!0),N.on(`userToken`,()=>pr(!1));var vr=y({testNetworkConnection:()=>wr});let yr=null,br=!1;async function xr(){try{let{status:e}=await fetch(`https://www.windy.com/img/favicon.ico`,{method:`HEAD`,cache:`no-store`});return e>=200&&e<400}catch(e){return!1}}function Sr(){yr&&(clearInterval(yr),yr=null)}function Cr(e){e&&(N.set(`connection`,!0),document.body.classList.remove(`connection-is-offline`),br=!1,Sr())}async function wr(){br||(br=!0,await xr()?Cr(!0):(Sr(),N.set(`connection`,!1),document.body.classList.add(`connection-is-offline`),yr=setInterval(async()=>{Cr(await xr())},2e3)))}window.addEventListener(`offline`,wr),window.addEventListener(`online`,wr);var Tr=class{constructor(e){C(this,`size`,void 0),C(this,`limit`,void 0),C(this,`_keymap`,void 0),C(this,`tail`,void 0),C(this,`head`,void 0),this.size=0,this.limit=e,this._keymap={}}put(e,t){let n={key:e,value:t,older:void 0};if(this._keymap[e]=n,this.tail?(this.tail.newer=n,n.older=this.tail):this.head=n,this.tail=n,this.size===this.limit)return this.shift();this.size++}toJSON(){let e=[],t=this.head;for(;t;)e.push({key:t.key,value:t.value}),t=t.newer;return e}shift(){let e=this.head;return e&&this.head&&(this.head.newer?(this.head=this.head.newer,this.head.older=void 0):this.head=void 0,e.newer=e.older=void 0,delete this._keymap[e.key]),e}get(e){let t=this._keymap[e];if(t!==void 0)return t===this.tail?t.value:(t.newer&&(t===this.head&&(this.head=t.newer),t.newer.older=t.older),t.older&&(t.older.newer=t.newer),t.newer=void 0,t.older=this.tail,this.tail&&(this.tail.newer=t),this.tail=t,t.value)}remove(e){let t=this._keymap[e];if(t)return delete this._keymap[t.key],t.newer&&t.older?(t.older.newer=t.newer,t.newer.older=t.older):t.newer?(t.newer.older=void 0,this.head=t.newer):t.older?(t.older.newer=void 0,this.tail=t.older):this.head=this.tail=void 0,this.size--,t.value}removeAll(){this.head=this.tail=void 0,this.size=0,this._keymap={}}forEach(e){let t=this.head;for(;t;)e(t.value,`${t.key}`),t=t.newer}},Er=`accumulations.airport.alerts.appreview.articles.consent.defaultmodelselector.detail.distance.favs.garmin.hurricanes.info.langs.lib.livealerts.menu.menudesc.notifications.onboarding.picker.products.radsat.register.reportissue.search.settings.sounding.startuppromos.station.subscription.sunmoon.watchface.webcams.widgetspromo`.split(`.`),Dr={MON:`Monday`,TUE:`Tuesday`,WED:`Wednesday`,THU:`Thursday`,FRI:`Friday`,SAT:`Saturday`,SUN:`Sunday`,MON2:`Mon`,TUE2:`Tue`,WED2:`Wed`,THU2:`Thu`,FRI2:`Fri`,SAT2:`Sat`,SUN2:`Sun`,MON3:`M`,TUE3:`T`,WED3:`W`,THU3:`T`,FRI3:`F`,SAT3:`S`,SUN3:`S`,SMON01:`Jan`,SMON02:`Feb`,SMON03:`Mar`,SMON04:`Apr`,SMON05:`May`,SMON06:`Jun`,SMON07:`Jul`,SMON08:`Aug`,SMON09:`Sep`,SMON10:`Oct`,SMON11:`Nov`,SMON12:`Dec`,YES:`Yes`,NO:`No`,TODAY:`Today`,TOMORROW:`Tomorrow`,LATER:`Later`,ALL:`All`,HOURS_SHORT:`hrs`,FOLLOW:`Follow us`,EMBED:`Embed widget on page`,EMBED2:`Embed widget`,MENU:`Menu`,MENU_SETTINGS:`Settings`,MENU_HELP:`Help`,MENU_ABOUT:`About us`,MENU_LOCATION:`Find my location`,MENU_FULLSCREEN:`Fullscreen mode`,MENU_DISTANCE:`Distance & planning`,MENU_MEASURE_DISTANCE:`Measure distance`,MENU_MOBILE:`Download App`,MENU_FAVS:`Favorites`,MENU_ALERTS:`Alerts`,MENU_FEEDBACK:`Feedback`,MENU_VIDEO:`Create video or animated GIF`,MENU_ERROR:`Error c
2onsole`,MENU_NEWS:`Weather news`,MENU_TUTORIALS:`Tutorials`,MENU_SUN_MOON:`Sun/Moon position`,MENU_WIND_TRAJECTORIES:`Wind trajectories`,NOTIFICATIONS:`Notifications`,SHOW_PICKER:`Show weather picker`,TOOLBOX_INFO:`info`,TOOLBOX_ANIMATION:`animation`,TOOLBOX_START:`Hide/show animated particles`,MENU_F_MODEL:`Data`,MENU_U_INTERVAL:`Update interval`,MENU_D_UPDATED:`Updated`,OUTDATED:`Outdated`,MENU_D_REFTIME:`Reference time`,MENU_D_NEXT_UPDATE:`Next update expected at:`,ABOUT_OVERLAY:`About`,ABOUT_DATA:`About these data`,OVERLAY:`Layer`,MODEL:`Forecast model`,PROVIDER:`Provider`,WIND:`Wind`,GUST:`Wind gusts`,GUSTACCU:`Wind accumulation`,TURBULENCE:`Clear air turbulence`,TURBULENCE_LIGHT2:`Light`,TURBULENCE_MODERATE2:`Moderate`,TURBULENCE_SEVERE2:`Severe`,TURBULENCE_EXTREME2:`Extreme`,ICING2:`Icing`,ICING_TRACE2:`Trace`,ICING_LIGHT2:`Light`,ICING_MODERATE2:`Moderate`,ICING_SEVERE2:`Severe`,WIND_DIR:`Wind dir.`,TEMP:`Temperature`,FEEL_TEMP:`Feels like`,DISTANCE:`Distance`,PRESS:`Pressure`,CLOUDS:`Clouds, rain`,CLOUDS2:`Clouds`,CLOUD_ALT:`Cloud base`,CLOUDS_AND_AVIATION:`Clouds, aviation`,RADAR:`Weather radar`,RADAR_SHORT:`Radar`,RADAR_BLITZ:`Radar, lightning`,SATELLITE:`Satellite`,TOTAL_CLOUDS:`Total clouds`,LOW_CLOUDS:`Low clouds`,MEDIUM_CLOUDS:`Medium clouds`,HIGH_CLOUDS:`High clouds`,CAPE:`CAPE Index`,RAIN:`Rain, snow`,RAIN_THUNDER:`Rain, thunder`,RAIN3H:`Precip. past 3h`,JUST_RAIN:`Rain`,CONVECTIVE_RAIN:`Convective r.`,RAINRATE:`Max. rain rate`,LIGHT_THUNDER:`Light thunder`,THUNDER:`Thunderstorms`,HEAVY_THUNDER:`Heavy thunder`,SNOW:`Snow`,OZONE:`Ozone layer`,PM2P5:`PM2.5`,AIR_QUALITY:`Air quality`,AQI:`Air quality index`,NO22:`NO₂`,AOD550:`Aerosol`,TCSO2:`SO₂`,GO3:`Surface Ozone`,SHOW_GUST:`force of wind gusts`,RH:`Humidity`,WAVES:`Waves`,WAVES2:`Waves, sea`,SWELL:`Swell`,SWELL1:`Swell 1`,SWELL2:`Swell 2`,SWELL3:`Swell 3`,WWAVES:`Wind waves`,ALL_WAVES:`All waves`,SWELLPER:`Swell period`,RACCU:`Rain accumulation`,RACCU_SHORT:`Rain accu.`,SACCU:`Snow accumulation`,ACCU:`Accumulations`,RAINACCU:`RAIN ACCUMULATION`,SNOWACCU:`SNOW ACCUMULATION`,SNOWCOVER:`Actual Snow Cover`,SST:`Surface sea temperature`,SST2:`Sea temperature`,CURRENT:`Currents`,CURRENT_TIDE:`Tidal currents`,VISIBILITY:`Visibility`,SURFACE_VISIBILITY:`Surface visibility`,ACTUAL_TEMP:`Actual temperature`,SSTAVG:`Average sea temperature`,AVAIL_FOR:`Available for:`,DEW_POINT:`Dew point`,DEW_POINT_SPREAD:`Dew point spread`,ISA_DIFFERENCE:`ISA difference`,SLP:`Pressure (sea l.)`,QFE:`Station pressure`,SNOWDEPTH:`Snow depth`,NEWSNOW:`New snow`,SNOWDENSITY:`Snow density`,FLIGHT_RULES:`Flight rules`,CTOP:`Cloud tops`,FREEZING:`Freezing altitude`,COSC:`CO concentration`,DUSTSM:`Dust mass`,WX_WARNINGS:`Weather warnings`,AVALANCHE_DANGER:`Avalanche danger`,AVAL_NO_DATA:`No data`,AVAL_LOW:`Low`,AVAL_MODERATE:`Moderate`,AVAL_CONSIDERABLE:`Considerable`,AVAL_HIGH:`High`,AVAL_VERY_HIGH:`Very high`,WARNINGS:`Warnings`,PTYPE:`Precipitation type`,CCL:`Thermals`,FOG:`Fog`,HAZE:`Haze`,NO_FOG:`No fog`,FOG_RIME:`Fog and rime`,FLOOD:`Flood`,FIRE:`Fire`,EFORECAST:`Extreme forecast`,FZ_RAIN:`Freezing rain`,MX_ICE:`Mixed ice`,WET_SN:`Wet snow`,RA_SN:`Rain with snow`,PELLETS:`Ice pellets`,HAIL:`Hail`,ELEVATION:`Elevation`,LOADING_ELEVATION:`Loading elevation...`,ACTIVE_FIRES:`Active fires`,FIRE_INTENSITY:`Fire intensity`,SOIL_PROFILE_DEPTH:`Soil profile depth`,INTERSUCHO:`Drought monitoring`,INTERSUCHO_FIRE_DANGER:`Fire danger`,INTERSUCHO_AWD:`Moisture anomaly`,INTERSUCHO_AWP:`Drought intensity`,INTERSUCHO_AWR:`Soil moisture`,INTERSUCHO_FWI:`Fire spread`,INTERSUCHO_DFM:`Fuel moisture`,INTERSUCHO_DFM_10H:`10h`,INTERSUCHO_DFM_100H:`100h`,INTERSUCHO_DFM_1000H:`1000h`,INTERSUCHO_40:`0-40cm`,INTERSUCHO_100:`0-100cm`,INTERSUCHO_AWP_0:`No risk`,INTERSUCHO_AWP_1:`Minor`,INTERSUCHO_AWP_2:`Mild`,INTERSUCHO_AWP_3:`Moderate`,INTERSUCHO_AWP_4:`Severe`,INTERSUCHO_AWP_5:`Exceptional`,INTERSUCHO_AWP_6:`Extreme`,INTERSUCHO_FWI_1:`Very low`,INTERSUCHO_FWI_2:`Low`,INTERSUCHO_FWI_3:`Moderate`,INTERSUCHO_FWI_4:`High`,INTERSUCHO_FWI_5:`Very high`,INTERSUCHO_FWI_6:`Extreme`,MORE_LAYERS:`More layers...`,MORE_PRODUCTS:`{{count}} more`,NONE:`None`,ALTITUDE:`Altitude`,SFC:`Surface`,CLICK_ON_LEGEND:`Click to change units`,ALTERNATIVE_UNIT_CHANGE:`Any Layer unit can be changed by clicking on color legend`,COPY_TO_C:`Copy to clipboard`,JUST_SEARCH:`Search`,FILTER:`Filter`,NEXT:`Next results...`,LOW_PREDICT:`Low predictability of forecast`,PREDICTABILITY:`predictability`,DAYS_AGO:`{{daysago}} days ago:`,SHOW_ACTUAL:`Show actual forecast`,SHARE:`Share`,COPY_LINK:`Copy link`,SHARE_ON:`Share on {{name}}`,JUST_EMBED:`Embed`,POSITION:`Position`,WIDTH:`Width`,HEIGHT:`He
2ight`,DEFAULT_UNITS:`Default units`,NOW:`Now`,FAR_FUTURE:`Far future`,FORECAST_FOR:`Forecast for`,ZOOM_LEVEL:`Zoom level`,DETAILED:`Detailed forecast for this location`,PERIOD:`Period`,D_FCST:`Forecast for this location`,D_WEBCAMS:`Webcams in vicinity`,D_STATIONS:`Nearest weather stations`,D_NO_WEBCAMS:`There are no webcams around this location (or we don't know about them)`,D_DAYLIGHT:`image during daylight`,D_DISTANCE:`distance`,D_MILES:`miles`,D_MORE_THAN_HOUR:`more than hour ago`,D_MIN_AGO:`{{duration}} minutes ago`,D_SUNRISE:`Sunrise`,D_SUNSET:`sunset`,D_DUSK:`dusk`,D_SUN_NEVER_SET:`Sun never set`,D_POLAR_NIGHT:`Polar night`,D_LT2:`local time`,D_FAVORITES:`Add to Favorites`,D_FAVORITES2:`Remove from Favorites`,D_WAVE_FCST2:`Waves and sea`,D_MISSING_CAM:`Add new webcam`,D_HOURS:`Hours`,D_TEMP2:`Temp.`,D_PRECI:`Precip.`,D_ABOUT_LOC:`About this location`,D_TIMEZONE:`Timezone`,D_WEBCAMS_24:`Show last 24 hours`,D_1H_FORECAST:`1h forecast`,D_STEPS_1_HOUR:`1 hour`,D_STEPS_3_HOURS:`3 hours`,D_DISPLAY_AS:`Display as:`,DURATION:`Duration`,E_MESSAGE:`Awesome weather forecast at`,METAR_VAR:`Variable`,DURATION_MIN:`{minutes}m`,DURATION_HOURS:`{hours}h`,DURATION_H_M:`{hours}h {minutes}m`,METAR_MIN_AGO:`{DURATION}m ago`,METAR_HOURS_AGO:`{DURATION}h ago`,METARS_H_M_AGO:`{DURATION}h {DURATIONM}m ago`,METARS_DAYS_AGO:`{DURATION} days ago`,METAR_MIN_LATER:`in {DURATION}m`,METAR_HOURS_LATER:`in {DURATION}h`,METARS_H_M_LATER:`in {DURATION}h {DURATIONM}m`,METARS_DAYS_LATER:`in {DURATION} days`,DEVELOPED:`Developed with`,DELETE:`Delete`,FAVS_SYNCHRO_ERROR_TITLE:`Favorites sync error`,SHOW_ON_MAP:`Display on map`,POI_STATIONS:`Weather stations`,POI_AD:`Airports`,POI_AIRQ:`Air quality stations`,POI_CAMS:`Webcams`,POI_PG:`Paragliding spots`,POI_KITE:`Kite/WS spots`,POI_SURF:`Surfing spots`,POI_EMPTY:`Empty map`,POI_WIND:`Reported wind`,POI_WIND_SHORT:`Wind`,POI_TEMP:`Reported temp.`,POI_TEMP_SHORT:`Temperature`,POI_PRECIP:`Recent precip.`,POI_PRECIP_SHORT:`Precipitation`,POI_FAVS:`My favorites`,POI_FCST:`Forecasted weather`,POI_TIDE:`Tide forecast`,POI_RADIOSONDE:`Radiosondes`,P_ANDROID_APP:`Windy for Android, free on Google Play`,ND_MODEL:`Forecast model`,ND_COMPARE:`Compare forecasts`,ND_DISPLAY:`Display`,S_ADVANCED_SETTINGS:`Advanced settings`,S_COLORS:`Customize color scale`,S_SAVE:`Save`,S_SAVE2:`Login/Register to save all your settings to the cloud`,S_SPEED:`Speed`,S_DELETE_INFO:`Delete all my data from this device`,U_LOGIN:`Login`,U_LOGOUT:`Logout`,U_PROFILE:`My profile`,OVR_RECOMENDED:`Recommended for:`,OVR_ALL:`All`,OVR_FLYING:`Flying`,OVR_WATER:`Water`,OVR_SKI:`Ski`,MSG_OFFLINE:`WOW it appears that you are offline :-(`,MSG_ONLINE_APP:`Online again, click here to reload app :-)`,MSG_LOGIN_SUCCESFULL:`You have successfully logged in!`,MSG_INSTALLING_NEW_VERSION:`Close other Windy.com tabs and reload to update to the new version`,FIELD_CANNOT_BE_EMPTY:`This field can't be empty`,FIELD_INVALID_EMAIL:`This doesn't look like an email address`,PASSWORD_EMPTY:`Password can't be empty`,PASSWORD_SHORT:`Password is too short`,PASSWORD_MISSING_DIGIT:`Password is missing a digit (0-9)`,PASSWORD_MISSING_UPPERCASE:`Password is missing an uppercase letter (A-Z)`,PASSWORD_MISSING_LOWERCASE:`Password is missing a lowercase letter (a-z)`,PASSWORD_DO_NOT_MATCH:`Password and confirmation don't match`,ALERTS_LINK_SHORT:`Alert for this spot`,MY_ALERTS:`My Alerts`,MY_LIVE_ALERTS:`Live alerts`,MY_FAVS:`My Favorites`,FAVS_PIN_HOMEPAGE:`Pin to homepage`,FAVS_UNPIN_HOMEPAGE:`Unpin from homepage`,ACTIVE_ALERTS:`active alerts`,DIRECTION_N:`N`,DIRECTION_NE:`NE`,DIRECTION_E:`E`,DIRECTION_SE:`SE`,DIRECTION_S:`S`,DIRECTION_SW:`SW`,DIRECTION_W:`W`,DIRECTION_NW:`NW`,DIRECTIONS:`Directions`,DIRECTIONS_ANY:`Any direction`,DIRECTIONS_SELECT:`Select directions`,ACTIVATE:`Activate`,DEACTIVATE:`Deactivate`,REGISTER:`Register`,REGISTER_HERE:`Register here`,DONT_HAVE_ACCOUNT:`Don't have an account?`,OR:`or`,JUST_LOGIN:`Login`,MY_ACCOUNT:`My account`,EDIT_ALERT:`Edit alert`,ADD_ALERT:`Create alert`,ALERT_MIGRATE:`Migrate alert`,HOME:`Home`,MAP:`Map`,MORE:`More`,LESS:`Less`,COMPARE:`Compare`,PRESS_ISOLINES:`Pressure isolines`,PART_ANIMATION:`Particles animation`,CAMS_PREVIEWS:`Webcams previews`,R_TIME_RANGE:`Time range`,MY_LOCATION:`My location`,ARTICLES:`Articles`,NEW:`New!`,WHAT_IS_NEW:`What is new:`,WHATS_NEW_THANK_YOU:`Thank you for using <b>Windy Premium</b> 👑.<br />Awesome people like you make <b>Windy.com</b> possible!`,WHATS_NEW_UPGRADE:`Upgrade to Windy Premium and enjoy 3× more daily updates, a 15-day weather forecast, full-year access to radar and satellite history, plus detailed wave and tide forecasts.`,PRIVACY:`Privacy protection`,CONSENT:`Cookie consent`,TERMS_OF_USE:`Terms of Use`,PRIVACY_POLICY:`Privacy policy`,SOUNDING:`Sounding`,SOUND_ON:`Sound`,BLITZ_ON:`Show lightning`,TITLE:`Wind map & weather forecast`,HURR_TRACKER:`Hurricane tracker`,HURR_TRACKER_SHORT:`Hurr. tracker`,TOC:`Terms and conditions`,SEND:`Send`,SEARCH_LAYER:`Search layer...`,CANCEL_SEARCH:`Cancel search`,NOTHING_FOUND:`Nothing found`,P_LOCATION:`Please allow Windy to use location services (GPS) while using the app, so we can show weather at your location. We do not store your location at our servers.`,DONE:`Done`,HMAP:`Outdoor map`,LICENCE:`Licence`,AIRQ_RANGE_GOOD:`Good`,AIRQ_RANGE_MODERATE:`Moderate`,AIRQ_RANGE_UNHEALTHY_SENSITIVE:`Unhealthy for sensitive`,AIRQ_RANGE_UNHEALTHY:`Unhealthy`,AIRQ_RANGE_VERY_UNHEALTHY:`Very unhealthy`,AIRQ_RANGE_HAZARDOUS:`Hazardous`,POI_MAX_LAYERS:`Maximum is {{num}} favorite layers. Remove some to add new ones.`,MENU_WATCHFACES:`Apple Watch Faces`,MENU_WIDGETS:`Widgets`,GARMIN_PLUGIN_TITLE_WATCH:`Garmin Watch`,GARMIN_PLUGIN_TITLE_EDGE:`Garmin Edge`,MENU_TITLE_ADDONS:`App add-ons`,WIND_SPEED:`Wind speed`,SOLARPOWER:`Solar power`,WAVE_POWER:`Wave power`,UVINDEX:`UV Index`,WETBULB_TEMP:`Wet-bulb temperature`,UV_LOW:`Low`,UV_MODERATE:`Moderate`,UV_HIGH:`High`,UV_VERY_HIGH:`Very high`,UV_EXTREME:`Extreme`,UV_HIGHEST:`Highest`,SUB_GO:`Go Premium`,SUB_RENEW:`Renew Premium`,SUB_HAVE_REFTIME:`Premium users have just received a new forecast update`,SUB_GLOBE_FREE_LIMIT:`Full version of 3D mode is available only to Premium users.`,SUB_REASON_TIDES:`<strong>Tide forecast</strong>
2 anywhere in the world`,SUB_REASON_FREQUENCY:`Forecast <strong>updates</strong> at least <strong>4 times a day</strong>`,SUB_REASON_GRANULARITY:`<strong>1-hour</strong> forecast step`,SUB_REASON_LONGTERM:`<strong>10-day forecast</strong> outlook`,SUB_REASON_EXTENDED_FORECAST:`<strong>{{count}}-day forecast</strong> outlook`,SUB_OTHER_BENEFITS:`And many other <strong>benefits</strong>`,SUB_SEE_DETAILS:`See details`,SUB_CUFFS_GRACED:`We're having issues with renewing your subscription`,SUB_CUFFS_PAUSED:`Your Premium is paused`,SUB_CUFFS_CANCELED_1:`Your subscription ends soon`,SUB_CUFFS_CANCELED_2:`Your subscription ends in {{count}} days`,SUB_CUFFS_CANCELED_3:`Your subscription ends in {{count}} hours`,SUB_CUFFS_CANCELED_4:`Your subscription ends at any moment`,SUB_CUFFS_FORECAST:`Soon, you will no longer have access to 10-day forecast`,SUB_CUFFS_FEATURE:`Soon, you will no longer have access to this feature.`,SUBSCRIPTION:`Subscription`,MY_SUBSCRIPTION:`My subscription`,RPLANNER:`Route planner`,DATA_NOT_AVBL:`Data not available for this location`,PROMO_LONG_PRESS_HOME:`Use <strong>long tap</strong> on home button to open detailed forecast for your location.`,PROMO_PICKER:`<span class="dotted">Open Settings</span> to change the auto closing time of weather picker.`,DETAIL_FORECAST_LOADING_FAILED:`Error loading forecast for {{model}}`,DETAIL_MODEL_UNAVAILABLE:`Selected model ({{model}}) is unavailable in current location. Reverting to previous model ({{prevModel}}).`,METAR_HELIPORTS:`Display heliports`,MAP_AIRSPACES:`VFR airspaces map`,GETTING_LOCATION:`Getting your location...`,GETTING_LOCATION_ERROR:`Failed to determine your location. Make sure Windy.com has permission to access your location`,GETTING_LOCATION_TIMEOUT:`Failed to determine your location`,GETTING_LOCATION_FALLBACK:`Unable to get current location, using your last known position`,TIDES:`Tides`,WAVESTIDES_BROWSER_TITLE:`Wave and tide forecast for {{name}}`,PARAGLIDING_BROWSER_TITLE:`Paragliding forecast for {{name}}`,WIND_BROWSER_TITLE:`Wind and kitesurfing forecast for {{name}}`,VIEWS:`views`,ZOOM_IN:`Zoom in`,ZOOM_OUT:`Zoom out`,MODE_2D3D:`Switch 2D / 3D mode`,AREA:`Area`,HEATMAP:`City heatmaps`,VIBRATE:`Vibrate`,DISPLAY_STYLE:`Display style`,ARCHIVE:`Archive`,CLOSE_ARCHIVE:`Close archive`,MSG_EXTERNAL_PLUGIN_UNPUBLISHED:`Unfortunately, plugin {{title}} was unpublished by the author and is no longer available.`,MSG_EXTERNAL_PLUGIN_UPDATE_AVAILABLE:`New version of the plugin {{title}} is available. Do you want to update?`,BROWSER_SUPPORT_ERROR:`Your {{platform}} does not support {{technology}}. Some features may not work correctly.`,POLLEN_ALDER:`Alder pollen`,POLLEN_BIRCH:`Birch pollen`,POLLEN_GRASS:`Grass pollen`,POLLEN_MUGWORT:`Mugwort pol.`,POLLEN_OLIVE:`Olive pollen`,POLLEN_RAGWEED:`Ragweed pol.`,DUSTSM_SHORT:`Dust`,POLLEN_ALDER_SHORT:`Alder`,POLLEN_BIRCH_SHORT:`Birch`,POLLEN_GRASS_SHORT:`Grass`,POLLEN_MUGWORT_SHORT:`Mugwort`,POLLEN_OLIVE_SHORT:`Olive`,POLLEN_RAGWEED_SHORT:`Ragwe.`,TIDE_HIGH:`High Tide`,TIDE_LOW:`Low Tide`,MAX_EBB:`Max Ebb`,MAX_FLOOD:`Max Flood`,MIN_EBB:`Min Ebb`,MIN_FLOOD:`Min Flood`,SLACK_EBB:`Slack, Ebb Begins`,SLACK_FLOOD:`Slack, Flood Begins`,FLOOD_TIDE:`Flood tide`,EBB_TIDE:`Ebb tide`,MY_FILES:`My files`,LATEST_FILES_FROM_COMMUNITY:`Latest files from Community`,LOADING_MORE_UPLOADS:`Loading more uploads`,CHOOSE_A_FILE:`Choose a file`,OR_DROP_FILE_HERE:`or drop file here.`,UPLOAD_KML_GPX:`Upload, display and share your KML, GPX or GeoJSON.`,UPLOAD_EXTENSIONS:`Supported extensions: .geojson, .json, .gpx, .kml, .xml`,DESCRIPTION:`Description`,UPLOAD_DESCRIBE_FILE:`Describe content of your file (required)`,FILE_NAME:`File name`,SIZE:`Size`,TYPE:`Type`,SHOW_SPEED_IN_MAP:`Show speed in map`,MAKE_DATA_PRIVATE:`Make data private`,REQUIRES_PREMIUM:`Requires Premium`,UPLOAD_SIZE_LIMIT:`Files larger than 5MB cannot be uploaded to the cloud.`,OPEN_IN_RPLANNER:`Open in route planner`,SAVE_FILE_TO_CLOUD:`Save file to cloud`,UPLOAD_BEING_PROCESSED:`Your upload is being processed.`,FILE:`File`,UPLOADED:`Uploaded`,DOWNLOAD_FILE:`Download file`,DEVELOP_PLUGIN:`Develop your own plugin`,PLUGINS_DISCUSSION:`Windy Plugins discu
2ssion`,PLUGINS_ERROR_INSTALLING:`Error installing plugin`,PLUGINS_INSTALLED:`Your plugin was installed and added to the main menu`,PLUGINS_INSTALL:`Install plugin`,PLUGINS_INSTALL_UNTRUSTED:`Install untrusted plugin`,PLUGINS_NAME:`Name`,PLUGINS_LOAD_URL:`Load plugin directly from URL`,PLUGINS_UNINSTALL:`Uninstall plugin`,PLUGINS_CONFIRM_UNINSTALL:`Are you sure you want to uninstall this plugin?`,PLUGINS_UNTRUSTED:`Installing plugins from untrusted sources can be dangerous. Install plugins only from sources you trust.`,PLUGINS_URL:`URL of the plugin`,OPEN_PLUGIN:`Open plugin`,VERSION:`Version`,UPDATED:`Updated`,AUTHOR:`Author`,SOURCE_CODE:`Source code`,INSTALLED:`installed`,PROFESSIONAL_FIRST:`Professional first`,BY_DISTANCE:`By distance`,PLAY_WITH_FORECAST:`Play with forecast`,SATELLITE_OUTAGE_MESSAGE:`There is an outage of our data source for some satellites.`,NEWSLETTER_CONSENT:`Subscribe to newsletter`,SET_NOTIFICATIONS:`Set notifications`,REPORT_ISSUE:`Report Issue`,TIME:`Time`,TRAJECTORIES_INCOMPLETE_DATA:`Data for some altitude levels is missing, try changing parameters (model, timestamp, levels)`,TRAJECTORIES_FETCH_ERROR:`Failed to fetch wind trajectories.`,TRAJECTORIES_UNSUPPORTED_LAYER:`Wind trajectories are not available on this layer.`,TRAJECTORIES_PREMIUM_PROMO:`Go Premium for longer paths`,NOTIF_VERIFY_EMAIL_BANNER:`<strong>Don't lose access to your Windy account.</strong> Please verify <strong>{email}</strong> to secure your data.`,NOTIF_VERIFY_NOW:`Verify now`,NOTIF_NOT_NOW:`Not now`,SOURCE:`Source`},Or=y({getUrlOfLangFile:()=>Lr,loadLangFile:()=>Rr,navigatorPreferredLang:()=>Nr,supportedLangFiles:()=>Ar,t:()=>F,translateDocument:()=>Br});const kr={},Ar=Er,F=Dr;let jr=`en`;const Mr=N.get(`lang`),Nr=(navigator.languages?navigator.languages[0]:navigator.language)||`en`,Pr=yn.exec(Sn);let Fr=Pr?Pr[1]:Nr;Mr!==`auto`&&zt(Mr)&&(Fr=Mr),Fr&&(zt(Fr)?jr=Fr:(Fr=Fr.replace(/-\S+$/,``),jr=zt(Fr)?Fr:`en`));function Ir(e=``){return/\|/.test(e)?e.replace(/(\w+)\|(\w+):(\w+)/,(t,n,r,i)=>{let a=F[n];return a&&i?a.replace(/\{\{[^}]+\}\}/g,i):e}):F[e]||e}const Lr=e=>`/${xe}/lang/${e===`main`?``:`${e}/`}${jr}.js`,Rr=e=>{if(jr===`en`&&e===`main`)return Promise.resolve();if(e in kr)return kr[e];{let t=new Promise((t,n)=>{let r=Lr(e);import(r).then(e=>{Object.assign(F,e.default),t()}).catch(t=>{O(`trans`,`Failed to load lang file`,t,{tags:{id:e},extra:{filename:r}}),n()})});return kr[e]=t,t}},zr=[`t`,`afterbegin`,`beforeend`,`tooltipsrc`],Br=e=>{zr.forEach(t=>{let n=e.querySelectorAll(`[data-${t}]`);for(let e=0,r=n.length;e<r;e++){let r=n[e],i=Ir(r.dataset[t]);switch(t){case`t`:/</.test(i)?r.innerHTML=i:r.textContent=i;break;case`tooltipsrc`:r.dataset.tooltip=i;break;case`afterbegin`:r.firstChild&&r.firstChild.nodeType==3&&r.removeChild(r.firstChild),r.insertAdjacentHTML(t,i);break;case`beforeend`:r.lastChild&&r.lastChild.nodeType==3&&r.removeChild(r.lastChild),r.insertAdjacentHTML(t,i);break}}})};Rr(`main`).then(()=>{document.documentElement.lang=jr,Br(document.body),N.set(`usedLang`,jr,{forceChange:!0})});var Vr=y({Window:()=>Hr}),Hr=class e{constructor(t){var n,r,i,a,o,s,c,l,u,d;C(this,`closingTimer`,null),C(this,`timeoutTimer`,null),C(this,`bindedClose`,void 0),C(this,`ident`,void 0),C(this,`domEl`,void 0),C(this,`attachPoint`,void 0),C(this,`keyboard`,void 0),C(this,`closeOnClick`,void 0),C(this,`timeout`,void 0),C(this,`isOpen`,void 0),C(this,`bodyClass`,void 0),C(this,`node`,void 0),C(this,`className`,void 0),C(this,`htmlID`,void 0),C(this,`html`,void 0),C(this,`noAnimation`,void 0),C(this,`hideClosingX`,void 0),this.initProperties(),this.ident=t.ident,this.attachPoint=(n=t.attachPoint)==null?this.attachPoint:n,this.bodyClass=(r=t.bodyClass)==null?`on${e.iAm}-${this.ident}`:r,this.className=t.className,this.closeOnClick=(i=t.closeOnClick)==null?this.closeOnClick:i,this.html=t.html,this.domEl=(a=t.domEl)==null?this.domEl:a,this.htmlID=t.htmlID,this.ident=t.ident,this.keyboard=(o=t.keyboard)==null?this.keyboard:o,this.timeout=(s=t.timeout)==null?this.timeout:s,this.noAnimation=t.noAnimation,this.hideClosingX=t.hideClosingX,this.onclose
2=(c=t.onclose)==null?this.onclose:c,this.onclosed=(l=t.onclosed)==null?this.onclosed:l,this.onopen=(u=t.onopen)==null?this.onopen:u,this.unmount=(d=t.unmount)==null?this.unmount:d}close(e){var t,n;if(this.isOpen){if(this.isOpen=!1,e!=null&&e.disableClosingAnimation){var r;(r=this.node)==null||r.classList.add(`no-animation`)}document.body.classList.remove(this.bodyClass),(t=this.node)==null||t.classList.remove(`open`),this.onclose(e),e!=null&&e.disableClosingAnimation?(this.onclosed(),this.unmount(),setTimeout(()=>{var e;(e=this.node)==null||e.classList.remove(`no-animation`)},50)):this.closingTimer=setTimeout(()=>{this.onclosed(),this.unmount()},500),this.removeHooks(),!this.closeOnClick&&!(e==null||(n=e.ev)==null)&&n.stopPropagation&&e.ev.stopPropagation()}}open(e){if(this.closingTimer&&clearTimeout(this.closingTimer),this.timeoutTimer&&clearTimeout(this.timeoutTimer),this.isOpen)return this;if(this.mount(),document.body.classList.add(this.bodyClass),this.addHooks(),e!=null&&e.disableOpeningAnimation){var t;(t=this.node)==null||t.classList.add(`no-animation`,`open`),setTimeout(()=>{var e;(e=this.node)==null||e.classList.remove(`no-animation`)},50)}else setTimeout(()=>{var e;(e=this.node)==null||e.classList.add(`open`)},50);return this.isOpen=!0,this.timeout&&(this.timeoutTimer=setTimeout(this.bindedClose,this.timeout)),this.onopen(),this}onopen(){}onclose(e){}onclosed(){}mount(){this.node||this.html===void 0||(this.node=this.createNode(),Br(this.node))}unmount(){var e;this.node&&((e=this.node.parentNode)==null||e.removeChild(this.node),this.node=void 0)}initProperties(){this.domEl=null,this.closingTimer=null,this.timeoutTimer=null,this.attachPoint=b,this.keyboard=!1,this.closeOnClick=!1,this.timeout=0,this.isOpen=!1,this.bindedClose=e=>{if(this.closeOnClick===`outside`){let t=e.target instanceof HTMLElement?e.target:null;for(;t;){if(t===this.node)return;t=t.parentElement}}this.close.call(this,{ev:e})}}createNode(t){let n=document.createElement(`div`),r=t||this.html||``;if(n.id=this.htmlID||`${e.iAm}-${this.ident}`,this.className&&(n.className=this.className),n.innerHTML=r,!this.hideClosingX){let e=document.createElement(`div`);e.className=`closing-x`,e.onclick=this.bindedClose,n.appendChild(e)}let i=this.domEl||qt(this.attachPoint);if(!i)throw Error(`Cannot create node for Window ${this.ident}, target element does not exist.`);return i.appendChild(n),n}removeHooks(){this.closeOnClick&&(document.removeEventListener(`mousedown`,this.bindedClose,!0),document.removeEventListener(`touchstart`,this.bindedClose,!0)),this.keyboard&&this.node&&this.node.removeEventListener(`keydown`,this.keyCatcher)}addHooks(){this.closeOnClick&&(document.addEventListener(`mousedown`,this.bindedClose,!0),document.addEventListener(`touchstart`,this.bindedClose,!0)),this.keyboard&&this.node&&this.node.addEventListener(`keydown`,this.keyCatcher)}keyCatcher(e){e.stopImmediatePropagation()}};C(Hr,`iAm`,`window`);
2var Ur=y({displayTopMessage:()=>qr});const Wr=`data-top-message-button`;let Gr=null;const Kr={success:`bg-ok`,error:`bg-error`,warning:`bg-orange`},qr=async({html:e,timeout:t,onclick:n,onclose:r,type:i,buttons:a,hideClosingX:o})=>{Gr&&Gr.isOpen&&(Gr.close({disableClosingAnimation:!0}),Gr=null,await mn(200));let s=[`top-message`,`fg-white`,Kr[i]];n&&s.push(`clickable`);let c=a!=null&&a.length?`<div class="top-message-buttons">${a.map((e,t)=>{let n=e.href?`a`:`span`,r=e.href?` href="${e.href}"`:``;return`<${n} class="button size-xs ${e.primary?`top-message-button--primary`:`button--transparent`}" role="button" ${Wr}="${t}"${r}>${e.label}</${n}>`}).join(``)}</div>`:``;return Gr=new Hr({ident:`top-message`,className:s.join(` `),html:`<span class="top-message-text">${e}</span>${c}`,timeout:t,hideClosingX:o,onopen(){this.node&&(n&&(this.node.onclick=()=>n()),a==null||a.forEach((e,t)=>{var n;let r=(n=this.node)==null?void 0:n.querySelector(`[${Wr}="${t}"]`);r==null||r.addEventListener(`click`,t=>{var n;t.stopPropagation(),(n=e.onclick)==null||n.call(e),e.closeOnClick&&(Gr==null||Gr.close())})}))},onclose:e=>r==null?void 0:r(e),onclosed:()=>{Gr&&(Gr=null)}}),Gr.open(),Gr};var Jr=y({createEventSource:()=>ni,del:()=>si,get:()=>I,getURL:()=>ti,head:()=>di,patch:()=>ui,post:()=>ci,put:()=>li});const Yr=new Tr(50),Xr=RegExp(`^/users/`,`i`),Zr=RegExp(`^https://account.windy.com/`,`i`),Qr=RegExp(`^/citytile/`,`i`),$r=e=>!e.startsWith(`http`)&&!/^v\/\d*/.test(e),ei=e=>$r(e)||Qr.test(e)||e.startsWith(`http://localhost:3000`)||/^https:\/\/(account|dev|node|staging|dev-windy-backend-\S+)\.windy\.com(:\d+)?\//.test(e),ti=e=>ei(e)?(e.startsWith(`http`)||(e=Bt(`https://node.windy.com`,e)),gr(e)):e,ni=(e,t={})=>{try{let n=ti(e),r=new EventSource(n,t);return r.addEventListener(`error`,n=>{console.error(`EventSource error event for url=${e}, options=${JSON.stringify(t)}`,n)}),r}catch(e){return console.error(`Failed to create EventSource`,e),null}},ri=e=>({status:e.status,data:e.data&&e.isJSON?JSON.parse(e.data):e.data}),ii=e=>Promise.resolve(e)===e,ai=async(e,t,n)=>{try{let i=await e;if(i.ok||i.status===304){let e={status:i.status,data:void 0};try{if(t.binary)e.data=await i.arrayBuffer();else{var r;e.data=await i.text(),e.isJSON=t.json||((r=i.headers.get(`content-type`))==null?void 0:r.includes(`application/json`))}return t.cache&&(e.expire=(t.ttl||3e5)+Date.now(),Yr.put(n,e)),ri(e)}catch(e){throw new Xe(i.status,e.message)}}else{let e=await i.text();throw new Xe(i.status,`Request failed for URL ${n}`,e==null?i.statusText:e)}}catch(e){var i;t.cache&&Yr.remove(n);let r=(i=e==null?void 0:e.message)==null?e:i,o=e.name===`AbortError`||/abort/.test(r);if((!(e instanceof Xe)||o)&&wr(),e instanceof Xe)throw e;var a;throw new Xe((a=e.status)==null?0:a,r)}},oi=(e,t,n={})=>{var r,i;if(typeof n.qs==`object`){let e=Ht(n.qs);e&&(t=Vt(t,e))}let a=Xr.test(t)||Zr.test(t)||((r=n.withCredentials)==null?!1:r),o=t;if(n.cache===void 0&&e===`GET`&&(n.cache=!0),n.cache){let e=Yr.get(t);if(e){if(ii(e))return e;{let{expire:n}=e;if(n&&Date.now()>n)Yr.remove(t);else{let t=ri(e);return Promise.resolve(t)}}}}let s=new Headers(n.customHeaders||{}),c;if(t=ti(t),t=encodeURI(t),a){c=`include`;let e=N.get(`userToken`);e&&s.set(`Authorization`,`Bearer ${e}`)}!(n==null||(i=n.customHeaders)==null)&&i.Accept||s.set(`Accept`,`application/json binary/hdaead$ind3f7b`);let l;n.data&&[`POST`,`PUT`,`PATCH`].includes(e)&&(n.data instanceof FormData?l=n.data:(s.set(`Content-Type`,`application/json; charset=utf-8`),l=JSON.stringify(n.data)));let u=ai(n.ongoingFetchRequest||fetch(t,{body:l,credentials:c,headers:s,method:e,signal:n.abortSignal}),n,o);return n.cache&&Yr.put(o,u),u},I=oi.bind(null,`GET`),si=oi.bind(null,`DELETE`),ci=oi.bind(null,`POST`),li=oi.bind(null,`PUT`),ui=oi.bind(null,`PATCH`),di=oi.bind(null,`HEAD`);function fi(e,t,n,r){var i;let a=!!t.isDiscrete,o=!a&&((i=t.description)==null?void 0:i.length)>1,s;if(a)s=mi(t);else{if(o&&!r){O(`renderLegend`,`Slected metric is required for legends with more than one metric`);return}else if(!n){O(`renderLegend`,`Color is required for gradient legends`);return}s=pi(n.getColor(),t,r)}e.style.background=s.background,e.innerHTML=s.content,ce(e,!o,`one-metric`),ce(e,a,`discrete-metric`)}function pi(e,t,n){let{description:r,lines:i}=t,a=i.length,o=n?r.indexOf(n):0,s=r[o],c=100/(i.length+1),l=[],u=e.color(i[0][0]);l.push(u,u,u);let d=`<span style="width:${c}%">${s}</span>`;for(let t=0;t<a;t++){let n=i[t][0],r=i[Math.min(t+1,a-1)][0],s=e.color(n),u=e.color(.5*(n+r));l.push(s,u),d+=`<span style="width: ${c}%">${i[t][1+o]}</span>`}return{background:`linear-gradient(to right, ${l.join(`,`)})`,content:d}}function mi(e){let{labels:t,hasEqualItemsWidth:n}=e,r=n?`width: ${100/t.length}%;`:``;return{background:``,content:e.labels.map(e=>{let[t,i]=e;return`<span style="background: ${i}; ${n?r:``}">${F[t]}</span>`}).join(``)}}var hi=y({DD2DMS:()=>Mi,animateViews:()=>Ri,countdown:()=>ki,euTime:()=>_i,formatElapsedMs:()=>Ai,getDirFunction:()=>Ei,getHoursFunction:()=>vi,hourMinuteUTC:()=>xi,hourUTC:()=>bi,howOld:()=>Oi,m2feetFormatted:()=>zi,obsoleteClass:()=>Di,seoLang:()=>Ii,seoString:()=>Fi,seoUrlString:()=>Pi,stringDir:()=>wi,thousands:()=>Si,tsToFormattedTime:()=>yi,utcOffsetStr:()=>Ni});const gi=(e,t)=>{let n=t===void 0?``:`:`+wt(t);return`${e%12||12}${n}${e>=12?` PM`:` AM`}`},_i=(e,t)=>e+`:`+(t===void 0?`00`:wt(t)),vi=()=>N.get(`hourFormat`)===`12h`?gi:_i,yi=e=>{let t=new Date(e);return vi()(t.getHours(),t.getMinutes())},bi=e=>wt(new Date(e).getUTCHours())+`:00Z`,xi=e=>{let t=new Date(e);return`${wt(t.getUTCHours())}:${wt(t.getUTCMinutes())}Z`},Si=e=>e==null?``:e.toString().replace(/\B(?=(\d{3})+(?!\d))/g,`,`),Ci=[`N`,`NE`,`E`,`SE`,`S`,`SW`,`W`,`NW`,`N`],wi=e=>F[`DIRECTION_${Ci[Math.floor((+e+22.5)/45)]}`]||`-`,Ti=e=>`${e}°`,Ei=()=>N.get(`numDirection`)?Ti:wi,Di=(e,t=30)=>{let n=(Date.now()/1e3-e)/60;return n<t*.3?`fresh`:n<t?`normal`:`obsolete`},Oi=e=>{let t=!1,n=-1,r=1440;if(`diffMin`in e)n=+e.diffMin;else if(`ts`in e)n=Math.floor((Date.now()-+e.ts)/6e4);else if(`min`in e)n=Math.floor(Date.now()/6e4-e.min);else if(`ux`in e)n=Math.floor((Date.now()/1e3-e.ux)/60);else return``;if(n<0){var i;(i=e.useFuture)==null||i?t=!0:n=0}if(n=Math.abs(n),e&&e.translate){if(n===0)return F.NOW;if(n<60)return Tt(t?F.METAR_MIN_LATER:F.METAR_MIN_AGO,{DURATION:n});if(n<240){let e=Math.floor(n/60),r=n-60*e;return Tt(t?F.METARS_H_M_LATER:F.METARS_H_M_AGO,{DURATION:e,DURATIONM:r})}else if(n<r)return Tt(t?F.METAR_HOURS_LATER:F.METAR_HOURS_AGO,{DURATION:Math.floor(n/60)});else return Tt(t?F.METARS_DAYS_LATER:F.METARS_DAYS_AGO,{DURATION:Math.floor(n/r)})}else{let i=n>=r?`${Math.floor(n/r)}d`:n<60?`${Math.floor(n)}m`:`${Math.floor(n/60)}h ${Math.floor(n%60)}m`;return(e.useAgo&&t?`in `:``)+i+(e.useAgo&&!t?` ago`:``)}},ki=(e,t={})=>{let n=Math.abs(e-Date.now()),r=Math.floor(n/it),i=Math.floor(n%it/T),a=Math.floor(n%T/rt),o=Math.floor(n%rt/1e3);return t.showSeconds?!r&&!i&&!a&&!o?`1s`:`${r?`${r} days `:``}${i||r?`${i}h `:``}${a||i||r?`${a}m `:``}${o}s`:!r&&!i&&!a?`1m`:`${r?`${r} days `:``}${i||r?`${i}h `:``}${a||i||r?`${a}m`:``}`},Ai=e=>{let t=Math.round(e/(60*1e3)),n=Math.floor(t/60),r=t%60;return n===0?Tt(F.DURATION_MIN,{minutes:r}):r===0?Tt(F.DURATION_HOURS,{hours:n}):Tt(F.DURATION_H_M,{hours:n,minutes:r})},ji=e=>[Math.abs(0|e),`°`,0|(e<0?e=-e:e)%1*60,`'`,0|e*60%1*60,`"`].join(``),Mi=(e,t)=>[e<0?`S`:`N`,ji(e),`, `,t<0?`W`:`E`,ji(t)].join(``),Ni=e=>(e<0?`-`:`+`)+wt(Math.abs(Math.round(e)))+`:00`,Pi=e=>e.replace(/[,.]/g,` `).replace(/₂/g,`2`).replace(/₃/g,`3`).replace(/\s+/g,`-`).replace(/-+/g,`-`),Fi=e=>Pi(e).replace(/\/+/g,`-`),Ii=e=>e===`en`?``:`${e}/`,Li=(e,t,n)=>{let r=Date.now(),i=r+4e3,a=()=>{let o=Math.floor(jt(r,i,Date.now())*e);t&&(t.textContent=`${Si(o)}${n?` ${F.VIEWS}`:``}`),t&&o<e&&window.requestAnimationFrame(a)};a()},Ri=(e,t,n=!0)=>{setTimeout(()=>Li(e,t,n),2e3)},zi=(e,t)=>{let n=Math.round(e*3.28084);return Si(t?Math.round(e/100)*100:n)};var Bi=y({Metric:()=>Vi,rtrnSelf:()=>L});const L=e=>e;var Vi=class{constructor(e){C(this,`key`,void 0),C(this,`cohesion`,void 0),C(this,`conv`,void 0),C(this,`separator`,void 0),C(this,`defaults`,void 0),C(this,`nativeSync`,void 0),C(this,`ident`,void 0),C(this,`backConv`,void 0),C(this,`metric`,void 0),C(this,`legend`,void 0),C(this,`useConvertValue`,void 0),this.initProperties(),Object.assign(this,e),this.key=this.createKey(this.ident);let t=this.listMetrics();N.insert(this.key,{def:this.getDefault(),save:!0,sync:!0,nativeSync:this.nativeSync,allowed:t}),this.metric=N.get(this.key),N.on(this.key,this.onMetricChanged,this),N.once(`defaultUnits`,this.setDefault,this)}convertValue(e,t,n,r){if(e===void 0)return``;{var i;let a=this.convertNumber(e,r);return(typeof a==`number`&&!isNaN(a)&&a>=1e3?Si(a):a)+(t||this.separator)+(((i=this.conv[this.metric])==null?void 0:i.label)||this.metric)+(n||``)}}na(){var e;return((e=this.conv[this.metric])==null?void 0:e.na)||`-`}listMetrics(){return Object.keys(this.conv)}howManyMetrics(){return this.listMetrics().length}setMetric(e,t){N.set(this.key,e),this.cohesion&&!t&&Object.keys(this.cohesion).forEac
2h(t=>{var n;let r=(n=this.cohesion)==null||(n=n[t])==null?void 0:n[e];r&&N.set(this.createKey(t),r)})}cycleMetric(){if(this.legend&&!this.legend.isDiscrete){let{description:e}=this.legend,t=e.indexOf(this.metric)+1;t===e.length&&(t=0),this.setMetric(e[t])}else if(!this.legend){let e=this.listMetrics(),t=e.indexOf(this.metric)+1;t===e.length&&(t=0),this.setMetric(e[t])}}initProperties(){this.separator=``,this.nativeSync=!1}onMetricChanged(e){this.metric=e,P.emit(`metricChanged`,this.ident,e)}getDefault(){return N.get(`defaultUnits`)===`imperial`&&this.defaults.length>1?this.defaults[1]:this.defaults[0]}setDefault(){this.key&&(N.setDefault(this.key,this.getDefault()),this.metric=N.get(this.key))}createKey(e){return`metric_${e}`}},Hi=y({CloudsMetric:()=>Wi,DiscreteMetric:()=>Ui,DroughtMetric:()=>Yi,FogMetric:()=>Qi,FwiMetric:()=>Zi,IcingMetric:()=>ea,NumberedMetric:()=>R,PrecipMetric:()=>ta,PtypeMetric:()=>Gi,RadarPTypeMetric:()=>Ki,SatelliteMetric:()=>ia,TurbulenceMetric:()=>$i,UVIndexMetric:()=>qi}),R=class extends Vi{convertNumber(e,t,n,r){let i=r&&this.backConv?this.backConv[n||this.metric]:this.conv[n||this.metric];if(!i)return O(`convertNumber`,`Conversion method for ${n||this.metric} is not defined!`),0;let a=i.conversion(e),o=10**(t==null?i.precision:t);return Math.round(a*o)/o}},Ui=class extends Vi{constructor(...e){super(...e),C(this,`useConvertValue`,!0)}convertNumber(e){return e}},Wi=class extends R{constructor(...e){super(...e),C(this,`useConvertValue`,!0)}convertValue(e,t,n,r){return this.metric===`rules`?this.getRulesLabel(e)||`${Math.round(e)}%`:super.convertValue(e,t,n,r)}getRulesLabel(e){let t=this.legend;if(!t||t.isDiscrete)return null;let n=[...t.lines].reverse().find(t=>e>=t[0]);return n?String(n[1]):null}},Gi=class extends Ui{convertValue(e){let t={0:`RAIN`,1:`JUST_RAIN`,2:`THUNDER`,3:`FZ_RAIN`,4:`MX_ICE`,5:`SNOW`,6:`WET_SN`,7:`RA_SN`,8:`PELLETS`,9:`LIGHT_THUNDER`,10:`THUNDER`,11:`HEAVY_THUNDER`};return e in t?F[t[e]]:``}},Ki=class extends Ui{convertValue(e){let t=F.JUST_RAIN;return e<=48?t=F.SNOW:e>=200&&(t=F.HAIL),t}},qi=class extends Ui{convertValue(e){return e===0?F.NONE:e<=2?F.UV_LOW:e<=5?F.UV_MODERATE:e<=7?F.UV_HIGH:e<=10?F.UV_VERY_HIGH:F.UV_EXTREME}};const Ji={0:`INTERSUCHO_AWP_0`,1:`INTERSUCHO_AWP_1`,2:`INTERSUCHO_AWP_2`,3:`INTERSUCHO_AWP_3`,4:`INTERSUCHO_AWP_4`,5:`INTERSUCHO_AWP_5`,6:`INTERSUCHO_AWP_6`};var Yi=class extends Ui{convertValue(e){let t=D(Math.round(e)+1,0,6);return t in Ji?F[Ji[t]]:``}};const Xi={1:`INTERSUCHO_FWI_1`,2:`INTERSUCHO_FWI_2`,3:`INTERSUCHO_FWI_3`,4:`INTERSUCHO_FWI_4`,5:`INTERSUCHO_FWI_5`,6:`INTERSUCHO_FWI_6`};var Zi=class extends Ui{convertValue(e){let t=D(Math.round(e),1,6);return t in Xi?F[Xi[t]]:``}},Qi=class extends Ui{convertValue(e){return e<=.7?F.NO_FOG:e<=1?F.FOG:F.FOG_RIME}},$i=class extends R{constructor(...e){super(...e),C(this,`useConvertValue`,!0)}convertValue(e){return e>=79?F.TURBULENCE_EXTREME2:e>=44?F.TURBULENCE_SEVERE2:e>=20?F.TURBULENCE_MODERATE2:e>=15?F.TURBULENCE_LIGHT2:`--`}},ea=class extends Ui{convertValue(e){return e>=55?F.ICING_SEVERE2:e>=35?F.ICING_MODERATE2:e>=30?F.ICING_LIGHT2:e>=25?F.ICING_TRACE2:`--`}},ta=class extends R{initProperties(){super.initProperties(),this.defaults=[`mm`,`in`],this.nativeSync=!0,this.cohesion={snow:{in:`in`,mm:`cm`}},this.conv={mm:{conversion:L,precision:1},in:{conversion:e=>e*.0394,precision:2}},this.backConv={mm:{conversion:L,precision:1},in:{conversion:e=>e*25.4,precision:2}}}};const na=321.75,ra=182.75;var ia=class extends R{constructor(e){super(e),C(this,`_defaultTempParams`,void 0),this._defaultTempParams={tempAtMinPixelKelvin:na,tempAtMaxPixelKelvin:ra,tempDeltaScale:(ra-na)/255}}get tempParams(){var e,t;let n=N.get(`satelliteCalendar`);if(!n)return this._defaultTempParams;let r=(e=n.tMax)==null?na:e,i=(t=n.tMin)==null?ra:t;return{tempAtMinPixelKelvin:r,tempAtMaxPixelKelvin:i,tempDeltaScale:(i-r)/255}}initProperties(){super.initProperties(),this.defaults=[`K`,`°C`,`°F`],this.legend={description:[`K`,`°C`,`°F`],lines:[[150,240,-33,-28],[168,230,-43,-45],[186,220,-53,-63],[205,210,-63,-82],[223,200,-73,-99]]},this.conv={K:{conversion:e=>Math.round(this.tempParams.tempDeltaScale*e+this.tempParams.tempAtMinPixelKelvin),precision:0,na:``},"°C":{conversion:e=>Math.round(this.tempParams.tempDeltaScale*e+this.tempParams.tempAtMinPixelKelvin-273.15),precision:0,na:``},"°F":{conversion:e=>Math.round(this.tempParams.tempDeltaScale*(9/5)*e+this.tempParams.tempAtMinPixelKelvin*(9/5)-459.67),precision:0,na:``}},this.backConv={K:{conversion:e=>Math.round((e-this.tempParams.tempAtMinPixelKelvin)/this.tempParams.tempDeltaScale),precision:0,na:``},"°C":{conversion:e=>Math.round((e-this.tempParams.tempAtMinPixelKelvin+273.15)/this.tempParams.tempDeltaScale),precision:0,na:``},"°F":{conversion:e=>Math.round((e-this.tempParams.tempAtMinPixelKelvin*(9/5)+459.67)/(this.tempParams.tempDeltaScale*(9/5))),precision:0,na:``}}}};const aa={"%":{conversion:e=>Math.round(100*e),precision:0}},oa=new R({ident:`temp`,separator:``,defaults:[`°C`,`°F`],conv:{"°C":{conversion:e=>e-273.15,precision:0},"°F":{conversion:e=>e*9/5-459.67,precision:0}},nativeSync:!0,legend:{description:[`°C`,`°F`],lines:[[252,-20,-5],[262,-10,15],[272,0,30],[282,10,50],[292,20,70],[302,30,85],[313,40,100]]},backConv:{"°C":{conversion:e=>e+273.15,precision:0},"°F":{conversion:e=>(e+459.67)*5/9,precision:0}}}),sa=[.3,1.5,3.3,5.5,8,10.8,13.9,17.2,20.7,24.5,28.4,32.6],ca=new R({ident:`wind`,defaults:[`kt`],nativeSync:!0,conv:{kt:{conversion:e=>e*1.943844,precision:0},bft:{conversion:e=>{for(let t=0;t<sa.length;t++)if(e<sa[t])return t;return 12},precision:0},"m/s":{conversion:L,precision:0},"km/h":{conversion:e=>e*3.6,precision:0},mph:{conversion:e=>e*2.236936,precision:0}},backConv:{kt:{conversion:e=>e/1.943844,precision:0},bft:{conversion:e=>{var t;return(t=sa[Math.floor(e)])==null?e<0?sa[0]:sa[sa.length-1]:t},precision:0},"m/s":{conversion:L,precision:0},"km/h":{conversion:e=>e/3.6,precision:0},mph:{conversion:e=>e/2.236936,precision:0}},legend:{description:[`kt`,`bft`,`m/s`,`mph`,`km/h`],lines:[[0,0,0,0,0,0],[3,5,2,3,6,10],[5,10,3,5,10,20],[10,20,5,10,20,35],[15,30,7,15,35,55],[20,40,8,20,45,70],[30,60,11,30,70,100]]}}),la=new R({ident:`rh`,defaults:[`%`],conv:{"%":{conversion:L,precision:0}},legend:{description:[`%`],lines:[[30,30],[50,50],[80,80],[90,90],[100,100]]}}),ua=new Wi({ident:`clouds`,defaults:[`rules`],conv:{rules:{conversion:L,precision:0},"%":{conversion:L,precision:0}},legend:{description:[`rules`,`%`],lines:[[0,`SKC`,0],[25,`FEW`,25],[50,`SCT`,50],[70,`BKN`,70],[100,`OVC`,100]]}}),da=new R({ident:`pressure`,defaults:[`hPa`,`inHg`,`mmHg`],nativeSync:!0,conv:{hPa:{conversion:e=>e/100,precision:0},mmHg:{conversion:e=>e/133.322387415,precision:0},inHg:{conversion:e=>e/3386.389,precision:2}},backConv:{hPa:{conversion:e=>e*100,precision:0},mmHg:{conversion:e=>e*133.322387415,precision:0},inHg:{conversion:e=>e*3386.389,precision:2}},legend:{description:[`hPa`,`inHg`,`mmHg`],lines:[[99e3,990,29.2,742],[1e5,1e3,29.6,750],[101e3,1010,29.8,757],[102e3,1020,30.1,765],[103e3,1030,30.4,772]]}}),fa=new ta({ident:`rain`,legend:{description:[`mm`,`in`],lines:[[1.5,1.5,`.06`],[2,2,`.08`],[3,3,`.11`],[7,7,`.24`],[10,10,`.39`],[20,20,`.78`],[30,30,1.2]]}}),pa=new R({ident:`snow`,defaults:[`cm`,`in`],nativeSync:!0,conv:{cm:{conversion:L,precision:1},in:{conversion:e=>e*.39,precision:1}},backConv:{cm:{conversion:L,precision:1},in:{conversion:e=>e/.39,precision:1}},legend:{description:[`cm`,`in`],lines:[[2,2,`.8`],[5,5,2],[10,10,4],[50,50,20],[100,`1m`,`3ft`],[300,`3m`,`9ft`]]},cohesion:{rain:{in:`in`,cm:`mm`}}}),ma=new R({ident:`cape`,defaults:[`J/kg`],conv:{"J/kg":{conversion:L,precision:0}},legend:{description:[`J/kg`],lines:[[0,0],[500,500],[1500,1500],[2500,2500],[5e3,5e3]]}}),ha=new R({ident:`gtco3`,defaults:[`DU`],conv:{DU:{conversion:L,precision:0}},legend:{description:[`DU`],lines:[[150,150],[220,220],[280,280],[330,330],[400,400]]}}),ga=new R({ident:`aod550`,defaults:[`AOD`],conv:{AOD:{conversion:L,precision:3}},legend:{description:[`AOD`],lines:[[0,0],[.25,.25],[.5,.5],[1,1],[2,2],[4,4]]}}),_a=new R({ident:`pm2p5`,defaults:[`µg/m³`],conv:{"µg/m³":{conversion:L,precision:0}},legend:{description:[`µg/m³`],lines:[[0,0],[10,10],[20,20],[100,100],[1e3,1e3]]}}),va=new R({ident:`no2`,defaults:[`µg/m³`],conv:{"µg/m³":{conversion:L,precision:2}},legend:{description:[`µg/m³`],lines:[[0,0],[1,1],[5,5],[25,25],[100,100]]}}),ya=new R({ident:`tcso2`,defaults:[`mg/m²`],conv:{"mg/m²":{conversion:L,precision:2}},legend:{description:[`mg/m²`],lines:[[0,0],[1,1],[5,5],[25,25],[100,100]]}}),ba=new R({ident:`go3`,defaults:[`µg/m³`],conv:{"µg/m³":{conversion:L,precision:2}},legend:{description:[`µg/m³`],lines:[[0,0],[10,10],[20,20],[100,100],[1e3,1e3]]}}),xa=new R({ident:`altitude`,defaults:[`m`,`ft`],conv:{m:{conversion:L,precision:-2},ft:{conversion:e=>Math.round(e*3.28084),precision:-2}},backConv:{m:{conversion:L,precision:-2},ft:{conversion:e=>Math.round(e/3.28084),precision:-2}},legend:{description:[`m`,`ft`],lines:[[0,0,0],[1e3,1e3,3e3],[1500,1500,5e3],[5e3,`5k`,`FL150`],[9e3,`9k`,`FL300`]]}}),Sa=new R({ident:`elevation`,defaults:[`m`,`ft`],conv:{m:{conversion:L,precision:0},ft:{conversion:e=>Math.round(e*3.28084),precision:0}},backConv:{m:{conversion:L,precision:0},ft:{conversion:e=>Math.round(e/3.28),precision:0}}}),Ca=new R({ident:`distance`,defaults:[`km`,`mi`],nativeSync:!0,conv:{km:{conversion:e=>e/1e3,precision:1},mi:{conversion:e=>e/1609.344,precision:1},NM:{conversion:e=>e/1852,precision:1}},backConv:{km:{conversion:e=>e*1e3,precision:1},mi:{conversion:e=>e*1609.344,precision:1},NM:{conversion:e=>e*1852,precision:1}}}),wa=new R({ident:`speed`,defaults:[`kt`],conv:{"km/h":{conversion:e=>e*3.6,precision:0},mph:{conversion:e=>e*2.236936,precision:0},kt:{conversion:e=>e*1.943844,precision:0},"m/s":{conversion:L,precision:0}}}),Ta=new R({ident:`waves`,defaults:[`m`,`ft`],conv:{m:{conversion:L,precision:1},ft:{conversion:e=>e*3.28084,precision:0}},legend:{description:[`m`,`ft`],lines:[[.5,.5,1.6],[1,1,3.3],[1.5,1.5,5],[2,2,6.6],[6,6,20],[9,9,30]]}}),Ea=new R({ident:`currents`,separator:` `,defaults:[`kt`],conv:{kt:{conversion:e=>e*1.943844,precision:1},"m/s":{conversion:L,precision:2},"km/h":{conversion:e=>e*3.6,precision:1},mph:{conversion:e=>e*2.236936,precision:1}},legend:{description:[`kt`,`m/s`,`mph`,`km/h`],lines:[[0,0,0,0,0],[.2,.4,.2,.4,.7],[.4,.8,.4,.9,1.4],[.8,1.6,.8,1.8,2.9],[1,2,1,2.2,3.6],[1.6,3.2,1.6,3.6,5.8]]}}),Da=new R({ident:`visibility`,defaults:[`km`,`sm`],conv:{rules:{conversion:e=>e/1e3,label:`km`,precision:1},km:{conversion:e=>e/1e3,precision:1},sm:{conversion:e=>e*62137e-8,precision:1}},legend:{description:[`rules`,`km`,`sm`],lines:[[0,`LIFR`,`.8`,`.5`],[3e3,`IFR`,2.7,1.5],[7e3,`MVFR`,6,4],[16e3,`VFR`,16,10]]}}),Oa=new R({ident:`visibilityNoRules`,defaults:[`km`,`sm`],conv:{km:{conversion:e=>e/1e3,precision:1},sm:{conversion:e=>e*62137e-8,precision:1}},legend:{description:[`km`,`sm`],lines:[[0,`.8`,`.5`],[3e3,2.7,1.5],[7e3,6,4],[16e3,16,10]]}}),ka=new R({ident:`so2`,defaults:[`µg/m³`],conv:{"µg/m³":{conversion:L,precision:2}},legend:{description:[`µg/m³`],lines:[[0,0],[1,1],[5,5],[10,10],[80,80]]}}),Aa=new R({ident:`dust`,defaults:[`µg/m³`],conv:{"µg/m³":{conversion:L,precision:1}},legend:{description:[`µg/m³`],lines:[[0,0],[50,50],[100,100],[500,500],[800,800]]}}),ja=new R({ident:`cosc`,defaults:[`ppbv`],conv:{ppbv:{conversion:L,precision:0}},legend:{description:[`ppbv`],lines:[[0,0],[50,50],[100,100],[500,500],[1200,1200]]}}),Ma=e=>(10**(e*.1)*.005)**.625,Na=e=>10*Math.log10(e**1.6/.005),Pa=new R({ident:`radar`,defaults:[`dBZ`,`mm/h`,`in/h`],conv:{dBZ:{conversion:L,precision:0},"mm/h":{conversion:e=>Ma(e),precision:1},"in/h":{conversion:e=>Ma(e)/25.4,precision:2}},backConv:{dBZ:{conversion:L,precision:0},"mm/h":{conversion:e=>Na(e),precision:1},"in/h":{conversion:e=>Na(e*25.4),precision:2}},legend:{description:[`dBZ`,`mm/h`,`in/h`],lines:[[0,0,0,0],[20,20,.6,.02],[30,30,3,.1],[40,40,12,.5],[50,50,50,2],[60,60,200,8]]}}),Fa=new ia({ident:`satellite`}),Ia=new Gi({ident:`ptype`,defaults:[`ptype`],conv:{ptype:{conversion:L,precision:0,label:``}},legend:{isDiscrete:!0,labels:[[`JUST_RAIN`,`rgb(0,153,182)`],[`FZ_RAIN`,`rgb(144,0,150)`],[`MX_ICE`,`rgb(81,12,15)`],[`SNOW`,`rgb(178,178,178)`],[`WET_SN`,`rgb(86,148,86)`],[`RA_SN`,`rgb(149,161,9)`]]}}),La=new Ki({ident:`radarPType`,defaults:[`ptype`],conv:{ptype:{conversion:L,precision:0,label:``}}}),Ra=new R({ident:`gh`,defaults:[`m`],conv:{m:{conversion:L,precision:0}}}),za=new Qi({ident:`fog`,defaults:[`type`],conv:{type:{conversion:L,precision:0}},legend:{isDiscrete:!0,hasEqualItemsWidth:!0,labels:[[`FOG`,`rgb(198, 198, 198)`],[`FOG_RI
2ME`,`rgb(201, 201, 255)`]]}}),Ba=new R({ident:`lightDensity`,defaults:[`l/km²`],conv:{"l/km²":{conversion:L,precision:2}},legend:{description:[`l/km²`],lines:[[0,0],[.025,`.025`],[.1,`.1`],[1,1],[10,10],[20,20]]}}),Va=new R({ident:`efiWind`,defaults:[`%`],conv:aa,legend:{description:[`%`],lines:[[-1,`unusually`],[-.75,`calm`],[.25,``],[.75,`extreme`],[1,`wind`]]}}),Ha=new R({ident:`efiTemp`,defaults:[`%`],conv:aa,legend:{description:[`%`],lines:[[-1,`extreme`],[-.75,`cold`],[-.25,``],[.25,``],[.75,`extreme`],[1,`warm`]]}}),Ua=new R({ident:`efiRain`,defaults:[`%`],conv:aa,legend:{description:[`%`],lines:[[-1,`very dry`],[0,``],[.1,``],[.75,`extreme`],[1,`precip.`]]}}),Wa=new ta({ident:`moistureAnom100`,legend:{description:[`mm`,`in`],lines:[[-100,-100,-3.94],[-60,-60,-2.36],[-30,-30,1.18],[0,0,0],[30,30,1.18],[60,60,2.36],[100,100,3.94]]}}),Ga=new ta({ident:`moistureAnom40`,legend:{description:[`mm`,`in`],lines:[[-60,-60,-2.36],[-30,-30,1.18],[0,0,0],[30,30,1.18],[60,60,2.36]]}}),z={temp:oa,wind:ca,rh:la,clouds:ua,pressure:da,rain:fa,snow:pa,cape:ma,gtco3:ha,aod550:ga,pm2p5:_a,no2:va,tcso2:ya,go3:ba,altitude:xa,elevation:Sa,distance:Ca,speed:wa,waves:Ta,currents:Ea,visibility:Da,visibilityNoRules:Oa,so2:ka,dust:Aa,cosc:ja,radar:Pa,satellite:Fa,ptype:Ia,radarPType:La,gh:Ra,fog:za,lightDensity:Ba,efiWind:Va,efiTemp:Ha,efiRain:Ua,drought:new Yi({ident:`drought`,defaults:[`drought`],conv:{drought:{conversion:L,precision:0}},legend:{isDiscrete:!0,labels:[[`INTERSUCHO_AWP_1`,`rgb(241,223,120)`],[`INTERSUCHO_AWP_2`,`rgb(236,184,50)`],[`INTERSUCHO_AWP_3`,`rgb(221,144,13)`],[`INTERSUCHO_AWP_4`,`rgb(194,95,0)`],[`INTERSUCHO_AWP_5`,`rgb(158,34,12)`],[`INTERSUCHO_AWP_6`,`rgb(120,0,19)`]]}}),moistureAnom40:Ga,moistureAnom100:Wa,fwi:new Zi({ident:`fwi`,defaults:[`fwi`],conv:{fwi:{conversion:L,precision:0}},legend:{isDiscrete:!0,labels:[[`INTERSUCHO_FWI_1`,`rgb(75,168,64)`],[`INTERSUCHO_FWI_2`,`rgb(234,232,63)`],[`INTERSUCHO_FWI_3`,`rgb(236,142,65)`],[`INTERSUCHO_FWI_4`,`rgb(220,60,48)`],[`INTERSUCHO_FWI_5`,`rgb(162,37,30)`],[`INTERSUCHO_FWI_6`,`rgb(131,42,109)`]]}}),dfm10h:new R({ident:`dfm10h`,defaults:[`%`],conv:{"%":{conversion:L,precision:0}},legend:{description:[`%`],lines:[[0,0],[4,4],[8,8],[10,10],[30,30],[40,40]]}}),solarpower:new R({ident:`solarpower`,defaults:[`W/m²`],conv:{"W/m²":{conversion:L,precision:0}},legend:{description:[`W/m²`],lines:[[0,0],[250,250],[500,500],[750,750],[1e3,1e3]]}}),wavePower:new R({ident:`wavePower`,defaults:[`kW/m`],conv:{"kW/m":{conversion:L,precision:0}},legend:{description:[`kW/m`],lines:[[0,0],[5,5],[10,10],[15,15],[20,20],[300,300]]}}),uvindex:new qi({ident:`uvindex`,defaults:[`uvindex`],conv:{uvindex:{conversion:L,precision:0}},legend:{isDiscrete:!0,hasEqualItemsWidth:!0,labels:[[`UV_LOW`,`rgb(41,148,26)`],[`UV_MODERATE`,`rgb(235,224,0)`],[`UV_HIGH`,`rgb(222,120,0)`],[`UV_VERY_HIGH`,`rgb(210,30,0)`],[`UV_EXTREME`,`rgb(162,83,144)`]]}}),turbulence:new $i({ident:`turbulence`,defaults:[`EDR`],conv:{EDR:{conversion:L,precision:0}},legend:{isDiscrete:!0,hasEqualItemsWidth:!0,labels:[[`TURBULENCE_LIGHT2`,`rgb(152,228,216)`],[`TURBULENCE_MODERATE2`,`rgb(130,174,46)`],[`TURBULENCE_SEVERE2`,`rgb(172,89,0)`],[`TURBULENCE_EXTREME2`,`rgb(154,13,81)`]]}}),icing:new ea({ident:`icing`,defaults:[`%`],conv:{"%":{conversion:L,precision:0}},legend:{isDiscrete:!0,hasEqualItemsWidth:!0,labels:[[`ICING_TRACE2`,`rgb(141,212,239)`],[`ICING_LIGHT2`,`rgb(89,176,228)`],[`ICING_MODERATE2`,`rgb(57,129,207)`],[`ICING_SEVERE2`,`rgb(55,68,186)`]]}}),area:new R({ident:`area`,defaults:[`km²`,`acres`],conv:{"km²":{conversion:L,precision:1},acres:{conversion:e=>e*247.105,precision:0}}}),aqi:new R({ident:`aqi`,defaults:[`AQI`],conv:{AQI:{conversion:L,precision:0}},legend:{isDiscrete:!0,hasEqualItemsWidth:!0,labels:[[`AIRQ_RANGE_GOOD`,`rgb(20,140,20)`],[`AIRQ_RANGE_MODERATE`,`rgb(188,188,38)`],[`AIRQ_RANGE_UNHEALTHY`,`rgb(201,131,60)`],[`AIRQ_RANGE_HAZARDOUS`,`rgb(186, 47, 87)`]]}}),pollen:new R({ident:`pollen`,defaults:[`gr./m³`],conv:{"gr./m³":{conversion:L,precision:0}}}),fallback:new R({ident:`fallback`,defaults:[`fallback`],conv:{fallback:{conversion:L,precision:0}}}
2),period:new R({ident:`period`,defaults:[`s.`],conv:{"s.":{conversion:L,precision:1}}})};var Ka=y({IDB:()=>Ya,allUsedCollections:()=>qa,idbEmitter:()=>Ja});const qa=[`customColors`,`installedPlugins2`,`lastPluginState`,`likedStoryComments`,`log`,`markedNotams`,`popularLocations`,`searchRecents2`,`seenPromos`,`slidedCapAlerts`,`userAlerts`,`userFavs`],Ja=new Bn({ident:`idb`});var Ya=class{constructor(e){C(this,`storeId`,void 0),C(this,`memoryCache`,void 0),C(this,`cacheIsValid`,!1),C(this,`connection`,void 0),C(this,`usesBackendSync`,void 0),C(this,`apiEndpoint`,void 0),C(this,`syncToNativeStorage`,void 0),C(this,`lastTimeUpdatedKey`,`__lastTimeUpdated`),this.storeId=e.storeId,this.connection=e.connection,this.connection.onCloseDb(()=>{this.cacheIsValid=!1,this.memoryCache=[]}),this.syncToNativeStorage=!!e.syncToNativeStorage,this.usesBackendSync=!!e.backendApiEndpoint,this.usesBackendSync&&(this.apiEndpoint=`/users/v1/data/${e.backendApiEndpoint}`)}async getAll(){var e=this;if(e.cacheIsValid)return e.memoryCache;{let t=await e.connection.getDb();return new Promise((n,r)=>{let i=t.transaction(e.storeId,`readonly`),a=i.objectStore(e.storeId).getAll();i.commit(),a.onsuccess=()=>{let{result:t}=a,r=t.filter(e=>typeof e==`object`);e.memoryCache=r,e.cacheIsValid=!0,n(r)},a.onerror=e=>{O(`IDB`,`Failed to find items in database`,e),r(e)}})}}async removeAll(){var e=this;e.cacheIsValid=!1;let t=await e.connection.getDb();return new Promise((n,r)=>{let i=t.transaction(e.storeId,`readwrite`),a=i.objectStore(e.storeId).clear();i.commit(),a.onsuccess=()=>{Ja.emit(`_nativeSync`,{storeId:e.storeId,syncToNativeStorage:e.syncToNativeStorage}),n()},a.onerror=e=>{O(`IDB`,`Failed to clear store`,e),r(e)}})}async hasKey(e){var t=this;let n=await t.connection.getDb();return new Promise((r,i)=>{let a=n.transaction(t.storeId,`readonly`),o=a.objectStore(t.storeId).count(e);a.commit(),o.onsuccess=()=>{r(!!o.result)},o.onerror=e=>{O(`IDB`,`Failed to retrieve key`,e),i(e)}})}async get(e){var t=this;let n=await t.connection.getDb();return new Promise((r,i)=>{let a=n.transaction(t.storeId,`readonly`),o=a.objectStore(t.storeId).get(e);a.commit(),o.onsuccess=()=>{o.result===void 0?r(null):r(o.result)},o.onerror=e=>{O(`IDB`,`Failed to retrieve value from database`,e),i(e)}})}async remove(e,t=!1){var n=this;n.cacheIsValid=!1;let r=await n.connection.getDb();if(n.usesBackendSync&&!t)try{await si(`${n.apiEndpoint}/${encodeURIComponent(e)}`)}catch(e){if(!(e instanceof Xe&&e.status===404))throw Error(`Failed to remove item from IDB due to network error`)}return new Promise((t,i)=>{let a=r.transaction(n.storeId,`readwrite`);a.objectStore(n.storeId).delete(e),a.commit(),a.oncomplete=()=>{Ja.emit(`_nativeSync`,{storeId:n.storeId,syncToNativeStorage:n.syncToNativeStorage}),t()},a.onerror=e=>{O(`IDB`,`Failed to remove key from database`,e),i(e)}})}async add(e){var t=this;if(!t.usesBackendSync)throw Error(`Cannot add items to IDB without backend sync`);t.cacheIsValid=!1;let n=await t.connection.getDb(),{data:{value:r,id:i}}=await ci(t.apiEndpoint,{data:e});return new Promise((e,a)=>{let o=n.transaction(t.storeId,`readwrite`);o.objectStore(t.storeId).put(r,i),o.commit(),o.oncomplete=()=>{Ja.emit(`_nativeSync`,{storeId:t.storeId,syncToNativeStorage:t.syncToNativeStorage}),e(i)},o.onerror=e=>{O(`IDB`,`Failed to add item to database`,e),a(e)}})}async put(e,t,n=!1){var r=this;r.cacheIsValid=!1;let i=await r.connection.getDb();if(r.usesBackendSync&&!n){let n=encodeURIComponent(e);await li(`${r.apiEndpoint}/${n}`,{data:t})}return new Promise((n,a)=>{let o=i.transaction(r.storeId,`readwrite`);o.objectStore(r.storeId).put(t,e),o.commit(),o.oncomplete=()=>{Ja.emit(`_nativeSync`,{storeId:r.storeId,syncToNativeStorage:r.syncToNativeStorage}),n()},o.onerror=e=>{O(`IDB`,`Failed to put item to database`,e),a(e)}})}async loadFromCloud(){var e=this;let t=await e.get(e.lastTimeUpdatedKey),{status:n,data:r}=await I(`${e.apiEndpoint}?storeTs=${t||0}`);if(n===304||n===204)return!1;let i=await e.getAll(),a=r,o=a.map(({value:{id:e}})=>e);for(let t of i){let{id:n}=t;o.includes(n)||await e.remove(n,!0)}let s=0;for(let{value:t,updated:n,id:r}of a)await e.put(r,t,!0),n>s&&(s=n);return await e.put(e.lastTimeUpdatedKey,s,!0),!0}},Xa=class{constructor(e){this.databaseName=e,C(this,`dbPromise`,null),C(this,`closeDbListeners`,new Set)}onCloseDb(e){this.closeDbListeners.add(e)}async getDb(){var e=this;return e.dbPromise===null&&(e.dbPromise=e.connect()),e.dbPromise}async deleteDb(){var e=this;await e.closeDb(),await new Promise((t,n)=>{let r=indexedDB.deleteDatabase(e.databaseName);r.onsuccess=()=>{t()},r.onerror=e.createFailHandler(n),r.onblocked=e.createFailHandler(n),r.onupgradeneeded=e.createFailHandler(n)})}async closeDb(){var e=this;e.dbPromise&&((await e.dbPromise).close(),e.dbPromise=null,e.closeDbListeners.forEac
2h(e=>e()))}async connect(e){var t=this;return new Promise((n,r)=>{let i=indexedDB.open(t.databaseName,e);i.onerror=t.createFailHandler(r),i.onblocked=t.createFailHandler(r),i.onsuccess=async()=>{if(i.result.onversionchange=async()=>{await t.closeDb()},qa.some(e=>!i.result.objectStoreNames.contains(e))){let e=i.result.version+1;i.result.close(),n(t.connect(e));return}n(i.result)},i.onupgradeneeded=e=>{qa.filter(e=>!i.result.objectStoreNames.contains(e)).forEach(e=>{i.result.createObjectStore(e)})}})}createFailHandler(e){var t=this;return async n=>{await t.closeDb(),O(`idbConnection`,`IDB operation failed, event type: ${n.type}, event class: ${n.constructor.name}`,n),e(n)}}},Za=y({clearIndexedDB:()=>uo,customColorsIdb:()=>io,installedPluginsIdb:()=>co,lastPluginStateIdb:()=>lo,logIdb:()=>oo,markedNotamsIdb:()=>no,popularLocationsIdb:()=>so,searchRecentsIdb:()=>eo,seenPromosIdb:()=>ro,slidedCapAlertsIdb:()=>ao,userAlertsIdb:()=>to,userFavsIdb:()=>$a});const Qa=new Xa(`windy`),$a=new Ya({connection:Qa,storeId:`userFavs`,backendApiEndpoint:`favs`,syncToNativeStorage:!0}),eo=new Ya({connection:Qa,storeId:`searchRecents2`}),to=new Ya({connection:Qa,storeId:`userAlerts`,backendApiEndpoint:`alerts`}),no=new Ya({connection:Qa,storeId:`markedNotams`,backendApiEndpoint:`notams`}),ro=new Ya({connection:Qa,storeId:`seenPromos`}),io=new Ya({connection:Qa,storeId:`customColors`,backendApiEndpoint:`colors`}),ao=new Ya({connection:Qa,storeId:`slidedCapAlerts`}),oo=new Ya({connection:Qa,storeId:`log`}),so=new Ya({connection:Qa,storeId:`popularLocations`}),co=new Ya({connection:Qa,storeId:`installedPlugins2`,backendApiEndpoint:`plugins`}),lo=new Ya({connection:Qa,storeId:`lastPluginState`}),uo=async()=>{await Qa.deleteDb()};var fo=y({Color:()=>B,PrecomputedGradient:()=>mo});const po=[128,128,128,255];var mo=class{constructor(e,t,n,r,i=!0,a=!1){C(this,`_maxIndex`,void 0),C(this,`_step`,void 0),C(this,`min`,void 0),C(this,`max`,void 0),C(this,`steps`,void 0),C(this,`precomputedColors`,void 0),this.min=n,this.max=r,this.steps=t,this.precomputedColors=go(e,t,n,r,i,a),this._maxIndex=this.precomputedColors.length-4,this._step=(this.max-this.min)/this.steps}color(e){let[t,n,r]=this.RGBA(e);return`rgb(${t},${n},${r})`}colorDark(e,t){let[n,r,i]=this.RGBA(e);return n=D(n-t,0,255),r=D(r-t,0,255),i=D(i-t,0,255),`rgb(${n},${r},${i})`}RGBA(e){if(isNaN(e))return po;let t=this._value2index(e);return[this.precomputedColors[t],this.precomputedColors[t+1],this.prec
2omputedColors[t+2],this.precomputedColors[t+3]]}_value2index(e){return D(this._maxIndex,0,(e-this.min)/this._step<<2)}},B=class{get min(){return this.minMaxValue?this.minMaxValue[0]:this.getColorGradient()[0][0]}get max(){if(this.minMaxValue)return this.minMaxValue[1];let e=this.getColorGradient();return e[e.length-1][0]}constructor(e){var t,n;C(this,`prepare`,void 0),C(this,`opaque`,void 0),C(this,`initialColorGradient`,void 0),C(this,`defaultColorGradient`,void 0),C(this,`customColorGradient`,void 0),C(this,`minMaxValue`,void 0),C(this,`_precomputedGradient`,null),C(this,`ident`,void 0),C(this,`qualitative`,void 0),C(this,`steps`,void 0),this.ident=e.ident,this.qualitative=e.qualitative,this.steps=(t=e.steps)==null?256:t,this.initialColorGradient=e.default,this.opaque=(n=e.opaque)==null?!0:n,this.prepare=e.prepare,this.minMaxValue=e.minMaxValue,this.prepare&&this.getColor(),this.loadCustomColor()}async loadCustomColor(){var e=this;if(await io.hasKey(e.ident)){let t=await io.get(e.ident);e.customColorGradient=t==null?void 0:t.gradient,e._precomputedGradient=null}}hasCustomColor(){return!!this.customColorGradient}async setCustomColor(e,t=!0){var n=this;t&&await io.put(n.ident,{id:n.ident,gradient:e}),n.customColorGradient=e,n._precomputedGradient=null}async removeCustomColor(){var e=this;await io.remove(e.ident),e.customColorGradient=null,e._precomputedGradient=null}getColor(){return this._precomputedGradient?this._precomputedGradient:this._generatePrecomputedColors()}getColorGradient(){return this.customColorGradient||this.defaultColorGradient||(this.defaultColorGradient=_o(this.initialColorGradient),this.defaultColorGradient)}color(e){return this.getColor().color(e)}colorDark(e,t){return this.getColor().colorDark(e,t)}RGBA(e){return this.getColor().RGBA(e)}_generatePrecomputedColors(){let e=new mo(this.getColorGradient(),this.steps,this.min,this.max,this.opaque);return this._precomputedGradient=e,e}};function ho(e){let t=e.match(/rgba?\(([^)]+)\)/);if(!t)throw Error(`Invalid color format: ${e}`);let n=t[1].split(`,`).map(Number);return n.length===3?n.push(255):n.length===4&&(n[3]=Math.min(255,Math.round(255*n[3]))),n}function go(e,t,n,r,i,a){var o;let s=new Uint8Array(t<<2),c=(r-n)/(t-1),l=0,u=1,d=e[0],f=(o=e[u++])==null?e[0]:o,p=f[0]-d[0],m=p?1/p:1;for(let r=0;r<t;r++){let t=n+c*r;for(;t>f[0]&&u<e.length;){d=f,f=e[u++];let t=f[0]-d[0];m=t?1/t:1}let o=(t-d[0])*m,p=Co(d[1],f[1],o);a&&wo(p),s[l++]=Math.round(p[0]),s[l++]=Math.round(p[1]),s[l++]=Math.round(p[2]),s[l++]=i?255:Math.round(p[3])}return s}function _o(e){let t=[];for(let n=0;n<e.length;n++){let r=ho(e[n][1]);t.push([e[n][0],r])}return t}function vo(e,t){let n=[],r=e.length;for(let i=0;i<r;i++)n.push(e[i]*t);return n}function yo(e,t,n){let r=1-n,i=e.length,a=[];for(let o=0;o<i;o++)a.push(e[o]*r+t[o]*n);return a}function bo([e,t,n,r]){let i=.299*e+.587*t+.114*n;return[i,(n-i)*.565,(e-i)*.713,r]}function xo([e,t,n,r]){return[e+1.403*n,e-.344*t-.714*n,e+1.77*t,r]}function So(e,t,n,r){let i=yo(e,t,n);if(r){let r=lt(e[1],e[2]),a=lt(t[1],t[2]);if(r>.05&&a>.05){let e=lt(i[1],i[2]),t=r*(1-n)+a*n;if(e>.01){let n=t/e;i[1]*=n,i[2]*=n}}}return i}function Co(e,t,n){let r=1/255,i=vo(e,r),a=vo(t,r),o=xo(So(bo(i),bo(a),n,!0));for(let e=0;e<o.length;e++)o[e]=D(o[e]*256,0,255);return o}function wo(e){let t=e[3]/255;for(let n=0;n<3;n++)e[n]=D(t*e[n],0,255);return e}const To=[`rgb(79,4,0)`,`rgb(107,45,0)`,`rgb(132,77,0)`,`rgb(153,106,5)`,`rgb(169,131,56)`,`rgb(182,153,85)`,`rgb(192,172,110)`,`rgb(197,186,132)`,`rgb(200,196,152)`,`rgb(200,202,170)`,`rgb(201,201,201)`,`rgb(190,204,179)`,`rgb(173,202,173)`,`rgb(150,197,170)`,`rgb(125,188,168)`,`rgb(97,174,165)`,`rgb(71,157,161)`,`rgb(48,135,153)`,`rgb(49,109,138)`,`rgb(50,80,117)`,`rgb(48,48,94)`],Eo=[`rgb(0,102,151)`,`rgb(125,182,209)`,`rgb(170,183,189)`,`rgb(194,195,125)`,`rgb(232,83,25)`,`rgb(189,52,19)`,`rgb(75,12,0)`],Do=[`rgb(166,93,165)`,`rgb(162,97,160)`,`rgb(167,91,91)`,`rgb(167,91,91)`,`rgb(98,122,160)`,`rgb(98,122,160)`,`rgb(90,169,90)`,`rgb(91,167,99)`,`rgb(119,141,120)`],V={temp:new B({ident:`temp`,steps:2048,prepare:!0,default:[[203,`rgb(115,70,105)`],[218,`rgb(202,172,195)`],[233,`rgb(162,70,145)`],[248,`rgb(143,89,169)`],[258,`rgb(157,219,217)`],[265,`rgb(106,191,181)`],[269,`rgb(100,166,189)`],[273.15,`rgb(93,133,198)`],[274,`rgb(68,125,99)`],[283,`rgb(128,147,24)`],[294,`rgb(243,183,4)`],[303,`rgb(232,83,25)`],[320,`rgb(71,14,0)`]]}),wind:new B({ident:`wind`,steps:2048,prepare:!0,default:[[0,`rgb(98,113,183)`],[1,`rgb(57,97,159)`],[3,`rgb(74,148,169)`],[5,`rgb(77,141,123)`],[7,`rgb(83,165,83)`],[9,`rgb(53,159,53)`],[11,`rgb(167,157,81)`],[13,`rgb(159,127,58)`],[15,`rgb(161,108,92)`],[17,`rgb(129,58,78)`],[19,`rgb(175,80,136)`],[21,`rgb(117,74,147)`],[24,`rgb(109,97,163)`],[27,`rgb(68,105,141)`],[29,`rgb(92,144,152)`],[36,`rgb(125,68,165)`],[46,`rgb(231,215,215)`],[51,`rgb(219,212,135)`],[77,`rgb(205,202,112)`],[104,`rgb(128,128,128)`]]}),rh:new B({ident:`rh`,steps:1024,default:[[0,`rgb(173,85,56)`],[30,`rgb(173,110,56)`],[40,`rgb(173,146,56)`],[50,`rgb(105,173,56)`],[60,`rgb(56,173,121)`],[70,`rgb(56,174,173)`],[75,`rgb(56,160,173)`],[80,`rgb(56,157,173)`],[83,`rgb(56,148,173)`],[87,`rgb(56,135,173)`],[90,`rgb(56,132,173)`],[93,`rgb(56,123,173)`],[97,`rgb(56,98,157)`],[100,`rgb(56,70,114)`]]}),pressure:new B({ident:`pressure`,steps:4e3,default:[[9e4,`rgb(8,16,48)`],[95e3,`rgb(0,32,96)`],[97600,`rgb(0,52,146)`],[98600,`rgb(0,90,148)`],[99500,`rgb(0,117,146)`],[100200,`rgb(26,140,147)`],[100700,`rgb(103,162,155)`],[101125,`rgb(155,183,172)`],[101325,`rgb(182,182,182)`],[101525,`rgb(176,174,152)`],[101900,`rgb(167,147,107)`],[102400,`rgb(163,116,67)`],[103e3,`rgb(159,81,44)`],[103800,`rgb(142,47,57)`],[104600,`rgb(111,24,64)`],[108e3,`rgb(48,8,24)`]]}),cclAltitude:new B({ident:`cclAltitude`,steps:1024,default:[[0,`rgb(128,128,128)`],[500,`rgb(128,128,128)`],[1e3,`rgb(213,211,173)`],[2e3,`rgb(199,143,32)`],[2500,`rgb(201,109,12)`],[3e3,`rgb(193,72,16)`],[4500,`rgb(159,29,43)`],[5e3,`rgb(133,12,12)`],[8e3,`rgb(83,5,36)`]]}),deg0:new B({ident:`deg0`,steps:1024,default:[[0,`rgb(188,197,195)`],[500,`rgb(155,195,189)`],[750,`rgb(93,173,156)`],[1000.15,`rgb(80,141,129)`],[1500,`rgb(55,122,109)`],[2e3,`rgb(39,93,82)`],[3e3,`rgb(33,68,73)`],[5e3,`rgb(32,55,71)`],[1e4,`rgb(28,33,64)`],[15e3,`rgb(6,6,6)`]]}),levels:new B({ident:`levels`,steps:2048,default:[[0,`rgb(105,117,140)`],[1e3,`rgb(94,131,150)`],[4e3,`rgb(71,145,154)`],[8e3,`rgb(78,179,102)`],[1e4,`rgb(189,189,68)`],[12e3,`rgb(177,80,80)`],[15e3,`rgb(178,80,178)`],[2e4,`rgb(184,184,184)`]]}),rain:new B({ident:`rain`,steps:1024,prepare:!0,default:[[0,`rgb(111,111,111)`],[.6,`rgb(60,116,160)`],[6,`rgb(59,161,161)`],[8,`rgb(59,161,61)`],[10,`rgb(130,161,59)`],[15,`rgb(161,161,59)`],[20,`rgb(161,59,59)`],[31,`rgb(161,59,161)`],[50,`rgb(168,168,168)`]]}),ptype:new B({ident:`ptype`,steps:128,qualitative:!0,default:[[0,`rgb(111,111,111)`],[1,`rgb(0,208,239)`],[2,`rgb(0,0,255)`],[3,`rgb(197,27,195)`],[4,`rgb(129,63,63)`],[5,`rgb(227,227,227)`],[6,`rgb(129,195,
2129)`],[7,`rgb(202,211,57)`],[8,`rgb(183,119,8)`],[9,`rgb(227,73,19)`],[10,`rgb(195,63,63)`]]}),rainClouds:new B({ident:`rainClouds`,steps:128,opaque:!1,default:[[0,`rgba(67, 87, 166, 0.2)`],[.8,`rgba(70, 102, 163, 0.3)`],[2,`rgba(62, 171, 171, 0.4)`],[6,`rgba(62, 171, 171, 0.9)`],[8,`rgb(62, 142, 62)`],[10,`rgb(129, 156, 62)`],[15,`rgb(171, 171, 62)`],[20,`rgb(169, 62, 62)`],[31,`rgb(171, 62, 171)`],[50,`rgb(177, 177, 177)`]]}),clouds:new B({ident:`clouds`,steps:800,default:[[0,`rgb(146,130,70)`],[10,`rgb(132,119,70)`],[50,`rgb(116,116,116)`],[95,`rgb(171,180,179)`],[98,`rgb(198,201,201)`],[100,`rgb(213,213,205)`]]}),lclouds:new B({ident:`lclouds`,steps:800,default:[[0,`rgb(156,142,87)`],[10,`rgb(143,131,87)`],[30,`rgb(129,129,129)`],[90,`rgb(137,159,182)`],[100,`rgb(187,187,187)`]]}),hclouds:new B({ident:`hclouds`,steps:800,default:[[0,`rgb(156,142,87)`],[10,`rgb(143,131,87)`],[30,`rgb(125,157,157)`],[90,`rgb(141,169,169)`],[100,`rgb(187,187,187)`]]}),mclouds:new B({ident:`mclouds`,steps:800,default:[[0,`rgba(156, 142, 87, 1)`],[10,`rgb(143,131,87)`],[30,`rgb(157,192,157)`],[90,`rgb(145,171,145)`],[100,`rgb(187,187,187)`]]}),cape:new B({ident:`cape`,steps:1024,default:[[0,`rgb(110,110,110)`],[350,`rgb(110,110,110)`],[400,`rgb(93,95,127)`],[500,`rgb(37,98,145)`],[800,`rgb(37,165,37)`],[1500,`rgb(163,161,55)`],[2e3,`rgb(155,112,63)`],[2500,`rgb(162,55,55)`],[5001,`rgb(151,68,151)`]]}),lightDensity:new B({ident:`lightDensity`,steps:2048,default:[[0,`rgb(136,136,136)`],[.015,`rgb(136,136,136)`],[.025,`rgb(136,200,0)`],[.1,`rgb(218,218,0)`],[1,`rgb(241,95,0)`],[2,`rgb(248,78,120)`],[4,`rgb(135,0,0)`],[15,`rgb(221,101,255)`]]}),cbase:new B({ident:`cbase`,steps:512,default:Tn(Do,[0,129,149,279,299,879,914,1499,7999])}),snow:new B({ident:`snow`,steps:2048,default:[[0,`rgb(97,97,97)`],[2,`rgb(69,82,152)`],[10,`rgb(65,165,167)`],[20,`rgb(65,141,65)`],[50,`rgb(168,168,65)`],[80,`rgb(170,126,63)`],[120,`rgb(167,65,65)`],[500,`rgb(168,65,168)`]]}),rainAccu:new B({ident:`rainAccu`,steps:12e3,default:[[0,`rgb(97,97,97)`],[1,`rgb(64,64,163)`],[5,`rgb(70,106,227)`],[10,`rgb(41,187,236)`],[30,`rgb(49,241,153)`],[50,`rgb(163,253,61)`],[80,`rgb(237,208,59)`],[120,`rgb(251,128,34)`],[200,`rgb(210,49,4)`],[320,`rgb(122,4,3)`],[600,`rgb(48,0,0)`],[8e3,`rgb(24,0,0)`]]}),waves:new B({ident:`waves`,steps:1024,default:[[0,`rgb(159,185,191)`],[.5,`rgb(48,157,185)`],[1,`rgb(48,98,141)`],[1.5,`rgb(56,104,191)`],[2,`rgb(57,60,142)`],[2.5,`rgb(187,90,191)`],[3,`rgb(154,48,151)`],[4,`rgb(133,48,48)`],[5,`rgb(191,51,95)`],[7,`rgb(191,103,87)`],[10,`rgb(191,191,191)`],[12,`rgb(154,127,155)`]]}),currents:new B({ident:`currents`,steps:256,default:[[0,`rgb(64,77,143)`],[.02,`rgb(50,86,142)`],[.06,`rgb(50,123,142)`],[.1,`rgb(64,120,103)`],[.15,`rgb(50,133,50)`],[.2,`rgb(50,141,50)`],[.3,`rgb(142,132,50)`],[.4,`rgb(142,113,50)`],[.5,`rgb(130,77,61)`],[.6,`rgb(115,50,68)`],[.7,`rgb(142,50,104)`],[.8,`rgb(105,68,131)`],[.85,`rgb(81,70,131)`],[.9,`rgb(65,98,131)`],[1,`rgb(73,122,131)`],[1.5,`rgb(143,143,143)`],[4,`rgb(143,143,143)`]]}),visibility:new B({ident:`visibility`,steps:1024,default:Tn(Do,[0,1600,2200,5e3,6e3,8e3,9e3,15e3,20004])}),gtco3:new B({ident:`gtco3`,steps:512,default:[[180,`rgb(53,25,47)`],[218,`rgb(162,70,145)`],[223,`rgb(110,81,217)`],[260,`rgb(79,151,193)`],[320,`rgb(82,203,167)`],[360,`rgb(59,197,67)`],[420,`rgb(231,174,5)`],[500,`rgb(232,83,25)`]]}),aod550:new B({ident:`aod550`,steps:4096,default:Tn(Eo,[0,.25,.5,1,2,3,4])}),pm2p5:new B({ident:`pm2p5`,steps:4096,default:Tn(Eo,[0,10,15,25,150,200,300])}),no2:new B({ident:`no2`,steps:4096,default:Tn(Eo,[0,1.5,2,3,30,40,100])}),tcso2:new B({ident:`tcso2`,steps:4096,default:Tn(Eo,[0,1.5,2,3,30,40,100])}),go3:new B({ident:`go3`,steps:4096,default:Tn(Eo,[25,75,85,105,160,200,250])}),cosc:new B({ident:`cosc`,steps:4e3,default:[[0,`rgb(124,124,124)`],[70,`rgb(124,124,108)`],[110,`rgb(164,157,72)`],[200,`rgb(136,113,47)`],[450,`rgb(39,31,31)`],[2200,`rgb(255,22,22)`]]}),dust:new B({ident:`dust`,steps:8e3,default:[[0,`rgb(171,171,171)`],[10,`rgb(148,137,118)`],[80,`rgb(124,104,59)`],[800,`rgb(100,73,0)`],[1200,`rgb(74,44,0)`]]}),radar:new B({ident:`radar`,opaque:!1,default:[[0,`rgba(40,16,158,0)`],[3,`rgba(40,16,158,0.078)`],[8,`rgba(40,16,158,0.392)`],[14,`rgba(0,101,
2154,0.706)`],[20,`rgba(0,144,147,0.863)`],[26,`rgba(0,179,125,0.941)`],[32,`rgba(117,208,89,1)`],[36,`rgba(220,220,30,1)`],[40,`rgba(244,202,8,1)`],[44,`rgba(245,168,24,1)`],[48,`rgba(236,130,63,1)`],[52,`rgba(205,75,75,1)`],[56,`rgba(182,45,100,1)`],[60,`rgba(156,16,109,1)`],[64,`rgba(125,0,108,1)`],[68,`rgba(92,0,100,1)`],[100,`rgba(0,0,0,1)`],[101,`rgba(0,0,0,0)`],[255,`rgba(0,0,0,0)`]],minMaxValue:[0,256]}),satellite:new B({ident:`satellite`,steps:256,opaque:!1,default:[[0,`rgb(24,24,24)`],[149,`rgb(240,240,240)`],[150,`rgb(64,64,163)`],[159,`rgb(70,106,227)`],[168,`rgb(41,187,236)`],[177,`rgb(49,241,153)`],[186,`rgb(163,253,61)`],[195,`rgb(237,208,59)`],[205,`rgb(251,128,34)`],[214,`rgb(210,49,4)`],[223,`rgb(122,4,3)`],[256,`rgb(48,0,0)`]],minMaxValue:[0,256]}),fog:new B({ident:`fog`,steps:512,default:[[0,`rgb(110,110,110)`],[1,`rgb(200,200,200)`],[2,`rgb(200,200,255)`]]}),justGray:new B({ident:`justGray`,steps:4,default:[[-2e4,`rgb(111,111,111)`],[2e4,`rgb(111,111,111)`]]}),efiWind:new B({ident:`efiWind`,steps:256,default:[[-1,`rgb(5,165,189)`],[-.8,`rgb(30,175,119)`],[-.4,`rgb(111,111,111)`],[.4,`rgb(111,111,111)`],[.8,`rgb(187,174,24)`],[1,`rgb(189,80,32)`]]}),efiTemp:new B({ident:`efiTemp`,steps:256,default:[[-1,`rgb(43,54,209)`],[-.8,`rgb(60,164,179)`],[-.4,`rgb(111,111,111)`],[.4,`rgb(111,111,111)`],[.8,`rgb(128,147,24)`],[1,`rgb(213,0,110)`]]}),efiRain:new B({ident:`efiRain`,steps:256,default:[[-1,`rgb(151,75,0)`],[-.8,`rgb(187,180,0)`],[-.4,`rgb(111,111,111)`],[.4,`rgb(111,111,111)`],[.8,`rgb(1,162,177)`],[1,`rgb(4,8,181)`]]}),moistureAnom40:new B({ident:`moistureAnom40`,steps:1024,default:Tn(To,[-40,-32,-25,-19,-13,-8,-5,-3,-2,-1,0,1,2,3,5,8,13,19,25,32,40])}),moistureAnom100:new B({ident:`moistureAnom100`,steps:1024,default:Tn(To,[-100,-80,-55,-40,-25,-16,-10,-6,-4,-2,0,2,4,6,10,16,25,40,55,80,100])}),drought:new B({ident:`drought`,steps:1024,default:[[-1,`rgb(200,200,200)`],[-.5,`rgb(200,200,200)`],[-.49,`rgb(240,222,120)`],[.5,`rgb(240,222,120)`],[.51,`rgb(235,183,50)`],[1.5,`rgb(235,183,50)`],[1.51,`rgb(220,143,13)`],[2.5,`rgb(220,143,13)`],[2.51,`rgb(193,95,0)`],[3.5,`rgb(193,95,0)`],[3.51,`rgb(157,34,12)`],[4.5,`rgb(157,34,12)`],[4.51,`rgb(120,0,19)`],[5,`rgb(120,0,19)`]]}),soilMoisture:new B({ident:`soilMoisture`,steps:1024,default:[[0,`rgb(101,59,9)`],[10,`rgb(170,118,79)`],[20,`rgb(205,163,137)`],[30,`rgb(233,203,187)`],[40,`rgb(251,236,228)`],[50,`rgb(255,255,255)`],[60,`rgb(231,239,253)`],[70,`rgb(193,210,236)`],[80,`rgb(146,174,212)`],[90,`rgb(89,133,182)`],[100,`rgb(6,86,141)`]]}),fwi:new B({ident:`fwi`,steps:256,default:[[.5,`rgb(81,178,55)`],[1.49,`rgb(81,178,55)`],[1.5,`rgb(234,235,3)`],[2.49,`rgb(234,235,3)`],[2.5,`rgb(237,151,58)`],[3.49,`rgb(237,151,58)`],[3.5,`rgb(224,64,47)`],[4.49,`rgb(224,64,47)`],[4.5,`rgb(171,36,27)`],[5.49,`rgb(171,36,27)`],[5.5,`rgb(117,55,143)`],[6.49,`rgb(117,55,143)`]]}),dfm10h:new B({ident:`dfm10h`,steps:1024,default:[[2,`rgb(111,11,3)`],[4,`rgb(214,81,26)`],[6,`rgb(249,159,64)`],[9,`rgb(249,229,79)`],[12,`rgb(251,255,191)`],[15,`rgb(239,239,239)`],[18,`rgb(205,228,254)`],[21,`rgb(139,172,253)`],[25,`rgb(82,127,207)`],[30,`rgb(44,61,158)`],[35,`rgb(26,34,113)`]]}),solarpower:new B({ident:`solarpower`,steps:2e3,default:[[0,`rgb(110,110,110)`],[5,`rgb(122,105,106)`],[50,`rgb(194,53,81)`],[100,`rgb(199,66,81)`],[200,`rgb(208,90,81)`],[400,`rgb(226,131,90)`],[600,`rgb(242,170,110)`],[800,`rgb(255,208,141)`],[1e3,`rgb(255,245,180)`],[1150,`rgb(255,255,255)`]]}),uvindex:new B({ident:`uvindex`,steps:4096,default:[[0,`rgb(110,110,110)`],[2,`rgb(61,167,46)`],[5,`rgb(255,243,0)`],[7,`rgb(241,139,1)`],[10,`rgb(229,50,17)`],[11,`rgb(181,103,164)`],[19,`rgb(255,255,255)`]]}),wetbulbtemp:new B({ident:`wetbulbtemp`,steps:2048,default:[[203,`rgb(128,128,128)`],[273.15,`rgb(255,255,255)`],[283.2,`rgb(241,236,197)`],[291.5,`rgb(229,216,65)`],[295.4,`rgb(240,190,0)`],[298,`rgb(237,152,0)`],[300,`rgb(223,106,0)`],[302,`rgb(201,44,44)`],[304,`rgb(128,0,0)`],[305,`rgb(0,0,0)`]]}),turbulence:new B({ident:`turbulence`,steps:2048,default:[[14.9,`rgb(121,121,121)`],[15,`rgb(152,228,216)`],[19.9,`rgb(152,228,216)`],[20,`rgb(130,174,46)`],[43.9,`rgb(130,174,46)`],[44,`rgb(172,89,0)`],[78.9,`rgb(172,89,0)`],[79,`rgb(154,13,81)`]]}),icing:new B({ident:`icing`,steps:2048,default:[[24.9,`rgb(121,121,121)`],[25,`rgb(141,212,239)`],[29.9,`rgb(141,212,239)`],[3
20,`rgb(89,176,228)`],[34.9,`rgb(89,176,228)`],[35,`rgb(57,129,207)`],[54.9,`rgb(57,129,207)`],[55,`rgb(55,68,186)`]]}),aqi:new B({ident:`aqi`,steps:2048,default:[[0,`rgb(20,140,20)`],[30,`rgb(0,114,0)`],[50,`rgb(204,243,50)`],[60,`rgb(182,182,4)`],[80,`rgb(255,197,81)`],[100,`rgb(201,131,60)`],[150,`rgb(171,50,50)`],[200,`rgb(176,78,185)`],[300,`rgb(186,47,87)`],[1e3,`rgb(47,9,20)`]]}),dewpoint:new B({ident:`dewpoint`,steps:2048,prepare:!0,default:[[203,`rgb(115, 70, 105)`],[218,`rgb(202, 172, 195)`],[233,`rgb(162, 70, 145)`],[248,`rgb(143, 89, 169)`],[258,`rgb(157, 219, 217)`],[265,`rgb(106, 191, 181)`],[269,`rgb(100, 166, 189)`],[273.15,`rgb(93, 133, 198)`],[274,`rgb(68, 125, 99)`],[283,`rgb(128, 147, 24)`],[294,`rgb(243, 183, 4)`],[303,`rgb(232, 83, 25)`],[320,`rgb(71, 14, 0)`]]}),wavePower:new B({ident:`wavePower`,steps:2048,default:[[0,`rgb(88, 92, 209)`],[2,`rgb(91, 140, 196)`],[5,`rgb(75, 162, 163)`],[8,`rgb(42, 120, 111)`],[10,`rgb(56, 133, 104)`],[13,`rgb(65, 150, 104)`],[16,`rgb(110, 161, 69)`],[20,`rgb(167, 191, 71)`],[25,`rgb(207, 198, 82)`],[30,`rgb(222, 195, 85)`],[35,`rgb(212, 166, 69)`],[40,`rgb(214, 141, 72)`],[70,`rgb(224, 113, 65)`],[100,`rgb(250, 55, 178)`],[300,`rgb(209, 50, 209)`]]}),sst:new B({ident:`sst`,steps:2048,prepare:!0,default:[[203,`rgb(115,70,105)`],[218,`rgb(202,172,195)`],[233,`rgb(162,70,145)`],[248,`rgb(143,89,169)`],[258,`rgb(157,219,217)`],[265,`rgb(106,191,181)`],[269,`rgb(100,166,189)`],[273.15,`rgb(93,133,198)`],[274,`rgb(68,125,99)`],[283,`rgb(128,147,24)`],[294,`rgb(243,183,4)`],[303,`rgb(232,83,25)`],[320,`rgb(71,14,0)`]]}),fallback:new B({ident:`fallback`,steps:4,prepare:!0,default:[[-2e4,`rgb(111,111,111)`],[2e4,`rgb(111,111,111)`]]})};var Oo=y({Overlay:()=>H}),H=class{constructor(e){var t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g,_,ee,te,ne,v,re,ie,ae,y,oe,se,ce,le;C(this,`ident`,void 0),C(this,`trans`,void 0),C(this,`transShort`,void 0),C(this,`hasMoreLevels`,void 0),C(this,`icon`,void 0),C(this,`layers`,void 0),C(this,`globeNotSupported`,void 0),C(this,`poiCities`,void 0),C(this,`hidePickerElevation`,void 0),C(this,`shortname`,void 0),C(this,`fullname`,void 0),C(this,`menuIcon`,void 0),C(this,`menuTrans`,void 0),C(this,`partOf`,void 0),C(this,`hideParticles`,void 0),C(this,`isAccu`,void 0),C(this,`allwaysOn`,void 0),C(this,`disableSyncWithDetail`,void 0),C(this,`convertValue`,void 0),C(this,`convertNumber`,void 0),C(this,`setMetric`,void 0),C(this,`cycleMetric`,void 0),C(this,`listMetrics`,void 0),C(this,`overlayMetric`,void 0),C(this,`overlayColor`,void 0),C(this,`alternativeLegend`,void 0),C(this,`hideFromURL`,void 0),C(this,`promoBadge`,void 0),C(this,`promoBadgeColor`,void 0),C(this,`menuImage`,void 0),C(this,`windCompanionRow`,void 0),this.initProperties(),this.ident=e.ident,this.overlayColor=(t=(n=e.overlayColor)==null?this.overlayColor:n)==null?V.fallback:t,this.trans=(r=e.trans)==null?this.trans:r,this.icon=(i=e.icon)==null?this.icon:i,this.transShort=(a=e.transShort)==null?this.transShort:a,this.hasMoreLevels=(o=e.hasMoreLevels)==null?this.hasMoreLevels:o,this.layers=(s=e.layers)==null?this.layers:s,this.globeNotSupported=(c=e.globeNotSupported)==null?this.globeNotSupported:c,this.poiCities=(l=e.poiCities)==null?this.poiCities:l,this.hidePickerElevation=(u=e.hidePickerElevation)==null?this.hidePickerElevation:u,this.shortname=(d=e.shortname)==null?this.shortname:d,this.fullname=(f=e.fullname)==null?this.fullname:f,this.menuIcon=(p=e.menuIcon)==null?this.menuIcon:p,this.menuTrans=(m=e.menuTrans)==null?this.menuTrans:m,this.partOf=(h=e.partOf)==null?this.partOf:h,this.hideParticles=(g=e.hideParticles)==null?this.hideParticles:g,this.isAccu=(_=e.isAccu)==null?this.isAccu:_,this.allwaysOn=(ee=e.allwaysOn)==null?this.allwaysOn:ee,this.disableSyncWithDetail=(te=e.disableSyncWithDetail)==null?!1:te,this.overlayMetric=(ne=e.overlayMetric)==null?this.overlayMetric:ne,this.alternativeLegend=(v=e.alternativeLegend)==null?this.alternativeLegend:v,this.hideFromURL=(re=e.hideFromURL)==null?this.hideFromURL:re,this.promoBadge=(ie=e.promoBadge)==null?this.promoBadge:ie,this.promoBadgeColor=(ae=e.promoBadgeColor)==null?this.promoBadgeColor:ae,this.menuImage=(y=e.menuImage)==null?this.menuImage:y,this.windCompanionRow=(oe=e.windCompanionRow)==null?this.windCompanionRow:oe,this.createPickerHTML=(se=e.createPickerHTML)==null?this.createPickerHTML:se,this.onClick=(ce=e.onClick)==null?this.onClick:ce;let b=(le=this.overlayMetric)==null?z.fallback:le;this.convertValue=b.convertValue.bind(b),this.convertNumber=b.convertNumber.bind(b),this.setMetric=b.setMetric.bind(b),this.cycleMetric=b.cycleMetric.bind(b),this.listMetrics=b.listMetrics.bind(b)}onClick(){N.set(`overlay`,this.ident)}paintLegend(e){var t;let n=this.alternativeLegend||((t=this.overlayMetric)==null?void 0:t.legend);if(n){var r;fi(e,n,this.overlayColor,(r=this.overlayMetric)==null?void 0:r.metric)}else e.innerHTML=``,e.style.background=`transparent`}getName(e){return(e&&this.transShort?F[this.transShort]:F[this.trans])||this.ident}
2getMenuImagePath(){return`/img/menu3/${this.menuImage||this.ident}.jpg`}getMenuName(e){return this.menuTrans?this.menuTrans in F&&F[this.menuTrans]?F[this.menuTrans]:this.ident:this.getName(e)}getMenuIdent(){return this.partOf||this.ident}createPickerHTML(e,t){if(this.convertValue&&this.overlayMetric){let[t]=e;return`<big class="picker-change-metric">${this.overlayMetric.howManyMetrics()>1?this.convertValue(t,` <span>`,`</span>`):this.convertValue(t,` `)}</big>`}else return``}get metric(){return this.overlayMetric?this.overlayMetric.metric:``}initProperties(){this.poiCities=`full`}},ko=y({AqiOverlay:()=>Io,AwpOverlay:()=>Mo,CloudsOverlay:()=>Fo,CurrentOverlay:()=>Ao,FwiOverlay:()=>No,RadarOverlay:()=>Lo,RainPtypeOverlay:()=>Po,SatelliteOverlay:()=>Ro,WaveOverlay:()=>jo}),Ao=class extends H{constructor(...e){super(...e),C(this,`hidePickerElevation`,!0)}createPickerHTML(e,t){let n=Et(e),r=kt(n);return`<big class="picker-change-metric">${this.convertValue(n.wind,` <span>`,`</span>`)}<i title="Direction to">${r}${t(Ot(n)?(n.dir+180)%360:``)}</i></big>`}},jo=class extends H{constructor(...e){super(...e),C(this,`hidePickerElevation`,!0)}initProperties(){super.initProperties(),this.overlayColor=V.waves,this.overlayMetric=z.waves}createPickerHTML(e,t){let n=Dt(e);return`<big class="picker-change-metric">${this.convertValue(n.size,` <span>`,`</span>`)}<i title="Direction from, true north" data-dir="${n.dir}">${t(n.dir)}</i></big>
3        <div class="picker-subtext">${F.PERIOD} ${Math.round(n.period)} s.</div>`}},Mo=class extends H{createPickerHTML(e){return`<big>${this.convertValue(e[0])}</big>`}},No=class extends H{createPickerHTML(e){return`<big>${this.convertValue(e[0])}</big>`}},Po=class extends H{constructor(...e){super(...e),C(this,`hidePickerElevation`,!0)}createPickerHTML(e){let t=e[1],n=`${z.ptype.convertValue(t)||F.RAIN} (3h)`;return`<big class="picker-change-metric">${(t==5||t==6?z.snow:z.rain).convertValue(e[0],` <span>`,`</span>`)}</span></big><div class="picker-subtext">${n}</div>`}},Fo=class extends H{constructor(...e){super(...e),C(this,`hidePickerElevation`,!0)}createPickerHTML(e){return`<big>${this.overlayMetric.useConvertValue?this.convertValue(e[0],` `):`${Math.floor(e[0])} %`}</big>${e[1]>.3?`<div class="picker-subtext">${F.D_PRECI}: ${z.rain.convertValue(e[1],` `)} (3h)</div>`:``}`}},Io=class extends H{constructor(...e){super(...e),C(this,`hidePickerElevation`,!0),C(this,`labels`,{0:`AIRQ_RANGE_GOOD`,1:`AIRQ_RANGE_MODERATE`,2:`AIRQ_RANGE_UNHEALTHY_SENSITIVE`,3:`AIRQ_RANGE_UNHEALTHY`,4:`AIRQ_RANGE_VERY_UNHEALTHY`,5:`AIRQ_RANGE_HAZARDOUS`})}getAirQLabel(e){if(e>301)return F[this.labels[5]];if(e>201)return F[this.labels[4]];{let t=Math.floor(e/50);return F[this.labels[t]]}}createPickerHTML(e){let t=Math.round(e[0]);return`<big>${t} AQI</big>
4                <div class="picker-subtext">${this.getAirQLabel(t)}
4</div>`}},Lo=class extends H{constructor(...e){super(...e),C(this,`hidePickerElevation`,!0)}createPickerHTML(e){return zo(e,`radar`)}},Ro=class extends H{constructor(...e){super(...e),C(this,`hidePickerElevation`,!0)}createPickerHTML(e){return zo(e,`satellite`)}};function zo(e,t=`radar`){let[n,r,i]=e,a=n>=0,o=i>=0;if(t===`satellite`&&!a||t===`radar`&&!o)return`<div class="picker__not-available">${F.DATA_NOT_AVBL}</div>`;let s=z.radar.convertValue(i,` `),c=document.createElement(`big`);c.classList.add(`picker-change-metric`),c.innerHTML=t===`radar`?z.radar.convertValue(i,` <span>`,`</span>`):z.satellite.convertValue(n,` <span>`,`</span>`);let l=document.createElement(`div`);l.appendChild(c);let u=document.createElement(`div`);if(u.classList.add(`picker-subtext`),u.innerHTML=t===`satellite`&&o&&s?`${s}&nbsp;`:``,N.get(`radarRenderPType`)){let e=i>0?`${Bo(r)}`:`&nbsp;`;l.appendChild(document.createElement(`br`)),u.innerHTML+=e}return l.appendChild(u),l.innerHTML}function Bo(e){return`${z.radarPType.convertValue(e)||F.JUST_RAIN}`}const Vo={description:[`m`,`ft`],lines:[[0,0,0],[200,300,1e3],[500,500,1500],[1500,`1.5k`,5e3]]},Ho={description:[`m`,`ft`],lines:[[0,0,0],[1e3,`1k`,`3.3k`],[2e3,`2k`,`6.6k`],[3e3,`3k`,`10k`],[4e3,`4k`,`13k`],[6e3,`6k`,`20k`],[8e3,`8k`,`26k`]]},Uo={description:[`°C`,`°F`],lines:[[272,0,30],[282,10,50],[292,20,70],[302,30,85],[313,40,100]]},Wo={description:[`m`,`ft`],lines:[[0,0,0],[5e3,`5k`,`FL150`],[9e3,`9k`,`FL300`],[12e3,`12k`,`FL400`],[15e3,`15k`,`FL500`]]},Go={description:[`mm`,`in`],lines:[[3,3,`.1`],[10,10,`.4`],[25,25,`1.0`],[100,100,`4.0`],[300,300,`1ft`]]},Ko={description:[`°C`,`°F`],lines:[[273,0,32],[291,18,64],[298,25,77],[302,29,84],[305,32,90]]},qo={isDiscrete:!0,hasEqualItemsWidth:!0,labels:[[`AVAL_NO_DATA`,`rgb(204,204,204)`],[`AVAL_LOW`,`rgb(186,211,124)`],[`AVAL_MODERATE`,`rgb(255,255,0)`],[`AVAL_CONSIDERABLE`,`rgb(254,152,0)`],[`AVAL_HIGH`,`rgb(253,0,0)`],[`AVAL_VERY_HIGH`,`rgb(180,0,0)`]]},Jo={isDiscrete:!0,hasEqualItemsWidth:!0,labels:[[`INTERSUCHO_AWP_3`,`rgb(179, 179, 0)`],[`INTERSUCHO_AWP_4`,`rgb(193, 125, 0)`],[`INTERSUCHO_AWP_6`,`rgb(165, 0, 0)`]]},Yo=new H({ident:`wind`,overlayColor:V.wind,overlayMetric:z.wind,hasMoreLevels:!0,trans:`WIND`,icon:`|`,layers:[`windParticles`,`wind`],globeNotSupported:!1,hideFromURL:!0,createPickerHTML(e,t){let n=Et(e),r=kt(n);return`<big class="picker-change-metric">${this.convertValue(n.wind,` <span>`,`</span>`)}<i title="Wind direction from true north">${r}${t(n.dir)}</i></big>`}}),Xo=new H({ident:`temp`,overlayColor:V.temp,overlayMetric:z.temp,trans:`TEMP`,icon:``,layers:[`windParticles`,`temp`],hasMoreLevels:!0}),Zo=new H({ident:`wetbulbtemp`,overlayColor:V.wetbulbtemp,overlayMetric:z.temp,alternativeLegend:Ko,trans:`WETBULB_TEMP`,icon:``,layers:[`windParticles`,`wetbulbtemp`]}),Qo=new H({ident:`solarpower`,overlayColor:V.solarpower,overlayMetric:z.solarpower,trans:`SOLARPOWER`,icon:`z`,layers:[`ecmwfWindParticles`,`solarpower`]}),$o=new H({ident:`uvindex`,overlayColor:V.uvindex,overlayMetric:z.uvindex,trans:`UVINDEX`,icon:``,layers:[`ecmwfWindParticles`,`uvindex`]}),es=new H({ident:`dewpoint`,overlayColor:V.dewpoint,overlayMetric:z.temp,trans:`DEW_POINT`,icon:``,layers:[`windParticles`,`dewpoint`],hasMoreLevels:!0}),ts=new H({ident:`gust`,overlayColor:V.wind,overlayMetric:z.wind,trans:`GUST`,icon:``,layers:[`windParticles`,`gust`]}),ns=new H({ident:`gustAccu`,overlayColor:V.wind,overlayMetric:z.wind,trans:`GUSTACCU`,icon:``,isAccu:!0,disableSyncWithDetail:!0,layers:[`windParticles`,`gustAccu`]}),rs=new H({ident:`rh`,icon:`/`,overlayColor:V.rh,overlayMetric:z.rh,trans:`RH`,layers:[`windParticles`,`rh`],hasMoreLevels:!0}),is=new H({ident:`pressure`,overlayColor:V.pressure,overlayMetric:z.pressure,trans:`PRESS`,icon:``,layers:[`windParticles`,`pressure`]}),as=new Po({ident:`rain`,overlayColor:V.rain,overlayMetric:z.rain,trans:`RAIN_THUNDER`,transShort:`JUST_RAIN`,icon:``,layers:[`windParticles`,`rain`]}),os=new Fo({ident:`clouds`,overlayColor:V.rainClouds,overlayMetric:z.rain,trans:`CLOUDS2`,icon:`7`,layers:[`windParticles`,`clouds`]}),ss=new Fo({ident:`lclouds`,overlayColor:V.lclouds,overlayMetric:z.clouds,trans:`LOW_CLOUDS`,icon:``,layers:[`windParticles`,`lclouds`]}),cs=new Fo({ident:`mclouds`,overlayColor:V.mclouds,overlayMetric:z.clouds,trans:`MEDIUM_CLOUDS`,icon:``,layers:[`windParticles`,`mclouds`]}),ls=new Fo({ident:`hclouds`,overlayColor:V.hclouds,overlayMetric:z.clouds,trans:`HIGH_CLOUDS`,layers:[`windParticles`,`hclouds`],icon:``}),us=new H({ident:`cape`,overlayColor:V.cape,overlayMetric:z.cape,trans:`CAPE`,layers:[`windParticles`,`cape`],icon:`~`}),ds=new H({ident:`cbase`,overlayColor:V.cbase,overlayMetric:z.altitude,alternativeLegend:Vo,trans:`CLOUD_ALT`,icon:`:`,layers:[`windParticles`,`cbase`]}),fs=new H({ident:`snowAccu`,overlayColor:V.snow,overlayMetric:z.snow,trans:`NEWSNOW`,icon:``,isAccu:!0,disableSyncWithDetail:!0,layers:[`snowAccu`],hideParticles:!0}),ps=new H({ident:`rainAccu`,overlayColor:V.rainAccu,overlayMetric:z.rain,alternativeLegend:Go,trans:`RACCU`,transShort:`RACCU_SHORT`,icon:`9`,isAccu:!0,disableSyncWithDetail:!0,layers:[`rainAccu`],hideParticles:!0,menuImage:`rainAccu-v2`}),ms=new jo({ident:`waves`,poiCities:`markers`,trans:`WAVES`,icon:``,layers:[`waveParticles`,`waves`]}),hs=new jo({poiCities:`markers`,ident:`wwaves`,trans:`WWAVES`,icon:`|`,layers:[`waveParticles`,`wwaves`]}),gs=new jo({poiCities:`markers`,ident:`swell1`,trans:`SWELL`,icon:`{`,layers:[`waveParticles`,`swell1`]}),_s=new jo({poiCities:`markers`,ident:`swell2`,trans:`SWELL2`,icon:``,layers:[`waveParticles`,`swell2`]}),vs=new jo({poiCities:`markers`,ident:`swell3`,trans:`SWELL3`,icon:``,layers:[`waveParticles`,`swell3`]}),ys=gs,bs=new Ao({poiCities:`markers`,ident:`currents`,overlayColor:V.currents,overlayMetric:z.currents,trans:`CURRENT`,icon:`q`,layers:[`currentParticles`,`currents`]}),xs=new Ao({poiCities:`markers`,ident:`currentsTide`,overlayColor:V.currents,overlayMetric:z.currents,trans:`CURRENT_TIDE`,icon:``,layers:[`currentsTideParticles`,`currentsTide`]}),Ss=new H({poiCities:`markers`,ident:`wavePower`,overlayColor:V.wavePower,overlayMetric:z.wavePower,trans:`WAVE_POWER`,promoBadge:`NEW`,icon:``,layers:[`waveParticlesWaves`,`wavePower`]}),Cs=new H({poiCities:`markers`,hidePickerElevation:!0,ident:`sst`,overlayColor:V.sst,overlayMetric:z.temp,alternativeLegend:Uo,disableSyncWithDetail:!0,trans:`SST2`,
4icon:``,layers:[`currentParticles`,`sst`]}),ws=new H({ident:`visibility`,overlayColor:V.visibility,overlayMetric:z.visibility,trans:`VISIBILITY`,icon:`c`,layers:[`windParticles`,`visibility`]}),Ts=new H({ident:`fog`,overlayColor:V.fog,overlayMetric:z.fog,trans:`FOG`,icon:`d`,layers:[`fog`],hideParticles:!0}),Es=new H({ident:`thunder`,overlayColor:V.lightDensity,overlayMetric:z.lightDensity,trans:`THUNDER`,icon:``,layers:[`windParticles`,`thunder`]}),Ds=new H({ident:`snowcover`,overlayColor:V.snow,overlayMetric:z.snow,trans:`SNOWDEPTH`,icon:`N`,layers:[`windParticles`,`snowcover`],hidePickerElevation:!0,createPickerHTML(e){let t=e[0],n;return n=t>490?`> ${this.overlayMetric.metric===`cm`?`5m`:`16ft`}`:this.convertValue(t,` <span>`,`</span>`),`<big class="picker-change-metric">${n}</big><div class="picker-subtext">${t>.5?F.SNOWDENSITY+` `+Math.round(e[1])+` kg/m3`:``}</div>`}}),Os=new H({ident:`cloudtop`,overlayColor:V.levels,overlayMetric:z.altitude,alternativeLegend:Wo,trans:`CTOP`,icon:`Q`,layers:[`windParticles`,`cloudtop`]}),ks=new H({ident:`deg0`,overlayColor:V.deg0,overlayMetric:z.altitude,trans:`FREEZING`,icon:``,layers:[`windParticles`,`deg0`]}),As=new H({ident:`gtco3`,overlayColor:V.gtco3,overlayMetric:z.gtco3,trans:`OZONE`,icon:``,layers:[`ecmwfWindParticles150h`,`gtco3`]}),js=new H({ident:`pm2p5`,overlayColor:V.pm2p5,overlayMetric:z.pm2p5,trans:`PM2P5`,icon:``,layers:[`ecmwfWindParticles`,`pm2p5`]}),Ms=new H({ident:`no2`,overlayColor:V.no2,overlayMetric:z.no2,trans:`NO22`,icon:``,layers:[`ecmwfWindParticles`,`no2`]}),Ns=new H({ident:`aod550`,overlayColor:V.aod550,overlayMetric:z.aod550,trans:`AOD550`,icon:``,layers:[`ecmwfWindParticles600h`,`aod550`]}),Ps=new H({ident:`tcso2`,overlayColor:V.tcso2,overlayMetric:z.tcso2,trans:`TCSO2`,icon:``,layers:[`ecmwfWindParticles500h`,`tcso2`]}),Fs=new H({ident:`go3`,overlayColor:V.go3,overlayMetric:z.go3,trans:`GO3`,icon:``,layers:[`ecmwfWindParticles`,`go3`]}),Is=new H({ident:`cosc`,overlayColor:V.cosc,overlayMetric:z.cosc,trans:`COSC`,icon:``,layers:[`ecmwfWindParticles`,`cosc`]}),Ls=new H({ident:`dustsm`,overlayColor:V.dust,overlayMetric:z.dust,trans:`DUSTSM`,icon:``,layers:[`ecmwfWindParticles`,`dustsm`]}),Rs=new Io({ident:`aqi`,overlayColor:V.aqi,overlayMetric:z.aqi,trans:`AQI`,icon:``,layers:[`ecmwfWindParticles`,`aqi`]}),zs=new Po({ident:`ptype`,overlayColor:V.justGray,overlayMetric:z.ptype,trans:`PTYPE`,icon:``,layers:[`windParticles`,`ptype`]}),Bs=new H({ident:`ccl`,overlayColor:V.cclAltitude,overlayMetric:z.altitude,alternativeLegend:Ho,trans:`CCL`,icon:``,layers:[`ccl`,`windParticles`]}),Vs=new Lo({allwaysOn:!0,poiCities:`none`,globeNotSupported:!0,disableSyncWithDetail:!0,ident:`radar`,overlayColor:V.radar,overlayMetric:z.radar,trans:`RADAR`,transShort:`RADAR_SHORT`,icon:``,layers:[`radar`],hideParticles:!0}),Hs=new Ro({allwaysOn:!0,poiCities:`none`,globeNotSupported:!0,disableSyncWithDetail:!0,ident:`satellite`,overlayColor:V.satellite,overlayMetric:z.satellite,trans:`SATELLITE`,icon:``,layers:[`satellite`],menuImage:`radarPlus`,hideParticles:!0}),Us=new H({ident:`capAlerts`,trans:`WX_WARNINGS`,globeNotSupported:!0,disableSyncWithDetail:!0,icon:``,layers:[`capAlerts`],poiCities:`none`,alternativeLegend:Jo}),Ws=new H({ident:`avalancheDanger`,trans:`AVALANCHE_DANGER`,globeNotSupported:!0,disableSyncWithDetail:!0,promoBadge:`NEW`,icon:`n`,layers:[`avalancheDanger`],poiCities:`none`,alternativeLegend:qo,createPickerHTML(e){return`<small>Click on region to open avalanche bulletin</small>`}}),Gs={menuIcon:``,menuTrans:`EFORECAST`},Ks=new H(w(w({},Gs),{},{icon:``,trans:`TEMP`,hideParticles:!0,disableSyncWithDetail:!0,ident:`efiTemp`,overlayColor:V.efiTemp,overlayMetric:z.efiTemp,fullname:`${F.EFORECAST} - ${F.TEMP}`,layers:[`efiTemp`]})),qs=new H(w(w({},Gs),{},{icon:`|`,trans:`WIND`,hideParticles:!0,disableSyncWithDetail:!0,ident:`efiWind`,overlayColor:V.efiWind,overlayMetric:z.efiWind,fullname:`${F.EFORECAST} - ${F.WIND}`,partOf:`efiTemp`,layers:[`efiWind`]})),Js=new H(w(w({},Gs),{},{icon:``,trans:`JUST_RAIN`,hideParticles:!0,disableSyncWithDetail:!0,ident:`efiRain`,overlayColor:V.efiRain,overlayMetric:z.efiRain,fullname:`${F.EFORECAST} - ${F.JUST_RAIN}`,partOf:`efiTemp`,layers:[`efiRain`]})),Ys={menuIcon:``,menuTrans:`INTERSUCHO`},Xs=new Mo(w(w({},Ys),{},{icon:``,trans:`INTERSUCHO_AWP`,fullname:`${F.INTERSUCHO_AWP} - ${F.INTERSUCHO_40}`,shortname:F.INTERSUCHO_40,hideParticles:!0,ident:`drought40`,overlayColor:V.drought,overlayMetric:z.drought,layers:[`drought40`]})),Zs=new Mo(w(w({},Ys),{},{icon:``,trans:`INTERSUCHO_AWP`,hideParticles:!0,ident:`drought100`,overlayColor:V.drought,overlayMetric:z.drought,fullname:`${F.INTERSUCHO_AWP} - ${F.INTERSUCHO_100}`,shortname:F.INTERSUCHO_100,partOf:`drought40`,layers:[`drought100`]}
4)),Qs=new H(w(w({},Ys),{},{icon:``,trans:`INTERSUCHO_AWD`,fullname:`${F.INTERSUCHO_AWD} - ${F.INTERSUCHO_40}`,shortname:F.INTERSUCHO_40,hideParticles:!0,ident:`moistureAnom40`,overlayColor:V.moistureAnom40,overlayMetric:z.moistureAnom40,partOf:`drought40`,layers:[`moistureAnom40`]})),$s=new H(w(w({},Ys),{},{icon:``,trans:`INTERSUCHO_AWD`,fullname:`${F.INTERSUCHO_AWD} - ${F.INTERSUCHO_100}`,shortname:F.INTERSUCHO_100,hideParticles:!0,ident:`moistureAnom100`,overlayColor:V.moistureAnom100,overlayMetric:z.moistureAnom100,partOf:`drought40`,layers:[`moistureAnom100`]})),ec=new H(w(w({},Ys),{},{icon:``,trans:`INTERSUCHO_AWR`,fullname:`${F.INTERSUCHO_AWR} - ${F.INTERSUCHO_40}`,shortname:F.INTERSUCHO_40,hideParticles:!0,ident:`soilMoisture40`,overlayColor:V.soilMoisture,overlayMetric:z.rh,partOf:`drought40`,layers:[`soilMoisture40`]})),tc=new H(w(w({},Ys),{},{icon:``,trans:`INTERSUCHO_AWR`,fullname:`${F.INTERSUCHO_AWR} - ${F.INTERSUCHO_100}`,shortname:F.INTERSUCHO_100,hideParticles:!0,ident:`soilMoisture100`,overlayColor:V.soilMoisture,overlayMetric:z.rh,partOf:`drought40`,layers:[`soilMoisture100`]})),nc={menuIcon:``,menuTrans:`INTERSUCHO_FIRE_DANGER`},rc=new No(w(w({},nc),{},{icon:``,trans:`INTERSUCHO_FWI`,ident:`fwi`,overlayColor:V.fwi,overlayMetric:z.fwi,layers:[`ecmwfWindParticles`,`fwi`],windCompanionRow:!0})),ic=new H(w(w({},nc),{},{icon:``,trans:`INTERSUCHO_DFM`,transShort:`INTERSUCHO_DFM_10H`,ident:`dfm10h`,overlayColor:V.dfm10h,overlayMetric:z.dfm10h,partOf:`fwi`,layers:[`ecmwfWindParticles`,`dfm10h`],windCompanionRow:!0})),ac=new H(w(w({},nc),{},{icon:``,trans:`INTERSUCHO_DFM`,transShort:`INTERSUCHO_DFM_100H`,ident:`dfm100h`,overlayColor:V.dfm10h,overlayMetric:z.dfm10h,partOf:`fwi`,layers:[`ecmwfWindParticles`,`dfm100h`],windCompanionRow:!0})),oc=new H(w(w({},nc),{},{icon:``,trans:`INTERSUCHO_DFM`,transShort:`INTERSUCHO_DFM_1000H`,ident:`dfm1000h`,overlayColor:V.dfm10h,overlayMetric:z.dfm10h,partOf:`fwi`,layers:[`ecmwfWindParticles`,`dfm1000h`],windCompanionRow:!0})),sc=new H({icon:``,trans:`TURBULENCE`,ident:`turbulence`,overlayColor:V.turbulence,overlayMetric:z.turbulence,layers:[`turbulence`,`windParticles`],menuImage:`turbulence2`,createPickerHTML(e){let[t]=e;return`<big>${this.convertValue(t)}</big><big class="picker-secondary-row">${this.convertNumber(t)} ${this.metric}</big>`}}),cc=new H({icon:``,trans:`ICING2`,ident:`icing`,overlayColor:V.icing,overlayMetric:z.icing,layers:[`icing`,`windParticles`]}),lc=new H({icon:``,trans:`HEATMAP`,ident:`heatmaps`,hideFromURL:!0,disableSyncWithDetail:!0,promoBadge:`MBLUE`,promoBadgeColor:`rgb(107, 107, 107)`,onClick(){window.open(`https://www.meteoblue.com/products/cityclimate?utm_source=windy.com&utm_medium=referral&utm_campaign=menu-city-heatmaps`,`_blank`)}}),uc=new H({icon:``,trans:`HURR_TRACKER`,ident:`hurricanes`,disableSyncWithDetail:!0,layers:[`wind`],onClick(){P.emit(`rqstOpen`,`hurricanes`)}}),dc={wind:Yo,temp:Xo,wetbulbtemp:Zo,solarpower:Qo,wavePower:Ss,uvindex:$o,dewpoint:es,gust:ts,gustAccu:ns,turbulence:sc,icing:cc,rh:rs,pressure:is,rain:as,clouds:os,lclouds:ss,mclouds:cs,hclouds:ls,cape:us,cbase:ds,snowAccu:fs,rainAccu:ps,waves:ms,wwaves:hs,swell1:gs,swell2:_s,swell3:vs,swell:ys,currents:bs,currentsTide:xs,sst:Cs,visibility:ws,fog:Ts,thunder:Es,snowcover:Ds,cloudtop:Os,deg0:ks,gtco3:As,pm2p5:js,no2:Ms,aod550:Ns,tcso2:Ps,go3:Fs,cosc:Is,dustsm:Ls,ptype:zs,ccl:Bs,radar:Vs,satellite:Hs,capAlerts:Us,avalancheDanger:Ws,efiWind:qs,efiTemp:Ks,efiRain:Js,moistureAnom40:Qs,moistureAnom100:$s,drought40:Xs,drought100:Zs,soilMoisture40:ec,soilMoisture100:tc,fwi:rc,dfm10h:ic,dfm100h:ac,dfm1000h:oc,heatmaps:lc,topoMap:new H({ident:`topoMap`,trans:`HMAP`,globeNotSupported:!0,hideFromURL:!0,disableSyncWithDetail:!0,poiCities:`none`,icon:``,layers:[`topoMap`],hideParticles:!0}),hurricanes:uc,aqi:Rs};var fc=y({Layer:()=>U}),U=class{constructor(e){var t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g,_;C(this,`c`,void 0),C(this,`ident`,void 0),C(this,`renderer`,void 0),C(this,`filename`,void 0),C(this,`dataQuality`,void 0),C(this,`fileSuffix`,void 0),C(this,`JPGtransparency`,void 0),C(this,`PNGtransparency`,void 0),C(this,`maxTileZoom`,void 0),C(this,`renderParams`,void 0),C(this,`product`,void 0),C(this,`levels`,void 0),C(this,`query`,void 0),C(this,`wTransformR`,void 0),C(this,`cm`,void 0),C(this,`transformR`,void 0),C(this,`transformG`,void 0),C(this,`transformB`,void 0),this.ident=e.ident,this.c=(t=e.c)==null?this.c:t,this.renderer=(n=e.renderer)==null?`tileLayer`:n,this.filename=(r=e.filename)==null?this.filename:r,this.dataQuality=(i=e.dataQuality)==null?this.dataQuality:i,this.fileSuffix=(a=e.fileSuffix)==null?this.fileSuffix:a,this.JPGtransparency=(o=e.JPGtransparency)==null?this.JPGtransparency:o,this.PNGtransparency=(s=e.PNGtransparency)==null?this.PNGtransparency:s,this.maxTileZoom=(c=e.maxTileZoom)==null?this.maxTileZoom:c,this.renderParams=(l=e.renderParams)==null?this.renderParams:l,this.product=(u=e.product)==null?this.product:u,this.levels=(d=e.levels)==null?this.levels:d,this.query=(f=e.query)==null?this.query:f,this.wTransformR=(p=e.wTransformR)==null?this.wTransformR:p,this.cm=(m=e.cm)==null?this.cm:m,this.transformR=(h=e.transformR)==null?this.transformR:h,this.transformG=(g=e.transformG)==null?this.transformG:g,this.transformB=(_=e.transformB)==null?this.transformB:_}getColor(){var e;return(e=this.c)==null?void 0:e.getColor()}};const pc=e=>Math.max(0,2**e-.001),mc=e=>t=>2**t-e,hc=new U({ident:`capAlerts`,renderer:`capAlerts`,levels:[`surface`]}),gc=new U({ident:`pressureIsolines`,renderer:`isolines`,levels:[`surface`]}),_c=new U({ident:`ghIsolines`,renderer:`isolines`,levels:[`975h`,`950h`,`925h`,`900h`,`850h`,`800h`,`700h`,`600h`,`500h`,`400h`,`300h`,`250h`,`200h`,`150h`,`10h`]}),vc=new U({ident:`tempIsolines`,renderer:`isolines`,levels:[`surface`,`950h`,`925h`,`900h`,`850h`,`800h`,`700h`,`600h`,`500h`,`400h`,`300h`,`250h`,`200h`,`150h`,`10h`]}),yc=new U({ident:`deg0Isolines`,renderer:`isolines`,levels:[`surface`]}),bc=new U({ident:`windParticles`,renderer:`particles`,filename:`wind`,fileSuffix:`jpg`,renderParams:{particlesIdent:`wind`}}),xc=new U({ident:`ecmwfWindParticles`,renderer:`particles`,product:`ecmwf`,levels:[`surface`],filename:`wind`,fileSuffix:`jpg`,renderParams:{particlesIdent:`wind`}}),Sc=new U({ident:`ecmwfWindParticles150h`,renderer:`particles`,product:`ecmwf`,levels:[`surface`],filename:`wind`,fileSuffix:`jpg`,renderParams:{particlesIdent:`wind`}}),Cc=new U({ident:`ecmwfWindParticles500h`,renderer:`particles`,product:`ecmwf`,levels:[`surface`],filename:`wind`,fileSuffix:`jpg`,renderParams:{particlesIdent:`wind`}}),wc=new U({ident:`ecmwfWindParticles600h`,renderer:`particles`,product:`ecmwf`,levels:[`surface`],filename:`wind`,fileSuffix:`jpg`,renderParams:{particlesIdent:`wind`}}),Tc=new U({ident:`waveParticles`,renderer:`particles`,PNGtransparency:!0,renderParams:{particlesIdent:`waves`,shaderDefines:[`PNG`,`BICUBIC`]}}),Ec=new U({ident:`waveParticlesWaves`,renderer:`particles`,PNGtransparency:!0,filename:`waves`,fileSuffix:`png`,renderParams:{particlesIdent:`waves`,shaderDefines:[`PNG`,`BICUBIC`]}}),Dc=new U({ident:`currentParticles`,renderer:`particles`,filename:`seacurrents`,product:`cmems`,renderParams:{particlesIdent:`currents`}}),Oc=new U({ident:`currentsTideParticles`,renderer:`particles`,filename:`seacurrents_ti
4de`,renderParams:{particlesIdent:`currents`}}),kc=new U({ident:`wind`,filename:`wind`,renderParams:{shaderDefines:[`VECTOR_SIZE`,`BICUBIC`]},c:V.wind}),Ac=new U({ident:`temp`,c:V.temp,renderParams:{shaderDefines:[`BICUBIC`]}}),jc=new U({ident:`wetbulbtemp`,filename:`wbt`,c:V.wetbulbtemp,renderParams:{shaderDefines:[`BICUBIC`]}}),Mc=new U({ident:`solarpower`,c:V.solarpower,renderParams:{shaderDefines:[`BICUBIC`]}}),Nc=new U({ident:`uvindex`,fileSuffix:`png`,PNGtransparency:!0,c:V.uvindex,renderParams:{shaderDefines:[`PNG`,`BICUBIC`]}}),Pc=new U({ident:`dewpoint`,c:V.dewpoint,renderParams:{shaderDefines:[`BICUBIC`]}}),Fc=new U({ident:`gust`,c:V.wind,renderParams:{shaderDefines:[`BICUBIC`]}}),Ic=new U({ident:`gustAccu`,filename:`gust`,fileSuffix:`jpg`,renderer:`accumulations`,JPGtransparency:!0,c:V.wind,query:`acc=maxip`,renderParams:{shaderDefines:[`BICUBIC`]}}),Lc=new U({ident:`turbulence`,filename:`turbulence_max`,fileSuffix:`png`,c:V.turbulence,PNGtransparency:!0,renderer:`levelsRange`,levels:[`850h`,`800h`,`700h`,`600h`,`500h`,`400h`,`300h`,`250h`,`200h`,`150h`],renderParams:{shaderDefines:[`PNG`,`BICUBIC`]}}),Rc=new U({ident:`icing`,filename:`icing_max`,fileSuffix:`png`,PNGtransparency:!0,renderer:`levelsRange`,c:V.icing,levels:[`950h`,`925h`,`900h`,`850h`,`800h`,`700h`,`600h`,`500h`,`400h`,`300h`],renderParams:{shaderDefines:[`PNG`,`BICUBIC`]}}),zc=new U({ident:`rh`,c:V.rh,renderParams:{shaderDefines:[`BICUBIC`]}}),Bc=new U({ident:`pressure`,fileSuffix:`png`,PNGtransparency:!0,c:V.pressure,renderParams:{shaderDefines:[`PNG`,`BICUBIC`]}}),Vc=new U({ident:`ccl`,fileSuffix:`png`,PNGtransparency:!0,c:V.cclAltitude,renderParams:{interpolateNearestG:!0,shaderDefines:[`BICUBIC`,`CCL`,`PATT`,`PNG`]},transformG:e=>Math.round(e*4)/4}),Hc=new U({ident:`rain`,filename:`rainlogptype2`,fileSuffix:`png`,PNGtransparency:!0,c:V.rain,renderParams:{shaderDefines:[`BICUBIC`,`RAIN`,`LOG`,`PATT`,`PATT2`,`PNG`],interpolateNearestG:!0},transformR:pc,transformG:e=>Math.round(e*4)/4,wTransformR:`rainLog`}),Uc=new U({ident:`ptype`,filename:`rainlogptype`,fileSuffix:`png`,PNGtransparency:!0,c:V.justGray,renderParams:{interpolateNearestG:!0,shaderDefines:[`PNG`,`LOG`]},transformR:pc,transformG:Math.round,wTransformR:`rainLog`}),Wc=new U({ident:`thunder`,filename:`lightdens`,c:V.lightDensity,transformR:pc,wTransformR:`rainLog`,renderParams:{shaderDefines:[`LOG`,`BICUBIC`]}}),Gc=new U({ident:`clouds`,filename:`cloudsrain`,renderParams:{shaderDefines:[`BICUBIC`,`CLOUDS`,`PATT`]},c:V.clouds,cm:z.clouds,transformG:e=>e<10?e:(e-10)*10+10}),Kc=new U({ident:`lclouds`,c:V.lclouds,renderParams:{shaderDefines:[`BICUBIC`]}}),qc=new U({ident:`mclouds`,c:V.mclouds,renderParams:{shaderDefines:[`BICUBIC`]}}),Jc=new U({ident:`hclouds`,c:V.hclouds,renderParams:{shaderDefines:[`BICUBIC`]}}),Yc=new U({ident:`cape`,c:V.cape,renderParams:{shaderDefines:[`BICUBIC`]}}),Xc=new U({ident:`cbase`,fileSuffix:`png`,PNGtransparency:!0,c:V.cbase,renderParams:{shaderDefines:[`PNG`,`BICUBIC`]}}),Zc=new U({ident:`fog`,filename:`fogtype`,fileSuffix:`png`,c:V.fog,PNGtransparency:!0,renderParams:{shaderDefines:[`PNG`,`BICUBIC`]}}),Qc=new U({ident:`snowAccu`,filename:`snowaccumulationlog`,renderer:`accumulations`,fileSuffix:`jpg`,JPGtransparency:!0,c:V.snow,transformR:pc,wTransformR:`rainLog`,renderParams:{shaderDefines:[`LOG`,`BICUBIC`]}}),$c=new U({ident:`rainAccu`,filename:`rainaccumulationlog`,fileSuffix:`jpg`,JPGtransparency:!0,transformR:pc,wTransformR:`rainLog`,renderer:`accumulations`,renderParams:{shaderDefines:[`LOG`,`BICUBIC`]},c:V.rainAccu}),el=new U({ident:`waves`,c:V.waves,fileSuffix:`png`,renderParams:{shaderDefines:[`USE_BLUE_CHANNEL`,`BICUBIC`,`PNG`],sea:!0}}),tl=new U({ident:`wwaves`,c:V.waves,fileSuffix:`png`,renderParams:{shaderDefines:[`USE_BLUE_CHANNEL`,`BICUBIC`,`PNG`],sea:!0}}),nl=new U({ident:`wavePower`,filename:`waves_power`,fileSuffix:`png`,PNGtransparency:!0,renderParams:{sea:!0,shaderDefines:[`PNG`,`BICUBIC`]},c:V.wavePower}),rl=new U({ident:`swell1`,c:V.waves,fileSuffix:`png`,renderParams:{sea:!0,shaderDefines:[`USE_BLUE_CHANNEL`,`BICUBIC`,`PNG`]}}),il=new U({ident:`swell2`,c:V.waves,fileSuffix:`png`,renderParams:{sea:!0,shaderDefines:[`USE_BLUE_CHANNEL`,`BICUBIC`,`PNG`]}}),al=new U({ident:`swell3`,c:V.waves,fileSuffix:`png`,renderParams:{sea:!0,shaderDefines:[`USE_BLUE_CHANNEL`,`BICUBIC`,`PNG`]}}
4),ol=rl,sl=new U({ident:`currents`,filename:`seacurrents`,renderParams:{sea:!0,shaderDefines:[`VECTOR_SIZE`,`BICUBIC`]},c:V.currents}),cl=new U({ident:`currentsTide`,filename:`seacurrents_tide`,renderParams:{sea:!0,shaderDefines:[`VECTOR_SIZE`,`BICUBIC`]},c:V.currents}),ll=new U({ident:`sst`,renderer:`noUserControl`,renderParams:{sea:!0,shaderDefines:[`BICUBIC`]},levels:[`surface`],c:V.sst,JPGtransparency:!0}),ul=new U({ident:`visibility`,c:V.visibility,renderParams:{shaderDefines:[`BICUBIC`]}}),dl=new U({ident:`snowcover`,filename:`snowcoverlog`,transformR:pc,wTransformR:`rainLog`,c:V.snow,renderParams:{shaderDefines:[`LOG`,`BICUBIC`]}}),fl=new U({ident:`cloudtop`,levels:[`surface`],fileSuffix:`jpg`,JPGtransparency:!0,c:V.levels,renderParams:{shaderDefines:[`BILINEAR_ALPHA`]}}),pl=new U({ident:`deg0`,levels:[`surface`],c:V.deg0,renderParams:{shaderDefines:[`BICUBIC`]}}),ml=new U({ident:`cosc`,filename:`chem_cosc`,c:V.cosc,transformR:mc(1),wTransformR:1,renderParams:{shaderDefines:[`LOG`,`BICUBIC`]}}),hl=new U({ident:`dustsm`,filename:`chem_dustsm`,c:V.dust,transformR:mc(.1),wTransformR:.1,renderParams:{shaderDefines:[`LOG`,`BICUBIC`]}}),gl=new U({ident:`radar`,renderer:`radarPlus`,c:V.radar}),_l=new U({ident:`satellite`,renderer:`radarPlus`,c:V.satellite}),vl=new U({ident:`gtco3`,c:V.gtco3,renderParams:{shaderDefines:[`BICUBIC`]}}),yl=new U({ident:`pm2p5`,c:V.pm2p5,transformR:mc(.001),wTransformR:.001,renderParams:{shaderDefines:[`LOG`,`BICUBIC`,`PNG`]}}),bl=new U({ident:`aqi`,filename:`aqi_us`,c:V.aqi,renderParams:{shaderDefines:[`BICUBIC`,`PNG`]}}),xl={capAlerts:hc,pressureIsolines:gc,ghIsolines:_c,tempIsolines:vc,deg0Isolines:yc,windParticles:bc,ecmwfWindParticles:xc,ecmwfWindParticles150h:Sc,ecmwfWindParticles500h:Cc,ecmwfWindParticles600h:wc,waveParticles:Tc,waveParticlesWaves:Ec,currentParticles:Dc,currentsTideParticles:Oc,wind:kc,temp:Ac,wetbulbtemp:jc,solarpower:Mc,uvindex:Nc,dewpoint:Pc,gust:Fc,gustAccu:Ic,rh:zc,pressure:Bc,ccl:Vc,rain:Hc,ptype:Uc,thunder:Wc,clouds:Gc,lclouds:Kc,mclouds:qc,hclouds:Jc,cape:Yc,cbase:Xc,fog:Zc,snowAccu:Qc,rainAccu:$c,waves:el,wwaves:tl,wavePower:nl,swell1:rl,swell2:il,swell3:al,swell:ol,currents:sl,currentsTide:cl,sst:ll,visibility:ul,snowcover:dl,cloudtop:fl,deg0:pl,cosc:ml,dustsm:hl,radar:gl,satellite:_l,gtco3:vl,pm2p5:yl,no2:new U({ident:`no2`,c:V.no2,transformR:mc(.001),wTransformR:.001,renderParams:{shaderDefines:[`LOG`,`BICUBIC`,`PNG`]}}),aod550:new U({ident:`aod550`,c:V.aod550,transformR:mc(.001),wTransformR:.001,renderParams:{shaderDefines:[`LOG`,`BICUBIC`]}}),tcso2:new U({ident:`tcso2`,c:V.tcso2,transformR:mc(.001),wTransformR:.001,renderParams:{shaderDefines:[`LOG`,`BICUBIC`]}}),go3:new U({ident:`go3`,c:V.go3,transformR:mc(.001),wTransformR:.001,renderParams:{shaderDefines:[`LOG`,`BICUBIC`,`PNG`]}}),gh:new U({ident:`gh`,renderParams:{shaderDefines:[`BICUBIC`]}}),efiWind:new U({ident:`efiWind`,filename:`wsi`,renderer:`daySwitcher`,c:V.efiWind,renderParams:{shaderDefines:[`BICUBIC`]}}),efiTemp:new U({ident:`efiTemp`,filename:`ti`,renderer:`daySwitcher`,c:V.efiTemp,renderParams:{shaderDefines:[`BICUBIC`]}}),efiRain:new U({ident:`efiRain`,filename:`tpi`,renderer:`daySwitcher`,c:V.efiRain,renderParams:{shaderDefines:[`BICUBIC`]}}),moistureAnom40:new U({ident:`moistureAnom40`,filename:`awd_0_40`,renderer:`daySwitcher`,renderParams:{landOnly:!0,shaderDefines:[`PNG`,`BICUBIC`]},c:V.moistureAnom40,PNGtransparency:!0}),moistureAnom100:new U({ident:`moistureAnom100`,filename:`awd_0_100`,renderer:`daySwitcher`,renderParams:{landOnly:!0,shaderDefines:[`PNG`,`BICUBIC`]},c:V.moistureAnom100,PNGtransparency:!0}),drought40:new U({ident:`drought40`,filename:`awp_0_40`,renderer:`daySwitcher`,renderParams:{landOnly:!0,shaderDefines:[`PNG`,`BICUBIC`]},c:V.drought,PNGtransparency:!0}),drought100:new U({ident:`drought100`,filename:`awp_0_100`,renderer:`daySwitcher`,renderParams:{landOnly:!0,shaderDefines:[`PNG`,`BICUBIC`]},c:V.drought,PNGtransparency:!0}),soilMoisture40:new U({ident:`soilMoisture40`,filename:`awr_0_40`,renderer:`daySwitcher`,renderParams:{landOnly:!0,shaderDefines:[`PNG`,`BICUBIC`]},c:V.soilMoisture,PNGtransparency:!0}),soilMoisture100:new U({ident:`soilMoisture100`,filename:`awr_0_100`,renderer:`daySwitcher`,renderParams:{landOnly:!0,shaderDefines:[`PNG`,`BICUBIC`]},c:V.soilMoisture,PNGtransparency:!0}),fwi:new U({ident:`fwi`,filename:`fwi_genz`,renderer:`fireDanger`,renderParams:{landOnly:!0,shaderDefines:[`PNG`,`BICUBIC`]},c:V.fwi,PNGtransparency:!0}),dfm10h:new U({ident:`dfm10h`,filename:`dfm10h`,renderer:`fireDanger`,renderParams:{landOnly:!0,shaderDefines:[`PNG`,`BICUBIC`]},c:V.dfm10h,PNGtransparency:!0}),dfm100h:new U({ident:`dfm100h`,filename:`dfm100h`,renderer:`fireDanger`,renderParams:{landOnly:!0,shaderDefines:[`PNG`,`BICUBIC`]},c:V.dfm10h,PNGtransparency:!0}),dfm1000h:new U({ident:`dfm1000h`,filename:`dfm1000h`,renderer:`fireDanger`,renderParams:{landOnly:!0,shaderDefines:[`PNG`,`BICUBIC`]},c:V.dfm10h,PNGtransparency:!0}),turbulence:Lc,icing:Rc,topoMap:new U({ident:`topoMap`,renderer:`topoMap`}
4),aqi:bl,avalancheDanger:new U({ident:`avalancheDanger`,renderer:`avalancheDanger`})};function Sl(e,t,n){let r=0,i=e.length-1;if(n){if(t<e[r])return r;if(t>e[i])return i}for(;r<=i;){let n=Math.floor((r+i)/2),a=e[n],o=e[n+1];if(a===t)return n;if(a<t&&t<o)return t-a<o-t?n:n+1;a<t?r=n+1:i=n-1}}var Cl=y({Calendar:()=>wl}),wl=class e{constructor({productIdent:t,minifest:n,freeProduct:r,minimumHours:i}){var a;if(C(this,`premiumStartDay`,6),C(this,`productIdent`,void 0),C(this,`calendarHours`,void 0),C(this,`midnight`,void 0),C(this,`start`,void 0),C(this,`premiumStart`,void 0),C(this,`premiumEnd`,void 0),C(this,`endOfCal`,void 0),C(this,`end`,void 0),C(this,`days`,void 0),C(this,`timestamps`,void 0),C(this,`paths`,void 0),C(this,`updateTs`,void 0),C(this,`refTimeTs`,void 0),!n||typeof n!=`object`||!n.ref||!n.dst)throw Error(`Invalid minifest for ${this.productIdent}`);let o=n.dst[n.dst.length-1][2];this.productIdent=t,this.midnight=e.getMidnight(),this.start=this.midnight.getTime(),this.refTimeTs=new Date(n.ref).getTime(),this.createTimestamps(o,n),this.calendarHours=Math.floor(Math.max((this.timestamps[this.timestamps.length-1]-this.start)/T,i)),this.endOfCal=this.add(this.midnight,this.calendarHours).getTime(),this.end=Math.min(this.timestamps[this.timestamps.length-1],this.endOfCal),this.createDays(r),this.premiumStart=!r&&((a=this.days[this.premiumStartDay])==null?void 0:a.start)||null}boundTs(e){return D(e,this.start,this.end)}ts2path(e){let t=Sl(this.timestamps,e,!0);return this.paths[t]}createDays(t){let n=this.add(this.midnight,12);this.days=[];for(let r=0;r<this.calendarHours/24;r++){let i=this.add(n,r,`days`),a=this.add(this.midnight,r,`days`).getTime(),o=this.add(this.midnight,24),s=this.add(o,r,`days`).getTime(),c=e.weekdays[i.getDay()];this.days[r]={displayShort:`${c}3`,display:`${c}2`,displayLong:c,day:i.getDate(),middayTs:i.getTime(),start:a,end:s,premium:!t&&r>=this.premiumStartDay,hasForecast:a<=this.end}}}createTimestamps(e,{dst:t,ref:n}){let r=this.add(new Date(n),e,`hours`).getTime();this.timestamps=[],this.paths=[],t.forEach(e=>{for(let t=e[1];t<=e[2];t+=e[0]){let e=this.refTimeTs+t*T;if(e<=r){this.timestamps.push(e);let t=_n(e);this.paths.push(t)}}})}add(e,t,n){let r=new Date(e.getTime());return r.setTime(e.getTime()+(n===`days`?24:1)*t*T),r}static getMidnight(e){let t=e?new Date(e):new Date;return t.setHours(0),t.setMinutes(0),t.setSeconds(0),t.setMilliseconds(0),t}};C(wl,`weekdays`,[`SUN`,`MON`,`TUE`,`WED`,`THU`,`FRI`,`SAT`]);var Tl=y({clear:()=>Ol,insert:()=>Dl});const El=()=>qt(`[data-ref="bottomMessages"]`),Dl=(e,t)=>{let n=El();n&&(n.innerHTML=e,n.onclick=t||pt)},Ol=()=>{let e=El();e&&(e.innerHTML=``,e.onclick=pt)};var kl=y({getSedlinaRequestParams:()=>zl,pageview:()=>Bl});const Al=e=>{let t=/utm_(source|medium|term|campaign|content)=([^&]+)/g,n={source:`cs`,medium:`cm`,term:`ck`,campaign:`cn`,content:`cc`},r=[],i;for(;i=t.exec(e);)i[1]&&i[1]in n&&r.push(`${n[i[1]]}=${i[2]}`);return r.join(`&`)},jl=window.screen;let Ml=Ht({ul:Nr,sr:`${jl.width}x${jl.height}`,cid:ar(),an:`Windy`,dd:ve,uh:String(Date.now().toString(32)+Math.random().toString(16)).replace(/\./g,``)});/utm_/.test(window.location.search)&&(Ml+=`&${Al(window.location.search)}`);let Nl=!0,Pl,Fl=null;const Il=()=>{Fl=Date.now()},Ll=()=>{if(Fl&&Pl){let e=Fl-Date.now();Fl=null,Pl=Math.max(0,Pl-e)}};window.addEventListener(`focus`,Ll,!1),window.addEventListener(`blur`,Il,!1),window.addEventListener(`pageshow`,Ll,!1),window.addEventListener(`pagehide`,Il,!1),document.addEventListener(`visibilitychange`,()=>{`hidden`in document&&document.hidden?Il():Ll()});const Rl=Date.now(),zl=e=>{let t=`dp=${e}&dl=${encodeURIComponent(document.location.href)}&${Ml}`;if(t+=`&fv=${Nl}&ss=${Nl}`,t+=`&dt=${Rl}`,Nl){let e=document.referrer;/www.windy.com/.test(e)||(t+=`&dr=${encodeURIComponent(e)}`),Nl=!1,Pl=Date.now()}let n=Date.now(),r=n-Pl;return Pl=n,t+=`&et=${r}`,{code:1,reqQs:t}},Bl=e=>{let{code:t,reqQs:n}=zl(e);di(`/sedlina/ga/${t}?${n}`,{cache:!1})};var Vl=y({logEvent:()=>Xl,logPage:()=>Yl});const Hl=new Set([`path`,`isolinesType`,`overlay`,`product`,`level`]),Ul={},Wl={},Gl=new Set([`plugin/consent`]),Kl=N.get(`consent`);
4let ql=Kl?Kl.analytics?`analytics`:`rejected`:`pending`;const Jl=async e=>{if(await mn(100),Bl(e),Ul[e]!==1&&!e.startsWith(`storyEvent`)&&!e.startsWith(`event`)){let t=await oo.get(e)||0;t++,oo.put(e,t)}Ul[e]=1},Yl=(e,t)=>{let n=`${e}/${t||``}`;ql===`analytics`||ql===`pending`&&Gl.has(n)?Jl(n):ql===`pending`&&(Ul[n]=0)},Xl=(e,t)=>Yl(`events`,t?`${e}/${t}`:e);N.on(`consent`,e=>{e!=null&&e.analytics?(ql=`analytics`,Object.keys(Ul).forEach(Jl)):ql=`rejected`}),P.on(`paramsChanged`,(e,t)=>{if(!t||!Hl.has(t))return;let n;n=t===`path`?`${Math.round((N.get(`timestamp`)-Date.now())/864e5)}d`:t===`acRange`?`${Math.round(N.get(`acRange`)/24)}d`:e[t],!(!n||n===Wl[t])&&(Wl[t]=n,Yl(t,n))}),Yl(`version`,he);var Zl=y({checkAndRenderSubsIssue:()=>su,checkPendingSubscription:()=>au,clearPendingSubscription:()=>Ql,getBaitTitle:()=>ou,getIssue:()=>iu,hasAny:()=>ru,setPendingSubscription:()=>$l,setSubsBodyClass:()=>tu,setTier:()=>nu});const Ql=()=>{N.remove(`pendingSubscription`),P.emit(`rqstClose`,`pending-subscription`)},$l=e=>{N.set(`pendingSubscription`,e)},eu=()=>{let e=N.get(`subscription`);N.set(`subscription`,null),N.set(`subscriptionInfo`,null),e&&document.body.classList.remove(`subs-${e}`),Yl(`subscription`,`tier/none`)},tu=e=>document.body.classList.add(`subs-${e}`),nu=e=>{if(!e)eu();else{let{state:t,platform:n,status:r,tier:i}=e;r===`active`?(N.set(`subscription`,i),N.set(`subscriptionInfo`,e),tu(i),N.remove(`failedSubscriptionPayment`)):eu(),Yl(`subscription`,`tier/${i}`),Yl(`subscription`,`state/${t}`),Yl(`subscription`,`platform/${n}`),Yl(`subscription`,`status/${r}`)}},ru=()=>N.get(`subscription`)!==null,iu=()=>{let e=N.get(`subscriptionInfo`);if(!e||!e.isSubscription||e.isTrial)return null;if([`graced`,`onhold`,`paused`].includes(e.state))return{type:e.state};if(e.state===`canceled`){let t=Math.abs(Math.round((e.expiresAt-Date.now())/T));if(t<=336)return{type:`expiring`,expiresInHours:t}}return null},au=()=>{N.get(`pendingSubscription`)&&P.emit(`rqstOpen`,`pending-subscription`)},ou=e=>{if(!e)return``;if(e.type===`graced`)return F.SUB_CUFFS_GRACED;if(e.type===`onhold`)return F.SUB_RENEW;if(e.type===`paused`)return F.SUB_CUFFS_PAUSED;if(e.type===`expiring`){if(e.expiresInHours<2)return F.SUB_CUFFS_CANCELED_4;if(e.expiresInHours<=48)return F.SUB_CUFFS_CANCELED_3.replace(`{{count}}`,String(e.expiresInHours));if(e.expiresInHours<=168)return F.SUB_CUFFS_CANCELED_2.replace(`{{count}}`,String(Math.round(e.expiresInHours/24)));if(e.expiresInHours<=336)return F.SUB_CUFFS_CANCELED_1}return``},su=()=>{let e=iu(),t=e?ou(e):null;t&&qr({type:`warning`,html:`<span data-icon="">${t}</span>`,timeout:rt*2,onclick:()=>{P.emit(`rqstOpen`,`subscription`)}})};P.once(`dependenciesResolved`,au),P.on(`checkPendingSubscriptions`,au);var cu=y({Product:()=>G}),G=class{constructor(e){var t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g,_,ee,te,ne,v,re;C(this,`bounds`,void 0),C(this,`minifestExpirationTime`,rt*10),C(this,`loadingPromise`,void 0),C(this,`ident`,void 0),C(this,`maxTileZoom`,void 0),C(this,`animationSpeed`,void 0),C(this,`animationSpeed1h`,void 0),C(this,`fileSuffix`,void 0),C(this,`fileSuffixFallback`,void 0),C(this,`JPGtransparency`,void 0),C(this,`PNGtransparency`,void 0),C(this,`dataQuality`,void 0),C(this,`betterDataQuality`,void 0),C(this,`animation`,void 0),C(this,`calendar`,void 0),C(this,`modelName`,void 0),C(this,`modelResolution`,void 0),C(this,`provider`,void 0),C(this,`providerUrl`,void 0),C(this,`providerLogoIdent`,void 0),C(this,`modelDescription`,void 0),C(this,`interval`,void 0),C(this,`intervalPremium`,void 0),C(this,`forecastSize`,void 0),C(this,`directory`,void 0),C(this,`category`,void 0),C(this,`modelIdent`,void 0),C(this,`labelsTemp`,void 0),C(this,`logo`,void 0),C(this,`overlays`,void 0),C(this,`levels`,void 0),C(this,`levelsOverride`,void 0),C(this,`isolines`,void 0),C(this,`preferredProduct`,void 0),C(this,`preferredWaveProduct`,void 0),C(this,`preferredAirProduct`,void 0),C(this,`minifest`,void 0),C(this,`server`,void 0),C(this,`hasMinifest`,void 0),C(this,`hasAccumulations`,void 0),C(this,`freeProduct`,void 0),C(this,`hideProductSwitch`,void 0),C(this,`minifestLastUpdate`,void 0),C(this,`supportsMeteogram`,void 0),this.modelName=e.modelName,this.ident=(t=e.ident)==null?`ecmwf`:t,this.maxTileZoom=(n=e.maxTileZoom)==null?{free:10,premium:10}:n,this.animationSpeed=(r=e.animationSpeed)==null?3e3:r,this.animationSpeed1h=(i=e.animationSpeed1h
4)==null?1e3:i,this.fileSuffix=(a=e.fileSuffix)==null?`jpg`:a,this.fileSuffixFallback=(o=e.fileSuffixFallback)==null?`jpg`:o,this.JPGtransparency=(s=e.JPGtransparency)==null?!1:s,this.PNGtransparency=(c=e.PNGtransparency)==null?!1:c,this.dataQuality=(l=e.dataQuality)==null?`normal`:l,this.betterDataQuality=(u=e.betterDataQuality)==null?[]:u,this.animation=(d=e.animation)==null?!0:d,this.forecastSize=(f=e.forecastSize)==null?240:f,this.labelsTemp=(p=e.labelsTemp)==null?!0:p,this.overlays=(m=e.overlays)==null?[]:m,this.hideProductSwitch=(h=e.hideProductSwitch)==null?!1:h,this.preferredProduct=(g=e.preferredProduct)==null?`ecmwf`:g,this.isolines=(_=e.isolines)==null?[]:_,this.directory=(ee=e.directory)==null?e.modelIdent&&e.category&&`${e.category}/${e.modelIdent}`||``:ee,this.modelIdent=e.modelIdent,this.category=e.category,this.provider=e.provider,this.providerUrl=e.providerUrl,this.providerLogoIdent=e.providerLogoIdent,this.interval=e.interval,this.intervalPremium=e.intervalPremium,this.server=e.server,this.modelResolution=e.modelResolution,this.levels=e.levels,this.levelsOverride=e.levelsOverride,this.bounds=e.bounds,this.logo=e.logo,this.hasAccumulations=e.hasAccumulations,this.modelDescription=e.modelDescription,this.minifest=null,this.loadingPromise=null,this.hasMinifest=(te=e.hasMinifest)==null?!0:te,this.freeProduct=e.freeProduct,this.preferredAirProduct=(ne=e.preferredAirProduct)==null?`ecmwf`:ne,this.preferredWaveProduct=(v=e.preferredWaveProduct)==null?`ecmwfWaves`:v,this.supportsMeteogram=(re=e.supportsMeteogram)==null?!0:re}async getRefTimeISOFormat(){var e=this;if(e.hasMinifest){if(e.minifest&&Date.now()<e.minifestExpirationTime)return e.minifest.ref;{let{ref:t}=await e.loadMinifest();return t}}}async getRefTime(){let e=await this.getRefTimeISOFormat();if(e)return e.replace(/(\d+)-(\d+)-(\d+)T(\d+):.*/,`$1$2$3$4`)}async loadMinifest(){var e=this;let t=ru()?`?premium=true`:``,{data:n}=await I(`/metadata/v1.0/${e.directory}/minifest.json${t}`);return e.minifest=n,e.minifestExpirationTime=Date.now()+e.minifestExpirationTime,n}pointIsInBounds(e){if(!this.bounds)return!0;let t=[+e.lat,+e.lon];for(let e of this.bounds)if(this.isPointInsidePolygon(t,e))return!0;return!1}boundsAreInViewport(e){if(!this.bounds)return!0;let t=x?.1:Le?.15:.25,n=window.innerWidth*t,r=window.innerHeight*t,i=e.getBounds(),a=e.latLngToContainerPoint(i.getNorthWest()),o=e.latLngToContainerPoint(i.getSouthEast()),c=new s(e.containerPointToLatLng(new m(a.x+n,a.y+r)),e.containerPointToLatLng(new m(o.x-n,o.y-r)));for(let e of this.bounds)if(c.intersects(e))return!0;return!1}close(){!S&&this.logo&&Ol()}open(){[`radar`,`satellite`].includes(this.ident)||Ol(),this.logo&&!S&&Dl(this.logo)}async getCalendar(){var e=this;if(e.hasMinifest){if(e.calendar&&Date.now()<e.minifestExpirationTime)return e.calendar;{let t=await e.loadMinifest();return e.calendar=new wl({productIdent:e.ident,minifest:t,freeProduct:e.freeProduct,minimumHours:e.forecastSize}),e.calendar}}}isPointInsidePolygon(e,t){let n=!1;for(let r=0,i=t.length-1;r<t.length;i=r++){let a=t[r][0],o=t[r][1],s=t[i][0],c=t[i][1];o>e[1]!=c>e[1]&&e[0]<(s-a)*(e[1]-o)/(c-o)+a&&(n=!n)}return!!n}},lu=class extends G{constructor(e){super(w(w({},e),{},{modelName:`ECMWF`,modelResolution:9,provider:`ECMWF`,providerLogoIdent:`ecmwf`,providerUrl:`https://www.ecmwf.int/`,interval:720,intervalPremium:360,maxTileZoom:{free:3,premium:4},dataQuality:`normal`}))}},uu=class extends lu{async loadMinifest(){let e=`/metadata/v1.0/forecast/ecmwf-hres/minifest.json${ru()?`?premium=true`:``}`,{preparedFetchRequests:t}=W,n=ru()?t.minifestPremium:t.minifest;n&&(W.preparedFetchRequests.minifest=void 0,W.preparedFetchRequests.minifestPremium=void 0);let{data:r}=await I(e,n?{ongoingFetchRequest:n}:void 0);return r}},du=class extends G{constructor(e){super(w({provider:`NCEP`,providerLogoIdent:`noaa`,providerUrl:`https://www.noaa.gov/`,modelName:`HRRR`,dataQuality:`extreme`,category:`forecast`,maxTileZoom:{free:4,premium:6},betterDataQuality:[`rain`,`clouds`,`lclouds`,`hclouds`,`mclouds`],interval:720,JPGtransparency:!0,forecastSize:72,levels:[`surface`,`975h`,`950h`,`925h`,`900h`,`850h`,`800h`,`700h`,`600h`,`500h`,`400h`,`300h`,`250h`,`200h`,`150h`],overlays:[`wind`,`temp`,`wetbulbtemp`,`clouds`,`rh`,`cape`,`gust`,`pressure`,`dewpoint`,`rain`,`lclouds`,`hclouds`,`mclouds`,`snowAccu`,`rainAccu`,`ptype`,`gustAccu`,`ccl`,`turbulence`,`icing`],hasAccumulations:!0,isolines:[`pressure`,`temp`,`gh`]},e))}};const fu=[`snowcover`,`wind`,`temp`,`wetbulbtemp`,`solarpower`,`pressure`,`clouds`,`lclouds`,`mclouds`,`hclouds`,`rh`,`gust`,`cape`,`dewpoint`,`rain`,`deg0`,`snowAccu`,`rainAccu`,`ptype`,`gustAccu`,`fog`,`ccl`,`turbulence`];var pu=class extends G{constructor(e){super(w({provider:`DWD`,providerLogoIdent:`dwd`,providerUrl:`https://www.dwd.de/`,interval:720,intervalPremium:360,category:`forecast`,preferredProduct:`icon`,preferredWaveProduct:`ecmwfWaves`,animation:!0,betterDataQuality:[`rain`,`clouds`,`lclouds`,`mclouds`,`hclouds`],labelsTemp:!0,levels:[`surface`,`950h`,`925h`,`900h`,`850h`,`800h`,`700h`,`600h`,`500h`,`400h`,`300h`,`250h`,`200h`,`150h`],hasAccumulations:!0,isolines:[`pressure`,`gh`,`temp`,`deg0`]},e))}},mu=class extends G{constructor(e){super(e),C(this,`urlSuff`,void 0),C(this,`urlSuffFlow`,void 0),this.hasMinifest=!1,this.urlSuff=e.urlSuff,this.urlSuffFlow=e.urlSuffFlow}},hu=class extends G{constructor(e){super(e),this.levels=[`surface`],this.labelsTemp=!1}
4async loadMinifest(){var e=this;let t=new Date().toISOString();return e.minifest={dst:[[1,0,1]],v:`1.0`,info:`fakeMinifest`,ref:t,update:t},e.minifestExpirationTime=Date.now()+e.minifestExpirationTime,e.minifest}},gu=class extends G{constructor(e){super(w({provider:`NOAA`,providerLogoIdent:`noaa`,providerUrl:`https://www.noaa.gov/`,interval:720,intervalPremium:360,modelName:`NAM`,dataQuality:`ultra`,category:`forecast`,maxTileZoom:{free:4,premium:5},betterDataQuality:[`rain`,`clouds`,`lclouds`,`hclouds`,`mclouds`],JPGtransparency:!0,forecastSize:72,levels:[`surface`,`975h`,`950h`,`925h`,`900h`,`850h`,`800h`,`700h`,`600h`,`500h`,`400h`,`300h`,`250h`,`200h`,`150h`],overlays:[`wind`,`temp`,`wetbulbtemp`,`clouds`,`cape`,`rh`,`gust`,`pressure`,`dewpoint`,`rain`,`lclouds`,`hclouds`,`mclouds`,`snowAccu`,`rainAccu`,`ptype`,`gustAccu`,`ccl`,`turbulence`,`icing`],hasAccumulations:!0,isolines:[`pressure`,`temp`,`gh`]},e))}},_u=class extends G{constructor(e){super(w({provider:`BOM`,providerLogoIdent:`bom`,providerUrl:`http://www.bom.gov.au/nwp/doc/access/NWPData.shtml`,interval:720,intervalPremium:360,modelName:`ACCESS`,JPGtransparency:!0,category:`forecast`,levels:[`surface`,`950h`,`925h`,`900h`,`850h`,`800h`,`700h`,`600h`,`500h`,`400h`,`300h`,`250h`,`200h`,`150h`],overlays:[`wind`,`temp`,`wetbulbtemp`,`pressure`,`clouds`,`lclouds`,`mclouds`,`hclouds`,`rh`,`gust`,`dewpoint`,`rain`,`snowAccu`,`rainAccu`,`ptype`,`gustAccu`,`ccl`,`turbulence`,`icing`,`visibility`],hasAccumulations:!0,isolines:[`pressure`,`gh`,`temp`]},e))}},vu=class extends _u{constructor(e){super(w({modelName:``,modelResolution:1.5,dataQuality:`extreme`,maxTileZoom:{free:4,premium:6},forecastSize:36},e))}},yu=class extends G{constructor(e){super(w({provider:`MF`,providerLogoIdent:`fr`,providerUrl:`http://www.meteofrance.com/`,interval:720,intervalPremium:360,modelName:`AROME`,modelResolution:2.5,JPGtransparency:!0,animation:!0,dataQuality:`extreme`,maxTileZoom:{free:4,premium:6},category:`forecast`,forecastSize:42,levels:[`surface`,`100m`,`950h`,`925h`,`900h`,`850h`,`800h`,`700h`,`600h`,`500h`,`400h`,`300h`,`250h`,`200h`,`150h`],overlays:[`wind`,`temp`,`wetbulbtemp`,`clouds`,`lclouds`,`mclouds`,`hclouds`,`rh`,`gust`,`cape`,`dewpoint`,`rain`,`snowAccu`,`rainAccu`,`ptype`,`pressure`,`gustAccu`,`turbulence`,`icing`],hasAccumulations:!0,isolines:[`pressure`,`gh`,`temp`],supportsMeteogram:!1},e))}};const bu=`https://www.windy.com/img/providers`,xu=`<a href="https://www.metoffice.gov.uk/" target="_blank"><img src="${bu}/metoffice-white-horizontal.svg" /></a>`,Su=`<a href="https://atmosphere.copernicus.eu/" target="_blank"><img src="${bu}/copernicus-white.svg" /></a>`,Cu=`<a href="https://marine.copernicus.eu/" target="_blank"><img src="${bu}/copernicus-marine-service.svg" /></a>`,wu=`<a href="https://www.droughtimpacts.eu/" target="_blank" class="uiyellow clickable-size flex-container mb-15 rhmessage-with-text">
5        <img src="${bu}/czechglobe.png" />
6        <p style="white-space: break-spaces;">Help us to monitor fire and drought impacts in your region for a safer World - go to www.droughtImpacts.eu</p>
7    </a>`,Tu=`<a href="https://www.jma.go.jp/jma/indexe.html" target="_blank"><img src="${bu}/jma-white-horizontal.svg" /></a>`,Eu=new uu({ident:`ecmwf`,category:`forecast`,modelIdent:`ecmwf-hres`,preferredWaveProduct:`ecmwfWaves`,betterDataQuality:[`rain`,`clouds`,`lclouds`,`mclouds`,`hclouds`,`cbase`,`snowAccu`,`rainAccu`,`snowcover`,`ptype`],levels:[`surface`,`100m`,`950h`,`925h`,`900h`,`850h`,`800h`,`700h`,`600h`,`500h`,`400h`,`300h`,`250h`,`200h`,`150h`,`10h`],overlays:`snowcover.wind.temp.wetbulbtemp.solarpower.pressure.clouds.lclouds.mclouds.hclouds.rh.gust.cbase.cape.dewpoint.rain.visibility.deg0.cloudtop.thunder.snowAccu.rainAccu.ptype.gustAccu.ccl.turbulence.icing`.split(`.`),hasAccumulations:!0,isolines:[`pressure`,`gh`,`temp`,`deg0`]}),Du=new lu({ident:`ecmwfAnalysis`,category:`analysis`,modelIdent:`ecmwf-hres`,betterDataQuality:[`sst`],overlays:[`sst`],isolines:[],labelsTemp:!1,animation:!1,forecastSize:0}),Ou=new G({ident:`cams`,provider:`Copernicus`,interval:720,PNGtransparency:!0,modelName:`CAMS`,modelResolution:40,fileSuffix:`png`,category:`forecast`,modelIdent:`cams-global`,maxTileZoom:{free:3,premium:3},dataQuality:`low`,levels:[`surface`],overlays:[`aqi`,`gtco3`,`aod550`,`pm2p5`,`no2`,`tcso2`,`go3`,`uvindex`,`cosc`,`dustsm`],labelsTemp:!1,supportsMeteogram:!1,logo:Su}),ku=new G({ident:`camsEu`,provider:`Copernicus`,interval:1440,PNGtransparency:!0,modelName:`CAMS EU`,modelResolution:10,fileSuffix:`png`,category:`forecast`,modelIdent:`cams-eu`,bounds:[[[72,-25],[72,45],[30,45],[30,-25]]],maxTileZoom:{free:3,premium:3},dataQuality:`high`,levels:[`surface`],overlays:[`aqi`,`pm2p5`,`no2`,`go3`],labelsTemp:!1,supportsMeteogram:!1,logo:Su}),Au=new G({ident:`cmems`,JPGtransparency:!0,maxTileZoom:{free:3,premium:3},modelName:`CMEMS`,modelResolution:9,provider:`Copernicus`,category:`forecast`,modelIdent:`cmems`,labelsTemp:!1,interval:1440,dataQuality:`normal`,overlays:[`currents`,`currentsTide`],levels:[`surface`],logo:Cu,hideProductSwitch:!0}),ju=new G({ident:`gfs`,preferredProduct:`gfs`,provider:`NOAA`,interval:720,intervalPremium:360,preferredWaveProduct:`gfsWaves`,providerLogoIdent:`noaa`,providerUrl:`https://www.noaa.gov/`,modelName:`GFS`,modelResolution:22,category:`forecast`,modelIdent:`gfs`,forecastSize:360,maxTileZoom:{free:3,premium:3},dataQuality:`low`,betterDataQuality:[`rain`,`clouds`,`lclouds`,`mclouds`,`hclouds`],levels:[`surface`,`100m`,`975h`,`950h`,`925h`,`900h`,`850h`,`800h`,`700h`,`600h`,`500h`,`400h`,`300h`,`250h`,`200h`,`150h`,`10h`],overlays:[`wind`,`temp`,`wetbulbtemp`,`pressure`,`clouds`,`rh`,`gust`,`dewpoint`,`rain`,`lclouds`,`mclouds`,`hclouds`,`snowAccu`,`rainAccu`,`ptype`,`gustAccu`,`cape`,`ccl`,`turbulence`,`icing`],hasAccumulations:!0,isolines:[`pressure`,`gh`,`temp`]}),Mu=new pu({ident:`icon`,modelName:`ICON`,modelResolution:13,dataQuality:`normal`,maxTileZoom:{free:3,premium:3},modelIdent:`icon-global`,forecastSize:168,overlays:[...fu,`cloudtop`]}),Nu=new pu({ident:`iconEu`,modelName:`ICON-EU`,modelResolution:7,preferredWaveProduct:`iconEuWaves`,intervalPremium:180,JPGtransparency:!0,dataQuality:`high`,maxTileZoom:{free:3,premium:4},modelIdent:`icon-eu`,forecastSize:120,overlays:[...fu,`cbase`,`cloudtop`,`visibility`],bounds:[[[70.5,-23.5],[70.5,62.5],[29.5,62.5],[29.5,-23.5]]]}
7),Pu=new pu({ident:`iconD2`,modelName:`ICON-D2`,modelResolution:2.2,intervalPremium:180,JPGtransparency:!0,dataQuality:`extreme`,modelIdent:`icon-d2`,preferredProduct:`iconEu`,preferredWaveProduct:`iconEuWaves`,maxTileZoom:{free:4,premium:6},forecastSize:48,overlays:[...fu,`cbase`,`visibility`],bounds:[[[57.32,-3.88],[57.83,2.23],[58.03,8.64],[57.93,15.41],[57.66,20.27],[54.3,19.48],[51.13,18.84],[47.6,18.24],[43.38,17.56],[43.6,14.16],[43.68,9.15],[43.5,3.7],[43.2,-.3],[47.6,-1.2],[51.13,-2.05],[54.3,-2.9]]],hasAccumulations:!0}),Fu=new G({ident:`iconEuWaves`,modelName:`ICON-EU EWAM`,modelResolution:7,preferredProduct:`iconEu`,preferredAirProduct:`iconEu`,bounds:[[[66,-10.525],[66,42.025],[29.95,42.025],[29.95,-10.525]]],provider:`DWD`,interval:720,providerLogoIdent:`dwd`,providerUrl:`https://www.dwd.de/`,labelsTemp:!1,category:`forecast`,modelIdent:`icon-ewam`,fileSuffix:`png`,dataQuality:`normal`,maxTileZoom:{free:3,premium:3},overlays:[`waves`,`wavePower`,`swell1`,`wwaves`],levels:[`surface`]}),Iu=new _u({ident:`bomAccess`,modelName:`ACCESS-G3`,modelResolution:12,dataQuality:`normal`,modelIdent:`bom-access`,maxTileZoom:{free:3,premium:4},forecastSize:240,bounds:[[[-65,65],[-65,180],[17,180],[17,65]],[[-65,-180],[-65,-175],[17,-175],[17,-180]]]}),Lu=new vu({ident:`bomAccessAd`,modelIdent:`bom-access-c-ad`,modelName:`ACCESS-C AD`,bounds:[[[-29.47,130],[-29.47,142],[-39.5,142],[-39.5,130]]]}),Ru=new vu({ident:`bomAccessBn`,modelIdent:`bom-access-c-bn`,modelName:`ACCESS-C BN`,bounds:[[[-21.47,145],[-21.47,157],[-31.5,157],[-31.5,145]]]}),zu=new vu({ident:`bomAccessDn`,modelIdent:`bom-access-c-dn`,modelName:`ACCESS-C DN`,bounds:[[[-7.97,127],[-7.97,139],[-18,139],[-18,127]]]}),Bu=new vu({ident:`bomAccessNq`,modelIdent:`bom-access-c-nq`,modelName:`ACCESS-C NQ`,bounds:[[[-12.47,139],[-12.47,151],[-22.5,151],[-22.5,139]]]}),Vu=new vu({ident:`bomAccessPh`,modelIdent:`bom-access-c-ph`,modelName:`ACCESS-C PH`,bounds:[[[-26.97,112],[-26.97,124],[-37,124],[-37,112]]]}),Hu=new vu({ident:`bomAccessSy`,modelIdent:`bom-access-c-sy`,modelName:`ACCESS-C SY`,bounds:[[[-27.97,144],[-27.97,156],[-38,156],[-38,144]]]}),Uu=new vu({ident:`bomAccessVt`,modelIdent:`bom-access-c-vt`,modelName:`ACCESS-C VT`,bounds:[[[-33,139],[-33,151],[-46,151],[-46,139]]]}),Wu=[[[54.676,-11.999],[55.248,-4.269],[55.389,2.579],[55.209,9.148],[54.679,15.998],[46.483,13.903],[37.5,12.197],[37.85,7.621],[38,2.208],[37.879,-3.009],[37.497,-8.173],[46.095,-9.792]]],Gu=new yu({ident:`aromeAntilles`,modelIdent:`arome-antilles`,modelName:`AROME ANT`,bounds:[[[22.9,-75.3],[22.9,-51.7],[9.7,-51.7],[9.7,-75.3]]]}),Ku=new yu({ident:`aromeFrance`,modelIdent:`arome-france`,modelName:`AROME FR`,bounds:Wu,intervalPremium:180}),qu=new yu({ident:`aromeReunion`,modelIdent:`arome-reunion`,modelName:`AROME REU`,bounds:[[[-3.45,32.73],[-3.45,67.61],[-25.9,67.61],[-25.9,32.73]]]}),Ju=new G({ident:`arome`,provider:`MF`,interval:720,intervalPremium:180,modelName:`AROME-HD`,modelResolution:1.3,providerLogoIdent:`fr`,providerUrl:`http://www.meteofrance.com/`,JPGtransparency:!0,animation:!0,dataQuality:`extreme`,maxTileZoom:{free:4,premium:6},category:`forecast`,modelIdent:`arome`,forecastSize:42,bounds:Wu,levels:[`surface`],overlays:[`wind`,`temp`,`wetbulbtemp`,`clouds`,`lclouds`,`mclouds`,`hclouds`,`rh`,`gust`,`cape`,`dewpoint`,`rain`,`snowAccu`,`rainAccu`,`ptype`,`gustAccu`],hasAccumulations:!0,isolines:[`temp`],supportsMeteogram:!1}),Yu=new G({ident:`nems`,modelName:`NEMS`,modelResolution:4,provider:`Meteoblue.com`,interval:720,JPGtransparency:!0,animation:!0,dataQuality:`ultra`,betterDataQuality:[`rain`,`clouds`],maxTileZoom:{free:4,premium:5},category:`forecast`,modelIdent:`mbeurope`,labelsTemp:!1,forecastSize:72,bounds:[[[58.08,-19.79],[58.08,33.76],[32.01,33.76],[32.01,-19.79]]],levels:[`surface`,`975h`,`950h`,`925h`,`900h`,`850h`],overlays:[`wind`,`temp`,`wetbulbtemp`,`clouds`,`rh`,`gust`,`dewpoint`,`rain`,`rainAccu`,`gustAccu`],hasAccumulations:!0,logo:`<a href="https://www.meteoblue.com/?utm_source=windy.com&utm_medium=referral&utm_campaign=forecast-model-NEMS-layer" target="_blank" style="white-space: nowrap;">NEMS4 model by <img style="padding-left: 5%;padding-bottom: 2px; max-width:90px;height:auto;" src="https://www.windy.com/img/logo-mb.svg" /></a>`}),Xu=new G({ident:`mblue`,modelName:x?`mblue AI`:`meteoblue AI`,modelDescription:`AI generated forecast based on all available data for given location. For places with high density of weather stations (where AI model can be trained), surpasses all other models.`,interval:720,provider:`meteoblue`,providerLogoIdent:`meteoblue`,providerUrl:`https://www.meteoblue.com/`,hideProductSwitch:!0,hasMinifest:!1,supportsMeteogram:!0}),Zu=[[[47.78,-134],[49.9,-125.15],[51.27,-116.89],[52.19,-107.7],[52.57,-98.94],[52.29,-88.68],[51.43,-79.14],[49.95,-69.97],[47.78,-61.1],[41.6,-64.6],[32,-68.75],[21.4,-72.4],[23.7,-84.83],[24.6,-97.7],[23.74,-110],[21.4,-122.7],[32,-126.2],[41.6,-130.5]]],Qu=new gu({ident:`namConus`,modelResolution:5,modelIdent:`nam-conus`,bounds:Zu}
7),$u=new gu({ident:`namHawaii`,modelResolution:3,modelIdent:`nam-hawaii`,modelName:`NAM-HI`,bounds:[[[23.09,-161.56],[23.09,-153.88],[18.08,-153.88],[18.08,-161.56]]]}),ed=new gu({ident:`namAlaska`,modelResolution:6,modelIdent:`nam-alaska`,modelName:`NAM-AK`,bounds:[[[71.3,171.8],[57.7,160.9],[51,172],[47.8,180],[73,180]],[[47.8,-180],[43.2,-172.1],[46.1,-157],[45.7,-142.4],[49.7,-128.6],[51.5,-116.8],[53.2,-114.9],[66.6,-119],[73.6,-124],[75.3,-153.4],[73,-180]]]}),td=new du({ident:`hrrrConus`,modelResolution:3,dataQuality:`extreme`,modelIdent:`hrrr-conus`,intervalPremium:60,bounds:Zu}),nd=new du({ident:`hrrrAlaska`,modelName:`HRRR-AK`,modelResolution:3,dataQuality:`extreme`,modelIdent:`hrrr-alaska`,intervalPremium:180,bounds:[[[55.7,157],[51.2,170.4],[46,180],[71.6,180],[65.8,167]],[[46,-180],[41.8,-175],[48.8,-160],[51.7,-145],[52,-129],[64.9,-125],[76,-116.5],[76,-158],[71.6,-180]]]}),rd=new G({ident:`drought`,modelName:`CzechGlobe`,modelResolution:9,provider:`CzechGlobe`,interval:1440,fileSuffix:`png`,PNGtransparency:!0,dataQuality:`normal`,category:`forecast`,modelIdent:`intersucho`,levels:[`surface`],hasAccumulations:!0,isolines:[],labelsTemp:!1,logo:wu,overlays:[`moistureAnom40`,`moistureAnom100`,`drought40`,`drought100`,`soilMoisture40`,`soilMoisture100`],freeProduct:!0,hideProductSwitch:!0}),id=new G({ident:`fireDanger`,modelName:`CzechGlobe`,modelResolution:9,provider:`CzechGlobe`,interval:360,fileSuffix:`png`,PNGtransparency:!0,dataQuality:`normal`,category:`forecast`,modelIdent:`intersucho-firerisk-hourly`,levels:[`surface`],isolines:[],labelsTemp:!1,logo:wu,overlays:[`fwi`,`dfm10h`,`dfm100h`,`dfm1000h`],freeProduct:!0,hideProductSwitch:!0}),ad=new G({ident:`ecmwfWaves`,modelName:`ECMWF WAM`,modelResolution:9,preferredAirProduct:`ecmwf`,provider:`ECMWF`,providerLogoIdent:`ecmwf`,providerUrl:`https://www.ecmwf.int/`,interval:720,intervalPremium:360,labelsTemp:!1,maxTileZoom:{free:3,premium:4},category:`forecast`,modelIdent:`ecmwf-wam`,fileSuffix:`png`,dataQuality:`normal`,overlays:[`waves`,`wavePower`,`swell1`,`swell2`,`swell3`,`wwaves`],levels:[`surface`]}),od=new G({ident:`ukv`,provider:`Met Office`,providerLogoIdent:`metoffice`,providerUrl:`https://www.metoffice.gov.uk`,interval:720,intervalPremium:180,modelName:`UKV`,modelResolution:2,JPGtransparency:!0,animation:!0,dataQuality:`extreme`,maxTileZoom:{free:4,premium:6},category:`forecast`,modelIdent:`ukv`,forecastSize:120,bounds:[[[61.3,-24.4],[62.7,-11],[62.9,.1],[61.85,15.1],[54.7,11.85],[45.1,9.1],[45.6,.4],[45.6,-7.8],[44.7,-17],[54.7,-20.5]]],levels:[`surface`,`975h`,`950h`,`925h`,`900h`,`850h`,`800h`,`700h`,`600h`,`500h`,`400h`,`300h`,`250h`,`200h`,`150h`],overlays:[`wind`,`temp`,`wetbulbtemp`,`pressure`,`clouds`,`lclouds`,`mclouds`,`hclouds`,`fog`,`rh`,`gust`,`cape`,`dewpoint`,`rain`,`ptype`,`visibility`,`deg0`,`snowAccu`,`rainAccu`,`gustAccu`,`ccl`,`turbulence`],isolines:[`pressure`,`gh`,`temp`,`deg0`],hasAccumulations:!0,logo:xu}),sd=new G({ident:`gfsWaves`,modelName:`GFS WAVE`,modelResolution:22,preferredAirProduct:`gfs`,provider:`NOAA`,interval:720,intervalPremium:360,preferredProduct:`gfs`,providerLogoIdent:`noaa`,providerUrl:`https://www.noaa.gov/`,labelsTemp:!1,category:`forecast`,modelIdent:`gfs-wave`,fileSuffix:`png`,forecastSize:360,dataQuality:`low`,maxTileZoom:{free:3,premium:3},overlays:[`waves`,`wavePower`,`swell1`,`swell2`,`swell3`,`wwaves`],levels:[`surface`]}),cd=new G({ident:`activeFires`,modelName:`nasa-firms`,modelResolution:22,labelsTemp:!1,provider:`NASA`,interval:60,category:`analysis`,modelIdent:`nasa-firms`,dataQuality:`normal`,maxTileZoom:{free:18,premium:18}}),ld=new hu({ident:`capAlerts`,modelName:``,interval:0,provider:`Various providers`,overlays:[`capAlerts`],hideProductSwitch:!0}),ud=new hu({ident:`avalancheDanger`,modelName:``,interval:0,provider:`Various providers`,overlays:[`avalancheDanger`],hideProductSwitch:!0}),dd=new G({ident:`efi`,provider:`ECMWF`,interval:720,modelName:`ECMWF`,modelResolution:9,labelsTemp:!1,maxTileZoom:{free:3,premium:3},category:`forecast`,modelIdent:`ecmwf-efi`,dataQuality:`normal`,levels:[`surface`],overlays:[`efiTemp`,`efiWind`,`efiRain`],hideProductSwitch:!0}),fd=new G({ident:`jmaMsm`,provider:`JMA`,interval:720,intervalPremium:180,modelName:`MSM`,modelResolution:5,preferredWaveProduct:`jmaCwmWaves`,providerLogoIdent:`jma`,providerUrl:`https://www.jma.go.jp/jma/indexe.html`,JPGtransparency:!0,dataQuality:`high`,maxTileZoom:{free:3,premium:5},category:`forecast`,modelIdent:`jma-msm`,bounds:[[[47.6,120],[47.6,150],[22.4,150],[22.4,120]]],levels:[`surface`,`950h`,`925h`,`900h`,`850h`,`800h`,`700h`,`600h`,`500h`,`400h`,`300h`,`250h`,`200h`,`150h`],levelsOverride:{rh:[`surface`,`950h`,`925h`,`900h`,`850h`,`800h`,`700h`,`600h`,`500h`,`400h`,`300h`]},overlays:[`wind`,`temp`,`wetbulbtemp`,`pressure`,`clouds`,`lclouds`,`mclouds`,`hclouds`,`rh`,`dewpoint`,`rain`,`rainAccu`],isolines:[`pressure`,`gh`,`temp`],hasAccumulations:!0,logo:Tu}),pd=new G({ident:`jmaCwmWaves`,provider:`JMA`,interval:720,intervalPremium:360,modelName:`CWM`,modelResolution:5,preferredAirProduct:`jmaMsm`,providerLogoIdent:`jma`,providerUrl:`https://www.jma.go.jp/jma/indexe.html`,dataQuality:`high`,fileSuffix:`png`,maxTileZoom:{free:3,premium:5},labelsTemp:!1,category:`forecast`,modelIdent:`jma-cwm`,bounds:[[[50,120],[50,150],[20,150],[20,120]]],overlays:[`waves`,`wavePower`,`swell1`,`swell2`,`wwaves`],levels:[`surface`],logo:Tu}),md=[[[66.57,-152.72],[69.81,-132.09],[70.59,-114.36],[68.37,-85.63],[64.55,-69.5],[59.07,-56.36],[47.91,-40.71],[39.15,-54.6],[27.27,-66.95],[36.52,-84.95],[40.39,-99.88],[41.54,-111.45],[39.62,-133.64],[55.16,-141.29]]],hd=new G({ident:`canHrdps`,provider:`MSC`,interval:720,intervalPremium:360,modelName:`HRDPS`,modelResolution:2.5,preferredProduct:`ecmwf`,preferredWaveProduct:`canRdwpsWaves`,providerLogoIdent:`msc`,providerUrl:`https://eccc-msc.github.io/open-data/msc-data/nwp_hrdps/readme_hrdps-datamart_en/`,JPGtransparency:!0,dataQuality:`extreme`,maxTileZoom:{free:4,premium:6},category:`forecast`,modelIdent:`can-hrdps`,bounds:md,levels:[`surface`,`950h`,`925h`,`900h`,`850h`,`800h`,`700h`,`600h`,`500h`,`400h`,`300h`,`250h`,`200h`,`150h`],overlays:[`cape`,`ccl`,`clouds`,`dewpoint`,`gust`,`gustAccu`,`hclouds`,`lclouds`,`mclouds`,`pressure`,`ptype`,`rain`,`rainAccu`,`rh`,`snowcover`,`temp`,`turbulence`,`wind`,`wetbulbtemp`],isolines:[`pressure`,`gh`,`temp`],hasAccumulations:!0}),gd=new G({ident:`canRdwpsWaves`,provider:`MSC`,interval:720,intervalPremium:360,modelName:`RDWPS`,modelResolution:2.5,preferredAirProduct:`canHrdps`,providerLogoIdent:`msc`,providerUrl:`https://eccc-msc.github.io/open-data/msc-data/nwp_rdwps/readme_rdwps-datamart_en/`,dataQuality:`extreme`,fileSuffix:`png`,maxTileZoom:{free:4,premium:6},labelsTemp:!1,category:`forecast`,modelIdent:`can-rdwps`,bounds:md,overlays:[`waves`,`wavePower`,`swell1`,`swell2`,`wwaves`],levels:[`surface`]}),_d=new G({ident:`czeAladin`,provider:`CHMI`,interval:720,intervalPremium:360,modelName:`ALADIN`,modelResolution:2.3,preferredProduct:`ecmwf`,preferredWaveProduct:`ecmwfWaves`,providerLogoIdent:`chmi`,providerUrl:`https://geop
7ortal.gov.cz/php/micka/record/basic/664b1c63-c510-40b8-9a84-313264c0a8017c`,JPGtransparency:!0,dataQuality:`extreme`,maxTileZoom:{free:4,premium:6},category:`forecast`,modelIdent:`cze-aladin`,bounds:[[[56.139,34.244],[56.674,29.323],[56.975,25.126],[57.178,19.589],[57.178,14.381],[56.975,8.844],[56.674,4.647],[56.262,.582],[55.547,-4.581],[52.382,-3.109],[48.582,-1.615],[44.174,-.143],[38.694,1.373],[39.07,4.01],[39.462,7.614],[39.716,11.019],[39.851,14.337],[39.868,18.402],[39.783,21.61],[39.462,26.378],[39.104,29.432],[48.305,31.608]]],levels:[`surface`,`950h`,`925h`,`900h`,`850h`,`800h`,`700h`,`600h`,`500h`,`400h`,`300h`,`250h`,`200h`,`150h`],overlays:[`cape`,`clouds`,`dewpoint`,`gust`,`gustAccu`,`hclouds`,`lclouds`,`mclouds`,`pressure`,`ptype`,`rain`,`rainAccu`,`rh`,`snowAccu`,`solarpower`,`temp`,`thunder`,`turbulence`,`visibility`,`wetbulbtemp`,`wind`],hasAccumulations:!0,isolines:[`pressure`,`gh`,`temp`]}),vd=new mu({ident:`satellite`,animation:!1,modelName:``,provider:`EUMETSAT`,interval:3,directory:`satellite/tile`,server:`https://sat.windy.com`,urlSuff:`visir.jpg?mosaic=true`,urlSuffFlow:`visir.jpg`,labelsTemp:!1,overlays:[`satellite`],levels:[`surface`],maxTileZoom:{free:7,premium:11},hideProductSwitch:!0}),K={bomAccess:Iu,bomAccessAd:Lu,bomAccessBn:Ru,bomAccessDn:zu,bomAccessNq:Bu,bomAccessPh:Vu,bomAccessSy:Hu,bomAccessVt:Uu,mblue:Xu,ecmwf:Eu,ecmwfWaves:ad,ecmwfAnalysis:Du,canHrdps:hd,canRdwpsWaves:gd,cams:Ou,camsEu:ku,cmems:Au,czeAladin:_d,gfs:ju,gfsWaves:sd,icon:Mu,iconD2:Pu,iconEu:Nu,iconEuWaves:Fu,arome:Ju,aromeAntilles:Gu,aromeFrance:Ku,aromeReunion:qu,nems:Yu,namAlaska:ed,namConus:Qu,namHawaii:$u,capAlerts:ld,efi:dd,radar:new mu({ident:`radar`,animation:!1,hasMinifest:!1,modelName:``,provider:``,interval:3,fileSuffix:`webp`,fileSuffixFallback:`png`,directory:`radar2/composite`,server:`https://rdr.windy.com`,labelsTemp:!1,overlays:[`radar`],levels:[`surface`],hideProductSwitch:!0,urlSuff:``,urlSuffFlow:``}),satellite:vd,drought:rd,fireDanger:id,hrrrAlaska:nd,hrrrConus:td,ukv:od,activeFires:cd,jmaMsm:fd,jmaCwmWaves:pd,topoMap:new hu({ident:`topoMap`,modelName:`Outdoor Map`,interval:0,provider:`Seznam.cz`,overlays:[`topoMap`],hideProductSwitch:!0}),avalancheDanger:ud};var yd=y({bestModelFromSameGroup:()=>Cd,betterProducts:()=>wd,getAllPointProducts:()=>Dd,getDefaultPointProduct:()=>jd,getDefaultProduct:()=>Fd,getPointProducts:()=>Od,getProduct:()=>Ed,getWavePointProducts:()=>kd,hasMoreProducts:()=>Pd,layer2product:()=>bd,overlay2product:()=>xd,sortPointProducts:()=>Md});const bd={},xd={},Sd=Object.keys(K);Object.keys(xl).forEach(e=>{let t=[];for(let n=0;n<Sd.length;n++)K[Sd[n]].overlays.includes(e)&&t.push(Sd[n]);bd[e]=t}
7),Object.keys(dc).forEach(e=>{let t=[];for(let n=0;n<Sd.length;n++)K[Sd[n]].overlays.includes(e)&&t.push(Sd[n]);xd[e]=t});const Cd=(e,t)=>e===`icon`&&t.includes(`iconEu`)?`iconEu`:e===`iconEu`&&t.includes(`icon`)?`icon`:e.includes(`aromeFrance`)&&e.includes(`arome`)?`arome`:e===`cams`&&t.includes(`camsEu`)?`camsEu`:e===`camsEu`&&t.includes(`cams`)?`cams`:null,wd=(e,t)=>{let n=t?je:Te,r=[];for(let i=0;i<n.length;i++){let a=n[i],o=K[a];(t&&o.pointIsInBounds.call(o,e)||!t&&o.boundsAreInViewport.call(o,Q))&&r.push(a)}return r},Td=()=>{let e=wd(N.get(`mapCoords`)).concat(Ee);if(N.set(`visibleProducts`,e)&&!e.includes(N.get(`product`))){let t=N.get(`preferredProduct`),n=N.get(`overlay`);if(K[t].overlays.includes(n))N.set(`product`,t);else{let t=e.filter(e=>K[e].overlays.includes(n));t.length&&N.set(`product`,t[0])}}};P.once(`paramsChanged`,()=>{Td(),N.on(`mapCoords`,Td)});const Ed=(e,t)=>{let n=bd[e],r=N.get(`preferredProduct`),i=K[t];if(n.length===2&&n.includes(`cams`)){let e=N.get(`mapCoords`);return K.camsEu.pointIsInBounds(e)&&n.includes(`camsEu`)?`camsEu`:`cams`}if(n.includes(t))return t;if(n.includes(`iconD2`)&&r===`iconEu`){let e=N.get(`mapCoords`);if(K.iconD2.pointIsInBounds(e))return`iconD2`}if(n.includes(`iconEu`)&&r===`icon`){let e=N.get(`mapCoords`);if(K.iconEu.pointIsInBounds(e))return`iconEu`}if(n.includes(i.preferredAirProduct))return i.preferredAirProduct;if(n.includes(i.preferredWaveProduct)){if(i.preferredWaveProduct===`iconEuWaves`){let e=N.get(`mapCoords`);if(K.iconEuWaves.pointIsInBounds(e))return`iconEuWaves`}return i.preferredWaveProduct}if(n.includes(r))return r;if(n.length>1){let e=N.get(`mapCoords`),t=n.filter(t=>K[t].pointIsInBounds.call(K[t],e))[0];if(t)return t}return n[0]},Dd=e=>{let t=wd(e,!0).filter(e=>Ie.includes(e));return[...Me,...t]},Od=e=>{let t=Dd(e);return[...new Set(t)]}
7,kd=e=>Oe.filter(t=>K[t].pointIsInBounds(e)),Ad=[`ecmwf`,`mblue`,`gfs`,`iconD2`,`iconEu`,`namConus`,`icon`],jd=()=>{let e=N.get(`userSelectedPointFcstModel`);return e==null?`ecmwf`:e},Md=e=>{let t=jd(),n=Ad;return e.sort((e,r)=>{if(e===t)return-1;if(r===t)return 1;let i=n.indexOf(e),a=n.indexOf(r);return i!==-1&&a!==-1?i-a:i===-1?a===-1?0:1:-1})},Nd=e=>{var t,n;return(t=(n=bd[e])==null?void 0:n.length)==null?0:t},Pd=e=>Nd(e)>1,Fd=e=>{if(Nd(e)>0){let t=bd[e];return t.includes(`ecmwf`)?`ecmwf`:t[0]}else return};var Id=y({Drag:()=>Ld}),Ld=class{constructor(e){var t,n,r,i,a,o,s,c,l,u,d;C(this,`supportTouch`,void 0),C(this,`preventDefault`,void 0),C(this,`passiveListener`,void 0),C(this,`startXY`,void 0),C(this,`bindedDrag`,void 0),C(this,`bindedEndDrag`,void 0),C(this,`bindedStart`,void 0),C(this,`offsetX`,void 0),C(this,`offsetY`,void 0),C(this,`dragging`,!1),C(this,`el`,void 0),this.el=e.el,this.supportTouch=(t=e.supportTouch)==null?!0:t,this.preventDefault=(n=e.preventDefault)==null?!0:n,this.passiveListener=(r=e.passiveListener)==null?!0:r,this.ondrag=(i=e.ondrag)==null?this.ondrag:i,this.ondragstart=(a=e.ondragstart)==null?this.ondragstart:a,this.ondragend=(o=e.ondragend)==null?this.ondragend:o,this.bindedDrag=(s=e.bindedDrag)==null?this._drag.bind(this):s,this.bindedEndDrag=(c=e.bindedEndDrag)==null?this.endDrag.bind(this):c,this.bindedStart=(l=e.bindedStart)==null?this.startDrag.bind(this):l,this.startDrag=(u=e.startDrag)==null?this.startDrag:u,this.endDrag=(d=e.endDrag)==null?this.endDrag:d,this.el.addEventListener(`mousedown`,this.bindedStart),this.supportTouch&&this.el.addEventListener(`touchstart`,this.bindedStart)}destroy(){this.el.removeEventListener(`mousedown`,this.bindedStart),this.supportTouch&&this.el.removeEventListener(`touchstart`,this.bindedStart)}startDrag(e){this.preventDefault&&e.preventDefault(),this.startXY=this.getXY(e),this.offsetX=this.el.offsetLeft,this.offsetY=this.el.offsetTop,this.dragging=!0,this.ondragstart&&this.ondragstart.call(this,this.startXY),window.addEventListener(`mousemove`,this.bindedDrag),window.addEventListener(`mouseup`,this.bindedEndDrag),this.supportTouch&&(window.addEventListener(`touchmove`,this.bindedDrag,this.passiveListener?void 0:{passive:!1}),window.addEventListener(`touchend`,this.bindedEndDrag),window.addEventListener(`touchcancel`,this.bindedEndDrag))}endDrag(e){window.removeEventListener(`mousemove`,this.bindedDrag),window.removeEventListener(`touchmove`,this.bindedDrag,this.passiveListener?void 0:{passive:!1}),window.removeEventListener(`mouseup`,this.bindedEndDrag),window.removeEventListener(`touchend`,this.bindedEndDrag),window.removeEventListener(`touchcancel`,this.bindedEndDrag),this.ondragend&&this.ondragend(e),this.dragging=!1}getXY(e){return Yt(e)?[e.touches[0].pageX,e.touches[0].pageY]:[e.pageX,e.pageY]}_drag(e){if(!this.ondrag)return;let t=this.getXY(e);this.ondrag(t[0]-this.startXY[0]+this.offsetX,t[1]-this.startXY[1]+this.offsetY,e)}},Rd=y({Swipe:()=>zd}),zd=class{constructor(e){var t,n;C(this,`el`,void 0),C(this,`threshold`,void 0),C(this,`direction`,void 0),C(this,`isSwipeValid`,void 0),C(this,`x`,void 0),C(this,`y`,void 0),C(this,`xStart`,void 0),C(this,`yStart`,void 0),C(this,`xThrottled`,void 0),C(this,`yThrottled`,void 0),this.el=e.el,this.onswipe=e.onswipe,this.threshold=(t=e.threshold)==null?50:t,this.onswipestart=(n=e.onswipestart)==null?this.onswipestart:n,this.el.addEventListener(`touchstart`,this.touchStart.bind(this)),this.el.addEventListener(`touchmove`,this.touchMove.bind(this)),this.el.addEventListener(`touchend`,this.touchEnd.bind(this))}touchStart(e){this.isSwipeValid=!0,this.direction=null,this.x=this.xStart=this.xThrottled=e.touches[0].clientX,this.y=this.yStart=this.yThrottled=e.touches[0].clientY,this.onswipestart(e)}touchMove(e){this.x=e.touches[0].clientX,this.y=e.touches[0].clientY;let t=this.x-this.xThrottled,n=this.y-this.yThrottled;if(lt(t,n)<this.threshold)return;this.xThrottled=this.x,this.yThrottled=this.y;let r=null;if(Math.abs(n/t)<.2?r=t>0?`right`:`left`:Math.abs(t/n)<.2&&(r=n>0?`down`:`up`),r!==null){if(this.direction!==null&&this.direction!==r){this.isSwipeValid=!1;return}this.direction=r}}touchEnd(e){if(this.direction===null||!this.isSwipeValid)return;let t=lt(this.x-this.xStart,this.y-this.yStart),n=e.target;for(;n&&n!==this.el;){if(n.dataset.ignoreSwipe)return;n=n.parentElement}this.onswipe(this.direction,t,e)}onswipestart(e){}onswipe(e,t,n){}},Bd=y({BottomSlide:()=>Vd}),Vd=class extends Ld{constructor(e){super(w(w({},e),{},{preventDefault:!1,passiveListener:!1})),C(this,`pluginEl`,void 0),C(this,`pluginName`,void 0),C(this,`scrollEl`,void 0),C(this,`closeOnSwipeDown`,void 0),C(this,`threshold`,30),C(this,`swipeHandler`,void 0),C(this,`startY`,void 0),C(this,`transformedY`,void 0),C(this,`throttledY`,void 0),C(this,`difference`,void 0),C(this,`onRqstPluginHalfOpen`,(e,t,n)=>{e===this.pluginName&&this.setHalfOpen(t,n)}),this.pluginEl=e.pluginEl,this.pluginName=e.pluginName,this.closeOnSwipeDown=e.closeOnSwipeDown,this.scrollEl=e.scrollEl;let t=this.scrollEl||qt(`.plugin__content`,this.pluginEl);if(!t)return;let n=!1;t.addEventListener(`scroll`,()=>{t.scrollTop>
720&&!n?(this.pluginEl.classList.add(`show-header`),n=!0):t.scrollTop<21&&n&&(this.pluginEl.classList.remove(`show-header`),n=!1)}),this.closeOnSwipeDown&&this.initCloseOnSwipeDown(t),P.on(`rqstHalfOpen`,this.onRqstPluginHalfOpen)}ondrag(e,t,n){this.transformedY=this.startY+t,this.updatePosition(Math.max(0,this.transformedY)),Math.abs(this.throttledY-this.transformedY)>this.threshold&&(this.difference=this.transformedY-this.throttledY,this.throttledY=this.transformedY),n.preventDefault()}ondragend(){if(!(Math.abs(this.transformedY-this.startY)>this.threshold)){this.updatePosition(this.startY);return}this.pluginEl.style.transition=``,this.pluginEl.style.transform=``,this.difference>0?this.closeOnSwipeDown||this.pluginEl.classList.contains(`open-half`)?P.emit(`rqstClose`,this.pluginName):this.setHalfOpen(!0):this.setHalfOpen(!1)}startDrag(e){super.startDrag(e);let{transform:t}=window.getComputedStyle(this.pluginEl),n=/matrix\(.+,\s*(\S+)\)/.exec(t);this.startY=n&&n[1]?+n[1]:0,this.transformedY=this.startY,this.throttledY=this.startY,this.difference=0,this.pluginEl.style.transition=`none`}release(){P.off(`rqstHalfOpen`,this.onRqstPluginHalfOpen)}initCloseOnSwipeDown(e){let t;this.swipeHandler=new zd({el:this.pluginEl,threshold:80,onswipestart(){t=e.scrollTop<=0},onswipe:e=>{t&&e===`down`&&P.emit(`rqstClose`,this.pluginName)}})}setHalfOpen(e,t=!0){e===void 0?e=this.pluginEl.classList.toggle(`open-half`):e?this.pluginEl.classList.add(`open-half`):this.pluginEl.classList.remove(`open-half`),t&&P.emit(`pluginHalfOpened`,this.pluginName,e)}updatePosition(e){this.pluginEl.style.transform=`translate(0px,${Math.floor(e)}px)`}},Hd=y({Plugin:()=>Ud}),Ud=class{get isPending(){return this.loading}constructor(e){var t,n,r,i;C(this,`loading`,void 0),C(this,`promise`,void 0),C(this,`ident`,void 0),C(this,`location`,void 0),C(this,`langFiles`,void 0),C(this,`isLoaded`,void 0),C(this,`pane`,void 0),C(this,`isOpen`,void 0),C(this,`neverClose`,void 0),C(this,`isResolved`,void 0),C(this,`plugin`,void 0),C(this,`disableMobilePicker`,void 0),this.initProperties(),this.pane=e.pane,this.ident=e.ident,this.langFiles=e.langFiles||[],this.location=(t=e.location)==null?Bt(Ge,`${this.ident}.js`):t,this.close=(n=e.close)==null?this.close:n,this.paramsChanged=(r=e.paramsChanged)==null?this.paramsChanged:r,this.redraw=(i=e.redraw)==null?this.redraw:i,this.neverClose=e.neverClose,this.disableMobilePicker=e.disableMobilePicker}load(){return this.isLoaded?Promise.resolve(!0):this.loading?this.promise||Promise.resolve(!0):(this.loading=!0,new Promise((e,t)=>{let n=()=>{import(this.location).then(t=>{this.plugin=t,this.isLoaded=!0,this.loading=!1,e(!0)}).catch(e=>{console.error(`Failed to load plugin: ${this.ident}`,e),wr(),t(e)})},r=[`main`,...this.langFiles].map(e=>Rr(e));Promise.all(r).then(n).catch(e=>{this.loading=!1,O(`plugin`,`Failed to load language dependencies: ${this.ident}`,e),t(e)})}))}open(...e){return this.promise=this.load(),this.promise}close(e){}redraw(...e){}paramsChanged(...e){}onRenderStart(...e){}initProperties(){this.loading=!1,this.isLoaded=!1}};C(Ud,`iAm`,`plugin`);var Wd=y({opener:()=>Xd,register:()=>qd,release:()=>Jd,singleclick:()=>Kd});const Gd={high:null,low:null},Kd=new Bn({ident:`singleclick`}),qd=(e,t)=>Gd[t]=e,Jd=(e,t)=>{Gd[t]===e&&(Gd[t]=null)},Yd=e=>({x:e.containerPoint.x,y:e.containerPoint.y,lat:e.latlng.lat,lon:e.latlng.lng,source:`singleclick`}),Xd=e=>{let t=e.originalEvent&&e.originalEvent.target,n=t&&t.dataset;if(n&&n.poi){let e=n.poi;Kd.emit(`poi-${e}`,t)}else{let t=Yd(e),n=Gd.high||Gd.low||`click`;Kd.emit(n,t)}};var Zd=y({WindowPlugin:()=>Qd}),Qd=class extends Ud{constructor(e){var t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g;super(e),C(this,`window`,void 0),C(this,`isMounted`,void 0),C(this,`cssID`,void 0),C(this,`bottomSlide`,void 0),C(this,`cssInserted`,void 0),C(this,`title`,void 0),C(this,`addMobileSlider`,void 0),C(this,`router`,void 0),C(this,`path`,void 0),C(this,`useSEOurl`,void 0),C(this,`closeOnSwipeDown`,void 0),C(this,`closesOnSwipeRight`,void 0),C(this,`noCloseOnBackButton`,void 0),C(this,`interpolator`,void 0),C(this,`keyboard`,void 0),C(this,`closeOnClick`,void 0),C(this,`logUsage`,void 0),C(this,`noAnimation`,void 0),C(this,`className`,void 0),C(this,`attachPoint`,void 0),C(this,`singleclickPriority`,void 0),C(this,`noHeader`,void 0),C(this,`closingRequested`,void 0),this.ident=e.ident,this.addMobileSlider=(t=e.addMobileSlider)==null?this.addMobileSlider:t,this.closeOnSwipeDown=(n=e.closeOnSwipeDown)==null?this.closeOnSwipeDown:n,this.closesOnSwipeRight=(r=e.closesOnSwipeRight)==null?this.closesOnSwipeRight:r,this.logUsage=(i=e.logUsage)==null?!0:i,this.noCloseOnBackButton=e.noCloseOnBackButton,this.interpolator=e.interpolator,this.title=e.title,this.useSEOurl=(a=e.useSEOurl)==null?!1:a,this.router=(o=e.router)==null?this.router:o,this.path=(s=e.path)==null?typeof this.router==`string`?this.router:void 0:s,this.onRouteMatch=(c=e.onRouteMatch)==null?this.onRouteMatch:c,this.displayURLAndTitle=(l=e.displayURLAndTitle)==null?this.displayURLAndTitle:l,this.attachPoint=(u=e.attachPoint)==null?this.attachPoint:u,this.className=(e.className||``)+(e.noHeader?` no-header`:``),this.closeOnClick=(d=e.closeOnClick)==null?this.closeOnClick:d,this.keyboard=(f=e.keyboard)==null?this.keyboard:f,this.noAnimation=e.noAnimation,this.singleclickPriority=(p=e.singleclickPriority)==null?void 0:p,this.close=(m=e.close)==null?this.close:m,this.onopen=(h=e.onopen)==null?this.onopen:h,this.beforeLoad=(g=e.beforeLoad)==null?this.beforeLoad:g,this.cssID=`${Ud.iAm}-css-${this.ident}`}open({params:e,disableOpeningAnimation:t,qs:n}={}){e=this.beforeLoad(e),this.closingRequested=!1,this.logUsage&&Yl(`plugin`,this.ident);let r=()=>{this.closingRequested||(this.window||(this.window=this.createWindow()),this.isMounted||this.mount(),this.window.open({disableOpeningAnimation:t}),this.isOpen=!0,this.singleclickPriority&&qd(this.ident,this.singleclickPriority),setTimeout(()=>{P.emit(`pluginOpened`,this.ident)},50),this.onopen(e,n))};return this.isOpen?(this.onopen(e,n),Promise.resolve()):this.isLoaded?(r(),Promise.resolve()):((!this.loading||!this.promise)&&(this.promise=this.load(),this.promise.then(r)),this.promise)}close(e){if(this.isOpen){var t;(t=this.window)==null||t.close(e)}else this.loading&&(this.closingRequested=!0)}displayURLAndTitle(e){if(this.path){let t=this.title&&this.title in F?F[this.title]:this.title||null;t&&wh(t),Ch(this.ident,e,this.useSEOurl&&t?`-${Fi(t)}`:void 0)}}onopen(e,t){if(S&&this.disableMobilePicker&&P.emit(`rqstClose`,`picker-mobile`),this.displayURLAndTitle(e),`onopen`in this.plugin&&typeof this.plugin.onopen==`function`)try{var n,r;(n=(r=this.plugin).onopen)==null||n.call(r,e)}catch(e){console.error(`onopen method of plugin ${this.ident} failed:`,e)}}ondestroy(){if(this.isOpen=!1,this.path&&Eh(this.ident),this.singleclickPriority&&Jd(this.ident,this.singleclickPriority),`ondestroy`in this.plugin&&typeof this.plugin.ondestroy==`function`)return this.plugin.ondestroy()}beforeLoad(e){return e}onRouteMatch(e,t){return e}getPluginUrl(e){return this.path?this.path.replace(/\/:(\w+)(\?)?/g,(t,n,r)=>{let i=e&&e[n];return i==null?``:n===`lat`||n===`lon`?`/${E(i)}`:`/${i}`}):``}get node(){return this.window.node}createWindow(){return new Hr({bodyClass:`on${this.ident}`,ident:this.ident,keyboard:this.keyboard,className:this.className,attachPoint:this.attachPoint,closeOnClick:this.closeOnClick,noAnimation:this.noAnimation,html:``,htmlID:`${Ud.iAm}-${this.ident}`,onclose:()=>this.ondestroy(),onclosed:()=>this.unmount()})}getCss(){let{__css:e}=this.plugin;return e}initProperties(){super.initProperties(),this.addMobileSlider=!1,this.closeOnSwipeDown=!0,this.isMounted=!1}unmount(){var e,t;if((e=this.node)==null||(e=e.parentNode)==null||e.removeChild(this.node),this.cssInserted){let e=qt(`#${this.cssID}`);e&&document.head.removeChild(e),this.cssInserted=!1}this.isMounted=!1,(t=this.bottomSlide)==null||t.release(),x&&this.pane===`fullscreen-mobile`&&N.set(`suspendSoundAndHaptic`,!1),P.emit(`pluginClosed`,this.ident)}mountCss(){let e=this.getCss();e&&!this.cssInserted&&(document.head.insertAdjacentHTML(`beforeend`,`
7<style id="${this.cssID}">${e}</style>`),this.cssInserted=!0)}mount(){if(!this.plugin)throw Error(`Trying to mount, but plugin ${this.ident} not loaded`);this.mountCss(),this.window.mount(),this.isMounted=!0,this.onmounted()}onmounted(){if(this.addMobileSlider&&x&&this.node&&(this.node.insertAdjacentHTML(`beforeend`,`<div class="sliding-x"></div>`),this.bottomSlide=new Vd({el:qt(`.sliding-x`,this.node),pluginEl:this.node,pluginName:this.ident,closeOnSwipeDown:this.closeOnSwipeDown})),this.closesOnSwipeRight&&this.node&&new zd({el:this.node,threshold:100,onswipe:e=>{e===`right`&&this.close()}}),`onmount`in this.plugin&&typeof this.plugin.onmount==`function`){var e,t;let i={};((e=(t=this.node)==null?void 0:t.querySelectorAll(`[data-ref]`))==null?[]:e).forEach(e=>{e.dataset.ref&&(i[e.dataset.ref]=e)});try{var n,r;(n=(r=this.plugin).onmount)==null||n.call(r,this.node,i)}catch(e){this.unmount(),O(`WindowPlugin`,`Failed to mount ${this.ident} plugin`,e)}}x&&this.pane===`fullscreen-mobile`&&N.set(`suspendSoundAndHaptic`,!0)}},$d=y({SveltePlugin:()=>q}),q=class extends Qd{constructor(e){super(e),C(this,`svelteApp`,void 0),C(this,`resizable`,void 0),C(this,`onRenderStart`,e=>{super.onRenderStart(e),this.svelteApp&&`onRenderStart`in this.svelteApp&&this.svelteApp.onRenderStart(e)}),this.resizable=e.resizable}onopen(e,t){if(this.displayURLAndTitle(e),this.svelteApp&&this.svelteApp.onopen)try{this.svelteApp.onopen(e)}catch(e){console.error(`onopen method of plugin ${this.ident} failed:`,e)}}paramsChanged(e){super.paramsChanged(e),this.svelteApp&&`paramsChanged`in this.svelteApp&&this.svelteApp.paramsChanged(e)}mount(){this.mountCss(),this.window.mount();let e=this.node,t=qt(`.closing-x`,this.node),{default:n}=this.plugin,r={pluginRootElement:e,resizable:this.resizable?w(w({},this.resizable),{},{pluginIdent:this.ident}):void 0};this.svelteApp=new n({target:e,anchor:t,props:r}),this.isMounted=!0,this.onmounted()}unmount(){if(!this.node){O(`SveltePlugin`,`Trying to unmount non existent DOM element ${this.ident}`);return}if(this.svelteApp){var e;this.svelteApp.$destroy(),(e=this.node.parentNode)==null||e.removeChild(this.node),this.isMounted=!1,this.svelteApp=null}super.unmount()}},ef=class extends q{constructor(e){e.attachPoint=`[data-plugin="bottom-controls-${S?`mobile`:`desktop`}"]`,e.className=e.className||`plugin-bottom`,e.noCloseOnBackButton=!0,e.neverClose=!0,e.pane=`small-bottom`,e.noAnimation=!0,super(e)}},tf=class extends q{constructor(e){var t,n,r;e.attachPoint=(t=e.attachPoint)==null?`[data-plugin="startup-element"]`:t,e.className=(n=e.className)==null?`plugin-startup-element dark-content`:n,e.logUsage=(r=e.logUsage)==null?!1:r,super(e)}},nf=y({SveltePanePlugin:()=>J});const rf=x?`plugin-mobile-bottom-slide top-border`:`plugin-rhpane top-border`,af=x?`fullscreen-mobile`:`rhpane`;var J=class extends q{constructor(e){var t,n,r,i,a,o;e.className=((t=e.className)==null?rf:t)+(e.usesLightContent?``:` dark-content`),e.pane=(n=e.pane)==null?af:n,e.keyboard=(r=e.keyboard)==null?!0:r,e.addMobileSlider=(i=e.addMobileSlider)==null?!0:i,e.closeOnSwipeDown=(a=e.closeOnSwipeDown)==null?!0:a,e.closesOnSwipeRight=(o=e.closesOnSwipeRight)==null?Le:o,super(e),C(this,`usesLightContent`,void 0)}};const of=x?`plugin-mobile-bottom-slide top-border dark-content`:`plugin-popup dark-content plugin-popup--with-background`;var sf=class extends q{constructor(e){var t,n,r,i;e.className=(t=e.className)==null?of:t,e.pane=(n=e.pane)==null?`center`:n,e.keyboard=(r=e.keyboard)==null?!0:r,e.addMobileSlider=(i=e.addMobileSlider)==null?x:i,super(e)}},cf=y({TagPlugin:()=>lf}),lf=class extends Qd{},uf=y({loadAndMergeSettingFromCloud:()=>yf,storeSettings:()=>vf});let df=M.get(`storedSettings`)||0;const ff=e=>`settings_${e}`,pf=e=>`${ff(e)}_ts`,mf=e=>!!(e in j&&typeof j[e]==`object`&&j[e].sync),hf=e=>+(j[e].update||M.get(`settings_${e}_ts`)||0),gf=()=>{let e={},t=0;for(let n in j){let r=n;if(mf(r)){let n=hf(r);n>df&&(e[ff(r)]=N.get(r,{forceGet:!0}),e[pf(r)]=n,t=Math.max(t,n))}}return{toStore:e,updated:t}};function _f(e){for(let t in j){let n=t;if(mf(n)&&ff(n)in e){let t=pf(n),r=e[t],i=M.get(t);if(!i||i<r){let t=e[ff(n)];t===null?N.remove(n,{doNotCheckValidity:!0,doNotSaveToCloud:!0}):N.set(n,t,{update:r,doNotSaveToCloud:!0})}}}}async function vf(){let{toStore:e,updated:t}=gf();if(!t)return!0;try{let{status:n}=await ci(`/users/settings`,{data:{version:4,data:e,storeTs:t}});
7return n<300?(df=t,M.put(`storedSettings`,t),!0):(O(`settings`,`Cant save settings to the cloud. Status code ${n}`),!1)}catch(e){return O(`settings`,`Cant save settings to the cloud`,e),!1}}async function yf(){try{let{status:e,data:t}=await I(`/users/settings?storeTs=${df}`);return(M.get(`lastSyncableUpdatedItem`)||0)>df&&vf(),e===304||e===204?!1:(t&&t.data&&t.version>1&&(_f(t.data),t.storeTs>df&&(df=t.storeTs,M.put(`storedSettings`,t.storeTs))),!0)}catch(e){return O(`settings`,`Cant load/merge settings from cloud`,e),!1}}const bf=St(vf,2e3);N.on(`_cloudSync`,bf);var xf=y({deactivateCurrentDevice:()=>wf,saveCurrentDevice:()=>Tf});const Sf=async e=>{N.get(`user`)&&await li(`/users/v3/devices/${e.deviceID}`,{data:e})},Cf=()=>{let{width:e,height:t}=window.screen,n=N.get(`country`),r=N.get(`subscription`);return{deviceID:ar(),platform:_e,target:ge,version:he,cc:n,subscription:r,screen:{width:e,height:t,devicePixelRatio:window.devicePixelRatio}}},wf=async()=>{let e=Cf();e.deactivated=!0,await Sf(e),N.remove(`pushNotificationsReady`)},Tf=async e=>{await Sf(Cf()),e&&N.set(`pushNotificationsReady`,!0)};var Ef=y({getLocationEntity:()=>Of,sendTestNotification:()=>Af,upsertLocationEntity:()=>kf});const Df=`/notif/v1/locations`;async function Of(e){return(await I(`${Df}/${e}`,{cache:!1})).data}async function kf(e,t,n){return(await ui(`${Df}/${e}`,w(w({},n),{},{data:t}))).data}async function Af(e){await I(`${Df}/${e}/testNotification`,{cache:!1})}var jf=y({isForecastAlert:()=>Mf,isLiveAlert:()=>Nf,normalizeAlertType:()=>Pf});function Mf(e){return e.type===`forecast`}function Nf(e){return e.type===`live`}function Pf(e){return e.type?e:w(w({},e),{},{type:`forecast`})}var Ff=y({add:()=>qf,createAlert:()=>Hf,deleteAlert:()=>Wf,getAlert:()=>Vf,getAlertTimestamps:()=>Rf,getAlerts:()=>Bf,getNearAlert:()=>Gf,getNearAlerts:()=>Kf,updateAlert:()=>Uf,userHasAnyAlerts:()=>Jf});let If=!1;setInterval(()=>{If=!1},30*rt);const Lf=()=>P.emit(`alertChanged`);async function Rf(e){let{data:t}=await I(`/users/v4/alerts/${e}/timestamps`,{ttl:rt});return t}async function zf(){Gp()&&(await to.loadFromCloud(),If=!0,Lf())}async function Bf(){return Gp()?(If||await zf(),(await to.getAll()).map(Pf)):[]}async function Vf(e){If||await zf();let t=await to.get(e);return t?Pf(t):null}async function Hf(e){await to.add(e),Lf()}async function Uf(e){return await to.put(e.id,e),Lf(),e}async function Wf(e){await to.remove(e),Lf()}async function Gf(e){return(await Kf(e)).at(0)}async function Kf(e){var t;return(t=(await Bf()).filter(t=>At(t,e)))==null?[]:t}function qf(e){let t=w({action:`new`},e);Gp()?P.emit(`rqstOpen`,`alerts-edit`,t):nm({action:`alerts-edit`,params:t})}async function Jf(){return(await Bf()).length>0}var Yf=y({canReceiveNotifications:()=>tp,deleteAllNotifications:()=>ip,loadNotifications:()=>np,markNotificationAsReceived:()=>sp,markNotificationAsSeen:()=>op,sendTestNotification:()=>cp,watchChanges:()=>rp});const Xf=Kt(`PushNotifications`),Zf=Kt(`LocalNotifications`),Qf=`/notif/v1/notifications`;let $f=!1,ep;const tp=new Promise(e=>{ep=e});async function np(){let{data:{newCount:e}}=await I(Qf,{cache:!1});N.set(`badgeNumber`,e)}function rp(){$f||($f=!0,ep(),setInterval(np,rt),np())}async function ip(){await si(Qf),await ap()}async function ap(){if(N.set(`badgeNumber`,0),Xf&&Xf.removeAllDeliveredNotifications(),Zf){let e=await Zf.getPending();e&&e.notifications&&e.notifications.length&&Zf.cancel(e)}}function op(e){return ci(`/notif/v1/interactions/opened`,{data:e})}function sp(e){return ci(`/notif/v1/interactions/received`,{data:e})}function cp(e,t,n){ci(`/notif/v1/notifications/send-test`,{data:{registrationHash:t,notificationType:e,deviceID:n}}).then(e=>{console.log(`Sending test notification`,JSON.stringify(e))}).catch(e=>console.error(JSON.stringify(e)))}setTimeout(()=>{P.once(`alertChanged`,async()=>!$f&&await Jf()&&rp())},3e3);var lp=y({registerDevice:()=>up});const up=async()=>null;var dp=y({checkConsent:()=>gp,setExplicitConsent:()=>mp});const fp=()=>{let e=N.get(`consent`),t=e?(Date.now()-e.timestamp)/it:0,n=e&&e.explicit===!1,r=e&&(!e.analytics&&t>=90||e.analytics&&t>=365);(n||r)&&(N.remove(`consent`),e=null),!e&&!Gp()&&P.emit(`rqstOpen`,`consent`)},pp=`2023/11`,mp=e=>{N.set(`consent`,{version:pp,timestamp:Date.now(),analytics:e,explicit:!0})},hp=()=>{N.set(`consent`,{version:pp,timestamp:Date.now(),analytics:!0,explicit:!1})},gp=e=>{e!=null&&e.requiresCookieConsent?(N.set(`analyticsConsentRequired`,!0),fp()):(N.set(`analyticsConsentRequired`,!1),N.get(`consent`)||hp())};var _p=y({get:()=>vp});const vp=({lat:e,lon:t},n)=>{let r=N.get(`usedLang`),i=n||Q.getZoom();return new Promise(n=>{I(`/reverse/v3/${E(e)}/${E(t)}/${i}?lang=${r}`,{ttl:1e3*60*60*24}).then(({data:i})=>{let{locality:a,suburb:o,city:s,county:c,district:l,state:u,country:d,island:f,country_code:p}=i,m=c||l||u||``,h=o||a,g=h&&s&&h!==s?`${h}, ${s}`:h||o||s||f||m||u&&`${u}, ${d}`||d;n({lat:e,lon:t,lang:r,region:m,country:d||``,cc:p,name:g||kg(e,t),nameValid:!!g})}).catch(i=>{n({lat:e,lon:t,lang:r,name:kg(e,t)})})})};var yp=y({add:()=>Sp,emitChange:()=>xp,enhanceWithCountryCode:()=>Np,find:()=>Dp,findOne:()=>Op,getAll:()=>kp,hasKey:()=>Mp,isFav:()=>Ap,remove:()=>wp,toggle:()=>jp,togglePin:()=>Tp,update:()=>Cp});const bp=e=>{let{type:t,title:n}=e;return!!(gt(e)&&n.length>0&&(t===`fav`||t===`airport`&&typeof e.icao==`string`||t===`station`&&typeof e.stationId==`string`||t===`webcam`&&typeof e.webcamId==`number`||t===`route`&&typeof e.route==`string`))},xp=()=>P.emit(`favChanged`),Sp=async e=>{if(!bp(e))return O(`userFavs`,`Trying to insert invalid fav item: ${JSON.stringify(e)}`),null;if(!Gp())return nm({action:`addFav`,params:e}),null;let t=await $a.add(e);return xp(),t},Cp=async(e,t)=>{let n=await $a.get(e);if(n){let r=Date.now(),i=w(w(w({},n),t),{},{updated:r});return await $a.put(e,i),xp(),e}else return null},wp=async e=>{await $a.remove(e),xp()},Tp=async(e,t,n)=>{if(!Gp()){nm();return}let r=await $a.get(e);r&&(n?await Cp(e,{[t]:n}):await Cp(e,{[t]:r[t]?null:Date.now()}))},Ep=e=>gt(e)?t=>At(e,t)&&t.type===`fav`:t=>{for(let n in e)if(e[n]!=t[n])return!1;return!0},Dp=async e=>{let t=await $a.getAll(),n=typeof e==`function`?e:Ep(e);return t.filter(n)},Op=async e=>{let t=await $a.getAll(),n=typeof e==`function`?e:Ep(e);return t.find(n)},kp=async()=>Gp()?await $a.getAll():[],Ap=async e=>{let t=await $a.getAll(),n=Ep(e);return t.some(n)},jp=async(e,t)=>await Ap(e)?(await wp((await Dp(e))[0].id),!1):(await Sp(t),!0),Mp=async e=>$a.hasKey(e),Np=async e=>{if(e.cc)return e;try{let{lat:t,lon:n,id:r}=e,{cc:i}=await vp({lat:t,lon:n},14),a=i||`xx`;return await Cp(r,{cc:a}),e.cc=a,e}catch(t){return console.error(`Error enhancing fav with country code: ${t}`),e}},Pp=async()=>{let e=(await $a.getAll()).filter(e=>{var t;return e.type===`station`&&((t=e.stationId)==null?void 0:t.startsWith(`radiation-`))});for(let t of e)await $a.remove(t.id);e.length>0&&xp()};P.on(`dependenciesResolved`,async()=>{await em()&&(await $a.loadFromCloud(),xp(),await Pp())});var Fp=y({appsFlyer:()=>null,appsFlyerPromise:()=>Ip,logAppsFlyerProductChange:()=>Rp,withAppsFlyer:()=>Lp});const Ip=Promise.resolve();async function Lp(e){}function Rp(){}const zp=()=>
7{if(N.get(`startUp`)===`last`){let e=N.get(`mapCoords`);e&&N.set(`startUpLastPosition`,e)}},Bp=()=>{if(N.get(`startUpLastOverlay`)){let e=N.get(`overlay`);N.set(`startUpOverlay`,e)}},Vp=()=>{if(N.get(`startUpLastOverlay`)){let e=N.get(`product`);N.set(`startUpLastProduct`,e)}},Hp=()=>{N.set(`lastTimezoneOffset`,new Date().getTimezoneOffset(),{forceChange:!0});let e=()=>{let t=N.get(`notifications`);t!==null&&(t.usedTimezoneName=Intl.DateTimeFormat().resolvedOptions().timeZone,N.off(`notifications`,e),N.set(`notifications`,t,{forceChange:!0}))};e(),N.on(`notifications`,e)},Up=()=>{zp(),Bp(),Vp()};N.set(`sessionCounter`,N.get(`sessionCounter`)+1),window.addEventListener(`beforeunload`,Up),window.addEventListener(`visibilitychange`,Up);var Wp=y({checkAuth:()=>lm,emptyAvatar:()=>qp,getAvatar:()=>Jp,getEmail:()=>Yp,getInfo:()=>Kp,getUserId:()=>Qp,getUsername:()=>Zp,handleLoginResponse:()=>pm,isEmailVerified:()=>Xp,isLoggedIn:()=>Gp,isLoggedInPromise:()=>em,login:()=>nm,logout:()=>om,register:()=>rm,reloadInfo:()=>um,showUnverifiedEmailBanner:()=>fm});const Gp=()=>!!N.get(`user`),Kp=()=>N.get(`user`),qp=`https://www.windy.com/img/avatar.jpg`,Jp=()=>{let e=N.get(`user`);return e&&e.avatar||qp},Yp=()=>{let e=N.get(`user`);return e&&e.email||``},Xp=()=>{let e=Kp();return!!(e&&e.email&&e.email===e.verifiedEmail)},Zp=()=>{let e=N.get(`user`);return e&&e.username||``},Qp=()=>{var e;let t=Kp();return(e=t==null?void 0:t.id)==null?0:e};let $p=!1;const em=()=>new Promise(e=>{N.get(`user`)?e(!0):$p?e(!1):N.once(`user`,t=>e(!!t))}),tm=e=>e.split(``).map(e=>String.fromCodePoint(255-e.charCodeAt(0))).join(``),nm=e=>{if(e){let t=Date.now();N.set(`loginAndFinishAction`,w({updated:t},e))}P.emit(`rqstOpen`,`login`)},rm=()=>P.emit(`rqstOpen`,`login`,{reason:`register`}),im=()=>I(`https://account.windy.com/api/logout`,{cache:!1}),am=new BroadcastChannel(`windy-user-change`);am.onmessage=e=>{console.log(`Reloading due to ${e.data} in another tab`),window.document.location.reload()};const om=async()=>{N.off(`subscription`,su);try{await wf()}catch(e){O(`user`,`Error while deactivating device:`,e)}try{await vf()}catch(e){O(`user`,`Error while storing settings:`,e)}try{await im()}catch(e){O(`user`,`Error while deactivating device and cloud sync:`,e)}nu(null),N.remove(`user`),N.remove(`userToken`),N.remove(`consent`),N.remove(`failedSubscriptionPayment`),M.remove(`unverifiedEmailBannerDismissedTs`);try{await uo()}catch(e){O(`user`,`Error while clearing IndexedDB:`,e)}Xl(`logout`),setTimeout(()=>{window.location.reload(!0),am.postMessage(`logout`)})},sm=()=>{let e=N.get(`loginAndFinishAction`);if(e){let{updated:t,action:n,params:r}=e;if(N.remove(`loginAndFinishAction`),Date.now()-t<5*6e4)switch(n){case`addFav`:Sp(r);break;case`alerts-edit`:case`favs`:case`uploader`:case`external-plugins`:case`colors`:P.emit(`rqstOpen`,n,r);break;case`openExternalPlugin`:P.emit(`rqstOpen`,r.name,r.openParams);break}return Xl(`login-finish-action`,n),!0}else return!1},cm=()=>{let e=S?`favOverlaysMobile`:`favOverlaysDesktop`,t=N.get(e);if(t&&t.some(e=>we.includes(e))){let n=t.filter(e=>we.includes(e));N.set(e,n)}},lm=async(e,t)=>{if(e.token&&N.set(`userToken`,e.token),e!=null&&e.auth){let{subscriptionInfo:n,userInfo:r}=e;nu(n==null?null:n),N.set(`user`,r),$p=!0,await yf(),Hp(),!sm()&&t?gp(e.userInfo):su();let i=await Jf();return await Tf(i?await up():null),i&&rp(),cm(),t&&fm(),Xl(`user-logged`),!0}else return t&&gp(e.userInfo),N.remove(`user`),nu(null),Xl(`user-logged`,`out`),!1},um=async()=>{let e=N.get(`country`);e===`xx`&&N.once(`country`,e=>{e!==`xx`&&um()});let t=zl(tm(atob(`npyckIqRi9CWkZmQ`))),n={};try{let r=await I(`https://account.windy.com/api/info`,{cache:!1,qs:{country:e},customHeaders:w({[tm(atob(`iJaRm4bSnIyNmQ==`))]:btoa(tm(`${t.code}?${t.reqQs}`))},n)});return await lm(r.data,!0)?r:null}catch(e){N.get(`connection`)&&(await mn(200),N.get(`connection`)&&(O(`user`,`Cannot load user info:`,e),await qr({type:`error`,html:`Failed to retrieve account info.`,timeout:5e3})));let t=N.get(`subscription`);return t&&tu(t),null}},dm=()=>{let e=`https://account.windy.com/email/verify-code?${Ht({purpose:`mobile`,authHash:N.get(`authHash`),deviceId:ar(),ver:he,platform:_e,lang:N.get(`usedLang`),userId:Qp()})}`;window.open(e,`_blank`),window.addEventListener(`focus`,()=>void um(),{once:!0})};function fm(){let e=Yp();if(!e||Xp())return;let t=M.get(`unverifiedEmailBannerDismissedTs`);t&&Date.now()-t<6048e5||(M.put(`unverifiedEmailBannerDismissedTs`,Date.now()),qr({type:`warning`,html:Tt(F.NOTIF_VERIFY_EMAIL_BANNER,{email:rn(e)}
7),hideClosingX:!0,buttons:[{label:F.NOTIF_VERIFY_NOW,onclick:dm,closeOnClick:!0,primary:!0},{label:F.NOTIF_NOT_NOW,closeOnClick:!0,primary:!0}]}))}const pm=async(e,t)=>{if(!e)return;let{status:n,data:r}=e;if(n!==200||!(r!=null&&r.userInfo)){O(`user`,`Login failed, status=${n}, userInfo=${JSON.stringify(r==null?void 0:r.userInfo)}`);return}let{userInfo:i,authHash:a}=r,o=await lm(i,!1);o?(P.emit(`rqstClose`,`login`),await qr({type:`success`,html:F.MSG_LOGIN_SUCCESFULL,timeout:3e3})):O(`user`,`Login failed, auth=${o}`),am.postMessage(o?`login`:`logout`)};um();const mm=`v3.0`,hm=async e=>K[e].getRefTimeISOFormat(),gm=async(e,{lat:t,lon:n})=>{let r=await hm(e);return`/forecast/point/now/${e}/v1.0/${E(t)}/${E(n)}?refTime=${r}`},_m=e=>e?Object.entries(e).filter(e=>e[1]).map(e=>e[0]).join(`,`):void 0,vm=async(e,{lat:t,lon:n,step:r,days:i,interpolate:a,source:o,extended:s},c={header:!0,celestial:!0,summary:!0,debug:!1},l)=>{let u=await hm(e),d=c===null?void 0:_m(c),f=i&&ru()?i:s?7:5,p=/^cams/.test(e)?`airq`:`point`,m=Ht({days:f,source:o,refTime:u,step:r,interpolate:a,include:d});return I(`/forecast/${p}/${e}/${mm}/${E(t)}/${E(n)}?${m}`,l)},ym=e=>{let{model:t,lat:n,lon:r,display:i,days:a,step:o,extended:s}=e,c={header:!0,celestial:!0,summary:!0,meteogram:i===`meteogram`,airgram:i===`airgram`,debug:!1};return vm(t,{lat:n,lon:r,step:ru()&&i===`meteogram`?1:o,source:`detail`,days:a,extended:s},c)},bm=async({lat:e,lon:t,days:n,source:r},i={header:!0,summary:!0,debug:!1},a=jd(),o)=>{let s=Ht({days:n,source:r,refTime:await hm(a),include:i===null?void 0:_m(i)});return I(`/forecast/fragment/${a}/${mm}/${E(e)}/${E(t)}?${s}`,o)},xm=async(e,t,n,r=`station`,i)=>{let a={source:r,archiveHours:(t>10?10:t)*24};try{let{data:t}=await I(`/forecast/archive/${e}/${mm}/${E(n.lat)}/${E(n.lon)}`,{qs:a,abortSignal:i});return t.data}catch(e){return console.error(e),null}},Sm=(e,t)=>`/webcams/v2.0/detail/${e}?${Ht({imageSize:t,lang:N.get(`usedLang`)})}`,Cm=({lat:e,lon:t,limit:n},r=`preview`)=>`/webcams/v2.0/list?${Ht({nearby:`${E(e)},${E(t)}`,lang:N.get(`usedLang`),limit:n,imageSize:r})}`,wm=(e,t,n)=>`/webcams/v3.0/archive/${e}?${Ht({imageSize:t,archiveType:n})}`,Tm=e=>`/webcams/v2.0/archive/hourly/${e}`,Em=e=>`/webcams/ping/${e}`;var Dm=y({getArticle:()=>Ym,getCapAlertsSummary:()=>Fm,getCitytileData:()=>km,getDetailPointForecastData:()=>ym,getElevation:()=>Wm,getHurricanesCount:()=>Im,getHurricanesList:()=>Um,getLatestJson:()=>Qm,getLiveAlerts:()=>Km,getMeteogramForecastData:()=>Om,getNearestPoiItemsUrl:()=>Am,getNowPointForecastUrl:()=>gm,getObservationPoiUrl:()=>Pm,getObservationsUrl:()=>Nm,getPointForecastData:()=>vm,getPointForecastFragmentData:()=>bm,getPromo:()=>Xm,getRadarArchiveInfo:()=>Vm,getRadarCoverage:()=>Hm,getRadarInfo:()=>Bm,getRadarSatImageUrl:()=>qm,getReftimeIso:()=>hm,getSatelliteArchiveRangeInfo:()=>zm,getSatelliteCompositeInfo:()=>Rm,getStaticMapImageUrl:()=>Gm,getTideForecastUrl:()=>jm,getTidePoiUrl:()=>Mm,getTimezoneInfo:()=>Zm,getWebcamArchiveUrl:()=>wm,getWebcamDetailUrl:()=>Sm,getWebcamHourlyArchiveUrl:()=>Tm,getWebcamMetricsUrl:()=>Em,getWebcamsListUrl:()=>Cm,loadForecastArchive:()=>xm});const Om=async(e,{lat:t,lon:n,step:r},i,a)=>{let o=await hm(e),s=Ht(w(w({},i),{},{refTime:o,step:r}));return I(`/forecast/meteogram/${e}/v1.2/${E(t)}/${E(n)}?${s}`,a)},km=async(e,t)=>{let n=K[e];if(!n)return Promise.resolve(null);let{modelIdent:r,calendar:i}=n;if(!r)return Promise.resolve(null);let a=await hm(e);if(!a)return Promise.resolve(null);let o={labelsVersion:`v2.1`,step:ru()?1:3,refTime:a,hours:i==null?void 0:i.calendarHours};return I(`/citytile/v1.0/${r}/${t}`,{qs:o})},Am=(e,{lat:t,lon:n},r)=>`/pois/v2/${e}/${E(t)}/${E(n)}${r?`?`+Ht(r):``}`,jm=({lat:e,lon:t})=>`/tides/v1.0/tides/${E(e)}/${E(t)}`,Mm=e=>`/tides/v1.0/tides/${e}`,Nm=(e,t,n,r=1)=>`/obs/measurement/v3/${e}/${t}/${n}/${r}`,Pm=(e,t)=>`/pois/v2/${e}/${t}`,Fm=({lat:e,lon:t},n=`hp`)=>I(`/capalerts/${E(e)}/${E(t)}`,{qs:{source:n,lang:N.get(`usedLang`),maxCount:6}}),Im=()=>I(`/tc/v2/storms/active/count`),Lm=()=>`noCacheFragment=${new Date().toISOString().replace(/.*T(\d+):(\d+).*/,`$1$2`)}`,Rm=()=>I(`https://sat.windy.com/satellite/composite.json?${Lm()}`),zm=()=>I(`https://sat.windy.com/satellite/archive/range.json?${Lm()}`),Bm=()=>I(`https://rdr.windy.com/radar2/composite/minifest2.json?${Lm()}`),Vm=()=>I(`https://rdr.windy.com/radar2/archive/composite/minifest2.json?${Lm()}`),Hm=()=>I(`https://rdr.windy.com/radar2/composite/coverage.json`),Um=()=>
7I(`/tc/v2/storms`),Wm=(e,t,n)=>I(`/services/elevation/${E(e)}/${E(t)}`,n),Gm=e=>`https://node-s.windy.com/imaker/map${e.bounds?`?bbox=${e.bounds}`:`?c=${e.lat},${e.lon}&z=${e.zoom}&size=${e.size}`}`,Km=({lat:e,lon:t})=>{let n=N.get(`usedLang`),r=z.distance.metric;return I(`/notif/v1/live-alerts/${E(e)}/${E(t)}`,{qs:{distance:r,userLanguage:n}})},qm=(e,{lat:t,lon:n,w:r,h:i,format:a,satMode:o,radarMode:s})=>{let c=Ht({lat:t,lon:n,w:r,h:i,format:a});return`https://node.windy.com/widget/${e}/${e===`satellite`?o||`blue`:s||`default`}/image?${c}`},Jm=({lat:e,lon:t})=>{let n=ru()?`premium`:`free`,r=Gp()?`signed-in`:`signed-out`,i=N.get(`userInterests`),a={language:N.get(`usedLang`),country:N.get(`country`),target:`index`,device:ve,version:`51.2.1`,platform:_e,lat:e,lon:t,userStatus:n,loginStatus:r};return i.length>0&&(a.userInterests=i.join(`,`)),a},Ym=async e=>I(`/articles/startup/article`,{qs:Jm(e)}),Xm=async(e,t)=>I(`/articles/startup/promotion`,{qs:w(w({},Jm(e)),{},{forceId:t})}),Zm=(e,t)=>I(`/services/v1/timezone/${E(e.lat)}/${E(e.lon)}?ts=${t}`),Qm=()=>null,Y={"gl-particles":new Ud({ident:`gl-particles`}),isolines:new Ud({ident:`isolines`}),accumulations:new ef({langFiles:[`accumulations`],ident:`accumulations`,logUsage:!1}),"levels-range":new ef({ident:`levels-range`,logUsage:!1}),"fire-danger":new ef({ident:`fire-danger`,logUsage:!1}),"day-switcher":new ef({ident:`day-switcher`,logUsage:!1}),"cap-alerts":new ef({ident:`cap-alerts`,singleclickPriority:S?void 0:`low`,logUsage:!1}),"avalanche-danger":new ef({ident:`avalanche-danger`,singleclickPriority:S?void 0:`low`,logUsage:!1}),"radar-plus":new q({ident:`radar-plus`,langFiles:[`radsat`],attachPoint:S?`[data-plugin="bottom-controls-mobile"]`:`[data-plugin="bottom-controls-desktop"]`,displayURLAndTitle:()=>{},beforeLoad(e){return Vm(),Bm(),Rm(),zm(),e}}),detail:new q({ident:`detail`,className:S?`plugin-mobile-bottom-red`:`plugin-desktop-bottom`,pane:`bottom`,attachPoint:S?b:`[data-plugin="bottom-pane"]`,singleclickPriority:S?void 0:`high`,disableMobilePicker:!0,langFiles:[`detail`],beforeLoad(e){if((N.get(`detailDebugMode`)||N.get(`sessionCounter`)>3&&N.get(`userSelectedPointFcstModel`)===null)&&P.emit(`rqstOpen`,`default-model-selector`,e),N.get(`detailDefaultEnabled`)||N.get(`detailRememberLast`))return e;let{lat:t,lon:n,product:r,display:i}=e,a=r||jd(),o=i||Je.pointFcstDisplay;return e.preloadedData={lat:t,lon:n,display:o,model:a,promise:ym({model:a,lat:t,lon:n,display:o,days:7,step:3})},e},path:`/:lat/:lon/:model?/:display?`,router:(()=>{let e=Object.keys(K).sort((e,t)=>t.length-e.length).join(`|`);return RegExp(`^\\/(?<lat>-?\\d+\\.\\d+)/(?<lon>-?\\d+\\.\\d+)(\\/(?<product>(${e})))?(\\/(?<display>(table|meteogram|airgram|waves|wind|airq)))?`)})(),onRouteMatch:(e,t)=>{var n;let r=t==null||(n=t.model)==null?void 0:n.split(`:`)[1],i=r in K?r:void 0,a=t!=null&&t.hrTimestamps?t==null?void 0:t.hrTimestamps.split(`,`).map(e=>e*T):void 0,o=parseFloat(e.lat),s=parseFloat(e.lon);return w(w({},e),{},{lat:o,lon:s,timestamps:a,name:t==null?void 0:t.name,moveToTimestamp:!!(t!=null&&t.moveToTimestamp),product:i==null?e.product:i})}}),station:new q({ident:`station`,pane:`bottom`,disableMobilePicker:!0,addMobileSlider:!!S,closeOnSwipeDown:!0,langFiles:[`station`],className:S?`plugin-mobile-bottom-red`:`plugin-desktop-bottom`,attachPoint:S?b:`[data-plugin="bottom-pane"]`,router:RegExp(`\\/station\\/(?<id>[^/]+)(\\/(?<view>(basic|wind|compare)))?`,`g`),path:`/station/:id/:view?`}),"nearest-stations":new q({ident:`nearest-stations`,attachPoint:`[data-plugin="nearest-stations"]`,className:`drop-down-window left boxshadow dark-content`,pane:`nearest`}),"nearest-webcams":new q({ident:`nearest-webcams`,attachPoint:`[data-plugin="nearest-webcams"]`,className:`boxshadow dark-content`,langFiles:[`webcams`],pane:`nearest`}),"nearest-webcams-mobile":new q({ident:`nearest-webcams-mobile`,className:`plugin-mobile-bottom-slide top-border auto-height dark-content`,addMobileSlider:!0,noHeader:!0,closeOnSwipeDown:!0,langFiles:[`webcams`],pane:`nearest`}),"rhpane-top":new q({ident:`rhpane-top`,neverClose:!0,logUsage:!1,attachPoint:`[data-
7plugin="rhpane-top"]`}),rhbottom:new q({ident:`rhbottom`,neverClose:!0,logUsage:!1,attachPoint:`[data-plugin="rhbottom"]`,langFiles:[`menu`]}),"poi-libs":new lf({ident:`poi-libs`}),sounding:new J({ident:`sounding`,langFiles:[`sounding`],title:`SOUNDING`,disableMobilePicker:!0,addMobileSlider:!1,singleclickPriority:`high`,className:x?`plugin-mobile-bottom-red`:`plugin-rhpane top-border`,pane:x?`bottom`:`rhpane`,router:`/sounding/:lat/:lon`}),radiosonde:new J({ident:`radiosonde`,langFiles:[`sounding`],title:`RADIOSONDE`,disableMobilePicker:!0,addMobileSlider:!0,className:x?`plugin-mobile-bottom-red`:`plugin-rhpane top-border`,pane:x?`bottom`:`rhpane`,router:`/radiosonde/:id`}),articles:new J({ident:`articles`,title:`MENU_NEWS`,langFiles:[`articles`],disableMobilePicker:!0,noHeader:!0,closeOnSwipeDown:!1,router:`/articles/:id?`}),settings:new J({ident:`settings`,langFiles:[`settings`,`notifications`],title:`MENU_SETTINGS`,router:`/settings`,useSEOurl:!0}),favs:new J({ident:`favs`,langFiles:[`favs`,`notifications`],title:`MY_FAVS`,closeOnSwipeDown:!1,router:`/favs`,useSEOurl:!0}),"alerts-edit":new J({ident:`alerts-edit`,langFiles:[`alerts`,`livealerts`,`notifications`,`onboarding`],title:`EDIT_ALERT`,closeOnSwipeDown:!1,closesOnSwipeRight:!1,router:`/alerts-edit/:id?`}),alerts:new J({ident:`alerts`,langFiles:[`notifications`,`alerts`,`favs`,`livealerts`],title:`MY_ALERTS`,closeOnSwipeDown:!1,router:/^\/alerts(?:\/\S+)?/,path:`/alerts`,useSEOurl:!0}),colors:new J({ident:`colors`,title:`S_COLORS`,closeOnSwipeDown:!1,router:`/colors`}),hurricanes:new J({ident:`hurricanes`,langFiles:[`hurricanes`],title:`HURR_TRACKER`,attachPoint:S?`[data-plugin="bottom-below-controls-mobile"]`:b,className:S?`plugin-mobile-bottom-small`:`plugin-rhpane top-border`,pane:S?`small-bottom-bottom`:`rhpane`,disableMobilePicker:!0,useSEOurl:!0,router:`/hurricanes/:id?`}),debug:new J({ident:`debug`,router:`/debug`,resizable:{min:300,max:800,initialWidth:400}}),info:new J({ident:`info`,langFiles:[`info`,`products`],title:`ABOUT_DATA`,router:`/info`}),"cap-alerts-detail":new J({ident:`cap-alerts-detail`,title:`WX_WARNINGS`,router:`/cap-alert/:lat/:lon`}),"avalanche-danger-detail":new J({ident:`avalanche-danger-detail`,title:`Avalanche Bulletin`,router:`/avalanche-bulletin/:regionId`}),menu:new q({ident:`menu`,keyboard:!0,closesOnSwipeRight:!0,className:`plugin-rhpane dark-content top-border`,langFiles:[`menu`,`menudesc`,`products`],pane:`rhpane`,title:`MENU`,router:/^\/(menu|overlays|tools|pois|live)$/,path:`/menu`,useSEOurl:!0,beforeLoad(e){return Im(),e}}),airport:new J({ident:`airport`,langFiles:[`webcams`,`airport`],closeOnSwipeDown:!1,closesOnSwipeRight:!1,router:RegExp(`^\\/((airport\\/(?<id>\\S+))|(?<icao>[a-zA-Z]{4}))$`,``),onRouteMatch:e=>{var t;return{id:(t=e.id)==null?e.icao:t}},path:`/airport/:id`}),share:new q({ident:`share`,noHeader:!0,className:x?`plugin-mobile-bottom-slide top-border auto-height fg-gray`:`plugin-popup`}),"report-issue":new J({ident:`report-issue`,langFiles:[`reportissue`],title:`REPORT_ISSUE`,router:`/report-issue`}),multimodel:new q({ident:`multimodel`,className:x?`plugin-mobile-bottom-slide top-border dark-content`:`dark-content`,addMobileSlider:!0,router:`/multimodel/:lat/:lon`,langFiles:[`detail`]}),login:new sf({ident:`login`,langFiles:[`register`],router:RegExp(`^\\/(?<reason>register|login)$`,``),path:`/:reason?`}),rplanner:new q({ident:`rplanner`,pane:`bottom`,className:S?`detail plugin-mobile-bottom-red`:`detail plugin-desktop-bottom`,disableMobilePicker:!0,singleclickPriority:S?void 0:`high`,attachPoint:S?b:`[data-plugin="bottom-pane"]`,title:`RPLANNER`,langFiles:[`distance`],keyboard:!0,path:`/route-planner/:view?/:coords?/:id?`,router:RegExp(`^\\/(?:distance|route-planner)\\/?(?<view>vfr|ifr|car|boat|airgram|elevation)?\\/?(?<coords>[^/]+)(?:\\/id:(?<id>\\S+))?`,``)}),upload:new q({ident:`upload`,router:S?RegExp(`^\\/(?:upload|uploader)\\/(?<id>\\S+)$`,``):`/upload/:id`,path:`/upload/:id`,pane:S?`small-bottom-bottom`:void 0,className:S?`plugin-mobile-bottom-small`:`top-border`,attachPoint:S?`[data-plugin="bottom-below-controls-mobile"]`:b}),uploader:new J({ident:`uploader`,title:`Upload KML, GPX or geoJSON file`,router:`/uploader/:id?`}
7),subscription:new sf({ident:`subscription`,noHeader:!0,langFiles:[`subscription`],title:`SUBSCRIPTION`,onclosed(){P.emit(`checkPendingSubscriptions`)},router:`/subscription`,onRouteMatch:()=>({subsSource:`url`})}),"default-model-selector":new sf({ident:`default-model-selector`,langFiles:[`defaultmodelselector`],noHeader:!0,addMobileSlider:!1}),"pending-subscription":new q({ident:`pending-subscription`,langFiles:[`subscription`],className:`top-message bg-orange fg-white`,router:`/pending-subscription`}),"delete-info":new J({ident:`delete-info`,langFiles:[`menu`],router:`/delete-info`}),webcams:new J({ident:`webcams`,langFiles:[`webcams`],title:`POI_CAMS`,router:`/webcams`,noHeader:!0,useSEOurl:!0}),"webcams-detail":new J({ident:`webcams-detail`,langFiles:[`webcams`],beforeLoad(e){return!this.isLoaded&&!this.loading&&I(Sm(e.id,S?`mobile`:`full`)),e},router:RegExp(`\\/webcams\\/(?<id>\\d+)$`,``),path:`/webcams/:id`,noHeader:!0}),search:new q({ident:`search`,className:`bg-gray-dark dark-content`,keyboard:!0,pane:`top`,attachPoint:`[data-plugin="search"]`,langFiles:[`search`,`products`],beforeLoad(e){let t=qt(`[data-ref="mainSearchInput"]`);return t==null||t.focus(),e}}),"search-input":new q({ident:`search-input`,attachPoint:`[data-plugin="search-input"]`,neverClose:!0}),"search-my-location":new q({ident:`search-my-location`,className:`bg-gray-dark dark-content`,pane:`top`,attachPoint:`[data-plugin="search"]`,langFiles:[`picker`],closeOnClick:`outside`}),consent:new sf({ident:`consent`,className:x?`plugin-mobile-bottom-red dark-content`:`plugin-popup dark-content`,langFiles:[`consent`],disableMobilePicker:!0}),"map-selector":new q({ident:`map-selector`,attachPoint:S?`[data-plugin="bottom-below-controls-mobile"]`:`[data-plugin="below-rhbottom"]`,addMobileSlider:!1,closeOnSwipeDown:!1}),"perf-overlay":new q({ident:`perf-overlay`}),"sun-moon":new q({ident:`sun-moon`,className:S?`plugin-mobile-bottom-small dark-content`:``,pane:`embedded`,attachPoint:S?`[data-plugin="bottom-below-controls-mobile"]`:`[data-plugin="above-rhbottom"]`,langFiles:[`sunmoon`]}),"wind-trajectories":new q({ident:`wind-trajectories`,className:S?`plugin-mobile-bottom-small dark-content`:``,pane:`embedded`,attachPoint:S?`[data-plugin="bottom-below-controls-mobile"]`:`[data-plugin="above-rhbottom"]`}),"external-plugins":new J({ident:`external-plugins`,title:`Install Windy plugin`,router:`/plugins`}),"progress-bar":new ef({ident:`progress-bar`,className:`plugin-bottom dark-content`,logUsage:!1}),picker:new lf({ident:`picker`}),"picker-mobile":new q({ident:`picker-mobile`,className:`plugin-mobile-transparent-top`,langFiles:[`picker`],pane:`top`}),"mobile-calendar":new ef({ident:`mobile-calendar`,className:`plugin-bottom`,logUsage:!1}),"mobile-ui":new q({ident:`mobile-ui`,neverClose:!0,logUsage:!1,attachPoint:`[data-plugin="mobile-ui"]`}),onboarding:new q({ident:`onboarding`,langFiles:[`onboarding`],className:x?`plugin-mobile-bottom-slide dark-content`:`plugin-popup dark-content`}),"location-permission":new q({ident:`location-permission`,langFiles:[`onboarding`],pane:`center`,className:`dark-content`}),distance:new q({ident:`distance`,title:`MENU_DISTANCE`,keyboard:!1,disableMobilePicker:!0,className:`plugin-mobile-transparent-top`,langFiles:[`distance`],pane:`top`,router:`/distance/:coords?`}),"fav-layers":new q({ident:`fav-layers`,attachPoint:`[data-plugin="fav-layers"]`,langFiles:[`menu`],className:`size-m window transparent-window rh-bottom-pin dark-content`,closeOnClick:`outside`}),contextmenu:new q({ident:`contextmenu`,className:`drop-down-window dark-content`,closeOnClick:!0,attachPoint:`[data-plugin="map-container"]`}),"distance-desktop":new lf({ident:`distance-desktop`,singleclickPriority:`high`}),globe:new lf({ident:`globe`,title:`GLOBE`,neverClose:!0,logUsage:!0,attachPoint:`[data-plugin="map-container"]`}),"startup-weather":new tf({ident:`startup-weather`,attachPoint:`[data-plugin="startup-weather"]`,className:void 0}),"startup-articles":new tf({ident:`startup-articles`}),"startup-promos":new tf({ident:`startup-promos`,langFiles:[`startuppromos`]}),"startup-live-alerts":new tf({ident:`startup-live-alerts`}),"startup-pin2hp":new tf({ident:`startup-pin2hp`,attachPoint:`[data-
7plugin="startup-pin2hp"]`,logUsage:!0}),"startup-debug":new tf({ident:`startup-debug`,neverClose:!0,attachPoint:`[data-plugin="startup-debug"]`,router:`/startup-debug/:id?`}),"embed-ui":new q({ident:`embed-ui`,neverClose:!0,attachPoint:`[data-plugin="embed-ui"]`}),"developer-mode":new q({ident:`developer-mode`,keyboard:!0,className:`top-border dark-content`,title:`Developer mode`,router:RegExp(`^\\/(dev|developer-mode)(?:\\/(?<url>.+))?$`,``),path:`/developer-mode`}),"watch-faces":new q({ident:`watch-faces`,pane:`rhpane`,langFiles:[`watchface`],addMobileSlider:!0,className:`plugin-mobile-bottom-slide top-border`}),"app-review-dialog":new q({ident:`app-review-dialog`,langFiles:[`appreview`],pane:`center`,className:`dark-content`}),widgets:new q({ident:`widgets`,pane:`rhpane`,langFiles:[`widgetspromo`],addMobileSlider:!0,router:`/widgets`,className:`plugin-mobile-bottom-slide top-border dark-content`}),garmin:new q({ident:`garmin`,pane:`rhpane`,langFiles:[`garmin`],addMobileSlider:!0,router:`/garmin`,className:`plugin-mobile-bottom-slide top-border dark-content`}),"garmin-edge":new q({ident:`garmin-edge`,pane:`rhpane`,langFiles:[`garmin`],addMobileSlider:!0,router:`/garmin-edge`,className:`plugin-mobile-bottom-slide top-border dark-content`})};var $m=y({description:()=>lh,getURL:()=>fh,reset:()=>Eh,resetTitle:()=>xh,setSearch:()=>Th,setTitle:()=>wh,setUrl:()=>Ch});const eh=qt(`meta[name="description"]`)||{},th=eh&&eh.content,nh=qt(`link[rel="canonical"]`),rh=Date.now();let ih,ah=``,oh=null,sh=!1,ch=null;const lh=e=>{eh.content=e},uh=()=>oh?`${Ii(N.get(`usedLang`))}-${Fi(oh)}`:``,dh=e=>`${e}${ih?`?`+ih:``}`,fh=()=>`${`${window.location.origin}${ah&&ah.startsWith(`/`)?``:`/`}`}${dh(ah)}`,ph=()=>{if(ah===``){let e=N.get(`overlay`);return e===`wind`||!oh?``:`${uh()}-${e}`}else if(ch)return Bt(`${Ii(N.get(`usedLang`))}${Pi(ch)}`,ah);return ah};let mh=``,hh=``,gh=null;const _h=St(()=>{if(!(mh===ah&&hh===ih&&gh===ch)){{let e=ph(),t={url:ah,search:ih},n=dh(e);ah===mh?window.history.replaceState(t,``,n):(window.history.pushState(t,``,dh(e)),nh.href=Bt(`https://www.windy.com`,ah))}mh=ah,hh=ih,gh=ch}},200);let vh;function yh(){if(!vh)return;let e=N.get(`mapCoords`),t=[E(e.lat),E(e.lon),e.zoom],n=N.get(`timestamp`),r=N.get(`calendar`),i;if(r&&Math.abs(rh-n)>864e5){let e=_n(n,`$1-$2-$3-$4`);t.unshift(e)}dc[vh.overlay].hideFromURL||t.unshift(vh.overlay),vh.level!==`surface`&&t.unshift(vh.level),!/^ecmwf/.test(vh.product)&&Pd(vh.overlay)&&t.unshift(vh.product),N.get(`isolinesOn`)&&(i=N.get(`isolinesType`))&&t.push(`i:`+i),(i=N.get(`pois`))!==`empty`&&t.push(`p:`+i);let a=N.get(`pickerLocation`);a&&t.push(`m:`+dt(a)),ih=t.join(`,`),_h()}const bh=St(yh,200*.25);function xh(){if(sh)return;let e=N.get(`overlay`),t=dc[e].getName.call(dc[e]);e===`wind`?(oh=null,document.title=`Windy: ${F.TITLE}`):(oh=t,document.title=`Windy: ${t}`)}let Sh=null;const Ch=(e,t,n)=>{let r=Y[e];r&&(ah=r.getPluginUrl(t),ch=n?`-${n}`:null,Sh=e,_h())},wh=e=>{oh=e,document.title=`Windy: ${e}`,sh=!0},Th=e=>{e&&(ih=e,_h())},Eh=e=>{e&&e!==Sh||(sh=!1,eh&&(eh.content=th),ah=``,ch=null,yh(),xh(),_h())};P.on(`paramsChanged`,e=>{vh=e,bh()}),N.on(`mapCoords`,bh),N.on(`pickerLocation`,bh),N.on(`pois`,bh),N.on(`overlay`,xh),N.on(`usedLang`,xh);const Dh=`What can you do? ${_e===`android`?` Update your Android System WebView component to the latest version.`:``} Update your browser or Windy application to the latest version. And try again please.`,Oh=`Overlay ${N.get(`overlay`)} uses WebGL technology, that can occasionally fail on some devices.\n\n${Dh}`;let kh=null;function Ah(){if(kh!==null)return kh;try{let e=document.createElement(`canvas`);if(e.getContext(`webgl2`)||e.getContext(`webgl`)||e.getContext(`experimental-webgl`))return kh=!0,kh;Mh(`Your device/browser does not support WebGL or has it disabled.`),kh=!1}catch(e){Mh(`An error occurred during WebGL initialization.`),kh=!1}return kh}function jh(e){Nh(`It seems that ${N.get(`overlay`)} overlay failed. ${e}\n\n${Oh}`)}function Mh(e){Nh(`It seems that ${N.get(`overlay`)} overlay failed. ${e}\n\n${Dh}`)}function Nh(e){new Hr({ident:`message-webgl-error`,className:`top-message bg-error`,html:e}).open()}var Ph=y({getNetworkInformation:()=>Uh,sentErrors:()=>Rh,suspendErrorLogging:()=>Vh});const Fh=Date.now(),Ih={};let Lh=`1_loading`;P.once(`dependenciesResolved`,()=>{Lh=`2_dependenciesResolved`}),P.once(`redrawFinished`,()=>{Lh=`3_redrawFinished`});const Rh=[];let zh=0,Bh=!1;const Vh=()=>{Bh=!0};function Hh(e,t){return e.toString().substring(0,t).toLowerCase().replace(/[^\w\s-]/g,``).replace(/[\s_-]+/g,`-`).replace(/^-+|-+$/g,``)}function Uh(){var e;let t=(e=window.navigator)==null?void 0:e.connection;if(typeof t==`object`&&t){let{downlink:e,downlinkMax:n,effectiveType:r,rtt:i,saveData:a,type:o}=t;return{downlink:e,downlinkMax:n,effectiveType:r,rtt:i,saveData:a,type:o}}}async function Wh(e,t,n,r,i){if(!(window.top!==window.self||Bh)&&!(++zh>1e3)&&!(r&&r instanceof Xe&&r.status===0)&&N.get(`connection`)&&!/UCBrowser/i.test(window.navigator.userAgent))try{let a=Date.now(),o,s,c={};switch(e){case`error`:{let e=t,n=e.filename;if(s=e.message,c={script:n&&n.replace(/.*\//,``),line:e.lineno,col:e.colno,stack:e.error&&e.error.stack},/leaflet-gl\.js$/.test(n||``)){let t=Gh(e);t&&(s=t.msg,c.extra=t.customPayload),c.module=`leafletGl`}}break;case`unhandledRejection`:{let e=t,n=e.sourceURL||e.filename;s=e.message,c={script:n&&n.replace(/.*\//,``),line:e.line||e.lineNumber,col:e.column||e.columnNumber,stack:e.stack}}break;case`customLogError`:s=t,c=w({module:n,stack:r&&`stack`in r&&r.stack},i||{});break}if(!s)return;let l=Hh(s,60),u=Hh(s,20),d=0;if(d=u in Ih?Ih[u]++:Ih[u]=0,d%10||d>50)return;d>0&&(s=`${s} (repeated)`,o=d);let f=w({errorID:l,overlay:N.get(`overlay`),runningPhase:document.hidden?`documentIsHidden`:Lh,timestamp:a,runningMinutes:Math.round((a-Fh)/rt),type:e,msg:s,repeated:o,url:window.location.href,ver:he,target:ge,platform:_e,device:ve,latestBcast:Rn(a),network:Uh()}
7,c);await fetch(`https://node.windy.com/sedlina/errors`,{body:JSON.stringify(f),headers:{"Content-Type":`application/json; charset=utf-8`},method:`POST`}),Rh.push(f)}catch(e){console.error(`onError handler, that should handle 7 report errors, failed as well...`,e)}}window.addEventListener(`error`,e=>{e.message.startsWith(`ResizeObserver loop`)||Wh(`error`,e)}),window.addEventListener(`unhandledrejection`,({reason:e})=>{e instanceof ReferenceError&&Wh(`unhandledRejection`,e)}),document.addEventListener(`windyCustomError`,({detail:e})=>{let{moduleName:t,msg:n,errorObject:r,additionalInfo:i}=e;Wh(`customLogError`,n,t,r,i)});function Gh(e){let t=null;try{let n=JSON.parse(e.error.message),r=n.message;if(!r)return t;let i=n.type,a={statusMessage:n.statusMessage,type:i};/webgl/i.test(r)&&(i===`webglcontextcreationerror`?(a.webglVersion=`unknown`,jh(r),e.preventDefault()):a.webglVersion=bb.context),t={msg:r,customPayload:a}}catch(e){}return t}var Kh=y({ExternalSveltePlugin:()=>qh}),qh=class extends q{constructor(e,{desktopUI:t,title:n,mobileUI:r,desktopWidth:i,routerPath:a,listenToSingleclick:o,addToContextmenu:s,url:c,version:l}){super(e),C(this,`mobileConfig`,{fullscreen:{className:`plugin-mobile-bottom-slide top-border`,pane:`fullscreen-mobile`,addMObileSliders:!0},small:{className:`plugin-mobile-bottom-small dark-content`,attachPoint:`[data-plugin="bottom-below-controls-mobile"]`,pane:`small-bottom-bottom`}}),C(this,`desktopConfig`,{rhpane:{className:`plugin-rhpane top-border`,pane:`rhpane`},embedded:{className:`fg-white bg-gray-dark rounded-box`,attachPoint:`[data-plugin="above-rhbottom"]`,pane:`embedded`}}),C(this,`tabletConfig`,{rhpane:this.desktopConfig.rhpane,embedded:this.mobileConfig.small}),C(this,`widthOfRhPane`,void 0),C(this,`version`,void 0),C(this,`listenToSingleclick`,void 0),C(this,`addToContextmenu`,void 0),this.location=c;let{className:u,attachPoint:d,pane:f,addMObileSliders:p}=x?this.mobileConfig[r]:Le?this.tabletConfig[t]:this.desktopConfig[t];this.className=`${u} dark-content`,this.pane=f,this.attachPoint=d||this.attachPoint,this.widthOfRhPane=i||400,this.title=n||`External plugin`,this.logUsage=!0,this.router=a?Bt(`/plugin`,a):void 0,this.path=this.router,this.listenToSingleclick=o,this.singleclickPriority=o?`high`:void 0,this.addToContextmenu=s,this.version=l,this.addMobileSlider=p==null?!1:p,this.closeOnSwipeDown=!1,this.closesOnSwipeRight=this.pane===`rhpane`&&Le}async open({params:e,disableOpeningAnimation:t,qs:n}){var r=()=>super.open,i=this;Vh();try{let{data:a}=await I(`/plugins/list`),o=a.find(e=>e.name===i.ident);return o&&o.status===`published`?i.hasNewerVersion(o.version)&&await i.showConfirmationWindow()?(await i.uninstallPlugin(),await Yh(Bt(o.url,`plugin.min.js`),`gallery`),P.emit(`rqstOpen`,o.name)):r().call(i,{params:e,disableOpeningAnimation:t,qs:n}):o&&o.status===`unpublished`?(qr({type:`error`,html:Tt(F.MSG_EXTERNAL_PLUGIN_UNPUBLISHED,{title:i.title})}),await i.uninstallPlugin(),!1):r().call(i,{params:e,disableOpeningAnimation:t,qs:n})}catch(a){return r().call(i,{params:e,disableOpeningAnimation:t,qs:n})}}hasNewerVersion(e){return e.localeCompare(this.version,void 0,{numeric:!0,sensitivity:`base`})>0}showConfirmationWindow(){return new Promise(e=>{let t=new Hr({ident:`message-plugin-update-available`,className:`top-message top-border bg-gray-dark lh-15`,html:`<div style="width: 100%">
8                  <p style="text-align: center">
9                    ${Tt(F.MSG_EXTERNAL_PLUGIN_UPDATE_AVAILABLE,{title:this.title})}
10                  </p>
11                  <footer style="display: flex; justify-content: center">
12                    <button class="button button--transparent" id="button-update-no">
13                      ${F.NO}
14                    </button>
15                    <button class="button button--transparent" id="button-update-yes">
16                      ${F.YES}
17                    </button>
18                  </footer>
19                </div>`}).open();document.getElementById(`button-update-yes`).onclick=()=>{n(!0)},document.getElementById(`button-update-no`).onclick=()=>{n(!1)};function n(n){t.close(),e(n)}})}getDayDiff(e){let t=(new Date().getTime()-new Date(e).getTime())/(1440*60*1e3);return Math.floor(t)}async uninstallPlugin(){var e=this;P.emit(`rqstClose`,e.ident),await co.remove(e.ident)}getCss(){let e=`.on${this.ident}`,t=`#plugin-${this.ident}`,n=this.widthOfRhPane;switch(`${x?`mobile`:`desktop`}-${this.pane}`){case`desktop-rhpane`:return`
20${t} {
21    width: ${n}px;
22}
23${t} .plugin__content {
24    padding: 25px 25px 100px 25px;
25}
26${e} .right-border {
27    right: ${n}px;
28}
29${e} #logo-wrapper {
30    left: ${n/2}px;
31}
32${e} #map-container {
33    transition-delay: .2s;
34    transform: translateX(-${n/2}px)
35}`;case`desktop-embedded`:return`
36${t} {
37    position: relative;
38    pointer-events: auto;
39    width: 320px;
40    margin: 0 8px 15px 0;
41    padding-right: 40px;
42    max-height: 200px !important;
43}
44
45${t} > .closing-x {
46    display: block;
47    background: none;
48    font-size: 20px;
49    top: -5px;
50    right: -3px;
51}`;case`mobile-fullscreen-mobile`:return`
52${t} .plugin__content {
53    padding: 0 25px 100px 25px;
54}
55
56${e} #map-container {
57    transform: scale(0.93) translateY(0);
58    transform: scale(0.93) translateY(var(--margin-top));
59    border-radius: 8px;
60    transform-origin: top center;
61}
62
63${e} #search,
64${e} #plugin-picker-mobile,
65${e} #logo-wrapper,
66${e} #go-premium-mobile {
67    display: none !important;
68}`;default:return`/* No CSS for this device and pane */`}}},Jh=y({installExternalPlugin:()=>Yh,loadExternalPlugins:()=>Qh,removeExternalPlugin:()=>$h});const Yh=async(e,t)=>new Promise((n,r)=>{if(!Gp()){nm({action:`external-plugins`,params:{}}
68),r({type:`installation`,msg:`Log in to install the plugin`});return}import(e).then(async i=>{try{let{__pluginConfig:r}=i,{name:a,internal:o}=r;if(!(typeof a==`string`&&/^windy-plugin-([a-z0-9-]+)$/.test(a)))throw Error(`Plugin name MUST be prefixed with windy-plugin- string and can contain only lowercase letters, numbers and dashes`);await co.hasKey(a)&&await co.remove(a);let s=w(w({},r),{},{id:a,url:e,installedBy:t,installed:Date.now()});Y[a]=new qh({ident:a},s),o||await co.put(a,s),n(s)}catch(e){r({type:`installation`,msg:e.message})}}).catch(e=>{r({type:`network`,msg:e.message})})});let Xh=null;const Zh=async()=>{if(!await em())return[];try{await co.loadFromCloud()}catch(e){console.error(`Failed to load plugins from cloud`,e)}let e=(await co.getAll()).map(e=>{let t=e.name;return new qh({ident:t},e)});return e.forEach(e=>{Y[e.ident]=e}),P.emit(`externalPluginChanged`),e},Qh=()=>Xh||(Xh=Zh().catch(e=>{throw Xh=null,e}),Xh),$h=async e=>{P.emit(`rqstClose`,e),await co.remove(e)};P.on(`dependenciesResolved`,Qh);var eg=y({hideStartupWeather:()=>hg,parseSearch:()=>cg,parsedOverlay:()=>gg,parsedProduct:()=>_g,resolveRoute:()=>og,sharedCoords:()=>pg}),tg;let ng=`/`,rg;rg=bn(Sn),ng=rg.purl;function ig(){let e=e=>e.length>3?e:``,t=e=>{if(!e)return;let t=e.replace(/(^|&)utm_[^&]+/gim,``);return/\S+=\S+/.test(t)||t.length>8?e:``};try{return{path:e(ng),search:t(decodeURIComponent(window.location.search.substring(1).replace(/\?.*$/,``)))}}catch(t){return{path:e(ng||``)}}}function ag(e){let t=e.split(`/`).map(e=>{if(e.startsWith(`:`)){let t=e.replace(/:([^?]+)\??/g,`$1`);return e.endsWith(`?`)?`(?:/(?<${t}>[^/]+))?`:`/(?<${t}>[^/]+)`}return e?`/${e}`:``});return RegExp(`^${t.join(``)}$`)}function og(e,t,n){if(!e)return null;if(/^\/plugin\/\S+/.test(e))return sg(e);for(let r of Object.keys(Y)){let i=Y[r];if(!i||!(`router`in i)||!i.router)continue;let{router:a,onRouteMatch:o}=i,s=(a instanceof RegExp?a:ag(a)).exec(e);if(s){let e=s.groups?o(s.groups,n):void 0;return e&&(e.source=t),{ident:r,params:e}}}return null}async function sg(e){let t=await Qh(),n=!0;for(let{router:r,ident:i}of t)if(r){let t=ag(r).exec(e);if(t)return n=!1,{ident:i,params:t.groups}}return n?{ident:`external-plugins`}:null}function cg(e){if(!e)return;let t={sharedCoords:null,pickerCoords:null,product:null,overlay:null},n,r=e.split(`,`);for(let e=0;e<r.length;e++){n=r[e],/^-?\d+\.\d+$/.test(n)&&/^-?\d+\.\d+$/.test(r[e+1])&&/^\d+$/.test(r[e+2])&&(t.sharedCoords={lat:parseFloat(n),lon:parseFloat(r[e+1]),zoom:parseInt(r[e+2])},e+=2);let i;Pe.includes(n)&&(t.product=n),we.includes(n)&&(t.overlay=n),Se.includes(n)&&N.set(`level`,n),(i=/^(\d\d\d\d)-?(\d\d)-?(\d\d)-?(\d\d)$/.exec(n))&&N.set(`timestamp`,Date.UTC(+i[1],i[2]-1,+i[3],+i[4],0,0,0)),(i=/^m:([a-zA-Z0-9]{5,})/.exec(n))&&(t.pickerCoords=ft(i[1])),(i=/^i:([a-z0-9]{2,})/.exec(n))&&(N.set(`isolinesType`,i[1]),N.set(`isolinesOn`,!0)),(i=/^p:([a-z0-9]{3,})/.exec(n))&&N.set(`pois`,i[1]),(i=/^d:picker/.exec(n))&&(t.pickerCoords=t.sharedCoords),(i=/^launchedBy:(\S+)/.exec(n))&&(t.hideStartupWeather=!0,Yl(`appOpening`,i[1]))}return t}const lg=ig(),ug=vn(lg.search),dg=cg((tg=lg.search)==null?void 0:tg.split(`&`)[0]),fg=og(lg.path,`url`,ug);P.once(`dependenciesResolved`,async()=>{let e=await fg,t=e==null?void 0:e.ident;e&&P.emit(`rqstOpen`,e.ident,e.params),lg.path&&!t?(Eh(),Yl(`404`,Sn.replace(/^\//,``))):Sn!==`/`&&Yl(`startup`,Sn.replace(/^\//,``))}),dg&&dg.pickerCoords&&dg.sharedCoords&&P.once(`redrawFinished`,()=>{P.emit(`rqstOpen`,S?`picker-mobile`:`picker`,w(w({},dg.pickerCoords),{},{noEmit:!0}))});const pg=dg==null?void 0:dg.sharedCoords,mg=fg!==null&&!(fg instanceof Promise),hg=(dg==null?void 0:dg.hideStartupWeather)||mg,gg=we.includes(rg==null?void 0:rg.overlay)?rg.overlay:dg==null?void 0:dg.overlay,_g=dg==null?void 0:dg.product;var vg=y({add:()=>yg,checkError:()=>wg,close:()=>bg,getUnresolvedErrors:()=>Cg,resolve:()=>xg,resolveCategory:()=>Sg});const yg=e=>{},bg=e=>{},xg=e=>{},Sg=e=>{},Cg=()=>[];function wg(e){}var Tg=y({getFallbackName:()=>kg,getGPSlocation:()=>Og,getHomeLocation:()=>jg,getMyLatestPos:()=>Dg,requestLocationPermissions:()=>Mg});const Eg=()=>null,Dg=()=>{let e=N.get(`ipLocation`),t=N.get(`gpsLocation`);return e&&t?e.ts>t.ts?e:t:t||e||{lat:0,lon:-1*new Date().getTimezoneOffset()/4,cc:`us`,source:`fallback`,zoom:3,name:``,ts:Date.now()}}
68,Og=(e={})=>new Promise(async(t,n)=>{let r=_e===`ios`?2e4:12e3,i={enableHighAccuracy:e.enableHighAccuracy||_e!==`ios`,timeout:e.timeout||r},a=e=>{let n={lat:e.coords.latitude,lon:e.coords.longitude,source:`gps`,ts:Date.now()};N.set(`gpsLocation`,n),P.emit(`newLocation`,n),t(n)},o=async(r,i)=>{let{doNotShowFailureMessage:a,getMeFallbackGps:o}=e;if(console.error(i),o){let e=N.get(`gpsLocation`);if(!e)n(i);else{let r=Date.now()-e.ts;if(r<5*6e4){t(e);return}else r<864e5?t(e):n(i)}}else n(i);a||await qr({type:`error`,html:r?F.GETTING_LOCATION_ERROR:o?F.GETTING_LOCATION_FALLBACK:F.GETTING_LOCATION_TIMEOUT,timeout:r?7e3:5e3})},s=Eg();if(s){if(!N.get(`locationPermissionsGranted`)){if(!N.get(`onboardingFinished`))return;let e=()=>{},t=new Promise(t=>{e=t});if(P.emit(`rqstOpen`,`location-permission`,{resolve:e}),await t===!1)return}s.getCurrentPosition(i).then(a).catch(e=>{e.message,o(!0,e)})}else navigator.geolocation.getCurrentPosition(a,e=>o(e.code===e.PERMISSION_DENIED,e),i)}),kg=(e,t)=>`${parseFloat(e).toFixed(2)}, ${parseFloat(t).toFixed(2)}`,Ag=(e,t,n,r,i)=>{n&&(n=n.toLowerCase(),N.set(`country`,n),N.setDefault(`hourFormat`,/us|uk|ph|ca|au|nz|in|eg|sa|co|pk|my/.test(n)?`12h`:`24h`),N.get(`defaultUnits`)===`unset`&&N.set(`defaultUnits`,/us|my|lr/.test(n)?`imperial`:`metric`));let a={ts:Date.now(),source:i,lat:parseFloat(e),lon:parseFloat(t),name:r||kg(e,t)};N.set(`ipLocation`,a),P.emit(`newLocation`,a)};I(`/services/umisteni`,{ongoingFetchRequest:W.preparedFetchRequests.umisteni}).then(({data:e})=>{!e||!(e.ll&&e.ll.length)||Ag(e.ll[0],e.ll[1],e.country,e.city,`api`)}).catch(e=>{O(`geolocation`,`Unable to load/parse geoloc JSON`,e)});const jg=async()=>{let e=Date.now(),t=N.get(`startUp`),n=N.get(`homeLocation`),r=N.get(`startUpLastPosition`);if(t===`last`&&r)return w(w({},r),{},{ts:e,source:`last`});if(t===`location`&&n)return n;if(t===`ip`){let t=N.get(`ipLocation`)||Dg();return t.source===`fallback`||e-t.ts>12*36e5?new Promise(e=>{P.once(`newLocation`,e)}):t}else{let t=N.get(`gpsLocation`);if(t&&t.source===`gps`&&e-t.ts<900*1e3)return t;try{return await Og({doNotShowFailureMessage:!0})}catch(e){if(t)return t;throw e}}};async function Mg(){let e=Eg();return(e?(await e.requestPermissions()).location:(await navigator.permissions.query({name:`geolocation`})).state)===`granted`}var Ng=y({registerCustomTileProtocol:()=>Lg});let Pg;const Fg=new Map,Ig=new Tr(64);function Lg(e,t,n,r,i){function a(a,o){let s=t(a.url,e);if(s.modifiedUrl===``)return new Promise(e=>{r||e({data:null}),r?e({data:r}):Pg?e({data:Pg}):Ib(!0).then(t=>{Pg=t,e({data:t})}).catch(e=>{console.error(`Failed to create placeholder tile image`,e)})});let c=`${e}_${s.modifiedUrl}`,l=Ig.get(c);if(l)return Promise.resolve({data:l});if(Fg.has(c))return Fg.get(c);let u=new Promise((e,t)=>{Rg(s,o,n,r,i).then(n=>{Fg.delete(c),n?(Ig.put(c,n),e({data:n})):t(`Failed to load tile image for url: ${s.modifiedUrl}`)}).catch(e=>{console.error(`Failed to load tile image "${c}"`,e)})});return Fg.set(c,u),u}ee(e,a)}async function Rg(e,t,n,r,i){let a=e=>!!(e.redirected&&i&&r!==void 0&&e.url.includes(`empty.`));try{let i=await fetch(e.modifiedUrl,{signal:t.signal});if(i.status===200)return n?await n(await i.blob(),e):a(i)?r:await i.arrayBuffer();if(r)return r}catch(e){if(r)return r}}let zg=function(e){return e[e.VERTEX=WebGLRenderingContext.ARRAY_BUFFER]=`VERTEX`,e[e.INDEX=WebGLRenderingContext.ELEMENT_ARRAY_BUFFER]=`INDEX`,e}({}),Bg=function(e){return e[e.STATIC=WebGLRenderingContext.STATIC_DRAW]=`STATIC`,e[e.DYNAMIC=WebGLRenderingContext.DYNAMIC_DRAW]=`DYNAMIC`,e}({});var Vg=class e{constructor(t,n){C(this,`buffer`,void 0),C(this,`type`,void 0),C(this,`_dataLength`,0),C(this,`_byteLength`,0),C(this,`bufferId`,void 0);let r=t.createBuffer();if(!r)throw Error(`[GlBuffer] - failed to create WebGL buffer`);this.buffer=r,this.type=n,this.bufferId=e.idCounter++}static reset(){e.idCounter=0}bind(e){this._dataLength,this.buffer&&e.bindBuffer(this.type,this.buffer)}unbind(e){this.buffer&&e.bindBuffer(this.type,null)}update(e,t,n=Bg.STATIC){this.buffer&&(e.bindBuffer(this.type,this.buffer),e.bufferData(this.type,t,n),e.bindBuffer(this.type,null),this._dataLength=t.length,this._byteLength=t.byteLength)}get length(){return this._dataLength}get byteLength(){return this._byteLength}destroy(e){e.deleteBuffer(this.buffer)}};C(Vg,`idCounter`,0);var Hg=class e{constructor(){C(this,`vaoId`,e.vaosCount++),C(this,`vao`,void 0)}static reset(){e.vaosCount=0}static create(t){let n=new e;return n.init(t)?n:null}bind(e){if(!this.vao)throw Error(`[GlVertexArray] VAO object is undefined/null`);if(!(e instanceof WebGLRenderingContext))e.bindVertexArray(this.vao);else{let t=E_.getExtension(e,`OES_vertex_array_object`);if(t)t.bindVertexArrayOES(this.vao);else throw Error(`[GlVertexArray] Failed to retrieve "OES_vertex_array_object" extension`)}}unbind(e){if(!(e instanceof WebGLRenderingContext))e.bindVertexArray(null);else{let t=E_.getExtension(e,`OES_vertex_array_object`);if(t)t.bindVertexArrayOES(null);else throw Error(`[GlVertexArray] Failed to retrieve "OES_vertex_array_object" extension`)}}destroy(e){if(this.vao)if(!(e instanceof WebGLRenderingContext))e.bindVertexArray(null),e.deleteVertexArray(this.vao);else{let t=E_.getExtension(e,`OES_vertex_array_object`);t&&(t.bindVertexArrayOES(null),t.deleteVertexArrayOES(this.vao))}}init(e){let t;if(!(e instanceof WebGLRenderingContext))t=e.createVertexArray();else{let n=E_.getExtension(e,`OES_vertex_array_object`);n&&(t=n.createVertexArrayOES())}return t?(this.vao=t,!0):!1}};C(Hg,`vaosCount`,0);var Ug=class e{constructor(t,n,r,i=!1){C(this,`_meshId`,void 0),C(this,`_vertexBuffers`,[]),C(this,`_vertexBufferOwned`,[]),C(this,`_buffersStrides`,[]),C(this,`_vertexCount`,void 0),C(this,`_attributes`,[]),C(this,`_indexBuffer`,void 0),C(this,`_ownsIndexBuffer`,!0),C(this,`_vertexArrays`,new Map),C(this,`_instanceBuffer`,void 0),C(this,`_instanceAttributes`,new Map),C(this,`_instanceBufferStride`,0),C(this,`_instancingInitialized`,!1),C(this,`_ownsInstanceBuffer`,!0),C(this,`drawElementsCall`,void 0),C(this,`drawArraysCall`,void 0),C(this,`vertexDivisorCall`,void 0),!(n instanceof Vg)&&n.length,this.addVertexStream(t,n,i),r instanceof Vg?(this._indexBuffer=r,this._ownsIndexBuffer=!1):r&&(this._indexBuffer=new Vg(t,zg.INDEX),this._indexBuffer.update(t,r,i?t.DYNAMIC_DRAW:t.STATIC_DRAW)),this._meshId=e._totalMeshes++}static reset(){e._totalMeshes=0}render(e,t,n=e.TRIANGLES,r=1){if(this._attributes.length===0)throw Error(`[GlMesh] - Geometry layout not defined (at least one attribute must be specified - see GlMesh.registerShaderGeometryLayout method)`);if(this._instanceBuffer)this._renderInstanced(e,t,n,r);else{let r=t.programId,i=this._vertexArrays.get(r);i?i.bind(e):this._bindGeometry(e),this._indexBuffer?e.drawElements(n,this._indexBuffer.length,e.UNSIGNED_SHORT,0):e.drawArrays(n,0,this._vertexCount),i==null||i.unbind(e)}}registerShaderGeometryLayout(e,t,n,r=0){if(r>=this._vertexBuffers.length)throw Error(`[GlMesh] Cannot set vertex layout for vertex stream ${r}
68, \n since this mesh contains only ${this._vertexBuffers.length} vertex streams`);this._buffersStrides[r]=0;let i=t.program;Object.keys(n).forEach(t=>{var a;let o=e.getAttribLocation(i,t);if(o<0)return;let s=n[t].components,c=(a=n[t].type)==null?e.FLOAT:a,l=F_(c);this._buffersStrides[r]+=l*s;let u={location:o,type:c,components:s};this._attributes[r].set(t,u)}),r===0&&this._updateVertexCount();let a=Hg.create(e);a&&(a.bind(e),this._bindGeometry(e),a.unbind(e),this._vertexArrays.set(t.programId,a))}destroy(e){if(this._vertexBuffers.forEach((t,n)=>{this._vertexBufferOwned[n]&&t.destroy(e)}),this._ownsIndexBuffer){var t;(t=this._indexBuffer)==null||t.destroy(e)}if(this._ownsInstanceBuffer){var n;(n=this._instanceBuffer)==null||n.destroy(e)}this._vertexArrays.forEach(t=>{t.destroy(e)}),this._attributes.forEach(e=>{e.clear()}),this._instanceAttributes.forEach(e=>{e.clear()}),this._instanceAttributes.clear()}addVertexStream(e,t,n=!1){let r,i;t instanceof Vg?(r=t,i=!1):(r=new Vg(e,zg.VERTEX),r.update(e,t,n?e.DYNAMIC_DRAW:e.STATIC_DRAW),i=!0),this._vertexBuffers.push(r),this._vertexBufferOwned.push(i);let a=new Map;return this._attributes.push(a),this._vertexBuffers.length-1}updateVertexStream(e,t,n){if(t>=this._vertexBuffers.length)throw Error(`[GlMesh] Cannot update vertex stream with index ${t}, there are only ${this._vertexBuffers.length} streams`);return this._vertexBufferOwned[t]?(this._vertexBuffers[t].update(e,n),t===0&&this._updateVertexCount(),!0):!1}initInstancing(e){if(!(e instanceof WebGLRenderingContext))this.drawElementsCall=(...t)=>{e.drawElementsInstanced(...t)},this.drawArraysCall=(...t)=>{e.drawArraysInstanced(...t)},this.vertexDivisorCall=(...t)=>{e.vertexAttribDivisor(...t)};else{let t=E_.getExtension(e,`ANGLE_instanced_arrays`);if(!t)return console.error(`[GlMesh] Failed to retrieve "ANGLE_instanced_arrays" extension instanced rendering`),!1;this.drawElementsCall=(...e)=>{t.drawElementsInstancedANGLE(...e)},this.drawArraysCall=(...e)=>{t.drawArraysInstancedANGLE(...e)},this.vertexDivisorCall=(...e)=>{t.vertexAttribDivisorANGLE(...e)}}return this._instancingInitialized=!0,!0}setInstanceStream(e,t,n,r,i){if(!this._instancingInitialized&&!this.initInstancing(e))return!1;if(n instanceof Vg){if(i===void 0)return!1;this._instanceBuffer=n,this._ownsInstanceBuffer=!1,this._instanceBufferStride=i}else (!this._instanceBuffer||!this._ownsInstanceBuffer)&&(this._instanceBuffer=new Vg(e,zg.VERTEX)),this._ownsInstanceBuffer=!0,this._instanceBuffer.update(e,n,e.STATIC_DRAW),this._instanceBufferStride=i==null?Object.values(r).reduce((e,t)=>e+t.components,0):i;return this._registerInstanceLayout(e,t,r),!0}updateInstanceStream(e,t){return!this._instanceBuffer||!this._ownsInstanceBuffer?!1:(this._instanceBuffer.update(e,t),!0)}hasInstanceStream(){return!!this._instanceBuffer}_registerInstanceLayout(e,t,n){let r=new Map;this._instanceAttributes.set(t.programId,r);let i=0;Object.keys(n).forEach(a=>{var o,s;let c=n[a],l=e.getAttribLocation(t.getProgram(),a);if(l<0){i+=c.components;return}r.set(a,{location:l,type:(o=c.type)==null?e.FLOAT:o,components:c.components,divisor:c.divisor,offset:(s=c.offset)==null?i:s}),i+=c.components})}_bindGeometry(e){this._vertexBuffers.forEach((t,n)=>{t.bind(e);let r=0;
68this._attributes[n].forEach(t=>{e.enableVertexAttribArray(t.location),e.vertexAttribPointer(t.location,t.components,t.type,!1,this._buffersStrides[n],r),r+=t.components*F_(t.type)})}),this._indexBuffer&&this._indexBuffer.bind(e)}_renderInstanced(e,t,n=e.TRIANGLES,r){if(!this._instanceBuffer)return;let i=t.programId,a=this._instanceAttributes.get(i);if(!a)return;let o=this._vertexArrays.get(i);o?o.bind(e):this._bindGeometry(e),this._instanceBuffer.bind(e),a.forEach(t=>{e.enableVertexAttribArray(t.location);let n=F_(t.type);e.vertexAttribPointer(t.location,t.components,t.type,!1,this._instanceBufferStride*n,t.offset*n),this.vertexDivisorCall(t.location,t.divisor)}),this._indexBuffer?this.drawElementsCall(n,this._indexBuffer.length,e.UNSIGNED_SHORT,0,r):this.drawArraysCall(n,0,this._vertexCount,r),a.forEach(e=>{this.vertexDivisorCall(e.location,0)}),this._instanceBuffer.unbind(e),o==null||o.unbind(e)}_updateVertexCount(){this._vertexCount=this._buffersStrides[0]>0?this._vertexBuffers[0].byteLength/this._buffersStrides[0]:0}
68};C(Ug,`_totalMeshes`,0);var Wg=class{static ringMeshTriangleStrip(e){let t=[],n=2*Math.PI/e;for(let r=0;r<=e;r++){let e=n*r,i=Math.cos(e),a=Math.sin(e);t.push(i,a,0,-1),t.push(i,a,1,1)}return t}};C(Wg,`quadMeshUniqueVtxUv`,[0,1,0,0,1,1,1,0,1,0,1,1,0,0,0,1]),C(Wg,`quadMeshUniqueVtx`,[0,1,1,1,1,0,0,0]),C(Wg,`quadMeshTrianglesVtx`,[0,0,1,0,1,1,1,1,0,1,0,0]);var Gg=class e{constructor(t=``){C(this,`_program`,void 0),C(this,`_programId`,e.numPrograms++),C(this,`_programName`,``),this._programName=t}static reset(){e.numPrograms=0}get programId(){return this._programId}get program(){return this._program}static constructWithSources(t,n,r,i){let a=new e(i),o,s;try{o=O_(t,n,t.VERTEX_SHADER),s=O_(t,r,t.FRAGMENT_SHADER)}catch(e){throw e instanceof C_?(console.log(`%c Shader: %c ${e.additionalInfo.filename}\n%c Error log: %c ${e.additionalInfo.shaderLog}`,`color:orange`,`color:unset`,`color:orange`,`color:unset`),new C_(e.message,{cause:e,additionalInfo:w(w({},e.additionalInfo),{},{programName:a._programName})},e.emitToElastic)):e}let c;try{c=D_(t,o,s)}catch(e){throw e instanceof C_?new C_(e.message,{cause:e,additionalInfo:w(w({},e.additionalInfo),{},{programName:a._programName})},e.emitToElastic):e}return a._program=c,a}use(e){if(!this._program)throw Error(`Shader program does not exist`);e.useProgram(this._program)}getProgram(){return this._program}destroy(e){let t=e.getAttachedShaders(this._program);t==null||t.forEach(t=>{e.detachShader(this._program,t),e.deleteShader(t)}),e.deleteProgram(this._program)}};C(Gg,`numPrograms`,0);const X={el:void 0,el2:void 0,numTextures:0,memoryUsage:0,setup:!1};var Kg=class e{static reset(){e.numTextures=0,X.setup=!1,X.numTextures=0,X.memoryUsage=0,X.el=void 0,X.el2=void 0}static createFromUrl(t,n){return new Promise((r,i)=>{let a=new Image,o=new e(t);o.resize(t,{x:1,y:1}),a.onload=()=>{o.updateContent(t,a),r(o)},a.onerror=e=>{i(e)},a.crossOrigin=``,a.src=n})}constructor(t,n=t.RGBA,r=t.TEXTURE_2D,i){if(C(this,`_target`,void 0),C(this,`_texture`,void 0),C(this,`_textureId`,void 0),C(this,`_internalFormat`,void 0),C(this,`_dimensions`,void 0),C(this,`_uvDownScale`,{x:1,y:1}),C(this,`wrap`,void 0),C(this,`filter`,void 0),C(this,`_usedMemory`,0),this._textureId=e.numTextures++,i)this._texture=i;else{let e=t.createTexture();if(!e)throw Error(`[GlTexture] Failed to create WebGL texture`);this._texture=e}this._internalFormat=n,this._target=r,this.wrap=t.CLAMP_TO_EDGE,this.filter=t.LINEAR,t.bindTexture(this._target,this._texture),t.texParameteri(this._target,t.TEXTURE_WRAP_S,this.wrap),t.texParameteri(this._target,t.TEXTURE_WRAP_T,this.wrap),t.texParameteri(this._target,t.TEXTURE_MIN_FILTER,this.filter),t.texParameteri(this._target,t.TEXTURE_MAG_FILTER,this.filter),t.bindTexture(this._target,null)}get texture(){return this._texture}get textureId(){return this._textureId}get target(){return this._target}get dimensions(){return this._dimensions}set format(e){this._internalFormat=e}get format(){return this._internalFormat}get uvDownScale(){return this._uvDownScale}get usedMemory(){return this._usedMemory}updateContent(e,t,n,r,i=!1){this.bind(e,n,r),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,i),t instanceof HTMLImageElement||t instanceof HTMLCanvasElement||t instanceof ImageBitmap||t instanceof ImageData?(this._dimensions={x:t.width,y:t.height},e.texImage2D(this._target,0,this._internalFormat,this._internalFormat,e.UNSIGNED_BYTE,t)):(this._dimensions={x:t[1].x,y:t[1].y},e.texImage2D(this._target,0,this._internalFormat,t[1].x,t[1].y,0,this._internalFormat,e.UNSIGNED_BYTE,t[0])),this.unbind(e)}create(e,t,n){e.bindTexture(e.TEXTURE_2D,this._texture),e.texImage2D(e.TEXTURE_2D,0,this._internalFormat,t,n,0,this._internalFormat,e.UNSIGNED_BYTE,null),e.bindTexture(e.TEXTURE_2D,null),this._dimensions={x:t,y:n}}bind(e,t,n){e.bindTexture(this._target,this._texture),t&&t!==this.wrap&&(e.texParameteri(this._target,e.TEXTURE_WRAP_S,t),e.texParameteri(this._target,e.TEXTURE_WRAP_T,t),this.wrap=t),n&&n!==this.filter&&(e.texParameteri(this._target,e.TEXTURE_MIN_FILTER,n),e.texParameteri(this._target,e.TEXTURE_MAG_FILTER,n),this.filter=n)}unbind(e){e.bindTexture(this._target,null)}destroy(e){e.deleteTexture(this._texture)}resize(e,t,n=!1,r=e.RGBA){if(!k_(t))return console.error(`[GlTexture] Trying to resize texture with invali
68d dimensions: `,t),{x:0,y:0};let i=this._internalFormat!==r,a=!!this._dimensions,o=a&&(this._dimensions.x!==t.x||this._dimensions.y!==t.y),s=n&&this._dimensions&&t.x<=this._dimensions.x&&t.y<=this._dimensions.y;this._uvDownScale={x:1,y:1};let c=!0;return a&&(!o||o&&s)?(i||(c=!1),this._uvDownScale={x:t.x/this._dimensions.x,y:t.y/this._dimensions.y}):this._dimensions=t,this._internalFormat=r,c&&this.reallocate(e),this._uvDownScale}reallocate(e){let t=I_(this._internalFormat);this.bind(e),e.texImage2D(this._target,0,this._internalFormat,this._dimensions.x,this._dimensions.y,0,t,e.UNSIGNED_BYTE,null),this.unbind(e)}setupProfiling(){let e=document.querySelector(`.texture-count.textures`);e&&(X.el=e);let t=document.querySelector(`.texture-count.texture-memory`);t&&(X.el2=t),e&&t&&(X.setup=!0)}updateProfilingStats(e){if(X.setup||this.setupProfiling(),e)X.el&&(X.numTextures--,X.el.innerHTML=`${X.numTextures}`),X.memoryUsage-=this._usedMemory,this._usedMemory=0;else{this._usedMemory>0&&(X.memoryUsage-=this._usedMemory);let e=F_(this._internalFormat);this._usedMemory=e*this.dimensions.x*this.dimensions.y,X.memoryUsage+=this._usedMemory}X.memoryUsage<0&&(X.memoryUsage=0),X.el2&&(X.el2.innerHTML=`${(X.memoryUsage/(1<<20)).toFixed(1)}MB`)}};C(Kg,`numTextures`,0);var qg=class e{constructor(t){C(this,`ident`,`gl-renderer`),C(this,`meshes`,[]),C(this,`uniforms`,new Map),C(this,`dirtyUniforms`,new Set),C(this,`uniformTextures`,new Map),C(this,`_program`,void 0),C(this,`renderReady`,!1),C(this,`clearColor`,void 0),C(this,`rendererId`,e.numRenderers++),this.ident=t}static reset(){e.numRenderers=0}initFromSources(e,t,n){try{let r=Gg.constructWithSources(e,t,n,`${this.ident}-${this.rendererId}-program`);this._program=r,this.renderReady=!0}catch(e){if(e instanceof C_)R_(this.ident,e);else throw console.error(e),e}}render(e,t=e.TRIANGLES,n=0){!this.renderReady||this.meshes.length===0||(this._program.use(e),this.bindUniforms(e),this.meshes.forEach(r=>{r.render(e,this._program,t,n)}),e.useProgram(null))}updateUniformValue(e,t){let n=this.uniformTextures.has(e),r=n?this.uniformTextures.get(e):this.uniforms.get(e);if(r){if(r.value=t,n){this.uniformTextures.set(e,r),this.dirtyUniforms.add(e);return}this.uniforms.set(e,r),this.dirtyUniforms.add(e)}}registerUniformRecord(e,t,n,r=null){if(!this._program)throw Error(`Shader program is not initialized yet`);let i=e.getUniformLocation(this._program.getProgram(),t);if(i===null)return!1;let a={uniformId:t,uniformLocation:i,glDataType:n,value:r};return n===1?(this.uniformTextures.set(t,a),this.dirtyUniforms.add(t)):(this.uniforms.set(t,a),this.dirtyUniforms.add(t)),!0}isUniformRecordRegistered(e){return this.uniforms.has(e)}addMesh(e){this.meshes.push(e)}getAttachedShader(){return this._program}destroy(e){this.meshes.forEach(t=>{t.destroy(e)}),this._program.destroy(e),this.uniforms.clear()}setClearColor(e){this.clearColor=e}clear(e){var t;let n=(t=this.clearColor)==null?{x:0,y:0,z:0,w:0}:t;e.clearColor(n.x,n.y,n.z,n.w),e.clear(e.COLOR_BUFFER_BIT)}
68bindUniforms(e){this.dirtyUniforms.forEach(t=>{let n=this.uniformTextures.has(t)?this.uniformTextures.get(t):this.uniforms.get(t);if(!n||n.value==null||n.value==null)return;let r=n.value instanceof Function?n.value():n.value;if(n.value===null||n.value===void 0)throw Error(`[GlRenderer] Uniform value is empty`);switch((r==null?void 0:r.y)!==void 0&&(r=new Float32Array(Object.values(r))),n.glDataType){case 5:e.uniform1f(n.uniformLocation,r);break;case 0:e.uniform1i(n.uniformLocation,r);break;case 2:e.uniform4fv(n.uniformLocation,r);break;case 6:e.uniform3fv(n.uniformLocation,r);break;case 4:e.uniform2fv(n.uniformLocation,r);break;case 7:e.uniform1fv(n.uniformLocation,r);break;case 8:e.uniform4fv(n.uniformLocation,r);break;case 3:e.uniformMatrix4fv(n.uniformLocation,!1,r);break;case 1:{let r=parseInt(t.split(`l`)[1]);if(isNaN(r))return;e.uniform1i(n.uniformLocation,r);break}}}),this.dirtyUniforms.clear(),this.bindTextures(e)}bindTextures(e){let t=new Set,n={};this.uniformTextures.forEach((r,i)=>{if(!r||r.value==null||r.value==null)return;let a=r.value instanceof Function?r.value():r.value;if(r.value===null||r.value===void 0)throw Error(`[GlRenderer] Uniform value is empty`);let o=parseInt(i.split(`l`)[1]);isNaN(o)?n[i]=[r.uniformLocation,a]:(e.activeTexture(e.TEXTURE0+o),a instanceof Kg?a.bind(e):e.bindTexture(e.TEXTURE_2D,a),t.add(o))});let r=0;Object.entries(n).forEach(([n,[i,a]])=>{for(;t.has(r);)r++;e.activeTexture(e.TEXTURE0+r),a instanceof Kg?a.bind(e):e.bindTexture(e.TEXTURE_2D,a),e.uniform1i(i,r++)})}};C(qg,`numRenderers`,0);var Jg=y({createFullRenderingParams:()=>t_,emitter:()=>Yg,getDataZoom:()=>e_,getTrans:()=>Qg,tileW:()=>Zg,zoom2zoom:()=>Xg});const Yg=new Bn({ident:`render`}),Xg={extreme:[0,0,1,2,3,4,4,5,5,6,6,6,6,6,6,6,6,6,6,6,6],ultra:[0,0,0,2,3,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5],high:[0,0,0,2,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4],normal:[0,0,0,2,2,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4],low:[0,0,0,1,1,1,1,1,2,2,2,3,3,3,3,3,3,3,3,3,3]},Zg=e=>2**e,Qg=(e,t)=>Zg(e)/Zg(t),$g=Object.keys(Xg),e_=(e,t)=>{if(!e)return t;if(e.dataTilesZoom)return e.dataTilesZoom;let n=e.dataQuality,r=Xg[e.upgradeDataQuality?$g[Math.max($g.indexOf(n)-1,0)]:n][t];return e.maxTileZoom?Math.min(ru()?e.maxTileZoom.premium:e.maxTileZoom.free,r):r},t_=async(e,t,n)=>{let r=xl[e],i=K[r.product||t.product],a=w(w({},t),{},{layer:r.ident,JPGtransparency:r.JPGtransparency||i.JPGtransparency,PNGtransparency:r.PNGtransparency||i.PNGtransparency,maxTileZoom:r.maxTileZoom||i.maxTileZoom,transformR:r.transformR,transformG:r.transformG,transformB:r.transformB,directory:i.directory,dataQuality:r.dataQuality||i.dataQuality,upgradeDataQuality:i.betterDataQuality&&i.betterDataQuality.includes(r.ident),refTime:``,fullPath:``,path:``},r.renderParams);if([`satellite`,`radar`].includes(i.ident))return a;let o=await i.getRefTime(),s=await i.getCalendar();if(!s||!o)throw Error(`createFullRenderingParams: Calendar or refTime is not defined`);let c=s.ts2path(n),l;l=r.levels?r.levels.includes(t.level)?t.level:r.levels[0]:t.level;let u=r.fileSuffix||i.fileSuffix,d=r.filename||t.overlay||r.ident,f=`${be}/im/v3.0/${i.directory}/${o}/${c}/wm_grid_257/<z>/<x>/<y>/`,p=r.renderer===`accumulations`?`${d}-surface.${u}?next=${t.acRange}h`:r.renderer===`levelsRange`?`${d}-${t.levelsRange}.${u}`:`${d}-${l}.${u}`,m=`${f}${r.query?Vt(p,r.query):p}`;return a.refTime=o,a.fullPath=m,a.path=c,a};let n_=null,r_=null,i_=!1,a_=`glContextUtils`;function o_(e,t){a_=t,n_&&m_(n_),n_=e.canvas,r_=e,i_=!1,p_(n_)}function s_(e){return!!e&&typeof e.isContextLost==`function`}function c_(){if(r_&&s_(r_))try{return r_.isContextLost()}catch(e){}return!1}function l_(e){e.preventDefault(),!i_&&queueMicrotask(()=>{i_||c_()&&(i_=!0,d_())})}function u_(){i_=!1,requestAnimationFrame(()=>{c_()||f_()})}function d_(){Yg.emit(`contextLost`),P.emit(`glContextLost`),O(a_,`Canvas context is lost`,void 0)}function f_(){Yg.emit(`contextRestored`),P.emit(`glContextRestored`),O(a_,`Canvas context is restored`,void 0)}function p_(e){e.addEventListener(`webglcontextlost`,l_,!1),e.addEventListener(`webglcontextrestored`,u_,!1)}function m_(e){e.removeEventListener(`webglcontextlost`,l_,!1),e.removeEventListener(`webglcontextrestored`,u_,!1)}P.on(`glLoseContext`,()=>{}),P.on(`glRestoreContext`,()=>{});const Z=window.WebGLRenderingContext,h_=new Map([[Z.NO_ERROR,`NO_ERROR`],[Z.INVALID_ENUM,`INVALID_ENUM`],[Z.INVALID_VALUE,`INVALID_VALUE`],[Z.INVALID_OPERATION,`INVALID_OPERATION`],[Z.INVALID_FRAMEBUFFER_OPERATION,`INVALID_FRAMEBUFFER_OPERATION`],[Z.OUT_OF_MEMORY,`OUT_OF_MEMORY`],[Z.CONTEXT_LOST_WEBGL,`CONTEXT_LOST_WEBGL`]]),g_=(function(){let e=new ArrayBuffer(2);return new DataView(e).setInt16(0,256,!0),new Int16Array(e)[0]===256})(),__=e=>e.charAt(0)===`a`,v_=e=>e.charAt(0)===`u`||e.charAt(0)===`s`;var y_=class e{constructor(t=!1,n=!1){C(this,`id`,void 0),C(this,`glId`,0),C(this,`maxTextureSize`,0),C(this,`_name`,void 0),C(this,`keepRefs`,void 0),C(this,`keepRefsShaders`,void 0),C(this,`framebuffers`,void 0),C(this,`buffers`,void 0),C(this,`shaders`,void 0),C(this,`programs`,void 0),C(this,`textures`,void 0),C(this,`_gl`,void 0),C(this,`canvas`,void 0),C(this,`isGlError`,!1),C(this,`lastGlErrorMsg`,``),this.id=e.newId++,this.keepRefs=t,this.keepRefsShaders=n,this.reset()}reset(){this.framebuffers=[],this.buffers=[],this.shaders=[],this.programs=[],this.textures=[],this._gl=null,this.glId=0,this.canvas=null}create(t,n,r){if(this._name=r,!Ah())return null;if(!(this._gl||this.canvas))return this.canvas=t,this._gl=t.getContext(`webgl`,n)||t.getContext(`experimental-webgl`,
68n),this._gl&&(this.glId=e.newGlId++,this.maxTextureSize=this._gl.getParameter(Z.MAX_TEXTURE_SIZE)),o_(this._gl,`GlObj_${this._name}`),this._gl}gl(){return this._gl}get(){return this.gl()}getCanvas(){return this.canvas}createShader(e,t,n){let r=this.gl();if(!r)return null;let i=r.createShader(t?r.VERTEX_SHADER:r.FRAGMENT_SHADER);if(i&&(this.keepRefsShaders&&this.shaders.push(i),r.shaderSource(i,e),r.compileShader(i),!r.getShaderParameter(i,r.COMPILE_STATUS))){let e=r.getShaderInfoLog(i)||`getShaderInfoLog is null`,a=Error(e);throw a.contextLost=r.isContextLost(),a.isVertexShader=t,a.name=n||`shader`,a.full=`ERROR compileShader! name: ${a.name}; (${a.isVertexShader?`VS`:`FS`}); (${this.getGlStatus()}); msg: ${a.message}`,a}return i}createProgramObj(e,t,n,r){let i=this.gl();if(!i)return null;let a=i.createProgram(),o={program:a},s=``,c,l;if(a){if(this.keepRefs&&this.programs.push(a),n&&n.length>0)for(c=0;c<n.length;c++)s+=`#define `+n[c]+`
69`;let u=this.createShader(s+e,!0,r),d=this.createShader(s+t,!1,r);if(!u||!d)throw l=Error(`vertexShader or fragmentShader is null; name: `+r),l;{if(i.attachShader(a,u),i.attachShader(a,d),i.linkProgram(a),!i.getProgramParameter(a,i.LINK_STATUS)){let e=i.getProgramInfoLog(a)||`getProgramInfoLog is null`;throw l=Error(e),l.contextLost=i.isContextLost(),l.name=r||`shader`,l.full=`ERROR linkProgram! name: ${l.name}; ${this.getGlStatus()}`,l}let e=i.getProgramParameter(a,i.ACTIVE_ATTRIBUTES);for(c=0;c<e;c++){let e=i.getActiveAttrib(a,c);if(e){let t=e.name;if(__(t))o[t]=i.getAttribLocation(a,e.name);else throw`Invalid attribute name "${t}"`}}let t=i.getProgramParameter(a,i.ACTIVE_UNIFORMS);for(c=0;c<t;c++){let e=i.getActiveUniform(a,c);if(e){let t=i.getUniformLocation(a,e.name),n=e.name,r=n.indexOf(`[`);if(r>0&&(n=n.substring(0,r)),v_(n))o[n]=t;else throw`Invalid uniform name "${n}"`}}}}else throw l=Error(),l.full=`gl.createProgram() is null; name: ${r}; ${this.getGlStatus()}`,l;return o}bindAttribute(e,t,n,r,i,a,o){let s=this.gl();s&&(s.bindBuffer(Z.ARRAY_BUFFER,e),s.enableVertexAttribArray(t),s.vertexAttribPointer(t,n,r,i,a,o))}textureFromUrlPromise(e,t,n,r,i,a){return new Promise(o=>{let s=new Image,c=this.createTexture2D(n,r,i,null,1,1,Z.RGBA);s.onload=()=>{this.resizeTexture2D(c,s,s.width,s.height,Z.RGBA,a),o([e,c])},s.crossOrigin=``,s.src=t})}createTextureFromBase64(e,t,n,r,i){let a=new Image,o=this.createTexture2D(e,t,n,null,1,1,Z.RGBA);return a.onload=()=>{this.resizeTexture2D(o,a,a.width,a.height,Z.RGBA,i)},a.src=r,o}createTexture2D(e,t,n,r,i,a,o,s){let c=this.gl();if(c){let l=c.createTexture();return l&&(this.keepRefs&&this.textures.push(l),l._width=i,l._height=a,c.bindTexture(c.TEXTURE_2D,l),this.setBindedTexture2DParams(e,t,n)),this.resizeTexture2D(l,r,i,a,o,s)}return null}resizeTexture2D(e,t,n,r,i,a){if(!e)return e;let o=this.gl();if(i=i||Z.RGBA,e._width=n,e._height=r,e._format=i,o){if(o.bindTexture(Z.TEXTURE_2D,e),Array.isArray(t)){let e=n,s=r;o.pixelStorei(Z.UNPACK_ALIGNMENT,e>4?4:1);for(let n=0;n<t.length;n++){e===4&&o.pixelStorei(Z.UNPACK_ALIGNMENT,1);let r=t[n];r===null||ArrayBuffer.isView(r)?o.texImage2D(Z.TEXTURE_2D,n,i,e,s,0,i,Z.UNSIGNED_BYTE,r):o.texImage2D(Z.TEXTURE_2D,n,i,i,Z.UNSIGNED_BYTE,r),e=Math.max(e>>1,1),s=Math.max(s>>1,1)}a=!1}else t===null||ArrayBuffer.isView(t)?o.texImage2D(Z.TEXTURE_2D,0,i,n,r,0,i,Z.UNSIGNED_BYTE,t):o.texImage2D(Z.TEXTURE_2D,0,i,i,Z.UNSIGNED_BYTE,t);a&&o.generateMipmap(Z.TEXTURE_2D),o.bindTexture(Z.TEXTURE_2D,null)}return e}deleteTexture2D(t){var n;e.removeFromArray(t,this.textures),(n=this.gl())==null||n.deleteTexture(t)}bindTexture2D(e,t,n){let r=this.gl();r&&(r.activeTexture(Z.TEXTURE0+(t||0)),r.bindTexture(Z.TEXTURE_2D,e),n&&r.uniform1i(n,t))}setBindedTexture2DParams(e,t,n,r){let i=this.gl();i&&(i.texParameteri(Z.TEXTURE_2D,Z.TEXTURE_MIN_FILTER,e),i.texParameteri(Z.TEXTURE_2D,Z.TEXTURE_MAG_FILTER,t),i.texParameteri(Z.TEXTURE_2D,Z.TEXTURE_WRAP_S,n),i.texParameteri(Z.TEXTURE_2D,Z.TEXTURE_WRAP_T,r||n))}createBuffer(e){let t=this.gl(),n=null;return t&&(n=t.createBuffer(),n&&(this.keepRefs&&this.buffers.push(n),this.setBufferData(n,e))),n}setBufferData(e,t){let n=this.gl();n&&(n.bindBuffer(Z.ARRAY_BUFFER,e),n.bufferData(Z.ARRAY_BUFFER,t,Z.STATIC_DRAW))}createIndexBuffer(e){let t=this.gl(),n=null;return t&&(n=t.createBuffer(),this.keepRefs&&n&&this.buffers.push(n),t.bindBuffer(Z.ELEMENT_ARRAY_BUFFER,n),t.bufferData(Z.ELEMENT_ARRAY_BUFFER,e,Z.STATIC_DRAW)),n}bindFramebuffer(e,t){let n=this.gl();n&&(n.bindFramebuffer(n.FRAMEBUFFER,e),t&&n.framebufferTexture2D(Z.FRAMEBUFFER,Z.COLOR_ATTACHMENT0,Z.TEXTURE_2D,t,0))}release(){let e=this._gl;if(e){e.flush(),e.finish();let t=this.textures.length,n,r;for(n=0;n<t;n++)r=this.textures[n],e.isTexture(r)&&e.deleteTexture(r);for(t=this.programs.length,n=0;n<t;n++)r=this.programs[n],e.isProgram(r)&&e.deleteProgram(r);for(t=this.shaders.length,n=0;n<t;n++)r=this.shaders[n],e.isShader(r)&&e.deleteShader(r);for(t=this.buffers.length,n=0;n<t;n++)r=this.buffers[n],e.isBuffer(r)&&e.deleteBuffer(r);for(t=this.framebuffers.length,n=0;n<t;n++)r=this.framebuffers[n],e.isFramebuffer(r)&&e.deleteFramebuffer(r);this.reset()}}checkGlError(){let e=!0,t=`GL CONTEXT STATUS: `;if(this._gl){let n=this._gl.isContextLost(),r=this._gl.getError();if(n)t+=`GL CONTEXT LOST!`;else if(r===Z.NO_ERROR)t+=`no error.`,e=!1;else{let e=h_.get(r);t+=`${e} (code: ${r})!; contextLost: ${n}`}}else t+=`gl is null!`;return this.isGlError=e,this.lastGlErrorMsg=t,e}getGlStatus(){return this.checkGlError(),this.lastGlErrorMsg}static getNextPowerOf2Size(e){return 2<<Math.floor(Math.log2(e-1))}static removeFromArray(e,t){let n=-1;for(let r=0;r<t.length;r++)t[r]===e&&(n=r);return n>-1&&t.splice(n,1),n}};C(y_,`littleEndian`,g_),C(y_,`newId`,0),C(y_,`newGlId`,1);var b_=class{constructor(e){C(this,`_last`,null),C(this,`_gl`,void 0),C(this,`_fbo`,void 0),this._gl=e;let t=e.createFramebuffer();if(!t)throw Error(`Failed to create a framebuffer object.`);this._fbo=t}bind(){this._gl.bindFramebuffer(this._gl.FRAMEBUFFER,this._fbo)}dispose(){this._gl.deleteFramebuffer(this._fbo)}ensureTextureBound(e){e!==this._last&&(this._gl.framebufferTexture2D(this._gl.FRAMEBUFFER,this._gl.COLOR_ATTACHMENT0,this._gl.TEXTURE_2D,e,0),this._last=e)}unbind(){this._gl.bindFramebuffer(this._gl.FRAMEBUFFER,null)}},x_=class{constructor(e){C(this,`_gl`,void 0),C(this,`_texFbo`,void 0),C(this,`_requests`,[]),C(this,`_availablePbos`,[]),C(this,`_pendingPboReads`,[]),C(this,`_pboLoop`,void 0),C(this,`_disposed`,!1),this._gl=e,this._texFbo=new b_(e),this._pboLoop=setInterval(()=>{this._updatePboReads(),this._executeReads()},17)}dispose(){this._disposed=!0,(!re(this._gl)||this._pendingPboReads.length===0)&&this._cleanUp()}async readPixels(e,t,n,r,i,a){var o=this;if(o._disposed)throw Error(`Attempted to read pixels from a disposed PixelReader.`);return o._gl.isContextLost()?null:new Promise(s=>{o._requests.push({sampleX:t,sampleY:n,width:r,height:i,texture:e,resolve:s,abort:a})})}_executeReads(){let e=[];for(let t of this._requests)!t.abort||!t.abort.aborted?e.push(t):t.resolve(null);this._requests=e,this._requests.length!==0&&(re(this._gl)?this._executeReadsPBO(this._gl):this._executeReadsSync())}_executeReadsSync(){let e=this._gl;this._texFbo.bind();for(let t=0;t<4&&t<this._requests.length;t++){let n=this._requests[t];this._texFbo.ensureTextureBound(n.texture);let r=new Uint8Array(n.width*n.height*4);e.readPixels(n.sampleX,n.sampleY,n.width,n.height,e.RGBA,e.UNSIGNED_BYTE,r),n.resolve(r)}this._texFbo.unbind(),this._requests.splice(0,Math.min(4,this._requests.length))}_executeReadsPBO(e){let t=this._requests.splice(0,Math.min(this._requests.length,64)),n=0;for(let e of t)n+=e.width*e.height*4;let r=this._availablePbos.pop();if(!r){let t=e.createBuffer();if(!t)throw Error(`Failed to create WebGL buffer.`);r={buffer:t,size:0}}e.bindBuffer(e.PIXEL_PACK_BUFFER,r.buffer),r.size<n&&e.bufferData(e.PIXEL_PACK_BUFFER,n,e.STREAM_READ);let i=0;this._texFbo.bind();for(let n of t)this._texFbo.ensureTextureBound(n.texture),e.readPixels(n.sampleX,n.sampleY,n.width,n.height,e.RGBA,e.UNSIGNED_BYTE,i),i+=n.width*n.height*4;this._texFbo.unbind(),e.bindBuffer(e.PIXEL_PACK_BUFFER,null);let a=e.fenceSync(e.SYNC_GPU_COMMANDS_COMPLETE,0);if(!a)throw Error(`Failed to create WebGL fence sync.`);e.flush();let o={pbo:r,requests:[...t],size:n,sync:a};this._pendingPboReads.push(o)}_updatePboReads(){let e=this._gl;if(!re(e))return;let t=[];for(let n of this._pendingPboReads){let r=e.clientWaitSync(n.sync,0,0);if(r===e.CONDITION_SATISFIED||r===e.ALREADY_SIGNALED){let t=new Uint8Array(n.size);e.bindBuffer(e.PIXEL_PACK_BUFFER,n.pbo.buffer),e.getBufferSubData(e.PIXEL_PACK_BUFFER,0,t,0,n.size),e.bindBuffer(e.PIXEL_PACK_BUFFER,null),e.deleteSync(n.sync),this._availablePbos.push(n.pbo);let r=0;for(let e of n.requests){let n=e.width*e.height*4,i=t.subarray(r,r+n);e.resolve(i),r+=n}}else t.push(n)}
69this._pendingPboReads=t,this._disposed&&t.length===0&&this._cleanUp()}_cleanUp(){clearInterval(this._pboLoop),this._pboLoop=-1;for(let e of this._requests)e.resolve(null);if(!this._gl.isContextLost()){this._texFbo.dispose();for(let e of this._availablePbos)this._gl.deleteBuffer(e.buffer)}this._availablePbos=[],this._requests=[]}},S_=y({GlBuffer:()=>Vg,GlBufferType:()=>zg,GlBufferUsage:()=>Bg,GlError:()=>C_,GlExtension:()=>E_,GlMesh:()=>Ug,GlObj:()=>y_,GlProgram:()=>Gg,GlRenderer:()=>qg,GlTexture:()=>Kg,GlVertexArray:()=>Hg,GlslDataType:()=>w_,MeshFactory:()=>Wg,PixelReader:()=>x_,checkGlError:()=>L_,checkTextureDimensions:()=>k_,createPlaceHolderTexture:()=>j_,createPlaceholderFbo:()=>A_,createPlaceholderImageData:()=>M_,createShaderFromSource:()=>O_,createShaderProgram:()=>D_,getTextureFormatByInternalFormat:()=>I_,glUtils:()=>T_,logErrorWebGL:()=>R_,sizeOf:()=>F_}),C_=class extends Error{constructor(e,t,n=!1){super(e,t),C(this,`additionalInfo`,{}),C(this,`emitToElastic`,!1),this.additionalInfo=(t==null?void 0:t.additionalInfo)||{},this.emitToElastic=n}toObject(){return{message:this.message,additionalInfo:this.additionalInfo,cause:this.cause,emitToElastic:this.emitToElastic}}};let w_=function(e){return e[e.Int=0]=`Int`,e[e.Texture=1]=`Texture`,e[e.FVec4=2]=`FVec4`,e[e.Mat4=3]=`Mat4`,e[e.FVec2=4]=`FVec2`,e[e.Float=5]=`Float`,e[e.FVec3=6]=`FVec3`,e[e.FloatArray=7]=`FloatArray`,e[e.FVec4Array=8]=`FVec4Array`,e}({});const T_={placeholderImageDataEmpty:void 0,placeholderTextureEmpty:void 0,placeholderImageDataGrey128:void 0,placeholderTextureGrey128:void 0,placeholderTexture:void 0,placeholderFbo:void 0};var E_=class e{static getExtension(t,n){if(e.glExtensions.has(n)||e.setExtension(t,n))return e.glExtensions.get(n)}static setExtension(t,n){var r;if((r=t.getSupportedExtensions())!=null&&r.includes(n)){let r=t.getExtension(n);if(r)return e.glExtensions.set(n,r),!0;console.error(`[GlExtension] could not retrieve ${n} extension context`)}return console.error(`[GlExtension] Extension ${n} does not exist or is not supported by the device`),!1}static unloadExtensions(){e.glExtensions.clear()}};C(E_,`glExtensions`,new Map);function D_(e,t,n){let r=e.createProgram();if(!r)throw new C_(`Failed to create program`);if(e.attachShader(r,t),e.attachShader(r,n),e.linkProgram(r),!e.getProgramParameter(r,e.LINK_STATUS)){let t=e.getProgramInfoLog(r);throw new C_(`Failed to link shader program`,{additionalInfo:{programLog:t==null?``:t}},!0)}return r}function O_(e,t,n){let r=e.createShader(n);if(!r)throw new C_(`Failed to create shader object`);e.shaderSource(r,t),e.compileShader(r);let i=e.getShaderParameter(r,e.COMPILE_STATUS);if(!i){let a=e.getShaderInfoLog(r),o=n===e.VERTEX_SHADER?`VERTEX`:`FRAGMENT`,s=z_(t),c=``;s||(c=t.length>255?t.substring(0,255)+`...`:t);let l=`${o} shader compilation failed`,u={},d=e.isContextLost();throw d||(u={lastGlError:String(e.getError()),glVersion:e.getParameter(e.VERSION),glslVersion:e.getParameter(e.SHADING_LANGUAGE_VERSION),renderer:e.getParameter(e.RENDERER)}),new C_(l,{additionalInfo:w({filename:s==null?`unknown`:s,shaderLog:a||`No error log provided by driver`,compileStatus:String(i),contextLost:String(d),shaderSource:c},u)},!0)}return r}function k_(e){let t={x:8196,y:8196},n=e.x>0&&e.y>0,r=e.x<t.x&&e.y<t.y;return n&&r}function A_(e){if(!T_.placeholderTexture)return;let t=e.createFramebuffer();t&&(e.bindFramebuffer(e.FRAMEBUFFER,t),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,T_.placeholderTexture,0),T_.placeholderFbo=t,e.bindFramebuffer(e.FRAMEBUFFER,null))}function j_(e,t){let n=e.createTexture();if(n)return e.bindTexture(e.TEXTURE_2D,n),t instanceof HTMLCanvasElement||t instanceof HTMLImageElement?e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t):e.texImage2D(e.TEXTURE_2D,0,e.RGBA,1,1,0,e.RGBA,e.UNSIGNED_BYTE,new Uint8Array([255,0,0,255])),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),e.bindTexture(e.TEXTURE_2D,null),n}async function M_(e){let t=N_();if(t)T_.placeholderImageDataEmpty=await P_(t),T_.placeholderTextureEmpty=j_(e,t);else throw Error(`Failed to create empty placeholder canvas`);let n=N_(`rgb(128, 128, 128)`);if(n)T_.placeholderImageDataGrey128=await P_(n),T_.placeholderTextureGrey128=j_(e,n);else throw Error(`Failed to create 128 grey placeholder canvas`)}function N_(e){let t=document.createElement(`canvas`);t.width=1,t.height=1;let n=t.getContext(`2d`);return n?(n.fillStyle=e==null?`rgba(0, 0, 0, 0.0)`:e,n.rect(0,0,1,1),n.fill(),t):null}function P_(e){return new Promise(t=>{e.toBlob(e=>{let n=new FileReader;n.onloadend=()=>{let e=n.result;e&&t(e)},e&&n.readAsArrayBuffer(e)},`image/png`)})}function F_(e){let t=4;switch(e){case WebGLRenderingContext.RGBA:case WebGLRenderingContext.FLOAT:t=4;break;case WebGLRenderingContext.RGB:t=3;break;case WebGLRenderingContext.LUMINANCE_ALPHA:case WebGLRenderingContext.UNSIGNED_SHORT:t=2;break;case WebGLRenderingContext.LUMINANCE:case WebGLRenderingContext.ALPHA:case WebGLRenderingContext.UNSIGNED_BYTE:t=1;break}if(bb.isWebGl2)switch(e){case WebGL2RenderingContext.RG8:t=2;break;case WebGL2RenderingContext.R8:t=1;break}return t}function I_(e){let t=e;if(!bb.isWebGl2)return t;switch(e){case WebGL2RenderingContext.RG8:t=WebGL2RenderingContext.RG;break;case WebGL2RenderingContext.R8:t=WebGL2RenderingContext.RED;break}return t}function L_(e,t){let n=e.getError();return n>0?(console.error(`%c [GlError] WebGL error occurred - errno: %c${n} %c(${t})`,`color:white`,`color:red`,`color:white`),!1):!0}function R_(e,t){if(t.emitToElastic){let n={webglVersion:bb.context};O(e,t.message,t,{extra:w(w({},n),t.additionalInfo)})}}function z_(e){for(let t of[/\/\/\s*file:\s*(.+)/i,/\/\*\s*file:\s*(.+?)\s*\*\//i,/#define\s+FILE\s+"(.+?)"/i]){let n=e.match(t);if(n&&n[1])return n[1].trim()}return null}var B_=y({createGradientObject:()=>K_,dataQualityToZoomOffset:()=>J_,decodeHeader:()=>H_,decodeImage:()=>X_,decodeImageBytesCompact:()=>Y_,decodedTileDataSize:()=>257,imageBitmapToUint8Array:()=>W_,prepareRainPattern:()=>q_,processHeader:()=>U_,tileLayerZoomBounds:()=>V_});const V_={x:2,y:11};function H_(e,t){let n,r,i,a,o=new ArrayBuffer(28),s=new Uint8Array(o),c=new Float32Array(o),l=t*4*4+8;for(a=0;a<28;a++)n=e[l],r=e[l+1],i=e[l+2],n=Math.round(n/64),r=Math.round(r/16),i=Math.round(i/64),s[a]=(n<<6)+(r
69<<2)+i,l+=16;return c}function U_(e){return{decoderRmin:e[0],decoderRstep:(e[1]-e[0])/255,decoderGmin:e[2],decoderGstep:(e[3]-e[2])/255,decoderBmin:e[4],decoderBstep:(e[5]-e[4])/255}}function W_(e){let t=document.createElement(`canvas`);t.width=e.width,t.height=e.height;let n=t.getContext(`2d`,{desynchronized:!0,willReadFrequently:!0});if(!n)throw Error(`Could not get 2D context`);n.drawImage(e,0,0);let r=n.getImageData(0,0,t.width,t.height);return new Uint8Array(r.data.buffer)}function G_(e){let t=1;for(;t<e;)t*=2;return t}function K_(e,t){try{let n=Math.min(t.steps,2048),r=G_(n),i=n/((t.max-t.min)*r),a=-i*t.min,o=r*4,s=new mo(t.getColorGradient(),n,t.min,t.max,!1,!1).precomputedColors;if(s.byteLength<o){let e=new Uint8Array(o);if(e.set(s),s.byteLength>7){let t=new Uint8Array(4);for(let e=0;e<4;e++)t[e]=s[s.byteLength-8+e];for(let n=s.byteLength-4;n<o;n+=4)e.set(t,n)}s=e}else s.byteLength>o&&(s=new Uint8Array(s.buffer,0,o));let c=new Kg(e);return c.resize(e,{x:r,y:1}),c.bind(e,e.CLAMP_TO_EDGE,e.LINEAR),c.updateContent(e,[s,{x:r,y:1}]),{texture:c,mul:i,add:a}}catch(e){}return null}function q_(e){let t=new Uint8Array(16),n=[128,192,58,0],r=0;for(let e=0;e<2;e++)for(let i=0;i<2;i++){let a=n[(i&1)+((e&1)<<1)];for(let e=0;e<4;e++)t[r++]=a}let i=new Kg(e);return i.updateContent(e,[t,{x:2,y:2}],e.REPEAT,e.NEAREST),i}function J_(e){var t;return(t={low:3,normal:1,high:1,ultra:1,extreme:0}[e])==null?0:t}function Y_(e){let t=257*4,n=new Uint8Array(257*t);return n.set(e.subarray(8*t,265*t)),n}async function X_(e){return Z_(Y_(e),257,257)}function Z_(e,t,n){let r=document.createElement(`canvas`);r.width=t,r.height=n;let i=r.getContext(`2d`);if(!i)throw Error(`Could not get 2D context`);let a=new Uint8ClampedArray(e.buffer,e.byteOffset,e.byteLength),o=new ImageData(a,t,n);return i.putImageData(o,0,0),createImageBitmap(r)}var Q_=y({PreprocessedTileParams:()=>ev,TilePreprocessor:()=>tv,TilePreprocessorType:()=>$_});let $_=function(e){return e[e.NONE=0]=`NONE`,e[e.RADAR_FLOW=1]=`RADAR_FLOW`,e[e.RADAR_DATA_WEBP=2]=`RADAR_DATA_WEBP`,e[e.SATELLITE_DATA=3]=`SATELLITE_DATA`,e[e.SATELLITE_FLOW=4]=`SATELLITE_FLOW`,e[e.TILE_LAYER=5]=`TILE_LAYER`,e[e.RADAR_PTYPE=6]=`RADAR_PTYPE`,e}({});var ev=class{constructor(){C(this,`tileCoords`,void 0),C(this,`payload`,void 0)}},tv=class{},nv=`#version 300 es
70#define GLSLIFY 1
71in vec2 a_pos;out vec2 v_uv;void main(){v_uv=a_pos;gl_Position=vec4(a_pos*2.0f-1.0f,0.0f,1.0f);}`,rv=`#version 100
72#define GLSLIFY 1
73attribute vec2 a_pos;varying vec2 v_uv;void main(){v_uv=a_pos;gl_Position=vec4(a_pos*2.0-1.0,0.0,1.0);}`,iv=`#version 100
74precision mediump float;
75#define GLSLIFY 1
76vec4 debugUVBorder(vec2 texCoords,float borderWidth){float edge=min(min(texCoords.s,texCoords.t),min(1.0-texCoords.s,1.0-texCoords.t));float border=step(edge,borderWidth);return vec4(border);}vec3 checker(vec2 fragCoords){const float size=32.0;vec2 f=floor(mod(fragCoords,vec2(size))/vec2(size)+0.5);vec3 c=mod(f.x+f.y,2.0)==0.0 ? vec3(1.0): vec3(0.3);return c;}uniform sampler2D u_channel0;uniform int u_flipY;varying vec2 v_uv;void main(){float t=u_flipY>0 ? v_uv.t : 1.0-v_uv.t;gl_FragColor=texture2D(u_channel0,vec2(v_uv.s,t));}`,av=`#version 100
77precision mediump float;
78#define GLSLIFY 1
79uniform sampler2D u_channel0;varying vec2 v_uv;void main(){gl_FragColor=texture2D(u_channel0,v_uv);}`,ov=`#version 100
80#define GLSLIFY 1
81attribute vec2 a_pos;varying vec2 v_uv;void main(){v_uv=a_pos;gl_Position=vec4(a_pos*2.0-1.0,0.0,1.0);}`,sv=`#version 100
82precision mediump float;
83#define GLSLIFY 1
84uniform sampler2D u_channel0;varying vec2 v_uv;void main(){vec4 color=texture2D(u_channel0,vec2(v_uv.x,1.0-v_uv.y));gl_FragColor=color;}`,cv=`#version 100
85precision highp float;
86#define GLSLIFY 1
87#pragma tileLayer_defines
88#if !defined(BILINEAR_ALPHA) && defined(BICUBIC)
89#define BILINEAR_ALPHA
90#endif
91#if defined(USE_BLUE_CHANNEL) && !defined(PNG)
92#error The blue data texture channel is used both as opacity and as the main forecast value source . This is likely an error .
93#endif
94vec4 debugUVBorder_0(vec2 texCoords,float borderWidth){float edge=min(min(texCoords.s,texCoords.t),min(1.0-texCoords.s,1.0-texCoords.t));float border=step(edge,borderWidth);return vec4(border);}float cubicHermite(vec4 X,float t){mediump float a=-X.x*0.5+3.0*X.y*0.5-3.0*X.z*0.5+X.w*0.5;mediump float b=X.x-5.0*X.y*0.5+2.0*X.z-X.w*0.5;mediump float c=-X.x*0.5+X.z*0.5;mediump float d=X.y;mediump float tt=t*t;
94return clamp(a*tt*t+b*tt+c*t+d,0.0,1.0);}vec4 cubicHermiteVec4(vec4 A,vec4 B,vec4 C,vec4 D,float t){mediump vec4 a=-A*0.5+3.0*B*0.5-3.0*C*0.5+D*0.5;mediump vec4 b=A-5.0*B*0.5+2.0*C-D*0.5;mediump vec4 c=-A*0.5+C*0.5;mediump vec4 d=B;mediump float tt=t*t;return clamp(a*tt*t+b*tt+c*t+d,vec4(0.0),vec4(1.0));}varying vec2 v_uv;uniform sampler2D u_tex_main_data;uniform sampler2D u_tex_gradient_main;uniform highp vec4 u_data_tile_scale_offset;uniform float u_data_tile_size_rcp;uniform vec2 u_data_tile_size_usable;uniform vec4 u_header_data_rescale;uniform vec2 u_gradient_scale_offset;uniform float u_log_offset;uniform vec3 u_background_color;uniform vec4 u_pattern_scale_offset;uniform bool u_data_tile_missing;vec4 debugUVBorder(vec2 texCoords,float borderWidth){float edge=min(min(texCoords.s,texCoords.t),min(1.0-texCoords.s,1.0-texCoords.t));float border=step(edge,borderWidth);return vec4(border);}
95#define saturate(x) clamp(x, 0.0, 1.0)
96float remapSat(float value,float oldmin,float oldmax,float newmin,float newmax){return newmin+saturate((value-oldmin)/max(oldmax-oldmin,0.0001))*(newmax-newmin);}vec2 interpolateBilinear(lowp vec4 s11,lowp vec4 s12,lowp vec4 s21,lowp vec4 s22,highp vec4 w4){vec2 result=vec2(0.0);
97#ifdef USE_BLUE_CHANNEL
98result.x=dot(vec4(s11.b,s12.b,s21.b,s22.b),w4);
99#else
100result.x=dot(vec4(s11.r,s12.r,s21.r,s22.r),w4);
101#endif
102#ifdef VECTOR_SIZE
103result.y=dot(vec4(s11.g,s12.g,s21.g,s22.g),w4);
104#endif
105return result;}vec2 interpolateBicubic(lowp vec4 s11,lowp vec4 s12,lowp vec4 s21,lowp vec4 s22,highp vec4 sampleCoordsX,highp vec4 sampleCoordsY,highp vec2 f0,highp vec2 f1){lowp vec4 s00=texture2D(u_tex_main_data,vec2(sampleCoordsX[0],sampleCoordsY[0]));lowp vec4 s01=texture2D(u_tex_main_data,vec2(sampleCoordsX[1],sampleCoordsY[0]));lowp vec4 s02=texture2D(u_tex_main_data,vec2(sampleCoordsX[2],sampleCoordsY[0]));lowp vec4 s03=texture2D(u_tex_main_data,vec2(sampleCoordsX[3],sampleCoordsY[0]));lowp vec4 s10=texture2D(u_tex_main_data,vec2(sampleCoordsX[0],sampleCoordsY[1]));lowp vec4 s13=texture2D(u_tex_main_data,vec2(sampleCoordsX[3],sampleCoordsY[1]));lowp vec4 s20=texture2D(u_tex_main_data,vec2(sampleCoordsX[0],sampleCoordsY[2]));lowp vec4 s23=texture2D(u_tex_main_data,vec2(sampleCoordsX[3],sampleCoordsY[2]));lowp vec4 s30=texture2D(u_tex_main_data,vec2(sampleCoordsX[0],sampleCoordsY[3]));lowp vec4 s31=texture2D(u_tex_main_data,vec2(sampleCoordsX[1],sampleCoordsY[3]));lowp vec4 s32=texture2D(u_tex_main_data,vec2(sampleCoordsX[2],sampleCoordsY[3]));lowp vec4 s33=texture2D(u_tex_main_data,vec2(sampleCoordsX[3],sampleCoordsY[3]));vec2 result=vec2(0.0);
106#ifdef USE_BLUE_CHANNEL
107lowp vec4 b0=vec4(s00.b,s01.b,s02.b,s03.b);lowp vec4 b1=vec4(s10.b,s11.b,s12.b,s13.b);lowp vec4 b2=vec4(s20.b,s21.b,s22.b,s23.b);lowp vec4 b3=vec4(s30.b,s31.b,s32.b,s33.b);lowp vec4 b4=cubicHermiteVec4(b0,b1,b2,b3,f1.y);result.x=cubicHermite(b4,f1.x);
108#else
109lowp vec4 r0=vec4(s00.r,s01.r,s02.r,s03.r);lowp vec4 r1=vec4(s10.r,s11.r,s12.r,s13.r);lowp vec4 r2=vec4(s20.r,s21.r,s22.r,s23.r);lowp vec4 r3=vec4(s30.r,s31.r,s32.r,s33.r);lowp vec4 r4=cubicHermiteVec4(r0,r1,r2,r3,f1.y);result.x=cubicHermite(r4,f1.x);lowp float rMax=max(max(s11.r,s12.r),max(s21.r,s22.r));lowp float rMin=min(min(s11.r,s12.r),min(s21.r,s22.r));result.x=clamp(result.x,rMin,rMax);
110#endif
111#ifdef VECTOR_SIZE
112lowp vec4 g0=vec4(s00.g,s01.g,s02.g,s03.g);lowp vec4 g1=vec4(s10.g,s11.g,s12.g,s13.g);lowp vec4 g2=vec4(s20.g,s21.g,s22.g,s23.g);lowp vec4 g3=vec4(s30.g,s31.g,s32.g,s33.g);lowp vec4 gg=cubicHermiteVec4(g0,g1,g2,g3,f1.y);result.y=cubicHermite(gg,f1.x);
113#endif
114return result;}lowp float getOpacity(lowp vec4 s11,lowp vec4 s12,lowp vec4 s21,lowp vec4 s22,highp vec4 w4){
115#ifdef PNG
116#ifdef BILINEAR_ALPHA
117return max(sign(dot(vec4(s11.a,s12.a,s21.a,s22.a),w4)-0.66),0.0);
118#else
119return min(min(s11.a,s12.a),min(s21.a,s22.a));
120#endif
121#else
122#ifdef BILINEAR_ALPHA
123return 1.0-max(sign(dot(vec4(s11.b,s12.b,s21.b,s22.b),w4)-0.33),0.0);
124#else
125return 1.0-max(max(s11.b,s12.b),max(s21.b,s22.b));
126#endif
127#endif
128}vec4 getPixelColor(vec2 tc){if(u_data_tile_missing){return texture2D(u_tex_main_data,tc);}vec2 dataTileTexcoord=tc*u_data_tile_scale_offset.xy+u_data_tile_scale_offset.zw;vec2 dataTileTexcoordPixels=tc*u_data_tile_size_usable;highp vec2 f1=fract(dataTileTexcoordPixels);highp vec2 f0=vec2(1.0)-f1;highp vec4 w4=vec4(f0.y*f0.x,f0.y*f1.x,f1.y*f0.x,f1.y*f1.x);highp vec4 sampleCoordsX=vec4(dataTileTexcoord.x-u_data_tile_size_rcp,dataTileTexcoord.x,dataTileTexcoord.x+u_data_tile_size_rcp,dataTileTexcoord.x+u_data_tile_size_rcp*2.0);highp vec4 sampleCoordsY=vec4(dataTileTexcoord.y-u_data_tile_size_rcp,dataTileTexcoord.y,dataTileTexcoord.y+u_data_tile_size_rcp,dataTileTexcoord.y+u_data_tile_size_rcp*2.0);lowp vec4 s11=texture2D(u_tex_main_data,vec2(sampleCoordsX[1],sampleCoordsY[1]));lowp vec4 s12=texture2D(u_tex_main_data,vec2(sampleCoordsX[2],sampleCoordsY[1]));lowp vec4 s21=texture2D(u_tex_main_data,vec2(sampleCoordsX[1],sampleCoordsY[2]));lowp vec4 s22=texture2D(u_tex_main_data,vec2(sampleCoordsX[2],sampleCoordsY[2]));highp vec2 dataValues;
129#ifdef BICUBIC
130dataValues=interpolateBicubic(s11,s12,s21,s22,sampleCoordsX,sampleCoordsY,f0,f1);
131#else
132dataValues=interpolateBilinear(s11,s12,s21,s22,w4);
133#endif
134dataValues.x=dataValues.x*u_header_data_rescale.x+u_header_data_rescale.y;
135#ifdef LOG
136dataValues.x=max(0.0,pow(2.0,dataValues.x)+u_log_offset);
137#endif
138float mainValue=dataValues.x;
139#ifdef VECTOR_SIZE
140dataValues.y=dataValues.y*u_header_data_rescale.z+u_header_data_rescale.w;mainValue=length(dataValues);
141#endif
142vec3 resultColor=texture2D(u_tex_gradient_main,vec2(mainValue*u_gradient_scale_offset.x+u_gradient_scale_offset.y,0.5)).rgb;lowp float patternMask=1.0;
143#ifdef RAIN
144patternMask=remapSat(dataValues.x,0.07,0.13,0.0,1.0);
145#endif
146lowp float opacity=getOpacity(s11,s12,s21,s22,w4);return vec4(mix(u_background_color,resultColor,opacity),patternMask);}void main(){vec2 dataTileTexcoord=v_uv*u_data_tile_scale_offset.xy+u_data_tile_scale_offset.zw;
147#ifdef DISPLAY_RAW
148vec4 sample=texture2D(u_tex_main_data,dataTileTexcoord);gl_FragColor=vec4(sample.rgb,1.0);
149#else
150gl_FragColor=getPixelColor(v_uv);
151#endif
152#ifdef DEBUG_BORDER
153vec4 border=debugUVBorder(v_uv,0.005)*vec4(0.0,0.0,1.0,1.0)+debugUVBorder(v_uv,0.005)*vec4(1.0,0.0,1.0,1.0);gl_FragColor.rgb=mix(border.rgb,gl_FragColor.rgb,1.0-max(border.g,border.b));
154#endif
155#ifdef DEBUG_SOURCE_BORDER
156gl_FragColor+=debugUVBorder(dataTileTexcoord,0.005)*vec4(0.0,1.0,1.0,1.0);
157#endif
158#ifdef DEBUG_ICON
159float relW=0.1;float xCond=1.0-step(relW,v_uv.x);float yCond=1.0-step(relW,v_uv.y);gl_FragColor.rgb+=xCond*yCond;
160#endif
161}`,lv=`#version 100
162precision mediump float;
163#define GLSLIFY 1
164#pragma tileLayer_defines
165vec4 debugUVBorder(vec2 texCoords,float borderWidth){float edge=min(min(texCoords.s,texCoords.t),min(1.0-texCoords.s,1.0-texCoords.t));float border=step(edge,borderWidth);return vec4(border);}uniform sampler2D u_tex_main_data;varying vec2 v_uv;uniform vec4 u_header_data_rescale;uniform vec4 uColors[11];uniform vec4 u_data_tile_scale_offset;uniform float u_data_tile_size_rcp;uniform vec2 u_data_tile_size_usable;
166#define saturate(x) clamp(x, 0.0, 1.0)
167#define isNear(x, y) saturate(sign((x) - (y)) - sign((x) - (y) - 1.0))
168vec4 getPixelColor(vec2 tc){vec2 dataTileTexcoord=tc*u_data_tile_scale_offset.xy+u_data_tile_scale_offset.zw;vec2 dataTileTexcoordPixels=tc*u_data_tile_size_usable;float u1=dataTileTexcoord.x;float u2=dataTileTexcoord.x+u_data_tile_size_rcp;float v1=dataTileTexcoord.y;float v2=dataTileTexcoord.y+u_data_tile_size_rcp;vec4 s11=texture2D(u_tex_main_data,vec2(u1,v1));vec4 s12=texture2D(u_tex_main_data,vec2(u2,v1));vec4 s21=texture2D(u_tex_main_data,vec2(u1,v2));vec4 s22=texture2D(u_tex_main_data,vec2(u2,v2));vec2 f1=fract(dataTileTexcoordPixels);vec2 f0=vec2(1.0)-f1;vec4 bilinearWeights=vec4(f0.y*f0.x,f0.y*f1.x,f1.y*f0.x,f1.y*f1.x);float dataValue=dot(vec4(s11.r,s12.r,s21.r,s22.r),bilinearWeights)*u_header_data_rescale.x+u_header_data_rescale.y;dataValue=max(0.0,pow(2.0,dataValue)-0.001);vec4 allSamplesG=vec4(s11.g,s12.g,s21.g,s22.g)*u_header_data_rescale.z+u_header_data_rescale.w;const float interpolationThreshold=0.45;vec3 resultColor=uColors[0].rgb;if(dataValue<=0.1){return vec4(resultColor,1.0);}for(int i=1;i<11;i++){if(dot(isNear(allSamplesG,float(i)),bilinearWeights)>interpolationThreshold){resultColor=uColors[i].rgb;}}return vec4(resultColor,1.0);}void main(){gl_FragColor=getPixelColor(v_uv);}`,uv=y({shaderStorage:()=>dv});const dv={WGL2:{vTileTextureBlit:ov,vScreenQuad:nv,fTileTextureBlit:av,fTextureDebug:iv,fTextureBlit:sv,fTileLayerPreprocess:cv,fTileLayerPtypePreprocess:lv},WGL1:{vTileTextureBlit:ov,vScreenQuad:rv,fTileTextureBlit:av,fTextureDebug:iv,fTextureBlit:sv,fTileLayerPreprocess:cv,fTileLayerPtypePreprocess:lv}};var fv=class{constructor(e,t){var n,r,i,a,o;C(this,`_renderer`,void 0),C(this,`_primaryGradient`,void 0),C(this,`_renderProperties`,void 0),C(this,`_ptypeColors`,void 0),C(this,`_params`,void 0),C(this,`_gl`,void 0),C(this,`_destroyed`,!1),C(this,`_fbo`,void 0),this._params=t,this._gl=e;let s=(n=ru()?(r=t.maxTileZoom)==null?void 0:r.premium:(i=t.maxTileZoom)==null?void 0:i.free)==null?11:n,c=Xg[(a=t.dataQuality)==null?`normal`:a][s]+1,l=J_((o=t.dataQuality)==null?`normal`:o);this._renderProperties={useBlueChannel:!1,dataZoomOffset:l,maxDataZoom:c},this._createUpdateGradients(t),this._initRenderer(t)}preRenderToTexture(e,t,n,r){let i=this._gl;i.bindFramebuffer(i.FRAMEBUFFER,this._fbo),i.framebufferTexture2D(i.FRAMEBUFFER,i.COLOR_ATTACHMENT0,i.TEXTURE_2D,r.texture,0),i.viewport(0,0,r.dimensions.x,r.dimensions.y);let a=this._renderTile(i,t,n,{tileCoords:e});return i.framebufferTexture2D(i.FRAMEBUFFER,i.COLOR_ATTACHMENT0,i.TEXTURE_2D,null,0),i.bindFramebuffer(i.FRAMEBUFFER,null),a}destroy(){this._gl.deleteFramebuffer(this._fbo),this._renderer.destroy(this._gl)}_renderTile(e,t,n,r){if(this._destroyed)throw Error(`Tried to use a destroyed TileLayerPreprocessor.`);let i=this._bindUniforms(r.tileCoords,n),a=new Kg(this._gl,this._gl.RGBA,this._gl.TEXTURE_2D,t);return a.bind(e,void 0,e.NEAREST),this._renderer.updateUniformValue(`u_tex_main_data`,a),this._renderer.render(e,e.TRIANGLE_FAN),a.unbind(e),i}_bindUniforms(e,t){var n,r,i,a,o;let s=xl[this._params.layer],c=0,l=256/257,u=e_(this._params,e.z),d=2**Math.max(0,e.z-u),f=e.x/d%1*l,p=e.y/d%1*l,m=Math.min(2**u/2**e.z,1),h=m*l,g=.998*.0038910505836575876,_=256*m,ee=[h,h,f,p];this._renderer.updateUniformValue(`u_data_tile_scale_offset`,ee),this._renderer.updateUniformValue(`u_data_tile_size_rcp`,g),this._renderer.updateUniformValue(`u_data_tile_size_usable`,[_,_]),this._renderer.updateUniformValue(`u_data_tile_missing`,0);let te=-.001,ne=[128/255,128/255,128/255];switch(this._params.layer){case`rain`:c=.5;break;case`ptype`:{var v;c=.5;let e=1/255,t=[[e*111,e*111,e*111],[e*0,e*208,e*239],[e*0,e*0,e*255],[e*197,e*27,e*195],[e*129,e*63,e*63],[e*227,e*227,e*227],[e*129,e*195,e*129],[e*202,e*211,e*57],[e*183,e*119,e*8],[e*227,e*73,e*19],[e*195,e*63,e*63]],n=(v=this._ptypeColors)==null?t:v,r=[];for(let e=0;e<11;e++)r.push(...n[e],1);
168this._renderer.updateUniformValue(`uColors`,r)}break;case`ccl`:c=.5;break;case`cloudtop`:ne=[111/255,111/255,111/255];break}let re=(n=this._primaryGradient)==null?void 0:n.texture;re&&this._renderer.updateUniformValue(`u_tex_gradient_main`,re),s.wTransformR&&s.wTransformR>0&&(te=s.wTransformR),this._renderProperties.useBlueChannel?this._renderer.updateUniformValue(`u_header_data_rescale`,[255*t.decoderBstep,t.decoderBmin,0,0]):this._renderer.updateUniformValue(`u_header_data_rescale`,[255*t.decoderRstep,t.decoderRmin,255*t.decoderGstep,t.decoderGmin+c]);let ie=[(r=(i=this._primaryGradient)==null?void 0:i.mul)==null?1:r,(a=(o=this._primaryGradient)==null?void 0:o.add)==null?0:a];return this._renderer.updateUniformValue(`u_gradient_scale_offset`,ie),this._renderer.updateUniformValue(`u_log_offset`,te),this._renderer.updateUniformValue(`u_background_color`,ne),{dataTileScaleOffset:ee,sizeS:_,srcPixelSize:g}}_initRenderer(e){let t=this._gl;this._renderer=new qg(`tile-layer-preprocessor-standalone`),this._fbo=t.createFramebuffer();let n=pv(e);this._renderProperties.useBlueChannel=n.includes(`USE_BLUE_CHANNEL`);let r=e.layer===`ptype`?dv[bb.context].fTileLayerPtypePreprocess:dv[bb.context].fTileLayerPreprocess;r=r.replace(`#pragma tileLayer_defines`,n),this._renderer.initFromSources(t,dv.WGL1.vScreenQuad,r);let i=this._renderer.getAttachedShader(),a=new Ug(t,new Float32Array(Wg.quadMeshUniqueVtx),void 0,!1);a.registerShaderGeometryLayout(t,i,{a_pos:{components:2}}),this._renderer.addMesh(a),this._renderer.registerUniformRecord(t,`u_tex_main_data`,1),this._renderer.registerUniformRecord(t,`u_data_tile_missing`,0),this._renderer.registerUniformRecord(t,`u_header_data_rescale`,2),this._renderer.registerUniformRecord(t,`u_gradient_scale_offset`,4),this._renderer.registerUniformRecord(t,`u_log_offset`,5),this._renderer.registerUniformRecord(t,`u_background_color`,6),this._renderer.registerUniformRecord(t,`u_tex_gradient_main`,1),this._renderer.registerUniformRecord(t,`u_data_tile_scale_offset`,2),this._renderer.registerUniformRecord(t,`u_data_tile_size_rcp`,5),this._renderer.registerUniformRecord(t,`u_data_tile_size_usable`,4),this._renderer.registerUniformRecord(t,`u_pattern_scale_offset`,2),e.layer===`ptype`&&this._renderer.registerUniformRecord(t,`uColors`,8)}_createUpdateGradients(e){let t=xl[e.layer];this._primaryGradient&&this._primaryGradient.texture&&this._primaryGradient.texture.destroy(this._gl),this._primaryGradient=K_(this._gl,t.c);let n=V.ptype.getColor();if(n){let e=1/255;this._ptypeColors=[];for(let t=0;t<11;t++){let r=n.RGBA(t);this._ptypeColors[t]=[e*r[0],e*r[1],e*r[2]]}}}};function pv(e){let t;return t=e.shaderDefines&&e.shaderDefines.length>0?e.shaderDefines:[`BICUBIC`],t.map(e=>`#define ${e}`).join(`
169`)}var mv=y({getImageData:()=>Av,rawDataToCanvasImageSource:()=>jv});let hv;function gv(){return hv!=null||(hv=typeof OffscreenCanvas<`u`&&!!new OffscreenCanvas(1,1).getContext(`2d`)&&typeof createImageBitmap==`function`),hv}let _v;function vv(){if(_v==null&&(_v=!1,gv())){let e=new OffscreenCanvas(5,5).getContext(`2d`,{willReadFrequently:!0});if(e){for(let t=0;t<25;t++){let n=t*4;e.fillStyle=`rgb(${n},${n+1},${n+2})`,e.fillRect(t%5,Math.floor(t/5),1,1)}let t=e.getImageData(0,0,5,5).data;for(let e=0;e<100;e++)if(e%4!=3&&t[e]!==e){_v=!0;break}}}return _v||!1}const yv=e=>e instanceof Blob?e.type.startsWith(`image/`)?e:e.slice(void 0,void 0,`image/png`):new Blob([new Uint8Array(e)],{type:`image/png`}),bv=async e=>{let t=e instanceof Blob;if(t&&e.size===0||!t&&e.byteLength===0)return createImageBitmap(new ImageData(1,1));try{return createImageBitmap(yv(e))}catch(e){throw Error(`Could not load image because of ${e.message}. Please make sure to use a supported image type such as PNG or JPEG. Note that SVGs are not supported.`)}},xv=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII=`,Sv=e=>new Promise((t,n)=>{let r=new Image;r.onload=()=>{t(r),URL.revokeObjectURL(r.src),r.onload=null,window.requestAnimationFrame(()=>{r.src=xv})},r.onerror=()=>n(Error(`Could not load image. Please make sure to use a supported image type such as PNG or JPEG. Note that SVGs are not supported.`));let i=e instanceof Blob?e.slice(void 0,void 0,`image/png`):new Blob([new Uint8Array(e)],{type:`image/png`});r.src=i.size>0?URL.createObjectURL(i):xv});function Cv(e,t,n,r,i){let a=Math.max(-t,0)*4,o=(Math.max(0,n)-n)*r*4+a,s=r*4,c=Math.max(0,t),l=
169Math.max(0,n),u=Math.min(e.width,t+r),d=Math.min(e.height,n+i);return{rect:{x:c,y:l,width:u-c,height:d-l},layout:[{offset:o,stride:s}]}}async function wv(e,t,n,r,i){if(typeof VideoFrame>`u`)throw Error(`VideoFrame not supported`);let a=new VideoFrame(e,{timestamp:0});try{let o=a==null?void 0:a.format;if(!o||!(o.startsWith(`BGR`)||o.startsWith(`RGB`)))throw Error(`Unrecognized format ${o}`);let s=o.startsWith(`BGR`),c=new Uint8ClampedArray(r*i*4);if(await a.copyTo(c,Cv(e,t,n,r,i)),s)for(let e=0;e<c.length;e+=4){let t=c[e];c[e]=c[e+2],c[e+2]=t}return c}finally{a.close()}}let Tv,Ev;function Dv(e,t,n,r,i){let a=e.width,o=e.height;if(!Tv||!Ev){Tv=new OffscreenCanvas(a,o);let e=Tv.getContext(`2d`,{willReadFrequently:!0});if(!e)throw Error(`Failed to create offscreen canvas context.`);Ev=e}Tv.width=a,Tv.height=o,Ev.drawImage(e,0,0,a,o);let s=Ev.getImageData(t,n,r,i);return Ev.clearRect(0,0,a,o),s.data}function Ov(e,t=0){return kv(e).getImageData(-t,-t,e.width+2*t,e.height+2*t)}function kv(e){let t=window.document.createElement(`canvas`),n=t.getContext(`2d`,{willReadFrequently:!0});if(!n)throw Error(`failed to create canvas 2d context`);return t.width=e.width,t.height=e.height,n.drawImage(e,0,0,e.width,e.height),n}async function Av(e,t,n,r,i){var a,o,s,c;if(t=(a=t)==null?0:a,n=(o=n)==null?0:o,r=(s=r)==null?e.width:s,i=(c=i)==null?e.height:c,vv())try{return await wv(e,t,n,r,i)}catch(e){}return gv()?Dv(e,t,n,r,i):Ov(e).data}const jv=e=>typeof createImageBitmap==`function`?bv(e):Sv(e);var Mv=y({Throttler:()=>Nv}),Nv=class{constructor(){C(this,`_workItemEnergyAvailable`,1),C(this,`_workItems`,[]),C(this,`_interval`,void 0),C(this,`_lastFrameTime`,void 0),C(this,`_maxRefreshMs`,100),C(this,`energyPerFrame`,1),C(this,`maxAccumulatedEnergy`,1),this._lastFrameTime=performance.now(),this._interval=setInterval(()=>{performance.now()-this._lastFrameTime>=this._maxRefreshMs&&this.onNewFrame()},this._maxRefreshMs+1)}async awaitThrottled(e,t=0,n=1){var r=this;return new Promise(i=>{r._workItems.push({priority:t,weight:n,action:i,abort:e})})}dispose(){for(let e of this._workItems)e.action();clearInterval(this._interval),this._workItems=[],this._workItemEnergyAvailable=0}onNewFrame(){this._lastFrameTime=performance.now();let e=[];for(let t of this._workItems)t.abort&&t.abort.aborted?t.action():e.push(t);for(this._workItems=e;this._workItems.length>0;){let e=null,t=-1;for(let n=0;n<this._workItems.length;n++){let r=this._workItems[n];(!e||e.priority<r.priority)&&(e=r,t=n)}if(e&&Math.min(this.maxAccumulatedEnergy,e.weight)<=this._workItemEnergyAvailable)e.action(),this._workItems.splice(t,1),this._workItemEnergyAvailable-=e.weight;else break}this._workItemEnergyAvailable<this.maxAccumulatedEnergy&&(this._workItemEnergyAvailable+=this.energyPerFrame)}},Pv=class{constructor(){C(this,`_front`,null),C(this,`_back`,null),C(this,`_count`,0)}get empty(){return!this._front}get count(){return this._count}get front(){if(!this._front)throw Error(`Cannot peek, queue is empty.`);return this._front.item}enqueue(e){let t={item:e};this._count++,this._back?(this._back.next=t,this._back=t):(this._front=t,this._back=t)}dequeue(){if(!this._front)throw Error(`Cannot dequeue, queue is empty.`);this._count--;let e=this._front.item;return this._front.next?this._front=this._front.next:(this._front=null,this._back=null),e}},Fv=y({Semaphore:()=>Iv}),Iv=class{constructor(e){if(C(this,`_queue`,new Pv),C(this,`_capacity`,void 0),C(this,`_inside`,0),e<1||!Number.isInteger(e))throw RangeError(`Semaphore capacity must be a positive integer, got: ${e}`);this._capacity=e}enter(){return this._inside<this._capacity?(this._inside++,Promise.resolve()):new Promise(e=>{this._queue.enqueue(e)}
169)}exit(){if(this._inside<=0)throw Error(`Tried to exit Semaphore, but inside count is 0 or lower. This indicates a bug.`);if(this._inside--,!this._queue.empty&&this._inside<this._capacity){let e=this._queue.dequeue();this._inside++,e()}}},Lv=y({extractTileHeader:()=>Vv,fetchImageBlob:()=>Bv,simpleTileSource:()=>zv,tileLayerSource:()=>Rv});const Rv=new class extends Bn{constructor(){var e;super({ident:`TileLayerSource`}),e=this,C(this,`_gl`,null),C(this,`_cache`,void 0),C(this,`_disposed`,!1),C(this,`_decodeErrorLogged`,!1),this._cache=new g(e=>e,async(t,n)=>{let r=await Bv(t,n);if(!r.valid)return{valid:!1,url:t,_debugMessage:r.message};let i;try{i=await jv(r.blob)}catch(n){return e._decodeErrorLogged||(e._decodeErrorLogged=!0,O(`tileLayerSource.ts`,n==null?void 0:n.message,n,{extra:{url:t}})),{valid:!1,url:t,_debugMessage:`tile invalid: decode failed`}}if(n!=null&&n.aborted)return{valid:!1,url:t,_debugMessage:`Aborted`};let a=await Av(i);if(n!=null&&n.aborted)return{valid:!1,url:t,_debugMessage:`Aborted`};let o=H_(a,i.width),s=Y_(a),c=U_(o),l=e._gl;if(!l||l.isContextLost())return{valid:!1,url:t,_debugMessage:`Missing WebGL context`};l.pixelStorei(l.UNPACK_PREMULTIPLY_ALPHA_WEBGL,0);let u=l.createTexture();return u?(l.bindTexture(l.TEXTURE_2D,u),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_MIN_FILTER,l.LINEAR),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_MAG_FILTER,l.LINEAR),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_WRAP_S,l.CLAMP_TO_EDGE),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_WRAP_T,l.CLAMP_TO_EDGE),l.texImage2D(l.TEXTURE_2D,0,l.RGBA,257,257,0,l.RGBA,l.UNSIGNED_BYTE,s),l.bindTexture(l.TEXTURE_2D,null),{valid:!0,header:c,tex:u,url:t}):{valid:!1,url:t,_debugMessage:`Failed to create WebGL texture.`}},e=>{this.emit(`keydeleted`,e.url),e.valid&&this._gl&&this._gl.deleteTexture(e.tex)})}init(e){if(this._disposed)throw Hv();this._gl=e.maplibreMap.painter.context.gl}async get(e,t){var n=this;if(n._disposed)throw Hv();if(!n._gl)throw Uv();return await n._cache.get(e,t)}async awaitTile(e,t){var n=this;if(n._disposed)throw Hv();if(!n._gl)throw Uv();return await n._cache.awaitLoad(e,t)}free(e){if(this._disposed)throw Hv();this._cache.free(e)}dispose(){if(this._disposed)throw Hv();this._cache.dispose(),this._gl=null,this._disposed=!0}},zv=new class extends g{constructor(){var e;super(e=>e,async(t,n)=>{let r={valid:!1,message:`aborted`},i=0,a=null;for(;i<2;){if(a=await Bv(t,n),n.aborted)return r;if(a.valid)break;await mn(1e3*(i+1)),i++}if(!a)return{valid:!1,message:`tile invalid: imageBlobResult is null or undefined`};if(!a.valid)return{valid:!1,message:`tile invalid: `+a.message};let o;try{if(await e._semaphore.enter(),n.aborted)return r;o=await jv(a.blob)}catch(n){return e._decodeErrorLogged||(e._decodeErrorLogged=!0,O(`tileLayerSource.ts`,n==null?void 0:n.message,n,{extra:{url:t}})),{valid:!1,message:`tile invalid: decode failed`}}finally{e._semaphore.exit()}if(n.aborted)return r;await e._throttler.awaitThrottled(n,0,1/10);let s=e._gl;if(n.aborted)return r;if(!s||s.isContextLost())return{valid:!1,message:`context lost`};s.pixelStorei(s.UNPACK_PREMULTIPLY_ALPHA_WEBGL,0);let c=s.createTexture();return c?(s.bindTexture(s.TEXTURE_2D,c),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,s.CLAMP_TO_EDGE),s.texImage2D(s.TEXTURE_2D,0,s.RGBA,s.RGBA,s.UNSIGNED_BYTE,o),s.bindTexture(s.TEXTURE_2D,null),{valid:!0,tex:c}):{valid:!1,message:`Failed to create WebGL texture.`}},e=>{e.valid&&this._gl&&this._gl.deleteTexture(e.tex)}),e=this,C(this,`_gl`,null),C(this,`_sourceDisposed`,!1),C(this,`_throttler`,new Nv),C(this,`_semaphore`,new Iv(4)),C(this,`_map`,null),C(this,`_decodeErrorLogged`,!1),C(this,`updateThrottler`,()=>{this._throttler.onNewFrame()})}init(e){if(this._sourceDisposed)throw Hv();this._map=e,this._gl=e.painter.context.gl,e.on(`render`,this.updateThrottler)}dispose(){if(this._sourceDisposed)throw Hv();this._map&&this._map.off(`render`,this.updateThrottler),this._throttler.dispose(),super.dispose(),this._gl=null,this._sourceDisposed=!0}};async function Bv(e,t){try{let n=await fetch(_r(e),{signal:t,headers:{Accept:`application/json binary/hdaead$ind3f7b`}});return n.status===200?{valid:!0,blob:await n.blob()}:{valid:!1,message:`Got status ${n.status} ${n.statusText}`}}catch(e){let t=e instanceof Error?e.message:String(e);return{valid:!1,message:`Got exception: ${e} Message: ${t==null?`(undefined)`:t}`}}}async function Vv(e){let t=W_(e),n=H_(t,e.width);return{image:await X_(t),header:U_(n)}}function Hv(){return Error(`Attempted to use a disposed TileLayerSource.`)}function Uv(){return Error(`Attempted to use an uninitialized TileLayerSource.`)}var Wv=y({applyUrlTemplate:()=>Jv,getSummaryDebugTileInfo:()=>Kv,getTileBounds:()=>Yv,makeTileLayerCache:()=>qv});const Gv={missing:`-`,waitingForDataTile:`W`,dataTileFailed:`F`,dataTileAborted:`A`,dataTileInvalid:`I`,contextLostDuringProcessing:`C`,success:`S`,deleted:`D`};function Kv(e,t,n){let r=``,i=``;for(let a=e.min.y;a<=e.max.y;a++){for(let o=e.min.x;o<=e.max.x;o++){let e=v({x:o,y:a,z:t}),s=n.get(e);if(!s){r+=Gv.missing;continue}r+=Gv[s.state],s.message&&(i+=`${e}: ${s.state}: ${s.message}\n`)}r+=`
170`}let a=`Legend:
171`;for(let e in Gv)a+=`${Gv[e]}: ${e}\n`;return a+`
172`+r+`
173`+i}function qv(e){let t=Q.maplibreMap.painter.context.gl,n=new fv(t,e),r=e.fullPath,i=new Map,a=new _(async(a,o)=>{let s=v(a),c=e_(e,a.z),l=2**(c-a.z),u=Jv(r,{x:Math.floor(a.x*l),y:Math.floor(a.y*l),z:c}),d;try{d=await Rv.get(u,o)}catch(e){let t=e instanceof Error?e.message:String(e);if(t===`Aborted.`)return i.set(s,{state:`dataTileAborted`,message:`Abort caught in tile cache.`,coords:a}),null;throw i.set(s,{state:`dataTileFailed`,message:`Exception caught in tile cache: ${e} Message: ${t}`,coords:a}),e}if(!d.value.valid)return i.set(s,{state:`dataTileInvalid`,message:`DataTile: ${d.value._debugMessage}`,coords:a}),{valid:!1,_token:d};if(t.isContextLost())return i.set(s,{state:`contextLostDuringProcessing`,message:`Lost WebGL context in tile cache.`,coords:a}),{valid:!1,_token:d};if(o.aborted)return Rv.free(d),i.set(s,{state:`dataTileAborted`,message:`Abort caught in tile cache.`,coords:a}),null;let f=new Kg(t,t.RGBA,t.TEXTURE_2D);f.create(t,256,256);let p=n.preRenderToTexture(a,d.value.tex,d.value.header,f);return i.set(s,{state:`success`,coords:a}),{valid:!0,tex:f,dataHeader:d.value.header,dataTex:d.value.tex,coords:a,dataUniforms:p,_token:d}},(e,n)=>{n&&(n.valid&&!t.isContextLost()&&n.tex.destroy(t),i.set(v(e),{state:`deleted`,coords:e}),Rv.free(n._token))});return{cache:a,destroy:()=>{a.off(),a.dispose(),t.isContextLost()||n.destroy()},debug:i}}function Jv(e,t){return e.replace(/<z>/g,String(t.z)).replace(/\{z\}/g,String(t.z)).replace(/<x>/g,String(t.x)).replace(/\{x\}/g,String(t.x)).replace(/<y>/g,String(t.y)).replace(/\{y\}/g,String(t.y))}function Yv(t,n){var r;n=(r=n)==null?Math.ceil(t.getZoom()):r;let i=t.transform.screenPointToLocation(new m(0,0)),a=t.transform.screenPointToLocation(new m(t.transform.width,t.transform.height)),o=new e(new m(Xv(i.lng,n),Zv(i.lat,n)),new m(Xv(a.lng,n),Zv(a.lat,n)));
173return o.min.y=Math.max(o.min.y,0),o.max.y=Math.min(o.max.y,2**n-1),o}function Xv(e,t){let n=2**t*(e/360+.5);return Math.floor(n)}function Zv(e,t,n=!0){let r=Math.PI/180,i=Math.sin(e*r),a=2**t*(.5-.25*Math.log((1+i)/(1-i))/Math.PI);return n?Math.floor(a):a}const Qv=new class{constructor(){C(this,`_meshMap`,new Map),C(this,`_accessIndex`,0),C(this,`_lastCleanupAccessIndex`,0),C(this,`_lastCleanupTimeMillis`,0)}getTileMesh(e,t,n,r,i){let a=performance.now(),o=this._accessIndex++,s=this._getOrCreateTileMesh(e,t,n,r,i);s.lastAccessedIndex=o,s.lastAccessedMillis=a;let c=o-this._lastCleanupAccessIndex,l=a-this._lastCleanupTimeMillis;return c>=1024&&l>=1e4&&(this._lastCleanupAccessIndex=o,this._lastCleanupTimeMillis=a,this._cleanupCache(t,a,o)),s.mesh}_cleanupCache(e,t,n){let r=[...this._meshMap.keys()];for(let i of r){let r=this._meshMap.get(i),a=n-r.lastAccessedIndex,o=t-r.lastAccessedMillis;a>=2048&&o>=3e4&&(this._meshMap.delete(i),e.deleteBuffer(r.mesh.vbo),e.deleteBuffer(r.mesh.ibo))}}_getOrCreateTileMesh(e,t,n,r,i){var a,o;let s=(a=(o=e.style.projection)==null||(o=o.subdivisionGranularity)==null||(o=o.tile)==null?void 0:o.getGranularityForZoomLevel(r))==null?1:a,c=n===0,l=n===(1<<r)-1,u=`${s}_${c}_${l}_${i}`,d=this._meshMap.get(u);if(d)return d;let f=te({granularity:s,generateBorders:i,extendToNorthPole:c,extendToSouthPole:l},`16bit`),p=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,p),t.bufferData(t.ARRAY_BUFFER,f.vertices,t.STATIC_DRAW),t.bindBuffer(t.ARRAY_BUFFER,null);let m=t.createBuffer();t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,m),t.bufferData(t.ELEMENT_ARRAY_BUFFER,f.indices,t.STATIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,null);let h={mesh:{vbo:p,ibo:m,indexCount:f.indices.byteLength/2},lastAccessedIndex:0,lastAccessedMillis:0};return this._meshMap.set(u,h),h}};var $v=class{constructor(e,t,n){C(this,`_sourceVertex`,void 0),C(this,`_sourceFragment`,void 0),C(this,`_uniforms`,void 0),C(this,`_variants`,new Map),this._sourceVertex=e,this._sourceFragment=t,this._uniforms=n}getShader(e,t){let n=t.projectionVariantData.variantName+t.customDefines,r=this._variants.get(n);if(r!==void 0)return r;let i=this._createShader(e,t);return this._variants.set(n,i),i}destroy(e){for(let t of this._variants.values())t&&e.deleteProgram(t.program);this._variants.clear()}_createShader(e,t){let n=`#version 100
174${t.projectionVariantData.vertexShaderPrelude}
175${t.projectionVariantData.define}
176${t.customDefines}
177${this._sourceVertex}`,r=`#version 100
178${t.customDefines}
179${this._sourceFragment}`,i=e.createShader(e.VERTEX_SHADER);if(!i)return null;e.shaderSource(i,n),e.compileShader(i);let a=e.createShader(e.FRAGMENT_SHADER);if(!a)return e.deleteShader(i),null;e.shaderSource(a,r),e.compileShader(a);let o=e.createProgram();if(e.attachShader(o,i),e.attachShader(o,a),e.linkProgram(o),e.deleteShader(i),e.deleteShader(a),!e.getProgramParameter(o,e.LINK_STATUS))return console.error(`Program failed to link: ${e.getProgramInfoLog(o)}`),console.log(`Vertex shader:
180`,n,`
181
182Fragment shader:
183`,r),e.deleteProgram(o),null;let s=e.getAttribLocation(o,`a_pos`),c={};for(let t of this._uniforms)c[t]=e.getUniformLocation(o,t);return{program:o,uniformLocations:c,mainAttribLocation:s}}},ey=`precision highp float;
184#define GLSLIFY 1
185attribute vec2 a_pos;varying vec2 v_uv;void main(){v_uv=a_pos/8192.0;gl_Position=projectTile(a_pos);}`,ty=`precision mediump float;precision mediump sampler2D;
186#define GLSLIFY 1
187varying vec2 v_uv;uniform mediump sampler2D u_tex;
188#ifdef MASK
189vec4 getPixelColor(sampler2D tex,vec2 uv){float threshold=1200.0/256.0;float pxSize=1.0/256.0;mediump float u2=uv.x-pxSize;mediump float u1=uv.x;mediump float u3=uv.x+pxSize;mediump float v1=uv.y;mediump float v2=uv.y-pxSize;mediump float v3=uv.y+pxSize;float aL=texture2D(tex,vec2(u2,v1)).a;float aM=texture2D(tex,vec2(u2,v2)).a;float aR=texture2D(tex,vec2(u3,v1)).a;float aB=texture2D(tex,vec2(u1,v2)).a;float aT=texture2D(tex,vec2(u1,v3)).a;float a=aL+aM+aR+aB+aT;float alpha=a>threshold ? 0.0 : 1.0;
190#ifdef SEA
191alpha=1.0-alpha;
192#endif
193vec4 surfaceColor=vec4(vec3(0.5),alpha);return surfaceColor;}
194#else
195vec4 getPixelColor(sampler2D tex,vec2 uv){vec4 sample=texture2D(tex,uv);
196#ifdef COLORED
197vec3 sea=vec3(0.114,0.22,0.51);vec3 land=vec3(0.176,0.266,0.0);return vec4(mix(sea,land,sample.a),1.0);
198#endif
199return sample;}
200#endif
201void main(){gl_FragColor=getPixelColor(u_tex,v_uv);}`,ny=class{constructor(e){C(this,`_preparedTileDefs`,{});let t=0;for(let n in e){let r=e[n],i=parseInt(n);for(;t<=i;
201t++)this._preparedTileDefs[t]={url:r.url,subdomains:r.subdomains,patch:r.patch?ry(r.patch,t):void 0,patchUrl:r.patchUrl}}}getUrlForTile(e){let t=this._preparedTileDefs[e.z],n=t.url;return t.patch&&t.patchUrl&&e.x>=t.patch[0]&&e.y>=t.patch[1]&&e.x<t.patch[2]&&e.y<t.patch[3]&&(n=t.patchUrl),n=n.replaceAll(`{z}`,`${e.z}`).replace(`{x}`,`${e.x}`).replace(`{y}`,`${e.y}`),n}};function ry(e,t){let n=t-e[4];if(n===0)return e;let r=[];for(let t=0;t<4;t++)n>0?r.push(e[t]<<n):r.push(e[t]>>-n);return r.push(t),r}const iy=[`u_projection_fallback_matrix`,`u_projection_matrix`,`u_projection_clipping_plane`,`u_projection_transition`,`u_projection_tile_mercator_coords`,`u_tex`];var ay=class e{constructor(e,t){var n;C(this,`_tileCache`,null),C(this,`_options`,void 0),C(this,`_shaderDefines`,void 0),C(this,`_map`,null),C(this,`type`,`custom`),C(this,`id`,void 0),C(this,`_onMapMove`,()=>{var e,t;if(!this._map)return;let n=Math.round(this._map.getZoom()+((e=this._options.zoomBias)==null?0:e)),r=Math.min(Math.max(n,this._options.minZoomSource),this._options.maxZoomSource),i=Yv(this._map,r);(t=this._tileCache)==null||t.update(i,r)}),this.id=e,this._options=vt(t),this._shaderDefines=sy((n=this._options.variant)==null?`default`:n)}onAdd(e){this._map=e;let t=e=>Jv(this._options.url,e);if(this._options.tileDefs){let e=new ny(this._options.tileDefs);t=t=>e.getUrlForTile(t)}this._tileCache=oy(this._options,e,t),e.on(`move`,this._onMapMove),e.once(`render`,this._onMapMove),e.triggerRepaint()}onRemove(e,t){var n,r;e.off(`move`,this._onMapMove),(n=this._tileCache)==null||n.off(),(r=this._tileCache)==null||r.dispose(),this._tileCache=null,this._map=null}render(t,n){var r;let i=this._tileCache,a=e._shader.getShader(t,{projectionVariantData:n.shaderData,customDefines:this._shaderDefines});if(!i||!this._map||!a)return;let o=this._map.getZoom();if(this._options.minZoomDisplay!==void 0&&o<this._options.minZoomDisplay||this._options.maxZoomDisplay!==void 0&&o>this._options.maxZoomDisplay)return;let s=Math.round(o+((r=this._options.zoomBias)==null?0:r)),c=Yv(this._map,s),l=i.getOrderedTilePyramid(c,s,6,2),u=[];for(let e=l.length-1;e>=0;e--){var d;let t=l[e],n=(d=this._tileCache)==null?void 0:d.getData(t);n&&n.value.valid&&u.push({coords:t,tex:n.value.tex})}t.disable(t.DEPTH_TEST),t.disable(t.CULL_FACE),t.enable(t.BLEND),t.blendEquation(t.FUNC_ADD),t.blendFunc(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA),t.enable(t.STENCIL_TEST),t.stencilMask(255),t.clearStencil(0),t.clear(t.STENCIL_BUFFER_BIT),t.stencilOp(t.KEEP,t.KEEP,t.REPLACE),t.stencilFunc(t.NOTEQUAL,1,255),t.useProgram(a.program),t.uniform1i(a.uniformLocations.u_tex,0),this._drawTiles(t,a,u,!1),n.defaultProjectionData.projectionTransition>0&&this._drawTiles(t,a,u,!0),t.disableVertexAttribArray(a.mainAttribLocation),t.bindBuffer(t.ARRAY_BUFFER,null),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,null),t.bindTexture(t.TEXTURE_2D,null),t.colorMask(!1,!1,!1,!0),t.clearColor(0,0,0,1),t.clear(t.COLOR_BUFFER_BIT),t.colorMask(!0,!0,!0,!0),this._map.painter.clearStencil()}_drawTiles(e,t,n,r){if(!this._tileCache||!this._map)return;let i;for(let a of n){let n=a.coords,o=ie(n),s=Qv.getTileMesh(this._map,e,o.y,o.z,r);(i==null?void 0:i.vbo)!==s.vbo&&(e.bindBuffer(e.ARRAY_BUFFER,s.vbo),e.enableVertexAttribArray(t.mainAttribLocation),e.vertexAttribPointer(t.mainAttribLocation,2,e.SHORT,!1,0,0)),(i==null?void 0:i.ibo)!==s.ibo&&e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,s.ibo),i=s,e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,a.tex);let c=1<<n.z,l={wrap:Math.floor(n.x/c),canonical:{x:o.x,y:o.y,z:o.z}},u=this._map.transform.getProjectionData({overscaledTileID:l,applyGlobeMatrix:!0});e.uniformMatrix4fv(t.uniformLocations.u_projection_matrix,!1,u.mainMatrix),e.uniformMatrix4fv(t.uniformLocations.u_projection_fallback_matrix,!1,u.fallbackMatrix),e.uniform4f(t.uniformLocations.u_projection_clipping_plane,...u.clippingPlane),e.uniform4f(t.uniformLocations.u_projection_tile_mercator_coords,...u.tileMercatorCoords),e.uniform1f(t.uniformLocations.u_projection_transition,u.projectionTransition),e.drawElements(e.TRIANGLES,s.indexCount,e.UNSIGNED_SHORT,0)}}};C(ay,`_shader`,new $v(ey,ty,iy));function oy(e,t,n){return new _(async(r,i)=>{if(r.z<e.minZoomSource||r.z>
201e.maxZoomSource)return null;let a=n(r),o=await zv.get(a,i);return t.triggerRepaint(),o},(e,n)=>{n&&(zv.free(n),t.triggerRepaint())})}function sy(e){let t=[`PARENT`];switch(e){case`seaMask`:t.push(`MASK`,`SEA`);break;case`landMask`:t.push(`MASK`);break;case`coloredLandSea`:t.push(`COLORED`);break}return t.map(e=>`#define ${e};`).join(`
202`)}var cy=y({addOrUpdateBasemap:()=>my,baseMapLayerId:()=>py,grayMapZoomEnd:()=>11,mapTilesRecord:()=>fy,removeBasemap:()=>hy,reorderBasemapLayer:()=>gy});let ly=null,uy=null,dy;const fy=e=>{let t=Be?`-retina`:``;return{graymap:`https://tiles.windy.com/tiles/v11.2/darkmap${t}/{z}/{x}/{y}.png`,simplemap:`https://tiles.windy.com/tiles/v11.2/simple${t}/{z}/{x}/{y}.png`,landmaskmap:`https://tiles.windy.com/tiles/v11.2/grayland/{z}/{x}/{y}.png`,graymapPatch5:`https://tiles.windy.com/tiles/v11.2/${e}/darkmap${t}/{z}/{x}/{y}.png`,graymapPatch11:`https://tiles.windy.com/tiles/v11.2/${e}/darkmap${t}/{z}/{x}/{y}.png`,simplemapPatch5:`https://tiles.windy.com/tiles/v11.2/${e}/simple${t}/{z}/{x}/{y}.png`,simplemapPatch9:`https://tiles.windy.com/tiles/v11.2/${e}/simple${t}/{z}/{x}/{y}.png`,sznmap:`https://tiles.windy.com/v1/maptiles/outdoor/${t?`256%402x`:`256`}/{z}/{x}/{y}/?lang=en`,winter:`https://tiles.windy.com/v1/maptiles/winter/256/{z}/{x}/{y}/?lang=en`,satLocal:`https://tiles.windy.com/tiles/orto/v1.0/{z}/{z}-{x}-{y}.jpg`,sat:`https://node.windy.com/maptile/2.1/maptile/newest/satellite.day/{z}/{x}/{y}/256/jpg?token2=${N.get(`userToken`)}`}},py=`raster-basemap`;function my(){var e;let t=N.get(`map`),n=N.get(`overlay`),r=Q.getMaxZoom()+1,i=Q.getMinZoom(),a=null,o=null;(N.get(`usedLang`)===`hi`||N.get(`country`)===`in`)&&(a=`in`,o=[44,24,50,28,6]);let s=fy(a),c;c=t===`sat`?{13:{url:s.satLocal},[r]:{url:s.sat,subdomains:`1234`}}:{[r]:{url:s[t]||s.sznmap}},o?(c[11]={url:s.graymap,patchUrl:s.graymapPatch11,patch:o},n===`satellite`?(c[5]={url:s.simplemapPatch5},c[9]={url:s.simplemap,patchUrl:s.simplemapPatch9,patch:o}):c[5]={url:s.graymapPatch5}):(c[11]={url:s.graymap},(n===`satellite`||N.get(`showThickBorders`))&&(c[9]={url:s.simplemap})),hy();let l=(e=dy)==null?Wy.BASE_MAP:e;ly=new ay(py,{minZoomSource:i,maxZoomSource:r,maxZoomDisplay:r+1,url:s.graymap,tileDefs:c,zoomBias:1}),uy=new AbortController;let u=uy.signal;ub(()=>{ly&&!u.aborted&&Q.addMapLibreOrderedLayerToBucket(ly,l)}),document.body.dataset.map=t}function hy(){uy&&(uy.abort(),uy=null),ly&&Q.maplibreMap.getLayer(ly.id)&&(Q.removeMapLibreOrderedLayer(ly.id),ly=null)}function gy(e){e!==dy&&(dy=e,ly&&Q.maplibreMap.getLayer(ly.id)&&Q.moveMapLibreOrderedLayerToBucket(ly.id,e))}var _y=y({createLandLayer:()=>yy});const vy={colored:`coloredLandSea`,"land-mask":`landMask`,"sea-mask":`seaMask`};function yy(e,t){return new ay(`webgl-land_${t}`,{minZoomSource:0,maxZoomSource:11,url:e,variant:vy[t]})}function by(e){return by=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},by(e)}function xy(e,t){for(;!{}.hasOwnProperty.call(e,t)&&(e=by(e))!==null;);return e}function Sy(){return Sy=typeof Reflect<`u`&&Reflect.get?Reflect.get.bind():function(e,t,n){var r=xy(e,t);if(r){var i=Object.getOwnPropertyDescriptor(r,t);return i.get?i.get.call(arguments.length<3?e:n):i.value}},Sy.apply(null,arguments)}function Cy(e,t,n,r){var i=Sy(by(1&r?e.prototype:e),t,n);return 2&r&&typeof i==`function`?function(e){return i.apply(n,e)}:i}var wy;const Ty=new Set([`capAlerts`,`radar`,`satellite`,`wetbulbtemp`,`topoMap`]),Ey=new Set([`efi`]),Dy=new Set([`wind`,`temp`]),Oy=()=>{let e=N.get(`overlay`),t=N.get(`product`),n=N.get(`pois`);return!Ty.has(e)&&!Ey.has(t)&&!Dy.has(n)&&!(n===`cities`&&e!==`temp`)};var ky=class e extends r{constructor(t){super(w(w({},e.defaultOptions),t)),C(this,`selectedLabelId`,null),C(this,`selectedLabelEl`,null),C(this,`product`,void 0),C(this,`cityDivs`,{}),C(this,`ts`,N.get(`timestamp`)),C(this,`hasHooks`,!1),C(this,`forecastLoaded`,!1),C(this,`tilesUrl`,void 0),C(this,`refTime`,void 0),C(this,`temperatureUnit`,void 0)}onAdd(e){return this.hasHooks||(this.updateProduct(),this.createTilesUrl(),Kd.on(`poi-label`,this.onClick,this),N.on(`timestamp`,this.onTsChange,this),N.on(`usedLang`,this.updateLabels,this),N.on(`englishLabels`,this.updateLabels,this),N.on(`product`,this.updateProduct.bind(this,!0)),N.on(`overlay`,this.updateProduct.bind(this,!0)),N.on(`pois`,this.updateProduct.bind(this,!0)),P.on(`metricChanged`,this.onMetricChanged,this),this.hasHooks=!0),super.onAdd(e)}onRemove(e){return this.hasHooks&&(Kd.off(`poi-label`,this.onClick,this),N.off(`timestamp`,this.onTsChange,this),N.off(`usedLang`,this.updateLabels,this),N.off(`englishLabels`,this.updateLabels,this),N.off(`product`,this.updateProduct.bind(this,!0)),N.off(`overlay`,this.updateProduct.bind(this,!0)),N.off(`pois`,this.updateProduct.bind(this,!0)),P.off(`metricChanged`,this.onMetricChanged,this),this.hasHooks=!1),super.onRemove(e)}createTilesUrl(){let e=N.get(`englishLabels`)?`en`:N.get(`usedLang`);this.tilesUrl=`https://tiles.windy.com/labels/v2.1/${e}`}updateLabels(){this.createTilesUrl(),this._reset()}async updateProduct(e){var t=this;let n=N.get(`product`);K[n].labelsTemp||(n=`ecmwf`);let r=await K[n].getRefTime();if(Oy()||(t.forecastLoaded=!1),!(t.forecastLoaded&&t.product===n&&t.refTime===r)&&(t.product=n,t.refTime=r,e))for(let e in t.cityDivs)t.loadTileForecast(t.cityDivs[e])}onClick(e){let{id:t,label:n}=e.dataset;if(!t)return;let[r,i]=t.split(`/`);P.emit(`rqstOpen`,`detail`,{lat:+r,lon:+i,name:n,id:t,source:`label`})}onTsChange(e){this.ts=e,this.refreshWeather()}onMetricChanged(e,t){e===`temp`&&(this.temperatureUnit=t,this.refreshWeather())}refreshWeather(){for(let e in this.cityDivs){let{labels:t,timestamps:n}=this.cityDivs[e],r=this.getIndexToCityTileData(n);for(let e=0;e<t.length;e++)this.renderWeather(t[e],r)}}_reset(){this.reload()}toArray(){let e=[];for(let t in this.cityDivs)e=e.concat(this.cityDivs[t].labels);return e}getCityDivs(){let e=[];for(let t in this.cityDivs)e.push(this.cityDivs[t]);return e}markSelected(e){this.unmarkSelected(),this.selectedLabelId=e;for(let t in this.cityDivs){let n=this.cityDivs[t].labels.find(t=>
202t.id===e);if(n){this.selectedLabelEl=n.el,n.el.classList.add(`selected`);return}}}unmarkSelected(){this.selectedLabelEl&&(this.selectedLabelEl.classList.remove(`selected`),this.selectedLabelEl=null),this.selectedLabelId=null}loadTileForecast(e){Oy()&&e.labels.length&&e.urlFrag&&this.product&&km(this.product,e.urlFrag).then(t=>{t!=null&&t.data?(this.onForecastLoaded(e,t.data),this.forecastLoaded=!0):e.labels.forEach(e=>{e.data=void 0,e.el.removeAttribute(`data-temp`)})}).catch(t=>{console.error(`Failed to load city forecast "${e.urlFrag}"`,t)})}onForecastLoaded(e,t){if(!t||typeof t!=`object`){e.labels.forEach(e=>{e.data=void 0,e.el.removeAttribute(`data-temp`)});return}let{forecast:n,reftime:r,hours:i}=t;e.timestamps=i.map(e=>r+e*T);let a=this.getIndexToCityTileData(e.timestamps);e.labels.forEach(e=>{let{id:t}=e;t in n?(e.data=n[t],this.renderWeather(e,a)):(e.data=void 0,e.el.removeAttribute(`data-temp`))})}async _loadTileData(e,t){var n=this;let r=`${e.z}/${e.x}/${e.y}`;try{return(await I(`${n.tilesUrl}/${r}.json`,{cache:!1,abortSignal:t})).data}catch(e){return null}}_createTileContents(e,t,n){e.classList.add(`leaflet-tile`),e.classList.add(`zoom${t.z}`),e.onselectstart=e.onmousemove=ne;let r=ie(t),i=`${r.z}/${r.x}/${r.y}`,a=this.renderTile(e,r,n);this.cityDivs[t.x+`:`+t.y]=a,a.urlFrag=i,this.loadTileForecast(a),this.applySelectedToTile(a),this.fire(`labelsLayerTileLoaded`,{tile:a})}renderTile(e,t,r){let i=this._physicalTileSize.x,a=[],o=this._contentScale;for(let c=0;c<r.length;++c){var s;let[l,u,d,f,p,m]=r[c],h=d.substring(0,2)!==`ci`,g=h?l:`${p}/${f}`,_=n.create(`div`,`leaflet-gridlayer-feature`),ee=1<<t.z,te={x:Mt(f),y:Pt(p)},ne={x:t.x/ee,y:t.y/ee},v={x:(t.x+1)/ee,y:(t.y+1)/ee},re={x:v.x-ne.x,y:v.y-ne.y},ie={x:(te.x-ne.x)/re.x*i,y:(te.y-ne.y)/re.y*i};_.textContent=_.dataset.label=u,_.dataset.id=g,_.dataset.poi=`label`,_.classList.add(...(s=d.match(/\S+/g))==null?[]:s),_.style.transform=`translate(-50%, -50%) translate(${ie.x}px, ${ie.y}px) scale(${1/o})`,_.style.width=`${m}px`,h||a.push({id:g,el:_}),e.appendChild(_),e.classList.add(`leaflet-tile-loaded`)}return{labels:a}}getIndexToCityTileData(e){if(e!=null&&e.length)return Sl(e,this.ts,!1)}applySelectedToTile(e){if(!this.selectedLabelId)return;let t=e.labels.find(e=>e.id===this.selectedLabelId);t&&(this.selectedLabelEl&&this.selectedLabelEl.classList.remove(`selected`),this.selectedLabelEl=t.el,t.el.classList.add(`selected`))}renderWeather(e,t){if(!e||!e.el)return;let{el:n,data:r}=e;if(!(r!=null&&r.length)){n.removeAttribute(`data-temp`);return}t!==void 0&&t>=0&&t<r.length&&r[t]!==null?n.dataset.temp=`${dc.temp.convertNumber(r[t])}°`:n.removeAttribute(`data-temp`)}};wy=ky,C(ky,`defaultOptions`,w(w({},Cy(wy,`defaultOptions`,wy)),{},{minZoom:3,maxZoom:11,pane:`markerPane`,className:`labels-layer`,keepBuffer:S?1:2,tileSize:r.getTileSizeForZoomOffset(.5)}));var Ay=y({cityLabels:()=>Py,disable:()=>My,enable:()=>Ny});const jy=`city-labels-disabled`,My=()=>{document.body.classList.add(jy)},Ny=()=>{document.body.classList.remove(jy)},Py=new ky;var Fy=class{constructor(e,t=[.5,.5,.5,1]){C(this,`type`,`custom`),C(this,`id`,void 0),C(this,`clearColor`,void 0),this.id=e,this.clearColor=t}render(e,t){e.colorMask(!0,!0,!0,!0),e.clearColor(...this.clearColor),e.clear(e.COLOR_BUFFER_BIT)}},Iy=y({centerMap:()=>Ky,ensurePointVisibleY:()=>qy,getMapTiles:()=>ob,hasMask:()=>nb,isGlobeActive:()=>sb,layerOrder:()=>Wy,map:()=>Q,markers:()=>Gy,panToOffset:()=>Jy,setTileLayerLoader:()=>vb,toggleLandMask:()=>rb,toggleLandSeaMaskColored:()=>ab,toggleSeaMask:()=>ib,whenMapInitialized:()=>ub});i.defaultOptions.imagePath=`https://www.windy.com/img/leaflet/`,f.defaultOptions.icon=new i.Default,a.defaultImagePath=`https://www.windy.com/img/leaflet/`;let Ly=0;const Ry=N.get(`startUp`);let zy=N.get(`startUpZoom`),By,Vy=[];if(pg)By=pg,zy=null;else switch(Ry){case`last`:By=N.get(`startUpLastPosition`)||Dg();break;case`location`:By=N.get(`homeLocation`)||Dg();break;case`ip`:By=N.get(`ipLocation`)||Dg();break;case`gps`:By=N.get(`gpsLocation`)||Dg();break;default:By=Dg()}const Hy=e=>e===`vn`||e===`in`,Uy=Hy(N.get(`country`))?11:16,Wy={ALPHA_CLEAR:50,LANDSEA_MASK_COLORED:100,MAIN:200,SATELLITE:210,RADAR:225,PARTICLES:250,LANDMA
202SK_SEAMASK:300,BASE_MAP:400,TOPO_MAP:401,PARTICLES_HIGH_ZOOM:450,AIRSPACES:500,WEBGL_POIS:550,HURRICANES:600,ISOLINES:700},Q=new l(`leaflet-map`,{center:new o(+By.lat,+By.lon),zoom:zy||(`zoom`in By?By.zoom:5),minZoom:3,maxZoom:Uy,attributionControl:!1,maxCanvasRatio:2});Rv.init(Q),zv.init(Q.maplibreMap);const Gy={icon:new t({className:`icon-dot`,html:`<div class="icon-pulsating"></div>`,iconSize:[10,10],iconAnchor:[5,5]}),pulsatingIcon:new t({className:`icon-dot`,html:`<div class="icon-pulsating repeat"></div>`,iconSize:[10,10],iconAnchor:[5,5]}),webcamIcon:new t({className:`iconfont icon-webcam`,iconSize:[10,10],iconAnchor:[5,5]}),pulsatingWebcamIcon:new t({className:`iconfont icon-webcam`,html:`<div class="icon-pulsating repeat"></div>`,iconSize:[10,10],iconAnchor:[5,5]}),myLocationIcon:new t({className:`icon-my-position`,html:`<img src="/img/maps/actual-pos-no-heading.png" />`,iconSize:[16,16],iconAnchor:[8,8]})};function Ky(e,t=!1){let n=e.zoom?D(e.zoom,3,20):Q.maplibreMap.getZoom()+1;if(e.paddingTop||e.paddingLeft){let r=e.paddingTop||0,i=e.paddingLeft||0,a=Q.project([e.lat,e.lon],n).subtract([i/2,r/2]),o=Q.unproject(a,n);Q.setView(o,n,{animate:t})}else Q.setView([e.lat,e.lon],n,{animate:t})}
202function qy(e,t,n){let r=Q.latLngToContainerPoint([e,t]).y,i=Q.getSize();r>i.y-n&&Q.panBy([0,r-(i.y-n)],{animate:!0,duration:250})}function Jy(e,t,n){let r=Q.maplibreMap.getZoom()+1,i=Q.getSize().y,a=Q.project([t,n],r).subtract([0,e-i/2]),o=Q.unproject(a,r);Q.setView(o,r,{animate:!1})}`source`in By&&By.source===`fallback`&&P.once(`newLocation`,e=>{e.zoom=5,Ky(e,!0)});let Yy=null;function Xy(e){e&&!Yy&&(Yy=new c({color:`#444`}).addTo(Q)),!e&&Yy&&(Q.removeLayer(Yy),Yy=null)}function Zy(){let e=Q.getCenter(),t=Math.round(Q.maplibreMap.getZoom())+1;N.set(`mapCoords`,{source:`maps`,lat:e.lat,lon:e.wrap().lng,zoom:t}),t!==Ly&&(le(/zoom\d+/,`zoom${t}`),Ly=t)}let Qy,$y,eb;const{landmaskmap:tb}=fy();let nb=!1;function rb(e){e?(eb&&Q.maplibreMap.getLayer(eb.id)&&Q.removeMapLibreOrderedLayer(eb.id),$y&&Q.maplibreMap.getLayer($y.id)&&Q.removeMapLibreOrderedLayer($y.id),Qy||(Qy=yy(tb,`land-mask`)),Q.maplibreMap.getLayer(Qy.id)||Q.addMapLibreOrderedLayerToBucket(Qy,Wy.LANDMASK_SEAMASK),nb=!0):Qy&&(Q.maplibreMap.getLayer(Qy.id)&&Q.removeMapLibreOrderedLayer(Qy.id),nb=!1)}function ib(e){e?(eb&&Q.maplibreMap.getLayer(eb.id)&&Q.removeMapLibreOrderedLayer(eb.id),Qy&&Q.maplibreMap.getLayer(Qy.id)&&Q.removeMapLibreOrderedLayer(Qy.id),$y||($y=yy(tb,`sea-mask`)),Q.maplibreMap.getLayer($y.id)||Q.addMapLibreOrderedLayerToBucket($y,Wy.LANDMASK_SEAMASK),nb=!0):$y&&(Q.maplibreMap.getLayer($y.id)&&Q.removeMapLibreOrderedLayer($y.id),nb=!1)}function ab(e){e?($y&&Q.maplibreMap.getLayer($y.id)&&Q.removeMapLibreOrderedLayer($y.id),Qy&&Q.maplibreMap.getLayer(Qy.id)&&Q.removeMapLibreOrderedLayer(Qy.id),eb||(eb=yy(`https://tiles.windy.com/tiles/v11.2/grayland/{z}/{x}/{y}.png`,`colored`)),Q.maplibreMap.getLayer(eb.id)||Q.addMapLibreOrderedLayerToBucket(eb,Wy.LANDSEA_MASK_COLORED),nb=!0):eb&&(Q.maplibreMap.getLayer(eb.id)&&Q.removeMapLibreOrderedLayer(eb.id),nb=!1)}Zy(),Xy(N.get(`graticule`)),Q.maplibreMap.on(`moveend`,Zy),Q.leafletMap.on(`click`,Xd),P.on(`leafletGl-zoomIn`,()=>{Q.zoomIn(1,{animate:!0})}),P.on(`leafletGl-zoomOut`,()=>{Q.zoomOut(1,{animate:!0})}),N.on(`map`,()=>my()),N.on(`graticule`,Xy),Yg.on(`toggleSeaMask`,ib),Yg.on(`toggleLandMask`,rb),Yg.on(`toggleLandSeaMaskColored`,ab),Q.on(`contextmenu`,e=>{let{containerPoint:t}=e,{lat:n,lng:r}=e.latlng instanceof o?e.latlng.wrap():e.latlng;S||P.emit(`rqstOpen`,`contextmenu`,{lat:n,lon:r,containerPoint:t})}),N.on(`usedLang`,()=>my()),N.once(`country`,e=>{Hy(e)&&(Q.setMaxZoom(11),my())});const ob=fy,sb=()=>N.get(`mapLibrary`)===`globe`;let cb=!1;Q.maplibreMap.once(`load`,pb);const lb=[];function ub(e){cb?e():lb.push(e)}my();function db(){lb.forEach(e=>{e()})}function fb(){let e=Q.maplibreMap._container.style.height;Q.maplibreMap._container.style.height=`calc(${e} - 1px)`,Q.maplibreMap.once(`render`,()=>{Q.maplibreMap._container.style.height=e})}async function pb(){let e=146/256;Q.addMapLibreOrderedLayerToBucket(new Fy(`alpha_clear`,[e,e,e,1]),Wy.ALPHA_CLEAR),Py==null||Py.addTo(Q),Lb(),o_(Q.maplibreMap.painter.context.gl,`map`),cb=!0,mb(),db(),fb()}function mb(){document.addEventListener(`touchstart`,hb),document.addEventListener(`touchend`,gb),Yg.on(`contextRestored`,()=>{window.location.reload()})}function hb(e){let t=e.touches;if(t.length>1)for(let e=0;e<t.length;e++){let r=t.item(e);if(!r)continue;let i=r.target;if(i.hasAttribute(`data-poi`)){var n;let e=(n=i.parentElement)==null?void 0:n.removeChild(i);if(!e)continue;e.style.visibility=`hidden`;let t=document.querySelector(`.maplibregl-canvas-container`);t&&(t.appendChild(e),Vy.push(e))}}}function gb(e){Vy.forEach(e=>{var t;(t=e.parentElement)==null||t.removeChild(e)}),Vy=[]}const _b=new Set;function vb(e,t){let n=_b.size>0;t?_b.add(e):_b.delete(e);let r=_b.size>0;n!==r&&N.set(`tileLayerLoaderPresent`,r)}var yb=y({MAPLIBRE_TILE_SIZE:()=>512,createPlaceholderImage:()=>Ib,createPlaceholderImageCanvas:()=>Fb,geoBoundsToMaplibreBounds:()=>kb,getSafeZoom:()=>xb,getTileBounds:()=>Tb,getWorldVisibleRectOffsets:()=>Sb,latLonBounds2TileBounds:()=>Db,lngLatBoundsToMercator:()=>Cb,queryWebGlVersion:()=>Lb,tileBoundsToLatLonBounds:()=>Eb,tilePaddingSize:()=>wb,tileSizeToZoomOffset:()=>Ob,utils:()=>bb});const bb={isWebGl2:!1,context:`WGL1`};function xb(e,t){let n=Q.maplibreMap.getZoom()+(e==null?0:e),r=Math.round(n);return Math.min(r,t||r)}function Sb(){let e=[],t=Q.maplibreMap.getBounds(),n={min:p.fromLngLat({lng:t._sw.lng,lat:t._sw.lat}),max:p.fromLngLat({lng:t._ne.lng,lat:t._ne.lat})},r=Math.floor(n.min.x),i=Math.floor(n.max.x);for(let t=r;t<=i;t++)e.push(t);return e}function Cb(e){return{min:p.fromLngLat({lng:e._sw.lng,lat:e._sw.lat}),max:p.fromLngLat({lng:e._ne.lng,lat:e._ne.lat})}}const wb=.25;function Tb(e,t=!0){let n=Q.maplibreMap.getBounds();{let t=360/2**e*wb;n._ne.lng+=t,n._sw.lng-=t;let r=jb(Nb(n._sw.lat,e,!1)+wb,e),i=jb(Nb(n._ne.lat,e,!1)-wb,e);n._ne.lat=i,n._sw.lat=r}let r=Db(n,e);t&&r.min.x<0&&(r.min.x+=2**e,r.max.x+=2**e);let i=r.min.y;return r.min.y=Math.max(r.max.y,0),r.max.y=Math.min(i,2**e-1),r}function Eb(e,t){return new d(new u(Ab(e.min.x,t),jb(e.max.y+1,t)),new u(Ab(e.max.x+1,t),jb(e.min.y,t)))}function Db(e,t){return e instanceof d?{min:{x:Mb(e._sw.lng,t),y:Nb(e._sw.lat,t)},max:{x:Mb(e._ne.lng,t),y:Nb(e._ne.lat,t)}}:{min:{x:Mb(e.min.x,t),y:Nb(e.min.y,t)},max:{x:Mb(e.max.x,t),y:Nb(e.max.y,t)}}}function Ob(e){return Math.log2(512/e)}
202function kb(e){let t=e.getSouthWest(),n=e.getNorthEast();return[[t.lng,t.lat],[n.lng,n.lat]]}function Ab(e,t){return(e/2**t-.5)*360}function jb(e,t){let n=.5-e/2**t;return(Math.PI/2-2*Math.atan(Math.exp(-n*2*Math.PI)))*(180/Math.PI)}function Mb(e,t){let n=2**t*(e/360+.5);return Math.floor(n)}function Nb(e,t,n=!0){let r=Math.PI/180,i=Math.sin(e*r),a=2**t*(.5-.25*Math.log((1+i)/(1-i))/Math.PI);return n?Math.floor(a):a}const Pb=(e,t)=>{e.width!=256&&(e.width=e.height=256);let n=e.getContext(`2d`);n.fillStyle=`#888`,n.fillRect(0,0,256,256),n.fillStyle=n.strokeStyle=`#BBB`,n.fillText(`No data!`,14,22),n.rect(3,3,250,250),n.stroke()};function Fb(e,t){let n=document.createElement(`canvas`);if(n.width=1,n.height=1,e)Pb(n,``);else{let e=n.getContext(`2d`);if(!e)throw Error(`Failed to get 2D context`);e.fillStyle=t==null?`red`:t,e.fillRect(0,0,1,1)}return n}function Ib(e,t){let n=Fb(e,t),r=new Image;return r.src=n.toDataURL(),new Promise(e=>{r.onload=()=>{e(r)}})}function Lb(){let e=!(Q.maplibreMap.painter.context.gl instanceof WebGLRenderingContext);bb.isWebGl2=e,bb.context=e?`WGL2`:`WGL1`}var Rb=y({EventManager:()=>zb}),zb=class{constructor(){C(this,`DOMCallbacks`,{}),C(this,`MapLibreCallbacks`,{}),C(this,`storeCallbacks`,{}),C(this,`eventedCallbacks`,{}),C(this,`broadcastCallbacks`,{}),C(this,`mapCallbacks`,{}),C(this,`unsubscribers`,[])}addDOMListener(e,t,n){let r=`${t}`,i={ref:n,topic:t,target:e};this.DOMCallbacks[r]||(this.DOMCallbacks[r]=[]),this.DOMCallbacks[r].push(i),e.addEventListener(t,i.ref)}addMapLibreListener(e,t,n){let r=`${t}`,i={ref:n,topic:t,target:e};this.MapLibreCallbacks[r]||(this.MapLibreCallbacks[r]=[]),this.MapLibreCallbacks[r].push(i),e.on(`${t}`,n)}addStoreListener(e,t){let n=`${e}`,r={ref:t,topic:e};this.storeCallbacks[n]||(this.storeCallbacks[n]=[]),this.storeCallbacks[n].push(r),N.on(e,t)}addEventedListener(e,t,n){let r=`${String(t)}`,i={ref:n,topic:t,target:e};this.eventedCallbacks[r]||(this.eventedCallbacks[r]=[]),this.eventedCallbacks[r].push(i),e.on(t,n)}addBroadcastListener(e,t){let n=`${String(e)}`,r={ref:t,topic:e};this.broadcastCallbacks[n]||(this.broadcastCallbacks[n]=[]),this.broadcastCallbacks[n].push(r),P.on(e,t)}addMapListener(e,t){let n={callback:t,topic:e};this.mapCallbacks[e]||(this.mapCallbacks[e]=[]),this.mapCallbacks[e].push(n),Q.maplibreMap.on(e,t)}addSvelteStoreListener(e,t,n=!1){n?this.unsubscribers.push(jn(e,t)):this.unsubscribers.push(e.subscribe(t))}addMutationObserverListener(e,t,n){let r=new MutationObserver(n);r.observe(e,t),this.unsubscribers.push(()=>r.disconnect())}removeListeners(){for(let e of Object.values(this.DOMCallbacks))for(let{ref:t,topic:n,target:r}of e)r.removeEventListener(n,t);for(let e of Object.values(this.MapLibreCallbacks))for(let{ref:t,topic:n,target:r}of e)r.off(`${n}`,t);for(let e of Object.values(this.storeCallbacks))for(let{ref:t,topic:n}of e)N.off(`${n}`,t);for(let e of Object.values(this.eventedCallbacks))for(let{ref:t,topic:n,target:r}of e)r.off(n,t);for(let e of Object.values(this.broadcastCallbacks))for(let{ref:t,topic:n}of e)P.off(`${n}`,t);for(let e of Object.values(this.mapCallbacks))for(let{callback:t,topic:n}of e)Q.maplibreMap.off(n,t);this.unsubscribers.forEach(e=>e()),this.DOMCallbacks={},this.MapLibreCallbacks={},this.storeCallbacks={},this.eventedCallbacks={},this.broadcastCallbacks={},this.mapCallbacks={},this.unsubscribers=[]}},Bb=y({getAvailableLevels:()=>Vb});const Vb=(e,t)=>{var n,r;let i=K[t],a=dc[e],o=((n=a.layers)==null?[]:n).map(e=>xl[e]).filter(e=>{var t;return(t=e.levels)==null?void 0:t.length}).map(e=>e.levels).filter(e=>!!e);if((r=i.levels)!=null&&r.length&&o.push(i.levels),i.levelsOverride){var s;let e=i.levelsOverride;((s=a.layers)==null?[]:s).filter(t=>t in e).map(t=>e[t]).forEach(e=>o.push(e))}let c=cn(o);return e!==`wind`&&(c=c.filter(e=>e!==`100m`)),c};var Hb=y({Renderer:()=>Ub}),Ub=class e{constructor(e){C(this,`isOpen`,void 0),C(this,`ident`,void 0),C(this,`dependency`,void 0),C(this,`loadedDependency`,void 0),C(this,`userControl`,void 0),C(this,`interpolator`,void 0),C(this,`requiresFullRenderParams`,void 0),Object.assign(this,e)}static hasProp(e,t){return!!e&&typeof e==`object`&&t in e}async open(t,n,r){var i=this;let a=e=>{i.onopen(e),i.isOpen=!0},o=i.dependency?(()=>{let e=Y[i.dependency];return e?e.open():Promise.resolve(void 0)})():Promise.resolve(void 0),s=i.requiresFullRenderParams?t_(t,n,r):Promise.resolve(void 0),[c]=await Promise.all([s,o]);if(!i.dependency)a(c);else{let t=Y[i.dependency];t?i.loadedDependency=t instanceof q?t.svelteApp:t.plugin:i.loadedDependency=void 0,e.hasProp(i.loadedDependency,`interpolator`)&&(i.interpolator=i.loadedDependency.interpolator),a(c)}}close(e){if(this.isOpen=!1,this.dependency){this.onclose();let e=Y[this.dependency];e&&e.close({disableClosingAnimation:!0})}}onopen(t){if(e.hasProp(this.loadedDependency,`onRenderStart`)){let e=this.loadedDependency.onRenderStart;if(typeof e==`function`){let n=this.loadedDependency;e.call(n,t)}}}onclose(){if(e.hasProp(this.loadedDependency,`onRenderEnd`)){let e=this.loadedDependency.onRenderEnd;if(typeof e==`function`){let t=this.loadedDependency;e.call(t)}}}async paramsChanged(t,n,r){var i=this;if(e.hasProp(i.loadedDependency,`paramsChanged`)){let e=i.loadedDependency.paramsChanged;if(typeof e==`function`)if(i.requiresFullRenderParams){let a=await t_(t,n,r),o=i.loadedDependency;e.call(o,a)}else{let t=i.loadedDependency;e.call(t)}}}redraw(){if(e.hasProp(this.loadedDependency,`redraw`)){let e=this.loadedDependency.redraw;if(typeof e==`function`){let t=this.loadedDependency;e.call(t)}}}},Wb=y({TileLayerInterpolator:()=>Gb,tileLayerInterpolator:()=>Kb}),Gb=class{constructor(){C(this,`_debugElement`,void 0),C(this,`_pixelReader`,void 0),C(this,`_lastDataZoom`,-1),C(this,`_pendingLoads`,new Map),C(this,`_latestParam
202s`,void 0),C(this,`_requestGiveId`,0),C(this,`_cache`,new Map),C(this,`_cachedRequestsByTileUrl`,new Map),C(this,`_onZoomEnd`,()=>{if(!this._latestParams)return;let e=e_(this._latestParams,this._getIntZoom());if(e!==this._lastDataZoom){this._lastDataZoom=e;let t=[...this._pendingLoads];for(let[n,r]of t)r.dataZoom!==e&&(r.abort.abort(),this._pendingLoads.delete(n))}}),C(this,`_keyDeleted`,e=>{let t=this._cachedRequestsByTileUrl.get(e);if(t!==void 0){for(let e of t)this._cache.delete(e);this._cachedRequestsByTileUrl.delete(e)}}),this._pixelReader=new x_(Q.maplibreMap.painter.context.gl),Q.maplibreMap.on(`zoomend`,this._onZoomEnd),Rv.on(`keydeleted`,this._keyDeleted),this._onZoomEnd()}paramsChanged(e){this._latestParams=e,this._cachedRequestsByTileUrl.clear(),this._cache.clear();let t=[...this._pendingLoads];for(let[n,r]of t)r.fullPath!==e.fullPath&&(r.abort.abort(),this._pendingLoads.delete(n));this._onZoomEnd()}createFun(e){let t=this.sampleAtMercator.bind(this);e(Jb(t),Yb(t))}destroy(){Q.maplibreMap.off(`zoomend`,this._onZoomEnd),Rv.off(`keydeleted`,this._keyDeleted),this._cache.clear(),this._cachedRequestsByTileUrl.clear(),this._clearAllWaitingTiles(),this._pixelReader.dispose()}async sampleAtMercator(e,t,n,r){var i=this;if(r||(r=i._latestParams),!r)return null;let a=i._requestGiveId++,o=i._getIntZoom(),s=1<<o,c={x:s*e,y:s*t},l=Math.floor(c.x),u=Math.floor(c.y);c.x-=l,c.y-=u;let d=e_(r,o),f=1<<o-d,p=l/f,m=u/f,h={x:Math.floor(p),y:Math.floor(m),z:d},g=Jv(r.fullPath,h),_;try{n||(n=new AbortController),i._pendingLoads.set(a,{abort:n,dataZoom:d,fullPath:r.fullPath}),_=await Rv.awaitTile(g,n.signal)}catch(e){return null}finally{i._pendingLoads.has(a)&&i._pendingLoads.delete(a)}if(!_)return null;try{let e={x:p%1,y:m%1,z:c.x/f,w:c.y/f};return i._sampleDataFromTile(_.value,e,r,n.signal,h)}finally{Rv.free(_)}}_getIntZoom(){let e=V_.x,t=V_.y-1;return Math.round(D(Q.maplibreMap.getZoom(),e,t))+1}_clearAllWaitingTiles(){for(let e of this._pendingLoads.values())e.abort.abort();this._pendingLoads.clear()}async _sampleDataFromTile(e,t,n,r,i){var a=this;if(!e.valid)return null;let o=(t.x+t.z)*256,s=(t.y+t.w)*256,c=Math.floor(o),l=Math.floor(s),u=o-c,d=s-l,f={x:Math.floor(c),y:Math.floor(l)},p=`${e.url}|${f.x}|${f.y}|${i.x}|${i.y}|${i.z}`,m=a._cache.get(p);if(m===void 0){m=await a._pixelReader.readPixels(e.tex,f.x,f.y,2,2,r),a._cache.set(p,m);let t=a._cachedRequestsByTileUrl.get(e.url);t?t.push(p):a._cachedRequestsByTileUrl.set(e.url,[p])}if(!m||qb(m,n))return null;let h=Xb([...Zb(m.subarray(0,4),e.header,n),0,...Zb(m.subarray(4,8),e.header,n),0,...Zb(m.subarray(8,12),e.header,n),0,...Zb(m.subarray(12,16),e.header,n),0],u,d);if(a._debugElement){let e=Xb(m,u,d);a._debugElement.style.backgroundColor=`rgb(${e[0]},${e[1]},${e[2]})`}return h}};const Kb=new Gb;function qb(e,t){for(let n=0;n<4;n++)if(t.JPGtransparency&&e[n*4+2]>=192||t.PNGtransparency&&e[n*4+3]<1)return!0;return!1}function Jb(e){return(t,n,r)=>e(Mt(t.lon),Pt(t.lat),n,r)}function Yb(e){return(t,n,r,i)=>{let a=256*2**(Q.maplibreMap.getZoom()+1);return e(t/a,n/a,r,i)}}function Xb(e,t,n){let r=1-t,i=1-n,a=i*r,o=i*t,s=n*r,c=n*t,l=e[0],u=e[4],d=e[8],f=e[12],p=l*a+u*o+d*s+f*c,m=e[1],h=e[5],g=e[9],_=e[13],ee=m*a+h*o+g*s+_*c,te=e[2],ne=e[6],v=e[10],re=e[14];return[p,ee,te*a+ne*o+v*s+re*c]}function Zb(e,t,n){let r=[0,0,0],i=[n.transformR,n.transformG,n.transformB],a=[t.decoderRstep,t.decoderGstep,t.decoderBstep],o=[t.decoderRmin,t.decoderGmin,t.decoderBmin];for(let t=0;t<3;t++){let n=e[t]*a[t]+o[t],s=i[t];r[t]=s?s(n):n}return r}var Qb=y({SwitchableTileCache:()=>$b}),$b=class{get currentCache(){return this._currentCache}get keepBuffer(){return this._keepBuffer}get lastBounds(){return this._lastMapBounds}get lastZoom(){return this._lastMapZoom}constructor(t,n=0,r=0,i=0){C(this,`_nextCache`,null),C(this,`_currentCache`,void 0),C(this,`_switchToNext`,null),C(this,`_keepBuffer`,void 0),C(this,`_maxLowerZoom`,void 0),C(this,`_maxHigherZoom`,void 0),C(this,`_lastMapBounds`,new e([0,0],[0,0])),C(this,`_lastMapZoom`,0),C(this,`onSwitch`,void 0),this._currentCache=t,this._keepBuffer=n,this._maxLowerZoom=r,this._maxHigherZoom=i}setCache(e){if(e===this._currentCache)throw Error(`SwitchableTileCache: bad usage: tried to switch to a cache that is already used as the current cache.`);if(e===this._nextCache)throw Error(`SwitchableTileCache: bad usage: tried to switch to a cache that is already being set up as the next cache.`);this._nextCache&&(this._switchToNext=null,this._nextCache.destroy(),this._nextCache=null);let t=!1;this._switchToNext=()=>{if(t)throw Error(`SwitchableTileCache: attempted to switch to a cache that was already switched to being the main cache. This should never happen.`);if(this._switchToNext=null,t=!0,this._nextCache!==e)throw Error(`SwitchableTileCache: 'alltilesloaded' event fired on a cache that should be ready to be switched, but this cache is no longer assigned as the next one. This state should never happen.`);if(this._currentCache===e)throw Error(`SwitchableTileCache: 'alltilesloaded' event fired on a cache that should be ready to be switched, but this cache is already the current cache. This state should never happen.`);let n=this._currentCache;this._currentCache=this._nextCache,this._nextCache=null,n.destroy(),this.onSwitch&&this.onSwitch()}
202,this._nextCache=e,this._nextCache.cache.once(`alltilesloaded`,this._switchToNext),this._updateInternal()}forceSwitch(){this._nextCache&&this._switchToNext&&(this._nextCache.cache.off(`alltilesloaded`,this._switchToNext),this._switchToNext())}update(e){let t=Math.round(e.getZoom()),n=e.getTileBounds(t);n.min.x-=this._keepBuffer,n.min.y=Math.max(n.min.y-this._keepBuffer,0),n.max.x+=this._keepBuffer,n.max.y=Math.min(n.max.y+this._keepBuffer,(1<<t)-1),this._lastMapBounds=n,this._lastMapZoom=t,this._updateInternal()}getRenderableCoords(){return this._currentCache.cache.getOrderedTilePyramid(this._lastMapBounds,this._lastMapZoom,this._maxLowerZoom,this._maxHigherZoom)}getTile(e){return this._currentCache.cache.getData(e)}hasTile(e){return this._currentCache.cache.hasTile(e)}async awaitTile(e,t){var n=this,r;return((r=n._nextCache)==null?n._currentCache:r).cache.awaitTile(e,t)}dispose(){this._nextCache&&(this._nextCache.destroy(),this._nextCache=null),this._currentCache.destroy()}_updateInternal(){this._nextCache?this._nextCache.cache.update(this._lastMapBounds,this._lastMapZoom):this._currentCache.cache.update(this._lastMapBounds,this._lastMapZoom)}},ex=class{constructor(){C(this,`_lastCenter`,void 0),C(this,`_lastZoom`,-1),C(this,`_lastTranslation`,new h(0,0)),C(this,`_opacity`,1),C(this,`_lastZooming`,!1),C(this,`_zooming`,!1),C(this,`_lastUpdateTime`,new Date),C(this,`_zoomStart`,()=>{this._zooming=!0}),C(this,`_zoomEnd`,()=>{this._zooming=!1})}get translation(){return this._lastTranslation}get opacity(){return this._opacity}init(){this._lastZoom=Q.getZoom(),this._lastCenter=Q.getCenter(),Q.on(`zoomstart`,this._zoomStart),Q.on(`zoomend`,this._zoomEnd)}update(e){let t=Q.getCenter(),n=Q.getZoom(),r=new Date;if(n===this._lastZoom&&this._lastCenter){let r=Q.project(t,n),i=Q.project(this._lastCenter,n),a=r.sub(i);this._lastTranslation._add(a._divByPoint(new h(e.x,e.y))._mult(Q.webGLPixelRatio))}let i=this._opacity,a=(r.getTime()-this._lastUpdateTime.getTime())/1e3;this._lastZooming==this._zooming&&(this._opacity=Math.min(Math.max(this._opacity+a/.1*(this._zooming?-1:1),0),1)),(i!==this._opacity||this._lastZooming!==this._zooming)&&Q.maplibreMap.triggerRepaint(),this._lastCenter=t,this._lastZoom=n,this._lastUpdateTime=r,this._lastZooming=this._zooming}destroy(){Q.off(`zoomstart`,this._zoomStart),Q.off(`zoomend`,this._zoomEnd)}},tx=`precision mediump float;
203#define GLSLIFY 1
204uniform bool u_tile_valid;uniform sampler2D u_tex_preprocessed_tile;
205#define saturate(x) clamp(x, 0.0, 1.0)
206#if defined(RAIN) || defined(CLOUDS) || defined(CCL)
207#define PATTERN_ANY
208#endif
209#ifdef PATTERN_ANY
210uniform highp vec4 u_data_tile_scale_offset;uniform float u_data_tile_size_usable;uniform float u_data_tile_size_rcp;uniform vec4 u_header_data_rescale;uniform vec4 u_pattern_scale_offset;uniform float u_pattern_opacity;uniform sampler2D u_tex_main_data;uniform sampler2D u_tex_pattern_primary;
211#endif
212#ifdef RAIN
213uniform sampler2D u_tex_pattern_secondary;
214#endif
215#ifdef CLOUDS
216uniform vec2 u_gradient_scale_offset;uniform sampler2D u_tex_gradient_secondary;
217#endif
218varying vec2 v_uv;
219#define isInRange(x, a, b) saturate(sign((x) - float(a)) - sign((x) - float(b)))
220#ifdef RAIN
221vec3 getRain(vec3 resultColor,lowp vec4 s11,lowp vec4 s12,lowp vec4 s21,lowp vec4 s22,highp vec4 w4,lowp float patternMask){vec4 g4=vec4(s11.g,s12.g,s21.g,s22.g)*u_header_data_rescale.z+u_header_data_rescale.w;lowp vec4 mask1=vec4(dot(isInRange(g4,6,7),w4),dot(isInRange(g4,4,6),w4),dot(isInRange(g4,7,8),w4),dot(isInRange(g4,8,9),w4));mask1=saturate(mask1*10.0-4.5);lowp vec4 mask2=vec4(dot(isInRange(g4,9,10),w4),dot(isInRange(g4,10,11),w4),dot(isInRange(g4,11,12),w4),dot(isInRange(g4,3,4),w4));mask2=saturate(mask2*10.0-4.5);mediump vec2 patternTexcoord=gl_FragCoord.xy*u_pattern_scale_offset.xy+u_pattern_scale_offset.zw;lowp vec4 patt=texture2D(u_tex_pattern_primary,patternTexcoord);lowp vec4 patt2=texture2D(u_tex_pattern_secondary,patternTexcoord);lowp vec4 masked1=patt*mask1;lowp vec4 masked2=patt2*mask2;const vec4 colorSnowflake=vec4(0.85,0.85,1.0,0.65);
221const vec4 colorSnowflakeDiamond=vec4(1.0,1.0,1.0,0.55);const vec4 colorSnowflakeRaindrop=vec4(0.8,0.9,1.0,0.5);const vec4 colorBallThing=vec4(0.8,0.7,1.0,0.6);const vec3 colorLightning=vec3(1.0,1.0,0.7);const vec3 opacitiesLightning=vec3(0.27,0.5,0.7);const vec4 colorExclamationMark=vec4(1.0,0.8,0.8,0.9);masked1*=patternMask*u_pattern_opacity;masked2*=patternMask*u_pattern_opacity;resultColor=mix(resultColor,colorSnowflake.rgb,masked1.r*colorSnowflake.a);resultColor=mix(resultColor,colorSnowflakeDiamond.rgb,masked1.g*colorSnowflakeDiamond.a);resultColor=mix(resultColor,colorSnowflakeRaindrop.rgb,masked1.b*colorSnowflakeRaindrop.a);resultColor=mix(resultColor,colorBallThing.rgb,masked1.a*colorBallThing.a);resultColor=mix(resultColor,colorLightning,masked2.r*opacitiesLightning.x);resultColor=mix(resultColor,colorLightning,masked2.g*opacitiesLightning.y);resultColor=mix(resultColor,colorLightning,masked2.b*opacitiesLightning.z);resultColor=mix(resultColor,colorExclamationMark.rgb,masked2.a*colorExclamationMark.a);return resultColor;}
222#endif
223#ifdef CLOUDS
224vec3 getClouds(vec3 resultColor,lowp vec4 s11,lowp vec4 s12,lowp vec4 s21,lowp vec4 s22,highp vec4 w4,lowp float patternMask){float g=dot(vec4(s11.g,s12.g,s21.g,s22.g),w4);g=g*u_header_data_rescale.z+u_header_data_rescale.w;if(g>10.0){g=g*10.0-90.0;}mediump vec2 patternTexcoord=gl_FragCoord.xy*u_pattern_scale_offset.xy+u_pattern_scale_offset.zw;lowp vec4 patt=texture2D(u_tex_pattern_primary,patternTexcoord);lowp vec4 grad2=texture2D(u_tex_gradient_secondary,vec2(g*u_gradient_scale_offset.x+u_gradient_scale_offset.y,0.5));lowp float patternOpacity=max(0.0,sign(patt.r+grad2.a-1.0))*patternMask*u_pattern_opacity;return mix(resultColor,grad2.rgb,patternOpacity);}
225#endif
226#ifdef CCL
227vec3 getCcl(vec3 resultColor,lowp vec4 s11,lowp vec4 s12,lowp vec4 s21,lowp vec4 s22,highp vec4 w4,lowp float patternMask){mediump vec4 g4=vec4(s11.g,s12.g,s21.g,s22.g)*u_header_data_rescale.z+u_header_data_rescale.w;lowp vec4 mr4=sign(g4-1.0)-sign(g4-2.0)+sign(g4-3.0)-sign(g4-4.0);lowp vec4 mg4=sign(g4-2.0)-sign(g4-3.0)+sign(g4-4.0)-sign(g4-5.0);lowp vec4 mb4=sign(g4-6.0);lowp vec4 ma4=sign(g4-3.0)-sign(g4-6.0)+sign(g4-7.0);lowp float mr=dot(saturate(mr4),w4);lowp float mg=dot(saturate(mg4),w4);lowp float mb=dot(saturate(mb4),w4);lowp float ma=dot(saturate(ma4),w4);mediump vec2 patternTexcoord=gl_FragCoord.xy*u_pattern_scale_offset.xy+u_pattern_scale_offset.zw;lowp vec4 patt=texture2D(u_tex_pattern_primary,patternTexcoord);patt.xyz*=u_pattern_opacity;lowp vec4 mask=saturate(vec4(mr,mg,mb,ma)*10.0-4.5);lowp float add=min(dot(patt.rg,mask.rg),1.0)*0.4;lowp vec2 pattM=vec2(patt.a*0.35,patt.b-0.35);lowp float mul=1.0-clamp(dot(pattM,mask.ab),0.0,0.4);return mix(resultColor,mix(resultColor*mul,vec3(1.0),add),patternMask);}
228#endif
229vec4 renderBorder(vec2 texCoords,float borderWidth){float edge=min(min(texCoords.s,texCoords.t),min(1.0-texCoords.s,1.0-texCoords.t));float border=step(edge,borderWidth);return vec4(border);}
230#ifdef PATTERN_ANY
231vec3 applyPattern(vec3 resultColor,vec2 tc,float patternMask){if(patternMask<0.5/255.0){return resultColor;}vec2 dataTileTexcoord=tc*u_data_tile_scale_offset.xy+u_data_tile_scale_offset.zw;vec2 dataTileTexcoordPixels=tc*u_data_tile_size_usable;highp vec2 f1=fract(dataTileTexcoordPixels);highp vec2 f0=vec2(1.0)-f1;highp vec4 w4=vec4(f0.y*f0.x,f0.y*f1.x,f1.y*f0.x,f1.y*f1.x);highp vec4 sampleCoordsX=vec4(dataTileTexcoord.x-u_data_tile_size_rcp,dataTileTexcoord.x,dataTileTexcoord.x+u_data_tile_size_rcp,dataTileTexcoord.x+u_data_tile_size_rcp*2.0);highp vec4 sampleCoordsY=vec4(dataTileTexcoord.y-u_data_tile_size_rcp,dataTileTexcoord.y,dataTileTexcoord.y+u_data_tile_size_rcp,dataTileTexcoord.y+u_data_tile_size_rcp*2.0);lowp vec4 s11=texture2D(u_tex_main_data,vec2(sampleCoordsX[1],sampleCoordsY[1]));lowp vec4 s12=texture2D(u_tex_main_data,vec2(sampleCoordsX[2],sampleCoordsY[1]));lowp vec4 s21=texture2D(u_tex_main_data,vec2(sampleCoordsX[1],sampleCoordsY[2]));lowp vec4 s22=texture2D(u_tex_main_data,vec2(sampleCoordsX[2],sampleCoordsY[2]));
232#ifdef RAIN
233resultColor=getRain(resultColor,s11,s12,s21,s22,w4,patternMask);
234#endif
235#ifdef CLOUDS
236resultColor=getClouds(resultColor,s11,s12,s21,s22,w4,patternMask);
237#endif
238#ifdef CCL
239resultColor=getCcl(resultColor,s11,s12,s21,s22,w4,patternMask);
240#endif
241return resultColor;}
242#endif
243void main(){vec4 color=texture2D(u_tex_preprocessed_tile,v_uv);if(u_tile_valid){
244#ifdef PATTERN_ANY
245if(u_tile_valid){color.rgb=applyPattern(color.rgb,v_uv,color.a);}
246#endif
247color.a=1.0;}
248#ifdef DEBUG_TILE_BORDER
249vec4 border=renderBorder(v_uv,0.0025);vec4 borderColor=vec4(1.0,0.0,0.0,1.0);gl_FragColor=mix(color,borderColor,border.r);
250#else
251gl_FragColor=color;
252#endif
253}`;const nx=[`u_tex_preprocessed_tile`,`u_tex_main_data`,`u_tex_pattern_primary`,`u_tex_pattern_secondary`,`u_tex_gradient_secondary`,`u_header_data_rescale`,`u_tile_valid`,`u_data_tile_scale_offset`,`u_data_tile_size_usable`,`u_pattern_scale_offset`,`u_data_tile_size_rcp`,`u_pattern_opacity`,`u_gradient_scale_offset`,`u_projection_fallback_matrix`,`u_projection_matrix`,`u_projection_clipping_plane`,`u_projection_transition`,`u_projection_tile_mercator_coords`];var rx=class e{constructor(e,t){C(this,`_emptyPlaceholderTexture`,void 0),C(this,`_variant`,void 0),C(this,`_patternTranslator`,new ex),this._variant=t,this._initializeRenderer(e)}renderTiles(t,n,r,i,a,o){if(!o&&this._variant!==`DEFAULT`)throw Error(`Non-default tile renderer may not be used without pattern textures.`);let s=e._shader.getShader(t,{projectionVariantData:n.shaderData,customDefines:`#define ${this._variant}\n`});if(!s)return;t.useProgram(s.program);let c;if(this._variant===`RAIN`){var l,u,d,f,p;t.activeTexture(t.TEXTURE2),t.bindTexture(t.TEXTURE_2D,(l=o==null||(u=o.texturePType1)==null?void 0:u.texture)==null?null:l),t.uniform1i(s.uniformLocations.u_tex_pattern_primary,2),t.activeTexture(t.TEXTURE3),t.bindTexture(t.TEXTURE_2D,(d=o==null||(f=o.texturePType2)==null?void 0:f.texture)==null?null:d),t.uniform1i(s.uniformLocations.u_tex_pattern_secondary,3),c=o==null||(p=o.texturePType1)==null?void 0:p.dimensions}if(this._variant===`CLOUDS`){var m,h,g,_,ee,te,ne,v,re,ie;
253t.activeTexture(t.TEXTURE2),t.bindTexture(t.TEXTURE_2D,(m=o==null||(h=o.textureCloudsRain)==null?void 0:h.texture)==null?null:m),t.uniform1i(s.uniformLocations.u_tex_pattern_primary,2),t.activeTexture(t.TEXTURE4),t.bindTexture(t.TEXTURE_2D,(g=a==null||(_=a.texture)==null?void 0:_.texture)==null?null:g),t.uniform1i(s.uniformLocations.u_tex_gradient_secondary,4),t.uniform2f(s.uniformLocations.u_gradient_scale_offset,(ee=a==null?void 0:a.mul)==null?1:ee,(te=a==null?void 0:a.add)==null?0:te),c={x:((ne=o==null||(v=o.textureCloudsRain)==null||(v=v.dimensions)==null?void 0:v.x)==null?1:ne)*2,y:((re=o==null||(ie=o.textureCloudsRain)==null||(ie=ie.dimensions)==null?void 0:ie.y)==null?1:re)*2}}if(this._variant===`CCL`){var ae,y,oe;t.activeTexture(t.TEXTURE2),t.bindTexture(t.TEXTURE_2D,(ae=o==null||(y=o.textureCCL)==null?void 0:y.texture)==null?null:ae),t.uniform1i(s.uniformLocations.u_tex_pattern_primary,2),c=o==null||(oe=o.textureCCL)==null?void 0:oe.dimensions}if(c){let e=Math.max(window.devicePixelRatio,1)*.5,n={x:c.x*e,y:c.y*e};this._variant===`CLOUDS`&&(n.x=Math.max(Math.round(n.x/2)*2,c.x),n.y=Math.max(Math.round(n.y/2)*2,c.y)),this._patternTranslator.update(n),t.uniform4f(s.uniformLocations.u_pattern_scale_offset,1/n.x,-1/n.y,this._patternTranslator.translation.x,this._patternTranslator.translation.y),t.uniform1f(s.uniformLocations.u_pattern_opacity,this._patternTranslator.opacity)}let se=i.getRenderableCoords();t.disable(t.DEPTH_TEST),t.disable(t.CULL_FACE),t.enable(t.STENCIL_TEST),t.stencilMask(255),t.clearStencil(0),t.clear(t.STENCIL_BUFFER_BIT),t.stencilOp(t.KEEP,t.KEEP,t.REPLACE),t.stencilFunc(t.NOTEQUAL,1,255),this._drawTiles(t,r,i,s,se,!1),n.defaultProjectionData.projectionTransition>0&&this._drawTiles(t,r,i,s,se,!0),t.disableVertexAttribArray(s.mainAttribLocation),t.bindBuffer(t.ARRAY_BUFFER,null),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,null),t.bindTexture(t.TEXTURE_2D,null),t.colorMask(!1,!1,!1,!0),t.clearColor(0,0,0,1),t.clear(t.COLOR_BUFFER_BIT),t.colorMask(!0,!0,!0,!0),r.painter.clearStencil()}destroy(e){this._emptyPlaceholderTexture.destroy(e),this._patternTranslator.destroy()}_drawTiles(e,t,n,r,i,a){let o;for(let s=i.length-1;s>=0;s--){let c=i[s],l=ie(c),u=n.getTile(l);if(!u)continue;let d=Qv.getTileMesh(t,e,l.y,l.z,a);(o==null?void 0:o.vbo)!==d.vbo&&(e.bindBuffer(e.ARRAY_BUFFER,d.vbo),e.enableVertexAttribArray(r.mainAttribLocation),e.vertexAttribPointer(r.mainAttribLocation,2,e.SHORT,!1,0,0)),(o==null?void 0:o.ibo)!==d.ibo&&e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,d.ibo),o=d;let f=u.valid?u.tex:this._emptyPlaceholderTexture;e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,f.texture),e.uniform1i(r.uniformLocations.u_tex_preprocessed_tile,0);let p=1<<c.z,m={wrap:Math.floor(c.x/p),canonical:{x:l.x,y:l.y,z:l.z}},h=t.transform.getProjectionData({overscaledTileID:m,applyGlobeMatrix:!0});e.uniform1i(r.uniformLocations.u_tile_valid,+!!u.valid),u.valid&&this._variant!==`DEFAULT`&&(e.activeTexture(e.TEXTURE1),e.bindTexture(e.TEXTURE_2D,u.dataTex),e.uniform1i(r.uniformLocations.u_tex_main_data,1),e.uniform4f(r.uniformLocations.u_header_data_rescale,255*u.dataHeader.decoderRstep,u.dataHeader.decoderRmin,255*u.dataHeader.decoderGstep,u.dataHeader.decoderGmin+(this._variant===`RAIN`||this._variant===`CCL`?.5:0)),e.uniform4f(r.uniformLocations.u_data_tile_scale_offset,u.dataUniforms.dataTileScaleOffset[0],u.dataUniforms.dataTileScaleOffset[1],u.dataUniforms.dataTileScaleOffset[2],u.dataUniforms.dataTileScaleOffset[3]),e.uniform1f(r.uniformLocations.u_data_tile_size_usable,u.dataUniforms.sizeS),e.uniform1f(r.uniformLocations.u_data_tile_size_rcp,u.dataUniforms.srcPixelSize)),e.uniformMatrix4fv(r.uniformLocations.u_projection_matrix,!1,h.mainMatrix),e.uniformMatrix4fv(r.uniformLocations.u_projection_fallback_matrix,!1,h.fallbackMatrix),e.uniform4f(r.uniformLocations.u_projection_clipping_plane,...h.clippingPlane),e.uniform4f(r.uniformLocations.u_projection_tile_mercator_coords,...h.tileMercatorCoords),e.uniform1f(r.uniformLocations.u_projection_transition,h.projectionTransition),e.drawElements(e.TRIANGLES,d.indexCount,e.UNSIGNED_SHORT,0)}}_initializeRenderer(e){let t=Fb(!1,`rgba(0,0,0,0)`);this._emptyPlaceholderTexture=new Kg(e),this._emptyPlaceholderTexture.updateContent(e,[t.getContext(`2d`).getImageData(0,0,t.width,t.height).data,{x:t.width,y:t.height}]),this._patternTranslator.init()}};C(rx,`_shader`,new $v(ey,tx,nx));const ix=`tileLayer`;var ax=class e{constructor(e,t){C(this,`_rendererCache`,new Map),C(this,`_enabled`,!0),C(this,`_hasSea`,!1),C(this,`_landOnly`,!1),C(this,`_latestParam
253s`,void 0),C(this,`_switchableCache`,null),C(this,`_cloudsPatternGradient`,void 0),C(this,`_cloudsPatternGradientDirty`,!0),C(this,`_currentOverlay`,void 0),C(this,`_map`,void 0),C(this,`_autoSwitchTimer`,null),C(this,`_latestCache`,null),C(this,`eventManager`,void 0),C(this,`type`,`custom`),C(this,`id`,void 0),C(this,`_debugPrintTiles`,()=>{let e=`(no cache)`;this._switchableCache&&this._switchableCache.currentCache&&this._switchableCache.currentCache.debug&&(e=Kv(this._switchableCache.lastBounds,this._switchableCache.lastZoom,this._switchableCache.currentCache.debug)),console.log(`###
254
255`+e)}),this.id=e,this._latestParams=vt(t),this.eventManager=new zb,this._updateCache()}get switchableCache(){return this._switchableCache}render(t,n){if(!this._switchableCache||!this._map)return;let r=this._getCloudsPatternGradient(t),i=e._textures;this._selectRenderer(t,this._currentOverlay,!i).renderTiles(t,n,this._map,this._switchableCache,r,i)}onAdd(e,t){this._map=e,this.eventManager.addMapLibreListener(e,`move`,e=>{this._onUpdate()}),this._prepareTextures(t),P.on(`debugPrintTiles`,this._debugPrintTiles)}enableDisableLayer(e){let t=Q.maplibreMap.getLayer(this.id);t&&(t.visibility=e?`visible`:`none`),Q.maplibreMap.triggerRepaint()}paramsChanged(e,t=!1){var n,r;this._cloudsPatternGradientDirty=!0,!(((n=this._latestParams)==null?void 0:n.fullPath)===e.fullPath&&((r=this._latestParams)==null?void 0:r.layer)===e.layer&&!t)&&(this._latestParams=vt(e),this._updateCache())}onRemove(e,t){var n;this._destroyRenderers(t),this.eventManager.removeListeners(),(n=this._switchableCache)==null||n.dispose(),this._switchableCache=null,vb(ix,!1),P.off(`debugPrintTiles`,this._debugPrintTiles),this._updateLandSeaMask(!0),this._map=void 0}_selectRenderer(e,t,n=!1){let r=`DEFAULT`;n||(t===`ccl`?r=`CCL`:t===`clouds`?r=`CLOUDS`:t===`rain`&&(r=`RAIN`));let i=this._rendererCache.get(r);if(i)return i;let a=new rx(e,r);return this._rendererCache.set(r,a),a}_destroyRenderers(e){for(let t of this._rendererCache.values())t.destroy(e);this._rendererCache.clear()}_onUpdate(){var e;this._enabled&&((e=this._switchableCache)==null||e.update(Q))}_updateLandSeaMask(e){if(e){Yg.emit(`toggleSeaMask`,!1),Yg.emit(`toggleLandMask`,!1);return}this._latestParams.sea!==this._hasSea&&(this._hasSea=!!this._latestParams.sea,Yg.emit(`toggleSeaMask`,this._hasSea)),this._latestParams.landOnly!==this._landOnly&&(this._landOnly=this._latestParams.landOnly,Yg.emit(`toggleLandMask`,this._landOnly))}_updateCache(){let e=qv(this._latestParams);if(this._latestCache=e,e.cache.once(`alltilesloaded`,()=>{e===this._latestCache&&vb(ix,!1),Q.maplibreMap.triggerRepaint(),P.emit(`redrawFinished`,this._latestParams)}),e.cache.on(`tileloaded`,()=>{Q.maplibreMap.triggerRepaint()}),vb(ix,!0),this._autoSwitchTimer&&clearTimeout(this._autoSwitchTimer),this._autoSwitchTimer=setTimeout(()=>{var e;(e=this._switchableCache)==null||e.forceSwitch(),this._autoSwitchTimer=null},3e3),this._switchableCache)this._switchableCache.setCache(e);else{this._currentOverlay=this._latestParams.overlay;let t=new $b(e,1,20,20);this._switchableCache=t,t.onSwitch=()=>{this._updateLandSeaMask(),this._currentOverlay=this._latestParams.overlay,Q.maplibreMap.triggerRepaint(),t.currentCache.cache.on(`tileloaded`,()=>{Q.maplibreMap.triggerRepaint()})},t.update(Q),this._updateLandSeaMask()}}_getCloudsPatternGradient(e){return(this._cloudsPatternGradientDirty||!this._cloudsPatternGradient)&&(this._cloudsPatternGradientDirty=!1,this._cloudsPatternGradient&&this._cloudsPatternGradient.texture&&this._cloudsPatternGradient.texture.destroy(e),this._cloudsPatternGradient=K_(e,V.rainClouds)),this._cloudsPatternGradient}async _prepareTextures(t){e._textures===null&&(e._texturesLoadPromise===null&&(e._texturesLoadPromise=e._prepareTextures(t)),await e._texturesLoadPromise)}static async _prepareTextures(t){let n=q_(t);n.bind(t,t.REPEAT,t.NEAREST),t.bindTexture(t.TEXTURE_2D,null);let r={texturePType1:null,texturePType2:null,textureCCL:null,textureCloudsRain:n},i=e=>{console.error(`Error loading TileLayerPreprocessor texture:`,e)},a=Kg.createFromUrl(t,`/img/textures/ptype1_v4.png`).then(e=>{e.bind(t,t.REPEAT,t.LINEAR),t.bindTexture(t.TEXTURE_2D,null),r.texturePType1=e}).catch(i),o=Kg.createFromUrl(t,`/img/textures/ptype2_v4.png`).then(e=>{e.bind(t,t.REPEAT,t.LINEAR),t.bindTexture(t.TEXTURE_2D,null),r.texturePType2=e}).catch(i),s=Kg.createFromUrl(t,`/img/textures/ccl32_v4.png`).then(e=>{e.bind(t,t.REPEAT,t.LINEAR),t.bindTexture(t.TEXTURE_2D,null),r.textureCCL=e}).catch(i);return Promise.all([a,o,s]).finally(()=>{e._textures=r,e._texturesLoadPromise=null})}};C(ax,`_textures`,null),C(ax,`_texturesLoadPromise`,null);var ox=y({TileLayer:()=>cx});let sx;var cx=class extends Ub{constructor(e){super(e),C(this,`_layerId`,void 0),C(this,`_lastUsedMapParams`,void 0),C(this,`_initializeCallbackSet`,!1),this._layerId=`${e.ident}`,this.interpolator=Kb}onopen(e){this._ensureMapAndSetParams(e,!0)}close(e){if(super.close(e),e.includes(`tileLayer`)||e.includes(`daySwitcher`)||e.includes(`accumulations`)||e.includes(`levelsRange`)||e.includes(`fireDanger`)||e.includes(`noUserControl`)){sx==null||sx.enableDisableLayer(!1);return}sx&&(Q.removeMapLibreOrderedLayer(sx.id),sx=void 0)}redraw(){sx&&this._lastUsedMapParams&&sx.paramsChanged(this._lastUsedMapParams,!0)}async paramsChanged(e,t,n){var r=this;let i=await t_(e,t,n);r._ensureMapAndSetParams(i)}_ensureMapAndSetParams(e,t=!1){if(!e)throw Error(`[TileLayer] No render params supplied`);e.refTime!==``&&(Kb.paramsChanged(e),sx?(sx.enableDisableLayer(!0),this._lastUsedMapParams=e,sx.paramsChanged(e,t)):this._initialize(e),P.emit(`tileLayerParamsChanged`,e))}_initialize(e){if(this._initializeCallbackSet){this._lastUsedMapParams=e;return}this._lastUsedMapParams=e,this._initializeCallbackSet=!0,ub(()=>{sx=new ax(this._layerId,this._lastUsedMapParams),Q.addMapLibreOrderedLayerToBucket(sx,Wy.MAIN),my(),this._initializeCallbackSet=!1})}},lx=class extends Ub{constructor(...e){super(...e),C(this,`baseLayer`,null)}open(){return this.isOpen=!0,this.interpolator={createFun:e=>{e(pt,pt)}},hy(),this.addOrUpdateBaseLayer(),N.on(`map`,this.addOrUpdateBaseLayer,this),Promise.resolve()}close(e){super.close(e),this.removeBaseLayer(),N.off(`map`,this.addOrUpdateBaseLayer,this),my()}addOrUpdateBaseLayer(){this.removeBaseLayer();let e=N.get(`map`),t=fy();
255this.baseLayer=new ay(`topoMap`,{url:t[e],variant:`default`,minZoomSource:0,maxZoomSource:16,zoomBias:1}),document.body.dataset.map=e,Q.addMapLibreOrderedLayerToBucket(this.baseLayer,Wy.TOPO_MAP)}removeBaseLayer(){this.baseLayer&&(Q.removeMapLibreOrderedLayer(this.baseLayer.id),this.baseLayer=null)}};const ux={tileLayer:new cx({ident:`tileLayer`,userControl:S?`mobile-calendar`:`progress-bar`,requiresFullRenderParams:!0}),noUserControl:new cx({ident:`noUserControl`,userControl:`none`,requiresFullRenderParams:!0}),radarPlus:new Ub({ident:`radarPlus`,dependency:`radar-plus`,userControl:`radar-plus`,requiresFullRenderParams:!0}),capAlerts:new Ub({ident:`capAlerts`,dependency:`cap-alerts`,userControl:`cap-alerts`}),avalancheDanger:new Ub({ident:`avalancheDanger`,dependency:`avalanche-danger`,userControl:`avalanche-danger`}),isolines:new Ub({ident:`isolines`,dependency:`isolines`,requiresFullRenderParams:!0}),particles:new Ub({ident:`particles`,dependency:`gl-particles`,requiresFullRenderParams:!0}),daySwitcher:new cx({ident:`daySwitcher`,userControl:`day-switcher`,requiresFullRenderParams:!0}),accumulations:new cx({ident:`accumulations`,userControl:`accumulations`,requiresFullRenderParams:!0}),levelsRange:new cx({ident:`levelsRange`,userControl:`levels-range`,requiresFullRenderParams:!0}),fireDanger:new cx({ident:`fireDanger`,userControl:`fire-danger`,requiresFullRenderParams:!0}),topoMap:new lx({ident:`topoMap`,userControl:`map-selector`})};var dx=y({getActiveRenderers:()=>mx});let fx;function px(){for(let e of Object.values(ux))e.isOpen&&e.redraw()}function mx(){let e=dc[N.get(`overlay`)].layers;return e?[...new Set(e.map(e=>xl[e].renderer))]:[]}async function hx(e){let t=dc[e.overlay].layers;if(!t){P.emit(`redrawFinished`,e);return}let n=e.isolinesOn?[`${e.isolinesType}Isolines`,...t]:t,r=n.map(e=>xl[e].renderer);
255Object.values(ux).forEach(e=>{!r.includes(e.ident)&&e.isOpen&&e.close(r)});let i=N.get(`timestamp`),a=n.map(async t=>{let{renderer:n}=xl[t],r=ux[n];return r.isOpen?r.paramsChanged(t,e,i):r.open(t,e,i)});await Promise.all(a);let o=r.filter(e=>{var t;return((t=ux[e])==null?void 0:t.userControl)!==void 0}).map(e=>ux[e].userControl)[0];if(o!==fx){if(fx&&fx!==`none`){var s;(s=Y[fx])==null||s.close({disableClosingAnimation:!0})}if(o&&o!==`none`){var c;(c=Y[o])==null||c.open({disableOpeningAnimation:!0})}fx=o}P.emit(`redrawFinished`,e)}P.on(`paramsChanged`,hx),P.on(`redrawLayers`,px);var gx=y({});let _x,vx=null;const yx=e=>{var t;return!!((t=dc[e].layers)!=null&&t.some(e=>xl[e].renderer===`levelsRange`))},bx=(e,t)=>{if(yx(e))return;let n=N.get(`level`);(!t.includes(n)||!dc[e].hasMoreLevels)&&N.set(`level`,t[0]||`surface`)};function xx(e){let t=N.get(`overlay`),n=N.get(`product`);bx(t,N.get(`availLevels`));let r=N.get(`level`),i=N.get(`levelsRange`),a=N.get(`isolinesType`),o=N.get(`isolinesOn`),s={acRange:Math.floor(N.get(`acRange`)),levelsRange:i,isolinesType:a,isolinesOn:o,level:r,overlay:t,product:n};P.emit(`paramsChanged`,s,e)}const Sx=St(xx,100);let Cx;const wx=(e,t)=>{let n=Vb(e,t);N.set(`availLevels`,n),bx(e,n)};N.defineProperty(`timestamp`,`syncSet`,e=>typeof e==`string`?parseInt(e):e),N.defineProperty(`product`,`asyncSet`,async e=>{let t=N.get(`product`),n=K[e];t!==e&&K[t].close();let r=await n.getCalendar();if(r){N.set(`calendar`,r);let{end:e,start:t}=r,i=N.get(`timestamp`),a=Sl(r.timestamps,i,!0);if(a!==void 0&&(i=r.timestamps[a]),n.hasAccumulations)if(i+N.get(`acRange`)*36e5>e){let t=Math.floor((e-N.get(`timestamp`))/T);t>=12?N.set(`acRange`,t):(N.set(`timestamp`,e-12*T),N.set(`acRange`,12))}else N.set(`timestamp`,i);else if(i<t||i>e){let n=D(i,t,e);N.set(`timestamp`,n)}}else N.set(`calendar`,null);return N.set(`preferredProduct`,n.preferredProduct),n.open(),wx(Cx||N.get(`overlay`),e),e}),N.defineProperty(`overlay`,`asyncSet`,async e=>{Cx=e;let t=Ed(e,N.get(`product`));return t!==N.get(`product`)&&await N.set(`product`,t),le(/overlay-\S+/,`overlay-${e}`),N.set(`availProducts`,xd[e]),wx(e,t),e}),[`acRange`,`levelsRange`,`level`,`isolinesType`,`isolinesOn`,`overlay`,`product`].forEach(e=>{N.on(e,Sx.bind(null,e))}),N.on(`timestamp`,e=>{let t=_n(e);t!==_x&&(_x=t,Sx(`path`))});const Tx=gg||N.get(`startUpOverlay`)||`wind`,Ex=_g||N.get(`startUpLastProduct`)||Fd(Tx)||`ecmwf`;N.set(`product`,Ex,{forceChange:!0}),N.set(`overlay`,Tx,{forceChange:!0});const Dx=St(()=>{let e=N.get(`product`);N.set(`product`,e,{forceChange:!0})},500);N.on(`calendar`,()=>{clearTimeout(vx),N.set(`timestamp`,N.get(`timestamp`),{forceChange:!0}),vx=setTimeout(Dx,.5*T)}),N.on(`subscription`,Dx),N.on(`visibility`,Dx),P.on(`onResume`,Dx);var Ox=y({displayPoiOnMap:()=>jx,poisCheckboxes:()=>Ax});const kx=[{bindStore:`displayAdStations`,checkboxText:S?`Airport`:`Airp.`,dataTestId:`poi-airp-toggle`},{bindStore:`displayWMOStations`,checkboxText:`WMO`,dataTestId:`poi-wmo-toggle`},{bindStore:`displayMadisPWStations`,checkboxText:`PWS`,dataTestId:`poi-pws-toggle`},{bindStore:`displayShipStations`,checkboxText:`ShipBuoy`,dataTestId:`poi-shipbouy-toggle`}],Ax={favs:[],cities:[],wind:kx,temp:kx,precip:[],metars:[{bindStore:`displayAirspaces`,checkboxTranslation:`MAP_AIRSPACES`,dataTestId:`poi-vfr-toggle`},{bindStore:`displayHeliports`,checkboxTranslation:`METAR_HELIPORTS`,dataTestId:`poi-heliports-toggle`}],cams:[{bindStore:`camsPreviews`,checkboxTranslation:`CAMS_PREVIEWS`,dataTestId:`poi-webcams-preview-toggle`}],pgspots:[],kitespots:[],surfspots:[],tide:[],firespots:[],airq:[],radiosonde:[],empty:[],stations:[]},jx=async()=>{let e=N.get(`pois`),t=N.get(`poisTemporary`);return!!(e===`favs`&&await Op(e=>e.type!==`route`))||e!==`empty`||t!==`empty`},Mx=async()=>{await jx()&&(P.emit(`rqstOpen`,`poi-libs`),N.off(`pois`,Mx),N.off(`poisTemporary`,Mx))};P.once(`redrawFinished`,async()=>{!Gp()&&N.get(`pois`)===`favs`&&N.set(`pois`,`empty`),await jx()?Mx():(N.on(`pois`,Mx),N.on(`poisTemporary`,Mx))});var Nx=y({AlertConditionType:()=>Fx,AlertStatus:()=>Px,CloudCoverage:()=>Rx,Direction:()=>Ix,Weekday:()=>Lx});let Px=function(e){return e.Triggered=`triggered`,e.Normal=`normal`,e.Suspended=`suspended`,e}({}),Fx=function(e){return e.Aqi=`aqi`,e.Cloudiness=`cloudiness`,e.FreshSnow=`freshSnow`,e.Pollen=`pollen`,e.Rainfall=`rainfall`,e.Swell=`swell`,e.Temperature=`temperature`,e.Time=`time`,e.Wind=`wind`,e}({}),Ix=function(e){return e.N=`N`,e.NE=`NE`,e.E=`E`,e.SE=`SE`,e.S=`S`,e.SW=`SW`,e.W=`W`,e.NW=`NW`,e}({}),Lx=function(e){return e.Monday=`mon`,e.Tuesday=`tue`,e.Wednesday=`wed`,e.Thursday=`thu`,e.Frid
255ay=`fri`,e.Saturday=`sat`,e.Sunday=`sun`,e}({}),Rx=function(e){return e.SkyClear=`SKC`,e.Few=`FEW`,e.Scattered=`SCT`,e.Broken=`BKN`,e.Overcast=`OVC`,e}({});var zx=y({getPositionAndDisplayMarker:()=>pS,onPosition:()=>sS,start:()=>fS,stop:()=>uS});let Bx=1,Vx=0,$=null,Hx=!1,Ux=null,Wx=null,Gx=null,Kx=!0,qx=null,Jx=null;const Yx=Kt(/Huawei/i.test(navigator.userAgent)?`HmsGeolocation`:`Geolocation`),Xx=Kt(`WindyCompassPlugin`),Zx=new t({className:`icon-my-position`,html:`<img src="/img/maps/actual-pos.png" />`,iconSize:[16,36],iconAnchor:[8,18]}),Qx=new t({className:`icon-my-position`,html:`<img src="/img/maps/actual-pos-no-heading.png" />`,iconSize:[16,16],iconAnchor:[8,8]}),$x=new t({className:`icon-in-motion`,html:`<div class="icon-in-motion__line">
256                <div class="icon-in-motion__ruler1">10 min</div>
257                <div class="icon-in-motion__ruler2">5 min</div>
258          </div>
259          <img src="/img/maps/actual-pos-flying3.png" />`,iconSize:[0,0],iconAnchor:[0,0]}),eS=(e,t,n)=>{if(Jx={heading:e,speed:t,lat:n},$){var r,i;(r=$.getElement())==null||r.style.setProperty(`--heading`,`${Math.floor(e)}deg`);let a=t*600,o=Q.getZoom(),s=a/(40075016.686*Math.cos(n*Math.PI/180)/(256*2**o));(i=$.getElement())==null||i.style.setProperty(`--distance`,`${Math.round(s)}px`)}};Q.on(`zoomend`,()=>{if(Bx===3&&Jx){let{heading:e,speed:t,lat:n}=Jx;eS(e,t,n)}});const tS=Ct(function(e,t){if(!t&&typeof(e==null?void 0:e.heading)==`number`&&$){var n;Bx!==2&&(Bx=2,$==null||$.setIcon(Zx)),(n=$.getElement())==null||n.style.setProperty(`--heading`,`${Math.floor(e.heading)}deg`)}else if(Bx!==1){Bx=1,$==null||$.setIcon(Qx);return}},300),nS=()=>{qx!==null&&(clearTimeout(qx),qx=null)},rS=async()=>{Xx&&(Gx=await Xx.watchHeading({enableHighAccuracy:!0},tS))},iS=()=>{if(nS(),Bx=1,$){var e;$.setIcon(Qx),(e=$.getElement())==null||e.classList.remove(`hide-text`)}Kx=!0,rS()},aS=()=>{nS(),Bx===3&&(qx=setTimeout(()=>{Bx===3&&iS()},3e4))},oS=async()=>{Xx&&Gx&&(await Xx.clearWatch({id:Gx}),Gx=null)},sS=async(e,t)=>{var n;if(t||!e){console.error(`Error getting position:`,t);return}let{coords:{latitude:r,longitude:i,speed:a,heading:o}}=e,s=(n=`course`in e.coords?e.coords.course:null)==null?o:n;$?$.setLatLng([r,i]):$=new f([r,i],{icon:Qx,zIndexOffset:5e3,interactive:!1}).addTo(Q);let c=a!==null&&a>=1&&s!==null;if(c&&Bx!==3){if(await oS(),Bx=3,$.setIcon($x),eS(s,a,r),aS(),Kx){var l;Kx=!1,await mn(1e4),Kx=!1,(l=$.getElement())==null||l.classList.add(`hide-text`)}}else !c&&Bx===3?iS():!c&&Bx!==2?await rS():c&&Bx===3&&(eS(s,a,r),aS());if(Hx){let e=Q.getZoom();Q.setView([r,i],Math.max(e,8)),Hx=!1}N.set(`gpsLocation`,{lat:r,lon:i,source:`gps`,ts:Date.now()})},cS=()=>{Wx!==null&&(navigator.geolocation.clearWatch(Wx),Wx=null)},lS=()=>{Ux!==null&&Yx&&(Yx.clearWatch({id:Ux}),Ux=null)},uS=()=>{N.set(`showMyPosition`,!1),Bx=-1,Vx=0,$&&(Q.removeLayer($),$=null),cS(),lS(),oS(),nS(),Jx=null},dS={enableHighAccuracy:!0,timeout:3e4,maximumAge:0,interval:2e4},fS=async(e=!1)=>{let t=e?1:2;t!==Vx&&(Vx===2&&t===1||(Bx=-1,Vx=t,Hx=e,N.set(`showMyPosition`,!0),Yx?(lS(),Ux=await Yx.watchPosition(dS,sS)):navigator.geolocation?(cS(),Wx=navigator.geolocation.watchPosition(sS,e=>{console.error(`Error getting position:`,e)},dS)):(console.error(`Geolocation is not supported by this browser.`),uS()),e&&(await mn(rt*2),Vx===1&&uS())))},pS=async(e={})=>(fS(!0),Og(e));var mS=y({closeAllPlugins:()=>xS,closePanes:()=>yS});const hS=e=>e in Y,gS=e=>hS(e)&&Y[e]||null;function _S(e){let t=gS(e);t&&!t.neverClose&&t.close()}function vS(e,t){for(let n of Object.keys(Y)){let r=Y[n];if(r&&(r.isOpen||r.isPending)&&r.pane===t&&n!==e)return r}}const yS=(e,t)=>{t.forEach(t=>{let n=vS(e,t);n==null||n.close({disableClosingAnimation:!0})})};async function bS(e,t){let n=e in Y?Y[e]:null;if(!n){O(`pluginCtrl`,`Attempt to open non existent plugin: ${e}`);return}let r=e=>n.open({params:t,disableOpeningAnimation:e});if(!n.pane){r();return}let i=n.pane;switch(i){case`bottom`:yS(e,[`bottom`,`rhpane`,`top`,`fullscreen-mobile`]),r();break;case`center`:yS(e,[`rhpane`,`center`,`fullscreen-mobile`]),r();break;case`fullscreen-mobile`:case`rhpane`:if(yS(e,[`bottom`,`center`]),Y.multimodel.close({disableClosingAnimation:!0}),x)yS(e,[`rhpane`,`nearest`,`fullscreen-mobile`]),r();else{let t=vS(e,i),n=!!t;if(t&&(t.ident===`radiosonde`&&e===`sounding`||t.ident===`sounding`&&e===`radiosonde`)){t==null||t.close({disableClosingAnimation:n}),r(n);return}r(n).then(()=>{t==null||t.close({disableClosingAnimation:n})})}break;case`small-bottom-bottom`:S&&yS(e,[`rhpane`,`fullscreen-mobile`]),yS(e,[i]),r();break;default:yS(e,[i]),r()}}function xS(e){Object.entries(Y).forEach(([t,n])=>{n.pane&&n.isOpen&&e!==t&&_S(t)})}P.on(`rqstOpen`,bS),P.on(`rqstClose`,_S);var SS=y({});P.once(`dependenciesResolved`,()=>{S?S&&P.emit(`rqstOpen`,`mobile-ui`):(P.emit(`rqstOpen`,`rhpane-top`),P.emit(`rqstOpen`,`rhbottom`)),P.emit(`rqstOpen`,`search-input`)});const CS=St(()=>{var e,t;
259let n=Q.getZoom(),r=N.get(`mapLibrary`),i=N.get(`overlay`);n>11.5&&r!==`globe`&&!((e=Y[`map-selector`])!=null&&e.isOpen)?P.emit(`rqstOpen`,`map-selector`):n<=11.5&&(t=Y[`map-selector`])!=null&&t.isOpen&&i!==`topoMap`&&P.emit(`rqstClose`,`map-selector`)},200);Q.on(`zoomend`,CS),CS();let wS=!1;if(N.on(`connection`,async e=>{e&&wS?(wS=!1,await mn(500),await qr({type:`success`,html:F.MSG_ONLINE_APP,timeout:1e4,onclick:()=>window.location.reload()})):(wS=!0,await qr({type:`error`,html:F.MSG_OFFLINE}))}),window.top!==window.self&&!/^http\S+windy\.com/.test(document.referrer)){let e=document.getElementById(`unlegal-embed`);throw(e||document.body).style.display=`block`,Error(`Unlegal embed`)}addEventListener(`popstate`,async({state:e})=>{let{url:t,search:n}=e,r=vn(n),i=cg(n);await og(t,`back-button`,r)||xS(),i&&i.sharedCoords&&Ky(i.sharedCoords)});var TS=y({getCounter:()=>ES,hitCounter:()=>OS,neverSee:()=>kS,shouldDisplayPromo:()=>AS});const ES=async e=>await ro.get(e)||{id:e,displayed:0,ts:0},DS=async(e,t)=>{await ro.put(e,{id:e,displayed:t,ts:Date.now()})},OS=async(e,t=!0)=>{let{displayed:n}=await ES(e);await DS(e,n+1),t&&Yl(`promo`,e)},kS=e=>{DS(e,1e3)},AS=async({id:e,end:t,counter:n,delay:r=0})=>{let i=Date.now();if(t&&i>new Date(t).getTime())return!1;let{ts:a,displayed:o}=await ES(e);return o===0||o<n&&i-a>r};var jS=y({loadPatch:()=>zS,openArticle:()=>FS,openLiveAlert:()=>LS,openObsoleteApp:()=>NS,openPin2Hp:()=>RS,openPromo:()=>IS,openWhatsNewArticle:()=>PS});const MS=async()=>!!await Op(e=>!!(e.pin2homepage&&e.pin2homepage>0)),NS=async()=>{try{let e=await Qm();if(e===null)return!1;let{data:{majorVersion:t,releasedAt:n}}=e;return eC()?!1:t>Number(`51.2.1`.split(`.`)[0])&&Date.now()-new Date(n).getTime()>30*864e5?(P.emit(`rqstOpen`,`startup-promos`,{typeOfPromo:`obsoleteApp`}),!0):!1}catch(e){return console.error(`Error loading or parsing latest.json:`,e),!1}},PS=async e=>{try{let{data:t}=await e;if(!t||eC()||t.importance!==`whatsNew`)return!1;let{id:n}=t,r=`autoOpenArticle-${n}`;return!await AS({id:r,counter:1})||N.get(`sessionCounter`)<=2?!1:(OS(r),XS(),P.emit(`rqstOpen`,`articles`,{id:n,autoOpened:!0}),!0)}catch(e){return console.error(`Error opening whatsNew article:`,e),!1}},FS=async e=>{try{let{data:t}=await e;if(eC()||!t)return!1;let{id:n}=t,r=`article-${n}`;if(!await AS({id:r,counter:3}))return!1;P.emit(`rqstOpen`,`startup-articles`,{data:t});let{ts:i}=await ES(r);return Date.now()-i>36e5&&OS(r),!0}catch(e){return console.error(`Error loading and opening article:`,e),!1}},IS=async e=>{try{let{data:t,status:n}=await e;if(n!==200||t.content.trim()===``||eC()||!t)return!1;let r=`featuredPromo-${t.id}`;return await AS({id:r,counter:200,delay:3*864e5})?(P.emit(`rqstOpen`,`startup-promos`,{data:t,typeOfPromo:`featured`}),OS(r),!0):!1}catch(e){return console.error(`Error loading and opening promo:`,e),!1}},LS=async(e,t)=>{try{let{data:n}=await t;return eC()?!1:n.alerts.length>0?(P.emit(`rqstOpen`,`startup-live-alerts`,{alerts:n.alerts,coords:e}),!0):!1}catch(e){return console.error(`Error loading live alerts:`,e),!1}},RS=async()=>{await em()&&await MS()&&!eC()&&P.emit(`rqstOpen`,`startup-pin2hp`)},zS=async()=>{let e=`?refTime=${new Date().toISOString().replace(/^(.*):.*$/,`$1`)}`;try{await import(`https://www.windy.com/patch/v9/patch.js${e}`)}catch(e){console.error(`Failed to load/run patch`,e)}};var BS=y({addDefaultListeners:()=>GS,back2home:()=>$S,closeAllStartupPlugins:()=>YS,hideStartupElements:()=>XS,shouldHideStartupElements:()=>eC,showStartupElements:()=>qS,unsetShouldBeHidden:()=>nC});let VS=!1,HS=!1;const US=Q.maplibreMap.getContainer(),WS=window.innerHeight>750;function GS(){HS||(document.body.addEventListener(`click`,JS,!0),US.addEventListener(`mousedown`,XS,!0),US.addEventListener(`touchstart`,XS,!0),US.addEventListener(`wheel`,XS,!0),document.body.addEventListener(`keydown`,XS),HS=!0)}function KS(){HS&&(document.body.removeEventListener(`click`,JS,!0),US.removeEventListener(`mousedown`,XS,!0),US.removeEventListener(`touchstart`,XS,!0),US.removeEventListener(`wheel`,XS,!0),document.body.removeEventListener(`keydown`,XS),HS=!1)}async function qS(e){if(VS)return;let t={capAlerts:Fm(e),wx:bm({lat:e.lat,lon:e.lon,source:`hp`},{summary:!0,header:!0,now:!0},void 0,{cache:!1}),liveAlertsPromise:Km(e),articlePromise:Ym(e),promoPromise:Xm(e)};P.emit(`rqstOpen`,`startup-weather`,{coords:e,promises:t}),RS(),!await NS()&&(await PS(t.articlePromise)||WS&&(!VS&&await LS(e,t.liveAlertsPromise)||!VS&&await FS(t.articlePromise)||!VS&&await IS(t.promoPromise)))}function JS(e){if(e&&e.target){let t=e.target;for(;t&&t!==document.body;){if(t&&t.dataset&&t.dataset.ignore===`hp`)return;t=t.parentElement}}XS()}const YS=(e=!0)=>{e&&(P.emit(`rqstClose`,`startup-weather`),P.emit(`rqstClose`,`startup-pin2hp`),P.emit(`rqstClose`,`startup-debug`)),P.emit(`rqstClose`,`startup-articles`),P.emit(`rqstClose`,`startup-live-alerts`),P.emit(`rqstClose`,`startup-promos`)};function XS(){VS||(VS=!0,YS(),KS())}async function ZS(){GS();try{await qS(await jg())}catch(e){await qS(Dg()),O(`startup.ts`,`Unable to get home location, using fallback`,e)}}async function QS(){await NS()||await PS(Ym(Dg()))}async function $S(){GS(),xS(`startup-weather`),N.set(`timestamp`,Date.now()),VS=!1;let e=await jg();qS(e);let t=N.get(`startUpZoom`),n=t==null?`zoom`in e?e.zoom:5:t;Ky({lat:e.lat,lon:e.lon,zoom:n})}P.on(`back2home`,$S);const eC=()=>VS;function tC(){return!1}const nC=()=>VS=!1;P.once(`dependenciesResolved`,()=>{if(tC()?P.emit(`rqstOpen`,`onboarding`):N.get(`showWeather`)&&!hg?ZS():QS(),!S){let e=qt(`[data-ref="back2home"]`);e?e.onclick=$S:O(`startup.ts`,`Unable to hook up back2home icon`)}zS()});var rC=y({});const iC=(e,t)=>{let n=N.get(`timestamp`),r=Sl(e.timestamps,n,!1);if(r!=null&&!(r===e.timestamps.length-1&&t===`ArrowRight`)&&!(r===0&&t===`ArrowLeft`)){let n=t===`ArrowLeft`?r-1:r+1,i=e.timestamps[n];N.set(`timestamp`,i,{UIident:`keyboard`})}};function aC(e){let{key:t}=e,n=!1;if((t===`ArrowLeft`||t===`ArrowRight`)&&!e.shiftKey&&typeof K[N.get(`product`)].calendar==`object`){let e=N.get(`calendar`);e&&(iC(e,t),n=!0)}else t===`f`?(P.emit(`rqstOpen`,`search`),n=!0):t===`+`?(P.emit(`zoomIn`),n=!0):t===`-`?(P.emit(`zoomOut`),n=!0):t===` `&&mx().includes(`tileLayer`)&&(N.set(`animation`,!N.get(`animation`)),n=!0);n&&e.preventDefault()}
259x||document.body.addEventListener(`keydown`,aC,!1);var oC=y({});const sC=document.body.classList;function cC(){setInterval(()=>{sC.add(`animate-logo`),setTimeout(()=>sC.remove(`animate-logo`),2e3)},30*1e3)}P.once(`dependenciesResolved`,cC);const lC=Ct(async()=>{let e=N.get(`timestamp`),t=K[N.get(`product`)],n=dc[N.get(`overlay`)],r=t==null?void 0:t.calendar,i=e+(n.isAccu?N.get(`acRange`)*T:0),a=!!(r!=null&&r.premiumStart&&i>r.premiumStart),o=!!(r!=null&&r.premiumEnd&&i<r.premiumEnd),s=!!(!ru()&&(a||o));ce(document.body,s,`premium-calendar`)},1e3);ru()||(N.on(`subscription`,lC),P.on(`redrawFinished`,lC));var uC=y({emitter:()=>fC,get:()=>hC,hideLoader:()=>_C,reset:()=>mC,set:()=>pC,showLoader:()=>gC});let dC=null;const fC=new Bn({ident:`query`}),pC=(e,t)=>{dC=t,N.set(`searchInputValue`,e)},mC=e=>{dC===e&&(N.set(`searchInputValue`,``),dC=null)},hC=()=>N.get(`searchInputValue`),gC=()=>void N.set(`searchInputLoading`,!0),_C=()=>void N.set(`searchInputLoading`,!1);var vC=y({});let yC=!1,bC,xC,SC=2,CC=0,wC;const TC={normal:2,fast:8,"very-fast":16},EC=()=>N.set(`animation`,!1),DC=e=>{e!==`picker-mobile`&&EC()},OC=e=>{e||EC()},kC=e=>/Accu$/.test(e)&&EC(),AC=e=>{let{timestamps:t}=e;return t[1]-t[0]<2*T};function jC(){let e=N.get(`timestamp`)+CC*SC;e<wC?(N.set(`timestamp`,e),bC=setTimeout(jC,50)):EC()}function MC(e){SC=TC[e]}function NC(){let e=N.get(`calendar`);if(xC=K[N.get(`product`)],!xC.animation||!e){EC();return}yC=!0,SC=TC[N.get(`animationSpeed`)],CC=50*(AC(e)?xC.animationSpeed1h:xC.animationSpeed),wC=ru()||!e.premiumStart?e.end:e.premiumStart,N.get(`timestamp`)+CC*SC>=wC&&N.set(`timestamp`,Date.now()),N.on(`visibility`,OC),N.on(`product`,EC),N.on(`animationSpeed`,MC),N.on(`overlay`,kC),P.on(`pluginOpened`,DC),jC(),Xl(`animation-started`)}function PC(){yC=!1,clearTimeout(bC),N.off(`visibility`,OC),N.off(`product`,EC),N.off(`overlay`,kC),N.off(`animationSpeed`,MC),P.off(`pluginOpened`,DC)}N.on(`animation`,e=>{e!==yC&&(e?NC():PC())});var FC=y({});`hidden`in document&&document.addEventListener(`visibilitychange`,()=>{N.set(`visibility`,!document.hidden)});var IC=y({share:()=>LC});const LC=()=>{let e=fh();navigator.share?navigator.share({text:`Great stuff on Windy.com`,url:e}).catch(e=>{(e==null?void 0:e.name)!==`AbortError`&&O(`nativeShareDialog`,e)}):P.emit(`rqstOpen`,`share`)};var RC=y({}),zC=y({getLatLonInterpolator:()=>VC,getXYInterpolator:()=>HC});const BC=()=>{for(let e in ux){let t=ux[e];if(t.isOpen&&t.interpolator)return t.interpolator}},VC=()=>new Promise(e=>{let t=BC();t?t.createFun(t=>e(t)):e(null)}),HC=()=>new Promise(e=>{let t=BC();t?t.createFun((t,n)=>e(n)):e(null)});var UC=y({});const WC=(e,...t)=>{let n=N.get(`mapLibrary`);P.emit(`${n}-${e}`,...t)};P.on(`zoomIn`,WC.bind(null,`zoomIn`)),P.on(`zoomOut`,WC.bind(null,`zoomOut`)),P.on(`paramsChanged`,WC.bind(null,`paramsChanged`));var GC=y({PickerDot:()=>XC,emitter:()=>YC,pickerDot:()=>ZC});const KC=S?Object.keys(Y).map(e=>Y[e]).filter(e=>e&&e.disableMobilePicker):[],qC=e=>P.emit(`rqstOpen`,`picker`,e),JC=e=>{for(let e=0;e<KC.length;e++)if(KC[e].isOpen)return;P.emit(`rqstOpen`,`picker-mobile`,e)};S?(Q.on(`dragstart`,()=>JC()),Kd.on(`click`,()=>JC())):Kd.on(`click`,qC);const YC=new Bn({ident:`picker`});var XC=class{constructor(){C(this,`pickerDotEl`,void 0),C(this,`mapContainerEl`,void 0),C(this,`lat`,null),C(this,`lon`,null),S&&(this.mapContainerEl=qt(`#map-container`),this.pickerDotEl=qt(`#picker-dot`),Q.on(`resize`,this.positionChanged.bind(this)))}lockPosition(){let e=this.getLatLon();return this.lat=e.lat,this.lon=e.lon,e}unlockPosition(){this.lat=null,this.lon=null}setPosition(e,t){let{y:n}=this.getDotPosition();Jy(n,e,t),this.lat=e,this.lon=t}offsetPosition(e){this.mapContainerEl.style.transform=e>0?`translateY(-${Math.floor(e/2)}px)`:``}resetOffset(){this.offsetPosition(0)}getLatLng(){let{x:e,y:t}=this.getDotPosition();return Q.containerPointToLatLng([e,t])}getLatLon(e,t){let{lat:n,lng:r}=e!==void 0&&t!==void 0?Q.containerPointToLatLng([e,t]):this.getLatLng();return{lat:n,lon:r}}getDotPosition(){return{x:this.pickerDotEl.offsetLeft+this.pickerDotEl.offsetWidth/2,y:this.pickerDotEl.offsetTop+this.pickerDotEl.offsetHeight/2}}positionChanged(){this.lat!==null&&this.lon!==null&&this.setPosition(this.lat,this.lon)}};const ZC=new XC;async function QC(){await em()&&await io.loadFromCloud()&&P.emit(`redrawLayers`)}QC();const $C=10*1e3,ew=`error`,tw={android:`Android`,ios:`iOS`,desktop:`browser`}.desktop;typeof ResizeObserver>`u`&&(qr({type:ew,html:Tt(F.BROWSER_SUPPORT_ERROR,{platform:tw,technology:`ResizeObserver`}),timeout:$C}),O(`compatibility-check`,`ResizeObserver not supported`)),typeof indexedDB>`u`&&(qr({type:ew,html:Tt(F.BROWSER_SUPPORT_ERROR,{platform:tw,technology:`IndexedDB`}),timeout:$C}),O(`compatibility-check`,`IndexedDB not supported`)),P.emit(`depen
259denciesResolved`);export{Bd as BottomSlide,Cl as Calendar,fo as Color,Id as Drag,Rb as EventManager,zn as Evented,Kh as ExternalSveltePlugin,Ka as IDB,ky as LabelsLayer,fc as Layer,Bi as Metric,Hi as MetricClasses,Oo as Overlay,ko as OverlayClasses,Hd as Plugin,cu as Product,Hb as Renderer,uv as ShaderStorage,nf as SveltePanePlugin,$d as SveltePlugin,Rd as Swipe,Qb as SwitchableTileCache,cf as TagPlugin,ox as TileLayer,B_ as TileLayerUtils,Q_ as TilePreprocessor,Vr as Window,Zd as WindowPlugin,jf as alerts,Fp as appsFlyer,sr as authParams,cy as baseMap,P as broadcast,Ay as cityLabels,uf as cloudSync,V as colors,SS as components,vr as connection,oe as css,Ng as customProtocol,j as dataSpecifications,ue as detectDevice,er as device,xf as deviceLogging,Ph as errorLogger,Ye as errors,Jh as externalPlugins,Dm as fetch,hi as format,kl as ga,Tg as geolocation,S_ as glUtils,Jr as http,Za as idbInstances,mv as imageFetch,zC as interpolator,rC as keyboard,_y as landLayer,xl as layers,Bb as levelUtils,Ef as liveAlerts,$m as location,Vl as log,Tr as lruCache,Iy as map,UC as mapGlobeCtrl,yb as mapUtils,z as metrics,yd as models,Yf as notifications,dc as overlays,gx as params,oC as permanentPromos,GC as picker,Y as plugins,mS as pluginsCtrl,Ox as pois,K as products,TS as promo,RC as promoControls,lp as pushNotifications,uC as query,dx as renderCtrl,Jg as renderUtils,ux as renderers,_p as reverseName,Tl as rhMessage,me as rootScope,eg as router,Fv as semaphore,IC as share,zx as showMyPosition,vg as showableErrorsService,Wd as singleclick,BS as startup,jS as startupUtils,M as storage,N as store,Zl as subscription,Mv as throttler,Wv as tileHelpers,Wb as tileInterpolator,Lv as tileLayerSource,vC as timeAnimation,Ur as topMessage,Or as trans,Wp as user,Ff as userAlerts,Nx as userAlertsEnums,dp as userConsent,yp as userFavs,tt as utils,FC as visibility};W.BottomSlide=Bd,W.Calendar=Cl,W.Color=fo,W.Drag=Id,W.EventManager=Rb,W.Evented=zn,W.ExternalSveltePlugin=Kh,W.IDB=Ka,W.LabelsLayer=ky,W.Layer=fc,W.Metric=Bi,W.MetricClasses=Hi,W.Overlay=Oo,W.OverlayClasses=ko,W.Plugin=Hd,W.Product=cu,W.Renderer=Hb,W.ShaderStorage=uv,W.SveltePanePlugin=nf,W.SveltePlugin=$d,W.Swipe=Rd,W.SwitchableTileCache=Qb,W.TagPlugin=cf,W.TileLayer=ox,W.TileLayerUtils=B_,W.TilePreprocessor=Q_,W.Window=Vr,W.WindowPlugin=Zd,W.alerts=jf,W.appsFlyer=Fp,W.authParams=sr,W.baseMap=cy,W.broadcast=P,W.cityLabels=Ay,W.cloudSync=uf,W.colors=V,W.components=SS,W.connection=vr,W.css=oe,W.customProtocol=Ng,W.dataSpecifications=j,W.detectDevice=ue,W.device=er,W.deviceLogging=xf,W.errorLogger=Ph,W.errors=Ye,W.externalPlugins=Jh,W.fetch=Dm,W.format=hi,W.ga=kl,W.geolocation=Tg,W.glUtils=S_,W.http=Jr,W.idbInstances=Za,W.imageFetch=mv,W.interpolator=zC,W.keyboard=rC,W.landLayer=_y,W.layers=xl,W.levelUtils=Bb,W.liveAlerts=Ef,W.location=$m,W.log=Vl,W.lruCache=Tr,W.map=Iy,W.mapGlobeCtrl=UC,W.mapUtils=yb,W.metrics=z,W.models=yd,W.notifications=Yf,W.overlays=dc,W.params=gx,W.permanentPromos=oC,W.picker=GC,W.plugins=Y,W.pluginsCtrl=mS,W.pois=Ox,W.products=K,W.promo=TS,W.promoControls=RC,W.pushNotifications=lp,W.query=uC,W.renderCtrl=dx,W.renderUtils=Jg,W.renderers=ux,W.reverseName=_p,W.rhMessage=Tl,W.rootScope=me,W.router=eg,W.semaphore=Fv,W.share=IC,W.showMyPosition=zx,W.showableErrorsService=vg,W.singleclick=Wd,W.startup=BS,W.startupUtils=jS,W.storage=M,W.store=N,W.subscription=Zl,W.throttler=Mv,W.tileHelpers=Wv,W.tileInterpolator=Wb,W.tileLayerSource=Lv,W.timeAnimation=vC,W.topMessage=Ur,W.trans=Or,W.user=Wp,W.userAlerts=Ff,W.userAlertsEnums=Nx,W.userConsent=dp,W.userFavs=yp,W.utils=tt,W.visibility=FC;

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.