var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;li[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=(n,r,o)=>(o=n==null?{}:e(i(n)),s(r||!n||!n.__esModule||!a.call(n,`default`)?t(o,`default`,{value:n,enumerable:!0}):o,n));(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var l=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.consumer`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.memo`),d=Symbol.for(`react.lazy`),f=Symbol.for(`react.activity`),p=Symbol.for(`react.view_transition`),m=Symbol.iterator;function h(e){return typeof e!=`object`||!e?null:(e=m&&e[m]||e[`@@iterator`],typeof e==`function`?e:null)}var g={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},_=Object.assign,v={};function y(e,t,n){this.props=e,this.context=t,this.refs=v,this.updater=n||g}y.prototype.isReactComponent={},y.prototype.setState=function(e,t){if(typeof e!=`object`&&typeof e!=`function`&&e!=null)throw Error(`takes an object of state variables to update or a function which returns an object of state variables.`);this.updater.enqueueSetState(this,e,t,`setState`)},y.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,`forceUpdate`)};function b(){}b.prototype=y.prototype;function x(e,t,n){this.props=e,this.context=t,this.refs=v,this.updater=n||g}var S=x.prototype=new b;S.constructor=x,_(S,y.prototype),S.isPureReactComponent=!0;var C=Array.isArray;function w(){}var T={H:null,A:null,T:null,S:null},E=Object.prototype.hasOwnProperty;function D(e,n,r){var i=r.ref;return{$$typeof:t,type:e,key:n,ref:i===void 0?null:i,props:r}}function O(e,t){return D(e.type,t,e.props)}function k(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function A(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var j=/\/+/g;function M(e,t){return typeof e==`object`&&e&&e.key!=null?A(``+e.key):t.toString(36)}function ee(e){switch(e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason;default:switch(typeof e.status==`string`?e.then(w,w):(e.status=`pending`,e.then(function(t){e.status===`pending`&&(e.status=`fulfilled`,e.value=t)},function(t){e.status===`pending`&&(e.status=`rejected`,e.reason=t)})),e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason}}throw e}function te(e,r,i,a,o){var s=typeof e;(s===`undefined`||s===`boolean`)&&(e=null);var c=!1;if(e===null)c=!0;else switch(s){case`bigint`:case`string`:case`number`:c=!0;break;case`object`:switch(e.$$typeof){case t:case n:c=!0;break;case d:return c=e._init,te(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+M(e,0):a,C(o)?(i=``,c!=null&&(i=c.replace(j,`$&/`)+`/`),te(o,r,i,``,function(e){return e})):o!=null&&(k(o)&&(o=O(o,i+(o.key==null||e&&e.key===o.key?``:(``+o.key).replace(j,`$&/`)+`/`)+c)),r.push(o)),1;c=0;var l=a===``?`.`:a+`:`;if(C(e))for(var u=0;u{t.exports=l()})),d=o((e=>{function t(e,t){var n=e.length;e.push(t);a:for(;0>>1,a=e[r];if(0>>1;ri(c,n))li(u,c)?(e[r]=u,e[l]=n,r=l):(e[r]=c,e[s]=n,r=s);else if(li(u,n))e[r]=u,e[l]=n,r=l;else break a}}return t}function i(e,t){var n=e.sortIndex-t.sortIndex;return n===0?e.id-t.id:n}if(e.unstable_now=void 0,typeof performance==`object`&&typeof performance.now==`function`){var a=performance;e.unstable_now=function(){return a.now()}}else{var o=Date,s=o.now();e.unstable_now=function(){return o.now()-s}}var c=[],l=[],u=1,d=null,f=3,p=!1,m=!1,h=!1,g=!1,_=typeof setTimeout==`function`?setTimeout:null,v=typeof clearTimeout==`function`?clearTimeout:null,y=typeof setImmediate<`u`?setImmediate:null;function b(e){for(var i=n(l);i!==null;){if(i.callback===null)r(l);else if(i.startTime<=e)r(l),i.sortIndex=i.expirationTime,t(c,i);else break;i=n(l)}}function x(e){if(h=!1,b(e),!m){if(n(c)!==null)m=!0,S||(S=!0,O());else{var t=n(l);t!==null&&j(x,t.startTime-e)}}}var S=!1,C=-1,w=5,T=-1;function E(){return g?!0:!(e.unstable_now()-Tt&&E());){var o=d.callback;if(typeof o==`function`){d.callback=null,f=d.priorityLevel;var s=o(d.expirationTime<=t);if(t=e.unstable_now(),typeof s==`function`){d.callback=s,b(t),i=!0;break b}d===n(c)&&r(c),b(t)}else r(c);d=n(c)}if(d!==null)i=!0;else{var u=n(l);u!==null&&j(x,u.startTime-t),i=!1}}break a}finally{d=null,f=a,p=!1}i=void 0}}finally{i?O():S=!1}}}var O;if(typeof y==`function`)O=function(){y(D)};else if(typeof MessageChannel<`u`){var k=new MessageChannel,A=k.port2;k.port1.onmessage=D,O=function(){A.postMessage(null)}}else O=function(){_(D,0)};function j(t,n){C=_(function(){t(e.unstable_now())},n)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(e){e.callback=null},e.unstable_forceFrameRate=function(e){0>e||125o?(r.sortIndex=a,t(l,r),n(c)===null&&r===n(l)&&(h?(v(C),C=-1):h=!0,j(x,a-o))):(r.sortIndex=s,t(c,r),m||p||(m=!0,S||(S=!0,O()))),r},e.unstable_shouldYield=E,e.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}})),f=o(((e,t)=>{t.exports=d()})),p=o((e=>{var t=u();function n(e){var t=`https://react.dev/errors/`+e;if(1{function n(){if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<`u`&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE==`function`)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=p()})),h=o((e=>{var t=f(),n=u(),r=m();function i(e){var t=`https://react.dev/errors/`+e;if(1ye||(e.current=ve[ye],ve[ye]=null,ye--)}function Se(e,t){ye++,ve[ye]=e.current,e.current=t}var Ce=be(null),we=be(null),Te=be(null),Ee=be(null);function De(e,t){switch(Se(Te,t),Se(we,e),Se(Ce,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?mp(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=mp(t),e=hp(t,e);else switch(e){case`svg`:e=1;break;case`math`:e=2;break;default:e=0}}xe(Ce),Se(Ce,e)}function Oe(){xe(Ce),xe(we),xe(Te)}function ke(e){var t=e.memoizedState;t!==null&&(uh._currentValue=t.memoizedState,Se(Ee,e)),t=Ce.current;var n=hp(t,e.type);t!==n&&(Se(we,e),Se(Ce,n))}function Ae(e){we.current===e&&(xe(Ce),xe(we)),Ee.current===e&&(xe(Ee),uh._currentValue=_e)}var je,Me;function Ne(e){if(je===void 0)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);je=t&&t[1]||``,Me=-1)`:-1i||c[r]!==l[i]){var u=` `+c[r].replace(` at new `,` at `);return e.displayName&&u.includes(``)&&(u=u.replace(``,e.displayName)),u}while(1<=r&&0<=i);break}}}finally{Pe=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:``)?Ne(n):``}function Ie(e,t){switch(e.tag){case 26:case 27:case 5:return Ne(e.type);case 16:return Ne(`Lazy`);case 13:return e.child!==t&&t!==null?Ne(`Suspense Fallback`):Ne(`Suspense`);case 19:return Ne(`SuspenseList`);case 0:case 15:return Fe(e.type,!1);case 11:return Fe(e.type.render,!1);case 1:return Fe(e.type,!0);case 31:return Ne(`Activity`);case 30:return Ne(`ViewTransition`);default:return``}}function Le(e){try{var t=``,n=null;do t+=Ie(e,n),n=e,e=e.return;while(e);return t}catch(e){return` Error generating stack: `+e.message+` `+e.stack}}var Re=Object.prototype.hasOwnProperty,ze=t.unstable_scheduleCallback,Be=t.unstable_cancelCallback,Ve=t.unstable_shouldYield,He=t.unstable_requestPaint,Ue=t.unstable_now,We=t.unstable_getCurrentPriorityLevel,Ge=t.unstable_ImmediatePriority,Ke=t.unstable_UserBlockingPriority,qe=t.unstable_NormalPriority,I=t.unstable_LowPriority,Je=t.unstable_IdlePriority,Ye=t.log,Xe=t.unstable_setDisableYieldValue,Ze=null,Qe=null;function $e(e){if(typeof Ye==`function`&&Xe(e),Qe&&typeof Qe.setStrictMode==`function`)try{Qe.setStrictMode(Ze,e)}catch{}}var et=Math.clz32?Math.clz32:rt,tt=Math.log,nt=Math.LN2;function rt(e){return e>>>=0,e===0?32:31-(tt(e)/nt|0)|0}var it=256,at=262144,ot=4194304;function st(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&-e;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function ct(e,t,n){var r=e.pendingLanes;if(r===0)return 0;var i=0,a=e.suspendedLanes,o=e.pingedLanes;e=e.warmLanes;var s=r&134217727;return s===0?(s=r&~a,s===0?o===0?n||(n=r&~e,n!==0&&(i=st(n))):i=st(o):i=st(s)):(r=s&~a,r===0?(o&=s,o===0?n||(n=s&~e,n!==0&&(i=st(n))):i=st(o)):i=st(r)),i===0?0:t!==0&&t!==i&&(t&a)===0&&(a=i&-i,n=t&-t,a>=n||a===32&&n&4194048)?t:i}function lt(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function ut(e,t){t&8&&(t|=t&32);var n=e.entangledLanes;if(n!==0)for(e=e.entanglements,n&=t;0n;n++)t.push(e);return t}function mt(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function ht(e,t,n,r,i,a){var o=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var s=e.entanglements,c=e.expirationTimes,l=e.hiddenUpdates;for(n=o&~n;0=ur),pr=` `,mr=!1;function hr(e,t){switch(e){case`keyup`:return V.indexOf(t.keyCode)!==-1;case`keydown`:return t.keyCode!==229;case`keypress`:case`mousedown`:case`focusout`:return!0;default:return!1}}function gr(e){return e=e.detail,typeof e==`object`&&`data`in e?e.data:null}var _r=!1;function vr(e,t){switch(e){case`compositionend`:return gr(t);case`keypress`:return t.which===32?(mr=!0,pr):null;case`textInput`:return e=t.data,e===pr&&mr?null:e;default:return null}}function yr(e,t){if(_r)return e===`compositionend`||!lr&&hr(e,t)?(e=Nn(),Mn=jn=An=null,_r=!1,e):null;switch(e){case`paste`:return null;case`keypress`:if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}a:{for(;n;){if(n.nextSibling){n=n.nextSibling;break a}n=n.parentNode}n=void 0}n=zr(n)}}function Vr(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Vr(e,t.parentNode):`contains`in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Hr(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=Rr(e.document);t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href==`string`}catch{n=!1}if(n)e=t.contentWindow;else break;t=Rr(e.document)}return t}function Ur(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t===`input`&&(e.type===`text`||e.type===`search`||e.type===`tel`||e.type===`url`||e.type===`password`)||t===`textarea`||e.contentEditable===`true`)}var Wr=Dn&&`documentMode`in document&&11>=document.documentMode,Gr=null,Kr=null,qr=null,Jr=!1;function Yr(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Jr||Gr==null||Gr!==Rr(r)||(r=Gr,`selectionStart`in r&&Ur(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),qr&&W(qr,r)||(qr=r,r=Zf(Kr,`onSelect`),0>=o,i-=o,Gi=1<<32-et(t)+i|n<h?(g=d,d=null):g=d.sibling;var _=p(i,d,s[h],c);if(_===null){d===null&&(d=g);break}e&&d&&_.alternate===null&&t(i,d),a=o(_,a,h),u===null?l=_:u.sibling=_,u=_,d=g}if(h===s.length)return n(i,d),ea&&qi(i,h),l;if(d===null){for(;hg?(_=h,h=null):_=h.sibling;var y=p(a,h,v.value,l);if(y===null){h===null&&(h=_);break}e&&h&&y.alternate===null&&t(a,h),s=o(y,s,g),d===null?u=y:d.sibling=y,d=y,h=_}if(v.done)return n(a,h),ea&&qi(a,g),u;if(h===null){for(;!v.done;g++,v=c.next())v=f(a,v.value,l),v!==null&&(s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return ea&&qi(a,g),u}for(h=r(h);!v.done;g++,v=c.next())v=m(h,a,g,v.value,l),v!==null&&(e&&(_=v.alternate,_!==null&&h.delete(_.key===null?g:_.key)),s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return e&&h.forEach(function(e){return t(a,e)}),ea&&qi(a,g),u}function _(e,r,o,c){if(typeof o==`object`&&o&&o.type===j&&o.key===null&&o.props.ref===void 0&&(o=o.props.children),typeof o==`object`&&o){switch(o.$$typeof){case k:a:{for(var l=o.key;r!==null;){if(r.key===l){if(l=o.type,l===j){if(r.tag===7){n(e,r.sibling),c=a(r,o.props.children),io(c,o),c.return=e,e=c;break a}}else if(r.elementType===l||typeof l==`object`&&l&&l.$$typeof===oe&&Za(l)===r.type){n(e,r.sibling),c=a(r,o.props),io(c,o),c.return=e,e=c;break a}n(e,r);break}t(e,r),r=r.sibling}o.type===j?(c=Mi(o.props.children,e.mode,c,o.key),io(c,o),c.return=e,e=c):(c=ji(o.type,o.key,o.props,null,e.mode,c),io(c,o),c.return=e,e=c)}return s(e);case A:a:{for(l=o.key;r!==null;){if(r.key===l){if(r.tag===4&&r.stateNode.containerInfo===o.containerInfo&&r.stateNode.implementation===o.implementation){n(e,r.sibling),c=a(r,o.children||[]),c.return=e,e=c;break a}n(e,r);break}t(e,r),r=r.sibling}c=Fi(o,e.mode,c),c.return=e,e=c}return s(e);case oe:return o=Za(o),_(e,r,o,c)}if(ge(o))return h(e,r,o,c);if(pe(o)){if(l=pe(o),typeof l!=`function`)throw Error(i(150));return o=l.call(o),g(e,r,o,c)}if(typeof o.then==`function`)return _(e,r,ro(o),c);if(o.$$typeof===N)return _(e,r,Sa(e,o),c);ao(e,o)}return typeof o==`string`&&o!==``||typeof o==`number`||typeof o==`bigint`?(o=``+o,r!==null&&r.tag===6?(n(e,r.sibling),c=a(r,o),c.return=e,e=c):(n(e,r),c=Ni(o,e.mode,c),c.return=e,e=c),s(e)):n(e,r)}return function(e,t,n,r){try{no=0;var i=_(e,t,n,r);return to=null,i}catch(t){if(t===Ga||t===qa)throw t;var a=Di(29,t,null,e.mode);return a.lanes=r,a.return=e,a}}}var so=oo(!0),co=oo(!1),lo=!1;function uo(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function fo(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function po(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function mo(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,Qu&2){var i=r.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),r.pending=t,t=wi(e),Ci(e,null,n),t}return bi(e,r,t,n),wi(e)}function ho(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,n&4194048)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,L(e,n)}}function go(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var i=null,a=null;if(n=n.firstBaseUpdate,n!==null){do{var o={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};a===null?i=a=o:a=a.next=o,n=n.next}while(n!==null);a===null?i=a=t:a=a.next=t}else i=a=t;n={baseState:r.baseState,firstBaseUpdate:i,lastBaseUpdate:a,shared:r.shared,callbacks:r.callbacks},e.updateQueue=n}else e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var _o=!1;function vo(){if(_o){var e=Ia;if(e!==null)throw e}}function yo(e,t,n,r){_o=!1;var i=e.updateQueue;lo=!1;var a=i.firstBaseUpdate,o=i.lastBaseUpdate,s=i.shared.pending;if(s!==null){i.shared.pending=null;var c=s,l=c.next;c.next=null,o===null?a=l:o.next=l,o=c;var u=e.alternate;u!==null&&(u=u.updateQueue,s=u.lastBaseUpdate,s!==o&&(s===null?u.firstBaseUpdate=l:s.next=l,u.lastBaseUpdate=c))}if(a!==null){var d=i.baseState;o=0,u=l=c=null,s=a;do{var f=s.lane&-536870913,p=f!==s.lane;if(p?(td&f)===f:(r&f)===f){f!==0&&f===Fa&&(_o=!0),u!==null&&(u=u.next={lane:0,tag:s.tag,payload:s.payload,callback:null,next:null});a:{var m=e,h=s;f=t;var g=n;switch(h.tag){case 1:if(m=h.payload,typeof m==`function`){d=m.call(g,d,f);break a}d=m;break a;case 3:m.flags=m.flags&-65537|128;case 0:if(m=h.payload,f=typeof m==`function`?m.call(g,d,f):m,f==null)break a;d=D({},d,f);break a;case 2:lo=!0}}f=s.callback,f!==null&&(e.flags|=64,p&&(e.flags|=8192),p=i.callbacks,p===null?i.callbacks=[f]:p.push(f))}else p={lane:f,tag:s.tag,payload:s.payload,callback:s.callback,next:null},u===null?(l=u=p,c=d):u=u.next=p,o|=f;if(s=s.next,s===null){if(s=i.shared.pending,s===null)break;p=s,s=p.next,p.next=null,i.lastBaseUpdate=p,i.shared.pending=null}}while(1);u===null&&(c=d),i.baseState=c,i.firstBaseUpdate=l,i.lastBaseUpdate=u,a===null&&(i.shared.lanes=0),ld|=o,e.lanes=o,e.memoizedState=d}}function bo(e,t){if(typeof e!=`function`)throw Error(i(191,e));e.call(t)}function xo(e,t){var n=e.callbacks;if(n!==null)for(e.callbacks=null,e=0;ea?a:8;var o=P.T,s={};s.types=o===null?null:o.types,P.T=s,lc(e,!1,t,n);try{var c=i(),l=P.S;l!==null&&l(s,c),typeof c==`object`&&c&&typeof c.then==`function`?cc(e,t,za(c,r),Md(e)):cc(e,t,r,Md(e))}catch(n){cc(e,t,{then:function(){},status:`rejected`,reason:n},Md())}finally{F.p=a,o!==null&&s.types!==null&&(o.types=s.types),P.T=o}}function Qs(){}function $s(e,t,n,r){if(e.tag!==5)throw Error(i(476));var a=ec(e).queue;Zs(e,a,t,_e,n===null?Qs:function(){return tc(e),n(r)})}function ec(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:_e,baseState:_e,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:us,lastRenderedState:_e},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:us,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function tc(e){var t=ec(e);t.next===null&&(t=e.alternate.memoizedState),cc(e,t.next.queue,{},Md())}function nc(){return xa(uh)}function rc(){return as().memoizedState}function ic(){return as().memoizedState}function ac(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=Md();e=po(n);var r=mo(t,e,n);r!==null&&(Fd(r,t,n),ho(r,t,n)),t={cache:Oa()},e.payload=t;return}t=t.return}}function oc(e,t,n){var r=Md();n={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},uc(e)?dc(t,n):(n=xi(e,t,n,r),n!==null&&(Fd(n,e,r),fc(n,t,r)))}function sc(e,t,n){cc(e,t,n,Md())}function cc(e,t,n,r){var i={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(uc(e))dc(t,i);else{var a=e.alternate;if(e.lanes===0&&(a===null||a.lanes===0)&&(a=t.lastRenderedReducer,a!==null))try{var o=t.lastRenderedState,s=a(o,n);if(i.hasEagerState=!0,i.eagerState=s,Lr(s,o))return bi(e,t,i,0),$u===null&&yi(),!1}catch{}if(n=xi(e,t,i,r),n!==null)return Fd(n,e,r),fc(n,t,r),!0}return!1}function lc(e,t,n,r){if(r={lane:2,revertLane:If(),gesture:null,action:r,hasEagerState:!1,eagerState:null,next:null},uc(e)){if(t)throw Error(i(479))}else t=xi(e,n,r,2),t!==null&&Fd(t,e,2)}function uc(e){var t=e.alternate;return e===zo||t!==null&&t===zo}function dc(e,t){Uo=Ho=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function fc(e,t,n){if(n&4194048){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,L(e,n)}}var pc={readContext:xa,use:cs,useCallback:Yo,useContext:Yo,useEffect:Yo,useImperativeHandle:Yo,useLayoutEffect:Yo,useInsertionEffect:Yo,useMemo:Yo,useReducer:Yo,useRef:Yo,useState:Yo,useDebugValue:Yo,useDeferredValue:Yo,useTransition:Yo,useSyncExternalStore:Yo,useId:Yo,useHostTransitionStatus:Yo,useFormState:Yo,useActionState:Yo,useOptimistic:Yo,useMemoCache:Yo,useCacheRefresh:Yo,useEffectEvent:Yo},mc={readContext:xa,use:cs,useCallback:function(e,t){return is().memoizedState=[e,t===void 0?null:t],e},useContext:xa,useEffect:Rs,useImperativeHandle:function(e,t,n){n=n==null?null:n.concat([e]),Is(4194308,4,Ws.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Is(4194308,4,e,t)},useInsertionEffect:function(e,t){Is(4,2,e,t)},useMemo:function(e,t){var n=is();t=t===void 0?null:t;var r=e();if(Wo){$e(!0);try{e()}finally{$e(!1)}}return n.memoizedState=[r,t],r},useReducer:function(e,t,n){var r=is();if(n!==void 0){var i=n(t);if(Wo){$e(!0);try{n(t)}finally{$e(!1)}}}else i=t;return r.memoizedState=r.baseState=i,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:i},r.queue=e,e=e.dispatch=oc.bind(null,zo,e),[r.memoizedState,e]},useRef:function(e){var t=is();return e={current:e},t.memoizedState=e},useState:function(e){e=bs(e);var t=e.queue,n=sc.bind(null,zo,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:Ks,useDeferredValue:function(e,t){return Ys(is(),e,t)},useTransition:function(){var e=bs(!1);return e=Zs.bind(null,zo,e.queue,!0,!1),is().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var r=zo,a=is();if(ea){if(n===void 0)throw Error(i(407));n=n()}else{if(n=t(),$u===null)throw Error(i(349));td&127||hs(r,t,n)}a.memoizedState=n;var o={value:n,getSnapshot:t};return a.queue=o,Rs(_s.bind(null,r,o,e),[e]),r.flags|=2048,Ps(9,{destroy:void 0},gs.bind(null,r,o,n,t),null),n},useId:function(){var e=is(),t=$u.identifierPrefix;if(ea){var n=Ki,r=Gi;n=(r&~(1<<32-et(r)-1)).toString(32)+n,t=`_`+t+`R_`+n,n=Go++,0<\/script>`,o=o.removeChild(o.firstChild);break;case`select`:o=typeof r.is==`string`?s.createElement(`select`,{is:r.is}):s.createElement(`select`),r.multiple?o.multiple=!0:r.size&&(o.size=r.size);break;default:o=typeof r.is==`string`?s.createElement(a,{is:r.is}):s.createElement(a)}}o[Ct]=t,o[wt]=r;a:for(s=t.child;s!==null;){if(s.tag===5||s.tag===6)o.appendChild(s.stateNode);else if(s.tag!==4&&s.tag!==27&&s.child!==null){s.child.return=s,s=s.child;continue}if(s===t)break a;for(;s.sibling===null;){if(s.return===null||s.return===t)break a;s=s.return}s.sibling.return=s.return,s=s.sibling}t.stateNode=o;a:switch(op(o,a,r),a){case`button`:case`input`:case`select`:case`textarea`:r=!!r.autoFocus;break a;case`img`:r=!0;break a;default:r=!1}r&&fl(t)}}return _l(t),t.subtreeFlags&=-33554433,pl(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==r&&fl(t);else{if(typeof r!=`string`&&t.stateNode===null)throw Error(i(166));if(e=Te.current,sa(t)){if(e=t.stateNode,n=t.memoizedProps,r=null,a=Qi,a!==null)switch(a.tag){case 27:case 5:r=a.memoizedProps}e[Ct]=t,e=!!(e.nodeValue===n||r!==null&&!0===r.suppressHydrationWarning||rp(e.nodeValue,n)),e||ia(t,!0)}else e=pp(e).createTextNode(r),e[Ct]=t,t.stateNode=e}return _l(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(r=sa(t),n!==null){if(e===null){if(!r)throw Error(i(318));if(e=t.memoizedState,e=e===null?null:e.dehydrated,!e)throw Error(i(557));e[Ct]=t}else ca(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;_l(t),e=!1}else n=la(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?(No(t),t):(No(t),null);if(t.flags&128)throw Error(i(558))}return _l(t),null;case 13:if(r=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(a=sa(t),r!==null&&r.dehydrated!==null){if(e===null){if(!a)throw Error(i(318));if(a=t.memoizedState,a=a===null?null:a.dehydrated,!a)throw Error(i(317));a[Ct]=t}else ca(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;_l(t),a=!1}else a=la(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=a),a=!0;if(!a)return t.flags&256?(No(t),t):(No(t),null)}return No(t),t.flags&128?(t.lanes=n,t):(n=r!==null,e=e!==null&&e.memoizedState!==null,n&&(r=t.child,a=null,r.alternate!==null&&r.alternate.memoizedState!==null&&r.alternate.memoizedState.cachePool!==null&&(a=r.alternate.memoizedState.cachePool.pool),o=null,r.memoizedState!==null&&r.memoizedState.cachePool!==null&&(o=r.memoizedState.cachePool.pool),o!==a&&(r.flags|=2048)),n!==e&&n&&(t.child.flags|=8192),hl(t,t.updateQueue),_l(t),null);case 4:return Oe(),e===null&&qf(t.stateNode.containerInfo),t.flags|=67108864,_l(t),null;case 10:return ha(t.type),_l(t),null;case 19:if(Io(t),r=t.memoizedState,r===null)return _l(t),null;if(a=!!(t.flags&128),o=r.rendering,o===null){if(a)gl(r,!1);else{if(cd!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(o=Lo(e),o!==null){for(t.flags|=128,gl(r,!1),e=o.updateQueue,t.updateQueue=e,hl(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)Ai(n,e),n=n.sibling;return Fo(t,Po.current&1|2),ea&&qi(t,r.treeForkCount),t.child}e=e.sibling}r.tail!==null&&Ue()>yd&&(t.flags|=128,a=!0,gl(r,!1),t.lanes=4194304)}}else{if(!a){if(e=Lo(o),e!==null){if(t.flags|=128,a=!0,e=e.updateQueue,t.updateQueue=e,hl(t,e),gl(r,!0),r.tail===null&&r.tailMode!==`collapsed`&&r.tailMode!==`visible`&&!o.alternate&&!ea)return _l(t),null}else 2*Ue()-r.renderingStartTime>yd&&n!==536870912&&(t.flags|=128,a=!0,gl(r,!1),t.lanes=4194304)}r.isBackwards?(o.sibling=t.child,t.child=o):(e=r.last,e===null?t.child=o:e.sibling=o,r.last=o)}if(r.tail!==null){e=r.tail;a:{for(n=e;n!==null;){if(n.alternate!==null){n=!1;break a}n=n.sibling}n=!0}return r.rendering=e,r.tail=e.sibling,r.renderingStartTime=Ue(),e.sibling=null,o=Po.current,o=a?o&1|2:o&1,r.tailMode===`visible`||r.tailMode===`collapsed`||!n||ea?Fo(t,o):(n=o,Se(Do,t),Se(Po,n),Oo===null&&(Oo=t)),ea&&qi(t,r.treeForkCount),e}return _l(t),null;case 22:case 23:return No(t),Eo(),r=t.memoizedState!==null,e===null?r&&(t.flags|=8192):e.memoizedState!==null!==r&&(t.flags|=8192),r?n&536870912&&!(t.flags&128)&&(_l(t),t.subtreeFlags&6&&(t.flags|=8192)):_l(t),n=t.updateQueue,n!==null&&hl(t,n.retryQueue),n=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),r=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(r=t.memoizedState.cachePool.pool),r!==n&&(t.flags|=2048),e!==null&&xe(Va),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),ha(Da),_l(t),null;case 25:return null;case 30:return t.flags|=33554432,_l(t),null}throw Error(i(156,t.tag))}function yl(e,t){switch(Xi(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return ha(Da),Oe(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return Ae(t),null;case 31:if(t.memoizedState!==null){if(No(t),t.alternate===null)throw Error(i(340));ca()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(No(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(i(340));ca()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return Io(t),e=t.flags,e&65536?(t.flags=e&-65537|128,e=t.memoizedState,e!==null&&(e.rendering=null,e.tail=null),t.flags|=4,t):null;case 4:return Oe(),null;case 10:return ha(t.type),null;case 22:case 23:return No(t),Eo(),e!==null&&xe(Va),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return ha(Da),null;case 25:return null;default:return null}}function bl(e,t){switch(Xi(t),t.tag){case 3:ha(Da),Oe();break;case 26:case 27:case 5:Ae(t);break;case 4:Oe();break;case 31:t.memoizedState!==null&&No(t);break;case 13:No(t);break;case 19:Io(t);break;case 10:ha(t.type);break;case 22:case 23:No(t),Eo(),e!==null&&xe(Va);break;case 24:ha(Da)}}function xl(e,t){try{var n=t.updateQueue,r=n===null?null:n.lastEffect;if(r!==null){var i=r.next;n=i;do{if((n.tag&e)===e){r=void 0;var a=n.create,o=n.inst;r=a(),o.destroy=r}n=n.next}while(n!==i)}}catch(e){hf(t,t.return,e)}}function Sl(e,t,n){try{var r=t.updateQueue,i=r===null?null:r.lastEffect;if(i!==null){var a=i.next;r=a;do{if((r.tag&e)===e){var o=r.inst,s=o.destroy;if(s!==void 0){o.destroy=void 0,i=t;var c=n,l=s;try{l()}catch(e){hf(i,c,e)}}}r=r.next}while(r!==a)}}catch(e){hf(t,t.return,e)}}function Cl(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{xo(t,n)}catch(t){hf(e,e.return,t)}}}function G(e,t,n){n.props=xc(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(n){hf(e,t,n)}}function wl(e,t){try{var n=e.ref;if(n!==null){switch(e.tag){case 26:case 27:case 5:var r=e.stateNode;break;case 30:var i=e.stateNode,a=fi(e.memoizedProps,i);(i.ref===null||i.ref.name!==a)&&(i.ref=Rp(a)),r=i.ref;break;case 7:if(e.stateNode===null){var o=new zp(e);h(e.child,!1,nm,o,void 0,void 0),e.stateNode=o}r=e.stateNode;break;default:r=e.stateNode}typeof n==`function`?e.refCleanup=n(r):n.current=r}}catch(n){hf(e,t,n)}}function Tl(e,t){var n=e.ref,r=e.refCleanup;if(n!==null){if(typeof r==`function`)try{r()}catch(n){hf(e,t,n)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof n==`function`)try{n(null)}catch(n){hf(e,t,n)}else n.current=null}}function El(e,t){if((e.tag===5||e.tag===27||e.tag===6)&&e.alternate===null&&t!==null)for(var n=0;n title`))),op(r,t,n),r[Ct]=e,Lt(r),t=r;break a;case`link`:if(o=Jm(`link`,`href`,a).get(t+(n.href||``))){for(s=0;sg&&(o=g,g=h,h=o);var _=Br(s,h),v=Br(s,g);if(_&&v&&(p.rangeCount!==1||p.anchorNode!==_.node||p.anchorOffset!==_.offset||p.focusNode!==v.node||p.focusOffset!==v.offset)){var y=d.createRange();y.setStart(_.node,_.offset),p.removeAllRanges(),h>g?(p.addRange(y),p.extend(v.node,v.offset)):(y.setEnd(v.node,v.offset),p.addRange(y))}}}}for(d=[],p=s;p=p.parentNode;)p.nodeType===1&&d.push({element:p,left:p.scrollLeft,top:p.scrollTop});for(typeof s.focus==`function`&&s.focus(),s=0;sn?32:n,P.T=null,n=Td,Td=null;var o=Y,s=Cd;if(J=0,Sd=Y=null,Cd=0,Qu&6)throw Error(i(331));var c=Qu;if(Qu|=4,qu(o.current),zu(o,o.current,s,n),Qu=c,kf(0,!1),Qe&&typeof Qe.onPostCommitFiberRoot==`function`)try{Qe.onPostCommitFiberRoot(Ze,o)}catch{}return!0}finally{F.p=a,P.T=r,df(e,t)}}function mf(e,t,n){t=Li(n,t),t=Dc(e.stateNode,t,2),e=mo(e,t,2),e!==null&&(mt(e,2),Of(e))}function hf(e,t,n){if(e.tag===3)mf(e,e,n);else for(;t!==null;){if(t.tag===3){mf(t,e,n);break}if(t.tag===1){var r=t.stateNode;if(typeof t.type.getDerivedStateFromError==`function`||typeof r.componentDidCatch==`function`&&(xd===null||!xd.has(r))){e=Li(n,e),n=Oc(2),r=mo(t,n,2),r!==null&&(kc(n,r,t,e),mt(r,2),Of(r));break}}t=t.return}}function gf(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new Zu;var i=new Set;r.set(t,i)}else i=r.get(t),i===void 0&&(i=new Set,r.set(t,i));i.has(n)||(od=!0,i.add(n),e=_f.bind(null,e,t,n),t.then(e,e))}function _f(e,t,n){var r=e.pingCache;r!==null&&r.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,$u===e&&(td&n)===n&&(cd===4||cd===3&&(td&62914560)===td&&300>Ue()-_d?Qu&2?dd|=n:Hd(e,0):dd|=n,pd===td&&(pd=0)),Of(e)}function vf(e,t){t===0&&(t=ft()),e=Si(e,t),e!==null&&(mt(e,t),Of(e))}function yf(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),vf(e,n)}function bf(e,t){var n=0;switch(e.tag){case 31:case 13:var r=e.stateNode,a=e.memoizedState;a!==null&&(n=a.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(i(314))}r!==null&&r.delete(t),vf(e,n)}function xf(e,t){return ze(e,t)}var Sf=null,Cf=null,wf=!1,Tf=!1,Ef=!1,Df=0;function Of(e){e!==Cf&&e.next===null&&(Cf===null?Sf=Cf=e:Cf=Cf.next=e),Tf=!0,wf||(wf=!0,Ff())}function kf(e,t){if(!Ef&&Tf){Ef=!0;do for(var n=!1,r=Sf;r!==null;){if(!t){if(e!==0){var i=r.pendingLanes;if(i===0)var a=0;else{var o=r.suspendedLanes,s=r.pingedLanes;a=(1<<31-et(42|e)+1)-1,a&=i&~(o&~s),a=a&201326741?a&201326741|1:a?a|2:0}a!==0&&(n=!0,Pf(r,a))}else a=td,a=ct(r,r===$u?a:0,r.cancelPendingCommit!==null||r.timeoutHandle!==-1),!(a&3)||lt(r,a)||(n=!0,Pf(r,a))}r=r.next}while(n);Ef=!1}}function Af(){jf()}function jf(){Tf=wf=!1;var e=0;Df!==0&&yp()&&(e=Df);for(var t=Ue(),n=null,r=Sf;r!==null;){var i=r.next,a=Mf(r,t);a===0?(r.next=null,n===null?Sf=i:n.next=i,i===null&&(Cf=n)):(n=r,(e!==0||a&3)&&(Tf=!0)),r=i}J!==0&&J!==5||kf(e,!1),Df!==0&&(Df=0)}function Mf(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,i=e.expirationTimes,a=e.pendingLanes&-62914561;0s)break;var u=c.transferSize,d=c.initiatorType;u&&lp(d)&&(c=c.responseEnd,o+=u*(cnh){s.length=o;break}f=new Promise(Fp.bind(f)),s.push(f)}}}if(0`u`?null:document;function km(e,t,n){var r=Om;if(r&&typeof t==`string`&&t){var i=nn(t);i=`link[rel="`+e+`"][href="`+i+`"]`,typeof n==`string`&&(i+=`[crossorigin="`+n+`"]`),Cm.has(i)||(Cm.add(i),e={rel:e,crossOrigin:n,href:t},r.querySelector(i)===null&&(t=r.createElement(`link`),op(t,`link`,e),Lt(t),r.head.appendChild(t)))}}function Am(e){Tm.D(e),km(`dns-prefetch`,e,null)}function jm(e,t){Tm.C(e,t),km(`preconnect`,e,t)}function Mm(e,t,n){Tm.L(e,t,n);var r=Om;if(r&&e&&t){var i=`link[rel="preload"][as="`+nn(t)+`"]`;t===`image`&&n&&n.imageSrcSet?(i+=`[imagesrcset="`+nn(n.imageSrcSet)+`"]`,typeof n.imageSizes==`string`&&(i+=`[imagesizes="`+nn(n.imageSizes)+`"]`)):i+=`[href="`+nn(e)+`"]`;var a=i;switch(t){case`style`:a=Rm(e);break;case`script`:a=Vm(e)}if(!(Sm.has(a)||(e=D({rel:`preload`,href:t===`image`&&n&&n.imageSrcSet?void 0:e,as:t},n),Sm.set(a,e),r.querySelector(i)!==null||t===`style`&&r.querySelector(zm(a))||t===`script`&&r.querySelector(Hm(a))))){var o=r.createElement(`link`);op(o,`link`,e),t===`style`&&(o[jt]=!0,o.onload=o.onerror=function(){Rt(o)}),Lt(o),r.head.appendChild(o)}}}function Nm(e,t){Tm.m(e,t);var n=Om;if(n&&e){var r=t&&typeof t.as==`string`?t.as:`script`,i=`link[rel="modulepreload"][as="`+nn(r)+`"][href="`+nn(e)+`"]`,a=i;switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:a=Vm(e)}if(!Sm.has(a)&&(e=D({rel:`modulepreload`,href:e},t),Sm.set(a,e),n.querySelector(i)===null)){switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:if(n.querySelector(Hm(a)))return}r=n.createElement(`link`),op(r,`link`,e),Lt(r),n.head.appendChild(r)}}}function Pm(e,t,n){Tm.S(e,t,n);var r=Om;if(r&&e){var i=It(r).hoistableStyles,a=Rm(e);t||=`default`;var o=i.get(a);if(!o){var s={loading:0,preload:null};if(o=r.querySelector(zm(a)))s.loading=5;else{e=D({rel:`stylesheet`,href:e,"data-precedence":t},n),(n=Sm.get(a))&&Gm(e,n);var c=o=r.createElement(`link`);Lt(c),op(c,`link`,e),c._p=new Promise(function(e,t){c.onload=e,c.onerror=t}),c.addEventListener(`load`,function(){s.loading|=1}),c.addEventListener(`error`,function(){s.loading|=2}),s.loading|=4,Wm(o,t,r)}o={type:`stylesheet`,instance:o,count:1,state:s},i.set(a,o)}}}function Fm(e,t){Tm.X(e,t);var n=Om;if(n&&e){var r=It(n).hoistableScripts,i=Vm(e),a=r.get(i);a||(a=n.querySelector(Hm(i)),a||(e=D({src:e,async:!0},t),(t=Sm.get(i))&&Km(e,t),a=n.createElement(`script`),Lt(a),op(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Im(e,t){Tm.M(e,t);var n=Om;if(n&&e){var r=It(n).hoistableScripts,i=Vm(e),a=r.get(i);a||(a=n.querySelector(Hm(i)),a||(e=D({src:e,async:!0,type:`module`},t),(t=Sm.get(i))&&Km(e,t),a=n.createElement(`script`),Lt(a),op(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Lm(e,t,n,r){var a=(a=Te.current)?wm(a):null;if(!a)throw Error(i(446));switch(e){case`meta`:case`title`:return null;case`style`:return typeof n.precedence==`string`&&typeof n.href==`string`?(n=Rm(n.href),t=It(a).hoistableStyles,r=t.get(n),r||(r={type:`style`,instance:null,count:0,state:null},t.set(n,r)),r):{type:`void`,instance:null,count:0,state:null};case`link`:if(n.rel===`stylesheet`&&typeof n.href==`string`&&typeof n.precedence==`string`){e=Rm(n.href);var o=It(a).hoistableStyles,s=o.get(e);if(s||(a=a.ownerDocument||a,s={type:`stylesheet`,instance:null,count:0,state:{loading:0,preload:null}},o.set(e,s),(o=a.querySelector(zm(e)))?o._p||(s.instance=o,s.state.loading=5):(o=Sm.get(e),o||(o={rel:`preload`,as:`style`,href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},Sm.set(e,o)),Bm(a,e,o,s.state))),t&&r===null)throw Error(i(528,``));return s}if(t&&r!==null)throw Error(i(529,``));return null;case`script`:return t=n.async,n=n.src,typeof n==`string`&&t&&typeof t!=`function`&&typeof t!=`symbol`?(n=Vm(n),t=It(a).hoistableScripts,r=t.get(n),r||(r={type:`script`,instance:null,count:0,state:null},t.set(n,r)),r):{type:`void`,instance:null,count:0,state:null};default:throw Error(i(444,e))}}function Rm(e){return`href="`+nn(e)+`"`}function zm(e){return`link[rel="stylesheet"][`+e+`]`}function X(e){return D({},e,{"data-precedence":e.precedence,precedence:null})}function Bm(e,t,n,r){if(t=e.querySelector(`link[rel="preload"][as="style"][`+t+`]`)){if(!0!==t[jt]){r.loading=1;return}}else t=e.createElement(`link`),t[jt]=!0,t.onload=t.onerror=Rt.bind(null,t),op(t,`link`,n),Lt(t),e.head.appendChild(t);r.preload=t,t.addEventListener(`load`,function(){return r.loading|=1}),t.addEventListener(`error`,function(){return r.loading|=2})}function Vm(e){return`[src="`+nn(e)+`"]`}function Hm(e){return`script[async]`+e}function Um(e,t,n){if(t.count++,t.instance===null)switch(t.type){case`style`:var r=e.querySelector(`style[data-href~="`+nn(n.href)+`"]`);if(r)return t.instance=r,Lt(r),r;var a=D({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return r=(e.ownerDocument||e).createElement(`style`),Lt(r),op(r,`style`,a),Wm(r,n.precedence,e),t.instance=r;case`stylesheet`:a=Rm(n.href);var o=e.querySelector(zm(a));if(o)return t.state.loading|=4,t.instance=o,Lt(o),o;r=X(n),(a=Sm.get(a))&&Gm(r,a),o=(e.ownerDocument||e).createElement(`link`),Lt(o);var s=o;return s._p=new Promise(function(e,t){s.onload=e,s.onerror=t}),op(o,`link`,r),t.state.loading|=4,Wm(o,n.precedence,e),t.instance=o;case`script`:return o=Vm(n.src),(a=e.querySelector(Hm(o)))?(t.instance=a,Lt(a),a):(r=n,(a=Sm.get(o))&&(r=D({},n),Km(r,a)),e=e.ownerDocument||e,a=e.createElement(`script`),Lt(a),op(a,`link`,r),e.head.appendChild(a),t.instance=a);case`void`:return null;default:throw Error(i(443,t.type))}else t.type===`stylesheet`&&!(t.state.loading&4)&&(r=t.instance,t.state.loading|=4,Wm(r,n.precedence,e));return t.instance}function Wm(e,t,n){for(var r=n.querySelectorAll(`link[rel="stylesheet"][data-precedence],style[data-precedence]`),i=r.length?r[r.length-1]:null,a=i,o=0;o title`):null)}function Xm(e,t,n){if(n===1||t.itemProp!=null)return!1;switch(e){case`meta`:case`title`:return!0;case`style`:if(typeof t.precedence!=`string`||typeof t.href!=`string`||t.href===``)break;return!0;case`link`:if(typeof t.rel!=`string`||typeof t.href!=`string`||t.href===``||t.onLoad||t.onError)break;switch(t.rel){case`stylesheet`:return e=t.disabled,typeof t.precedence==`string`&&e==null;default:return!0}case`script`:if(t.async&&typeof t.async!=`function`&&typeof t.async!=`symbol`&&!t.onLoad&&!t.onError&&t.src&&typeof t.src==`string`)return!0}return!1}function Zm(e,t){return e===`img`&&t.src!=null&&t.src!==``&&t.onLoad==null&&t.loading!==`lazy`}function Qm(e){return!(e.type===`stylesheet`&&!(e.state.loading&3))}function $m(e){return(e.width||100)*(e.height||100)*(typeof devicePixelRatio==`number`?devicePixelRatio:1)*.25}function eh(e,t){typeof t.decode==`function`&&(e.imgCount++,t.complete||(e.imgBytes+=$m(t),e.suspenseyImages.push(t)),e=oh.bind(e),t.decode().then(e,e))}function th(e,t,n,r){if(n.type===`stylesheet`&&(typeof r.media!=`string`||!1!==matchMedia(r.media).matches)&&!(n.state.loading&4)){if(n.instance===null){var i=Rm(r.href),a=t.querySelector(zm(i));if(a){t=a._p,typeof t==`object`&&t&&typeof t.then==`function`&&(e.count++,e=ah.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=a,Lt(a);return}a=t.ownerDocument||t,r=X(r),(i=Sm.get(i))&&Gm(r,i),a=a.createElement(`link`),Lt(a);var o=a;o._p=new Promise(function(e,t){o.onload=e,o.onerror=t}),op(a,`link`,r),n.instance=a}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(n,t),(t=n.state.preload)&&!(n.state.loading&3)&&(e.count++,n=ah.bind(e),t.addEventListener(`load`,n),t.addEventListener(`error`,n))}}var nh=0;function rh(e,t){return e.stylesheets&&e.count===0&&ch(e,e.stylesheets),0nh?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(r),clearTimeout(i)}}:null}function ih(e){if(e.count===0&&(e.imgCount===0||!e.waitingForImages)){if(e.stylesheets)ch(e,e.stylesheets);else if(e.unsuspend){var t=e.unsuspend;e.unsuspend=null,t()}}}function ah(){this.count--,ih(this)}function oh(){this.imgCount--,ih(this)}var sh=null;function ch(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,sh=new Map,t.forEach(lh,e),sh=null,ah.call(e))}function lh(e,t){if(!(t.state.loading&4)){var n=sh.get(e);if(n)var r=n.get(null);else{n=new Map,sh.set(e,n);for(var i=e.querySelectorAll(`link[data-precedence],style[data-precedence]`),a=0;a{function n(){if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<`u`&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE==`function`)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=h()})),_=c(u(),1),v=c(g(),1),y=Object.create,b=Object.defineProperty,x=Object.getOwnPropertyDescriptor,S=Object.getOwnPropertyNames,C=Object.getPrototypeOf,w=Object.prototype.hasOwnProperty,T=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),E=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=S(t),a=0,o=i.length,s;at[e]).bind(null,s),enumerable:!(r=x(t,s))||r.enumerable});return e},D=(e,t,n)=>(n=e==null?{}:y(C(e)),E(t||!e||!e.__esModule||!w.call(e,`default`)?b(n,`default`,{value:e,enumerable:!0}):n,e)),O=`6.14.0`;function k(e,t){this.x=e,this.y=t}k.prototype={clone(){return new k(this.x,this.y)},add(e){return this.clone()._add(e)},sub(e){return this.clone()._sub(e)},multByPoint(e){return this.clone()._multByPoint(e)},divByPoint(e){return this.clone()._divByPoint(e)},mult(e){return this.clone()._mult(e)},div(e){return this.clone()._div(e)},rotate(e){return this.clone()._rotate(e)},rotateAround(e,t){return this.clone()._rotateAround(e,t)},matMult(e){return this.clone()._matMult(e)},unit(){return this.clone()._unit()},perp(){return this.clone()._perp()},round(){return this.clone()._round()},mag(){return Math.sqrt(this.x*this.x+this.y*this.y)},equals(e){return this.x===e.x&&this.y===e.y},dist(e){return Math.sqrt(this.distSqr(e))},distSqr(e){let t=e.x-this.x,n=e.y-this.y;return t*t+n*n},angle(){return Math.atan2(this.y,this.x)},angleTo(e){return Math.atan2(this.y-e.y,this.x-e.x)},angleWith(e){return this.angleWithSep(e.x,e.y)},angleWithSep(e,t){return Math.atan2(this.x*t-this.y*e,this.x*e+this.y*t)},_matMult(e){let t=e[0]*this.x+e[1]*this.y,n=e[2]*this.x+e[3]*this.y;return this.x=t,this.y=n,this},_add(e){return this.x+=e.x,this.y+=e.y,this},_sub(e){return this.x-=e.x,this.y-=e.y,this},_mult(e){return this.x*=e,this.y*=e,this},_div(e){return this.x/=e,this.y/=e,this},_multByPoint(e){return this.x*=e.x,this.y*=e.y,this},_divByPoint(e){return this.x/=e.x,this.y/=e.y,this},_unit(){return this._div(this.mag()),this},_perp(){let e=this.y;return this.y=this.x,this.x=-e,this},_rotate(e){let t=Math.cos(e),n=Math.sin(e),r=t*this.x-n*this.y,i=n*this.x+t*this.y;return this.x=r,this.y=i,this},_rotateAround(e,t){let n=Math.cos(e),r=Math.sin(e),i=t.x+n*(this.x-t.x)-r*(this.y-t.y),a=t.y+r*(this.x-t.x)+n*(this.y-t.y);return this.x=i,this.y=a,this},_round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},constructor:k},k.convert=function(e){if(e instanceof k)return e;if(Array.isArray(e))return new k(+e[0],+e[1]);if(e.x!==void 0&&e.y!==void 0)return new k(+e.x,+e.y);throw Error(`Expected [x, y] or {x, y} point format`)};function A(e,t,n,r){let i=3*e,a=3*(n-e)-i,o=1-i-a,s=3*t,c=3*(r-t)-s,l=1-s-c;return function(e,t=1e-6){if(e<=0)return 0;if(e>=1)return 1;let n=e;for(let r=0;r<8;r++){let r=((o*n+a)*n+i)*n-e;if(Math.abs(r)s?r=n:u=n,n=(r+u)*.5}return((l*n+c)*n+s)*n}}var j;function M(){return j??=typeof OffscreenCanvas<`u`&&!!new OffscreenCanvas(1,1).getContext(`2d`)&&typeof createImageBitmap==`function`,j}var ee;function te(){if(ee==null&&(ee=!1,M())){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){ee=!0;break}}}return ee||!1}var N=typeof Float32Array<`u`?Float32Array:Array;function ne(){var e=new N(4);return N!=Float32Array&&(e[1]=0,e[2]=0),e[0]=1,e[3]=1,e}function re(e,t){var n=t[0],r=t[1],i=t[2],a=t[3],o=n*a-i*r;return o?(o=1/o,e[0]=a*o,e[1]=-r*o,e[2]=-i*o,e[3]=n*o,e):null}function ie(e){return e[0]*e[3]-e[2]*e[1]}function ae(e,t,n){var r=t[0],i=t[1],a=t[2],o=t[3],s=Math.sin(n),c=Math.cos(n);return e[0]=r*c+a*s,e[1]=i*c+o*s,e[2]=r*-s+a*c,e[3]=i*-s+o*c,e}function oe(){var e=new N(9);return N!=Float32Array&&(e[1]=0,e[2]=0,e[3]=0,e[5]=0,e[6]=0,e[7]=0),e[0]=1,e[4]=1,e[8]=1,e}function se(e){var t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],o=e[5],s=e[6],c=e[7],l=e[8];return t*(l*a-o*c)+n*(-l*i+o*s)+r*(c*i-a*s)}function ce(e,t){var n=Math.sin(t),r=Math.cos(t);return e[0]=r,e[1]=n,e[2]=0,e[3]=-n,e[4]=r,e[5]=0,e[6]=0,e[7]=0,e[8]=1,e}function le(e,t){var n=t[0],r=t[1],i=t[2],a=t[3],o=n+n,s=r+r,c=i+i,l=n*o,u=r*o,d=r*s,f=i*o,p=i*s,m=i*c,h=a*o,g=a*s,_=a*c;return e[0]=1-d-m,e[3]=u-_,e[6]=f+g,e[1]=u+_,e[4]=1-l-m,e[7]=p-h,e[2]=f-g,e[5]=p+h,e[8]=1-l-d,e}function ue(){var e=new N(16);return N!=Float32Array&&(e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0),e[0]=1,e[5]=1,e[10]=1,e[15]=1,e}function de(e){var t=new N(16);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}function fe(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}function pe(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function me(e,t){var n=t[0],r=t[1],i=t[2],a=t[3],o=t[4],s=t[5],c=t[6],l=t[7],u=t[8],d=t[9],f=t[10],p=t[11],m=t[12],h=t[13],g=t[14],_=t[15],v=n*s-r*o,y=n*c-i*o,b=n*l-a*o,x=r*c-i*s,S=r*l-a*s,C=i*l-a*c,w=u*h-d*m,T=u*g-f*m,E=u*_-p*m,D=d*g-f*h,O=d*_-p*h,k=f*_-p*g,A=v*k-y*O+b*D+x*E-S*T+C*w;return A?(A=1/A,e[0]=(s*k-c*O+l*D)*A,e[1]=(i*O-r*k-a*D)*A,e[2]=(h*C-g*S+_*x)*A,e[3]=(f*S-d*C-p*x)*A,e[4]=(c*E-o*k-l*T)*A,e[5]=(n*k-i*E+a*T)*A,e[6]=(g*b-m*C-_*y)*A,e[7]=(u*C-f*b+p*y)*A,e[8]=(o*O-s*E+l*w)*A,e[9]=(r*E-n*O-a*w)*A,e[10]=(m*S-h*b+_*v)*A,e[11]=(d*b-u*S-p*v)*A,e[12]=(s*T-o*D-c*w)*A,e[13]=(n*D-r*T+i*w)*A,e[14]=(h*y-m*x-g*v)*A,e[15]=(u*x-d*y+f*v)*A,e):null}function he(e,t,n){var r=t[0],i=t[1],a=t[2],o=t[3],s=t[4],c=t[5],l=t[6],u=t[7],d=t[8],f=t[9],p=t[10],m=t[11],h=t[12],g=t[13],_=t[14],v=t[15],y=n[0],b=n[1],x=n[2],S=n[3];return e[0]=y*r+b*s+x*d+S*h,e[1]=y*i+b*c+x*f+S*g,e[2]=y*a+b*l+x*p+S*_,e[3]=y*o+b*u+x*m+S*v,y=n[4],b=n[5],x=n[6],S=n[7],e[4]=y*r+b*s+x*d+S*h,e[5]=y*i+b*c+x*f+S*g,e[6]=y*a+b*l+x*p+S*_,e[7]=y*o+b*u+x*m+S*v,y=n[8],b=n[9],x=n[10],S=n[11],e[8]=y*r+b*s+x*d+S*h,e[9]=y*i+b*c+x*f+S*g,e[10]=y*a+b*l+x*p+S*_,e[11]=y*o+b*u+x*m+S*v,y=n[12],b=n[13],x=n[14],S=n[15],e[12]=y*r+b*s+x*d+S*h,e[13]=y*i+b*c+x*f+S*g,e[14]=y*a+b*l+x*p+S*_,e[15]=y*o+b*u+x*m+S*v,e}function ge(e,t,n){var r=n[0],i=n[1],a=n[2],o,s,c,l,u,d,f,p,m,h,g,_;return t===e?(e[12]=t[0]*r+t[4]*i+t[8]*a+t[12],e[13]=t[1]*r+t[5]*i+t[9]*a+t[13],e[14]=t[2]*r+t[6]*i+t[10]*a+t[14],e[15]=t[3]*r+t[7]*i+t[11]*a+t[15]):(o=t[0],s=t[1],c=t[2],l=t[3],u=t[4],d=t[5],f=t[6],p=t[7],m=t[8],h=t[9],g=t[10],_=t[11],e[0]=o,e[1]=s,e[2]=c,e[3]=l,e[4]=u,e[5]=d,e[6]=f,e[7]=p,e[8]=m,e[9]=h,e[10]=g,e[11]=_,e[12]=o*r+u*i+m*a+t[12],e[13]=s*r+d*i+h*a+t[13],e[14]=c*r+f*i+g*a+t[14],e[15]=l*r+p*i+_*a+t[15]),e}function P(e,t,n){var r=n[0],i=n[1],a=n[2];return e[0]=t[0]*r,e[1]=t[1]*r,e[2]=t[2]*r,e[3]=t[3]*r,e[4]=t[4]*i,e[5]=t[5]*i,e[6]=t[6]*i,e[7]=t[7]*i,e[8]=t[8]*a,e[9]=t[9]*a,e[10]=t[10]*a,e[11]=t[11]*a,e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}function F(e,t,n){var r=Math.sin(n),i=Math.cos(n),a=t[4],o=t[5],s=t[6],c=t[7],l=t[8],u=t[9],d=t[10],f=t[11];return t!==e&&(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[4]=a*i+l*r,e[5]=o*i+u*r,e[6]=s*i+d*r,e[7]=c*i+f*r,e[8]=l*i-a*r,e[9]=u*i-o*r,e[10]=d*i-s*r,e[11]=f*i-c*r,e}function _e(e,t,n){var r=Math.sin(n),i=Math.cos(n),a=t[0],o=t[1],s=t[2],c=t[3],l=t[8],u=t[9],d=t[10],f=t[11];return t!==e&&(e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[0]=a*i-l*r,e[1]=o*i-u*r,e[2]=s*i-d*r,e[3]=c*i-f*r,e[8]=a*r+l*i,e[9]=o*r+u*i,e[10]=s*r+d*i,e[11]=c*r+f*i,e}function ve(e,t,n){var r=Math.sin(n),i=Math.cos(n),a=t[0],o=t[1],s=t[2],c=t[3],l=t[4],u=t[5],d=t[6],f=t[7];return t!==e&&(e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[0]=a*i+l*r,e[1]=o*i+u*r,e[2]=s*i+d*r,e[3]=c*i+f*r,e[4]=l*i-a*r,e[5]=u*i-o*r,e[6]=d*i-s*r,e[7]=f*i-c*r,e}function ye(e,t){return e[0]=t[0],e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=t[1],e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=t[2],e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function be(e,t,n,r,i){var a=1/Math.tan(t/2);if(e[0]=a/n,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=a,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=-1,e[12]=0,e[13]=0,e[15]=0,i!=null&&i!==1/0){var o=1/(r-i);e[10]=(i+r)*o,e[14]=2*i*r*o}else e[10]=-1,e[14]=-2*r;return e}var xe=be;function Se(e,t,n,r,i,a,o){var s=1/(t-n),c=1/(r-i),l=1/(a-o);return e[0]=-2*s,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=-2*c,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=2*l,e[11]=0,e[12]=(t+n)*s,e[13]=(i+r)*c,e[14]=(o+a)*l,e[15]=1,e}var Ce=Se;function we(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]&&e[4]===t[4]&&e[5]===t[5]&&e[6]===t[6]&&e[7]===t[7]&&e[8]===t[8]&&e[9]===t[9]&&e[10]===t[10]&&e[11]===t[11]&&e[12]===t[12]&&e[13]===t[13]&&e[14]===t[14]&&e[15]===t[15]}function Te(e,t){var n=e[0],r=e[1],i=e[2],a=e[3],o=e[4],s=e[5],c=e[6],l=e[7],u=e[8],d=e[9],f=e[10],p=e[11],m=e[12],h=e[13],g=e[14],_=e[15],v=t[0],y=t[1],b=t[2],x=t[3],S=t[4],C=t[5],w=t[6],T=t[7],E=t[8],D=t[9],O=t[10],k=t[11],A=t[12],j=t[13],M=t[14],ee=t[15];return Math.abs(n-v)<=1e-6*Math.max(1,Math.abs(n),Math.abs(v))&&Math.abs(r-y)<=1e-6*Math.max(1,Math.abs(r),Math.abs(y))&&Math.abs(i-b)<=1e-6*Math.max(1,Math.abs(i),Math.abs(b))&&Math.abs(a-x)<=1e-6*Math.max(1,Math.abs(a),Math.abs(x))&&Math.abs(o-S)<=1e-6*Math.max(1,Math.abs(o),Math.abs(S))&&Math.abs(s-C)<=1e-6*Math.max(1,Math.abs(s),Math.abs(C))&&Math.abs(c-w)<=1e-6*Math.max(1,Math.abs(c),Math.abs(w))&&Math.abs(l-T)<=1e-6*Math.max(1,Math.abs(l),Math.abs(T))&&Math.abs(u-E)<=1e-6*Math.max(1,Math.abs(u),Math.abs(E))&&Math.abs(d-D)<=1e-6*Math.max(1,Math.abs(d),Math.abs(D))&&Math.abs(f-O)<=1e-6*Math.max(1,Math.abs(f),Math.abs(O))&&Math.abs(p-k)<=1e-6*Math.max(1,Math.abs(p),Math.abs(k))&&Math.abs(m-A)<=1e-6*Math.max(1,Math.abs(m),Math.abs(A))&&Math.abs(h-j)<=1e-6*Math.max(1,Math.abs(h),Math.abs(j))&&Math.abs(g-M)<=1e-6*Math.max(1,Math.abs(g),Math.abs(M))&&Math.abs(_-ee)<=1e-6*Math.max(1,Math.abs(_),Math.abs(ee))}function Ee(){var e=new N(3);return N!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}function De(e){var t=new N(3);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function Oe(e){var t=e[0],n=e[1],r=e[2];return Math.sqrt(t*t+n*n+r*r)}function ke(e,t,n){var r=new N(3);return r[0]=e,r[1]=t,r[2]=n,r}function Ae(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e[2]=t[2]+n[2],e}function je(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e[2]=t[2]-n[2],e}function Me(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e}function Ne(e,t,n,r){return e[0]=t[0]+n[0]*r,e[1]=t[1]+n[1]*r,e[2]=t[2]+n[2]*r,e}function Pe(e,t){var n=t[0]-e[0],r=t[1]-e[1],i=t[2]-e[2];return Math.sqrt(n*n+r*r+i*i)}function Fe(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e}function Ie(e,t){var n=t[0],r=t[1],i=t[2],a=n*n+r*r+i*i;return a>0&&(a=1/Math.sqrt(a)),e[0]=t[0]*a,e[1]=t[1]*a,e[2]=t[2]*a,e}function Le(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function Re(e,t,n){var r=t[0],i=t[1],a=t[2],o=n[0],s=n[1],c=n[2];return e[0]=i*c-a*s,e[1]=a*o-r*c,e[2]=r*s-i*o,e}function ze(e,t,n,r){var i=t[0],a=t[1],o=t[2];return e[0]=i+r*(n[0]-i),e[1]=a+r*(n[1]-a),e[2]=o+r*(n[2]-o),e}function Be(e,t,n){var r=t[0],i=t[1],a=t[2],o=n[3]*r+n[7]*i+n[11]*a+n[15];return o||=1,e[0]=(n[0]*r+n[4]*i+n[8]*a+n[12])/o,e[1]=(n[1]*r+n[5]*i+n[9]*a+n[13])/o,e[2]=(n[2]*r+n[6]*i+n[10]*a+n[14])/o,e}function Ve(e,t,n){var r=t[0],i=t[1],a=t[2];return e[0]=r*n[0]+i*n[3]+a*n[6],e[1]=r*n[1]+i*n[4]+a*n[7],e[2]=r*n[2]+i*n[5]+a*n[8],e}function He(e,t,n){var r=n[0],i=n[1],a=n[2],o=n[3],s=t[0],c=t[1],l=t[2],u=i*l-a*c,d=a*s-r*l,f=r*c-i*s;return u+=u,d+=d,f+=f,e[0]=s+o*u+i*f-a*d,e[1]=c+o*d+a*u-r*f,e[2]=l+o*f+r*d-i*u,e}function Ue(e,t,n,r){var i=[],a=[];return i[0]=t[0]-n[0],i[1]=t[1]-n[1],i[2]=t[2]-n[2],a[0]=i[0],a[1]=i[1]*Math.cos(r)-i[2]*Math.sin(r),a[2]=i[1]*Math.sin(r)+i[2]*Math.cos(r),e[0]=a[0]+n[0],e[1]=a[1]+n[1],e[2]=a[2]+n[2],e}function We(e,t,n,r){var i=[],a=[];return i[0]=t[0]-n[0],i[1]=t[1]-n[1],i[2]=t[2]-n[2],a[0]=i[2]*Math.sin(r)+i[0]*Math.cos(r),a[1]=i[1],a[2]=i[2]*Math.cos(r)-i[0]*Math.sin(r),e[0]=a[0]+n[0],e[1]=a[1]+n[1],e[2]=a[2]+n[2],e}function Ge(e,t,n,r){var i=[],a=[];return i[0]=t[0]-n[0],i[1]=t[1]-n[1],i[2]=t[2]-n[2],a[0]=i[0]*Math.cos(r)-i[1]*Math.sin(r),a[1]=i[0]*Math.sin(r)+i[1]*Math.cos(r),a[2]=i[2],e[0]=a[0]+n[0],e[1]=a[1]+n[1],e[2]=a[2]+n[2],e}function Ke(e){return e[0]=0,e[1]=0,e[2]=0,e}var qe=je,I=Oe;(function(){var e=Ee();return function(t,n,r,i,a,o){var s,c;for(n||=3,r||=0,c=i?Math.min(i*n+r,t.length):t.length,s=r;s0&&(o=1/Math.sqrt(o)),e[0]=n*o,e[1]=r*o,e[2]=i*o,e[3]=a*o,e}function $e(e,t,n){var r=t[0],i=t[1],a=t[2],o=t[3];return e[0]=n[0]*r+n[4]*i+n[8]*a+n[12]*o,e[1]=n[1]*r+n[5]*i+n[9]*a+n[13]*o,e[2]=n[2]*r+n[6]*i+n[10]*a+n[14]*o,e[3]=n[3]*r+n[7]*i+n[11]*a+n[15]*o,e}var et=Xe;(function(){var e=Je();return function(t,n,r,i,a,o){var s,c;for(n||=4,r||=0,c=i?Math.min(i*n+r,t.length):t.length,s=r;s1e-6?(f=Math.acos(p),m=Math.sin(f),h=Math.sin((1-r)*f)/m,g=Math.sin(r*f)/m):(h=1-r,g=r),e[0]=h*i+g*c,e[1]=h*a+g*l,e[2]=h*o+g*u,e[3]=h*s+g*d,e}function at(e,t){var n=t[0]+t[4]+t[8],r;if(n>0)r=Math.sqrt(n+1),e[3]=.5*r,r=.5/r,e[0]=(t[5]-t[7])*r,e[1]=(t[6]-t[2])*r,e[2]=(t[1]-t[3])*r;else{var i=0;t[4]>t[0]&&(i=1),t[8]>t[i*3+i]&&(i=2);var a=(i+1)%3,o=(i+2)%3;r=Math.sqrt(t[i*3+i]-t[a*3+a]-t[o*3+o]+1),e[i]=.5*r,r=.5/r,e[3]=(t[a*3+o]-t[o*3+a])*r,e[a]=(t[a*3+i]+t[i*3+a])*r,e[o]=(t[o*3+i]+t[i*3+o])*r}return e}function ot(e,t,n,r){var i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:`zyx`,a=Math.PI/360;t*=a,r*=a,n*=a;var o=Math.sin(t),s=Math.cos(t),c=Math.sin(n),l=Math.cos(n),u=Math.sin(r),d=Math.cos(r);switch(i){case`xyz`:e[0]=o*l*d+s*c*u,e[1]=s*c*d-o*l*u,e[2]=s*l*u+o*c*d,e[3]=s*l*d-o*c*u;break;case`xzy`:e[0]=o*l*d-s*c*u,e[1]=s*c*d-o*l*u,e[2]=s*l*u+o*c*d,e[3]=s*l*d+o*c*u;break;case`yxz`:e[0]=o*l*d+s*c*u,e[1]=s*c*d-o*l*u,e[2]=s*l*u-o*c*d,e[3]=s*l*d+o*c*u;break;case`yzx`:e[0]=o*l*d+s*c*u,e[1]=s*c*d+o*l*u,e[2]=s*l*u-o*c*d,e[3]=s*l*d-o*c*u;break;case`zxy`:e[0]=o*l*d-s*c*u,e[1]=s*c*d+o*l*u,e[2]=s*l*u+o*c*d,e[3]=s*l*d-o*c*u;break;case`zyx`:e[0]=o*l*d-s*c*u,e[1]=s*c*d+o*l*u,e[2]=s*l*u-o*c*d,e[3]=s*l*d+o*c*u;break;default:throw Error(`Unknown angle order `+i)}return e}var st=Ye,ct=Qe;(function(){var e=Ee(),t=ke(1,0,0),n=ke(0,1,0);return function(r,i,a){var o=Le(i,a);return o<-.999999?(Re(e,t,i),I(e)<1e-6&&Re(e,n,i),Ie(e,e),nt(r,e,Math.PI),r):o>.999999?(r[0]=0,r[1]=0,r[2]=0,r[3]=1,r):(Re(e,i,a),r[0]=e[0],r[1]=e[1],r[2]=e[2],r[3]=1+o,ct(r,r))}})(),function(){var e=tt(),t=tt();return function(n,r,i,a,o,s){return it(e,r,o,s),it(t,i,a,s),it(n,e,t,2*s*(1-s)),n}}(),function(){var e=oe();return function(t,n,r,i){return e[0]=r[0],e[3]=r[1],e[6]=r[2],e[1]=i[0],e[4]=i[1],e[7]=i[2],e[2]=-n[0],e[5]=-n[1],e[8]=-n[2],ct(t,at(t,e))}}();function lt(){var e=new N(2);return N!=Float32Array&&(e[0]=0,e[1]=0),e}function ut(e,t){var n=new N(2);return n[0]=e,n[1]=t,n}function dt(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e}function ft(e){var t=e[0],n=e[1];return Math.sqrt(t*t+n*n)}function pt(e){var t=e[0],n=e[1];return t*t+n*n}function mt(e,t){return e[0]*t[0]+e[1]*t[1]}function ht(e){return e[0]=0,e[1]=0,e}var gt=pt;(function(){var e=lt();return function(t,n,r,i,a,o){var s,c;for(n||=2,r||=0,c=i?Math.min(i*n+r,t.length):t.length,s=r;s0?s:-s}function kt(e,t){let n=jt(e,360),r=jt(t,360),i=r-n,a=r>n?i-360:i+360;return Math.abs(i)e.canonical.z)),n=1/0,r=-1/0,i=1/0,a=-1/0,o=[];for(let s of e){let{x:e,y:c,z:l}=s.canonical,u=2**(t-l),d=e*u,f=c*u;o.push({id:s,x:d,y:f}),dr&&(r=d),fa&&(a=f)}let s=new Set;for(let e of o)(e.x===n||e.x===r||e.y===i||e.y===a)&&s.add(e.id);return s}function It(e){if(e<=0)return 0;if(e>=1)return 1;let t=e*e,n=t*e;return 4*(e<.5?n:3*(e-t)+n-.75)}function Lt(e,t,n,r){return A(e,t,n,r)}var Rt=Lt(.25,.1,.25,1);function R(e,t,n){return Math.min(n,Math.max(t,e))}function zt(e,t,n){let r=n-t,i=((e-t)%r+r)%r+t;return i===t?n:i}function z(e,...t){for(let n of t)for(let t in n)e[t]=n[t];return e}function Bt(e,t){let n={};for(let r of t)r in e&&(n[r]=e[r]);return n}var Vt=1;function Ht(){return Vt++}function Ut(e){return Math.log(e)/Math.LN2%1==0}function Wt(e){return e<=1?1:2**Math.ceil(Math.log(e)/Math.LN2)}function Gt(e){return 2**e}function Kt(e){return Math.log(e)/Math.LN2}function qt(e,t,n){if(t<=0)return e;let r=1/t;return n===void 0||Math.abs(n)<1e-10?Math.round(e*r)/r:(n>0?Math.ceil(e*r-1e-9):Math.floor(e*r+1e-10))/r}function Jt(e,t,n){let r={};for(let i in e)r[i]=t.call(n||this,e[i],i,e);return r}function Yt(e,t,n){let r={};for(let i in e)t.call(n||this,e[i],i,e)&&(r[i]=e[i]);return r}function Xt(e,t){if(Array.isArray(e)){if(!Array.isArray(t)||e.length!==t.length)return!1;for(let n=0;n(t.y-e.y)*(n.x-e.x)}function tn(e,t,n,r){let i=t.y-e.y,a=t.x-e.x,o=r.y-n.y,s=r.x-n.x,c=o*a-s*i;if(c===0)return null;let l=e.y-n.y,u=e.x-n.x,d=(s*l-o*u)/c;return new k(e.x+d*a,e.y+d*i)}function nn([e,t,n]){return t+=90,t*=Math.PI/180,n*=Math.PI/180,[e*Math.cos(t)*Math.sin(n),e*Math.sin(t)*Math.sin(n),e*Math.cos(n)]}function rn(e){return typeof WorkerGlobalScope<`u`&&e!==void 0&&e instanceof WorkerGlobalScope}function an(e){let t=/(?:^|(?:\s*\,\s*))([^\x00-\x20\(\)<>@\,;\:\\"\/\[\]\?\=\{\}\x7F]+)(?:\=(?:([^\x00-\x20\(\)<>@\,;\:\\"\/\[\]\?\=\{\}\x7F]+)|(?:\"((?:[^"\\]|\\.)*)\")))?/g,n={};if(e.replace(t,(e,t,r,i)=>{let a=r||i;return n[t]=!a||a.toLowerCase(),``}),n[`max-age`]){let e=parseInt(n[`max-age`],10);isNaN(e)?delete n[`max-age`]:n[`max-age`]=e}return n}var on=null;function sn(e){if(on==null){let t=e.navigator?e.navigator.userAgent:null;on=!!e.safari||!!(t&&(/\b(iPad|iPhone|iPod)\b/.test(t)||t.match(`Safari`)&&!t.match(`Chrome`)))}return on}function cn(e){return typeof ImageBitmap<`u`&&e instanceof ImageBitmap}var ln=async(e,t)=>{let n=new Blob([new Uint8Array(e)],{type:`image/png`});try{return createImageBitmap(n,t)}catch(e){throw Error(`Could not load image because of ${vt(e).message}. Please make sure to use a supported image type such as PNG or JPEG. Note that SVGs are not supported.`)}},un=e=>new Promise((t,n)=>{let r=new Image;r.onload=()=>{t(r),URL.revokeObjectURL(r.src),r.onload=null,window.requestAnimationFrame(()=>r.src=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII=`)},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=new Blob([new Uint8Array(e)],{type:`image/png`});r.src=URL.createObjectURL(i)});function dn(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=Math.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 fn(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?.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,dn(e,t,n,r,i)),s)for(let e=0;e{e.removeEventListener(t,n,r)}}}function mn(e){return e*Math.PI/180}function hn(e){return e/Math.PI*180}function gn(e,t){return e.roll==t.roll&&e.pitch==t.pitch&&e.bearing==t.bearing}function _n(e){let t=new Float64Array(9);le(t,e);let n=hn(-Math.asin(R(t[2],-1,1))),r,i;return Math.hypot(t[5],t[8])<.001?(r=0,i=-hn(Math.atan2(t[3],t[4]))):(r=hn(t[5]===0&&t[8]===0?0:Math.atan2(t[5],t[8])),i=hn(t[1]===0&&t[0]===0?0:Math.atan2(t[1],t[0]))),{roll:r,pitch:n+90,bearing:i}}function vn(e,t,n){let r=ut(t.x-n.x,t.y-n.y),i=ut(e.x-n.x,e.y-n.y),a=r[0]*i[1]-r[1]*i[0];return hn(Math.atan2(a,mt(r,i)))}function yn(e,t,n){let r=new Float64Array(4);return ot(r,e,t-90,n),r}var bn=85.051129,xn={touchstart:!0,touchmove:!0,touchmoveWindow:!0,touchend:!0,touchcancel:!0},Sn={dblclick:!0,click:!0,mouseover:!0,mouseout:!0,mousedown:!0,mousemove:!0,mousemoveWindow:!0,mouseup:!0,mouseupWindow:!0,contextmenu:!0,wheel:!0};function Cn(e,t){return xn[t]&&`touches`in e}function wn(e,t){if(!Sn[t])return!1;let n=e,r=(n?.target)?.ownerDocument?.defaultView||window;return n instanceof r.MouseEvent||n instanceof r.WheelEvent}function Tn(e){return xn[e]||Sn[e]}var En=`AbortError`,Dn=class extends Error{constructor(e=En){super(e instanceof Error?e.message:e),this.name=En,e instanceof Error&&e.stack&&(this.stack=e.stack)}};function On(e){return e instanceof Error&&e.name===`AbortError`}function kn(e){if(e.aborted)throw new Dn(e.reason)}var An,jn,Mn,Nn={frame(e,t,n,r){let i=r||window,a=i.requestAnimationFrame(e=>{o(),t(e)}),{unsubscribe:o}=pn(e.signal,`abort`,()=>{o(),i.cancelAnimationFrame(a),n(new Dn(e.signal.reason))},!1)},frameAsync(e,t){return new Promise((n,r)=>{this.frame(e,n,r,t)})},getImageData(e,t=0){return this.getImageCanvasContext(e).getImageData(-t,-t,e.width+2*t,e.height+2*t)},getImageCanvasContext(e){let t;if(M()&&!te())t=new OffscreenCanvas(e.width,e.height).getContext(`2d`,{willReadFrequently:!0});else{let n=window.document.createElement(`canvas`);n.width=e.width,n.height=e.height,t=n.getContext(`2d`,{willReadFrequently:!0})}if(!t)throw Error(`failed to create canvas 2d context`);return t.drawImage(e,0,0,e.width,e.height),t},resolveURL(e){return An||=document.createElement(`a`),An.href=e,An.href},get hardwareConcurrency(){return typeof navigator<`u`&&navigator.hardwareConcurrency||4},get prefersReducedMotion(){return Mn===void 0?matchMedia?(jn??=matchMedia(`(prefers-reduced-motion: reduce)`),jn.matches):!1:Mn},set prefersReducedMotion(e){Mn=e}},Pn=new class{constructor(){this._frozenAt=null}getCurrentTime(){return this._frozenAt===null?performance.now():this._frozenAt}setNow(e){this._frozenAt=e}restoreNow(){this._frozenAt=null}isFrozen(){return this._frozenAt!==null}};function Fn(){return Pn.getCurrentTime()}var In=new Set(`a.abbr.b.bdi.bdo.br.cite.code.del.div.em.i.img.ins.kbd.li.mark.ol.p.q.s.samp.small.span.strong.sub.sup.time.u.ul.var.wbr`.split(`.`)),Ln=new Set([`alt`,`class`,`datetime`,`dir`,`height`,`href`,`hreflang`,`lang`,`referrerpolicy`,`rel`,`role`,`src`,`target`,`title`,`translate`,`type`,`width`]),Rn=new Set([`href`,`src`]),zn=new Set([`http:`,`https:`,`mailto:`]),Bn;function Vn(){return Bn??={getAttribute:Element.prototype.getAttribute,getAttributeNames:Element.prototype.getAttributeNames,querySelectorAll:Element.prototype.querySelectorAll,remove:Element.prototype.remove,removeAttribute:Element.prototype.removeAttribute,localName:Object.getOwnPropertyDescriptor(Element.prototype,`localName`).get,namespaceURI:Object.getOwnPropertyDescriptor(Element.prototype,`namespaceURI`).get},Bn}var Hn=class e{static{this.docStyle=typeof window<`u`&&window.document?.documentElement.style}static{this.selectProp=!e.docStyle||`userSelect`in e.docStyle?`userSelect`:`webkitUserSelect`}static create(e,t,n){let r=window.document.createElement(e);return t!==void 0&&(r.className=t),n&&n.appendChild(r),r}static createNS(e,t){return window.document.createElementNS(e,t)}static disableDrag(){e.docStyle&&e.selectProp&&(e.userSelect=e.docStyle[e.selectProp],e.docStyle[e.selectProp]=`none`)}static enableDrag(){e.docStyle&&e.selectProp&&(e.docStyle[e.selectProp]=e.userSelect)}static suppressClickInternal(t){t.preventDefault(),t.stopPropagation(),window.removeEventListener(`click`,e.suppressClickInternal,!0)}static suppressClick(){window.addEventListener(`click`,e.suppressClickInternal,!0),window.setTimeout(()=>{window.removeEventListener(`click`,e.suppressClickInternal,!0)},0)}static getScale(e){let t=e.getBoundingClientRect();return{x:t.width/e.offsetWidth||1,y:t.height/e.offsetHeight||1,boundingClientRect:t}}static getPoint(e,t,n){let r=t.boundingClientRect;return new k((n.clientX-r.left)/t.x-e.clientLeft,(n.clientY-r.top)/t.y-e.clientTop)}static mousePos(t,n){let r=e.getScale(t);return e.getPoint(t,r,n)}static touchPos(t,n){let r=[],i=e.getScale(t);for(let a of n)r.push(e.getPoint(t,i,a));return r}static sanitize(t){let n=new DOMParser().parseFromString(t,`text/html`).body,{querySelectorAll:r,remove:i}=Vn();for(let t of Array.from(r.call(n,`*`)))e.isAllowedElement(t)?e.removeDisallowedAttributes(t):i.call(t);let a=document.createDocumentFragment();return a.append(...n.childNodes),a}static isAllowedElement(e){let{namespaceURI:t,localName:n}=Vn();return t.call(e)===`http://www.w3.org/1999/xhtml`&&In.has(n.call(e))}static removeDisallowedAttributes(t){let{getAttributeNames:n,getAttribute:r,removeAttribute:i}=Vn();for(let a of n.call(t))e.isAllowedAttribute(a,r.call(t,a))||i.call(t,a)}static isAllowedAttribute(e,t){if(!Ln.has(e)&&!e.startsWith(`aria-`))return!1;if(!Rn.has(e))return!0;try{return zn.has(new URL(t,`https://maplibre.invalid/`).protocol)}catch{return!1}}},Un={MAX_PARALLEL_IMAGE_REQUESTS:16,MAX_PARALLEL_IMAGE_REQUESTS_PER_FRAME:8,MAX_TILE_CACHE_ZOOM_LEVELS:5,REGISTERED_PROTOCOLS:{},WORKER_URL:``};function Wn(e){return Un.REGISTERED_PROTOCOLS[e.substring(0,e.indexOf(`://`))]}var Gn=`global-dispatcher`,Kn=class extends Error{constructor(e,t,n,r){super(`AJAXError: ${t} (${e}): ${n}`),this.status=e,this.statusText=t,this.url=n,this.body=r}};function qn(){if(rn(self))return self.worker?.referrer;if(window.location.protocol===`blob:`)try{return window.parent.location.href}catch{}return window.location.href}var Jn=e=>e.startsWith(`file:`)||qn()?.startsWith(`file:`)&&!/^\w+:/.test(e);async function Yn(e,t){let n=new Request(e.url,{method:e.method||`GET`,body:e.body,credentials:e.credentials,headers:e.headers,cache:e.cache,referrer:qn(),referrerPolicy:e.referrerPolicy,signal:t.signal});e.type===`json`&&!n.headers.has(`Accept`)&&n.headers.set(`Accept`,`application/json`);let r;try{r=await fetch(n)}catch(t){throw On(t)?t:new Kn(0,vt(t).message,e.url,new Blob)}if(!r.ok){let t=await r.blob();throw new Kn(r.status,r.statusText,e.url,t)}let i;i=e.type===`arrayBuffer`||e.type===`image`?r.arrayBuffer():e.type===`json`?r.json():r.text();let a=await i;return kn(t.signal),{data:a,cacheControl:r.headers.get(`Cache-Control`),expires:r.headers.get(`Expires`),etag:r.headers.get(`ETag`)}}function Xn(e,t){return new Promise((n,r)=>{let i=new XMLHttpRequest;i.open(e.method||`GET`,e.url,!0),(e.type===`arrayBuffer`||e.type===`image`)&&(i.responseType=`arraybuffer`);for(let t in e.headers)i.setRequestHeader(t,e.headers[t]);e.type===`json`&&(i.responseType=`text`,e.headers?.Accept||i.setRequestHeader(`Accept`,`application/json`)),i.withCredentials=e.credentials===`include`,i.onerror=()=>{r(Error(i.statusText))},i.onload=()=>{if(!t.signal.aborted){if((i.status>=200&&i.status<300||i.status===0)&&i.response!==null){let t=i.response;if(e.type===`json`)try{t=JSON.parse(i.response)}catch(e){r(e);return}n({data:t,cacheControl:i.getResponseHeader(`Cache-Control`),expires:i.getResponseHeader(`Expires`),etag:i.getResponseHeader(`ETag`)})}else{let t=new Blob([i.response],{type:i.getResponseHeader(`Content-Type`)});r(new Kn(i.status,i.statusText,e.url,t))}}},t.signal.addEventListener(`abort`,()=>{i.abort(),r(new Dn(t.signal.reason))}),i.send(e.body)})}var Zn=async function(e,t){if(e.url.includes(`://`)&&!/^https?:|^file:/.test(e.url)){let n=Wn(e.url);if(n){let r=await n(e,t);return!r.data&&e.type===`arrayBuffer`?z(r,{data:new ArrayBuffer(0)}):r}if(rn(self)&&self.worker?.actor)return self.worker.actor.sendAsync({type:`GR`,data:e,targetMapId:Gn},t)}if(!Jn(e.url)){if(fetch&&Request&&AbortController&&Object.hasOwn(Request.prototype,`signal`))return Yn(e,t);if(rn(self)&&self.worker?.actor)return self.worker.actor.sendAsync({type:`GR`,data:e,mustQueue:!0,targetMapId:Gn},t)}return Xn(e,t)},Qn=(e,t)=>Zn(z(e,{type:`json`}),t),$n=(e,t)=>Zn(z(e,{type:`arrayBuffer`}),t);function er(e){if(!e||e.startsWith(`data:image/`))return!0;if(e.startsWith(`blob:`)&&(e=e.slice(5),e.startsWith(`null`)))return!1;if(e.indexOf(`://`)<=0)return!0;let t=new URL(e),n=window.location;return t.protocol===n.protocol&&t.host===n.host}var tr=e=>{let t=window.document.createElement(`video`);return t.muted=!0,new Promise(n=>{t.onloadstart=()=>{n(t)};for(let n of e){let e=window.document.createElement(`source`);er(n)||(t.crossOrigin=`Anonymous`),e.src=n,t.appendChild(e)}})},nr;(function(e){let t,n,r,i;e.resetRequestQueue=()=>{t=[],n=0,r=0,i={}},e.addThrottleControl=e=>{let t=r++;return i[t]=e,t},e.removeThrottleControl=e=>{delete i[e],l()};let a=()=>{for(let e of Object.keys(i))if(i[e]())return!0;return!1};async function o(e,t,n,r,i=!0,a){let o=await e.transformRequest(t,n);return kn(r.signal),nr.getImage(o,r,i,a)}e.transformAndGetImage=o,e.getImage=(e,n,r=!0,i)=>new Promise((a,o)=>{e.headers||={},e.headers.accept=`image/webp,*/*`,z(e,{type:`image`});let s={abortController:n,requestParameters:e,supportImageRefresh:r,imageBitmapOptions:i,state:`queued`,onError:e=>{o(e)},onSuccess:e=>{a(e)}};t.push(s),l()});let s=(e,t)=>typeof createImageBitmap==`function`?ln(e,t):un(e),c=async e=>{e.state=`running`;let{requestParameters:t,supportImageRefresh:r,imageBitmapOptions:i,onError:a,onSuccess:o,abortController:c}=e,d=r===!1&&!i&&!rn(self)&&!Wn(t.url)&&(!t.headers||Object.keys(t.headers).reduce((e,t)=>e&&t===`accept`,!0));n++;let f=d?u(t,c):Zn(t,c);try{let t=await f;delete e.abortController,e.state=`completed`,t.data instanceof HTMLImageElement||cn(t.data)?o(t):!t.data||t.data.byteLength===0?o({data:null,cacheControl:t.cacheControl,expires:t.expires}):o({data:await s(t.data,i),cacheControl:t.cacheControl,expires:t.expires})}catch(t){delete e.abortController,a(vt(t))}finally{n--,l()}},l=()=>{let e=a()?Un.MAX_PARALLEL_IMAGE_REQUESTS_PER_FRAME:Un.MAX_PARALLEL_IMAGE_REQUESTS;for(let r=n;r0;r++){let e=t.shift();e.abortController.signal.aborted?r--:c(e)}},u=(e,t)=>new Promise((n,r)=>{let i=new Image,a=e.url,o=e.credentials;o&&o===`include`?i.crossOrigin=`use-credentials`:(o&&o===`same-origin`||!er(a))&&(i.crossOrigin=`anonymous`),t.signal.addEventListener(`abort`,()=>{i.src=``,r(new Dn(t.signal.reason))}),i.fetchPriority=`high`,i.onload=()=>{i.onerror=i.onload=null,n({data:i})},i.onerror=()=>{i.onerror=i.onload=null,!t.signal.aborted&&r(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.`))},i.src=a})})(nr||={}),nr.resetRequestQueue();var rr=class{constructor(e){this._transformRequestFn=e??null}transformRequest(e,t){return this._transformRequestFn&&this._transformRequestFn(e,t)||{url:e}}setTransformRequest(e){this._transformRequestFn=e}};function ir(e,t,n){n[e]?.includes(t)||(n[e]||=[],n[e].push(t))}function ar(e,t,n){if(n?.[e]){let r=n[e].indexOf(t);r!==-1&&n[e].splice(r,1)}}var or=class{constructor(e,t={}){z(this,t),this.type=e}},B=class extends or{constructor(e,t={}){super(`error`,z({error:e},t))}},sr=class{on(e,t){return this._listeners||={},ir(e,t,this._listeners),{unsubscribe:()=>{this.off(e,t)}}}off(e,t){return ar(e,t,this._listeners),ar(e,t,this._oneTimeListeners),this}once(e,t){return t?(this._oneTimeListeners||={},ir(e,t,this._oneTimeListeners),this):new Promise(t=>this.once(e,t))}fire(e,t){let n=typeof e==`string`?new or(e,t||{}):e,r=n.type;if(this.listens(r)){n.target=this;let e=this._listeners?.[r]?.slice()??[];for(let t of e)t.call(this,n);let t=this._oneTimeListeners?.[r]?.slice()??[];for(let e of t)ar(r,e,this._oneTimeListeners),e.call(this,n);let i=this._eventedParent;i&&(z(n,typeof this._eventedParentData==`function`?this._eventedParentData():this._eventedParentData),i.fire(n))}else n instanceof B&&console.error(n.error);return this}listens(e){return!!(this._listeners?.[e]?.length||this._oneTimeListeners?.[e]?.length||this._eventedParent?.listens(e))}setEventedParent(e,t){return this._eventedParent=e,this._eventedParentData=t,this}},cr=class extends or{},V=class extends cr{},lr=class extends cr{constructor(e={}){super(`style.load`,e)}},ur=class extends cr{constructor(e,t={}){super(e,t),this.dataType=`style`}},dr=class extends cr{constructor(e,t={}){super(e,t),this.dataType=`source`}},fr=class extends cr{preventDefault(){this._defaultPrevented=!0}get defaultPrevented(){return this._defaultPrevented}constructor(e,t,n,r={}){n=n instanceof MouseEvent?n:new MouseEvent(e,n);let i=Hn.mousePos(t.getCanvas(),n),a=t.unproject(i);super(e,z({point:i,lngLat:a,originalEvent:n},r)),this._defaultPrevented=!1,this.target=t}},pr=class extends cr{preventDefault(){this._defaultPrevented=!0}get defaultPrevented(){return this._defaultPrevented}constructor(e,t,n){let r=e===`touchend`?n.changedTouches:n.touches,i=Hn.touchPos(t.getCanvasContainer(),r),a=i.map(e=>t.unproject(e)),o=i.reduce((e,t,n,r)=>e.add(t.div(r.length)),new k(0,0)),s=t.unproject(o);super(e,{points:i,point:o,lngLats:a,lngLat:s,originalEvent:n}),this._defaultPrevented=!1}},mr=class extends cr{preventDefault(){this._defaultPrevented=!0}get defaultPrevented(){return this._defaultPrevented}constructor(e,t){super(`wheel`,{originalEvent:t}),this._defaultPrevented=!1}},hr=class extends cr{},gr=class extends cr{constructor(e={}){super(`terrain`,e)}},_r=class extends cr{constructor(e={}){super(`projectiontransition`,e)}},vr=class extends cr{},yr=class extends cr{constructor(e={}){super(`styleimagemissing`,e)}},br={$version:8,$root:{version:{required:!0,type:`enum`,values:[8]},name:{type:`string`},metadata:{type:`*`},center:{type:`array`,value:`number`,length:2},centerAltitude:{type:`number`},zoom:{type:`number`},bearing:{type:`number`,default:0,period:360,units:`degrees`},pitch:{type:`number`,default:0,units:`degrees`},roll:{type:`number`,default:0,units:`degrees`},state:{type:`state`,default:{}},light:{type:`light`},sky:{type:`sky`},projection:{type:`projection`},terrain:{type:`terrain`},sources:{required:!0,type:`sources`},sprite:{type:`sprite`},glyphs:{type:`string`},"font-faces":{type:`fontFaces`},transition:{type:`transition`},layers:{required:!0,type:`array`,value:`layer`}},sources:{"*":{type:`source`}},source:[`source_vector`,`source_raster`,`source_raster_dem`,`source_geojson`,`source_video`,`source_image`],source_vector:{type:{required:!0,type:`enum`,values:{vector:{}}},url:{type:`string`},tiles:{type:`array`,value:`string`},bounds:{type:`array`,value:`number`,length:4,default:[-180,-85.051129,180,85.051129]},scheme:{type:`enum`,values:{xyz:{},tms:{}},default:`xyz`},minzoom:{type:`number`,default:0},maxzoom:{type:`number`,default:22},attribution:{type:`string`},promoteId:{type:`promoteId`},volatile:{type:`boolean`,default:!1},encoding:{type:`enum`,values:{mvt:{},mlt:{}},default:`mvt`},"*":{type:`*`}},source_raster:{type:{required:!0,type:`enum`,values:{raster:{}}},url:{type:`string`},tiles:{type:`array`,value:`string`},bounds:{type:`array`,value:`number`,length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:`number`,default:0},maxzoom:{type:`number`,default:22},tileSize:{type:`number`,default:512,units:`pixels`},scheme:{type:`enum`,values:{xyz:{},tms:{}},default:`xyz`},attribution:{type:`string`},volatile:{type:`boolean`,default:!1},"*":{type:`*`}},source_raster_dem:{type:{required:!0,type:`enum`,values:{"raster-dem":{}}},url:{type:`string`},tiles:{type:`array`,value:`string`},bounds:{type:`array`,value:`number`,length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:`number`,default:0},maxzoom:{type:`number`,default:22},tileSize:{type:`number`,default:512,units:`pixels`},attribution:{type:`string`},encoding:{type:`enum`,values:{terrarium:{},mapbox:{},custom:{}},default:`mapbox`},redFactor:{type:`number`,default:1},blueFactor:{type:`number`,default:1},greenFactor:{type:`number`,default:1},baseShift:{type:`number`,default:0},volatile:{type:`boolean`,default:!1},"*":{type:`*`}},source_geojson:{type:{required:!0,type:`enum`,values:{geojson:{}}},data:{required:!0,type:`*`},maxzoom:{type:`number`,default:18},attribution:{type:`string`},buffer:{type:`number`,default:128,maximum:512,minimum:0},filter:{type:`filter`},tolerance:{type:`number`,default:.375},cluster:{type:`boolean`,default:!1},clusterRadius:{type:`number`,default:50,minimum:0},clusterMaxZoom:{type:`number`},clusterMinPoints:{type:`number`},clusterProperties:{type:`*`},lineMetrics:{type:`boolean`,default:!1},generateId:{type:`boolean`,default:!1},promoteId:{type:`promoteId`}},source_video:{type:{required:!0,type:`enum`,values:{video:{}}},urls:{required:!0,type:`array`,value:`string`},coordinates:{required:!0,type:`array`,length:4,value:{type:`array`,length:2,value:`number`}}},source_image:{type:{required:!0,type:`enum`,values:{image:{}}},url:{type:`string`},coordinates:{required:!0,type:`array`,length:4,value:{type:`array`,length:2,value:`number`}}},layer:{id:{type:`string`,required:!0},type:{type:`enum`,values:{fill:{},line:{},symbol:{},circle:{},heatmap:{},"fill-extrusion":{},raster:{},hillshade:{},"color-relief":{},background:{}},required:!0},metadata:{type:`*`},source:{type:`string`},"source-layer":{type:`string`},minzoom:{type:`number`,minimum:0,maximum:24},maxzoom:{type:`number`,minimum:0,maximum:24},filter:{type:`filter`},layout:{type:`layout`},paint:{type:`paint`}},layout:[`layout_fill`,`layout_line`,`layout_circle`,`layout_heatmap`,`layout_fill-extrusion`,`layout_symbol`,`layout_raster`,`layout_hillshade`,`layout_color-relief`,`layout_background`],layout_background:{visibility:{type:`enum`,values:{visible:{},none:{}},default:`visible`,expression:{interpolated:!1,parameters:[`global-state`]},"property-type":`data-constant`}},layout_fill:{"fill-sort-key":{type:`number`,expression:{interpolated:!1,parameters:[`zoom`,`feature`]},"property-type":`data-driven`},visibility:{type:`enum`,values:{visible:{},none:{}},default:`visible`,expression:{interpolated:!1,parameters:[`global-state`]},"property-type":`data-constant`}},layout_circle:{"circle-sort-key":{type:`number`,expression:{interpolated:!1,parameters:[`zoom`,`feature`]},"property-type":`data-driven`},visibility:{type:`enum`,values:{visible:{},none:{}},default:`visible`,expression:{interpolated:!1,parameters:[`global-state`]},"property-type":`data-constant`}},layout_heatmap:{visibility:{type:`enum`,values:{visible:{},none:{}},default:`visible`,expression:{interpolated:!1,parameters:[`global-state`]},"property-type":`data-constant`}},"layout_fill-extrusion":{visibility:{type:`enum`,values:{visible:{},none:{}},default:`visible`,expression:{interpolated:!1,parameters:[`global-state`]},"property-type":`data-constant`},"fill-extrusion-rounded-corner-distance":{type:`number`,default:0,minimum:0,units:`meters`,"property-type":`constant`}},layout_line:{"line-cap":{type:`enum`,values:{butt:{},round:{},square:{}},default:`butt`,expression:{interpolated:!1,parameters:[`zoom`,`feature`]},"property-type":`data-driven`},"line-join":{type:`enum`,values:{bevel:{},round:{},miter:{}},default:`miter`,expression:{interpolated:!1,parameters:[`zoom`,`feature`]},"property-type":`data-driven`},"line-miter-limit":{type:`number`,default:2,requires:[{"line-join":`miter`}],expression:{interpolated:!0,parameters:[`zoom`,`feature`]},"property-type":`data-driven`},"line-round-limit":{type:`number`,default:1.05,requires:[{"line-join":`round`}],expression:{interpolated:!0,parameters:[`zoom`,`feature`]},"property-type":`data-driven`},"line-sort-key":{type:`number`,expression:{interpolated:!1,parameters:[`zoom`,`feature`]},"property-type":`data-driven`},visibility:{type:`enum`,values:{visible:{},none:{}},default:`visible`,expression:{interpolated:!1,parameters:[`global-state`]},"property-type":`data-constant`}},layout_symbol:{"symbol-placement":{type:`enum`,values:{point:{},line:{},"line-center":{}},default:`point`,expression:{interpolated:!1,parameters:[`zoom`]},"property-type":`data-constant`},"symbol-spacing":{type:`number`,default:250,minimum:1,units:`pixels`,requires:[{"symbol-placement":`line`}],expression:{interpolated:!0,parameters:[`zoom`]},"property-type":`data-constant`},"symbol-avoid-edges":{type:`boolean`,default:!1,expression:{interpolated:!1,parameters:[`zoom`]},"property-type":`data-constant`},"symbol-sort-key":{type:`number`,expression:{interpolated:!1,parameters:[`zoom`,`feature`]},"property-type":`data-driven`},"symbol-z-order":{type:`enum`,values:{auto:{},"viewport-y":{},source:{}},default:`auto`,expression:{interpolated:!1,parameters:[`zoom`]},"property-type":`data-constant`},"icon-allow-overlap":{type:`boolean`,default:!1,requires:[`icon-image`,{"!":`icon-overlap`}],expression:{interpolated:!1,parameters:[`zoom`]},"property-type":`data-constant`},"icon-overlap":{type:`enum`,values:{never:{},always:{},cooperative:{}},requires:[`icon-image`],expression:{interpolated:!1,parameters:[`zoom`]},"property-type":`data-constant`},"icon-ignore-placement":{type:`boolean`,default:!1,requires:[`icon-image`],expression:{interpolated:!1,parameters:[`zoom`]},"property-type":`data-constant`},"icon-optional":{type:`boolean`,default:!1,requires:[`icon-image`,`text-field`],expression:{interpolated:!1,parameters:[`zoom`]},"property-type":`data-constant`},"icon-rotation-alignment":{type:`enum`,values:{map:{},viewport:{},auto:{}},default:`auto`,requires:[`icon-image`],expression:{interpolated:!1,parameters:[`zoom`,`feature`]},"property-type":`data-driven`},"icon-size":{type:`number`,default:1,minimum:0,units:`factor of the original icon size`,requires:[`icon-image`],expression:{interpolated:!0,parameters:[`zoom`,`feature`]},"property-type":`data-driven`},"icon-text-fit":{type:`enum`,values:{none:{},width:{},height:{},both:{}},default:`none`,requires:[`icon-image`,`text-field`],expression:{interpolated:!1,parameters:[`zoom`]},"property-type":`data-constant`},"icon-text-fit-padding":{type:`array`,value:`number`,length:4,default:[0,0,0,0],units:`pixels`,requires:[`icon-image`,`text-field`,{"icon-text-fit":[`both`,`width`,`height`]}],expression:{interpolated:!0,parameters:[`zoom`]},"property-type":`data-constant`},"icon-image":{type:`resolvedImage`,tokens:!0,expression:{interpolated:!1,parameters:[`zoom`,`feature`]},"property-type":`data-driven`},"icon-rotate":{type:`number`,default:0,period:360,units:`degrees`,requires:[`icon-image`],expression:{interpolated:!0,parameters:[`zoom`,`feature`]},"property-type":`data-driven`},"icon-padding":{type:`padding`,default:[2],units:`pixels`,requires:[`icon-image`],expression:{interpolated:!0,parameters:[`zoom`,`feature`]},"property-type":`data-driven`},"icon-keep-upright":{type:`boolean`,default:!1,requires:[`icon-image`,{"icon-rotation-alignment":`map`},{"symbol-placement":[`line`,`line-center`]}],expression:{interpolated:!1,parameters:[`zoom`]},"property-type":`data-constant`},"icon-offset":{type:`array`,value:`number`,length:2,default:[0,0],requires:[`icon-image`],expression:{interpolated:!0,parameters:[`zoom`,`feature`]},"property-type":`data-driven`},"icon-anchor":{type:`enum`,values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},default:`center`,requires:[`icon-image`],expression:{interpolated:!1,parameters:[`zoom`,`feature`]},"property-type":`data-driven`},"icon-pitch-alignment":{type:`enum`,values:{map:{},viewport:{},auto:{}},default:`auto`,requires:[`icon-image`],expression:{interpolated:!1,parameters:[`zoom`]},"property-type":`data-constant`},"text-pitch-alignment":{type:`enum`,values:{map:{},viewport:{},auto:{}},default:`auto`,requires:[`text-field`],expression:{interpolated:!1,parameters:[`zoom`]},"property-type":`data-constant`},"text-rotation-alignment":{type:`enum`,values:{map:{},viewport:{},"viewport-glyph":{},auto:{}},default:`auto`,requires:[`text-field`],expression:{interpolated:!1,parameters:[`zoom`]},"property-type":`data-constant`},"text-field":{type:`formatted`,default:``,tokens:!0,expression:{interpolated:!1,parameters:[`zoom`,`feature`]},"property-type":`data-driven`},"text-font":{type:`array`,value:`string`,default:[`Open Sans Regular`,`Arial Unicode MS Regular`],requires:[`text-field`],expression:{interpolated:!1,parameters:[`zoom`,`feature`]},"property-type":`data-driven`},"text-size":{type:`number`,default:16,minimum:0,units:`pixels`,requires:[`text-field`],expression:{interpolated:!0,parameters:[`zoom`,`feature`]},"property-type":`data-driven`},"text-max-width":{type:`number`,default:10,minimum:0,units:`ems`,requires:[`text-field`],expression:{interpolated:!0,parameters:[`zoom`,`feature`]},"property-type":`data-driven`},"text-line-height":{type:`number`,default:1.2,units:`ems`,requires:[`text-field`],expression:{interpolated:!0,parameters:[`zoom`]},"property-type":`data-constant`},"text-letter-spacing":{type:`number`,default:0,units:`ems`,requires:[`text-field`],expression:{interpolated:!0,parameters:[`zoom`,`feature`]},"property-type":`data-driven`},"text-justify":{type:`enum`,values:{auto:{},left:{},center:{},right:{}},default:`center`,requires:[`text-field`],expression:{interpolated:!1,parameters:[`zoom`,`feature`]},"property-type":`data-driven`},"text-radial-offset":{type:`number`,units:`ems`,default:0,requires:[`text-field`],"property-type":`data-driven`,expression:{interpolated:!0,parameters:[`zoom`,`feature`]}},"text-variable-anchor":{type:`array`,value:`enum`,values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},requires:[`text-field`,{"symbol-placement":[`point`]}],expression:{interpolated:!1,parameters:[`zoom`]},"property-type":`data-constant`},"text-variable-anchor-offset":{type:`variableAnchorOffsetCollection`,requires:[`text-field`,{"symbol-placement":[`point`]}],expression:{interpolated:!0,parameters:[`zoom`,`feature`]},"property-type":`data-driven`},"text-anchor":{type:`enum`,values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},default:`center`,requires:[`text-field`,{"!":`text-variable-anchor`}],expression:{interpolated:!1,parameters:[`zoom`,`feature`]},"property-type":`data-driven`},"text-max-angle":{type:`number`,default:45,units:`degrees`,requires:[`text-field`,{"symbol-placement":[`line`,`line-center`]}],expression:{interpolated:!0,parameters:[`zoom`]},"property-type":`data-constant`},"text-writing-mode":{type:`array`,value:`enum`,values:{horizontal:{},vertical:{}},requires:[`text-field`,{"symbol-placement":[`point`]}],expression:{interpolated:!1,parameters:[`zoom`]},"property-type":`data-constant`},"text-rotate":{type:`number`,default:0,period:360,units:`degrees`,requires:[`text-field`],expression:{interpolated:!0,parameters:[`zoom`,`feature`]},"property-type":`data-driven`},"text-padding":{type:`number`,default:2,minimum:0,units:`pixels`,requires:[`text-field`],expression:{interpolated:!0,parameters:[`zoom`]},"property-type":`data-constant`},"text-keep-upright":{type:`boolean`,default:!0,requires:[`text-field`,{"text-rotation-alignment":`map`},{"symbol-placement":[`line`,`line-center`]}],expression:{interpolated:!1,parameters:[`zoom`]},"property-type":`data-constant`},"text-transform":{type:`enum`,values:{none:{},uppercase:{},lowercase:{}},default:`none`,requires:[`text-field`],expression:{interpolated:!1,parameters:[`zoom`,`feature`]},"property-type":`data-driven`},"text-offset":{type:`array`,value:`number`,units:`ems`,length:2,default:[0,0],requires:[`text-field`,{"!":`text-radial-offset`}],expression:{interpolated:!0,parameters:[`zoom`,`feature`]},"property-type":`data-driven`},"text-allow-overlap":{type:`boolean`,default:!1,requires:[`text-field`,{"!":`text-overlap`}],expression:{interpolated:!1,parameters:[`zoom`]},"property-type":`data-constant`},"text-overlap":{type:`enum`,values:{never:{},always:{},cooperative:{}},requires:[`text-field`],expression:{interpolated:!1,parameters:[`zoom`]},"property-type":`data-constant`},"text-ignore-placement":{type:`boolean`,default:!1,requires:[`text-field`],expression:{interpolated:!1,parameters:[`zoom`]},"property-type":`data-constant`},"text-optional":{type:`boolean`,default:!1,requires:[`text-field`,`icon-image`],expression:{interpolated:!1,parameters:[`zoom`]},"property-type":`data-constant`},"symbol-height-offset":{type:`number`,default:0,units:`meters`,requires:[{"symbol-placement":[`point`]}],expression:{interpolated:!0,parameters:[`zoom`,`feature`]},"property-type":`data-driven`},"symbol-height-anchor":{type:`enum`,values:{ground:{},absolute:{}},default:`ground`,requires:[`symbol-height-offset`],expression:{interpolated:!1,parameters:[`zoom`]},"property-type":`data-constant`},visibility:{type:`enum`,values:{visible:{},none:{}},default:`visible`,expression:{interpolated:!1,parameters:[`global-state`]},"property-type":`data-constant`}},layout_raster:{visibility:{type:`enum`,values:{visible:{},none:{}},default:`visible`,expression:{interpolated:!1,parameters:[`global-state`]},"property-type":`data-constant`}},layout_hillshade:{visibility:{type:`enum`,values:{visible:{},none:{}},default:`visible`,expression:{interpolated:!1,parameters:[`global-state`]},"property-type":`data-constant`}},"layout_color-relief":{visibility:{type:`enum`,values:{visible:{},none:{}},default:`visible`,expression:{interpolated:!1,parameters:[`global-state`]},"property-type":`data-constant`}},filter:{type:`boolean`,expression:{interpolated:!1,parameters:[`zoom`,`feature`]},"property-type":`data-driven`},filter_operator:{type:`enum`,values:{"==":{},"!=":{},">":{},">=":{},"<":{},"<=":{},in:{},"!in":{},all:{},any:{},none:{},has:{},"!has":{}}},geometry_type:{type:`enum`,values:{Point:{},LineString:{},Polygon:{}}},function:{expression:{type:`expression`},stops:{type:`array`,value:`function_stop`},base:{type:`number`,default:1,minimum:0},property:{type:`string`,default:`$zoom`},type:{type:`enum`,values:{identity:{},exponential:{},interval:{},categorical:{}},default:`exponential`},colorSpace:{type:`enum`,values:{rgb:{},lab:{},hcl:{}},default:`rgb`},default:{type:`*`,required:!1}},function_stop:{type:`array`,minimum:0,maximum:24,value:[`number`,`color`],length:2},expression:{type:`array`,value:`expression_name`,minimum:1},light:{anchor:{type:`enum`,default:`viewport`,values:{map:{},viewport:{}},"property-type":`data-constant`,transition:!1,expression:{interpolated:!1,parameters:[`zoom`]}},position:{type:`array`,default:[1.15,210,30],length:3,value:`number`,"property-type":`data-constant`,transition:!0,expression:{interpolated:!0,parameters:[`zoom`]}},color:{type:`color`,"property-type":`data-constant`,default:`#ffffff`,expression:{interpolated:!0,parameters:[`zoom`]},transition:!0},intensity:{type:`number`,"property-type":`data-constant`,default:.5,minimum:0,maximum:1,expression:{interpolated:!0,parameters:[`zoom`]},transition:!0}},sky:{"sky-color":{type:`color`,"property-type":`data-constant`,default:`#88C6FC`,expression:{interpolated:!0,parameters:[`zoom`]},transition:!0},"horizon-color":{type:`color`,"property-type":`data-constant`,default:`#ffffff`,expression:{interpolated:!0,parameters:[`zoom`]},transition:!0},"fog-color":{type:`color`,"property-type":`data-constant`,default:`#ffffff`,expression:{interpolated:!0,parameters:[`zoom`]},transition:!0},"fog-ground-blend":{type:`number`,"property-type":`data-constant`,default:.5,minimum:0,maximum:1,expression:{interpolated:!0,parameters:[`zoom`]},transition:!0},"horizon-fog-blend":{type:`number`,"property-type":`data-constant`,default:.8,minimum:0,maximum:1,expression:{interpolated:!0,parameters:[`zoom`]},transition:!0},"sky-horizon-blend":{type:`number`,"property-type":`data-constant`,default:.8,minimum:0,maximum:1,expression:{interpolated:!0,parameters:[`zoom`]},transition:!0},"atmosphere-blend":{type:`number`,"property-type":`data-constant`,default:.8,minimum:0,maximum:1,expression:{interpolated:!0,parameters:[`zoom`]},transition:!0}},terrain:{source:{type:`string`,required:!0},exaggeration:{type:`number`,minimum:0,default:1}},projection:{type:{type:`projectionDefinition`,default:`mercator`,"property-type":`data-constant`,transition:!1,expression:{interpolated:!0,parameters:[`zoom`]}}},paint:[`paint_fill`,`paint_line`,`paint_circle`,`paint_heatmap`,`paint_fill-extrusion`,`paint_symbol`,`paint_raster`,`paint_hillshade`,`paint_color-relief`,`paint_background`],paint_fill:{"fill-antialias":{type:`boolean`,default:!0,expression:{interpolated:!1,parameters:[`zoom`]},"property-type":`data-constant`},"fill-opacity":{type:`number`,default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[`zoom`,`feature`,`feature-state`]},"property-type":`data-driven`},"fill-layer-opacity":{type:`number`,default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[`zoom`,`global-state`]},"property-type":`data-constant`},"fill-color":{type:`color`,default:`#000000`,transition:!0,expression:{interpolated:!0,parameters:[`zoom`,`feature`,`feature-state`]},"property-type":`data-driven`},"fill-outline-color":{type:`color`,transition:!0,requires:[{"!":`fill-pattern`},{"fill-antialias":!0}],expression:{interpolated:!0,parameters:[`zoom`,`feature`,`feature-state`]},"property-type":`data-driven`},"fill-translate":{type:`array`,value:`number`,length:2,default:[0,0],transition:!0,units:`pixels`,expression:{interpolated:!0,parameters:[`zoom`]},"property-type":`data-constant`},"fill-translate-anchor":{type:`enum`,values:{map:{},viewport:{}},default:`map`,requires:[`fill-translate`],expression:{interpolated:!1,parameters:[`zoom`]},"property-type":`data-constant`},"fill-pattern":{type:`resolvedImage`,transition:!0,expression:{interpolated:!1,parameters:[`zoom`,`feature`]},"property-type":`cross-faded-data-driven`}},"paint_fill-extrusion":{"fill-extrusion-opacity":{type:`number`,default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[`zoom`]},"property-type":`data-constant`},"fill-extrusion-color":{type:`color`,default:`#000000`,transition:!0,requires:[{"!":`fill-extrusion-pattern`}],expression:{interpolated:!0,parameters:[`zoom`,`feature`,`feature-state`]},"property-type":`data-driven`},"fill-extrusion-translate":{type:`array`,value:`number`,length:2,default:[0,0],transition:!0,units:`pixels`,expression:{interpolated:!0,parameters:[`zoom`]},"property-type":`data-constant`},"fill-extrusion-translate-anchor":{type:`enum`,values:{map:{},viewport:{}},default:`map`,requires:[`fill-extrusion-translate`],expression:{interpolated:!1,parameters:[`zoom`]},"property-type":`data-constant`},"fill-extrusion-pattern":{type:`resolvedImage`,transition:!0,expression:{interpolated:!1,parameters:[`zoom`,`feature`]},"property-type":`cross-faded-data-driven`},"fill-extrusion-height":{type:`number`,default:0,units:`meters`,transition:!0,expression:{interpolated:!0,parameters:[`zoom`,`feature`,`feature-state`]},"property-type":`data-driven`},"fill-extrusion-base":{type:`number`,default:0,units:`meters`,transition:!0,requires:[`fill-extrusion-height`],expression:{interpolated:!0,parameters:[`zoom`,`feature`,`feature-state`]},"property-type":`data-driven`},"fill-extrusion-vertical-gradient":{type:`boolean`,default:!0,transition:!1,expression:{interpolated:!1,parameters:[`zoom`]},"property-type":`data-constant`}},paint_line:{"line-opacity":{type:`number`,default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[`zoom`,`feature`,`feature-state`]},"property-type":`data-driven`},"line-layer-opacity":{type:`number`,default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[`zoom`,`global-state`]},"property-type":`data-constant`},"line-color":{type:`color`,default:`#000000`,transition:!0,requires:[{"!":`line-pattern`}],expression:{interpolated:!0,parameters:[`zoom`,`feature`,`feature-state`]},"property-type":`data-driven`},"line-translate":{type:`array`,value:`number`,length:2,default:[0,0],transition:!0,units:`pixels`,expression:{interpolated:!0,parameters:[`zoom`]},"property-type":`data-constant`},"line-translate-anchor":{type:`enum`,values:{map:{},viewport:{}},default:`map`,requires:[`line-translate`],expression:{interpolated:!1,parameters:[`zoom`]},"property-type":`data-constant`},"line-width":{type:`number`,default:1,minimum:0,transition:!0,units:`pixels`,expression:{interpolated:!0,parameters:[`zoom`,`feature`,`feature-state`]},"property-type":`data-driven`},"line-gap-width":{type:`number`,default:0,minimum:0,transition:!0,units:`pixels`,expression:{interpolated:!0,parameters:[`zoom`,`feature`,`feature-state`]},"property-type":`data-driven`},"line-offset":{type:`number`,default:0,transition:!0,units:`pixels`,expression:{interpolated:!0,parameters:[`zoom`,`feature`,`feature-state`]},"property-type":`data-driven`},"line-blur":{type:`number`,default:0,minimum:0,transition:!0,units:`pixels`,expression:{interpolated:!0,parameters:[`zoom`,`feature`,`feature-state`]},"property-type":`data-driven`},"line-dasharray":{type:`array`,value:`number`,minimum:0,transition:!0,units:`line widths`,requires:[{"!":`line-pattern`}],expression:{interpolated:!1,parameters:[`zoom`,`feature`]},"property-type":`cross-faded-data-driven`},"line-pattern":{type:`resolvedImage`,transition:!0,expression:{interpolated:!1,parameters:[`zoom`,`feature`]},"property-type":`cross-faded-data-driven`},"line-gradient":{type:`color`,transition:!1,requires:[{"!":`line-dasharray`},{"!":`line-pattern`},{source:`geojson`,has:{lineMetrics:!0}}],expression:{interpolated:!0,parameters:[`line-progress`]},"property-type":`color-ramp`}},paint_circle:{"circle-radius":{type:`number`,default:5,minimum:0,transition:!0,units:`pixels`,expression:{interpolated:!0,parameters:[`zoom`,`feature`,`feature-state`]},"property-type":`data-driven`},"circle-color":{type:`color`,default:`#000000`,transition:!0,expression:{interpolated:!0,parameters:[`zoom`,`feature`,`feature-state`]},"property-type":`data-driven`},"circle-blur":{type:`number`,default:0,transition:!0,expression:{interpolated:!0,parameters:[`zoom`,`feature`,`feature-state`]},"property-type":`data-driven`},"circle-opacity":{type:`number`,default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[`zoom`,`feature`,`feature-state`]},"property-type":`data-driven`},"circle-translate":{type:`array`,value:`number`,length:2,default:[0,0],transition:!0,units:`pixels`,expression:{interpolated:!0,parameters:[`zoom`]},"property-type":`data-constant`},"circle-translate-anchor":{type:`enum`,values:{map:{},viewport:{}},default:`map`,requires:[`circle-translate`],expression:{interpolated:!1,parameters:[`zoom`]},"property-type":`data-constant`},"circle-pitch-scale":{type:`enum`,values:{map:{},viewport:{}},default:`map`,expression:{interpolated:!1,parameters:[`zoom`]},"property-type":`data-constant`},"circle-pitch-alignment":{type:`enum`,values:{map:{},viewport:{}},default:`viewport`,expression:{interpolated:!1,parameters:[`zoom`]},"property-type":`data-constant`},"circle-stroke-width":{type:`number`,default:0,minimum:0,transition:!0,units:`pixels`,expression:{interpolated:!0,parameters:[`zoom`,`feature`,`feature-state`]},"property-type":`data-driven`},"circle-stroke-color":{type:`color`,default:`#000000`,transition:!0,expression:{interpolated:!0,parameters:[`zoom`,`feature`,`feature-state`]},"property-type":`data-driven`},"circle-stroke-opacity":{type:`number`,default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[`zoom`,`feature`,`feature-state`]},"property-type":`data-driven`}},paint_heatmap:{"heatmap-radius":{type:`number`,default:30,minimum:1,transition:!0,units:`pixels`,expression:{interpolated:!0,parameters:[`zoom`,`feature`,`feature-state`]},"property-type":`data-driven`},"heatmap-weight":{type:`number`,default:1,minimum:0,transition:!1,expression:{interpolated:!0,parameters:[`zoom`,`feature`,`feature-state`]},"property-type":`data-driven`},"heatmap-intensity":{type:`number`,default:1,minimum:0,transition:!0,expression:{interpolated:!0,parameters:[`zoom`]},"property-type":`data-constant`},"heatmap-color":{type:`color`,default:[`interpolate`,[`linear`],[`heatmap-density`],0,`rgba(0, 0, 255, 0)`,.1,`royalblue`,.3,`cyan`,.5,`lime`,.7,`yellow`,1,`red`],transition:!1,expression:{interpolated:!0,parameters:[`heatmap-density`]},"property-type":`color-ramp`},"heatmap-opacity":{type:`number`,default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[`zoom`]},"property-type":`data-constant`}},paint_symbol:{"icon-opacity":{type:`number`,default:1,minimum:0,maximum:1,transition:!0,requires:[`icon-image`],expression:{interpolated:!0,parameters:[`zoom`,`feature`,`feature-state`]},"property-type":`data-driven`},"icon-color":{type:`color`,default:`#000000`,transition:!0,requires:[`icon-image`],expression:{interpolated:!0,parameters:[`zoom`,`feature`,`feature-state`]},"property-type":`data-driven`},"icon-halo-color":{type:`color`,default:`rgba(0, 0, 0, 0)`,transition:!0,requires:[`icon-image`],expression:{interpolated:!0,parameters:[`zoom`,`feature`,`feature-state`]},"property-type":`data-driven`},"icon-halo-width":{type:`number`,default:0,minimum:0,transition:!0,units:`pixels`,requires:[`icon-image`],expression:{interpolated:!0,parameters:[`zoom`,`feature`,`feature-state`]},"property-type":`data-driven`},"icon-halo-blur":{type:`number`,default:0,minimum:0,transition:!0,units:`pixels`,requires:[`icon-image`],expression:{interpolated:!0,parameters:[`zoom`,`feature`,`feature-state`]},"property-type":`data-driven`},"icon-translate":{type:`array`,value:`number`,length:2,default:[0,0],transition:!0,units:`pixels`,requires:[`icon-image`],expression:{interpolated:!0,parameters:[`zoom`]},"property-type":`data-constant`},"icon-translate-anchor":{type:`enum`,values:{map:{},viewport:{}},default:`map`,requires:[`icon-image`,`icon-translate`],expression:{interpolated:!1,parameters:[`zoom`]},"property-type":`data-constant`},"text-opacity":{type:`number`,default:1,minimum:0,maximum:1,transition:!0,requires:[`text-field`],expression:{interpolated:!0,parameters:[`zoom`,`feature`,`feature-state`]},"property-type":`data-driven`},"text-color":{type:`color`,default:`#000000`,transition:!0,overridable:!0,requires:[`text-field`],expression:{interpolated:!0,parameters:[`zoom`,`feature`,`feature-state`]},"property-type":`data-driven`},"text-halo-color":{type:`color`,default:`rgba(0, 0, 0, 0)`,transition:!0,requires:[`text-field`],expression:{interpolated:!0,parameters:[`zoom`,`feature`,`feature-state`]},"property-type":`data-driven`},"text-halo-width":{type:`number`,default:0,minimum:0,transition:!0,units:`pixels`,requires:[`text-field`],expression:{interpolated:!0,parameters:[`zoom`,`feature`,`feature-state`]},"property-type":`data-driven`},"text-halo-blur":{type:`number`,default:0,minimum:0,transition:!0,units:`pixels`,requires:[`text-field`],expression:{interpolated:!0,parameters:[`zoom`,`feature`,`feature-state`]},"property-type":`data-driven`},"text-translate":{type:`array`,value:`number`,length:2,default:[0,0],transition:!0,units:`pixels`,requires:[`text-field`],expression:{interpolated:!0,parameters:[`zoom`]},"property-type":`data-constant`},"text-translate-anchor":{type:`enum`,values:{map:{},viewport:{}},default:`map`,requires:[`text-field`,`text-translate`],expression:{interpolated:!1,parameters:[`zoom`]},"property-type":`data-constant`}},paint_raster:{"raster-opacity":{type:`number`,default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[`zoom`]},"property-type":`data-constant`},"raster-hue-rotate":{type:`number`,default:0,period:360,transition:!0,units:`degrees`,expression:{interpolated:!0,parameters:[`zoom`]},"property-type":`data-constant`},"raster-brightness-min":{type:`number`,default:0,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[`zoom`]},"property-type":`data-constant`},"raster-brightness-max":{type:`number`,default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[`zoom`]},"property-type":`data-constant`},"raster-saturation":{type:`number`,default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[`zoom`]},"property-type":`data-constant`},"raster-contrast":{type:`number`,default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[`zoom`]},"property-type":`data-constant`},resampling:{type:`enum`,values:{linear:{},nearest:{}},default:`linear`,expression:{interpolated:!1,parameters:[`zoom`]},"property-type":`data-constant`},"raster-resampling":{type:`enum`,values:{linear:{},nearest:{}},default:`linear`,expression:{interpolated:!1,parameters:[`zoom`]},"property-type":`data-constant`},"raster-fade-duration":{type:`number`,default:300,minimum:0,transition:!1,units:`milliseconds`,expression:{interpolated:!0,parameters:[`zoom`]},"property-type":`data-constant`}},paint_hillshade:{"hillshade-illumination-direction":{type:`numberArray`,default:335,minimum:0,maximum:359,transition:!1,expression:{interpolated:!0,parameters:[`zoom`]},"property-type":`data-constant`},"hillshade-illumination-altitude":{type:`numberArray`,default:45,minimum:0,maximum:90,transition:!1,expression:{interpolated:!0,parameters:[`zoom`]},"property-type":`data-constant`},"hillshade-illumination-anchor":{type:`enum`,values:{map:{},viewport:{}},default:`viewport`,expression:{interpolated:!1,parameters:[`zoom`]},"property-type":`data-constant`},"hillshade-exaggeration":{type:`number`,default:.5,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[`zoom`]},"property-type":`data-constant`},"hillshade-shadow-color":{type:`colorArray`,default:`#000000`,transition:!0,expression:{interpolated:!0,parameters:[`zoom`]},"property-type":`data-constant`},"hillshade-highlight-color":{type:`colorArray`,default:`#FFFFFF`,transition:!0,expression:{interpolated:!0,parameters:[`zoom`]},"property-type":`data-constant`},"hillshade-accent-color":{type:`color`,default:`#000000`,transition:!0,expression:{interpolated:!0,parameters:[`zoom`]},"property-type":`data-constant`},"hillshade-method":{type:`enum`,values:{standard:{},basic:{},combined:{},igor:{},multidirectional:{}},default:`standard`,expression:{interpolated:!1,parameters:[`zoom`]},"property-type":`data-constant`},resampling:{type:`enum`,values:{linear:{},nearest:{}},default:`linear`,expression:{interpolated:!1,parameters:[`zoom`]},"property-type":`data-constant`}},"paint_color-relief":{"color-relief-opacity":{type:`number`,default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[`zoom`]},"property-type":`data-constant`},"color-relief-color":{type:`color`,transition:!1,expression:{interpolated:!0,parameters:[`elevation`]},"property-type":`color-ramp`},resampling:{type:`enum`,values:{linear:{},nearest:{}},default:`linear`,expression:{interpolated:!1,parameters:[`zoom`]},"property-type":`data-constant`}},paint_background:{"background-color":{type:`color`,default:`#000000`,transition:!0,requires:[{"!":`background-pattern`}],expression:{interpolated:!0,parameters:[`zoom`]},"property-type":`data-constant`},"background-pattern":{type:`resolvedImage`,transition:!0,expression:{interpolated:!1,parameters:[`zoom`]},"property-type":`cross-faded`},"background-opacity":{type:`number`,default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[`zoom`]},"property-type":`data-constant`}},transition:{duration:{type:`number`,default:300,minimum:0,units:`milliseconds`},delay:{type:`number`,default:0,minimum:0,units:`milliseconds`}},"property-type":{"data-driven":{type:`property-type`},"cross-faded":{type:`property-type`},"cross-faded-data-driven":{type:`property-type`},"color-ramp":{type:`property-type`},"data-constant":{type:`property-type`},constant:{type:`property-type`}},promoteId:{"*":{type:`string`}},interpolation:{type:`array`,value:`interpolation_name`,minimum:1},interpolation_name:{type:`enum`,values:{linear:{syntax:{overloads:[{parameters:[],"output-type":`interpolation`}],parameters:[]}},exponential:{syntax:{overloads:[{parameters:[`base`],"output-type":`interpolation`}],parameters:[{name:`base`,type:`number literal`}]}},"cubic-bezier":{syntax:{overloads:[{parameters:[`x1`,`y1`,`x2`,`y2`],"output-type":`interpolation`}],parameters:[{name:`x1`,type:`number literal`},{name:`y1`,type:`number literal`},{name:`x2`,type:`number literal`},{name:`y2`,type:`number literal`}]}}}}},H=br,xr=[`type`,`source`,`source-layer`,`minzoom`,`maxzoom`,`filter`,`layout`];function Sr(e,t){let n={};for(let t in e)t!==`ref`&&(n[t]=e[t]);return xr.forEach(e=>{e in t&&(n[e]=t[e])}),n}function Cr(e){e=e.slice();let t=Object.create(null);for(let n=0;n{`source`in e&&i[e.source]?n.push({command:`removeLayer`,args:[e.id]}):o.push(e)}),n=n.concat(a),Fr(o,t.layers,n),r&&t.terrain&&n.push({command:`setTerrain`,args:[t.terrain]})}catch(e){console.warn(`Unable to compute style diff:`,e),n=[{command:`setStyle`,args:[t]}]}return n}var U=class{constructor(e,t,n,r,i=`error`){this.message=(e?`${e}: `:``)+n,r&&(this.identifier=r),this.severity=i,t!=null&&t.__line__&&(this.line=t.__line__)}},Lr={kind:`null`},W={kind:`number`},Rr={kind:`string`},zr={kind:`boolean`},Br={kind:`color`},Vr={kind:`projectionDefinition`},Hr={kind:`object`},Ur={kind:`value`},Wr={kind:`error`},Gr={kind:`collator`},Kr={kind:`formatted`},qr={kind:`padding`},Jr={kind:`colorArray`},Yr={kind:`numberArray`},Xr={kind:`resolvedImage`},Zr={kind:`variableAnchorOffsetCollection`};function Qr(e,t){return{kind:`array`,itemType:e,N:t}}function $r(e){if(e.kind===`array`){let t=$r(e.itemType);return typeof e.N==`number`?`array<${t}, ${e.N}>`:e.itemType.kind===`value`?`array`:`array<${t}>`}return e.kind}var ei=[Lr,W,Rr,zr,Br,Vr,Kr,Hr,Qr(Ur),qr,Yr,Jr,Xr,Zr];function ti(e,t){if(t.kind===`error`)return null;if(e.kind===`array`){if(t.kind===`array`&&(t.N===0&&t.itemType.kind===`value`||!ti(e.itemType,t.itemType))&&(typeof e.N!=`number`||e.N===t.N))return null}else if(e.kind===t.kind)return null;else if(e.kind===`value`){for(let e of ei)if(!ti(e,t))return null}return`Expected ${$r(e)} but found ${$r(t)} instead.`}function ni(e,t){return t.some(t=>t.kind===e.kind)}function ri(e,t){return t.some(t=>t===`null`?e===null:t===`array`?Array.isArray(e):t===`object`?e&&!Array.isArray(e)&&typeof e==`object`:t===typeof e)}function ii(e,t){return e.kind===`array`&&t.kind===`array`?e.itemType.kind===t.itemType.kind&&typeof e.N==`number`:e.kind===t.kind}var ai=.96422,oi=.82521,si=4/29,ci=6/29,li=3*ci*ci,ui=Math.PI/180,di=180/Math.PI;function fi(e){return e%=360,e<0&&(e+=360),e}function pi([e,t,n,r]){e=mi(e),t=mi(t),n=mi(n);let i,a,o=hi((.2225045*e+.7168786*t+.0606169*n)/1);e===t&&t===n?i=a=o:(i=hi((.4360747*e+.3850649*t+.1430804*n)/ai),a=hi((.0139322*e+.0971045*t+.7141733*n)/oi));let s=116*o-16;return[s<0?0:s,500*(i-o),200*(o-a),r]}function mi(e){return e<=.04045?e/12.92:((e+.055)/1.055)**2.4}function hi(e){return e>.008856451679035631?e**(1/3):e/li+si}function gi([e,t,n,r]){let i=(e+16)/116,a=isNaN(t)?i:i+t/500,o=isNaN(n)?i:i-n/200;return i=1*vi(i),a=ai*vi(a),o=oi*vi(o),[_i(3.1338561*a-1.6168667*i-.4906146*o),_i(-.9787684*a+1.9161415*i+.033454*o),_i(.0719453*a-.2289914*i+1.4052427*o),r]}function _i(e){return e=e<=.00304?12.92*e:1.055*e**(1/2.4)-.055,e<0?0:e>1?1:e}function vi(e){return e>ci?e*e*e:li*(e-si)}function yi(e){let[t,n,r,i]=pi(e),a=Math.sqrt(n*n+r*r);return[Math.round(a*1e4)?fi(Math.atan2(r,n)*di):NaN,a,t,i]}function bi([e,t,n,r]){return e=isNaN(e)?0:e*ui,gi([n,Math.cos(e)*t,Math.sin(e)*t,r])}function xi([e,t,n,r]){e=fi(e),t/=100,n/=100;function i(r){let i=(r+e/30)%12,a=t*Math.min(n,1-n);return n-a*Math.max(-1,Math.min(i-3,9-i,1))}return[i(0),i(8),i(4),r]}var Si=Object.hasOwn||function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};function Ci(e,t){return Si(e,t)?e[t]:void 0}function wi(e){if(e=e.toLowerCase().trim(),e===`transparent`)return[0,0,0,0];let t=Ci(ki,e);if(t){let[e,n,r]=t;return[e/255,n/255,r/255,1]}if(e.startsWith(`#`)&&/^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/.test(e)){let t=e.length<6?1:2,n=1;return[Ti(e.slice(n,n+=t)),Ti(e.slice(n,n+=t)),Ti(e.slice(n,n+=t)),Ti(e.slice(n,n+t)||`ff`)]}if(e.startsWith(`rgb`)){let t=e.match(/^rgba?\(\s*([\de.+-]+)(%)?(?:\s+|\s*(,)\s*)([\de.+-]+)(%)?(?:\s+|\s*(,)\s*)([\de.+-]+)(%)?(?:\s*([,\/])\s*([\de.+-]+)(%)?)?\s*\)$/);if(t){let[e,n,r,i,a,o,s,c,l,u,d,f]=t,p=[i||` `,s||` `,u].join(``);if(p===` `||p===` /`||p===`,,`||p===`,,,`){let e=[r,o,l].join(``),t=e===`%%%`?100:e===``?255:0;if(t){let e=[Di(+n/t,0,1),Di(+a/t,0,1),Di(+c/t,0,1),d?Ei(+d,f):1];if(Oi(e))return e}}return}}let n=e.match(/^hsla?\(\s*([\de.+-]+)(?:deg)?(?:\s+|\s*(,)\s*)([\de.+-]+)%(?:\s+|\s*(,)\s*)([\de.+-]+)%(?:\s*([,\/])\s*([\de.+-]+)(%)?)?\s*\)$/);if(n){let[e,t,r,i,a,o,s,c,l]=n,u=[r||` `,a||` `,s].join(``);if(u===` `||u===` /`||u===`,,`||u===`,,,`){let e=[+t,Di(+i,0,100),Di(+o,0,100),c?Ei(+c,l):1];if(Oi(e))return xi(e)}}}function Ti(e){return parseInt(e.padEnd(2,e),16)/255}function Ei(e,t){return Di(t?e/100:e,0,1)}function Di(e,t,n){return Math.min(Math.max(t,e),n)}function Oi(e){return!e.some(Number.isNaN)}var ki={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]};function Ai(e,t,n){return e+n*(t-e)}function ji(e,t,n){return e.map((e,r)=>Ai(e,t[r],n))}function Mi(e){return e===`rgb`||e===`hcl`||e===`lab`}var Ni=class e{constructor(e,t,n,r=1,i=!0){this.r=e,this.g=t,this.b=n,this.a=r,i||(this.r*=r,this.g*=r,this.b*=r,r||this.overwriteGetter(`rgb`,[e,t,n,r]))}static{this.black=new e(0,0,0,1)}static{this.white=new e(1,1,1,1)}static{this.transparent=new e(0,0,0,0)}static{this.red=new e(1,0,0,1)}static parse(t){if(t instanceof e)return t;if(typeof t!=`string`)return;let n=wi(t);if(n)return new e(...n,!1)}get rgb(){let{r:e,g:t,b:n,a:r}=this,i=r||1/0;return this.overwriteGetter(`rgb`,[e/i,t/i,n/i,r])}get hcl(){return this.overwriteGetter(`hcl`,yi(this.rgb))}get lab(){return this.overwriteGetter(`lab`,pi(this.rgb))}overwriteGetter(e,t){return Object.defineProperty(this,e,{value:t}),t}toString(){let[e,t,n,r]=this.rgb;return`rgba(${[e,t,n].map(e=>Math.round(e*255)).join(`,`)},${r})`}static interpolate(t,n,r,i=`rgb`){switch(i){case`rgb`:{let[i,a,o,s]=ji(t.rgb,n.rgb,r);return new e(i,a,o,s,!1)}case`hcl`:{let[i,a,o,s]=t.hcl,[c,l,u,d]=n.hcl,f,p;if(!isNaN(i)&&!isNaN(c)){let e=c-i;c>i&&e>180?e-=360:c180&&(e+=360),f=i+r*e}else isNaN(i)?isNaN(c)?f=NaN:(f=c,(o===1||o===0)&&(p=l)):(f=i,(u===1||u===0)&&(p=a));let[m,h,g,_]=bi([f,p??Ai(a,l,r),Ai(o,u,r),Ai(s,d,r)]);return new e(m,h,g,_,!1)}case`lab`:{let[i,a,o,s]=gi(ji(t.lab,n.lab,r));return new e(i,a,o,s,!1)}}}},Pi=[`bottom`,`center`,`top`],Fi=class{constructor(e,t,n,r,i,a){this.text=e,this.image=t,this.scale=n,this.fontStack=r,this.textColor=i,this.verticalAlign=a}},Ii=class e{constructor(e){this.sections=e}static fromString(t){return new e([new Fi(t,null,null,null,null,null)])}isEmpty(){return this.sections.length===0||!this.sections.some(e=>e.text.length!==0||e.image&&e.image.name.length!==0)}static factory(t){return t instanceof e?t:e.fromString(t)}toString(){return this.sections.length===0?``:this.sections.map(e=>e.text).join(``)}},Li=class e{constructor(e){this.values=e.slice()}static parse(t){if(t instanceof e)return t;if(typeof t==`number`)return new e([t,t,t,t]);if(Array.isArray(t)&&!(t.length<1||t.length>4)){for(let e of t)if(typeof e!=`number`)return;switch(t.length){case 1:t=[t[0],t[0],t[0],t[0]];break;case 2:t=[t[0],t[1],t[0],t[1]];break;case 3:t=[t[0],t[1],t[2],t[1]]}return new e(t)}}toString(){return JSON.stringify(this.values)}static interpolate(t,n,r){return new e(ji(t.values,n.values,r))}},Ri=class e{constructor(e){this.values=e.slice()}static parse(t){if(t instanceof e)return t;if(typeof t==`number`)return new e([t]);if(Array.isArray(t)){for(let e of t)if(typeof e!=`number`)return;return new e(t)}}toString(){return JSON.stringify(this.values)}static interpolate(t,n,r){return new e(ji(t.values,n.values,r))}},zi=class e{constructor(e){this.values=e.slice()}static parse(t){if(t instanceof e)return t;if(typeof t==`string`){let n=Ni.parse(t);return n?new e([n]):void 0}if(!Array.isArray(t))return;let n=[];for(let e of t){if(typeof e!=`string`)return;let t=Ni.parse(e);if(!t)return;n.push(t)}return new e(n)}toString(){return JSON.stringify(this.values)}static interpolate(t,n,r,i=`rgb`){let a=[];if(t.values.length!=n.values.length)throw Error(`colorArray: Arrays have mismatched length (${t.values.length} vs. ${n.values.length}), cannot interpolate.`);for(let e=0;e=0&&e<=255&&typeof t==`number`&&t>=0&&t<=255&&typeof n==`number`&&n>=0&&n<=255?r===void 0||typeof r==`number`&&r>=0&&r<=1?null:`Invalid rgba value [${[e,t,n,r].join(`, `)}]: 'a' must be between 0 and 1.`:`Invalid rgba value [${(typeof r==`number`?[e,t,n,r]:[e,t,n]).join(`, `)}]: 'r', 'g', and 'b' must be between 0 and 255.`}function qi(e){if(e===null||typeof e==`string`||typeof e==`boolean`||typeof e==`number`||e instanceof Wi||e instanceof Ni||e instanceof Gi||e instanceof Ii||e instanceof Li||e instanceof Ri||e instanceof zi||e instanceof Hi||e instanceof Ui)return!0;if(Array.isArray(e)){for(let t of e)if(!qi(t))return!1;return!0}if(typeof e==`object`){for(let t in e)if(!qi(e[t]))return!1;return!0}return!1}function Ji(e){if(e===null)return Lr;if(typeof e==`string`)return Rr;if(typeof e==`boolean`)return zr;if(typeof e==`number`)return W;if(e instanceof Ni)return Br;if(e instanceof Wi)return Vr;if(e instanceof Gi)return Gr;if(e instanceof Ii)return Kr;if(e instanceof Li)return qr;if(e instanceof Ri)return Yr;if(e instanceof zi)return Jr;if(e instanceof Hi)return Zr;if(e instanceof Ui)return Xr;if(Array.isArray(e)){let t=e.length,n;for(let t of e){let e=Ji(t);if(!n)n=e;else if(n===e)continue;else{n=Ur;break}}return Qr(n||Ur,t)}return Hr}function Yi(e){let t=typeof e;return e===null?``:t===`string`||t===`number`||t===`boolean`?String(e):e instanceof Ni||e instanceof Wi||e instanceof Ii||e instanceof Li||e instanceof Ri||e instanceof zi||e instanceof Hi||e instanceof Ui?e.toString():JSON.stringify(e)}var Xi=class e{constructor(e,t){this.type=e,this.value=t}static parse(t,n){if(t.length!==2)return n.error(`'literal' expression requires exactly one argument, but found ${t.length-1} instead.`);if(!qi(t[1]))return n.error(`invalid value of type "${typeof t[1]}"`);let r=t[1],i=Ji(r),a=n.expectedType;return i.kind===`array`&&i.N===0&&a&&a.kind===`array`&&(typeof a.N!=`number`||a.N===0)&&(i=a),new e(i,r)}evaluate(){return this.value}eachChild(){}outputDefined(){return!0}},Zi=[`Unknown`,`Point`,`LineString`,`Polygon`],Qi=class{constructor(){this.globals=null,this.feature=null,this.featureState=null,this.formattedSection=null,this._parseColorCache=new Map,this.availableImages=null,this.canonical=null}id(){return this.feature&&`id`in this.feature?this.feature.id:null}geometryType(){return this.feature?typeof this.feature.type==`number`?Zi[this.feature.type]:this.feature.type:null}geometry(){return this.feature&&`geometry`in this.feature?this.feature.geometry:null}canonicalID(){return this.canonical}properties(){return this.feature&&this.feature.properties||{}}parseColor(e){let t=this._parseColorCache.get(e);return t||(t=Ni.parse(e),this._parseColorCache.set(e,t)),t}};function $i(e,t,n){let r=e.length-1,i=0,a=r,o=0,s,c;for(;i<=a;)if(o=Math.floor((i+a)/2),s=e[o],c=e[o+1],s<=t){if(o===r||tt)a=o-1;else throw new Bi(`Input is not a number.`,n);return 0}var ea=class e{constructor(e,t,n,r){this.type=e,this.input=t,this.key=r,this.labels=[],this.outputs=[];for(let[e,t]of n)this.labels.push(e),this.outputs.push(t)}static parse(t,n){if(t.length-1<4)return n.error(`Expected at least 4 arguments, but found only ${t.length-1}.`);if((t.length-1)%2!=0)return n.error(`Expected an even number of arguments.`);let r=n.parse(t[1],1,W);if(!r)return null;let i=[],a=null;n.expectedType&&n.expectedType.kind!==`value`&&(a=n.expectedType);for(let e=1;e=r)return n.error(`Input/output pairs for "step" expressions must be arranged with input values in strictly ascending order.`,s);let l=n.parse(o,c,a);if(!l)return null;a||=l.type,i.push([r,l])}return new e(a,r,i,n.key)}evaluate(e){let t=this.labels,n=this.outputs;if(t.length===1)return n[0].evaluate(e);let r=this.input.evaluate(e);if(r<=t[0])return n[0].evaluate(e);let i=t.length;return r>=t[i-1]?n[i-1].evaluate(e):n[$i(t,r,this.key)].evaluate(e)}eachChild(e){e(this.input);for(let t of this.outputs)e(t)}outputDefined(){return this.outputs.every(e=>e.outputDefined())}};function ta(e,t,n,r){let i=3*e,a=3*(n-e)-i,o=1-i-a,s=3*t,c=3*(r-t)-s,l=1-s-c;return function(e,t=1e-6){if(e<=0)return 0;if(e>=1)return 1;let n=e;for(let r=0;r<8;r++){let r=((o*n+a)*n+i)*n-e;if(Math.abs(r)s?r=n:u=n,n=(r+u)*.5}return((l*n+c)*n+s)*n}}var na=class e{constructor(e,t,n,r,i,a){this.type=e,this.operator=t,this.interpolation=n,this.input=r,this.key=a,this.labels=[],this.outputs=[];for(let[e,t]of i)this.labels.push(e),this.outputs.push(t)}static interpolationFactor(e,t,n,r){let i=0;if(e.name===`exponential`)i=ra(t,e.base,n,r);else if(e.name===`linear`)i=ra(t,1,n,r);else if(e.name===`cubic-bezier`){let a=e.controlPoints;i=ta(a[0],a[1],a[2],a[3])(ra(t,1,n,r))}return i}static parse(t,n){let[r,i,a,...o]=t;if(!Array.isArray(i)||i.length===0)return n.error(`Expected an interpolation type expression.`,1);if(i[0]===`linear`)i={name:`linear`};else if(i[0]===`exponential`){let e=i[1];if(typeof e!=`number`)return n.error(`Exponential interpolation requires a numeric base.`,1,1);i={name:`exponential`,base:e}}else if(i[0]===`cubic-bezier`){let e=i.slice(1);if(e.length!==4||e.some(e=>typeof e!=`number`||e<0||e>1))return n.error(`Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.`,1);i={name:`cubic-bezier`,controlPoints:e}}else return n.error(`Unknown interpolation type ${String(i[0])}`,1,0);if(t.length-1<4)return n.error(`Expected at least 4 arguments, but found only ${t.length-1}.`);if((t.length-1)%2!=0)return n.error(`Expected an even number of arguments.`);if(a=n.parse(a,2,W),!a)return null;let s=[],c=null;(r===`interpolate-hcl`||r===`interpolate-lab`)&&n.expectedType!=Jr?c=Br:n.expectedType&&n.expectedType.kind!==`value`&&(c=n.expectedType);for(let e=0;e=t)return n.error(`Input/output pairs for "interpolate" expressions must be arranged with input values in strictly ascending order.`,i);let l=n.parse(r,a,c);if(!l)return null;c||=l.type,s.push([t,l])}return!ii(c,W)&&!ii(c,Vr)&&!ii(c,Br)&&!ii(c,qr)&&!ii(c,Yr)&&!ii(c,Jr)&&!ii(c,Zr)&&!ii(c,Qr(W))?n.error(`Type ${$r(c)} is not interpolatable.`):new e(c,r,i,a,s,n.key)}evaluate(t){let n=this.labels,r=this.outputs;if(n.length===1)return r[0].evaluate(t);let i=this.input.evaluate(t);if(i<=n[0])return r[0].evaluate(t);let a=n.length;if(i>=n[a-1])return r[a-1].evaluate(t);let o=$i(n,i,this.key),s=n[o],c=n[o+1],l=e.interpolationFactor(this.interpolation,i,s,c),u=r[o].evaluate(t),d=r[o+1].evaluate(t);switch(this.operator){case`interpolate`:switch(this.type.kind){case`number`:return Ai(u,d,l);case`color`:return Ni.interpolate(u,d,l);case`padding`:return Li.interpolate(u,d,l);case`colorArray`:return zi.interpolate(u,d,l);case`numberArray`:return Ri.interpolate(u,d,l);case`variableAnchorOffsetCollection`:return Hi.interpolate(u,d,l,this.key);case`array`:return ji(u,d,l);case`projectionDefinition`:return Wi.interpolate(u,d,l)}case`interpolate-hcl`:switch(this.type.kind){case`color`:return Ni.interpolate(u,d,l,`hcl`);case`colorArray`:return zi.interpolate(u,d,l,`hcl`)}case`interpolate-lab`:switch(this.type.kind){case`color`:return Ni.interpolate(u,d,l,`lab`);case`colorArray`:return zi.interpolate(u,d,l,`lab`)}}}eachChild(e){e(this.input);for(let t of this.outputs)e(t)}outputDefined(){return this.outputs.every(e=>e.outputDefined())}};function ra(e,t,n,r){let i=r-n,a=e-n;return i===0?0:t===1?a/i:(t**+a-1)/(t**+i-1)}var ia={color:Ni.interpolate,number:Ai,padding:Li.interpolate,numberArray:Ri.interpolate,colorArray:zi.interpolate,variableAnchorOffsetCollection:Hi.interpolate,array:ji},aa=class e{constructor(e){this.type=Kr,this.sections=e}static parse(t,n){if(t.length<2)return n.error(`Expected at least one argument.`);let r=t[1];if(!Array.isArray(r)&&typeof r==`object`)return n.error(`First argument must be an image or text section.`);let i=[],a=!1;for(let e=1;e<=t.length-1;++e){let r=t[e];if(a&&typeof r==`object`&&!Array.isArray(r)){a=!1;let e=null;if(r[`font-scale`]&&(e=n.parse(r[`font-scale`],1,W),!e))return null;let t=null;if(r[`text-font`]&&(t=n.parse(r[`text-font`],1,Qr(Rr)),!t))return null;let o=null;if(r[`text-color`]&&(o=n.parse(r[`text-color`],1,Br),!o))return null;let s=null;if(r[`vertical-align`]){if(typeof r[`vertical-align`]==`string`&&!Pi.includes(r[`vertical-align`]))return n.error(`'vertical-align' must be one of: 'bottom', 'center', 'top' but found '${r[`vertical-align`]}' instead.`);if(s=n.parse(r[`vertical-align`],1,Rr),!s)return null}let c=i[i.length-1];c.scale=e,c.font=t,c.textColor=o,c.verticalAlign=s}else{let r=n.parse(t[e],1,Ur);if(!r)return null;let o=r.type.kind;if(o!==`string`&&o!==`value`&&o!==`null`&&o!==`resolvedImage`)return n.error(`Formatted text type must be 'string', 'value', 'image' or 'null'.`);a=!0,i.push({content:r,scale:null,font:null,textColor:null,verticalAlign:null})}}return new e(i)}evaluate(e){return new Ii(this.sections.map(t=>{let n=t.content.evaluate(e);return Ji(n)===Xr?new Fi(``,n,null,null,null,t.verticalAlign?t.verticalAlign.evaluate(e):null):new Fi(Yi(n),null,t.scale?t.scale.evaluate(e):null,t.font?t.font.evaluate(e).join(`,`):null,t.textColor?t.textColor.evaluate(e):null,t.verticalAlign?t.verticalAlign.evaluate(e):null)}))}eachChild(e){for(let t of this.sections)e(t.content),t.scale&&e(t.scale),t.font&&e(t.font),t.textColor&&e(t.textColor),t.verticalAlign&&e(t.verticalAlign)}outputDefined(){return!1}};function oa(e,t,n=0,r=e.length-1,i=ca){for(;r>n;){if(r-n>600){let a=r-n+1,o=t-n+1,s=Math.log(a),c=.5*Math.exp(2*s/3),l=.5*Math.sqrt(s*c*(a-c)/a)*(o-a/2<0?-1:1);oa(e,t,Math.max(n,Math.floor(t-o*c/a+l)),Math.min(r,Math.floor(t+(a-o)*c/a+l)),i)}let a=e[t],o=n,s=r;for(sa(e,n,t),i(e[r],a)>0&&sa(e,n,r);o0;)s--}i(e[n],a)===0?sa(e,n,s):(s++,sa(e,s,r)),s<=t&&(n=s+1),t<=s&&(r=s-1)}}function sa(e,t,n){let r=e[t];e[t]=e[n],e[n]=r}function ca(e,t){return et)}function la(e,t){if(e.length<=1)return[e];let n=[],r,i;for(let t of e){let e=da(t);e!==0&&(t.area=Math.abs(e),i===void 0&&(i=e<0),i===e<0?(r&&n.push(r),r=[t]):r.push(t))}if(r&&n.push(r),t>1)for(let e=0;e2){let i=t[1];if(typeof i!=`string`||!(i in fa)||i===`object`)return n.error(`The item type argument of "array" must be one of string, number, boolean`,1);e=fa[i],r++}else e=Ur;let a;if(t.length>3){if(t[2]!==null&&(typeof t[2]!=`number`||t[2]<0||t[2]!==Math.floor(t[2])))return n.error(`The length argument to "array" must be a positive integer literal`,2);a=t[2],r++}i=Qr(e,a)}else{if(!fa[a])throw Error(`Types doesn't contain name = ${a}`);i=fa[a]}let o=[];for(;re.outputDefined())}},ma={"to-boolean":zr,"to-color":Br,"to-number":W,"to-string":Rr},ha=class e{constructor(e,t,n){this.type=e,this.args=t,this.key=n}static parse(t,n){if(t.length<2)return n.error(`Expected at least one argument.`);let r=t[0];if(!ma[r])throw Error(`Can't parse ${r} as it is not part of the known types`);if((r===`to-boolean`||r===`to-string`)&&t.length!==2)return n.error(`Expected one argument.`);let i=ma[r],a=[];for(let e=1;e4?`Invalid rgba value ${JSON.stringify(t)}: expected an array containing either three or four numeric values.`:Ki(t[0],t[1],t[2],t[3]),!n))return new Ni(t[0]/255,t[1]/255,t[2]/255,t[3])}throw new Bi(n||`Could not parse color from value '${typeof t==`string`?t:JSON.stringify(t)}'`,this.key)}case`padding`:{let t;for(let n of this.args){t=n.evaluate(e);let r=Li.parse(t);if(r)return r}throw new Bi(`Could not parse padding from value '${typeof t==`string`?t:JSON.stringify(t)}'`,this.key)}case`numberArray`:{let t;for(let n of this.args){t=n.evaluate(e);let r=Ri.parse(t);if(r)return r}throw new Bi(`Could not parse numberArray from value '${typeof t==`string`?t:JSON.stringify(t)}'`,this.key)}case`colorArray`:{let t;for(let n of this.args){t=n.evaluate(e);let r=zi.parse(t);if(r)return r}throw new Bi(`Could not parse colorArray from value '${typeof t==`string`?t:JSON.stringify(t)}'`,this.key)}case`variableAnchorOffsetCollection`:{let t;for(let n of this.args){t=n.evaluate(e);let r=Hi.parse(t);if(r)return r}throw new Bi(`Could not parse variableAnchorOffsetCollection from value '${typeof t==`string`?t:JSON.stringify(t)}'`,this.key)}case`number`:{let t=null;for(let n of this.args){if(t=n.evaluate(e),t===null)return 0;let r=Number(t);if(!isNaN(r))return r}throw new Bi(`Could not convert ${JSON.stringify(t)} to number.`,this.key)}case`formatted`:return Ii.fromString(Yi(this.args[0].evaluate(e)));case`resolvedImage`:return Ui.fromString(Yi(this.args[0].evaluate(e)));case`projectionDefinition`:{let t=this.args[0].evaluate(e);if(Wi.parse(t))return t;throw new Bi(`Could not parse projectionDefinition from value '${typeof t==`string`?t:JSON.stringify(t)}'`,this.key)}default:return Yi(this.args[0].evaluate(e))}}eachChild(e){this.args.forEach(e)}outputDefined(){return this.args.every(e=>e.outputDefined())}},ga=class e{constructor(e,t){this.type=t.type,this.bindings=[].concat(e),this.result=t}evaluate(e){return this.result.evaluate(e)}eachChild(e){for(let t of this.bindings)e(t[1]);e(this.result)}static parse(t,n){if(t.length<4)return n.error(`Expected at least 3 arguments, but found ${t.length-1} instead.`);let r=[];for(let e=1;e=n.length)throw new Bi(`Array index out of bounds: ${t} > ${n.length-1}.`,this.key);if(t!==Math.floor(t))throw new Bi(`Array index must be an integer, but found ${t} instead.`,this.key);return n[t]}eachChild(e){e(this.index),e(this.input)}outputDefined(){return!1}},ya=class e{constructor(e,t,n){this.needle=e,this.haystack=t,this.key=n,this.type=zr}static parse(t,n){if(t.length!==3)return n.error(`Expected 2 arguments, but found ${t.length-1} instead.`);let r=n.parse(t[1],1,Ur),i=n.parse(t[2],2,Ur);return!r||!i?null:ni(r.type,[zr,Rr,W,Lr,Ur])?new e(r,i,n.key):n.error(`Expected first argument to be of type boolean, string, number or null, but found ${$r(r.type)} instead`)}evaluate(e){let t=this.needle.evaluate(e),n=this.haystack.evaluate(e);if(!n)return!1;if(!ri(t,[`boolean`,`string`,`number`,`null`]))throw new Bi(`Expected first argument to be of type boolean, string, number or null, but found ${$r(Ji(t))} instead.`,this.key);if(!ri(n,[`string`,`array`]))throw new Bi(`Expected second argument to be of type array or string, but found ${$r(Ji(n))} instead.`,this.key);return n.indexOf(t)>=0}eachChild(e){e(this.needle),e(this.haystack)}outputDefined(){return!0}},ba=class e{constructor(e,t,n,r){this.needle=e,this.haystack=t,this.key=n,this.fromIndex=r,this.type=W}static parse(t,n){if(t.length<=2||t.length>=5)return n.error(`Expected 2 or 3 arguments, but found ${t.length-1} instead.`);let r=n.parse(t[1],1,Ur),i=n.parse(t[2],2,Ur);if(!r||!i)return null;if(!ni(r.type,[zr,Rr,W,Lr,Ur]))return n.error(`Expected first argument to be of type boolean, string, number or null, but found ${$r(r.type)} instead`);if(t.length===4){let a=n.parse(t[3],3,W);return a?new e(r,i,n.key,a):null}return new e(r,i,n.key)}evaluate(e){let t=this.needle.evaluate(e),n=this.haystack.evaluate(e);if(!ri(t,[`boolean`,`string`,`number`,`null`]))throw new Bi(`Expected first argument to be of type boolean, string, number or null, but found ${$r(Ji(t))} instead.`,this.key);let r;if(this.fromIndex&&(r=this.fromIndex.evaluate(e)),ri(n,[`string`])){let e=n.indexOf(t,r);return e===-1?-1:[...n.slice(0,e)].length}if(ri(n,[`array`]))return n.indexOf(t,r);throw new Bi(`Expected second argument to be of type array or string, but found ${$r(Ji(n))} instead.`,this.key)}eachChild(e){e(this.needle),e(this.haystack),this.fromIndex&&e(this.fromIndex)}outputDefined(){return!1}},xa=class e{constructor(e,t,n,r,i,a){this.inputType=e,this.type=t,this.input=n,this.cases=r,this.outputs=i,this.otherwise=a}static parse(t,n){if(t.length<5)return n.error(`Expected at least 4 arguments, but found only ${t.length-1}.`);if(t.length%2!=1)return n.error(`Expected an even number of arguments.`);let r,i;n.expectedType&&n.expectedType.kind!==`value`&&(i=n.expectedType);let a={},o=[];for(let e=2;e2**53-1)return l.error(`Branch labels must be integers no larger than ${2**53-1}.`);if(typeof e==`number`&&Math.floor(e)!==e)return l.error(`Numeric branch labels must be integer values.`);if(!r)r=Ji(e);else if(l.checkSubtype(r,Ji(e)))return null;if(a[String(e)]!==void 0)return l.error(`Branch labels must be unique.`);a[String(e)]=o.length}let u=n.parse(c,e,i);if(!u)return null;i||=u.type,o.push(u)}let s=n.parse(t[1],1,Ur);if(!s)return null;let c=n.parse(t[t.length-1],t.length-1,i);return!c||s.type.kind!==`value`&&n.concat(1).checkSubtype(r,s.type)?null:new e(r,i,s,a,o,c)}evaluate(e){let t=this.input.evaluate(e);return(Ji(t)===this.inputType&&this.outputs[this.cases[t]]||this.otherwise).evaluate(e)}eachChild(e){e(this.input),this.outputs.forEach(e),e(this.otherwise)}outputDefined(){return this.outputs.every(e=>e.outputDefined())&&this.otherwise.outputDefined()}},Sa=class e{constructor(e,t,n){this.type=e,this.branches=t,this.otherwise=n}static parse(t,n){if(t.length<4)return n.error(`Expected at least 3 arguments, but found only ${t.length-1}.`);if(t.length%2!=0)return n.error(`Expected an odd number of arguments.`);let r;n.expectedType&&n.expectedType.kind!==`value`&&(r=n.expectedType);let i=[];for(let e=1;et.outputDefined())&&this.otherwise.outputDefined()}},Ca=class e{constructor(e,t,n,r,i){this.type=e,this.input=t,this.beginIndex=n,this.key=r,this.endIndex=i}static parse(t,n){if(t.length<=2||t.length>=5)return n.error(`Expected 2 or 3 arguments, but found ${t.length-1} instead.`);let r=n.parse(t[1],1,Ur),i=n.parse(t[2],2,W);if(!r||!i)return null;if(!ni(r.type,[Qr(Ur),Rr,Ur]))return n.error(`Expected first argument to be of type array or string, but found ${$r(r.type)} instead`);if(t.length===4){let a=n.parse(t[3],3,W);return a?new e(r.type,r,i,n.key,a):null}return new e(r.type,r,i,n.key)}evaluate(e){let t=this.input.evaluate(e),n=this.beginIndex.evaluate(e),r;if(this.endIndex&&(r=this.endIndex.evaluate(e)),ri(t,[`string`]))return[...t].slice(n,r).join(``);if(ri(t,[`array`]))return t.slice(n,r);throw new Bi(`Expected first argument to be of type array or string, but found ${$r(Ji(t))} instead.`,this.key)}eachChild(e){e(this.input),e(this.beginIndex),this.endIndex&&e(this.endIndex)}outputDefined(){return!1}},wa=class e{constructor(e,t){this.type=e,this.args=t}static parse(t,n){if(t.length<2)return n.error(`Expected at least one argument.`);let r=null,i=n.expectedType;i&&i.kind!==`value`&&(r=i);let a=[];for(let e of t.slice(1)){let t=n.parse(e,1+a.length,r,void 0,{typeAnnotation:`omit`});if(!t)return null;r||=t.type,a.push(t)}if(!r)throw Error(`No output type`);return i&&a.some(e=>ti(i,e.type))?new e(Ur,a):new e(r,a)}evaluate(e){let t=null,n=0,r;for(let i of this.args)if(n++,t=i.evaluate(e),t&&t instanceof Ui&&!t.available&&(r||=t.name,t=null,n===this.args.length&&(t=r)),t!==null)break;return t}eachChild(e){this.args.forEach(e)}outputDefined(){return this.args.every(e=>e.outputDefined())}};function Ta(e,t){return e===`==`||e===`!=`?t.kind===`boolean`||t.kind===`string`||t.kind===`number`||t.kind===`null`||t.kind===`value`:t.kind===`string`||t.kind===`number`||t.kind===`value`}function Ea(e,t,n){return t===n}function Da(e,t,n){return t!==n}function Oa(e,t,n){return tn}function Aa(e,t,n){return t<=n}function ja(e,t,n){return t>=n}function Ma(e,t,n,r){return r.compare(t,n)===0}function Na(e,t,n,r){return!Ma(e,t,n,r)}function Pa(e,t,n,r){return r.compare(t,n)<0}function Fa(e,t,n,r){return r.compare(t,n)>0}function Ia(e,t,n,r){return r.compare(t,n)<=0}function La(e,t,n,r){return r.compare(t,n)>=0}function Ra(e,t,n){let r=e!==`==`&&e!==`!=`;return class i{constructor(e,t,n,r){this.lhs=e,this.rhs=t,this.key=n,this.collator=r,this.type=zr,this.hasUntypedArgument=e.type.kind===`value`||t.type.kind===`value`}static parse(e,t){if(e.length!==3&&e.length!==4)return t.error(`Expected two or three arguments.`);let n=e[0],a=t.parse(e[1],1,Ur);if(!a)return null;if(!Ta(n,a.type))return t.concat(1).error(`"${n}" comparisons are not supported for type '${$r(a.type)}'.`);let o=t.parse(e[2],2,Ur);if(!o)return null;if(!Ta(n,o.type))return t.concat(2).error(`"${n}" comparisons are not supported for type '${$r(o.type)}'.`);if(a.type.kind!==o.type.kind&&a.type.kind!==`value`&&o.type.kind!==`value`)return t.error(`Cannot compare types '${$r(a.type)}' and '${$r(o.type)}'.`);r&&(a.type.kind===`value`&&o.type.kind!==`value`?a=new pa(o.type,[a],t.key):a.type.kind!==`value`&&o.type.kind===`value`&&(o=new pa(a.type,[o],t.key)));let s=null;if(e.length===4){if(a.type.kind!==`string`&&o.type.kind!==`string`&&a.type.kind!==`value`&&o.type.kind!==`value`)return t.error(`Cannot use collator to compare non-string types.`);if(s=t.parse(e[3],3,Gr),!s)return null}return new i(a,o,t.key,s)}evaluate(i){let a=this.lhs.evaluate(i),o=this.rhs.evaluate(i);if(r&&this.hasUntypedArgument){let t=Ji(a),n=Ji(o);if(t.kind!==n.kind||t.kind!==`string`&&t.kind!==`number`)throw new Bi(`Expected arguments for "${e}" to be (string, string) or (number, number), but found (${t.kind}, ${n.kind}) instead.`,this.key)}if(this.collator&&!r&&this.hasUntypedArgument){let e=Ji(a),n=Ji(o);if(e.kind!==`string`||n.kind!==`string`)return t(i,a,o)}return this.collator?n(i,a,o,this.collator.evaluate(i)):t(i,a,o)}eachChild(e){e(this.lhs),e(this.rhs),this.collator&&e(this.collator)}outputDefined(){return!0}}}var za=Ra(`==`,Ea,Ma),Ba=Ra(`!=`,Da,Na),Va=Ra(`<`,Oa,Pa),Ha=Ra(`>`,ka,Fa),Ua=Ra(`<=`,Aa,Ia),Wa=Ra(`>=`,ja,La),Ga=class e{constructor(e,t,n){this.type=Gr,this.locale=n,this.caseSensitive=e,this.diacriticSensitive=t}static parse(t,n){if(t.length!==2)return n.error(`Expected one argument.`);let r=t[1];if(typeof r!=`object`||Array.isArray(r))return n.error(`Collator options argument must be an object.`);let i=n.parse(r[`case-sensitive`]!==void 0&&r[`case-sensitive`],1,zr);if(!i)return null;let a=n.parse(r[`diacritic-sensitive`]!==void 0&&r[`diacritic-sensitive`],1,zr);if(!a)return null;let o=null;return r.locale&&(o=n.parse(r.locale,1,Rr),!o)?null:new e(i,a,o)}evaluate(e){return new Gi(this.caseSensitive.evaluate(e),this.diacriticSensitive.evaluate(e),this.locale?this.locale.evaluate(e):null)}eachChild(e){e(this.caseSensitive),e(this.diacriticSensitive),this.locale&&e(this.locale)}outputDefined(){return!1}},Ka=class e{constructor(e,t,n,r,i,a){this.type=Rr,this.number=e,this.locale=t,this.currency=n,this.unit=r,this.minFractionDigits=i,this.maxFractionDigits=a}static parse(t,n){if(t.length!==3)return n.error(`Expected two arguments.`);let r=n.parse(t[1],1,W);if(!r)return null;let i=t[2];if(typeof i!=`object`||Array.isArray(i))return n.error(`NumberFormat options argument must be an object.`);let a=null;if(i.locale&&(a=n.parse(i.locale,1,Rr),!a))return null;let o=null;if(i.currency&&(o=n.parse(i.currency,1,Rr),!o))return null;let s=null;if(i.unit&&(s=n.parse(i.unit,1,Rr),!s))return null;if(o&&s)return n.error("NumberFormat options `currency` and `unit` are mutually exclusive");let c=null;if(i[`min-fraction-digits`]&&(c=n.parse(i[`min-fraction-digits`],1,W),!c))return null;let l=null;return i[`max-fraction-digits`]&&(l=n.parse(i[`max-fraction-digits`],1,W),!l)?null:new e(r,a,o,s,c,l)}evaluate(e){return new Intl.NumberFormat(this.locale?this.locale.evaluate(e):[],{style:this.currency?`currency`:this.unit?`unit`:`decimal`,currency:this.currency?this.currency.evaluate(e):void 0,unit:this.unit?this.unit.evaluate(e):void 0,minimumFractionDigits:this.minFractionDigits?this.minFractionDigits.evaluate(e):void 0,maximumFractionDigits:this.maxFractionDigits?this.maxFractionDigits.evaluate(e):void 0}).format(this.number.evaluate(e))}eachChild(e){e(this.number),this.locale&&e(this.locale),this.currency&&e(this.currency),this.unit&&e(this.unit),this.minFractionDigits&&e(this.minFractionDigits),this.maxFractionDigits&&e(this.maxFractionDigits)}outputDefined(){return!1}},qa=class e{constructor(e){this.type=Xr,this.input=e}static parse(t,n){if(t.length!==2)return n.error(`Expected two arguments.`);let r=n.parse(t[1],1,Rr);return r?new e(r):n.error(`No image name provided.`)}evaluate(e){let t=this.input.evaluate(e),n=Ui.fromString(t);return n&&e.availableImages&&(n.available=e.availableImages.indexOf(t)>-1),n}eachChild(e){e(this.input)}outputDefined(){return!1}},Ja=class e{constructor(e,t){this.input=e,this.key=t,this.type=W}static parse(t,n){if(t.length!==2)return n.error(`Expected 1 argument, but found ${t.length-1} instead.`);let r=n.parse(t[1],1);return r?r.type.kind!==`array`&&r.type.kind!==`string`&&r.type.kind!==`value`?n.error(`Expected argument of type string or array, but found ${$r(r.type)} instead.`):new e(r,n.key):null}evaluate(e){let t=this.input.evaluate(e);if(typeof t==`string`)return[...t].length;if(Array.isArray(t))return t.length;throw new Bi(`Expected value to be of type string or array, but found ${$r(Ji(t))} instead.`,this.key)}eachChild(e){e(this.input)}outputDefined(){return!1}},Ya=8192;function Xa(e,t){let n=Qa(e[0]),r=eo(e[1]),i=2**t.z;return[Math.round(n*i*Ya),Math.round(r*i*Ya)]}function Za(e,t){let n=2**t.z,r=(e[0]/Ya+t.x)/n,i=(e[1]/Ya+t.y)/n;return[$a(r),to(i)]}function Qa(e){return(180+e)/360}function $a(e){return e*360-180}function eo(e){return(180-180/Math.PI*Math.log(Math.tan(Math.PI/4+e*Math.PI/360)))/360}function to(e){return 360/Math.PI*Math.atan(Math.exp((180-e*360)*Math.PI/180))-90}function no(e,t){e[0]=Math.min(e[0],t[0]),e[1]=Math.min(e[1],t[1]),e[2]=Math.max(e[2],t[0]),e[3]=Math.max(e[3],t[1])}function ro(e,t){return!(e[0]<=t[0]||e[2]>=t[2]||e[1]<=t[1]||e[3]>=t[3])}function io(e,t,n){return t[1]>e[1]!=n[1]>e[1]&&e[0]<(n[0]-t[0])*(e[1]-t[1])/(n[1]-t[1])+t[0]}function ao(e,t,n){let r=e[0]-t[0],i=e[1]-t[1],a=e[0]-n[0],o=e[1]-n[1];return r*o-a*i===0&&r*a<=0&&i*o<=0}function oo(e,t,n,r){let i=[t[0]-e[0],t[1]-e[1]];return po([r[0]-n[0],r[1]-n[1]],i)!==0&&!!(mo(e,t,n,r)&&mo(n,r,e,t))}function so(e,t,n){for(let r of n)for(let n=0;n0&&d<0||u<0&&d>0}function ho(e,t,n){let r=[];for(let i=0;in[2]){let t=r*.5,i=e[0]-n[0]>t?-r:n[0]-e[0]>t?r:0;i===0&&(i=e[0]-n[2]>t?-r:n[2]-e[0]>t?r:0),e[0]+=i}no(t,e)}function vo(e){e[0]=e[1]=1/0,e[2]=e[3]=-1/0}function yo(e,t,n,r){let i=2**r.z*Ya,a=[r.x*Ya,r.y*Ya],o=[];for(let r of e)for(let e of r){let r=[e.x+a[0],e.y+a[1]];_o(r,t,n,i),o.push(r)}return o}function bo(e,t,n,r){let i=2**r.z*Ya,a=[r.x*Ya,r.y*Ya],o=[];for(let n of e){let e=[];for(let r of n){let n=[r.x+a[0],r.y+a[1]];no(t,n),e.push(n)}o.push(e)}if(t[2]-t[0]<=i/2){vo(t);for(let e of o)for(let r of e)_o(r,t,n,i)}return o}function xo(e,t){let n=[1/0,1/0,-1/0,-1/0],r=[1/0,1/0,-1/0,-1/0],i=e.canonicalID();if(t.type===`Polygon`){let a=ho(t.coordinates,r,i),o=yo(e.geometry(),n,r,i);if(!ro(n,r))return!1;for(let e of o)if(!co(e,a))return!1}if(t.type===`MultiPolygon`){let a=go(t.coordinates,r,i),o=yo(e.geometry(),n,r,i);if(!ro(n,r))return!1;for(let e of o)if(!lo(e,a))return!1}return!0}function So(e,t){let n=[1/0,1/0,-1/0,-1/0],r=[1/0,1/0,-1/0,-1/0],i=e.canonicalID();if(t.type===`Polygon`){let a=ho(t.coordinates,r,i),o=bo(e.geometry(),n,r,i);if(!ro(n,r))return!1;for(let e of o)if(!uo(e,a))return!1}if(t.type===`MultiPolygon`){let a=go(t.coordinates,r,i),o=bo(e.geometry(),n,r,i);if(!ro(n,r))return!1;for(let e of o)if(!fo(e,a))return!1}return!0}var Co=class e{constructor(e,t){this.type=zr,this.geojson=e,this.geometries=t}static parse(t,n){if(t.length!==2)return n.error(`'within' expression requires exactly one argument, but found ${t.length-1} instead.`);if(qi(t[1])){let n=t[1];if(n.type===`FeatureCollection`){let t=[];for(let e of n.features){let{type:n,coordinates:r}=e.geometry;n===`Polygon`&&t.push(r),n===`MultiPolygon`&&t.push(...r)}if(t.length)return new e(n,{type:`MultiPolygon`,coordinates:t})}else if(n.type===`Feature`){let t=n.geometry.type;if(t===`Polygon`||t===`MultiPolygon`)return new e(n,n.geometry)}else if(n.type===`Polygon`||n.type===`MultiPolygon`)return new e(n,n)}return n.error(`'within' expression requires valid geojson object that contains polygon geometry type.`)}evaluate(e){if(e.geometry()!=null&&e.canonicalID()!=null){if(e.geometryType()===`Point`)return xo(e,this.geometries);if(e.geometryType()===`LineString`)return So(e,this.geometries)}return!1}eachChild(){}outputDefined(){return!0}},wo=class{constructor(e=[],t=(e,t)=>et)){if(this.data=e,this.length=this.data.length,this.compare=t,this.length>0)for(let e=(this.length>>1)-1;e>=0;e--)this._down(e)}push(e){this.data.push(e),this._up(this.length++)}pop(){if(this.length===0)return;let e=this.data[0],t=this.data.pop();return--this.length>0&&(this.data[0]=t,this._down(0)),e}peek(){return this.data[0]}_up(e){let{data:t,compare:n}=this,r=t[e];for(;e>0;){let i=e-1>>1,a=t[i];if(n(r,a)>=0)break;t[e]=a,e=i}t[e]=r}_down(e){let{data:t,compare:n}=this,r=this.length>>1,i=t[e];for(;e=0)break;t[e]=t[r],e=r}t[e]=i}},To=Math.PI/180,Eo=class{constructor(e){let t=To*6378.137*1e3,n=Math.cos(e*To),r=1/(1-.0066943799901413165*(1-n*n)),i=Math.sqrt(r);this.kx=t*i*n,this.ky=t*i*r*.9933056200098587}distance(e,t){let n=this.wrap(e[0]-t[0])*this.kx,r=(e[1]-t[1])*this.ky;return Math.sqrt(n*n+r*r)}pointOnLine(e,t){let n=1/0,r,i,a,o;for(let s=0;s1?(c=e[s+1][0],l=e[s+1][1]):f>0&&(c+=u/this.kx*f,l+=d/this.ky*f)),u=this.wrap(t[0]-c)*this.kx,d=(t[1]-l)*this.ky;let p=u*u+d*d;p180;)e-=360;return e}};function Do(e,t){return t[0]-e[0]}function Oo(e){return e[1]-e[0]+1}function ko(e,t){return e[1]>=e[0]&&e[1]e[1])return[null,null];let n=Oo(e);if(t){if(n===2)return[e,null];let t=Math.floor(n/2);return[[e[0],e[0]+t],[e[0]+t,e[1]]]}if(n===1)return[e,null];let r=Math.floor(n/2)-1;return[[e[0],e[0]+r],[e[0]+r+1,e[1]]]}function jo(e,t){if(!ko(t,e.length))return[1/0,1/0,-1/0,-1/0];let n=[1/0,1/0,-1/0,-1/0];for(let r=t[0];r<=t[1];++r)no(n,e[r]);return n}function Mo(e){let t=[1/0,1/0,-1/0,-1/0];for(let n of e)for(let e of n)no(t,e);return t}function No(e){return e[0]!==-1/0&&e[1]!==-1/0&&e[2]!==1/0&&e[3]!==1/0}function Po(e,t,n){if(!No(e)||!No(t))return NaN;let r=0,i=0;return e[2]t[2]&&(r=e[0]-t[2]),e[1]>t[3]&&(i=e[1]-t[3]),e[3]=r)return r;if(ro(i,a)){if(Vo(e,t))return 0}else if(Vo(t,e))return 0;let o=1/0;for(let r of e)for(let e=0,i=r.length,a=i-1;e0;){let i=o.pop();if(i[0]>=a)continue;let c=i[1],l=t?50:100;if(Oo(c)<=l){if(!ko(c,e.length))return NaN;if(t){let t=Bo(e,c,n,r);if(isNaN(t)||t===0)return t;a=Math.min(a,t)}else for(let t=c[0];t<=c[1];++t){let i=zo(e[t],n,r);if(a=Math.min(a,i),a===0)return 0}}else{let n=Ao(c,t);Uo(o,a,r,e,s,n[0]),Uo(o,a,r,e,s,n[1])}}return a}function Ko(e,t,n,r,i,a=1/0){let o=Math.min(a,i.distance(e[0],n[0]));if(o===0)return o;let s=new wo([[0,[0,e.length-1],[0,n.length-1]]],Do);for(;s.length>0;){let a=s.pop();if(a[0]>=o)continue;let c=a[1],l=a[2],u=t?50:100,d=r?50:100;if(Oo(c)<=u&&Oo(l)<=d){if(!ko(c,e.length)&&ko(l,n.length))return NaN;let a;if(t&&r)a=Lo(e,c,n,l,i),o=Math.min(o,a);else if(t&&!r){let t=e.slice(c[0],c[1]+1);for(let e=l[0];e<=l[1];++e)if(a=Fo(n[e],t,i),o=Math.min(o,a),o===0)return o}else if(!t&&r){let t=n.slice(l[0],l[1]+1);for(let n=c[0];n<=c[1];++n)if(a=Fo(e[n],t,i),o=Math.min(o,a),o===0)return o}else a=Ro(e,c,n,l,i),o=Math.min(o,a)}else{let a=Ao(c,t),u=Ao(l,r);Wo(s,o,i,e,n,a[0],u[0]),Wo(s,o,i,e,n,a[0],u[1]),Wo(s,o,i,e,n,a[1],u[0]),Wo(s,o,i,e,n,a[1],u[1])}}return o}function qo(e,t){let n=e.geometry(),r=n.flat().map(t=>Za([t.x,t.y],e.canonical));if(n.length===0)return NaN;let i=new Eo(r[0][1]),a=1/0;for(let e of t){switch(e.type){case`Point`:a=Math.min(a,Ko(r,!1,[e.coordinates],!1,i,a));break;case`LineString`:a=Math.min(a,Ko(r,!1,e.coordinates,!0,i,a));break;case`Polygon`:a=Math.min(a,Go(r,!1,e.coordinates,i,a))}if(a===0)return a}return a}function Jo(e,t){let n=e.geometry(),r=n.flat().map(t=>Za([t.x,t.y],e.canonical));if(n.length===0)return NaN;let i=new Eo(r[0][1]),a=1/0;for(let e of t){switch(e.type){case`Point`:a=Math.min(a,Ko(r,!0,[e.coordinates],!1,i,a));break;case`LineString`:a=Math.min(a,Ko(r,!0,e.coordinates,!0,i,a));break;case`Polygon`:a=Math.min(a,Go(r,!0,e.coordinates,i,a))}if(a===0)return a}return a}function Yo(e,t){let n=e.geometry();if(n.length===0||n[0].length===0)return NaN;let r=la(n,0).map(t=>t.map(t=>t.map(t=>Za([t.x,t.y],e.canonical)))),i=new Eo(r[0][0][0][1]),a=1/0;for(let e of t)for(let t of r){switch(e.type){case`Point`:a=Math.min(a,Go([e.coordinates],!1,t,i,a));break;case`LineString`:a=Math.min(a,Go(e.coordinates,!0,t,i,a));break;case`Polygon`:a=Math.min(a,Ho(t,e.coordinates,i,a))}if(a===0)return a}return a}function Xo(e){return e.type===`MultiPolygon`?e.coordinates.map(e=>({type:`Polygon`,coordinates:e})):e.type===`MultiLineString`?e.coordinates.map(e=>({type:`LineString`,coordinates:e})):e.type===`MultiPoint`?e.coordinates.map(e=>({type:`Point`,coordinates:e})):[e]}var Zo=class e{constructor(e,t){this.type=W,this.geojson=e,this.geometries=t}static parse(t,n){if(t.length!==2)return n.error(`'distance' expression requires exactly one argument, but found ${t.length-1} instead.`);if(qi(t[1])){let n=t[1];if(n.type===`FeatureCollection`)return new e(n,n.features.map(e=>Xo(e.geometry)).flat());if(n.type===`Feature`)return new e(n,Xo(n.geometry));if(`type`in n&&`coordinates`in n)return new e(n,Xo(n))}return n.error(`'distance' expression requires valid geojson object that contains polygon geometry type.`)}evaluate(e){if(e.geometry()!=null&&e.canonicalID()!=null){if(e.geometryType()===`Point`)return qo(e,this.geometries);if(e.geometryType()===`LineString`)return Jo(e,this.geometries);if(e.geometryType()===`Polygon`)return Yo(e,this.geometries)}return NaN}eachChild(){}outputDefined(){return!0}},Qo=class e{constructor(e){let t=null;for(let n of e)if(!t)t=n.type;else if(t===n.type)continue;else{t=Ur;break}this.type=Qr(t??Ur,e.length),this.arr=e}static parse(t,n){if(t.length!==2)return n.error(`'semiliteral' expression requires exactly one argument, but found ${t.length-1} instead.`);if(!qi(t[1]))return n.error(`invalid value of type "${typeof t[1]}"`);let r=t[1],i=Ji(r);if(i.kind===`array`){let t=r,i=n.concat(1),a=[];for(let e=0;et.evaluate(e))}eachChild(e){this.arr.forEach(e)}outputDefined(){return this.arr.every(e=>e.outputDefined())}},$o=class e{constructor(e){this.key=e,this.type=Ur}static parse(t,n){if(t.length!==2)return n.error(`Expected 1 argument, but found ${t.length-1} instead.`);let r=t[1];return r==null?n.error(`Global state property must be defined.`):typeof r==`string`?new e(r):n.error(`Global state property must be string, but found ${typeof t[1]} instead.`)}evaluate(e){let t=e.globals?.globalState;return!t||Object.keys(t).length===0?null:Ci(t,this.key)??null}eachChild(){}outputDefined(){return!1}},es={"==":za,"!=":Ba,">":Ha,"<":Va,">=":Wa,"<=":Ua,array:pa,at:va,boolean:pa,case:Sa,coalesce:wa,collator:Ga,format:aa,image:qa,in:ya,"index-of":ba,interpolate:na,"interpolate-hcl":na,"interpolate-lab":na,length:Ja,let:ga,literal:Xi,match:xa,number:pa,"number-format":Ka,object:pa,semiliteral:Qo,slice:Ca,step:ea,string:pa,"to-boolean":ha,"to-color":ha,"to-number":ha,"to-string":ha,var:_a,within:Co,distance:Zo,"global-state":$o},ts=class extends Error{constructor(e,t){super(t),this.message=t,this.key=e}},ns=class e{constructor(e,t=[]){this.parent=e,this.bindings={};for(let[e,n]of t)this.bindings[e]=n}concat(t){return new e(this,t)}get(e){if(this.bindings[e])return this.bindings[e];if(this.parent)return this.parent.get(e);throw Error(`${e} not found in scope.`)}has(e){return this.bindings[e]?!0:this.parent?this.parent.has(e):!1}},rs=class e{constructor(e,t,n=[],r,i=new ns,a=[]){this.registry=e,this.path=n,this.key=n.map(e=>`[${e}]`).join(``),this.scope=i,this.errors=a,this.expectedType=r,this._isConstant=t}parse(e,t,n,r,i={}){return t==null?this._parse(e,i):this.concat(t,n,r)._parse(e,i)}_parse(e,t){(e===null||typeof e==`string`||typeof e==`boolean`||typeof e==`number`)&&(e=[`literal`,e]);let n=this.key;function r(e,t,r){return r===`assert`?new pa(t,[e],n):r===`coerce`?new ha(t,[e],n):e}if(Array.isArray(e)){if(e.length===0)return this.error(`Expected an array with at least one element. If you wanted a literal array, use ["literal", []].`);let n=e[0];if(typeof n!=`string`)return this.error(`Expression name must be a string, but found ${typeof n} instead. If you wanted a literal array, use ["literal", [...]].`,0),null;let i=this.registry[n];if(i){let n=i.parse(e,this);if(!n)return null;if(this.expectedType){let e=this.expectedType,i=n.type;if((e.kind===`string`||e.kind===`number`||e.kind===`boolean`||e.kind===`object`||e.kind===`array`)&&i.kind===`value`)n=r(n,e,t.typeAnnotation||`assert`);else if(e.kind===`projectionDefinition`&&[`string`,`array`,`value`].includes(i.kind)||[`color`,`formatted`,`resolvedImage`].includes(e.kind)&&[`value`,`string`].includes(i.kind)||[`padding`,`numberArray`].includes(e.kind)&&[`value`,`number`,`array`].includes(i.kind)||e.kind===`colorArray`&&[`value`,`string`,`array`].includes(i.kind)||e.kind===`variableAnchorOffsetCollection`&&[`value`,`array`].includes(i.kind))n=r(n,e,t.typeAnnotation||`coerce`);else if(this.checkSubtype(e,i))return null}if(!(n instanceof Xi)&&n.type.kind!==`resolvedImage`&&this._isConstant(n)){let e=new Qi;try{n=new Xi(n.type,n.evaluate(e))}catch(e){return this.error(e.message),null}}return n}return this.error(`Unknown expression "${n}". If you wanted a literal array, use ["literal", [...]].`,0)}return e===void 0?this.error(`'undefined' value invalid. Use null instead.`):typeof e==`object`?this.error(`Bare objects invalid. Use ["literal", {...}] instead.`):this.error(`Expected an array, but found ${typeof e} instead.`)}concat(t,n,r){let i=typeof t==`number`?this.path.concat(t):this.path,a=r?this.scope.concat(r):this.scope;return new e(this.registry,this._isConstant,i,n||null,a,this.errors)}error(e,...t){let n=`${this.key}${t.map(e=>`[${e}]`).join(``)}`;this.errors.push(new ts(n,e))}checkSubtype(e,t){let n=ti(e,t);return n&&this.error(n),n}},is=class e{constructor(e,t,n,r,i){this.name=e,this.type=t,this._evaluate=n,this.args=r,this.key=i}evaluate(e){return this._evaluate(e,this.args,this.key)}eachChild(e){this.args.forEach(e)}outputDefined(){return!1}static parse(t,n){let r=t[0],i=e.definitions[r];if(!i)return n.error(`Unknown expression "${r}". If you wanted a literal array, use ["literal", [...]].`,0);let a=Array.isArray(i)?i[0]:i.type,o=Array.isArray(i)?[[i[1],i[2]]]:i.overloads,s=o.filter(([e])=>!Array.isArray(e)||e.length===t.length-1),c=null;for(let[i,o]of s){c=new rs(n.registry,ds,n.path,null,n.scope);let s=[],l=!1;for(let e=1;eus(e)).join(` | `),r=[];for(let e=1;e>1;if(t[i]===e)return!0;t[i]>e?r=i-1:n=i+1}return!1}function ls(e){return{type:e}}is.register(es,{error:[Wr,[Rr],(e,[t],n)=>{throw new Bi(t.evaluate(e),n)}],typeof:[Rr,[Ur],(e,[t])=>$r(Ji(t.evaluate(e)))],"to-rgba":[Qr(W,4),[Br],(e,[t])=>{let[n,r,i,a]=t.evaluate(e).rgb;return[n*255,r*255,i*255,a]}],rgb:[Br,[W,W,W],as],rgba:[Br,[W,W,W,W],as],has:{type:zr,overloads:[[[Rr],(e,[t])=>os(t.evaluate(e),e.properties())],[[Rr,Hr],(e,[t,n])=>os(t.evaluate(e),n.evaluate(e))]]},get:{type:Ur,overloads:[[[Rr],(e,[t])=>ss(t.evaluate(e),e.properties())],[[Rr,Hr],(e,[t,n])=>ss(t.evaluate(e),n.evaluate(e))]]},"feature-state":[Ur,[Rr],(e,[t])=>ss(t.evaluate(e),e.featureState||{})],properties:[Hr,[],e=>e.properties()],"geometry-type":[Rr,[],e=>e.geometryType()],id:[Ur,[],e=>e.id()],zoom:[W,[],e=>e.globals.zoom],"heatmap-density":[W,[],e=>e.globals.heatmapDensity||0],elevation:[W,[],e=>e.globals.elevation||0],"line-progress":[W,[],e=>e.globals.lineProgress||0],accumulated:[Ur,[],e=>e.globals.accumulated===void 0?null:e.globals.accumulated],"+":[W,ls(W),(e,t)=>{let n=0;for(let r of t)n+=r.evaluate(e);return n}],"*":[W,ls(W),(e,t)=>{let n=1;for(let r of t)n*=r.evaluate(e);return n}],"-":{type:W,overloads:[[[W,W],(e,[t,n])=>t.evaluate(e)-n.evaluate(e)],[[W],(e,[t])=>-t.evaluate(e)]]},"/":[W,[W,W],(e,[t,n])=>t.evaluate(e)/n.evaluate(e)],"%":[W,[W,W],(e,[t,n])=>t.evaluate(e)%n.evaluate(e)],ln2:[W,[],()=>Math.LN2],pi:[W,[],()=>Math.PI],e:[W,[],()=>Math.E],"^":[W,[W,W],(e,[t,n])=>t.evaluate(e)**+n.evaluate(e)],sqrt:[W,[W],(e,[t])=>Math.sqrt(t.evaluate(e))],log10:[W,[W],(e,[t])=>Math.log(t.evaluate(e))/Math.LN10],ln:[W,[W],(e,[t])=>Math.log(t.evaluate(e))],log2:[W,[W],(e,[t])=>Math.log(t.evaluate(e))/Math.LN2],sin:[W,[W],(e,[t])=>Math.sin(t.evaluate(e))],cos:[W,[W],(e,[t])=>Math.cos(t.evaluate(e))],tan:[W,[W],(e,[t])=>Math.tan(t.evaluate(e))],asin:[W,[W],(e,[t])=>Math.asin(t.evaluate(e))],acos:[W,[W],(e,[t])=>Math.acos(t.evaluate(e))],atan:[W,[W],(e,[t])=>Math.atan(t.evaluate(e))],min:[W,ls(W),(e,t)=>Math.min(...t.map(t=>t.evaluate(e)))],max:[W,ls(W),(e,t)=>Math.max(...t.map(t=>t.evaluate(e)))],abs:[W,[W],(e,[t])=>Math.abs(t.evaluate(e))],round:[W,[W],(e,[t])=>{let n=t.evaluate(e);return n<0?-Math.round(-n):Math.round(n)}],floor:[W,[W],(e,[t])=>Math.floor(t.evaluate(e))],ceil:[W,[W],(e,[t])=>Math.ceil(t.evaluate(e))],"filter-==":[zr,[Rr,Ur],(e,[t,n])=>e.properties()[t.value]===n.value],"filter-id-==":[zr,[Ur],(e,[t])=>e.id()===t.value],"filter-type-==":[zr,[Rr],(e,[t])=>e.geometryType()===t.value],"filter-<":[zr,[Rr,Ur],(e,[t,n])=>{let r=e.properties()[t.value],i=n.value;return typeof r==typeof i&&r{let n=e.id(),r=t.value;return typeof n==typeof r&&n":[zr,[Rr,Ur],(e,[t,n])=>{let r=e.properties()[t.value],i=n.value;return typeof r==typeof i&&r>i}],"filter-id->":[zr,[Ur],(e,[t])=>{let n=e.id(),r=t.value;return typeof n==typeof r&&n>r}],"filter-<=":[zr,[Rr,Ur],(e,[t,n])=>{let r=e.properties()[t.value],i=n.value;return typeof r==typeof i&&r<=i}],"filter-id-<=":[zr,[Ur],(e,[t])=>{let n=e.id(),r=t.value;return typeof n==typeof r&&n<=r}],"filter->=":[zr,[Rr,Ur],(e,[t,n])=>{let r=e.properties()[t.value],i=n.value;return typeof r==typeof i&&r>=i}],"filter-id->=":[zr,[Ur],(e,[t])=>{let n=e.id(),r=t.value;return typeof n==typeof r&&n>=r}],"filter-has":[zr,[Ur],(e,[t])=>{let n=t.value,r=e.properties();return n in r&&r[n]!==void 0}],"filter-has-id":[zr,[],e=>e.id()!==null&&e.id()!==void 0],"filter-type-in":[zr,[Qr(Rr)],(e,[t])=>t.value.indexOf(e.geometryType())>=0],"filter-id-in":[zr,[Qr(Ur)],(e,[t])=>t.value.indexOf(e.id())>=0],"filter-in-small":[zr,[Rr,Qr(Ur)],(e,[t,n])=>n.value.indexOf(e.properties()[t.value])>=0],"filter-in-large":[zr,[Rr,Qr(Ur)],(e,[t,n])=>cs(e.properties()[t.value],n.value,0,n.value.length-1)],all:{type:zr,overloads:[[[zr,zr],(e,[t,n])=>t.evaluate(e)&&n.evaluate(e)],[ls(zr),(e,t)=>{for(let n of t)if(!n.evaluate(e))return!1;return!0}]]},any:{type:zr,overloads:[[[zr,zr],(e,[t,n])=>t.evaluate(e)||n.evaluate(e)],[ls(zr),(e,t)=>{for(let n of t)if(n.evaluate(e))return!0;return!1}]]},"!":[zr,[zr],(e,[t])=>!t.evaluate(e)],"is-supported-script":[zr,[Rr],(e,[t])=>{let n=e.globals&&e.globals.isSupportedScript;return!n||n(t.evaluate(e))}],upcase:[Rr,[Rr],(e,[t])=>t.evaluate(e).toUpperCase()],downcase:[Rr,[Rr],(e,[t])=>t.evaluate(e).toLowerCase()],concat:[Rr,ls(Ur),(e,t)=>t.map(t=>Yi(t.evaluate(e))).join(``)],split:[Qr(Rr),[Rr,Rr],(e,[t,n])=>t.evaluate(e).split(n.evaluate(e))],join:[Rr,[Qr(Rr),Rr],(e,[t,n])=>t.evaluate(e).join(n.evaluate(e))],"resolved-locale":[Rr,[Gr],(e,[t])=>t.evaluate(e).resolvedLocale()]});function us(e){return Array.isArray(e)?`(${e.map($r).join(`, `)})`:`(${$r(e.type)}...)`}function ds(e){if(e instanceof _a)return ds(e.boundExpression);if(e instanceof is&&e.name===`error`||e instanceof Ga||e instanceof Co||e instanceof Zo||e instanceof $o)return!1;let t=e instanceof ha||e instanceof pa,n=!0;return e.eachChild(e=>{n&&=t?ds(e):e instanceof Xi}),n?fs(e)&&ms(e,[`zoom`,`heatmap-density`,`elevation`,`line-progress`,`accumulated`,`is-supported-script`]):!1}function fs(e){if(e instanceof is&&(e.name===`get`&&e.args.length===1||e.name===`feature-state`||e.name===`has`&&e.args.length===1||e.name===`properties`||e.name===`geometry-type`||e.name===`id`||/^filter-/.test(e.name))||e instanceof Co||e instanceof Zo)return!1;let t=!0;return e.eachChild(e=>{t&&!fs(e)&&(t=!1)}),t}function ps(e){if(e instanceof is&&e.name===`feature-state`)return!1;let t=!0;return e.eachChild(e=>{t&&!ps(e)&&(t=!1)}),t}function ms(e,t){if(e instanceof is&&t.indexOf(e.name)>=0)return!1;let n=!0;return e.eachChild(e=>{n&&!ms(e,t)&&(n=!1)}),n}function hs(e){return e[`property-type`]===`data-driven`||e[`property-type`]===`cross-faded-data-driven`}function gs(e){return!!e.expression&&e.expression.parameters.indexOf(`zoom`)>-1}function _s(e){return!!e.expression&&e.expression.interpolated}var vs=/^(.*)-transition$/;function ys(e,...t){for(let n of t)for(let t in n)e[t]=n[t];return e}function bs(e){return e instanceof Number?`number`:e instanceof String?`string`:e instanceof Boolean?`boolean`:Array.isArray(e)?`array`:e===null?`null`:typeof e}function xs(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Ji(e)===Hr}function Ss(e){return e}function Cs(e){switch(e.type){case`color`:return Ni.parse;case`padding`:return Li.parse;case`numberArray`:return Ri.parse;case`colorArray`:return zi.parse;default:return null}}function ws(e){switch(e){case`exponential`:return ks;case`interval`:return Os;case`categorical`:return Ds;case`identity`:return As;default:throw Error(`Unknown function type "${e}"`)}}function Ts(e,t){let n=e.stops&&typeof e.stops[0][0]==`object`,r=n||e.property!==void 0,i=n||!r,a=e.type||(_s(t)?`exponential`:`interval`),o=Cs(t);if(o&&(e=ys({},e),e.stops&&(e.stops=e.stops.map(e=>[e[0],o(e[1])])),e.default?e.default=o(e.default):e.default=o(t.default)),e.colorSpace&&!Mi(e.colorSpace))throw Error(`Unknown color space: "${e.colorSpace}"`);let s=ws(a),c,l;if(a===`categorical`){c=Object.create(null);for(let t of e.stops)c[t[0]]=t[1];l=typeof e.stops[0][0]}if(n){let n={},r=[];for(let t=0;te[0]),evaluate({zoom:n},r){return ks({stops:i,base:e.base},t,n).evaluate(n,r)}}}if(i){let n=a===`exponential`?{name:`exponential`,base:e.base===void 0?1:e.base}:null;return{kind:`camera`,interpolationType:n,interpolationFactor:na.interpolationFactor.bind(void 0,n),zoomStops:e.stops.map(e=>e[0]),evaluate:({zoom:n})=>s(e,t,n,c,l)}}return{kind:`source`,evaluate(n,r){let i=r&&r.properties?r.properties[e.property]:void 0;return i===void 0?Es(e.default,t.default):s(e,t,i,c,l)}}}function Es(e,t,n){if(e!==void 0)return e;if(t!==void 0)return t;if(n!==void 0)return n}function Ds(e,t,n,r,i){return Es(typeof n===i?r[n]:void 0,e.default,t.default)}function Os(e,t,n){if(bs(n)!==`number`)return Es(e.default,t.default);let r=e.stops.length;if(r===1||n<=e.stops[0][0])return e.stops[0][1];if(n>=e.stops[r-1][0])return e.stops[r-1][1];let i=$i(e.stops.map(e=>e[0]),n,``);return e.stops[i][1]}function ks(e,t,n){let r=e.base===void 0?1:e.base;if(bs(n)!==`number`)return Es(e.default,t.default);let i=e.stops.length;if(i===1||n<=e.stops[0][0])return e.stops[0][1];if(n>=e.stops[i-1][0])return e.stops[i-1][1];let a=$i(e.stops.map(e=>e[0]),n,``),o=js(n,r,e.stops[a][0],e.stops[a+1][0]),s=e.stops[a][1],c=e.stops[a+1][1],l=ia[t.type]||Ss;return typeof s.evaluate==`function`?{evaluate(...t){let n=s.evaluate.apply(void 0,t),r=c.evaluate.apply(void 0,t);if(n!==void 0&&r!==void 0)return l(n,r,o,e.colorSpace)}}:l(s,c,o,e.colorSpace)}function As(e,t,n){switch(t.type){case`color`:n=Ni.parse(n);break;case`formatted`:n=Ii.fromString(n.toString());break;case`resolvedImage`:n=Ui.fromString(n.toString());break;case`padding`:n=Li.parse(n);break;case`colorArray`:n=zi.parse(n);break;case`numberArray`:n=Ri.parse(n);break;default:bs(n)!==t.type&&(t.type!==`enum`||!t.values[n])&&(n=void 0)}return Es(n,e.default,t.default)}function js(e,t,n,r){let i=r-n,a=e-n;return i===0?0:t===1?a/i:(t**+a-1)/(t**+i-1)}function Ms(e){return{result:`success`,value:e}}function Ns(e){return{result:`error`,value:e}}var Ps=class{constructor(e,t,n,r){this.expression=e,this._warningHistory={},this._evaluator=new Qi,this._defaultValue=n?Js(n):null,this._enumValues=n&&n.type===`enum`?n.values:null,this._globalState=r,this._rootKey=t}evaluateWithoutErrorHandling(e,t,n,r,i,a){return this._globalState&&(e=Ys(e,this._globalState)),this._evaluator.globals=e,this._evaluator.feature=t,this._evaluator.featureState=n,this._evaluator.canonical=r,this._evaluator.availableImages=i||null,this._evaluator.formattedSection=a,this.expression.evaluate(this._evaluator)}evaluate(e,t,n,r,i,a){this._globalState&&(e=Ys(e,this._globalState)),this._evaluator.globals=e,this._evaluator.feature=t||null,this._evaluator.featureState=n||null,this._evaluator.canonical=r,this._evaluator.availableImages=i||null,this._evaluator.formattedSection=a||null;try{let e=this.expression.evaluate(this._evaluator);if(e==null||typeof e==`number`&&e!==e)return this._defaultValue;if(this._enumValues&&!(e in this._enumValues))throw new Bi(`Expected value to be one of ${Object.keys(this._enumValues).map(e=>JSON.stringify(e)).join(`, `)}, but found ${JSON.stringify(e)} instead.`,``);return e}catch(e){let t=e instanceof Bi?e.path:``,n=`${t}|${e.message}`;return this._warningHistory[n]||(this._warningHistory[n]=!0,typeof console<`u`&&console.warn(Fs(this._rootKey,t,e.message,this._defaultValue))),this._defaultValue}}};function Fs(e,t,n,r){return`${e}${t}: ${n}${r==null?``:` Falling back to ${String(r)}.`}`}function Is(e){if(!e)throw Error(`rootKey must identify the location of the expression in the style JSON, e.g. "layers[3].paint.line-width".`)}function Ls(e){return Array.isArray(e)&&e.length>0&&typeof e[0]==`string`&&e[0]in es}function Rs(e,t,n,r){Is(t);let i=new rs(es,ds,[],n?qs(n):void 0),a=i.parse(e,void 0,void 0,void 0,n&&n.type===`string`?{typeAnnotation:`coerce`}:void 0);return a?Ms(new Ps(a,t,n,r)):Ns(i.errors)}var zs=class{constructor(e,t,n){this.kind=e,this._styleExpression=t,this.isStateDependent=e!==`constant`&&!ps(t.expression),this.globalStateRefs=Ks(t.expression),this._globalState=n}evaluateWithoutErrorHandling(e,t,n,r,i,a){return this._globalState&&(e=Ys(e,this._globalState)),this._styleExpression.evaluateWithoutErrorHandling(e,t,n,r,i,a)}evaluate(e,t,n,r,i,a){return this._globalState&&(e=Ys(e,this._globalState)),this._styleExpression.evaluate(e,t,n,r,i,a)}},Bs=class{constructor(e,t,n,r,i){this.kind=e,this.zoomStops=n,this._styleExpression=t,this.isStateDependent=e!==`camera`&&!ps(t.expression),this.globalStateRefs=Ks(t.expression),this.interpolationType=r,this._globalState=i}evaluateWithoutErrorHandling(e,t,n,r,i,a){return this._globalState&&(e=Ys(e,this._globalState)),this._styleExpression.evaluateWithoutErrorHandling(e,t,n,r,i,a)}evaluate(e,t,n,r,i,a){return this._globalState&&(e=Ys(e,this._globalState)),this._styleExpression.evaluate(e,t,n,r,i,a)}interpolationFactor(e,t,n){return this.interpolationType?na.interpolationFactor(this.interpolationType,e,t,n):0}};function Vs(e){return e._styleExpression!==void 0}function Hs(e,t,n,r){let i=Rs(e,t,n,r);if(i.result===`error`)return i;let a=i.value.expression,o=fs(a);if(!o&&!hs(n))return Ns([new ts(``,`data expressions not supported`)]);let s=ms(a,[`zoom`]);if(!s&&!gs(n))return Ns([new ts(``,`zoom expressions not supported`)]);let c=Gs(a);if(!c&&!s)return Ns([new ts(``,`"zoom" expression may only be used as input to a top-level "step" or "interpolate" expression.`)]);if(c instanceof ts)return Ns([c]);if(c instanceof na&&!_s(n))return Ns([new ts(``,`"interpolate" expressions cannot be used with this property`)]);if(!c)return Ms(o?new zs(`constant`,i.value,r):new zs(`source`,i.value,r));let l=c instanceof na?c.interpolation:void 0;return Ms(o?new Bs(`camera`,i.value,c.labels,l,r):new Bs(`composite`,i.value,c.labels,l,r))}var Us=class e{constructor(e,t,n){this.isStateDependent=!1,this.globalStateRefs=new Set,this._globalState=null,Is(t),this._parameters=e,this._specification=n,this._rootKey=t,this._defaultValue=Js(n),this._warningHistory={};let r=Ts(this._parameters,this._specification);this.kind=r.kind,this.interpolationFactor=r.interpolationFactor,this.zoomStops=r.zoomStops,this.interpolationType=r.interpolationType,this._innerEvaluate=r.evaluate}evaluate(e,t){try{return this._innerEvaluate(e,t)}catch(e){let t=e instanceof Error?e.message:String(e),n=`|${t}`;return this._warningHistory[n]||(this._warningHistory[n]=!0,typeof console<`u`&&console.warn(Fs(this._rootKey,``,t,this._defaultValue))),this._defaultValue}}static deserialize(t){return new e(t._parameters,t._rootKey,t._specification)}static serialize(e){return{_parameters:e._parameters,_specification:e._specification,_rootKey:e._rootKey}}};function Ws(e,t,n,r){if(xs(e))return new Us(e,t,n);if(Ls(e)){let i=Hs(e,t,n,r);if(i.result===`error`)throw Error(i.value.map(e=>`${e.key}: ${e.message}`).join(`, `));return i.value}{let t=e;return n.type===`color`&&typeof e==`string`?t=Ni.parse(e):n.type===`padding`&&(typeof e==`number`||Array.isArray(e))?t=Li.parse(e):n.type===`numberArray`&&(typeof e==`number`||Array.isArray(e))?t=Ri.parse(e):n.type===`colorArray`&&(typeof e==`string`||Array.isArray(e))?t=zi.parse(e):n.type===`variableAnchorOffsetCollection`&&Array.isArray(e)?t=Hi.parse(e):n.type===`projectionDefinition`&&typeof e==`string`&&(t=Wi.parse(e)),{globalStateRefs:new Set,_globalState:null,kind:`constant`,evaluate:()=>t}}}function Gs(e){let t=null;if(e instanceof ga)t=Gs(e.result);else if(e instanceof wa){for(let n of e.args)if(t=Gs(n),t)break}else(e instanceof ea||e instanceof na)&&e.input instanceof is&&e.input.name===`zoom`&&(t=e);return t instanceof ts||e.eachChild(e=>{let n=Gs(e);n instanceof ts?t=n:!t&&n?t=new ts(``,`"zoom" expression may only be used as input to a top-level "step" or "interpolate" expression.`):t&&n&&t!==n&&(t=new ts(``,`Only one zoom-based "step" or "interpolate" subexpression may be used in an expression.`))}),t}function Ks(e,t=new Set){return e instanceof $o&&t.add(e.key),e.eachChild(e=>{Ks(e,t)}),t}function qs(e){let t={color:Br,string:Rr,number:W,enum:Rr,boolean:zr,formatted:Kr,padding:qr,numberArray:Yr,colorArray:Jr,projectionDefinition:Vr,resolvedImage:Xr,variableAnchorOffsetCollection:Zr};return e.type===`array`?Qr(t[e.value]||Ur,e.length):t[e.type]}function Js(e){if(e.type===`color`&&xs(e.default))return new Ni(0,0,0,0);switch(e.type){case`color`:return Ni.parse(e.default)||null;case`padding`:return Li.parse(e.default)||null;case`numberArray`:return Ri.parse(e.default)||null;case`colorArray`:return zi.parse(e.default)||null;case`variableAnchorOffsetCollection`:return Hi.parse(e.default)||null;case`projectionDefinition`:return Wi.parse(e.default)||null;default:return e.default===void 0?null:e.default}}function Ys(e,t){let{zoom:n,heatmapDensity:r,elevation:i,lineProgress:a,isSupportedScript:o,accumulated:s}=e??{};return{zoom:n,heatmapDensity:r,elevation:i,lineProgress:a,isSupportedScript:o,accumulated:s,globalState:t}}function Xs(e){let t=!1;for(let n of e){let e=Zs(n);if(e===`expression`)return`expression`;e===`legacy`&&(t=!0)}return t?`legacy`:`neutral`}function Zs(e){if(typeof e==`boolean`)return`neutral`;if(!Array.isArray(e)||e.length===0)return`legacy`;switch(e[0]){case`has`:return e.length<2||e[1]===`$id`||e[1]===`$type`?`legacy`:e.length===2?`neutral`:`expression`;case`in`:return e.length>=3&&(typeof e[1]!=`string`||Array.isArray(e[2]))?`expression`:`legacy`;case`!in`:case`!has`:return`legacy`;case`==`:case`!=`:case`>`:case`>=`:case`<`:case`<=`:return e.length!==3||Array.isArray(e[1])||Array.isArray(e[2])?`expression`:`legacy`;case`none`:return`legacy`;case`any`:case`all`:return Xs(e.slice(1));default:return`expression`}}function Qs(e){return Zs(e)!==`legacy`}function $s(e){return e===`$type`?[`geometry-type`]:e===`$id`?[`id`]:[`get`,e]}function ec(e){switch(e[0]){case`==`:case`!=`:case`<`:case`<=`:case`>`:case`>=`:return e.length!==3||typeof e[1]!=`string`?null:[e[0],$s(e[1]),e[2]];case`in`:case`!in`:{if(e.length<2||typeof e[1]!=`string`)return null;let t=[`in`,$s(e[1]),[`literal`,e.slice(2)]];return e[0]===`!in`?[`!`,t]:t}case`has`:case`!has`:{if(e.length!==2||typeof e[1]!=`string`||e[1]===`$type`||e[1]===`$id`)return null;let t=[`has`,e[1]];return e[0]===`!has`?[`!`,t]:t}default:return null}}function tc(e){if((e[0]===`<`||e[0]===`<=`||e[0]===`>`||e[0]===`>=`)&&e[1]===`$type`)return`"$type" cannot be use with operator "${e[0]}"`;let t=ec(e);return t?`Mixing deprecated filter syntax with expression syntax is not supported. Replace ${JSON.stringify(e)} with ${JSON.stringify(t)}.`:`Mixing deprecated filter syntax with expression syntax is not supported. Convert ${JSON.stringify(e)} to expression syntax.`}function nc(e,t,n){let r=n[e];return Array.isArray(r)?Qs(r)?rc(r,t.concat(e)):{path:t.concat(e),legacyFilter:r}:null}function rc(e,t=[]){if(!Array.isArray(e)||e.length<1)return null;switch(e[0]){case`all`:case`any`:case`none`:for(let n=1;n`u`)return;let r=n.path.map(e=>`[${e}]`).join(``);console.warn(`${t}${r}: ${tc(n.legacyFilter)}`)}var ac={type:`boolean`,default:!1,transition:!1,"property-type":`data-driven`,expression:{interpolated:!1,parameters:[`zoom`,`feature`]}};function oc(e,t,n){if(e==null)return{filter:()=>!0,needGeometry:!1,getGlobalStateRefs:()=>new Set};Qs(e)?ic(e,t):e=lc(e);let r=Rs(e,t,ac,n);if(r.result===`error`)throw Error(r.value.map(e=>`${e.key}: ${e.message}`).join(`, `));return{filter:(e,t,n)=>r.value.evaluate(e,t,{},n),needGeometry:cc(e),getGlobalStateRefs:()=>Ks(r.value.expression)}}function sc(e,t){return et)}function cc(e){if(!Array.isArray(e))return!1;if(e[0]===`within`||e[0]===`distance`)return!0;for(let t=1;t`||t===`<=`||t===`>=`?uc(e[1],e[2],t):t===`any`?dc(e.slice(1)):t===`all`?[`all`].concat(e.slice(1).map(lc)):t===`none`?[`all`].concat(e.slice(1).map(lc).map(mc)):t===`in`?fc(e[1],e.slice(2)):t===`!in`?mc(fc(e[1],e.slice(2))):t===`has`?pc(e[1]):t!==`!has`||mc(pc(e[1]))}function uc(e,t,n){switch(e){case`$type`:return[`filter-type-${n}`,t];case`$id`:return[`filter-id-${n}`,t];default:return[`filter-${n}`,e,t]}}function dc(e){return[`any`].concat(e.map(lc))}function fc(e,t){if(t.length===0)return!1;switch(e){case`$type`:return[`filter-type-in`,[`literal`,t]];case`$id`:return[`filter-id-in`,[`literal`,t]];default:return t.length>200&&!t.some(e=>typeof e!=typeof t[0])?[`filter-in-large`,e,[`literal`,t.sort(sc)]]:[`filter-in-small`,e,[`literal`,t]]}}function pc(e){switch(e){case`$type`:return!0;case`$id`:return[`filter-has-id`];default:return[`filter-has`,e]}}function mc(e){return[`!`,e]}function hc(){let e={},t=H.$version;for(let n in H.$root){let r=H.$root[n];if(r.required){let i=null;i=n===`version`?t:r.type===`array`?[]:{},i!=null&&(e[n]=i)}}return e}function gc(e){let t=e.key,n=e.value;return n?[new U(t,n,`constants have been deprecated as of v8`)]:[]}function _c(e){return e instanceof Number||e instanceof String||e instanceof Boolean?e.valueOf():e}function vc(e){if(Array.isArray(e))return e.map(vc);if(e instanceof Object&&!(e instanceof Number||e instanceof String||e instanceof Boolean)){let t={};for(let n in e)t[n]=vc(e[n]);return t}return _c(e)}function yc(e){let t=e.key,n=e.value,r=e.valueSpec||{},i=e.objectElementValidators||{},a=e.style,o=e.styleSpec,s=e.validateSpec,c=[],l=bs(n);if(l!==`object`)return[new U(t,n,`object expected, ${l} found`)];for(let e in n){let l=e.split(`.`)[0],u=Ci(r,l)||r[`*`],d;if(Ci(i,l))d=i[l];else if(Ci(r,l)){if(n[e]===void 0)continue;d=s}else if(i[`*`])d=i[`*`];else if(r[`*`])d=s;else{c.push(new U(t,n[e],`unknown property "${e}"`));continue}c=c.concat(d({key:(t&&`${t}.`)+e,value:n[e],valueSpec:u,style:a,styleSpec:o,object:n,objectKey:e,validateSpec:s},n))}for(let e in r)i[e]||r[e].required&&r[e].default===void 0&&n[e]===void 0&&c.push(new U(t,n,`missing required property "${e}"`));return c}function bc(e){let t=e.value,n=e.valueSpec,r=e.validateSpec,i=e.style,a=e.styleSpec,o=e.key,s=e.arrayElementValidator||r;if(bs(t)!==`array`)return[new U(o,t,`array expected, ${bs(t)} found`)];if(n.length&&t.length!==n.length)return[new U(o,t,`array length ${n.length} expected, length ${t.length} found`)];let c={type:n.value,values:n.values};a.$version<7&&(c.function=n.function),bs(n.value)===`object`&&(c=n.value);let l=[];for(let n=0;nr.maximum?[new U(t,n,`${n} is greater than the maximum value ${r.maximum}`)]:[]:[new U(t,n,`number expected, ${i} found`)]}function Sc(e){let t=e.valueSpec,n=_c(e.value.type),r,i={},a,o,s=n!==`categorical`&&e.value.property===void 0,c=!s,l=bs(e.value.stops)===`array`&&bs(e.value.stops[0])===`array`&&bs(e.value.stops[0][0])===`object`,u=yc({key:e.key,value:e.value,valueSpec:e.styleSpec.function,validateSpec:e.validateSpec,style:e.style,styleSpec:e.styleSpec,objectElementValidators:{stops:d,default:m}});return n===`identity`&&s&&u.push(new U(e.key,e.value,`missing required property "property"`)),n!==`identity`&&!e.value.stops&&u.push(new U(e.key,e.value,`missing required property "stops"`)),n===`exponential`&&e.valueSpec.expression&&!_s(e.valueSpec)&&u.push(new U(e.key,e.value,`exponential functions not supported`)),e.styleSpec.$version>=8&&(c&&!hs(e.valueSpec)?u.push(new U(e.key,e.value,`property functions not supported`)):s&&!gs(e.valueSpec)&&u.push(new U(e.key,e.value,`zoom functions not supported`))),(n===`categorical`||l)&&e.value.property===void 0&&u.push(new U(e.key,e.value,`"property" property is required`)),u;function d(e){if(n===`identity`)return[new U(e.key,e.value,`identity function may not have a "stops" property`)];let t=[],r=e.value;return t=t.concat(bc({key:e.key,value:r,valueSpec:e.valueSpec,validateSpec:e.validateSpec,style:e.style,styleSpec:e.styleSpec,arrayElementValidator:f})),bs(r)===`array`&&r.length===0&&t.push(new U(e.key,r,`array must have at least one stop`)),t}function f(e){let n=[],r=e.value,s=e.key;if(bs(r)!==`array`)return[new U(s,r,`array expected, ${bs(r)} found`)];if(r.length!==2)return[new U(s,r,`array length 2 expected, length ${r.length} found`)];if(l){if(bs(r[0])!==`object`)return[new U(s,r,`object expected, ${bs(r[0])} found`)];if(r[0].zoom===void 0)return[new U(s,r,`object stop key must have zoom`)];if(r[0].value===void 0)return[new U(s,r,`object stop key must have value`)];if(o&&o>_c(r[0].zoom))return[new U(s,r[0].zoom,`stop zoom values must appear in ascending order`)];_c(r[0].zoom)!==o&&(o=_c(r[0].zoom),a=void 0,i={}),n=n.concat(yc({key:`${s}[0]`,value:r[0],valueSpec:{zoom:{}},validateSpec:e.validateSpec,style:e.style,styleSpec:e.styleSpec,objectElementValidators:{zoom:xc,value:p}}))}else n=n.concat(p({key:`${s}[0]`,value:r[0],valueSpec:{},validateSpec:e.validateSpec,style:e.style,styleSpec:e.styleSpec},r));return Ls(vc(r[1]))?n.concat([new U(`${s}[1]`,r[1],`expressions are not allowed in function stops.`)]):n.concat(e.validateSpec({key:`${s}[1]`,value:r[1],valueSpec:t,validateSpec:e.validateSpec,style:e.style,styleSpec:e.styleSpec}))}function p(e,o){let s=bs(e.value),c=_c(e.value),l=e.value===null?o:e.value;if(!r)r=s;else if(s!==r)return[new U(e.key,l,`${s} stop domain type must match previous stop domain type ${r}`)];if(s!==`number`&&s!==`string`&&s!==`boolean`)return[new U(e.key,l,`stop domain value must be a number, string, or boolean`)];if(s!==`number`&&n!==`categorical`){let r=`number expected, ${s} found`;return hs(t)&&n===void 0&&(r+='\nIf you intended to use a categorical function, specify `"type": "categorical"`.'),[new U(e.key,l,r)]}return n===`categorical`&&s===`number`&&(!isFinite(c)||Math.floor(c)!==c)?[new U(e.key,l,`integer expected, found ${c}`)]:n!==`categorical`&&s===`number`&&a!==void 0&&cnew U(`${e.key}${t.key}`,e.value,t.message));let n=t.value.expression||t.value._styleExpression.expression;if(e.expressionContext===`property`&&e.propertyKey===`text-font`&&!n.outputDefined())return[new U(e.key,e.value,`Invalid data expression for "${e.propertyKey}". Output values must be contained as literals within the expression.`)];if(e.expressionContext===`property`&&e.propertyType===`layout`&&!ps(n))return[new U(e.key,e.value,`"feature-state" data expressions are not supported with layout properties.`)];if(e.expressionContext===`filter`&&!ps(n))return[new U(e.key,e.value,`"feature-state" data expressions are not supported with filters.`)];if(e.expressionContext&&e.expressionContext.indexOf(`cluster`)===0){if(!ms(n,[`zoom`,`feature-state`]))return[new U(e.key,e.value,`"zoom" and "feature-state" expressions are not supported with cluster properties.`)];if(e.expressionContext===`cluster-initial`&&!fs(n))return[new U(e.key,e.value,`Feature data expressions are not supported with initial expression part of cluster properties.`)]}return[]}function wc(e){let t=e.value,n=e.key,r=bs(t);return r===`boolean`?[]:[new U(n,t,`boolean expected, ${r} found`)]}function Tc(e){let t=e.key,n=e.value,r=bs(n);return r===`string`?Ni.parse(String(n))?[]:[new U(t,n,`color expected, "${n}" found`)]:[new U(t,n,`color expected, ${r} found`)]}function Ec(e){let t=e.key,n=e.value,r=e.valueSpec,i=[];return Array.isArray(r.values)?r.values.indexOf(_c(n))===-1&&i.push(new U(t,n,`expected one of [${r.values.join(`, `)}], ${JSON.stringify(n)} found`)):Object.keys(r.values).indexOf(_c(n))===-1&&i.push(new U(t,n,`expected one of [${Object.keys(r.values).join(`, `)}], ${JSON.stringify(n)} found`)),i}function Dc(e,t){let n=e;for(let e of t)n=n[e];return n}function Oc(e,t){let n=rc(t);return n?[new U(`${e.key}${n.path.map(e=>`[${e}]`).join(``)}`,Dc(e.value,n.path),tc(n.legacyFilter),null,`warning`)]:[]}function kc(e){let t=vc(e.value);return Qs(t)?[...Oc(e,t),...Cc(ys({},e,{expressionContext:`filter`,valueSpec:{value:`boolean`}}))]:Ac(e)}function Ac(e){let t=e.value,n=e.key;if(bs(t)!==`array`)return[new U(n,t,`array expected, ${bs(t)} found`)];let r=e.styleSpec,i,a=[];if(t.length<1)return[new U(n,t,`filter array must have at least 1 element`)];switch(a=a.concat(Ec({key:`${n}[0]`,value:t[0],valueSpec:r.filter_operator,style:e.style,styleSpec:e.styleSpec})),_c(t[0])){case`<`:case`<=`:case`>`:case`>=`:t.length>=2&&_c(t[1])===`$type`&&a.push(new U(n,t,`"$type" cannot be use with operator "${t[0]}"`));case`==`:case`!=`:t.length!==3&&a.push(new U(n,t,`filter array for operator "${t[0]}" must have 3 elements`));case`in`:case`!in`:t.length>=2&&(i=bs(t[1]),i!==`string`&&a.push(new U(`${n}[1]`,t[1],`string expected, ${i} found`)));for(let o=2;o{e in n&&t.push(new U(r,n[e],`"${e}" is prohibited for ref layers`))});let e;i.layers.forEach(t=>{_c(t.id)===s&&(e=t)}),e?e.ref?t.push(new U(r,n.ref,`ref cannot reference another ref layer`)):o=_c(e.type):t.push(new U(r,n.ref,`ref layer "${s}" not found`))}else if(o!==`background`){if(!n.source)t.push(new U(r,n,`missing required property "source"`));else{let e=i.sources&&i.sources[n.source],a=e&&_c(e.type);e?a===`vector`&&o===`raster`?t.push(new U(r,n.source,`layer "${n.id}" requires a raster source`)):a!==`raster-dem`&&o===`hillshade`||a!==`raster-dem`&&o===`color-relief`?t.push(new U(r,n.source,`layer "${n.id}" requires a raster-dem source`)):a===`raster`&&o!==`raster`?t.push(new U(r,n.source,`layer "${n.id}" requires a vector source`)):a===`vector`&&!n[`source-layer`]?t.push(new U(r,n,`layer "${n.id}" must specify a "source-layer"`)):a===`raster-dem`&&o!==`hillshade`&&o!==`color-relief`?t.push(new U(r,n.source,`raster-dem source can only be used with layer type 'hillshade' or 'color-relief'.`)):o===`line`&&n.paint&&n.paint[`line-gradient`]&&(a!==`geojson`||!e.lineMetrics)&&t.push(new U(r,n,`layer "${n.id}" specifies a line-gradient, which requires a GeoJSON source with \`lineMetrics\` enabled.`)):t.push(new U(r,n.source,`source "${n.source}" not found`))}}return o===`raster`&&n.paint?.resampling&&n.paint?.[`raster-resampling`]&&t.push(new U(r,n.paint,`layer "${n.id}" redundantly specifies "resampling" and "raster-resampling" paint properties, but only one is allowed. It is advised to use "resampling".`)),t=t.concat(yc({key:r,value:n,valueSpec:a.layer,style:e.style,styleSpec:e.styleSpec,validateSpec:e.validateSpec,objectElementValidators:{"*"(){return[]},type(){return e.validateSpec({key:`${r}.type`,value:n.type,valueSpec:a.layer.type,style:e.style,styleSpec:e.styleSpec,validateSpec:e.validateSpec,object:n,objectKey:`type`})},filter:kc,layout(e){return yc({layer:n,key:e.key,value:e.value,style:e.style,styleSpec:e.styleSpec,validateSpec:e.validateSpec,objectElementValidators:{"*"(e){return Nc(ys({layerType:o},e))}}})},paint(e){return yc({layer:n,key:e.key,value:e.value,style:e.style,styleSpec:e.styleSpec,validateSpec:e.validateSpec,objectElementValidators:{"*"(e){return Mc(ys({layerType:o},e))}}})}}})),t}function Fc(e){let t=e.value,n=e.key,r=bs(t);return r===`string`?[]:[new U(n,t,`string expected, ${r} found`)]}function Ic(e){let t=e.sourceName??``,n=e.value,r=e.styleSpec,i=r.source_raster_dem,a=e.style,o=[],s=bs(n);if(n===void 0)return o;if(s!==`object`)return o.push(new U(`source_raster_dem`,n,`object expected, ${s} found`)),o;let c=_c(n.encoding)===`custom`,l=[`redFactor`,`greenFactor`,`blueFactor`,`baseShift`],u=e.value.encoding?`"${e.value.encoding}"`:`Default`;for(let s in n)!c&&l.includes(s)?o.push(new U(s,n[s],`In "${t}": "${s}" is only valid when "encoding" is set to "custom". ${u} encoding found`)):i[s]?o=o.concat(e.validateSpec({key:s,value:n[s],valueSpec:i[s],validateSpec:e.validateSpec,style:a,styleSpec:r})):o.push(new U(s,n[s],`unknown property "${s}"`));return o}var Lc={promoteId:zc};function Rc(e){let t=e.value,n=e.key,r=e.styleSpec,i=e.style,a=e.validateSpec;if(!t.type)return[new U(n,t,`"type" is required`)];let o=_c(t.type),s;switch(o){case`vector`:case`raster`:return s=yc({key:n,value:t,valueSpec:r[`source_${o.replace(`-`,`_`)}`],style:e.style,styleSpec:r,objectElementValidators:Lc,validateSpec:a}),s;case`raster-dem`:return s=Ic({sourceName:n,value:t,style:e.style,styleSpec:r,validateSpec:a}),s;case`geojson`:if(s=yc({key:n,value:t,valueSpec:r.source_geojson,style:i,styleSpec:r,validateSpec:a,objectElementValidators:Lc}),t.cluster)for(let e in t.clusterProperties){let[r,i]=t.clusterProperties[e],o=typeof r==`string`?[r,[`accumulated`],[`get`,e]]:r;s.push(...Cc({key:`${n}.${e}.map`,value:i,validateSpec:a,expressionContext:`cluster-map`})),s.push(...Cc({key:`${n}.${e}.reduce`,value:o,validateSpec:a,expressionContext:`cluster-reduce`}))}return s;case`video`:return yc({key:n,value:t,valueSpec:r.source_video,style:i,validateSpec:a,styleSpec:r});case`image`:return yc({key:n,value:t,valueSpec:r.source_image,style:i,validateSpec:a,styleSpec:r});case`canvas`:return[new U(n,null,`Please use runtime APIs to add canvas sources, rather than including them in stylesheets.`,`source.canvas`)];default:return Ec({key:`${n}.type`,value:t.type,valueSpec:{values:[`vector`,`raster`,`raster-dem`,`geojson`,`video`,`image`]},style:i,validateSpec:a,styleSpec:r})}}function zc({key:e,value:t}){if(bs(t)===`string`)return Fc({key:e,value:t});{let n=[];for(let r in t)n.push(...Fc({key:`${e}.${r}`,value:t[r]}));return n}}function Bc(e){let t=e.value,n=e.styleSpec,r=n.light,i=e.style,a=[],o=bs(t);if(t===void 0)return a;if(o!==`object`)return a=a.concat([new U(`light`,t,`object expected, ${o} found`)]),a;for(let o in t){let s=o.match(vs);a=s&&r[s[1]]&&r[s[1]].transition?a.concat(e.validateSpec({key:o,value:t[o],valueSpec:n.transition,validateSpec:e.validateSpec,style:i,styleSpec:n})):r[o]?a.concat(e.validateSpec({key:o,value:t[o],valueSpec:r[o],validateSpec:e.validateSpec,style:i,styleSpec:n})):a.concat([new U(o,t[o],`unknown property "${o}"`)])}return a}function Vc(e){let t=e.value,n=e.styleSpec,r=n.sky,i=e.style,a=bs(t);if(t===void 0)return[];if(a!==`object`)return[new U(`sky`,t,`object expected, ${a} found`)];let o=[];for(let a in t){let s=a.match(vs);o=s&&r[s[1]]&&r[s[1]].transition?o.concat(e.validateSpec({key:a,value:t[a],valueSpec:n.transition,style:i,styleSpec:n})):r[a]?o.concat(e.validateSpec({key:a,value:t[a],valueSpec:r[a],style:i,styleSpec:n})):o.concat([new U(a,t[a],`unknown property "${a}"`)])}return o}function Hc(e){let t=e.value,n=e.styleSpec,r=n.terrain,i=e.style,a=[],o=bs(t);if(t===void 0)return a;if(o!==`object`)return a=a.concat([new U(`terrain`,t,`object expected, ${o} found`)]),a;for(let o in t)a=r[o]?a.concat(e.validateSpec({key:o,value:t[o],valueSpec:r[o],validateSpec:e.validateSpec,style:i,styleSpec:n})):a.concat([new U(o,t[o],`unknown property "${o}"`)]);return a}function Uc(e){return Fc(e).length===0?[]:Cc(e)}function Wc(e){return Fc(e).length===0?[]:Cc(e)}function Gc(e){let t=e.key,n=e.value;if(bs(n)===`array`){if(n.length<1||n.length>4)return[new U(t,n,`padding requires 1 to 4 values; ${n.length} values found`)];let r={type:`number`},i=[];for(let a=0;a[new U(e,t,`invalid unicode range, expected a value such as "U+26", "U+0-10FFFF" or "U+4??"`)],i=n.match(rl);if(!i)return r();let[,a,o,s]=i;if(s!==void 0)return s.length>6?r():[];let c=parseInt(a,16),l=o===void 0?c:parseInt(o,16);return c>nl||l>nl?[new U(e,t,`unicode range is out of bounds, the maximum code point is U+10FFFF`)]:c>l?[new U(e,t,`unicode range start must not be greater than its end, but ${n} is`)]:[]}function al(e){let t=e.key??`font-faces`,n=e.value,r=e.validateSpec,i=e.styleSpec??br,a=e.style;if(!el(n))return[new U(t,n,`object expected, ${bs(n)} found`)];let o=[];for(let e in n){let s=n[e],c=bs(s);if(c===`string`)o.push(...Fc({key:`${t}.${e}`,value:s}));else if(c===`array`){let n={url:{type:`string`,required:!0},"unicode-range":{type:`array`,value:`string`}};for(let[c,l]of s.entries()){let s=`${t}.${e}[${c}]`;o.push(...yc({key:s,value:l,valueSpec:n,styleSpec:i,style:a,validateSpec:r}));let u=el(l)?l[`unicode-range`]:void 0;if(bs(u)===`array`)for(let[e,t]of u.entries())o.push(...il(`${s}.unicode-range[${e}]`,t))}}else o.push(new U(`${t}.${e}`,s,`string or array expected, ${c} found`))}return o}var ol={"*"(){return[]},array:bc,boolean:wc,number:xc,color:Tc,constants:gc,enum:Ec,filter:kc,function:Sc,layer:Pc,object:yc,source:Rc,light:Bc,sky:Vc,terrain:Hc,projection:Xc,projectionDefinition:Zc,string:Fc,formatted:Uc,resolvedImage:Wc,padding:Gc,numberArray:Kc,colorArray:qc,variableAnchorOffsetCollection:Jc,sprite:Yc,state:tl,fontFaces:al};function sl(e){let t=e.value,n=e.valueSpec,r=e.styleSpec;return e.validateSpec=sl,n.expression&&xs(_c(t))?Sc(e):n.expression&&Ls(vc(t))?Cc(e):n.type&&ol[n.type]?ol[n.type](e):yc(ys({},e,{valueSpec:n.type?r[n.type]:n}))}function cl(e){let t=e.value,n=e.key,r=Fc(e);return r.length||(t.indexOf(`{fontstack}`)===-1&&r.push(new U(n,t,`"glyphs" url must include a "{fontstack}" token`)),t.indexOf(`{range}`)===-1&&r.push(new U(n,t,`"glyphs" url must include a "{range}" token`))),r}function ll(e,t=H){let n=[];return n=n.concat(sl({key:``,value:e,valueSpec:t.$root,styleSpec:t,style:e,validateSpec:sl,objectElementValidators:{glyphs:cl,"*"(){return[]}}})),e.constants&&(n=n.concat(gc({key:`constants`,value:e.constants,style:e,styleSpec:t,validateSpec:sl}))),dl(n)}ll.source=fl(ul(Rc)),ll.sprite=fl(ul(Yc)),ll.glyphs=fl(ul(cl)),ll.fontFaces=fl(ul(al)),ll.light=fl(ul(Bc)),ll.sky=fl(ul(Vc)),ll.terrain=fl(ul(Hc)),ll.state=fl(ul(tl)),ll.layer=fl(ul(Pc)),ll.filter=fl(ul(kc)),ll.paintProperty=fl(ul(Mc)),ll.layoutProperty=fl(ul(Nc));function ul(e){return function(t){return e(Object.assign({},t,{validateSpec:sl}))}}function dl(e){return[].concat(e).sort((e,t)=>e.line-t.line)}function fl(e){return function(...t){return dl(e.apply(this,t))}}var pl={type:`enum`,"property-type":`data-constant`,expression:{interpolated:!1,parameters:[`global-state`]},values:{visible:{},none:{}},transition:!1,default:`visible`},ml=class{constructor(e,t,n){this._rootKey=t,this._globalState=n,this.setValue(e)}evaluate(){return this._literalValue??this._compiledValue.evaluate({})}setValue(e){if(e==null||e===`visible`||e===`none`){this._literalValue=e===`none`?`none`:`visible`,this._compiledValue=void 0,this._globalStateRefs=new Set;return}let t=Rs(e,this._rootKey,pl,this._globalState);if(t.result===`error`)throw this._literalValue=`visible`,this._compiledValue=void 0,Error(t.value.map(e=>`${e.key}: ${e.message}`).join(`, `));this._literalValue=void 0,this._compiledValue=t.value,this._globalStateRefs=Ks(t.value.expression)}getGlobalStateRefs(){return this._globalStateRefs}};function hl(e,t,n){return new ml(e,t,n)}var gl=ll,_l=new Set(Object.keys(H).filter(e=>e.startsWith(`source_`)).map(e=>e.slice(7).replaceAll(`_`,`-`)));function vl(e){return Object.entries(e.sources??{}).filter(([,e])=>!_l.has(e.type)).map(([e])=>`sources.${e}`)}function yl(e,t){let n=vl(t);return bl(e,gl(t).filter(({message:e})=>!n.some(t=>e.startsWith(`${t}:`)||e.startsWith(`${t}.`))))}function bl(e,t){let n=!1;for(let r of t)r.severity===`warning`?$t(r.message):(e.fire(new B(Error(r.message))),n=!0);return n}function xl(e,t,n,r){return r?.validate!==!1&&bl(e,t({styleSpec:H,...n}))}var Sl=class e{constructor(e,t,n){let r=this.cells=[];if(e instanceof ArrayBuffer){this.arrayBuffer=e;let i=new Int32Array(this.arrayBuffer);e=i[0],t=i[1],n=i[2],this.d=t+2*n;for(let e=0;e=l[c+0]&&r>=l[c+1])?(o[u]=!0,a.push(i[u])):o[u]=!1}}}_forEachCell(e,t,n,r,i,a,o,s){let c=this._convertToCellCoord(e),l=this._convertToCellCoord(t),u=this._convertToCellCoord(n),d=this._convertToCellCoord(r);for(let f=c;f<=u;f++)for(let c=l;c<=d;c++){let l=this.d*c+f;if((!s||s(this._convertFromCellCoord(f),this._convertFromCellCoord(c),this._convertFromCellCoord(f+1),this._convertFromCellCoord(c+1)))&&i.call(this,e,t,n,r,l,a,o,s))return}}_convertFromCellCoord(e){return(e-this.padding)/this.scale}_convertToCellCoord(e){return Math.max(0,Math.min(this.d-1,Math.floor(e*this.scale)+this.padding))}toArrayBuffer(){if(this.arrayBuffer)return this.arrayBuffer;let e=this.cells,t=3+this.cells.length+1+1,n=0;for(let e of this.cells)n+=e.length;let r=new Int32Array(t+n+this.keys.length+this.bboxes.length);r[0]=this.extent,r[1]=this.n,r[2]=this.padding;let i=t;for(let t=0;tn?(this.lastIntegerZoom=n+1,this.lastIntegerZoomTime=t):this.lastFloorZoomthis.zoomHistory.lastIntegerZoom?{fromScale:2,toScale:1,t:t+(1-t)*n}:{fromScale:.5,toScale:1,t:1-(1-n)*t}}},Ml=class{constructor(e,t,n,r){this.property=e,this.value=t,this.expression=Ws(t===void 0?e.specification.default:t,n,e.specification,r)}isDataDriven(){return this.expression.kind===`source`||this.expression.kind===`composite`}getGlobalStateRefs(){return this.expression.globalStateRefs||new Set}readsGlobalState(e){let t=this.getGlobalStateRefs();return e.some(e=>t.has(e))}possiblyEvaluate(e,t,n){return this.property.possiblyEvaluate(this,e,t,n)}},Nl=class{constructor(e,t,n){this.property=e,this.value=new Ml(e,void 0,t,n)}transitioned(e,t){return t.value===this.value?t:new Fl(this.property,this.value,t,z({},e.transition,this.transition),e.now)}untransitioned(){return new Fl(this.property,this.value,null,{},0)}},Pl=class{constructor(e,t,n){this._properties=e,this._values=Object.create(e.defaultTransitionablePropertyValues),this._globalState=n,this._rootKey=t}_propertyRootKey(e){return`${this._rootKey}.${String(e)}`}hasProperty(e){return e in this._properties.defaultTransitionablePropertyValues}getValue(e){return Zt(this._values[e].value.value)}setValue(e,t){Object.hasOwn(this._values,e)||(this._values[e]=new Nl(this._values[e].property,this._propertyRootKey(e),this._globalState)),this._values[e].value=new Ml(this._values[e].property,t===null?void 0:Zt(t),this._propertyRootKey(e),this._globalState)}setValues(e){for(let t in e){let n=e[t];t.endsWith(`-transition`)?this.setTransition(t.slice(0,-11),n):Xt(this._values[t].value.value,n)||this.setValue(t,n)}}getTransition(e){return Zt(this._values[e].transition)}setTransition(e,t){Object.hasOwn(this._values,e)||(this._values[e]=new Nl(this._values[e].property,this._propertyRootKey(e),this._globalState)),this._values[e].transition=Zt(t)||void 0}retainPriorGlobalState(e,t,n){for(let r of Object.keys(n._values))for(let i=n._values[r];i;i=i.prior){let{value:n}=i;n.property.specification.transition&&!n.isDataDriven()&&n.expression._globalState===this._globalState&&n.readsGlobalState(e)&&(i.value=new Ml(n.property,n.value,this._propertyRootKey(r),t))}}applyGlobalStateChange(e,t,n,r){this.retainPriorGlobalState(e,t,n);let i=!1;for(let t of Object.keys(this._values)){let{value:n}=this._values[t];n.readsGlobalState(e)&&(this.setValue(t,n.value),i=!0)}return i?this.transitioned(r,n):n}serialize(){let e={};for(let t of Object.keys(this._values)){let n=this.getValue(t);n!==void 0&&(e[t]=n);let r=this.getTransition(t);r!==void 0&&(e[`${t}-transition`]=r)}return e}transitioned(e,t){let n=new Il(this._properties);for(let r of Object.keys(this._values))n._values[r]=this._values[r].transitioned(e,t._values[r]);return n}untransitioned(){let e=new Il(this._properties);for(let t of Object.keys(this._values))e._values[t]=this._values[t].untransitioned();return e}},Fl=class{constructor(e,t,n,r,i){this.property=e,this.value=t,this.begin=i+r.delay||0,this.end=this.begin+r.duration||0,e.specification.transition&&(r.delay||r.duration)&&(this.prior=n)}possiblyEvaluate(e,t,n){let r=e.now||0,i=this.value.possiblyEvaluate(e,t,n),a=this.prior;if(!a)return i;if(r>this.end||this.value.isDataDriven())return this.prior=null,i;if(rr.zoomHistory.lastIntegerZoom?{from:e,to:t}:{from:n,to:t}}interpolate(e){return e}},Ul=class{constructor(e,t){this.specification=e,this.name=t}possiblyEvaluate(e,t,n,r){if(e.value!==void 0){if(e.expression.kind===`constant`){let i=e.expression.evaluate(t,null,{},n,r);return this._calculate(i,i,i,t)}return this._calculate(e.expression.evaluate(new jl(Math.floor(t.zoom-1),t)),e.expression.evaluate(new jl(Math.floor(t.zoom),t)),e.expression.evaluate(new jl(Math.floor(t.zoom+1),t)),t)}}_calculate(e,t,n,r){return r.zoom>r.zoomHistory.lastIntegerZoom?{from:e,to:t}:{from:n,to:t}}interpolate(e){return e}},Wl=class{constructor(e,t){this.specification=e,this.name=t}possiblyEvaluate(e,t,n,r){return!!e.expression.evaluate(t,null,{},n,r)}interpolate(){return!1}},Gl=class{constructor(e){this.properties=e,this.defaultPropertyValues={},this.defaultTransitionablePropertyValues={},this.defaultTransitioningPropertyValues={},this.defaultPossiblyEvaluatedValues={},this.overridableProperties=[];for(let t in e){let n=e[t];n.specification.overridable&&this.overridableProperties.push(t);let r=this.defaultPropertyValues[t]=new Ml(n,void 0,n.name,void 0),i=this.defaultTransitionablePropertyValues[t]=new Nl(n,n.name,void 0);this.defaultTransitioningPropertyValues[t]=i.untransitioned(),this.defaultPossiblyEvaluatedValues[t]=r.possiblyEvaluate({})}}};G(`DataDrivenProperty`,q),G(`DataConstantProperty`,K),G(`CrossFadedDataDrivenProperty`,Hl),G(`CrossFadedProperty`,Ul),G(`ColorRampProperty`,Wl);var Kl=` is a PAINT property not a LAYOUT property. Use get/setPaintProperty instead?`,ql=` is a LAYOUT property not a PAINT property. Use get/setLayoutProperty instead?`,Jl=class extends sr{constructor(e,t,n){if(super(),this.id=e.id,this.type=e.type,this._globalState=n,this._featureFilter={filter:()=>!0,needGeometry:!1,getGlobalStateRefs:()=>new Set},this._visibilityExpression=hl(this.visibility,`layers[${this.id}].layout.visibility`,n),e.type!==`custom`&&(this.metadata=e.metadata,this.minzoom=e.minzoom,this.maxzoom=e.maxzoom,e.type!==`background`&&(this.source=e.source,this.sourceLayer=e[`source-layer`],this.filter=e.filter,this._featureFilter=oc(e.filter,`layers[${this.id}].filter`,n)),t.layout&&(this._unevaluatedLayout=new Ll(t.layout,`layers[${this.id}].layout`,n)),t.paint)){this._transitionablePaint=new Pl(t.paint,`layers[${this.id}].paint`,n);for(let t in e.paint)this.setPaintProperty(t,e.paint[t],{validate:!1});for(let t in e.layout)this.setLayoutProperty(t,e.layout[t],{validate:!1});this._transitioningPaint=this._transitionablePaint.untransitioned(),this.paint=new zl(t.paint)}}setFilter(e){this.filter=e,this._featureFilter=oc(e,`layers[${this.id}].filter`,this._globalState)}getCrossfadeParameters(){return this._crossfadeParameters}getLayoutProperty(e){if(e===`visibility`)return this.visibility;if(this._transitionablePaint?.hasProperty(e))throw Error(e+Kl);if(!this._unevaluatedLayout)throw Error(`Cannot get layout property "${e}" on layer type "${this.type}" which has no layout properties.`);return this._unevaluatedLayout.getValue(e)}getLayoutAffectingGlobalStateRefs(){let e=new Set;for(let t of this._visibilityExpression.getGlobalStateRefs())e.add(t);if(this._unevaluatedLayout)for(let t in this._unevaluatedLayout._values){let n=this._unevaluatedLayout._values[t];for(let t of n.getGlobalStateRefs())e.add(t)}for(let t of this._featureFilter.getGlobalStateRefs())e.add(t);return e}getPaintAffectingGlobalStateRefs(){let e=new globalThis.Map;if(this._transitionablePaint)for(let t in this._transitionablePaint._values){let n=this._transitionablePaint._values[t].value;for(let r of n.getGlobalStateRefs()){let i=e.get(r)??[];i.push({name:t,value:n.value}),e.set(r,i)}}return e}getVisibilityAffectingGlobalStateRefs(){return this._visibilityExpression.getGlobalStateRefs()}setLayoutProperty(e,t,n={}){e===`visibility`?(this.visibility=t,this._visibilityExpression.setValue(t),this.recalculateVisibility()):this._transitionablePaint?.hasProperty(e)?this.fire(new B(Error(e+Kl))):t!=null&&this._validate(gl.layoutProperty,`layers.${this.id}.layout.${e}`,e,t,n)||this._unevaluatedLayout.setValue(e,t)}getPaintProperty(e){if(e.endsWith(`-transition`)){let t=e.slice(0,-11);if(t===`visibility`||this._unevaluatedLayout?.hasProperty(t))throw Error(e+ql);return this._transitionablePaint.getTransition(t)}if(e===`visibility`||this._unevaluatedLayout?.hasProperty(e))throw Error(e+ql);return this._transitionablePaint.getValue(e)}setPaintProperty(e,t,n={}){if(e===`visibility`||this._unevaluatedLayout?.hasProperty(e))return this.fire(new B(Error(e+ql))),!1;if(t!=null&&this._validate(gl.paintProperty,`layers.${this.id}.paint.${e}`,e,t,n))return!1;if(e.endsWith(`-transition`))return this._transitionablePaint.setTransition(e.slice(0,-11),t||void 0),!1;{let n=this._transitionablePaint._values[e],r=n.property.specification[`property-type`]===`cross-faded-data-driven`,i=n.value.isDataDriven(),a=n.value;this._transitionablePaint.setValue(e,t),this._handleSpecialPaintPropertyUpdate(e);let o=this._transitionablePaint._values[e].value;return o.isDataDriven()||i||r||this._handleOverridablePaintPropertyUpdate(e,a,o)}}_handleSpecialPaintPropertyUpdate(e){}_handleOverridablePaintPropertyUpdate(e,t,n){return!1}isHidden(e=this.minzoom,t=!1){return this.minzoom&&e<(t?Math.floor(this.minzoom):this.minzoom)||this.maxzoom&&e>=this.maxzoom?!0:this._evaluatedVisibility===`none`}updateTransitions(e){this._transitioningPaint=this._transitionablePaint.transitioned(e,this._transitioningPaint)}retainPriorGlobalState(e,t){this._transitionablePaint?.retainPriorGlobalState(e,t,this._transitioningPaint)}hasTransition(){return this._transitioningPaint.hasTransition()}recalculateVisibility(){this._evaluatedVisibility=this._visibilityExpression.evaluate()}recalculate(e,t){e.getCrossfadeParameters&&(this._crossfadeParameters=e.getCrossfadeParameters()),this._unevaluatedLayout&&(this.layout=this._unevaluatedLayout.possiblyEvaluate(e,void 0,t)),this.paint=this._transitioningPaint.possiblyEvaluate(e,void 0,t)}serialize(){let e={id:this.id,type:this.type,source:this.source,"source-layer":this.sourceLayer,metadata:this.metadata,minzoom:this.minzoom,maxzoom:this.maxzoom,filter:this.filter,layout:this._unevaluatedLayout?.serialize(),paint:this._transitionablePaint?.serialize()};return this.visibility&&(e.layout||={},e.layout.visibility=this.visibility),Yt(e,(e,t)=>e!==void 0&&!(t===`layout`&&!Object.keys(e).length)&&!(t===`paint`&&!Object.keys(e).length))}_validate(e,t,n,r,i={}){return xl(this,e,{key:t,layerType:this.type,objectKey:n,value:r},i)}is3D(){return!1}isTileClipped(){return!1}hasOffscreenPass(){return!1}resize(){}isStateDependent(){for(let e in this.paint._values){let t=this.paint.get(e);if(t instanceof Rl&&hs(t.property.specification)&&(t.value.kind===`source`||t.value.kind===`composite`)&&t.value.isStateDependent)return!0}return!1}},Yl,Xl=()=>Yl||=new Gl({"raster-opacity":new K(H.paint_raster[`raster-opacity`],`raster-opacity`),"raster-hue-rotate":new K(H.paint_raster[`raster-hue-rotate`],`raster-hue-rotate`),"raster-brightness-min":new K(H.paint_raster[`raster-brightness-min`],`raster-brightness-min`),"raster-brightness-max":new K(H.paint_raster[`raster-brightness-max`],`raster-brightness-max`),"raster-saturation":new K(H.paint_raster[`raster-saturation`],`raster-saturation`),"raster-contrast":new K(H.paint_raster[`raster-contrast`],`raster-contrast`),resampling:new K(H.paint_raster.resampling,`resampling`),"raster-resampling":new K(H.paint_raster[`raster-resampling`],`raster-resampling`),"raster-fade-duration":new K(H.paint_raster[`raster-fade-duration`],`raster-fade-duration`)}),Zl={get paint(){return Xl()}},Ql=e=>e.type===`raster`,$l=class extends Jl{constructor(e,t){super(e,Zl,t)}},eu={Int8:Int8Array,Uint8:Uint8Array,Int16:Int16Array,Uint16:Uint16Array,Int32:Int32Array,Uint32:Uint32Array,Float32:Float32Array},tu=class{constructor(e,t){this._structArray=e,this._pos1=t*this.size,this._pos2=this._pos1/2,this._pos4=this._pos1/4,this._pos8=this._pos1/8}},nu=class{constructor(){this.isTransferred=!1,this.capacity=-1,this.resize(0)}static serialize(e,t){return e._trim(),t&&(e.isTransferred=!0,t.push(e.arrayBuffer)),{length:e.length,arrayBuffer:e.arrayBuffer}}static deserialize(e){let t=Object.create(this.prototype);return t.arrayBuffer=e.arrayBuffer,t.length=e.length,t.capacity=e.arrayBuffer.byteLength/t.bytesPerElement,t._refreshViews(),t}_trim(){this.length!==this.capacity&&(this.capacity=this.length,this.arrayBuffer=this.arrayBuffer.slice(0,this.length*this.bytesPerElement),this._refreshViews())}clear(){this.length=0}resize(e){this.reserve(e),this.length=e}reserve(e){if(e>this.capacity){this.capacity=Math.max(e,Math.floor(this.capacity*5),128),this.arrayBuffer=new ArrayBuffer(this.capacity*this.bytesPerElement);let t=this.uint8;this._refreshViews(),t&&this.uint8.set(t)}}_refreshViews(){throw Error(`_refreshViews() must be implemented by each concrete StructArray layout`)}freeBufferAfterUpload(){this.arrayBuffer=new ArrayBuffer(0),this._refreshViews()}};function ru(e,t=1){let n=0,r=0;return{members:e.map(e=>{let i=iu(e.type),a=n=au(n,Math.max(t,i)),o=e.components||1;return r=Math.max(r,i),n+=i*o,{name:e.name,type:e.type,components:o,offset:a}}),size:au(n,Math.max(r,t)),alignment:t}}function iu(e){return eu[e].BYTES_PER_ELEMENT}function au(e,t){return Math.ceil(e/t)*t}var ou=class extends nu{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)}emplaceBack(e,t){let n=this.length;return this.resize(n+1),this.emplace(n,e,t)}emplace(e,t,n){let r=e*2;return this.int16[r+0]=t,this.int16[r+1]=n,e}};ou.prototype.bytesPerElement=4,G(`StructArrayLayout2i4`,ou);var su=class extends nu{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)}emplaceBack(e,t,n){let r=this.length;return this.resize(r+1),this.emplace(r,e,t,n)}emplace(e,t,n,r){let i=e*3;return this.int16[i+0]=t,this.int16[i+1]=n,this.int16[i+2]=r,e}};su.prototype.bytesPerElement=6,G(`StructArrayLayout3i6`,su);var cu=class extends nu{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)}emplaceBack(e,t,n,r){let i=this.length;return this.resize(i+1),this.emplace(i,e,t,n,r)}emplace(e,t,n,r,i){let a=e*4;return this.int16[a+0]=t,this.int16[a+1]=n,this.int16[a+2]=r,this.int16[a+3]=i,e}};cu.prototype.bytesPerElement=8,G(`StructArrayLayout4i8`,cu);var lu=class extends nu{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)}emplaceBack(e,t,n,r,i,a){let o=this.length;return this.resize(o+1),this.emplace(o,e,t,n,r,i,a)}emplace(e,t,n,r,i,a,o){let s=e*6;return this.int16[s+0]=t,this.int16[s+1]=n,this.int16[s+2]=r,this.int16[s+3]=i,this.int16[s+4]=a,this.int16[s+5]=o,e}};lu.prototype.bytesPerElement=12,G(`StructArrayLayout2i4i12`,lu);var uu=class extends nu{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.int8=new Int8Array(this.arrayBuffer)}emplaceBack(e,t,n,r,i,a,o,s){let c=this.length;return this.resize(c+1),this.emplace(c,e,t,n,r,i,a,o,s)}emplace(e,t,n,r,i,a,o,s,c){let l=e*5,u=e*10;return this.int16[l+0]=t,this.int16[l+1]=n,this.uint8[u+4]=r,this.uint8[u+5]=i,this.uint8[u+6]=a,this.uint8[u+7]=o,this.int8[u+8]=s,this.int8[u+9]=c,e}};uu.prototype.bytesPerElement=10,G(`StructArrayLayout2i4ub2b10`,uu);var du=class extends nu{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)}emplaceBack(e,t){let n=this.length;return this.resize(n+1),this.emplace(n,e,t)}emplace(e,t,n){let r=e*2;return this.float32[r+0]=t,this.float32[r+1]=n,e}};du.prototype.bytesPerElement=8,G(`StructArrayLayout2f8`,du);var fu=class extends nu{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)}emplaceBack(e,t,n,r,i,a,o,s,c,l){let u=this.length;return this.resize(u+1),this.emplace(u,e,t,n,r,i,a,o,s,c,l)}emplace(e,t,n,r,i,a,o,s,c,l,u){let d=e*10;return this.uint16[d+0]=t,this.uint16[d+1]=n,this.uint16[d+2]=r,this.uint16[d+3]=i,this.uint16[d+4]=a,this.uint16[d+5]=o,this.uint16[d+6]=s,this.uint16[d+7]=c,this.uint16[d+8]=l,this.uint16[d+9]=u,e}};fu.prototype.bytesPerElement=20,G(`StructArrayLayout10ui20`,fu);var pu=class extends nu{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)}emplaceBack(e,t,n,r,i,a,o,s){let c=this.length;return this.resize(c+1),this.emplace(c,e,t,n,r,i,a,o,s)}emplace(e,t,n,r,i,a,o,s,c){let l=e*8;return this.uint16[l+0]=t,this.uint16[l+1]=n,this.uint16[l+2]=r,this.uint16[l+3]=i,this.uint16[l+4]=a,this.uint16[l+5]=o,this.uint16[l+6]=s,this.uint16[l+7]=c,e}};pu.prototype.bytesPerElement=16,G(`StructArrayLayout8ui16`,pu);var mu=class extends nu{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)}emplaceBack(e,t,n,r,i,a,o,s,c,l,u,d,f){let p=this.length;return this.resize(p+1),this.emplace(p,e,t,n,r,i,a,o,s,c,l,u,d,f)}emplace(e,t,n,r,i,a,o,s,c,l,u,d,f,p){let m=e*14,h=e*7;return this.int16[m+0]=t,this.int16[m+1]=n,this.int16[m+2]=r,this.int16[m+3]=i,this.uint16[m+4]=a,this.uint16[m+5]=o,this.uint16[m+6]=s,this.uint16[m+7]=c,this.int16[m+8]=l,this.int16[m+9]=u,this.int16[m+10]=d,this.int16[m+11]=f,this.float32[h+6]=p,e}};mu.prototype.bytesPerElement=28,G(`StructArrayLayout4i4ui4i1f28`,mu);var hu=class extends nu{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)}emplaceBack(e,t,n){let r=this.length;return this.resize(r+1),this.emplace(r,e,t,n)}emplace(e,t,n,r){let i=e*3;return this.float32[i+0]=t,this.float32[i+1]=n,this.float32[i+2]=r,e}};hu.prototype.bytesPerElement=12,G(`StructArrayLayout3f12`,hu);var gu=class extends nu{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer)}emplaceBack(e){let t=this.length;return this.resize(t+1),this.emplace(t,e)}emplace(e,t){let n=e*1;return this.uint32[n+0]=t,e}};gu.prototype.bytesPerElement=4,G(`StructArrayLayout1ul4`,gu);var _u=class extends nu{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)}emplaceBack(e,t,n,r,i,a,o,s,c){let l=this.length;return this.resize(l+1),this.emplace(l,e,t,n,r,i,a,o,s,c)}emplace(e,t,n,r,i,a,o,s,c,l){let u=e*10,d=e*5;return this.int16[u+0]=t,this.int16[u+1]=n,this.int16[u+2]=r,this.int16[u+3]=i,this.int16[u+4]=a,this.int16[u+5]=o,this.uint32[d+3]=s,this.uint16[u+8]=c,this.uint16[u+9]=l,e}};_u.prototype.bytesPerElement=20,G(`StructArrayLayout6i1ul2ui20`,_u);var vu=class extends nu{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)}emplaceBack(e,t,n,r,i,a){let o=this.length;return this.resize(o+1),this.emplace(o,e,t,n,r,i,a)}emplace(e,t,n,r,i,a,o){let s=e*6;return this.int16[s+0]=t,this.int16[s+1]=n,this.int16[s+2]=r,this.int16[s+3]=i,this.int16[s+4]=a,this.int16[s+5]=o,e}};vu.prototype.bytesPerElement=12,G(`StructArrayLayout2i2i2i12`,vu);var yu=class extends nu{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)}emplaceBack(e,t,n,r,i){let a=this.length;return this.resize(a+1),this.emplace(a,e,t,n,r,i)}emplace(e,t,n,r,i,a){let o=e*4,s=e*8;return this.float32[o+0]=t,this.float32[o+1]=n,this.float32[o+2]=r,this.int16[s+6]=i,this.int16[s+7]=a,e}};yu.prototype.bytesPerElement=16,G(`StructArrayLayout2f1f2i16`,yu);var bu=class extends nu{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)}emplaceBack(e,t,n,r,i,a){let o=this.length;return this.resize(o+1),this.emplace(o,e,t,n,r,i,a)}emplace(e,t,n,r,i,a,o){let s=e*16,c=e*4,l=e*8;return this.uint8[s+0]=t,this.uint8[s+1]=n,this.float32[c+1]=r,this.float32[c+2]=i,this.int16[l+6]=a,this.int16[l+7]=o,e}};bu.prototype.bytesPerElement=16,G(`StructArrayLayout2ub2f2i16`,bu);var xu=class extends nu{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)}emplaceBack(e,t,n){let r=this.length;return this.resize(r+1),this.emplace(r,e,t,n)}emplace(e,t,n,r){let i=e*3;return this.uint16[i+0]=t,this.uint16[i+1]=n,this.uint16[i+2]=r,e}};xu.prototype.bytesPerElement=6,G(`StructArrayLayout3ui6`,xu);var Su=class extends nu{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)}emplaceBack(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g,_){let v=this.length;return this.resize(v+1),this.emplace(v,e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g,_)}emplace(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g,_,v){let y=e*26,b=e*13,x=e*52;return this.int16[y+0]=t,this.int16[y+1]=n,this.uint16[y+2]=r,this.uint16[y+3]=i,this.uint32[b+2]=a,this.uint32[b+3]=o,this.uint32[b+4]=s,this.uint16[y+10]=c,this.uint16[y+11]=l,this.uint16[y+12]=u,this.float32[b+7]=d,this.float32[b+8]=f,this.uint8[x+36]=p,this.uint8[x+37]=m,this.uint8[x+38]=h,this.uint32[b+10]=g,this.int16[y+22]=_,this.float32[b+12]=v,e}};Su.prototype.bytesPerElement=52,G(`StructArrayLayout2i2ui3ul3ui2f3ub1ul1i1f52`,Su);var Cu=class extends nu{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)}emplaceBack(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g,_,v,y,b,x,S,C,w,T,E,D,O){let k=this.length;return this.resize(k+1),this.emplace(k,e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g,_,v,y,b,x,S,C,w,T,E,D,O)}emplace(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g,_,v,y,b,x,S,C,w,T,E,D,O,k){let A=e*34,j=e*17;return this.int16[A+0]=t,this.int16[A+1]=n,this.int16[A+2]=r,this.int16[A+3]=i,this.int16[A+4]=a,this.int16[A+5]=o,this.int16[A+6]=s,this.int16[A+7]=c,this.uint16[A+8]=l,this.uint16[A+9]=u,this.uint16[A+10]=d,this.uint16[A+11]=f,this.uint16[A+12]=p,this.uint16[A+13]=m,this.uint16[A+14]=h,this.uint16[A+15]=g,this.uint16[A+16]=_,this.uint16[A+17]=v,this.uint16[A+18]=y,this.uint16[A+19]=b,this.uint16[A+20]=x,this.uint16[A+21]=S,this.uint16[A+22]=C,this.uint32[j+12]=w,this.float32[j+13]=T,this.float32[j+14]=E,this.uint16[A+30]=D,this.uint16[A+31]=O,this.float32[j+16]=k,e}};Cu.prototype.bytesPerElement=68,G(`StructArrayLayout8i15ui1ul2f2ui1f68`,Cu);var wu=class extends nu{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)}emplaceBack(e){let t=this.length;return this.resize(t+1),this.emplace(t,e)}emplace(e,t){let n=e*1;return this.float32[n+0]=t,e}};wu.prototype.bytesPerElement=4,G(`StructArrayLayout1f4`,wu);var Tu=class extends nu{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)}emplaceBack(e,t,n){let r=this.length;return this.resize(r+1),this.emplace(r,e,t,n)}emplace(e,t,n,r){let i=e*6,a=e*3;return this.uint16[i+0]=t,this.float32[a+1]=n,this.float32[a+2]=r,e}};Tu.prototype.bytesPerElement=12,G(`StructArrayLayout1ui2f12`,Tu);var Eu=class extends nu{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)}emplaceBack(e,t,n){let r=this.length;return this.resize(r+1),this.emplace(r,e,t,n)}emplace(e,t,n,r){let i=e*2,a=e*4;return this.uint32[i+0]=t,this.uint16[a+2]=n,this.uint16[a+3]=r,e}};Eu.prototype.bytesPerElement=8,G(`StructArrayLayout1ul2ui8`,Eu);var Du=class extends nu{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)}emplaceBack(e,t){let n=this.length;return this.resize(n+1),this.emplace(n,e,t)}emplace(e,t,n){let r=e*2;return this.uint16[r+0]=t,this.uint16[r+1]=n,e}};Du.prototype.bytesPerElement=4,G(`StructArrayLayout2ui4`,Du);var Ou=class extends nu{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)}emplaceBack(e){let t=this.length;return this.resize(t+1),this.emplace(t,e)}emplace(e,t){let n=e*1;return this.uint16[n+0]=t,e}};Ou.prototype.bytesPerElement=2,G(`StructArrayLayout1ui2`,Ou);var ku=class extends nu{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)}emplaceBack(e,t,n,r){let i=this.length;return this.resize(i+1),this.emplace(i,e,t,n,r)}emplace(e,t,n,r,i){let a=e*4;return this.float32[a+0]=t,this.float32[a+1]=n,this.float32[a+2]=r,this.float32[a+3]=i,e}};ku.prototype.bytesPerElement=16,G(`StructArrayLayout4f16`,ku);var Au=class extends tu{get anchorPointX(){return this._structArray.int16[this._pos2+0]}get anchorPointY(){return this._structArray.int16[this._pos2+1]}get x1(){return this._structArray.int16[this._pos2+2]}get y1(){return this._structArray.int16[this._pos2+3]}get x2(){return this._structArray.int16[this._pos2+4]}get y2(){return this._structArray.int16[this._pos2+5]}get featureIndex(){return this._structArray.uint32[this._pos4+3]}get sourceLayerIndex(){return this._structArray.uint16[this._pos2+8]}get bucketIndex(){return this._structArray.uint16[this._pos2+9]}get anchorPoint(){return new k(this.anchorPointX,this.anchorPointY)}};Au.prototype.size=20;var ju=class extends _u{get(e){return new Au(this,e)}};G(`CollisionBoxArray`,ju);var Mu=class extends tu{get anchorX(){return this._structArray.int16[this._pos2+0]}get anchorY(){return this._structArray.int16[this._pos2+1]}get glyphStartIndex(){return this._structArray.uint16[this._pos2+2]}get numGlyphs(){return this._structArray.uint16[this._pos2+3]}get vertexStartIndex(){return this._structArray.uint32[this._pos4+2]}get lineStartIndex(){return this._structArray.uint32[this._pos4+3]}get lineLength(){return this._structArray.uint32[this._pos4+4]}get segment(){return this._structArray.uint16[this._pos2+10]}get lowerSize(){return this._structArray.uint16[this._pos2+11]}get upperSize(){return this._structArray.uint16[this._pos2+12]}get lineOffsetX(){return this._structArray.float32[this._pos4+7]}get lineOffsetY(){return this._structArray.float32[this._pos4+8]}get writingMode(){return this._structArray.uint8[this._pos1+36]}get placedOrientation(){return this._structArray.uint8[this._pos1+37]}set placedOrientation(e){this._structArray.uint8[this._pos1+37]=e}get hidden(){return this._structArray.uint8[this._pos1+38]}set hidden(e){this._structArray.uint8[this._pos1+38]=e}get crossTileID(){return this._structArray.uint32[this._pos4+10]}set crossTileID(e){this._structArray.uint32[this._pos4+10]=e}get associatedIconIndex(){return this._structArray.int16[this._pos2+22]}get heightOffset(){return this._structArray.float32[this._pos4+12]}};Mu.prototype.size=52;var Nu=class extends Su{get(e){return new Mu(this,e)}};G(`PlacedSymbolArray`,Nu);var Pu=class extends tu{get anchorX(){return this._structArray.int16[this._pos2+0]}get anchorY(){return this._structArray.int16[this._pos2+1]}get rightJustifiedTextSymbolIndex(){return this._structArray.int16[this._pos2+2]}get centerJustifiedTextSymbolIndex(){return this._structArray.int16[this._pos2+3]}get leftJustifiedTextSymbolIndex(){return this._structArray.int16[this._pos2+4]}get verticalPlacedTextSymbolIndex(){return this._structArray.int16[this._pos2+5]}get placedIconSymbolIndex(){return this._structArray.int16[this._pos2+6]}get verticalPlacedIconSymbolIndex(){return this._structArray.int16[this._pos2+7]}get key(){return this._structArray.uint16[this._pos2+8]}get textBoxStartIndex(){return this._structArray.uint16[this._pos2+9]}get textBoxEndIndex(){return this._structArray.uint16[this._pos2+10]}get verticalTextBoxStartIndex(){return this._structArray.uint16[this._pos2+11]}get verticalTextBoxEndIndex(){return this._structArray.uint16[this._pos2+12]}get iconBoxStartIndex(){return this._structArray.uint16[this._pos2+13]}get iconBoxEndIndex(){return this._structArray.uint16[this._pos2+14]}get verticalIconBoxStartIndex(){return this._structArray.uint16[this._pos2+15]}get verticalIconBoxEndIndex(){return this._structArray.uint16[this._pos2+16]}get featureIndex(){return this._structArray.uint16[this._pos2+17]}get numHorizontalGlyphVertices(){return this._structArray.uint16[this._pos2+18]}get numVerticalGlyphVertices(){return this._structArray.uint16[this._pos2+19]}get numIconVertices(){return this._structArray.uint16[this._pos2+20]}get numVerticalIconVertices(){return this._structArray.uint16[this._pos2+21]}get useRuntimeCollisionCircles(){return this._structArray.uint16[this._pos2+22]}get crossTileID(){return this._structArray.uint32[this._pos4+12]}set crossTileID(e){this._structArray.uint32[this._pos4+12]=e}get textBoxScale(){return this._structArray.float32[this._pos4+13]}get collisionCircleDiameter(){return this._structArray.float32[this._pos4+14]}get textAnchorOffsetStartIndex(){return this._structArray.uint16[this._pos2+30]}get textAnchorOffsetEndIndex(){return this._structArray.uint16[this._pos2+31]}get heightOffset(){return this._structArray.float32[this._pos4+16]}};Pu.prototype.size=68;var Fu=class extends Cu{get(e){return new Pu(this,e)}};G(`SymbolInstanceArray`,Fu);var Iu=class extends wu{getoffsetX(e){return this.float32[e*1+0]}};G(`GlyphOffsetArray`,Iu);var Lu=class extends su{getx(e){return this.int16[e*3+0]}gety(e){return this.int16[e*3+1]}gettileUnitDistanceFromAnchor(e){return this.int16[e*3+2]}};G(`SymbolLineVertexArray`,Lu);var Ru=class extends tu{get textAnchor(){return this._structArray.uint16[this._pos2+0]}get textOffset0(){return this._structArray.float32[this._pos4+1]}get textOffset1(){return this._structArray.float32[this._pos4+2]}};Ru.prototype.size=12;var zu=class extends Tu{get(e){return new Ru(this,e)}};G(`TextAnchorOffsetArray`,zu);var Bu=class extends tu{get featureIndex(){return this._structArray.uint32[this._pos4+0]}get sourceLayerIndex(){return this._structArray.uint16[this._pos2+2]}get bucketIndex(){return this._structArray.uint16[this._pos2+3]}};Bu.prototype.size=8;var Vu=class extends Eu{get(e){return new Bu(this,e)}};G(`FeatureIndexArray`,Vu);var Hu=class extends ou{},Uu=class extends su{},Wu=class extends cu{},Gu=class extends ou{},Ku=class extends ou{},qu=class extends lu{},Ju=class extends uu{},Yu=class extends du{},Xu=class extends fu{},Zu=class extends pu{},Qu=class extends mu{},$u=class extends hu{},ed=class extends gu{},td=class extends vu{},nd=class extends yu{},rd=class extends bu{},id=class extends xu{},ad=class extends xu{},od=class extends Du{},sd=class extends Ou{},cd=ru([{name:`a_pos`,components:2,type:`Int16`}],4),ld=cd.members;cd.size,cd.alignment;var ud=class e{constructor(e=[]){this._forceNewSegmentOnNextPrepare=!1,this.segments=e}prepareSegment(t,n,r,i){let a=this.segments[this.segments.length-1];return t>e.MAX_VERTEX_ARRAY_LENGTH&&$t(`Max vertices per segment is ${e.MAX_VERTEX_ARRAY_LENGTH}: bucket requested ${t}. Consider using the \`fillLargeMeshArrays\` function if you require meshes with more than ${e.MAX_VERTEX_ARRAY_LENGTH} vertices.`),this._forceNewSegmentOnNextPrepare||!a||a.vertexLength+t>e.MAX_VERTEX_ARRAY_LENGTH||a.sortKey!==i?this.createNewSegment(n,r,i):a}createNewSegment(e,t,n){let r={vertexOffset:e.length,primitiveOffset:t.length,vertexLength:0,primitiveLength:0,vaos:{}};return n!==void 0&&(r.sortKey=n),this._forceNewSegmentOnNextPrepare=!1,this.segments.push(r),r}getOrCreateLatestSegment(e,t,n){return this.prepareSegment(0,e,t,n)}forceNewSegmentOnNextPrepare(){this._forceNewSegmentOnNextPrepare=!0}get(){return this.segments}destroy(){for(let e of this.segments)for(let t in e.vaos)e.vaos[t].destroy()}static simpleSegment(t,n,r,i){return new e([{vertexOffset:t,primitiveOffset:n,vertexLength:r,primitiveLength:i,vaos:{},sortKey:0}])}};ud.MAX_VERTEX_ARRAY_LENGTH=2**16-1,G(`SegmentVector`,ud);function dd(e,t){return e=R(Math.floor(e),0,255),t=R(Math.floor(t),0,255),256*e+t}var fd=ru([{name:`a_pattern_from`,components:4,type:`Uint16`},{name:`a_pattern_to`,components:4,type:`Uint16`},{name:`a_pixel_ratio_from`,components:1,type:`Uint16`},{name:`a_pixel_ratio_to`,components:1,type:`Uint16`}]),pd=ru([{name:`a_dasharray_from`,components:4,type:`Uint16`},{name:`a_dasharray_to`,components:4,type:`Uint16`}]),md=T(((e,t)=>{function n(e,t){for(var n=e.length&3,r=e.length-n,i=t,a,o=3432918353,s=461845907,c,l=0;l>>16)*o&65535)<<16)|0,c=c<<15|c>>>17,c=(c&65535)*s+(((c>>>16)*s&65535)<<16)|0,i^=c,i=i<<13|i>>>19,a=(i&65535)*5+(((i>>>16)*5&65535)<<16)|0,i=(a&65535)+27492+(((a>>>16)+58964&65535)<<16);switch(c=0,n){case 3:c^=(e.charCodeAt(l+2)&255)<<16;case 2:c^=(e.charCodeAt(l+1)&255)<<8;case 1:c^=e.charCodeAt(l)&255,c=(c&65535)*o+(((c>>>16)*o&65535)<<16)|0,c=c<<15|c>>>17,c=(c&65535)*s+(((c>>>16)*s&65535)<<16)|0,i^=c}return i^=e.length,i^=i>>>16,i=(i&65535)*2246822507+(((i>>>16)*2246822507&65535)<<16)|0,i^=i>>>13,i=(i&65535)*3266489909+(((i>>>16)*3266489909&65535)<<16)|0,i^=i>>>16,i>>>0}t!==void 0&&(t.exports=n)})),hd=T(((e,t)=>{function n(e,t){for(var n=e.length,r=t^n,i=0,a;n>=4;)a=e.charCodeAt(i)&255|(e.charCodeAt(++i)&255)<<8|(e.charCodeAt(++i)&255)<<16|(e.charCodeAt(++i)&255)<<24,a=(a&65535)*1540483477+(((a>>>16)*1540483477&65535)<<16),a^=a>>>24,a=(a&65535)*1540483477+(((a>>>16)*1540483477&65535)<<16),r=(r&65535)*1540483477+(((r>>>16)*1540483477&65535)<<16)^a,n-=4,++i;switch(n){case 3:r^=(e.charCodeAt(i+2)&255)<<16;case 2:r^=(e.charCodeAt(i+1)&255)<<8;case 1:r^=e.charCodeAt(i)&255,r=(r&65535)*1540483477+(((r>>>16)*1540483477&65535)<<16)}return r^=r>>>13,r=(r&65535)*1540483477+(((r>>>16)*1540483477&65535)<<16),r^=r>>>15,r>>>0}t.exports=n})),gd=D(T(((e,t)=>{var n=md(),r=hd();t.exports=n,t.exports.murmur3=n,t.exports.murmur2=r}))(),1),_d=class e{constructor(){this.ids=[],this.positions=[],this.indexed=!1}add(e,t,n,r){this.ids.push(vd(e)),this.positions.push(t,n,r)}getPositions(e){if(!this.indexed)throw Error(`Trying to get index, but feature positions are not indexed`);let t=vd(e),n=0,r=this.ids.length-1;for(;n>1;this.ids[e]>=t?r=e:n=e+1}let i=[];for(;this.ids[n]===t;){let e=this.positions[3*n],t=this.positions[3*n+1],r=this.positions[3*n+2];i.push({index:e,start:t,end:r}),n++}return i}static serialize(e,t){let n=new Float64Array(e.ids),r=new Uint32Array(e.positions);return yd(n,r,0,n.length-1),t&&t.push(n.buffer,r.buffer),{ids:n,positions:r}}static deserialize(t){let n=new e;return n.ids=t.ids,n.positions=t.positions,n.indexed=!0,n}};function vd(e){let t=+e;return!isNaN(t)&&t<=2**53-1?t:(0,gd.default)(String(e))}function yd(e,t,n,r){for(;n>1],a=n-1,o=r+1;for(;;){do a++;while(e[a]i);if(a>=o)break;bd(e,a,o),bd(t,3*a,3*o),bd(t,3*a+1,3*o+1),bd(t,3*a+2,3*o+2)}o-n`u_${e}`),this.type=n}setUniform(e,t,n){e.set(n.constantOr(this.value))}getBinding(e,t,n){return this.type===`color`?new Td(e,t):new Y(e,t)}},Md=class{constructor(e,t){this.uniformNames=t.map(e=>`u_${e}`),this.patternFrom=null,this.patternTo=null,this.pixelRatioFrom=1,this.pixelRatioTo=1}setConstantPatternPositions(e,t){this.pixelRatioFrom=t.pixelRatio,this.pixelRatioTo=e.pixelRatio,this.patternFrom=t.tlbr,this.patternTo=e.tlbr}setConstantDashPositions(e,t){this.dashTo=[0,e.y,e.height,e.width],this.dashFrom=[0,t.y,t.height,t.width]}setUniform(e,t,n,r){let i=null;r===`u_pattern_to`?i=this.patternTo:r===`u_pattern_from`?i=this.patternFrom:r===`u_dasharray_to`?i=this.dashTo:r===`u_dasharray_from`?i=this.dashFrom:r===`u_pixel_ratio_to`?i=this.pixelRatioTo:r===`u_pixel_ratio_from`&&(i=this.pixelRatioFrom),i!==null&&e.set(i)}getBinding(e,t,n){return n.startsWith(`u_pattern`)||n.startsWith(`u_dasharray_`)?new wd(e,t):new Y(e,t)}},Nd=class{constructor(e,t,n,r){this.expression=e,this.type=n,this.maxValue=0,this.paintVertexAttributes=t.map(e=>({name:`a_${e}`,type:`Float32`,components:n===`color`?2:1,offset:0})),this.paintVertexArray=new r}populatePaintArray(e,t,n){let r=this.paintVertexArray.length,i=this.expression.evaluate(new jl(0,n),t,{},n.canonical,[],n.formattedSection);this.paintVertexArray.resize(e),this._setPaintValue(r,e,i)}updatePaintArray(e,t,n,r,i){let a=this.expression.evaluate(new jl(0,i),n,r);this._setPaintValue(e,t,a)}_setPaintValue(e,t,n){if(this.type===`color`){let r=Ad(n);for(let n=e;n`u_${e}_t`),this.type=n,this.useIntegerZoom=r,this.zoom=i,this.maxValue=0,this.paintVertexAttributes=t.map(e=>({name:`a_${e}`,type:`Float32`,components:n===`color`?4:2,offset:0})),this.paintVertexArray=new a}populatePaintArray(e,t,n){let r=this.expression.evaluate(new jl(this.zoom,n),t,{},n.canonical,[],n.formattedSection),i=this.expression.evaluate(new jl(this.zoom+1,n),t,{},n.canonical,[],n.formattedSection),a=this.paintVertexArray.length;this.paintVertexArray.resize(e),this._setPaintValue(a,e,r,i)}updatePaintArray(e,t,n,r,i){let a=this.expression.evaluate(new jl(this.zoom,i),n,r),o=this.expression.evaluate(new jl(this.zoom+1,i),n,r);this._setPaintValue(e,t,a,o)}_setPaintValue(e,t,n,r){if(this.type===`color`){let i=Ad(n),a=Ad(r);for(let n=e;n`#define HAS_UNIFORM_${e}`))}return e}getBinderAttributes(){let e=[];for(let t in this.binders){let n=this.binders[t];if(n instanceof Nd||n instanceof Pd)for(let t of n.paintVertexAttributes)e.push(t.name);else if(n instanceof Fd){let t=n.getVertexAttributes();for(let n of t)e.push(n.name)}}return e}getBinderUniforms(){let e=[];for(let t in this.binders){let n=this.binders[t];if(n instanceof jd||n instanceof Md||n instanceof Pd)for(let t of n.uniformNames)e.push(t)}return e}getPaintVertexBuffers(){return this._buffers}getUniforms(e,t){let n=[];for(let r in this.binders){let i=this.binders[r];if(i instanceof jd||i instanceof Md||i instanceof Pd){for(let a of i.uniformNames)if(t[a]){let o=i.getBinding(e,t[a],a);n.push({name:a,property:r,binding:o})}}}return n}setUniforms(e,t,n,r){for(let{name:e,property:i,binding:a}of t)this.binders[i].setUniform(a,r,n.get(i),e)}updatePaintBuffers(e){this._buffers=[];for(let t in this.binders){let n=this.binders[t];if(e&&n instanceof Fd){let t=e.fromScale===2?n.zoomInPaintVertexBuffer:n.zoomOutPaintVertexBuffer;t&&this._buffers.push(t)}else(n instanceof Nd||n instanceof Pd)&&n.paintVertexBuffer&&this._buffers.push(n.paintVertexBuffer)}}upload(e){for(let t in this.binders){let n=this.binders[t];(n instanceof Nd||n instanceof Pd||n instanceof Fd)&&n.upload(e)}this.updatePaintBuffers()}destroy(){for(let e in this.binders){let t=this.binders[e];(t instanceof Nd||t instanceof Pd||t instanceof Fd)&&t.destroy()}}},zd=class{constructor(e,t,n=()=>!0){this.programConfigurations={};for(let r of e)this.programConfigurations[r.id]=new Rd(r,t,n);this.needsUpload=!1,this._featureMap=new _d,this._bufferOffset=0}populatePaintArrays(e,t,n,r){for(let n in this.programConfigurations)this.programConfigurations[n].populatePaintArrays(e,t,r);t.id!==void 0&&this._featureMap.add(t.id,n,this._bufferOffset,e),this._bufferOffset=e,this.needsUpload=!0}updatePaintArrays(e,t,n,r){for(let i of n)this.needsUpload=this.programConfigurations[i.id].updatePaintArrays(e,this._featureMap,t,i,r)||this.needsUpload}get(e){return this.programConfigurations[e]}upload(e){if(this.needsUpload){for(let t in this.programConfigurations)this.programConfigurations[t].upload(e);this.needsUpload=!1}}destroy(){for(let e in this.programConfigurations)this.programConfigurations[e].destroy()}};function Bd(e,t){return{"text-opacity":[`opacity`],"icon-opacity":[`opacity`],"text-color":[`fill_color`],"icon-color":[`fill_color`],"text-halo-color":[`halo_color`],"icon-halo-color":[`halo_color`],"text-halo-blur":[`halo_blur`],"icon-halo-blur":[`halo_blur`],"text-halo-width":[`halo_width`],"icon-halo-width":[`halo_width`],"line-gap-width":[`gapwidth`],"line-dasharray":[`dasharray_to`,`dasharray_from`],"line-pattern":[`pattern_to`,`pattern_from`,`pixel_ratio_to`,`pixel_ratio_from`],"fill-pattern":[`pattern_to`,`pattern_from`,`pixel_ratio_to`,`pixel_ratio_from`],"fill-extrusion-pattern":[`pattern_to`,`pattern_from`,`pixel_ratio_to`,`pixel_ratio_from`]}[e]||[e.replace(`${t}-`,``).replace(/-/g,`_`)]}function Vd(e){return{"line-pattern":{source:Xu,composite:Xu},"fill-pattern":{source:Xu,composite:Xu},"fill-extrusion-pattern":{source:Xu,composite:Xu},"line-dasharray":{source:Zu,composite:Zu}}[e]}function Hd(e,t,n){let r={color:{source:du,composite:ku},number:{source:wu,composite:du}};return Vd(e)?.[n]||r[t][n]}G(`ConstantBinder`,jd),G(`CrossFadedConstantBinder`,Md),G(`SourceExpressionBinder`,Nd),G(`CrossFadedPatternBinder`,Id),G(`CrossFadedDasharrayBinder`,Ld),G(`CompositeExpressionBinder`,Pd),G(`ProgramConfiguration`,Rd,{omit:[`_buffers`]}),G(`ProgramConfigurationSet`,zd);var Ud=2**14-1,Wd=-Ud-1;function Gd(e){let t=L/e.extent,n=e.loadGeometry();for(let e of n)for(let n of e){let e=Math.round(n.x*t),r=Math.round(n.y*t);n.x=R(e,Wd,Ud),n.y=R(r,Wd,Ud),(en.x+1||rn.y+1)&&$t(`Geometry exceeds allowed extent, reduce your vector tile buffer size`)}return n}function Kd(e,t){return{type:e.type,id:e.id,properties:e.properties,geometry:t?Gd(e):[]}}var qd=-32768;function Jd(e,t,n,r,i){e.emplaceBack(qd+t*8+r,qd+n*8+i)}var Yd=class{constructor(e){this.zoom=e.zoom,this.overscaling=e.overscaling,this.layers=e.layers,this.layerIds=this.layers.map(e=>e.id),this.index=e.index,this.hasDependencies=!1,this.layoutVertexArray=new Gu,this.indexArray=new ad,this.segments=new ud,this.programConfigurations=new zd(e.layers,e.zoom),this.stateDependentLayerIds=this.layers.filter(e=>e.isStateDependent()).map(e=>e.id)}populate(e,t,n){let r=this.layers[0],i=[],a=null,o=!1,s=r.type===`heatmap`;if(r.type===`circle`){let e=r;a=e.layout.get(`circle-sort-key`),o=!a.isConstant(),s||=e.paint.get(`circle-pitch-alignment`)===`map`}let c=s?t.subdivisionGranularity.circle:1,l=new jl(this.zoom),u=this.layers[0]._featureFilter.needGeometry;for(let{feature:t,id:r,index:s,sourceLayerIndex:c}of e){let e=Kd(t,u);if(!this.layers[0]._featureFilter.filter(l,e,n))continue;let d=o?a.evaluate(e,{},n):void 0,f={id:r,properties:t.properties,type:t.type,sourceLayerIndex:c,index:s,geometry:u?e.geometry:Gd(t),patterns:{},sortKey:d};i.push(f)}o&&i.sort((e,t)=>e.sortKey-t.sortKey);for(let r of i){let{geometry:i,index:a,sourceLayerIndex:o}=r,s=e[a].feature;this.addFeature(r,i,a,n,c),t.featureIndex.insert(s,i,a,o,this.index)}}update(e,t,n){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(e,t,this.stateDependentLayers,{imagePositions:n})}addFeatures(e){}isEmpty(){return this.layoutVertexArray.length===0}uploadPending(){return!this.uploaded||this.programConfigurations.needsUpload}upload(e){this.uploaded||(this.layoutVertexBuffer=e.createVertexBuffer(this.layoutVertexArray,ld),this.indexBuffer=e.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(e),this.uploaded=!0}destroy(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy())}addFeature(e,t,n,r,i=1){let a;switch(i){case 1:a=[0,7];break;case 3:a=[0,2,5,7];break;case 5:a=[0,1,3,4,6,7];break;case 7:a=[0,1,2,3,4,5,6,7];break;default:throw Error(`Invalid circle bucket granularity: ${i}; valid values are 1, 3, 5, 7.`)}let o=a.length;for(let n of t)for(let t of n){let n=t.x,r=t.y;if(n<0||n>=8192||r<0||r>=8192)continue;let i=this.segments.prepareSegment(o*o,this.layoutVertexArray,this.indexArray,e.sortKey),s=i.vertexLength;for(let e=0;e=3){for(let t of r)if(sf(e,t))return!0}if(ef(e,r,n))return!0}return!1}function ef(e,t,n){if(e.length>1){if(tf(e,t))return!0;for(let r of t)if(rf(r,e,n))return!0}for(let r of e)if(rf(r,t,n))return!0;return!1}function tf(e,t){if(e.length===0||t.length===0)return!1;for(let n=0;n1?e.distSqr(n):e.distSqr(n.sub(t)._mult(i)._add(t))}function of(e,t){let n=!1,r,i,a;for(let o of e){r=o;for(let e=0,o=r.length-1;et.y!=a.y>t.y&&t.x<(a.x-i.x)*(t.y-i.y)/(a.y-i.y)+i.x&&(n=!n)}return n}function sf(e,t){let n=!1;for(let r=0,i=e.length-1;rt.y!=o.y>t.y&&t.x<(o.x-a.x)*(t.y-a.y)/(o.y-a.y)+a.x&&(n=!n)}return n}function cf(e,t,n,r,i){for(let a of e)if(t<=a.x&&n<=a.y&&r>=a.x&&i>=a.y)return!0;let a=[new k(t,n),new k(t,i),new k(r,i),new k(r,n)];if(e.length>2){for(let t of a)if(sf(e,t))return!0}for(let t=0;ti.x&&t.x>i.x||e.yi.y&&t.y>i.y)return!1;let a=en(e,t,n[0]);return a!==en(e,t,n[1])||a!==en(e,t,n[2])||a!==en(e,t,n[3])}function uf(e,t,n){let r=t.paint.get(e).value;return r.kind===`constant`?r.value:n.programConfigurations.get(t.id).getMaxValue(e)}function df(e){return Math.sqrt(e[0]*e[0]+e[1]*e[1])}function ff(e,t,n,r,i){if(!t[0]&&!t[1])return e;let a=k.convert(t)._mult(i);n===`viewport`&&a._rotate(-r);let o=[];for(let t of e)o.push(t.sub(a));return o}function pf(e){let t=[];for(let n=0;nbf(e,t,n,r))}var Sf,Cf=()=>Sf||=new Gl({"circle-sort-key":new q(H.layout_circle[`circle-sort-key`],`circle-sort-key`)}),wf,Tf=()=>wf||=new Gl({"circle-radius":new q(H.paint_circle[`circle-radius`],`circle-radius`),"circle-color":new q(H.paint_circle[`circle-color`],`circle-color`),"circle-blur":new q(H.paint_circle[`circle-blur`],`circle-blur`),"circle-opacity":new q(H.paint_circle[`circle-opacity`],`circle-opacity`),"circle-translate":new K(H.paint_circle[`circle-translate`],`circle-translate`),"circle-translate-anchor":new K(H.paint_circle[`circle-translate-anchor`],`circle-translate-anchor`),"circle-pitch-scale":new K(H.paint_circle[`circle-pitch-scale`],`circle-pitch-scale`),"circle-pitch-alignment":new K(H.paint_circle[`circle-pitch-alignment`],`circle-pitch-alignment`),"circle-stroke-width":new q(H.paint_circle[`circle-stroke-width`],`circle-stroke-width`),"circle-stroke-color":new q(H.paint_circle[`circle-stroke-color`],`circle-stroke-color`),"circle-stroke-opacity":new q(H.paint_circle[`circle-stroke-opacity`],`circle-stroke-opacity`)}),Ef={get paint(){return Tf()},get layout(){return Cf()}},Df=e=>e.type===`circle`,Of=class extends Jl{constructor(e,t){super(e,Ef,t)}createBucket(e){return new Yd(e)}queryRadius(e){let t=e;return uf(`circle-radius`,this,t)+uf(`circle-stroke-width`,this,t)+df(this.paint.get(`circle-translate`))}queryIntersectsFeature({queryGeometry:e,feature:t,featureState:n,geometry:r,transform:i,pixelsToTileUnits:a,unwrappedTileID:o,getElevation:s}){let c=ff(e,this.paint.get(`circle-translate`),this.paint.get(`circle-translate-anchor`),-i.bearingInRadians,a),l=this.paint.get(`circle-radius`).evaluate(t,n)+this.paint.get(`circle-stroke-width`).evaluate(t,n),u=this.paint.get(`circle-pitch-scale`),d=this.paint.get(`circle-pitch-alignment`),f,p;return d===`map`?(f=c,p=l*a):(f=xf(c,i,o,s),p=l),yf({queryGeometry:f,size:p,transform:i,unwrappedTileID:o,getElevation:s,pitchAlignment:d,pitchScale:u},r)}},kf=class extends Yd{};G(`HeatmapBucket`,kf,{omit:[`layers`]});var Af,jf=()=>Af||=new Gl({"heatmap-radius":new q(H.paint_heatmap[`heatmap-radius`],`heatmap-radius`),"heatmap-weight":new q(H.paint_heatmap[`heatmap-weight`],`heatmap-weight`),"heatmap-intensity":new K(H.paint_heatmap[`heatmap-intensity`],`heatmap-intensity`),"heatmap-color":new Wl(H.paint_heatmap[`heatmap-color`],`heatmap-color`),"heatmap-opacity":new K(H.paint_heatmap[`heatmap-opacity`],`heatmap-opacity`)}),Mf={get paint(){return jf()}};function Nf(e,{width:t,height:n},r,i){if(!i)i=new Uint8Array(t*n*r);else if(i instanceof Uint8ClampedArray)i=new Uint8Array(i.buffer);else if(i.length!==t*n*r)throw RangeError(`mismatched image size. expected: ${i.length} but got: ${t*n*r}`);return e.width=t,e.height=n,e.data=i,e}function Pf(e,{width:t,height:n},r){if(t===e.width&&n===e.height)return;let i=Nf({},{width:t,height:n},r);Ff(e,i,{x:0,y:0},{x:0,y:0},{width:Math.min(e.width,t),height:Math.min(e.height,n)},r),e.width=t,e.height=n,e.data=i.data}function Ff(e,t,n,r,i,a){if(i.width===0||i.height===0)return t;if(i.width>e.width||i.height>e.height||n.x>e.width-i.width||n.y>e.height-i.height)throw RangeError(`out of range source coordinates for image copy`);if(i.width>t.width||i.height>t.height||r.x>t.width-i.width||r.y>t.height-i.height)throw RangeError(`out of range destination coordinates for image copy`);let o=e.data,s=t.data;if(o===s)throw Error(`srcData equals dstData, so image is already copied`);for(let c=0;c{t[e.evaluationKey]=o;let s=e.expression.evaluate(t);i.setPixel(r/4/n,a/4,s)};if(e.clips)for(let t=0,i=0;te.type===`heatmap`,Hf=class extends Jl{createBucket(e){return new kf(e)}constructor(e,t){super(e,Mf,t),this.heatmapFbos=new Map,this._updateColorRamp()}_handleSpecialPaintPropertyUpdate(e){e===`heatmap-color`&&this._updateColorRamp()}_updateColorRamp(){let e=this._transitionablePaint._values[`heatmap-color`].value.expression;this.colorRamp=zf({expression:e,evaluationKey:`heatmapDensity`,image:this.colorRamp}),this.colorRampTexture=null}resize(){this.heatmapFbos.has(`big-fb`)&&this.heatmapFbos.delete(Bf)}queryRadius(e){return uf(`heatmap-radius`,this,e)}queryIntersectsFeature({queryGeometry:e,feature:t,featureState:n,geometry:r,transform:i,pixelsToTileUnits:a,unwrappedTileID:o,getElevation:s}){return yf({queryGeometry:e,size:this.paint.get(`heatmap-radius`).evaluate(t,n)*a,transform:i,unwrappedTileID:o,getElevation:s},r)}hasOffscreenPass(){return this.paint.get(`heatmap-opacity`)!==0&&!this.isHidden()}},Uf,Wf=()=>Uf||=new Gl({"hillshade-illumination-direction":new K(H.paint_hillshade[`hillshade-illumination-direction`],`hillshade-illumination-direction`),"hillshade-illumination-altitude":new K(H.paint_hillshade[`hillshade-illumination-altitude`],`hillshade-illumination-altitude`),"hillshade-illumination-anchor":new K(H.paint_hillshade[`hillshade-illumination-anchor`],`hillshade-illumination-anchor`),"hillshade-exaggeration":new K(H.paint_hillshade[`hillshade-exaggeration`],`hillshade-exaggeration`),"hillshade-shadow-color":new K(H.paint_hillshade[`hillshade-shadow-color`],`hillshade-shadow-color`),"hillshade-highlight-color":new K(H.paint_hillshade[`hillshade-highlight-color`],`hillshade-highlight-color`),"hillshade-accent-color":new K(H.paint_hillshade[`hillshade-accent-color`],`hillshade-accent-color`),"hillshade-method":new K(H.paint_hillshade[`hillshade-method`],`hillshade-method`),resampling:new K(H.paint_hillshade.resampling,`resampling`)}),Gf={get paint(){return Wf()}},Kf=e=>e.type===`hillshade`,qf=class extends Jl{constructor(e,t){super(e,Gf,t),this.recalculate({zoom:0,zoomHistory:{}},void 0)}getIlluminationProperties(){let e=this.paint.get(`hillshade-illumination-direction`).values,t=this.paint.get(`hillshade-illumination-altitude`).values,n=this.paint.get(`hillshade-highlight-color`).values,r=this.paint.get(`hillshade-shadow-color`).values,i=Math.max(e.length,t.length,n.length,r.length);e=e.concat(Array(i-e.length).fill(e.at(-1))),t=t.concat(Array(i-t.length).fill(t.at(-1))),n=n.concat(Array(i-n.length).fill(n.at(-1))),r=r.concat(Array(i-r.length).fill(r.at(-1)));let a=t.map(mn);return{directionRadians:e.map(mn),altitudeRadians:a,shadowColor:r,highlightColor:n}}hasOffscreenPass(){return this.paint.get(`hillshade-exaggeration`)!==0&&!this.isHidden()}},Jf,Yf=()=>Jf||=new Gl({"color-relief-opacity":new K(H[`paint_color-relief`][`color-relief-opacity`],`color-relief-opacity`),"color-relief-color":new Wl(H[`paint_color-relief`][`color-relief-color`],`color-relief-color`),resampling:new K(H[`paint_color-relief`].resampling,`resampling`)}),Xf={get paint(){return Yf()}};function Zf(e){return`data`in e}var Qf=class{constructor(e,t,n,r){this.context=e,this.format=n,this.texture=e.gl.createTexture(),this._ownedHandle=this.texture,this.update(t,r)}update(e,t,n){let{width:r,height:i}=e,a=(this.size?.[0]!==r||this.size[1]!==i)&&!n,{context:o}=this,{gl:s}=o;this.useMipmap=!!t?.useMipmap,a&&this.size&&this.format===s.RGBA&&(s.deleteTexture(this.texture),this.texture=s.createTexture(),this._ownedHandle=this.texture,this.magFilter=void 0,this.minFilter=void 0,this.wrap=void 0),s.bindTexture(s.TEXTURE_2D,this.texture),o.pixelStoreUnpackFlipY.set(!1),o.pixelStoreUnpack.set(1);let c=this.format===s.RGBA&&t?.premultiply!==!1;if(a){if(this.size=[r,i],this.format===s.RGBA&&r>0&&i>0){let t=this.useMipmap?Math.floor(Math.log2(Math.max(r,i)))+1:1;if(s.texStorage2D(s.TEXTURE_2D,t,s.RGBA8,r,i),Zf(e)){o.pixelStoreUnpackPremultiplyAlpha.set(!1);let{data:t}=e;c&&t&&(t=Rf(t)),t&&s.texSubImage2D(s.TEXTURE_2D,0,0,0,r,i,s.RGBA,s.UNSIGNED_BYTE,t)}else o.pixelStoreUnpackPremultiplyAlpha.set(c),s.texSubImage2D(s.TEXTURE_2D,0,0,0,s.RGBA,s.UNSIGNED_BYTE,e)}else Zf(e)?(o.pixelStoreUnpackPremultiplyAlpha.set(!1),this._uploadRawData(e,c,r,i,s)):(o.pixelStoreUnpackPremultiplyAlpha.set(c),this._uploadDomImage(e,s))}else{let{x:t,y:a}=n||{x:0,y:0};Zf(e)?(o.pixelStoreUnpackPremultiplyAlpha.set(!1),this._updateRawData(e,c,t,a,r,i,s)):(o.pixelStoreUnpackPremultiplyAlpha.set(c),this._updateDomImage(e,t,a,s))}this.useMipmap&&!(Zf(e)&&e.data===null)&&s.generateMipmap(s.TEXTURE_2D),o.pixelStoreUnpackFlipY.setDefault(),o.pixelStoreUnpack.setDefault(),o.pixelStoreUnpackPremultiplyAlpha.setDefault()}_uploadDomImage(e,t){t.texImage2D(t.TEXTURE_2D,0,this.format,this.format,t.UNSIGNED_BYTE,e)}_uploadRawData(e,t,n,r,i){let{data:a}=e;t&&a&&(a=Rf(a)),i.texImage2D(i.TEXTURE_2D,0,this.format,n,r,0,this.format,i.UNSIGNED_BYTE,a)}_updateDomImage(e,t,n,r){r.texSubImage2D(r.TEXTURE_2D,0,t,n,r.RGBA,r.UNSIGNED_BYTE,e)}_updateRawData(e,t,n,r,i,a,o){let{data:s}=e;t&&s&&(s=Rf(s)),o.texSubImage2D(o.TEXTURE_2D,0,n,r,i,a,o.RGBA,o.UNSIGNED_BYTE,s)}bind(e,t,n){let{context:r}=this,{gl:i}=r;this.texture!==this._ownedHandle&&(this.texture=this._ownedHandle),i.bindTexture(i.TEXTURE_2D,this.texture),(n===i.LINEAR_MIPMAP_NEAREST||n===i.LINEAR_MIPMAP_LINEAR)&&!this.useMipmap&&(n=i.LINEAR);let a=n||e;e!==this.magFilter&&(i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,e),this.magFilter=e),a!==this.minFilter&&(i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,a),this.minFilter=a),t!==this.wrap&&(i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,t),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,t),this.wrap=t)}generateMipmap(){if(!this.useMipmap)return;let{gl:e}=this.context;e.bindTexture(e.TEXTURE_2D,this.texture),e.generateMipmap(e.TEXTURE_2D)}destroy(){let{gl:e}=this.context;e.deleteTexture(this.texture),this.texture=null,this._ownedHandle=null}},$f=class e{static{this.byteViewCache=new WeakMap}constructor(t,n,r,i=1,a=1,o=1,s=0){if(this.uid=t,n.height!==n.width)throw RangeError(`DEM tiles must be square`);if(r&&![`mapbox`,`terrarium`,`custom`].includes(r)){$t(`"${r}" is not a valid encoding type. Valid types include "mapbox", "terrarium" and "custom".`);return}this.stride=n.height;let c=this.dim=n.height-4;switch(this.data=new Uint32Array(n.data.buffer),e.byteViewCache.set(this,new Uint8Array(this.data.buffer)),r){case`terrarium`:this.redFactor=256,this.greenFactor=1,this.blueFactor=1/256,this.baseShift=32768;break;case`custom`:this.redFactor=i,this.greenFactor=a,this.blueFactor=o,this.baseShift=s;break;default:this.redFactor=6553.6,this.greenFactor=25.6,this.blueFactor=.1,this.baseShift=1e4}for(let e=-2;e=c)&&this.data.copyWithin(this._idx(0,e),t,t+c),this.data.fill(this.data[t],this._idx(-2,e),this._idx(0,e)),this.data.fill(this.data[t+c-1],this._idx(c,e),this._idx(c+1,e)+1)}let l=this._getByteView();this.min=2**53-1,this.max=-(2**53-1);for(let e=0;ethis.max&&(this.max=r),r=this.dim||r<-1||r>=this.dim)throw RangeError(`Out of range source coordinates for DEM data. x: ${e}, y: ${t}, dim: ${this.dim}`);let i=this._getByteView(),a=((r+2)*this.stride+n+2)*4,o=this.stride*4,s=e-n,c=t-r,l=this._unpackAtIndex(i,a),u=this._unpackAtIndex(i,a+4),d=this._unpackAtIndex(i,a+o),f=this._unpackAtIndex(i,a+o+4);return l*(1-s)*(1-c)+u*s*(1-c)+d*(1-s)*c+f*s*c}getUnpackVector(){return[this.redFactor,this.greenFactor,this.blueFactor,this.baseShift]}_idx(e,t){if(e<-2||e>=this.dim+2||t<-2||t>=this.dim+2)throw RangeError(`Out of range source coordinates for DEM data. x: ${e}, y: ${t}, dim: ${this.dim}`);return(t+2)*this.stride+(e+2)}unpack(e,t,n){return e*this.redFactor+t*this.greenFactor+n*this.blueFactor-this.baseShift}pack(e){return ep(e,this.getUnpackVector())}getPixels(){return new Lf({width:this.stride,height:this.stride},this._getByteView())}backfillBorder(e,t,n){if(this.dim!==e.dim)throw Error(`dem dimension mismatch`);let r=t*this.dim,i=t*this.dim+this.dim,a=n*this.dim,o=n*this.dim+this.dim;switch(t){case-1:r=i-2;break;case 1:i=r+2}switch(n){case-1:a=o-2;break;case 1:o=a+2}let s=-t*this.dim,c=-n*this.dim;for(let t=a;te!==0);if(o.length===0)return{r:0,g:0,b:0};let s=Math.min(...o),c=Math.round((e+a)/s),l=e=>e===0?0:Math.floor(c*s/e)%256;return{r:l(n),g:l(r),b:l(i)}}G(`DEMData`,$f);var tp=e=>e.type===`color-relief`,np=class extends Jl{constructor(e,t){super(e,Xf,t)}_createColorRamp(e){let t={elevationStops:[],colorStops:[]},n=this._transitionablePaint._values[`color-relief-color`].value.expression;if(n instanceof zs&&n._styleExpression.expression instanceof na){this.colorRampExpression=n;let e=n._styleExpression.expression;t.elevationStops=e.labels,t.colorStops=[];for(let n of t.elevationStops)t.colorStops.push(e.evaluate({globals:{elevation:n}}))}if(t.elevationStops.length<1&&(t.elevationStops=[0],t.colorStops=[Ni.transparent]),t.elevationStops.length<2&&(t.elevationStops.push(t.elevationStops[0]+1),t.colorStops.push(t.colorStops[0])),t.elevationStops.length<=e)return t;let r={elevationStops:[],colorStops:[]},i=(t.elevationStops.length-1)/(e-1);for(let e=0;e80*n){s=e[0],c=e[1];let t=s,r=c;for(let a=n;at&&(t=n),i>r&&(r=i)}l=Math.max(t-s,r-c),l=l===0?0:32767/l}return fp(a,o,s,c,l),o}function up(e,t,n,r,i){let a=null;if(i===tm(e,t,n,r)>0)for(let i=t;i=t;i-=r)a=Qp(i/r|0,e[i],e[i+1],a);return a&&Gp(a,a.next)&&($p(a),a=a.next),a}function dp(e,t=e){let n=t===e,r=e,i;do i=!1,r!==r.next&&(sp.size===0||!sp.has(r))&&(Gp(r,r.next)||Wp(r.prev,r,r.next)===0)?((n||r===t)&&(t=r.prev),cp=!0,$p(r),r=r.prev,i=!0):(n||r!==t)&&(r=r.next,i=!n);while(i||r!==t);return t}function fp(e,t,n,r,i){i&&Lp(e,n,r,i);let a=e,o=!1;for(;e.prev!==e.next;){let s=e.prev,c=e.next;if(Wp(s,e,c)<0&&(i?mp(e,n,r,i):pp(e)))t.push(s.i,e.i,c.i),$p(e),e=c,a=c;else if(e=c,e===a){if(cp=!1,e=dp(e),cp){a=e;continue}if(!o){e=hp(e,t),a=e,o=!0;continue}gp(e,t,n,r,i);break}}}function pp(e){let t=e.prev,n=e,r=e.next,i=t.x,a=n.x,o=r.x,s=t.y,c=n.y,l=r.y,u=Math.min(i,a,o),d=Math.min(s,c,l),f=Math.max(i,a,o),p=Math.max(s,c,l),m=r.next;for(;m!==t;){if(m.x>=u&&m.x<=f&&m.y>=d&&m.y<=p&&(i!==m.x||s!==m.y)&&Hp(i,s,a,c,o,l,m.x,m.y)&&Wp(m.prev,m,m.next)>=0)return!1;m=m.next}return!0}function mp(e,t,n,r){let i=e.prev,a=e,o=e.next,s=i.x,c=a.x,l=o.x,u=i.y,d=a.y,f=o.y,p=Math.min(s,c,l),m=Math.min(u,d,f),h=Math.max(s,c,l),g=Math.max(u,d,f),_=Bp(p,m,t,n,r),v=Bp(h,g,t,n,r),y=e.prevZ;for(;y&&y.z>=_;){if(y.x>=p&&y.x<=h&&y.y>=m&&y.y<=g&&y!==o&&(s!==y.x||u!==y.y)&&Hp(s,u,c,d,l,f,y.x,y.y)&&Wp(y.prev,y,y.next)>=0)return!1;y=y.prevZ}let b=e.nextZ;for(;b&&b.z<=v;){if(b.x>=p&&b.x<=h&&b.y>=m&&b.y<=g&&b!==o&&(s!==b.x||u!==b.y)&&Hp(s,u,c,d,l,f,b.x,b.y)&&Wp(b.prev,b,b.next)>=0)return!1;b=b.nextZ}return!0}function hp(e,t){let n=e,r=!1;do{let i=n.prev,a=n.next.next;Kp(i,n,n.next,a,!1)&&Yp(i,a)&&Yp(a,i)&&(t.push(i.i,n.i,a.i),$p(n),$p(n.next),n=e=a,r=!0),n=n.next}while(n!==e);return r?dp(n):n}function gp(e,t,n,r,i){let a=e;do{let e=a.next.next;for(;e!==a.prev;){if(a.i!==e.i&&Up(a,e)){let o=Zp(a,e);a=dp(a,a.next),o=dp(o,o.next),fp(a,t,n,r,i),fp(o,t,n,r,i);return}e=e.next}a=a.next}while(a!==e)}var _p=!1;function vp(e,t,n,r){let i=[];for(let n=0,a=t.length;na&&(a=t.x),t.yo&&(o=t.y),n=t}while(++s<16&&n!==t);wp[e]=n;let c=e*4;xp[c]=r,xp[c+1]=i,xp[c+2]=a,xp[c+3]=o}while(n!==t)}function Dp(e,t){let n=e.z*4;t.xxp[n+2]&&(xp[n+2]=t.x),t.y>xp[n+3]&&(xp[n+3]=t.y)}function Op(e){let t=wp[e];for(;t.prev.next!==t;)t=t.next;return wp[e]=t,t}function kp(e){let t=Cp[e];for(;t.prev.next!==t;)t=t.next;return Cp[e]=t,t}function Ap(e,t){let n=t,r=e.x,i=e.y,a=-1/0,o;if(Gp(e,n))return n;for(let t=0,s=0;txp[s+3]||xp[s]>r||xp[s+2]<=a)continue;let c=Op(t);n=kp(t);do{if(n.prev.next===n){if(Gp(e,n.next))return n.next;if(i<=n.y&&i>=n.next.y&&n.next.y!==n.y){let e=n.x+(i-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(e<=r&&e>a&&(a=e,o=n.xr||xp[f+3]u)continue;let p=Op(t);n=kp(t);do{if(n.prev.next===n&&r>=n.x&&n.x>=s&&r!==n.x&&Hp(ir)&&(to.x||n.x===o.x&&jp(o,n)))&&(o=n,d=t)}n=n.next}while(n!==p)}return o}function jp(e,t){return Wp(e.prev,e,t.prev)<0&&Wp(t.next,e,e.next)<0}var Mp=[],Np=[],Pp=new Uint32Array,Fp=new Uint32Array,Ip=new Uint32Array(256);function Lp(e,t,n,r){let i=e,a=0;do i.z=Bp(i.x,i.y,t,n,r),Mp[a++]=i,i=i.next;while(i!==e);Rp(a);let o=null;for(let e=0;e=0&&Mp[r].z>n;)Mp[r+1]=Mp[r],r--;Mp[r+1]=e}else{Pp.length>>a&255]++;let o=0;for(let e=0;e<256;e++){let t=Ip[e];Ip[e]=o,o+=t}for(let o=0;o>>a&255]++;r[s]=t[o],i[s]=e}}function Bp(e,t,n,r,i){return e=(e-n)*i|0,t=(t-r)*i|0,e=(e|e<<8)&16711935,e=(e|e<<4)&252645135,e=(e|e<<2)&858993459,e=(e|e<<1)&1431655765,t=(t|t<<8)&16711935,t=(t|t<<4)&252645135,t=(t|t<<2)&858993459,t=(t|t<<1)&1431655765,e|t<<1}function Vp(e){let t=e,n=e;do(t.x=(e-o)*(a-s)&&(e-o)*(r-s)>=(n-o)*(t-s)&&(n-o)*(a-s)>=(i-o)*(r-s)}function Up(e,t){let n=Gp(e,t)&&Wp(e.prev,e,e.next)>0&&Wp(t.prev,t,t.next)>0;return e.next.i!==t.i&&(n||Yp(e,t)&&Yp(t,e)&&(Wp(e.prev,e,t.prev)!==0||Wp(e,t.prev,t)!==0))&&!Jp(e,t)&&(n||Xp(e,t))}function Wp(e,t,n){return(t.y-e.y)*(n.x-t.x)-(t.x-e.x)*(n.y-t.y)}function Gp(e,t){return e.x===t.x&&e.y===t.y}function Kp(e,t,n,r,i=!0){let a=Wp(e,t,n),o=Wp(e,t,r),s=Wp(n,r,e),c=Wp(n,r,t);return(a>0&&o<0||a<0&&o>0)&&(s>0&&c<0||s<0&&c>0)?!0:i?!!(a===0&&qp(e,n,t)||o===0&&qp(e,r,t)||s===0&&qp(n,e,r)||c===0&&qp(n,t,r)):!1}function qp(e,t,n){return t.x<=Math.max(e.x,n.x)&&t.x>=Math.min(e.x,n.x)&&t.y<=Math.max(e.y,n.y)&&t.y>=Math.min(e.y,n.y)}function Jp(e,t){let n=Math.min(e.x,t.x),r=Math.max(e.x,t.x),i=Math.min(e.y,t.y),a=Math.max(e.y,t.y),o=e;do{let s=o.next;if(o.x>r&&s.x>r||o.xa&&s.y>a||o.y=0&&Wp(e,e.prev,t)>=0:Wp(e,t,e.prev)<0||Wp(e,e.next,t)<0}function Xp(e,t){let n=e,r=!1,i=(e.x+t.x)/2,a=(e.y+t.y)/2;do{let e=n.next;n.y>a!=e.y>a&&i<(e.x-n.x)*(a-n.y)/(e.y-n.y)+n.x&&(r=!r),n=e}while(n!==e);return r}function Zp(e,t){let n=em(e.i,e.x,e.y),r=em(t.i,t.x,t.y),i=e.next,a=t.prev;return e.next=t,t.prev=e,n.next=i,i.prev=n,r.next=n,n.prev=r,a.next=r,r.prev=a,r}function Qp(e,t,n,r){let i=em(e,t,n);return r?(i.next=r.next,i.prev=r,r.next.prev=i,r.next=i):(i.prev=i,i.next=i),i}function $p(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ),_p&&Dp(e.prev,e.next)}function em(e,t,n){return{i:e,x:t,y:n,prev:null,next:null,z:0,prevZ:null,nextZ:null}}function tm(e,t,n,r){let i=0;for(let a=t,o=n-r;ae)throw Error(`Min granularity must not be greater than base granularity.`);this._baseZoomGranularity=e,this._minGranularity=t}getGranularityForZoomLevel(e){let t=1<32767||t>32767)throw Error(`Vertex coordinates are out of signed 16 bit integer range.`);let n=Math.round(e)|0,r=Math.round(t)|0,i=this._getKey(n,r),a=this._vertexDictionary.get(i);if(a!==void 0)return a;let o=this._vertexBuffer.length/2;return this._vertexDictionary.set(i,o),this._vertexBuffer.push(n,r),o}_subdivideTrianglesScanline(e,t){if(this._granularity<2)return fm(this._vertexBuffer,dm(e,t));let n=[],r=e.length;for(let i=0;i=1||y<=0)||h&&(si)){l>=r&&l<=i&&a.push(n[(e+1)%3]);continue}if(!h&&v>0){let e=o+f*v,t=s+p*v;a.push(this._vertexToIndex(e,t))}let b=o+f*Math.max(v,0),x=o+f*Math.min(y,1);if(m||this._generateIntraEdgeVertices(a,o,s,c,l,b,x),!h&&y<1){let e=o+f*y,t=s+p*y;a.push(this._vertexToIndex(e,t))}(h||l>=r&&l<=i)&&a.push(n[(e+1)%3]),!h&&(l<=r||l>=i)&&this._generateInterEdgeVertices(a,o,s,c,l,u,d,x,r,i)}return a}_generateIntraEdgeVertices(e,t,n,r,i,a,o){let s=r-t,c=i-n,l=c===0,u=l?Math.min(t,r):Math.min(a,o),d=l?Math.max(t,r):Math.max(a,o),f=Math.floor(u/this._granularityCellSize)+1,p=Math.ceil(d/this._granularityCellSize)-1;if(l?t=f;r--){let i=r*this._granularityCellSize,a=n+c*(i-t)/s;e.push(this._vertexToIndex(i,a))}}_generateInterEdgeVertices(e,t,n,r,i,a,o,s,c,l){let u=i-n,d=a-r,f=o-i,p=(c-i)/f,m=(l-i)/f,h=Math.min(p,m),g=Math.max(p,m),_=r+d*h,v=Math.floor(Math.min(_,s)/this._granularityCellSize)+1,y=Math.ceil(Math.max(_,s)/this._granularityCellSize)-1,b=s<_,x=f===0;if(x&&(o===c||o===l))return;if(x||h>=1||g<=0){let e=t-a,r=n-o,i=(c-o)/r,u=(l-o)/r,d=a+e*Math.min(i,u);v=Math.floor(Math.min(d,s)/this._granularityCellSize)+1,y=Math.ceil(Math.max(d,s)/this._granularityCellSize)-1,b=s0?l:c;if(b)for(let t=v;t<=y;t++){let n=t*this._granularityCellSize;e.push(this._vertexToIndex(n,S))}else for(let t=y;t>=v;t--){let n=t*this._granularityCellSize;e.push(this._vertexToIndex(n,S))}}_generateOutline(e,t){let n=[],r=0;for(let i of e){let e=this._granularity<2?this._ringPathIndices(i,r,t):this._pointArrayToIndices(cm(i,this._granularity,!0));r+=i.length;let a=[];for(let t=1;t=2&&lm(e)&&r.push(r[0]),r}_handlePoles(e){let t=!1,n=!1;this._canonical&&(this._canonical.y===0&&(t=!0),this._canonical.y===(1<i==(a===-32768)?(e.push(n),e.push(t),e.push(this._vertexToIndex(r,a)),e.push(this._vertexToIndex(i,a)),e.push(n),e.push(this._vertexToIndex(r,a))):(e.push(t),e.push(n),e.push(this._vertexToIndex(r,a)),e.push(n),e.push(this._vertexToIndex(i,a)),e.push(this._vertexToIndex(r,a)))}_fillPoles(e,t,n){let r=this._vertexBuffer,i=L,a=e.length;for(let o=2;o=2&&this._canonical?.z===0&&(a=this._removeTrianglesOutsideTileX(a),o=o.map(e=>this._removeLinesOutsideTileX(e))),{verticesFlattened:this._vertexBuffer,indicesTriangles:a,indicesLineList:o}}_vertexOutsideTileX(e){let t=this._vertexBuffer[e*2];return t<0||t>8192}_removeTrianglesOutsideTileX(e){let t=[];for(let n=0;n0?(Math.floor(_/i)+1)*i:(Math.ceil(_/i)-1)*i,t=m>0?(Math.floor(v/i)+1)*i:(Math.ceil(v/i)-1)*i,n=Math.abs(_-e),r=Math.abs(v-t),o=Math.abs(_-l),s=Math.abs(v-u),c=d?n/h:1/0,y=f?r/g:1/0;if((o<=n||!d)&&(s<=r||!f))break;if(c0?(n.push(i),n.push(o),n.push(a)):(n.push(i),n.push(a),n.push(o))}return n}function pm(e,t,n){if(t.length===0)throw Error(`Subdivision vertex ring is empty.`);let r=0,i=e[t[0]*2];for(let n=1;n=0?o-1:a-1,i=(s+1)%a,c=e[t[r]*2],l=e[t[r]*2+1],u=e[t[i]*2],d=e[t[i]*2+1],f=e[t[o]*2],p=e[t[o]*2+1],m=e[t[s]*2],h=e[t[s]*2+1],g=!1;if(cu)g=!1;else{let e=h-p,t=-(m-f),n=p((u-f)*e+(d-p)*t)*n&&(g=!0)}if(g){let e=t[r],i=t[o],c=t[s];e!==i&&e!==c&&i!==c&&n.push(c,i,e),o--,o<0&&(o=a-1)}else{let e=t[i],r=t[o],c=t[s];e!==r&&e!==c&&r!==c&&n.push(c,r,e),s++,s>=a&&(s=0)}if(r===i)break}}function mm(e,t,n,r,i,a,o,s,c){let l=i.length/2,u=o&&s&&c;if(lud.MAX_VERTEX_ARRAY_LENGTH&&(l=e.createNewSegment(t,n),c=s.count,h=!0,g=!0,_=!0,u=0);let y=hm(o,r,a,s,f,h,l),b=hm(o,r,a,s,p,g,l),x=hm(o,r,a,s,m,_,l);n.emplaceBack(u+y-c,u+b-c,u+x-c),l.primitiveLength++}}function _m(e,t,n,r,i,a){let o=[];for(let e=0;eud.MAX_VERTEX_ARRAY_LENGTH&&(l=e.createNewSegment(t,n),c=s.count,m=!0,h=!0,u=0);let _=hm(o,r,a,s,f,m,l),v=hm(o,r,a,s,p,h,l);n.emplaceBack(u+_-c,u+v-c),l.primitiveLength++}}var vm=class{constructor(e){this.zoom=e.zoom,this.overscaling=e.overscaling,this.layers=e.layers,this.layerIds=this.layers.map(e=>e.id),this.index=e.index,this.hasDependencies=!1,this.sdfPatterns={},this.patternFeatures=[],this.layoutVertexArray=new Ku,this.indexArray=new ad,this.indexArray2=new od,this.programConfigurations=new zd(e.layers,e.zoom),this.segments=new ud,this.segments2=new ud,this.stateDependentLayerIds=this.layers.filter(e=>e.isStateDependent()).map(e=>e.id)}populate(e,t,n){this.hasDependencies=ap(`fill`,this.layers,t);let r=this.layers[0].layout.get(`fill-sort-key`),i=!r.isConstant(),a=[],o=new jl(this.zoom),s=this.layers[0]._featureFilter.needGeometry;for(let{feature:c,id:l,index:u,sourceLayerIndex:d}of e){let e=Kd(c,s);if(!this.layers[0]._featureFilter.filter(o,e,n))continue;let f=i?r.evaluate(e,{},n,t.availableImages):void 0,p={id:l,properties:c.properties,type:c.type,sourceLayerIndex:d,index:u,geometry:s?e.geometry:Gd(c),patterns:{},sortKey:f};a.push(p)}i&&a.sort((e,t)=>e.sortKey-t.sortKey);for(let r of a){let{geometry:i,index:a,sourceLayerIndex:o}=r;if(this.hasDependencies){let e=op(`fill`,this.layers,r,{zoom:this.zoom},t);this.patternFeatures.push(e)}else this.addFeature(r,i,a,n,{},t.subdivisionGranularity);let s=e[a].feature;t.featureIndex.insert(s,i,a,o,this.index)}}update(e,t,n){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(e,t,this.stateDependentLayers,{imagePositions:n})}addFeatures({options:e,canonical:t,patternPositions:n,patternMap:r}){this.detectSdfPatterns(r);for(let r of this.patternFeatures)this.addFeature(r,r.geometry,r.index,t,n,e.subdivisionGranularity)}detectSdfPatterns(e){for(let t of this.patternFeatures)for(let n in t.patterns){let r=t.patterns[n];this.recordSdfPattern(n,e[r.min]),this.recordSdfPattern(n,e[r.mid]),this.recordSdfPattern(n,e[r.max])}for(let t of this.layers){let n=t.paint.get(`fill-pattern`).constantOr(null);n&&(this.recordSdfPattern(t.id,e[n.from.toString()]),this.recordSdfPattern(t.id,e[n.to.toString()]))}}recordSdfPattern(e,t){if(!t)return;let n=t.sdf===!0,r=this.sdfPatterns[e];r===void 0?this.sdfPatterns[e]=n:r!==n&&$t(`Style sheet warning: Cannot mix SDF and non-SDF fill patterns in layer "${e}"`)}isEmpty(){return this.layoutVertexArray.length===0}uploadPending(){return!this.uploaded||this.programConfigurations.needsUpload}upload(e){this.uploaded||(this.layoutVertexBuffer=e.createVertexBuffer(this.layoutVertexArray,ip),this.indexBuffer=e.createIndexBuffer(this.indexArray),this.indexBuffer2=e.createIndexBuffer(this.indexArray2)),this.programConfigurations.upload(e),this.uploaded=!0}destroy(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.indexBuffer2.destroy(),this.programConfigurations.destroy(),this.segments.destroy(),this.segments2.destroy())}addFeature(e,t,n,r,i,a){for(let e of la(t,500)){let t=sm(e,r,a.fill.getGranularityForZoomLevel(r.z)),n=this.layoutVertexArray;mm((e,t)=>{n.emplaceBack(e,t)},this.segments,this.layoutVertexArray,this.indexArray,t.verticesFlattened,t.indicesTriangles,this.segments2,this.indexArray2,t.indicesLineList)}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,e,n,{imagePositions:i,canonical:r})}};G(`FillBucket`,vm,{omit:[`layers`,`patternFeatures`]});var ym,bm=()=>ym||=new Gl({"fill-sort-key":new q(H.layout_fill[`fill-sort-key`],`fill-sort-key`)}),xm,Sm=()=>xm||=new Gl({"fill-antialias":new K(H.paint_fill[`fill-antialias`],`fill-antialias`),"fill-opacity":new q(H.paint_fill[`fill-opacity`],`fill-opacity`),"fill-layer-opacity":new K(H.paint_fill[`fill-layer-opacity`],`fill-layer-opacity`),"fill-color":new q(H.paint_fill[`fill-color`],`fill-color`),"fill-outline-color":new q(H.paint_fill[`fill-outline-color`],`fill-outline-color`),"fill-translate":new K(H.paint_fill[`fill-translate`],`fill-translate`),"fill-translate-anchor":new K(H.paint_fill[`fill-translate-anchor`],`fill-translate-anchor`),"fill-pattern":new Hl(H.paint_fill[`fill-pattern`],`fill-pattern`)}),Cm={get paint(){return Sm()},get layout(){return bm()}},wm=e=>e.type===`fill`,Tm=class extends Jl{constructor(e,t){super(e,Cm,t)}recalculate(e,t){super.recalculate(e,t);let n=this.paint._values[`fill-outline-color`];n.value.kind===`constant`&&n.value.value===void 0&&(this.paint._values[`fill-outline-color`]=this.paint._values[`fill-color`])}createBucket(e){return new vm(e)}queryRadius(){return df(this.paint.get(`fill-translate`))}queryIntersectsFeature({queryGeometry:e,geometry:t,transform:n,pixelsToTileUnits:r}){return Qd(ff(e,this.paint.get(`fill-translate`),this.paint.get(`fill-translate-anchor`),-n.bearingInRadians,r),t)}isTileClipped(){return!0}},Em=ru([{name:`a_pos`,components:2,type:`Int16`},{name:`a_normal_ed`,components:4,type:`Int16`}],4),Dm=ru([{name:`a_centroid`,components:2,type:`Int16`}],4),Om=Em.members;Em.size,Em.alignment;var km=class e{constructor(){this.minX=1/0,this.maxX=-1/0,this.minY=1/0,this.maxY=-1/0}extend(e){return this.minX=Math.min(this.minX,e.x),this.minY=Math.min(this.minY,e.y),this.maxX=Math.max(this.maxX,e.x),this.maxY=Math.max(this.maxY,e.y),this}expandBy(e){return this.minX-=e,this.minY-=e,this.maxX+=e,this.maxY+=e,(this.minX>this.maxX||this.minY>this.maxY)&&(this.minX=1/0,this.maxX=-1/0,this.minY=1/0,this.maxY=-1/0),this}shrinkBy(e){return this.expandBy(-e)}map(t){let n=new e;return n.extend(t(new k(this.minX,this.minY))),n.extend(t(new k(this.maxX,this.minY))),n.extend(t(new k(this.minX,this.maxY))),n.extend(t(new k(this.maxX,this.maxY))),n}static fromPoints(t){let n=new e;for(let e of t)n.extend(e);return n}contains(e){return e.x>=this.minX&&e.x<=this.maxX&&e.y>=this.minY&&e.y<=this.maxY}empty(){return this.minX>this.maxX}width(){return this.maxX-this.minX}height(){return this.maxY-this.minY}covers(e){return!this.empty()&&!e.empty()&&e.minX>=this.minX&&e.maxX<=this.maxX&&e.minY>=this.minY&&e.maxY<=this.maxY}intersects(e){return!this.empty()&&!e.empty()&&e.minX<=this.maxX&&e.maxX>=this.minX&&e.minY<=this.maxY&&e.maxY>=this.minY}},Am=km.fromPoints([new k(0,0),new k(L,L)]);function jm(e,t){return e.x===t.x&&(e.x<0||e.x>8192)||e.y===t.y&&(e.y<0||e.y>8192)}function Mm(e){return e.every(e=>e.x<0)||e.every(e=>e.x>8192)||e.every(e=>e.y<0)||e.every(e=>e.y>8192)}var Nm=class{constructor(e,t,n,r,i){for(this.properties=Object.create(null),this.extent=n,this.type=0,this.id=void 0,this._pbf=e,this._geometry=-1,this._keys=r,this._values=i;e.pos>3,a===0)continue}if(a--,i===1)o+=e.readSVarint(),s+=e.readSVarint(),r&&n.push(r),r=[new k(o,s)];else if(i===2)o+=e.readSVarint(),s+=e.readSVarint(),r&&r.push(new k(o,s));else if(i===7)r&&r.push(r[0].clone());else throw Error(`unknown command ${i}`)}return r&&n.push(r),n}bbox(){if(this._geometry<0)throw Error(`feature has no geometry`);let e=this._pbf;e.pos=this._geometry;let t=e.readVarint()+e.pos,n=1,r=0,i=0,a=0,o=1/0,s=-1/0,c=1/0,l=-1/0;for(;e.pos>3,r===0)continue}if(r--,n===1||n===2)i+=e.readSVarint(),a+=e.readSVarint(),is&&(s=i),al&&(l=a);else if(n!==7)throw Error(`unknown command ${n}`)}return[o,c,s,l]}toGeoJSON(e,t,n){let r=this.extent*2**n,i=this.extent*e,a=this.extent*t,o=this.loadGeometry();function s(e){return[(e.x+i)*360/r-180,360/Math.PI*Math.atan(Math.exp((1-(e.y+a)*2/r)*Math.PI))-90]}function c(e){return e.map(s)}let l;if(this.type===1){let e=[];for(let t of o)e.push(t[0]);let t=c(e);l=e.length===1?{type:`Point`,coordinates:t[0]}:{type:`MultiPoint`,coordinates:t}}else if(this.type===2){let e=o.map(c);l=e.length===1?{type:`LineString`,coordinates:e[0]}:{type:`MultiLineString`,coordinates:e}}else if(this.type===3){let e=Pm(o),t=[];for(let n of e)t.push(n.map(c));l=t.length===1?{type:`Polygon`,coordinates:t[0]}:{type:`MultiPolygon`,coordinates:t}}else throw Error(`unknown feature type`);let u={type:`Feature`,geometry:l,properties:this.properties};return this.id!=null&&(u.id=this.id),u}};Nm.types=[`Unknown`,`Point`,`LineString`,`Polygon`];function Pm(e){let t=e.length;if(t<=1)return[e];let n=[],r,i;for(let a=0;a=this._features.length)throw Error(`feature index out of bounds`);this._pbf.pos=this._features[e];let t=this._pbf.readVarint()+this._pbf.pos;return new Nm(this._pbf,t,this.extent,this._keys,this._values)}};function Lm(e){let t=null,n=e.readVarint()+e.pos;for(;e.pos90||this.lat<-90)throw Error(`Invalid LngLat latitude value: must be between -90 and 90`)}wrap(){return new e(zt(this.lng,-180,180),this.lat)}toArray(){return[this.lng,this.lat]}toString(){return`LngLat(${this.lng}, ${this.lat})`}distanceTo(e){let t=Math.PI/180,n=this.lat*t,r=e.lat*t,i=Math.sin(n)*Math.sin(r)+Math.cos(n)*Math.cos(r)*Math.cos((e.lng-this.lng)*t);return zm*Math.acos(Math.min(i,1))}static convert(t){if(t instanceof e)return t;if(Array.isArray(t)&&(t.length===2||t.length===3))return new e(Number(t[0]),Number(t[1]));if(!Array.isArray(t)&&typeof t==`object`&&t)return new e(Number(`lng`in t?t.lng:t.lon),Number(t.lat));throw Error("`LngLatLike` argument must be specified as a LngLat instance, an object {lng: , lat: }, an object {lon: , lat: }, or an array of [, ]")}},Bm=2*Math.PI*zm;function Vm(e){return Bm*Math.cos(e*Math.PI/180)}function Hm(e){return(180+e)/360}function Um(e){return(180-180/Math.PI*Math.log(Math.tan(Math.PI/4+e*Math.PI/360)))/360}function Wm(e,t){return e/Vm(t)}function Gm(e){return e*360-180}function Km(e){let t=180-e*360;return 360/Math.PI*Math.atan(Math.exp(t*Math.PI/180))-90}function qm(e,t){return e*Vm(Km(t))}function Jm(e){return 1/Math.cos(e*Math.PI/180)}var Ym=class e{constructor(e,t,n=0){this.x=+e,this.y=+t,this.z=+n}static fromLngLat(t,n=0){let r=X.convert(t);return new e(Hm(r.lng),Um(r.lat),Wm(n,r.lat))}toLngLat(){return new X(Gm(this.x),Km(this.y))}toAltitude(){return qm(this.z,this.y)}meterInMercatorCoordinateUnits(){return 1/Bm*Jm(Km(this.y))}},Xm=89.25;function Zm(e,t,n){let r=1/(1<dh(e,t))}function sh(e,t){let n=Qm(L/2,L/2,t),r=Ym.fromLngLat(n).meterInMercatorCoordinateUnits(),i=(1<0;t.push(i?r._perp():null)}let n=e.length-1,r=n>1&&e[0].equals(e[n]),i=[null];for(let e=1;e<=n;e++){let a=t[e];if(!a){i.push(null);continue}let o=r&&e===1?t[n]:t[e-1],s=r&&e===n?t[1]:t[e+1];i.push({start:uh(a,o),end:uh(a,s)})}return i}function uh(e,t){if(!t)return e.unit();let n=e.mag(),r=t.mag();return e.x*t.x+e.y*t.y=2*r?e.unit():r>=2*n?t.unit():e.add(t)._unit()}function dh(e,t){if(!e||e.length<3)return e;let n=e[0].x===e[e.length-1].x&&e[0].y===e[e.length-1].y,r=n?e.length-1:e.length;if(r<3)return e;let i=[],a=jm(e[r-1],e[0]);for(let n=0;n1&&t[0].x===t[t.length-1].x&&t[0].y===t[t.length-1].y;)t.pop();return t}function ph(e,t,n,r,i){let a=t.sub(n),o=r.sub(n),s=a.mag(),c=o.mag();if(s<1e-6||c<1e-6){e.push(n.clone());return}a._div(s),o._div(c);let l=a.x*o.x+a.y*o.y;if(Math.abs(l)>Math.cos(5*Math.PI/180)){e.push(n.clone());return}let u=.2,d=Math.min(i,s*u,c*u),f=n.add(a.mult(d)),p=n.add(o.mult(d)),m=Math.sqrt((1+l)/2),h=n.add(a.add(o)._unit()._mult(d/m)),g=f.sub(h).angleWith(p.sub(h)),_=Math.max(2,Math.ceil(Math.abs(g)/(Math.PI/6)-1e-6));for(let t=0;t<=_;t++)e.push(f.rotateAround(t/_*g,h))}var mh=8192;function hh(e,t,n,r,i,a,o,s){e.emplaceBack(t,n,Math.floor(r*mh)*2+o,i*mh*2,a*mh*2,Math.round(s))}var gh=class{constructor(e){this.zoom=e.zoom,this.overscaling=e.overscaling,this.layers=e.layers,this.layerIds=this.layers.map(e=>e.id),this.index=e.index,this.hasDependencies=!1,this.layoutVertexArray=new qu,this.centroidVertexArray=new Hu,this.indexArray=new ad,this.programConfigurations=new zd(e.layers,e.zoom),this.segments=new ud,this.stateDependentLayerIds=this.layers.filter(e=>e.isStateDependent()).map(e=>e.id)}populate(e,t,n){this.features=[],this.hasDependencies=ap(`fill-extrusion`,this.layers,t);let r=new jl(this.zoom),i=this.layers[0],a=i.layout.get(`fill-extrusion-rounded-corner-distance`),o=a>0?sh(a,n):0,s=i._featureFilter.needGeometry;for(let{feature:a,id:c,index:l,sourceLayerIndex:u}of e){let e=Kd(a,s);if(!i._featureFilter.filter(r,e,n))continue;let d={id:c,sourceLayerIndex:u,index:l,geometry:oh(s?e.geometry:Gd(a),o),properties:a.properties,type:a.type,patterns:{}};this.hasDependencies?this.features.push(op(`fill-extrusion`,this.layers,d,{zoom:this.zoom},t)):this.addFeature(d,d.geometry,l,n,{},t.subdivisionGranularity),t.featureIndex.insert(a,d.geometry,l,u,this.index,!0)}}addFeatures({options:e,canonical:t,patternPositions:n}){for(let r of this.features){let{geometry:i}=r;this.addFeature(r,i,r.index,t,n,e.subdivisionGranularity)}}update(e,t,n){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(e,t,this.stateDependentLayers,{imagePositions:n})}isEmpty(){return this.layoutVertexArray.length===0&&this.centroidVertexArray.length===0}uploadPending(){return!this.uploaded||this.programConfigurations.needsUpload}upload(e){this.uploaded||(this.layoutVertexBuffer=e.createVertexBuffer(this.layoutVertexArray,Om),this.centroidVertexBuffer=e.createVertexBuffer(this.centroidVertexArray,Dm.members,!0),this.indexBuffer=e.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(e),this.uploaded=!0}destroy(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy(),this.centroidVertexBuffer.destroy())}addFeature(e,t,n,r,i,a){for(let n of la(t,500)){let t={x:0,y:0,sampleCount:0},i=this.layoutVertexArray.length;this.processPolygon(t,r,e,n,a);let o=this.layoutVertexArray.length-i,s=Math.floor(t.x/t.sampleCount),c=Math.floor(t.y/t.sampleCount);for(let e=0;e{hh(l,e,t,0,0,1,1,0)},this.segments,this.layoutVertexArray,this.indexArray,c.verticesFlattened,c.indicesTriangles)}_generateSideFaces(e,t){let n=0,r=this.layers[0].layout.get(`fill-extrusion-rounded-corner-distance`)>0?lh(e):null;for(let i=1;iud.MAX_VERTEX_ARRAY_LENGTH&&(t.segment=this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray));let s=a.sub(o)._perp()._unit(),{start:c,end:l}=r?r[i]:{start:s,end:s},u=o.dist(a);n+u>32768&&(n=0),hh(this.layoutVertexArray,a.x,a.y,l.x,l.y,0,0,n),hh(this.layoutVertexArray,a.x,a.y,l.x,l.y,0,1,n),n+=u,hh(this.layoutVertexArray,o.x,o.y,c.x,c.y,0,0,n),hh(this.layoutVertexArray,o.x,o.y,c.x,c.y,0,1,n);let d=t.segment.vertexLength;this.indexArray.emplaceBack(d,d+2,d+1),this.indexArray.emplaceBack(d+1,d+2,d+3),t.segment.vertexLength+=4,t.segment.primitiveLength+=2}}};function _h(e,t){for(let n=0;nvh||=new Gl({"fill-extrusion-rounded-corner-distance":new K(H[`layout_fill-extrusion`][`fill-extrusion-rounded-corner-distance`],`fill-extrusion-rounded-corner-distance`)}),bh,xh=()=>bh||=new Gl({"fill-extrusion-opacity":new K(H[`paint_fill-extrusion`][`fill-extrusion-opacity`],`fill-extrusion-opacity`),"fill-extrusion-color":new q(H[`paint_fill-extrusion`][`fill-extrusion-color`],`fill-extrusion-color`),"fill-extrusion-translate":new K(H[`paint_fill-extrusion`][`fill-extrusion-translate`],`fill-extrusion-translate`),"fill-extrusion-translate-anchor":new K(H[`paint_fill-extrusion`][`fill-extrusion-translate-anchor`],`fill-extrusion-translate-anchor`),"fill-extrusion-pattern":new Hl(H[`paint_fill-extrusion`][`fill-extrusion-pattern`],`fill-extrusion-pattern`),"fill-extrusion-height":new q(H[`paint_fill-extrusion`][`fill-extrusion-height`],`fill-extrusion-height`),"fill-extrusion-base":new q(H[`paint_fill-extrusion`][`fill-extrusion-base`],`fill-extrusion-base`),"fill-extrusion-vertical-gradient":new K(H[`paint_fill-extrusion`][`fill-extrusion-vertical-gradient`],`fill-extrusion-vertical-gradient`)}),Sh={get paint(){return xh()},get layout(){return yh()}},Ch=e=>e.type===`fill-extrusion`,wh=class extends Jl{constructor(e,t){super(e,Sh,t)}createBucket(e){return new gh(e)}queryRadius(){return df(this.paint.get(`fill-extrusion-translate`))}is3D(){return!0}queryIntersectsFeature({queryGeometry:e,feature:t,featureState:n,geometry:r,transform:i,pixelsToTileUnits:a,pixelPosMatrix:o}){let s=ff(e,this.paint.get(`fill-extrusion-translate`),this.paint.get(`fill-extrusion-translate-anchor`),-i.bearingInRadians,a),c=this.paint.get(`fill-extrusion-height`).evaluate(t,n),l=this.paint.get(`fill-extrusion-base`).evaluate(t,n),u=kh(s,o,0),d=Oh(r,l,c,o),f=d[0],p=d[1];return Dh(f,p,u)}};function Th(e,t){return e.x*t.x+e.y*t.y}function Eh(e,t){if(e.length===1){let n=0,r=t[n++],i;for(;!i||r.equals(i);)if(i=t[n++],!i)return 1/0;for(;ne.id),this.index=e.index,this.hasDependencies=!1,this.patternFeatures=[],this.lineClipsArray=[],this.gradients={};for(let e of this.layers)this.gradients[e.id]={};this.layoutVertexArray=new Ju,this.layoutVertexArray2=new Yu,this.indexArray=new ad,this.programConfigurations=new zd(e.layers,e.zoom),this.segments=new ud,this.maxLineLength=0,this.stateDependentLayerIds=this.layers.filter(e=>e.isStateDependent()).map(e=>e.id)}populate(e,t,n){this.hasDependencies=ap(`line`,this.layers,t)||this.hasLineDasharray(this.layers);let r=this.layers[0].layout.get(`line-sort-key`),i=!r.isConstant(),a=[],o=new jl(this.zoom),s=this.layers[0]._featureFilter.needGeometry;for(let{feature:t,id:c,index:l,sourceLayerIndex:u}of e){let e=Kd(t,s);if(!this.layers[0]._featureFilter.filter(o,e,n))continue;let d=i?r.evaluate(e,{},n):void 0,f={id:c,properties:t.properties,type:t.type,sourceLayerIndex:u,index:l,geometry:s?e.geometry:Gd(t),patterns:{},dashes:{},sortKey:d};a.push(f)}i&&a.sort((e,t)=>e.sortKey-t.sortKey);for(let r of a){let{geometry:i,index:a,sourceLayerIndex:o}=r;this.hasDependencies?(ap(`line`,this.layers,t)?op(`line`,this.layers,r,{zoom:this.zoom},t):this.hasLineDasharray(this.layers)&&this.addLineDashDependencies(this.layers,r,this.zoom,t),this.patternFeatures.push(r)):this.addFeature(r,i,a,n,{},{},t.subdivisionGranularity);let s=e[a].feature;t.featureIndex.insert(s,i,a,o,this.index)}}update(e,t,n,r){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(e,t,this.stateDependentLayers,{imagePositions:n,dashPositions:r})}addFeatures({options:e,canonical:t,patternPositions:n,dashPositions:r}){for(let i of this.patternFeatures)this.addFeature(i,i.geometry,i.index,t,n,r,e.subdivisionGranularity)}isEmpty(){return this.layoutVertexArray.length===0}uploadPending(){return!this.uploaded||this.programConfigurations.needsUpload}upload(e){this.uploaded||(this.layoutVertexArray2.length!==0&&(this.layoutVertexBuffer2=e.createVertexBuffer(this.layoutVertexArray2,Nh)),this.layoutVertexBuffer=e.createVertexBuffer(this.layoutVertexArray,jh),this.indexBuffer=e.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(e),this.uploaded=!0}destroy(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy())}lineFeatureClips(e){if(e.properties&&Object.hasOwn(e.properties,`geojsonvt_clip_start`)&&Object.hasOwn(e.properties,`geojsonvt_clip_end`))return{start:+e.properties.geojsonvt_clip_start,end:+e.properties.geojsonvt_clip_end}}addFeature(e,t,n,r,i,a,o){let s=this.layers[0].layout,c=s.get(`line-join`).evaluate(e,{}),l=s.get(`line-cap`).evaluate(e,{}),u=s.get(`line-miter-limit`).evaluate(e,{}),d=s.get(`line-round-limit`).evaluate(e,{});this.lineClips=this.lineFeatureClips(e);for(let n of t)this.addLine(n,e,c,l,u,d,r,o);this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,e,n,{imagePositions:i,dashPositions:a,canonical:r})}addLine(e,t,n,r,i,a,o,s){this.distance=0,this.scaledDistance=0,this.totalDistance=0;let c=o?s.line.getGranularityForZoomLevel(o.z):1;if(e=cm(e,c),this.lineClips){this.lineClipsArray.push(this.lineClips);for(let t=0;t=2&&e[u-1].equals(e[u-2]);)u--;let d=0;for(;d0,C=o.mult(Math.min(y,2)),w=R((y-3)/5,0,1);if(x&&t>d){let e=m.dist(h);if(e>2*f){let t=m.sub(m.sub(h)._mult(f/e)._round());this.updateDistance(h,t),this.addCurrentVertex(t,_,0,0,p),h=t}}let T=h&&g,E=T?n:l?`butt`:r;if(T&&E===`round`&&(yi&&(E=`bevel`),E===`bevel`&&(y>2&&(E=`flipbevel`),y100)o=v.mult(-1);else{let e=y*_.add(v).mag()/_.sub(v).mag();o._perp()._mult(e*(S?-1:1))}this.addCurrentVertex(m,o,0,0,p,!1,C,w),this.addCurrentVertex(m,o.mult(-1),0,0,p,!1,C,w)}else if(E===`bevel`||E===`fakeround`){let e=-Math.sqrt(y*y-1),t=S?e:0,n=S?0:e;if(h&&this.addCurrentVertex(m,_,t,n,p,!1,C),E===`fakeround`){let e=Math.round(b*180/Math.PI/20);for(let t=1;t2*f){let t=m.add(g.sub(m)._mult(f/e)._round());this.updateDistance(m,t),this.addCurrentVertex(t,v,0,0,p),m=t}}}}addCurrentVertex(e,t,n,r,i,a=!1,o=t,s=0){let c=t.x+t.y*n,l=t.y-t.x*n,u=-t.x+t.y*r,d=-t.y-t.x*r,f=o.x+(t.x-o.x)*s,p=o.y+(t.y-o.y)*s;this.addHalfVertex(e,c,l,f,p,a,!1,i),this.addHalfVertex(e,u,d,-f,-p,a,!0,i),this.distance>Ih/2&&this.totalDistance===0&&(this.distance=0,this.updateScaledDistance(),this.addCurrentVertex(e,t,n,r,i,a,o,s))}addHalfVertex({x:e,y:t},n,r,i,a,o,s,c){let l=(this.lineClips?this.scaledDistance*(Ih-1):this.scaledDistance)*Fh;if(this.layoutVertexArray.emplaceBack((e<<1)+ +!!o,(t<<1)+ +!!s,Math.round(63*n)+128,Math.round(63*r)+128,(l&63)<<2,l>>6,Math.round(63*i),Math.round(63*a)),this.lineClips){let e=(this.scaledDistance-this.lineClips.start)/(this.lineClips.end-this.lineClips.start);this.layoutVertexArray2.emplaceBack(e,this.lineClipsArray.length)}let u=c.vertexLength++;this.e1>=0&&this.e2>=0&&(this.indexArray.emplaceBack(this.e1,u,this.e2),c.primitiveLength++),s?this.e2=u:this.e1=u}updateScaledDistance(){this.scaledDistance=this.lineClips?this.lineClips.start+(this.lineClips.end-this.lineClips.start)*this.distance/this.totalDistance:this.distance}updateDistance(e,t){this.distance+=e.dist(t),this.updateScaledDistance()}hasLineDasharray(e){for(let t of e){let e=t.paint.get(`line-dasharray`);if(e&&!e.isConstant())return!0}return!1}addLineDashDependencies(e,t,n,r){for(let i of e){let e=i.paint.get(`line-dasharray`);if(!e||e.value.kind===`constant`)continue;let a=i.layout.get(`line-cap`).evaluate(t,{})===`round`,o={dasharray:e.value.evaluate({zoom:n-1},t,{}),round:a},s={dasharray:e.value.evaluate({zoom:n},t,{}),round:a},c={dasharray:e.value.evaluate({zoom:n+1},t,{}),round:a},l=`${o.dasharray.join(`,`)},${o.round}`,u=`${s.dasharray.join(`,`)},${s.round}`,d=`${c.dasharray.join(`,`)},${c.round}`;r.dashDependencies[l]=o,r.dashDependencies[u]=s,r.dashDependencies[d]=c,t.dashes[i.id]={min:l,mid:u,max:d}}}};G(`LineBucket`,Lh,{omit:[`layers`,`patternFeatures`]});var Rh,zh=()=>Rh||=new Gl({"line-cap":new q(H.layout_line[`line-cap`],`line-cap`),"line-join":new q(H.layout_line[`line-join`],`line-join`),"line-miter-limit":new q(H.layout_line[`line-miter-limit`],`line-miter-limit`),"line-round-limit":new q(H.layout_line[`line-round-limit`],`line-round-limit`),"line-sort-key":new q(H.layout_line[`line-sort-key`],`line-sort-key`)}),Bh,Vh=()=>Bh||=new Gl({"line-opacity":new q(H.paint_line[`line-opacity`],`line-opacity`),"line-layer-opacity":new K(H.paint_line[`line-layer-opacity`],`line-layer-opacity`),"line-color":new q(H.paint_line[`line-color`],`line-color`),"line-translate":new K(H.paint_line[`line-translate`],`line-translate`),"line-translate-anchor":new K(H.paint_line[`line-translate-anchor`],`line-translate-anchor`),"line-width":new q(H.paint_line[`line-width`],`line-width`),"line-gap-width":new q(H.paint_line[`line-gap-width`],`line-gap-width`),"line-offset":new q(H.paint_line[`line-offset`],`line-offset`),"line-blur":new q(H.paint_line[`line-blur`],`line-blur`),"line-dasharray":new Hl(H.paint_line[`line-dasharray`],`line-dasharray`),"line-pattern":new Hl(H.paint_line[`line-pattern`],`line-pattern`),"line-gradient":new Wl(H.paint_line[`line-gradient`],`line-gradient`)}),Hh={get paint(){return Vh()},get layout(){return zh()}},Uh=class extends q{possiblyEvaluate(e,t){return t=new jl(Math.floor(t.zoom),{now:t.now,fadeDuration:t.fadeDuration,zoomHistory:t.zoomHistory,transition:t.transition}),super.possiblyEvaluate(e,t)}evaluate(e,t,n,r){return t=z({},t,{zoom:Math.floor(t.zoom)}),super.evaluate(e,t,n,r)}},Wh,Gh=e=>e.type===`line`,Kh=class extends Jl{constructor(e,t){super(e,Hh,t),this.gradientVersion=0,Wh||(Wh=new Uh(Hh.paint.properties[`line-width`].specification,`line-floorwidth`),Wh.useIntegerZoom=!0)}_handleSpecialPaintPropertyUpdate(e){if(e===`line-gradient`){let e=this.gradientExpression();this.stepInterpolant=Vs(e)?e._styleExpression.expression instanceof ea:!1,this.gradientVersion=(this.gradientVersion+1)%(2**53-1)}}gradientExpression(){return this._transitionablePaint._values[`line-gradient`].value.expression}recalculate(e,t){super.recalculate(e,t),this.paint._values[`line-floorwidth`]=Wh.possiblyEvaluate(this._transitioningPaint._values[`line-width`].value,e)}createBucket(e){return new Lh(e)}queryRadius(e){let t=e,n=qh(uf(`line-width`,this,t),uf(`line-gap-width`,this,t)),r=uf(`line-offset`,this,t);return n/2+Math.abs(r)+df(this.paint.get(`line-translate`))}queryIntersectsFeature({queryGeometry:e,feature:t,featureState:n,geometry:r,transform:i,pixelsToTileUnits:a}){let o=ff(e,this.paint.get(`line-translate`),this.paint.get(`line-translate-anchor`),-i.bearingInRadians,a),s=a/2*qh(this.paint.get(`line-width`).evaluate(t,n),this.paint.get(`line-gap-width`).evaluate(t,n)),c=this.paint.get(`line-offset`).evaluate(t,n);return c&&(r=mf(r,c*a)),$d(o,r,s)}isTileClipped(){return!0}};function qh(e,t){return t>0?t+2*e:e}var Jh=ru([{name:`a_pos_offset`,components:4,type:`Int16`},{name:`a_data`,components:4,type:`Uint16`},{name:`a_pixeloffset`,components:4,type:`Int16`},{name:`a_height_offset`,components:1,type:`Float32`}],4),Yh=ru([{name:`a_projected_pos`,components:3,type:`Float32`}],4);ru([{name:`a_fade_opacity`,components:1,type:`Uint32`}],4);var Xh=ru([{name:`a_placed`,components:2,type:`Uint8`},{name:`a_shift`,components:2,type:`Float32`},{name:`a_box_real`,components:2,type:`Int16`}]);ru([{type:`Int16`,name:`anchorPointX`},{type:`Int16`,name:`anchorPointY`},{type:`Int16`,name:`x1`},{type:`Int16`,name:`y1`},{type:`Int16`,name:`x2`},{type:`Int16`,name:`y2`},{type:`Uint32`,name:`featureIndex`},{type:`Uint16`,name:`sourceLayerIndex`},{type:`Uint16`,name:`bucketIndex`}]);var Zh=ru([{name:`a_pos`,components:2,type:`Int16`},{name:`a_anchor_pos`,components:2,type:`Int16`},{name:`a_extrude`,components:2,type:`Int16`}],4),Qh=ru([{name:`a_pos`,components:2,type:`Float32`},{name:`a_radius`,components:1,type:`Float32`},{name:`a_flags`,components:2,type:`Int16`}],4);ru([{name:`triangle`,components:3,type:`Uint16`}]),ru([{type:`Int16`,name:`anchorX`},{type:`Int16`,name:`anchorY`},{type:`Uint16`,name:`glyphStartIndex`},{type:`Uint16`,name:`numGlyphs`},{type:`Uint32`,name:`vertexStartIndex`},{type:`Uint32`,name:`lineStartIndex`},{type:`Uint32`,name:`lineLength`},{type:`Uint16`,name:`segment`},{type:`Uint16`,name:`lowerSize`},{type:`Uint16`,name:`upperSize`},{type:`Float32`,name:`lineOffsetX`},{type:`Float32`,name:`lineOffsetY`},{type:`Uint8`,name:`writingMode`},{type:`Uint8`,name:`placedOrientation`},{type:`Uint8`,name:`hidden`},{type:`Uint32`,name:`crossTileID`},{type:`Int16`,name:`associatedIconIndex`},{type:`Float32`,name:`heightOffset`}]);var $h=ru([{type:`Int16`,name:`anchorX`},{type:`Int16`,name:`anchorY`},{type:`Int16`,name:`rightJustifiedTextSymbolIndex`},{type:`Int16`,name:`centerJustifiedTextSymbolIndex`},{type:`Int16`,name:`leftJustifiedTextSymbolIndex`},{type:`Int16`,name:`verticalPlacedTextSymbolIndex`},{type:`Int16`,name:`placedIconSymbolIndex`},{type:`Int16`,name:`verticalPlacedIconSymbolIndex`},{type:`Uint16`,name:`key`},{type:`Uint16`,name:`textBoxStartIndex`},{type:`Uint16`,name:`textBoxEndIndex`},{type:`Uint16`,name:`verticalTextBoxStartIndex`},{type:`Uint16`,name:`verticalTextBoxEndIndex`},{type:`Uint16`,name:`iconBoxStartIndex`},{type:`Uint16`,name:`iconBoxEndIndex`},{type:`Uint16`,name:`verticalIconBoxStartIndex`},{type:`Uint16`,name:`verticalIconBoxEndIndex`},{type:`Uint16`,name:`featureIndex`},{type:`Uint16`,name:`numHorizontalGlyphVertices`},{type:`Uint16`,name:`numVerticalGlyphVertices`},{type:`Uint16`,name:`numIconVertices`},{type:`Uint16`,name:`numVerticalIconVertices`},{type:`Uint16`,name:`useRuntimeCollisionCircles`},{type:`Uint32`,name:`crossTileID`},{type:`Float32`,name:`textBoxScale`},{type:`Float32`,name:`collisionCircleDiameter`},{type:`Uint16`,name:`textAnchorOffsetStartIndex`},{type:`Uint16`,name:`textAnchorOffsetEndIndex`},{type:`Float32`,name:`heightOffset`}]);ru([{type:`Float32`,name:`offsetX`}]),ru([{type:`Int16`,name:`x`},{type:`Int16`,name:`y`},{type:`Int16`,name:`tileUnitDistanceFromAnchor`}]),ru([{type:`Uint16`,name:`textAnchor`},{type:`Float32`,components:2,name:`textOffset`}]);var eg=new class{constructor(){this.TIMEOUT=5e3,this.applyArabicShaping=null,this.processBidirectionalText=null,this.processStyledBidirectionalText=null,this.pluginStatus=`unavailable`,this.pluginURL=null,this.loadScriptResolve=()=>{}}setState(e){this.pluginStatus=e.pluginStatus,this.pluginURL=e.pluginURL}getState(){return{pluginStatus:this.pluginStatus,pluginURL:this.pluginURL}}setMethods(e){if(eg.isParsed())throw Error(`RTL text plugin already registered.`);this.applyArabicShaping=e.applyArabicShaping,this.processBidirectionalText=e.processBidirectionalText,this.processStyledBidirectionalText=e.processStyledBidirectionalText,this.loadScriptResolve()}isParsed(){return this.applyArabicShaping!=null&&this.processBidirectionalText!=null&&this.processStyledBidirectionalText!=null}getRTLTextPluginStatus(){return this.pluginStatus}async syncState(e,t){if(this.isParsed())return this.getState();if(e.pluginStatus!==`loading`)return this.setState(e),e;let n=e.pluginURL,r=new Promise(e=>{this.loadScriptResolve=e}),i=new Promise(e=>setTimeout(()=>e(),this.TIMEOUT));if(await t(n),await Promise.race([r,i]),this.isParsed()){let e={pluginStatus:`loaded`,pluginURL:n};return this.setState(e),e}throw this.setState({pluginStatus:`error`,pluginURL:``}),Error(`RTL Text Plugin failed to import scripts from ${n}`)}};function tg(e){return/[\u0600-\u0604\u0606-\u060B\u060D-\u061A\u061C-\u061E\u0620-\u063F\u0641-\u064A\u0656-\u066F\u0671-\u06DC\u06DE-\u070D\u070F-\u074A\u074D-\u077F\u07C0-\u07FA\u07FD-\u07FF\u0840-\u085B\u085E\u0860-\u086A\u0870-\u0891\u0897-\u08E1\u08E3-\u08FF\u1800\u1801\u1804\u1806-\u1819\u1820-\u1878\u1880-\u18AA\uA840-\uA877\uFB50-\uFD3D\uFD40-\uFDCF\uFDF0-\uFDFF\uFE70-\uFE74\uFE76-\uFEFC]|\uD802[\uDEC0-\uDEE6\uDEEB-\uDEF6\uDF80-\uDF91\uDF99-\uDF9C\uDFA9-\uDFAF]|\uD803[\uDD00-\uDD27\uDD30-\uDD39\uDE60-\uDE7E\uDEC2-\uDEC7\uDED0-\uDED8\uDEFA-\uDEFF\uDF30-\uDF59\uDF70-\uDF89\uDFB0-\uDFCB]|\uD805[\uDE60-\uDE6C]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9C-\uDC9F]|\uD83A[\uDD00-\uDD4B\uDD50-\uDD59\uDD5E\uDD5F]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB\uDEF0\uDEF1]/gim.test(String.fromCodePoint(e))}function ng(e){return/[\u0591-\u05C7\u05D0-\u05EA\u05EF-\u05F4\u0600-\u0604\u0606-\u060B\u060D-\u061A\u061C-\u061E\u0620-\u063F\u0641-\u064A\u0656-\u066F\u0671-\u06DC\u06DE-\u070D\u070F-\u074A\u074D-\u07B1\u07C0-\u07FA\u07FD-\u082D\u0830-\u083E\u0840-\u085B\u085E\u0860-\u086A\u0870-\u0891\u0897-\u08E1\u08E3-\u08FF\uFB1D-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFD3D\uFD40-\uFDCF\uFDF0-\uFDFF\uFE70-\uFE74\uFE76-\uFEFC]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC57-\uDC9E\uDCA7-\uDCAF\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDD1B\uDD1F-\uDD39\uDD3F-\uDD59\uDD80-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE38-\uDE3A\uDE3F-\uDE48\uDE50-\uDE58\uDE60-\uDE9F\uDEC0-\uDEE6\uDEEB-\uDEF6\uDF00-\uDF35\uDF39-\uDF55\uDF58-\uDF72\uDF78-\uDF91\uDF99-\uDF9C\uDFA9-\uDFAF]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDD27\uDD30-\uDD39\uDD40-\uDD65\uDD69-\uDD85\uDD8E\uDD8F\uDE60-\uDE7E\uDE80-\uDEA9\uDEAB-\uDEAD\uDEB0\uDEB1\uDEC2-\uDEC7\uDED0-\uDED8\uDEFA-\uDF27\uDF30-\uDF59\uDF70-\uDF89\uDFB0-\uDFCB\uDFE0-\uDFF6]|\uD83A[\uDC00-\uDCC4\uDCC7-\uDCD6\uDD00-\uDD4B\uDD50-\uDD59\uDD5E\uDD5F]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB\uDEF0\uDEF1]/gim.test(String.fromCodePoint(e))}function rg(e){return/[\u02EA\u02EB\u1100-\u11FF\u2E80-\u2FDF\u3000-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u4DBF\u4E00-\uA48C\uA490-\uA4C6\uA960-\uA97C\uAC00-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFE10-\uFE1F\uFE30-\uFE4F\uFF00-\uFFEF]|\uD81B[\uDFE0-\uDFFF]|[\uD81C-\uD822\uD840-\uD868\uD86A-\uD86D\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD88C][\uDC00-\uDFFF]|\uD823[\uDC00-\uDCD5\uDCFF-\uDD1E\uDD80-\uDDF2]|\uD82B[\uDFF0-\uDFFF]|\uD82C[\uDC00-\uDEFB]|\uD83C[\uDE00-\uDEFF]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEAD\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0\uDFF0-\uDFFF]|\uD87B[\uDC00-\uDE5D]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD88D[\uDC00-\uDC79]/gim.test(String.fromCodePoint(e))}function ig(e){return/[\u02EA\u02EB\u2E80-\u2FDF\u2FF0-\u303F\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FD-\u30FF\u3105-\u312F\u31A0-\u4DBF\u4E00-\uA48C\uA490-\uA4C6\uF900-\uFA6D\uFA70-\uFAD9\uFE10-\uFE1F\uFE30-\uFE4F\uFF00-\uFFEF]|\uD81B[\uDFE0-\uDFFF]|[\uD81C-\uD822\uD840-\uD868\uD86A-\uD86D\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD88C][\uDC00-\uDFFF]|\uD823[\uDC00-\uDCD5\uDCFF-\uDD1E\uDD80-\uDDF2]|\uD82B[\uDFF0-\uDFFF]|\uD82C[\uDC00-\uDEFB]|\uD83C[\uDE00-\uDEFF]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEAD\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0\uDFF0-\uDFFF]|\uD87B[\uDC00-\uDE5D]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD88D[\uDC00-\uDC79]/gim.test(String.fromCodePoint(e))}function ag(e){return/[\u02EA\u02EB\u1100-\u11FF\u1401-\u167F\u18B0-\u18FF\u2065\u20DD-\u20E0\u20E2-\u20E4\u2B97\u2BF0-\u2BFF\u2E50\u2E51\u2E80-\u3007\u3012\u3013\u3020-\u302F\u3031-\u30FB\u30FD-\uA4CF\uA960-\uA97F\uAC00-\uD7FF\uF900-\uFAFF\uFE10-\uFE1F\uFE30-\uFE48\uFE50-\uFE57\uFE5F-\uFE62\uFE67-\uFE6F\uFF00-\uFF07\uFF0A-\uFF0C\uFF0E-\uFF19\uFF1F-\uFF3A\uFF3C\uFF3E\uFF40-\uFF5A\uFFE0-\uFFE2\uFFE4-\uFFE7\uFFF0-\uFFF8]|\uD802[\uDD80-\uDD9F]|\uD805[\uDD80-\uDDFF]|\uD806[\uDE00-\uDEBF]|[\uD80C-\uD810\uD81C-\uD822\uD83C\uD83D\uD840-\uD87E\uD880-\uD8BE][\uDC00-\uDFFF]|\uD811[\uDC00-\uDE7F]|\uD81B[\uDFE0-\uDFFF]|\uD823[\uDC00-\uDDFF]|\uD82B[\uDFF0-\uDFFF]|\uD82C[\uDC00-\uDEFF]|\uD833[\uDEC0-\uDFCF]|\uD834[\uDC00-\uDDFF\uDEE0-\uDF7F]|\uD836[\uDC00-\uDEAF]|\uD83E[\uDD00-\uDEFF]|[\uD87F\uD8BF][\uDC00-\uDFFD]/gim.test(String.fromCodePoint(e))}function og(e){return/[\xA7\xA9\xAE\xB1\xBC-\xBE\xD7\xF7\u2016\u2020\u2021\u2030\u2031\u203B\u203C\u2042\u2047-\u2049\u2051\u2100-\u218F\u221E\u2234\u2235\u2300-\u2307\u230C-\u231F\u2324-\u2328\u232B\u237D-\u239A\u23BE-\u23CD\u23CF\u23D1-\u23DB\u23E2-\u2422\u2424-\u24FF\u25A0-\u2619\u2620-\u2767\u2776-\u2793\u2B12-\u2B2F\u2B50-\u2B59\u2BB8-\u2BEB\u3000-\u303F\u30A0-\u30FF\uE000-\uF8FF\uFE30-\uFE6F\uFF00-\uFFEF\uFFFC\uFFFD]|[\uDB80-\uDBFF][\uDC00-\uDFFF]/gim.test(String.fromCodePoint(e))}function sg(e){return/[\r\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0600-\u0605\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DD\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u070F\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u0890\u0891\u0897-\u089F\u08CA-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u09FE\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B55-\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C04\u0C3C\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0CF3\u0D00-\u0D03\u0D3B\u0D3C\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D62\u0D63\u0D81-\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E33-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB3-\u0EBC\u0EC8-\u0ECE\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102D-\u1037\u1039-\u103E\u1056-\u1059\u105E-\u1060\u1071-\u1074\u1082\u1084-\u1086\u108D\u109D\u1100-\u11FF\u135D-\u135F\u1712-\u1715\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u180F\u1885\u1886\u18A9\u1920-\u192B\u1930-\u193B\u1A17-\u1A1B\u1A55-\u1A5E\u1A60\u1A62\u1A65-\u1A7C\u1A7F\u1AB0-\u1ADD\u1AE0-\u1AEB\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF4\u1CF7-\u1CF9\u1DC0-\u1DFF\u200C\u200D\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA82C\uA880\uA881\uA8B4-\uA8C5\uA8E0-\uA8F1\uA8FF\uA926-\uA92D\uA947-\uA953\uA960-\uA97C\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7C\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F\uFF9E\uFF9F]|\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD803[\uDD24-\uDD27\uDD69-\uDD6D\uDEAB\uDEAC\uDEFA-\uDEFF\uDF46-\uDF50\uDF82-\uDF85]|\uD804[\uDC00-\uDC02\uDC38-\uDC46\uDC70\uDC73\uDC74\uDC7F-\uDC82\uDCB0-\uDCBA\uDCBD\uDCC2\uDCCD\uDD00-\uDD02\uDD27-\uDD34\uDD45\uDD46\uDD73\uDD80-\uDD82\uDDB3-\uDDC0\uDDC2\uDDC3\uDDC9-\uDDCC\uDDCE\uDDCF\uDE2C-\uDE37\uDE3E\uDE41\uDEDF-\uDEEA\uDF00-\uDF03\uDF3B\uDF3C\uDF3E-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF62\uDF63\uDF66-\uDF6C\uDF70-\uDF74\uDFB8-\uDFC0\uDFC2\uDFC5\uDFC7-\uDFCA\uDFCC-\uDFD2\uDFE1\uDFE2]|\uD805[\uDC35-\uDC46\uDC5E\uDCB0-\uDCC3\uDDAF-\uDDB5\uDDB8-\uDDC0\uDDDC\uDDDD\uDE30-\uDE40\uDEAB-\uDEB7\uDF1D-\uDF1F\uDF22-\uDF2B]|\uD806[\uDC2C-\uDC3A\uDD30-\uDD35\uDD37\uDD38\uDD3B-\uDD43\uDDD1-\uDDD7\uDDDA-\uDDE0\uDDE4\uDE01-\uDE0A\uDE33-\uDE39\uDE3B-\uDE3E\uDE47\uDE51-\uDE5B\uDE84-\uDE99\uDF60-\uDF67]|\uD807[\uDC2F-\uDC36\uDC38-\uDC3F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD31-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD47\uDD8A-\uDD8E\uDD90\uDD91\uDD93-\uDD97\uDEF3-\uDEF6\uDF00-\uDF03\uDF34-\uDF3A\uDF3E-\uDF42\uDF5A]|\uD80D[\uDC40\uDC47-\uDC55]|\uD818[\uDD1E-\uDD2F]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDD63\uDD67-\uDD6A\uDF4F\uDF51-\uDF87\uDF8F-\uDF92\uDFE4\uDFF0\uDFF1]|\uD82F[\uDC9D\uDC9E]|\uD833[\uDF00-\uDF2D\uDF30-\uDF46]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A\uDC8F\uDD30-\uDD36\uDEAE\uDEEC-\uDEEF]|\uD839[\uDCEC-\uDCEF\uDDEE\uDDEF\uDEE3\uDEE6\uDEEE\uDEEF\uDEF5]|\uD83A[\uDCD0-\uDCD6\uDD44-\uDD4A]|\uD83C[\uDDE6-\uDDFF\uDFFB-\uDFFF]|\uDB40[\uDC20-\uDC7F\uDD00-\uDDEF]/.test(e)}function cg(e){return/[\u0E01-\u0E3A\u0E40-\u0E4E\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECE\u0EDC-\u0EDF\u0F00-\u0F47\u0F49-\u0F6C\u0F71-\u0F97\u0F99-\u0FBC\u0FBE-\u0FCC\u0FCE-\u0FD4\u0FD9\u0FDA\u1000-\u103F\u1050-\u108F\u109A-\u109F\u1780-\u17D3\u17D7\u17DC\u17DD\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19DE\u19DF\u1A20-\u1A5E\u1A60-\u1A7C\u1AA0-\u1AAD\u1B00-\u1B4C\u1B4E-\u1B7F\uA980-\uA9CD\uA9D0-\uA9D9\uA9DE-\uA9EF\uA9FA-\uA9FE\uAA60-\uAAC2\uAADB-\uAADF]|\uD805[\uDF00-\uDF1A\uDF1D-\uDF2B\uDF3A\uDF3B\uDF3F-\uDF46]/gim.test(String.fromCodePoint(e))}function lg(e,t){return/(?:[\u1039\u17D2\u1A60\u1BAB\u200D\uAAF6]|\uD802\uDE3F|\uD804[\uDD33\uDFD0]|\uD806[\uDD3E\uDE47\uDE99]|\uD807[\uDD45\uDD97\uDF42])$/.test(e)||/^\p{gc=Mc}/u.test(t)}var ug={C:`18g,1;g2,3;4nb,1`,D:`17k,1;5,1;1,1;1,5;4,d;1,7;1,2;z,2;8,g;i,12;1,2;9,1;1,1;1,2;14,3;2,1;28,9;3,f;2,4;1,1;2,3;2,6;7a,1;2,5;1,1;g,a;5,2;2,6;1,f`,R:`17m,4;1,1;1,1;5,4;l,1;14,3;1,3;g,i;12,1;2,9;1,1;1,1;2,2;1,1;o,2;2x,3;f,2;4,1;1,2;3,2;6u,j;b,1;r,3;1,1;2,2;6,1`,T:`174,b;1,1;1a,l;g,1;2t,7;2,6;2,2;1,4;bt,9;16,o;1,t;1clb,1`},dg={1569:[65152,0,0,0],1570:[65153,65154,0,0],1571:[65155,65156,0,0],1572:[65157,65158,0,0],1573:[65159,65160,0,0],1574:[65161,65162,65163,65164],1575:[65165,65166,0,0],1576:[65167,65168,65169,65170],1577:[65171,65172,0,0],1578:[65173,65174,65175,65176],1579:[65177,65178,65179,65180],1580:[65181,65182,65183,65184],1581:[65185,65186,65187,65188],1582:[65189,65190,65191,65192],1583:[65193,65194,0,0],1584:[65195,65196,0,0],1585:[65197,65198,0,0],1586:[65199,65200,0,0],1587:[65201,65202,65203,65204],1588:[65205,65206,65207,65208],1589:[65209,65210,65211,65212],1590:[65213,65214,65215,65216],1591:[65217,65218,65219,65220],1592:[65221,65222,65223,65224],1593:[65225,65226,65227,65228],1594:[65229,65230,65231,65232],1601:[65233,65234,65235,65236],1602:[65237,65238,65239,65240],1603:[65241,65242,65243,65244],1604:[65245,65246,65247,65248],1605:[65249,65250,65251,65252],1606:[65253,65254,65255,65256],1607:[65257,65258,65259,65260],1608:[65261,65262,0,0],1609:[65263,65264,64488,64489],1610:[65265,65266,65267,65268],1611:[65136,0,0,65137],1612:[65138,0,0,0],1613:[65140,0,0,0],1614:[65142,0,0,65143],1615:[65144,0,0,65145],1616:[65146,0,0,65147],1617:[65148,0,0,65149],1618:[65150,0,0,65151],1649:[64336,64337,0,0],1655:[64477,0,0,0],1657:[64358,64359,64360,64361],1658:[64350,64351,64352,64353],1659:[64338,64339,64340,64341],1662:[64342,64343,64344,64345],1663:[64354,64355,64356,64357],1664:[64346,64347,64348,64349],1667:[64374,64375,64376,64377],1668:[64370,64371,64372,64373],1670:[64378,64379,64380,64381],1671:[64382,64383,64384,64385],1672:[64392,64393,0,0],1676:[64388,64389,0,0],1677:[64386,64387,0,0],1678:[64390,64391,0,0],1681:[64396,64397,0,0],1688:[64394,64395,0,0],1700:[64362,64363,64364,64365],1702:[64366,64367,64368,64369],1705:[64398,64399,64400,64401],1709:[64467,64468,64469,64470],1711:[64402,64403,64404,64405],1713:[64410,64411,64412,64413],1715:[64406,64407,64408,64409],1722:[64414,64415,0,0],1723:[64416,64417,64418,64419],1726:[64426,64427,64428,64429],1728:[64420,64421,0,0],1729:[64422,64423,64424,64425],1733:[64480,64481,0,0],1734:[64473,64474,0,0],1735:[64471,64472,0,0],1736:[64475,64476,0,0],1737:[64482,64483,0,0],1739:[64478,64479,0,0],1740:[64508,64509,64510,64511],1744:[64484,64485,64486,64487],1746:[64430,64431,0,0],1747:[64432,64433,0,0]},fg={لآ:[65269,65270],لأ:[65271,65272],لإ:[65273,65274],لا:[65275,65276]},pg=1604,mg=/[\u0600-\u06ff\u0750-\u077f\u0870-\u089f\u08a0-\u08ff\ufb50-\ufdff\ufe70-\ufeff]/;function hg(e,t,n){let r=0;for(let i of e.split(`;`)){let[e,a]=i.split(`,`).map(e=>parseInt(e,36)),o=r+e;for(let e=o;e{let t=e.codePointAt(0);return{codePoint:t,type:_g(t),form:null}})}function Sg(e){let t=e.filter(e=>e.type!==`T`);for(let e=0;e0&&vg(t[e-1].type),i=e+1String.fromCodePoint(Tg(e))).join(``)}function Dg(e,t,n){let r=t.layout.get(`text-transform`).evaluate(n,{});return r===`uppercase`?e=e.toLocaleUpperCase():r===`lowercase`&&(e=e.toLocaleLowerCase()),(eg.applyArabicShaping??Eg)(e)}function Og(e,t,n){for(let r of e.sections)r.text=Dg(r.text,t,n);return e}function kg(e,t,n){let r=n?t.last.points:t.first.points,i=n?r[r.length-1]:r[0];return`${e}:${i.x}:${i.y}`}function Ag(e){let t=e.first.points,n=t.length;for(let t=e.first.next;t;t=t.next)n+=t.points.length-1;let r=Array(n);for(let e=0;e=0&&lg(t[e],n)?t[e]+=n:t.push(n)}return t}function Rg(e){let t=new Set;if(Pg){Ig??=new Intl.Segmenter(void 0,{granularity:`word`});for(let{index:n}of Ig.segment(e))t.add(n);return t}let n=0;for(let r of e.split(/\b|(?=\p{Ideo})/u))t.add(n),n+=r.length;return t}function zg(e){let t=e.codePointAt(0);return e.length>(t>65535?2:1)}function Bg(e){return/\s/u.test(String.fromCodePoint(e))}function Vg(e){for(let t of e)if(ag(t.codePointAt(0)))return!0;return!1}function Hg(e){for(let t of e)if(!Ug(t.codePointAt(0)))return!1;return!0}function Ug(e){return!tg(e)}function Wg(e){return!(ag(e)||og(e))}function Gg(e){return/\p{sc=Arab}/u.test(String.fromCodePoint(e))}function Kg(e){return ng(e)}function qg(e){for(let t of e)if(Kg(t.codePointAt(0)))return!0;return!1}var Jg={"!":`︕`,"#":`#`,$:`$`,"%":`%`,"&":`&`,"(":`︵`,")":`︶`,"*":`*`,"+":`+`,",":`︐`,"-":`︲`,".":`・`,"/":`/`,":":`︓`,";":`︔`,"<":`︿`,"=":`=`,">":`﹀`,"?":`︖`,"@":`@`,"[":`﹇`,"\\":`\`,"]":`﹈`,"^":`^`,_:`︳`,"`":```,"{":`︷`,"|":`―`,"}":`︸`,"~":`~`,"¢":`¢`,"£":`£`,"¥":`¥`,"¦":`¦`,"¬":`¬`,"¯":` ̄`,"–":`︲`,"—":`︱`,"‘":`﹃`,"’":`﹄`,"“":`﹁`,"”":`﹂`,"…":`︙`,"⋯":`︙`,"‧":`・`,"₩":`₩`,"、":`︑`,"。":`︒`,"〈":`︿`,"〉":`﹀`,"《":`︽`,"》":`︾`,"「":`﹁`,"」":`﹂`,"『":`﹃`,"』":`﹄`,"【":`︻`,"】":`︼`,"〔":`︹`,"〕":`︺`,"〖":`︗`,"〗":`︘`,"!":`︕`,"(":`︵`,")":`︶`,",":`︐`,"-":`︲`,".":`・`,":":`︓`,";":`︔`,"<":`︿`,">":`﹀`,"?":`︖`,"[":`﹇`,"]":`﹈`,"_":`︳`,"{":`︷`,"|":`―`,"}":`︸`,"⦅":`︵`,"⦆":`︶`,"。":`︒`,"「":`﹁`,"」":`﹂`};function Yg(e){let t=``,n={premature:!0,value:void 0},r=e[Symbol.iterator](),i=r.next(),a=e[Symbol.iterator]();a.next();let o=a.next();for(;!i.done;)(o.done||!Wg(o.value.codePointAt(0))||Jg[o.value])&&(n.premature||!Wg(n.value.codePointAt(0))||Jg[n.value])&&Jg[i.value]?t+=Jg[i.value]:t+=i.value,n={value:i.value,premature:!1},i=r.next(),o=a.next();return t}var Xg={10:!0,13:!0,32:!0,38:!0,41:!0,43:!0,45:!0,47:!0,173:!0,183:!0,8203:!0,8208:!0,8211:!0,8231:!0},Zg={40:!0};function Qg(e,t,n,r,i,a){if(`fontStack`in t){let r=n[t.fontStack]?.default,a=r?.[e];if(a)return a.metrics.advance*t.scale+i;let o=0;for(let n of e){let e=r?.[n];e&&(o+=e.metrics.advance*t.scale+i)}return o}{let e=r[t.imageName];return e?e.displaySize[0]*t.scale*24/a+i:0}}function $g(e,t,n,r){let i=(e-t)**2;return r?et&&e_(e[n-1]);)n--;this.text=e.slice(t,n).join(``),this.sectionIndex=this.sectionIndex.slice(t,n),this._graphemes=null}substring(t,n){let r=this.graphemes().slice(t,n).join(``),i=this.sectionIndex.slice(t,n);return new e(r,this.sections,i)}toCodeUnitIndex(e){return this.graphemes().slice(0,e).join(``).length}toString(){return this.text}getMaxScale(){return this.sectionIndex.reduce((e,t)=>Math.max(e,this.sections[t].scale),0)}getMaxImageSize(e){let t=0,n=0;for(let r=0;r0?n[n.length-1]:``,i=Lg(r+e);this.text+=e,this._graphemes=n.slice(0,r?-1:void 0).concat(i);let a=i.length-+!!r;for(let e=0;e=63743?null:++this.imageSectionID:(this.imageSectionID=57344,this.imageSectionID)}determineLineBreaks(e,t,n,r,i){let a=this.determineTotalWidth(e,n,r,i);if(e>=0&&a>0&&a<=t&&!/[\n\r]/.test(this.text))return[this.length()];let o=[],s=a/Math.max(1,Math.ceil(a/t)),c=this.hasZeroWidthSpaces(),l=this.graphemes(),u=null,d=0,f=0;for(let t=0;t0){let e=l[t-1].codePointAt(0),n=a.codePointAt(0),r=ig(e),i=cg(e)&&cg(n);(Xg[e]||r||`imageName`in this.getSection(t-1)||l[t+1]!==void 0&&Zg[n]||i&&(u??=Rg(this.text)).has(f))&&o.push(n_(t,d,s,o,t_(e,n,r&&c),!1))}Bg(a.codePointAt(0))||(d+=Qg(a,this.getSection(t),n,r,e,i)),f+=a.length}return r_(n_(this.length(),d,s,o,0,!0))}determineTotalWidth(e,t,n,r){let i=0,a=0;for(let o of this.graphemes()){let s=this.getSection(a);i+=Qg(o,s,t,n,e,r),a++}return i}};function a_(){return(function(e){var t={R:`13k,1a,2,3,3,2+1j,ch+16,a+1,5+2,2+n,5,a,4,6+16,4+3,h+1b,4mo,179q,2+9,2+11,2i9+7y,2+68,4,3+4,5+13,4+3,2+4k,3+29,8+cf,1t+7z,w+17,3+3m,1t+3z,16o1+5r,8+30,8+mc,29+1r,29+4v,75+73`,EN:`1c+9,3d+1,6,187+9,513,4+5,7+9,sf+j,175h+9,qw+q,161f+1d,4xt+a,25i+9`,ES:`17,2,6dp+1,f+1,av,16vr,mx+1,4o,2`,ET:`z+2,3h+3,b+1,ym,3e+1,2o,p4+1,8,6u,7c,g6,1wc,1n9+4,30+1b,2n,6d,qhx+1,h0m,a+1,49+2,63+1,4+1,6bb+3,12jj`,AN:`16o+5,2j+9,2+1,35,ed,1ff2+9,87+u`,CS:`18,2+1,b,2u,12k,55v,l,17v0,2,3,53,2+1,b`,B:`a,3,f+2,2v,690`,S:`9,2,k`,WS:`c,k,4f4,1vk+a,u,1j,335`,ON:`x+1,4+4,h+5,r+5,r+3,z,5+3,2+1,2+1,5,2+2,3+4,o,w,ci+1,8+d,3+d,6+8,2+g,39+1,9,6+1,2,33,b8,3+1,3c+1,7+1,5r,b,7h+3,sa+5,2,3i+6,jg+3,ur+9,2v,ij+1,9g+9,7+a,8m,4+1,49+x,14u,2+2,c+2,e+2,e+2,e+1,i+n,e+e,2+p,u+2,e+2,36+1,2+3,2+1,b,2+2,6+5,2,2,2,h+1,5+4,6+3,3+f,16+2,5+3l,3+81,1y+p,2+40,q+a,m+13,2r+ch,2+9e,75+hf,3+v,2+2w,6e+5,f+6,75+2a,1a+p,2+2g,d+5x,r+b,6+3,4+o,g,6+1,6+2,2k+1,4,2j,5h+z,1m+1,1e+f,t+2,1f+e,d+3,4o+3,2s+1,w,535+1r,h3l+1i,93+2,2s,b+1,3l+x,2v,4g+3,21+3,kz+1,g5v+1,5a,j+9,n+v,2,3,2+8,2+1,3+2,2,3,46+1,4+4,h+5,r+5,r+a,3h+2,4+6,b+4,78,1r+24,4+c,4,1hb,ey+6,103+j,16j+c,1ux+7,5+g,fsh,jdq+1t,4,57+2e,p1,1m,1m,1m,1m,4kt+1,7j+17,5+2r,d+e,3+e,2+e,2+10,m+4,w,1n+5,1q,4z+5,4b+rb,9+c,4+c,4+37,d+2g,8+b,l+b,5+1j,9+9,7+13,9+t,3+1,27+3c,2+29,2+3q,d+d,3+4,4+2,6+6,a+o,8+6,a+2,e+6,16+42,2+1i`,BN:`0+8,6+d,2s+5,2+p,e,4m9,1kt+2,2b+5,5+5,17q9+v,7k,6p+8,6+1,119d+3,440+7,96s+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+75,6p+2rz,1ben+1,1ekf+1,1ekf+1`,NSM:`lc+33,7o+6,7c+18,2,2+1,2+1,2,21+a,1d+k,h,2u+6,3+5,3+1,2+3,10,v+q,2k+a,1n+8,a,p+3,2+8,2+2,2+4,18+2,3c+e,2+v,1k,2,5+7,5,4+6,b+1,u,1n,5+3,9,l+1,r,3+1,1m,5+1,5+1,3+2,4,v+1,4,c+1,1m,5+4,2+1,5,l+1,n+5,2,1n,3,2+3,9,8+1,c+1,v,1q,d,1f,4,1m+2,6+2,2+3,8+1,c+1,u,1n,g+1,l+1,t+1,1m+1,5+3,9,l+1,u,21,8+2,2,2j,3+6,d+7,2r,3+8,c+5,23+1,s,2,2,1k+d,2+4,2+1,6+a,2+z,a,2v+3,2+5,2+1,3+1,q+1,5+2,h+3,e,3+1,7,g,jk+2,qb+2,u+2,u+1,v+1,1t+1,2+6,9,3+a,a,1a+2,3c+1,z,3b+2,5+1,a,7+2,64+1,3,1n,2+6,2,2,3+7,7+9,3,1d+g,1s+3,1d,2+4,2,6,15+8,d+1,x+3,3+1,2+2,1l,2+1,4,2+2,1n+7,3+1,49+2,2+c,2+6,5,7,4+1,5j+1l,2+4,k1+w,2db+2,3y,2p+v,ff+3,30+1,n9x+3,2+9,x+1,29+1,7l,4,5,q+1,6,48+1,r+h,e,13+7,q+a,1b+2,1d,3+3,3+1,14,1w+5,3+1,3+1,d,9,1c,1g,2+2,3+1,6+1,2,17+1,9,6n,3,5,fn5,ki+f,h+f,r2,6b,46+4,1af+2,2+1,6+3,15+2,5,4m+1,fy+3,as+1,4a+a,4x,1j+e,1l+2,1e+3,3+1,1y+2,11+4,2+7,1r,d+1,1h+8,b+3,3,2o+2,3,2+1,7,4h,4+7,m+1,1m+1,4,12+6,4+4,5g+7,3+2,2,o,2d+5,2,5+1,2+1,6n+3,7+1,2+1,s+1,2e+7,3,2+1,2z,2,3+5,2,2u+2,3+3,2+4,78+8,2+1,75+1,2,5,41+3,3+1,5,x+5,3+1,15+5,3+3,9,a+5,3+2,1b+c,2+1,bb+6,2+5,2d+l,3+6,2+1,2+1,3f+5,4,2+1,2+6,2,21+1,4,2,9o+1,f0c+4,1o+6,t5,1s+3,2a,f5l+1,43t+2,i+7,3+6,v+3,45+2,1j0+1i,5+1d,9,f,n+4,2+e,11t+6,2+g,3+6,2+1,2+4,7a+6,c6+3,15t+6,32+6,gzhy+6n`,AL:`16w,3,2,e+1b,z+2,2+2s,g+1,8+1,b+m,2+t,s+2i,c+e,4h+f,1d+1e,1bwe+dp,3+3z,x+c,2+1,35+3y,2rm+z,5+7,b+5,dt+l,c+u,17nl+27,1t+27,4x+6n,3+d`,LRO:`6ct`,RLO:`6cu`,LRE:`6cq`,RLE:`6cr`,PDF:`6cs`,LRI:`6ee`,RLI:`6ef`,FSI:`6eg`,PDI:`6eh`},n={},r={};n.L=1,r[1]=`L`,Object.keys(t).forEach(function(e,t){n[e]=1<1,1e>2,u>2,2wt>1,1>1,1ge>1,1wp>1,1j>1,f>1,hm>1,1>1,u>1,u6>1,1>1,+5,28>1,w>1,1>1,+3,b8>1,1>1,+3,1>3,-1>-1,3>1,1>1,+2,1s>1,1>1,x>1,th>1,1>1,+2,db>1,1>1,+3,3>1,1>1,+2,14qm>1,1>1,+1,4q>1,1e>2,u>2,2>1,+1`,canonical:`6f1>-6dx,6dy>-6dx,6ec>-6ed,6ee>-6ed,6ww>2jj,-2ji>2jj,14r4>-1e7l,1e7m>-1e7l,1e7m>-1e5c,1e5d>-1e5b,1e5c>-14qx,14qy>-14qx,14vn>-1ecg,1ech>-1ecg,1edu>-1ecg,1eci>-1ecg,1eda>-1ecg,1eci>-1ecg,1eci>-168q,168r>-168q,168s>-14ye,14yf>-14ye`};function m(e,t){var n=0,r=new Map,i=t&&new Map,a;return e.split(`,`).forEach(function e(o){if(o.indexOf(`+`)!==-1)for(var s=+o;s--;)e(a);else{a=o;var c=o.split(`>`),l=c[0],u=c[1];l=String.fromCodePoint(n+=parseInt(l,36)),u=String.fromCodePoint(n+=parseInt(u,36)),r.set(l,u),t&&i.set(u,l)}}),{map:r,reverseMap:i}}var h,g,_;function v(){if(!h){var e=m(p.pairs,!0),t=e.map,n=e.reverseMap;h=t,g=n,_=m(p.canonical,!1).map}}function y(e){return v(),h.get(e)||null}function b(e){return v(),g.get(e)||null}function x(e){return v(),_.get(e)||null}var S=n.L,C=n.R,w=n.EN,T=n.ES,E=n.ET,D=n.AN,O=n.CS,k=n.B,A=n.S,j=n.ON,M=n.BN,ee=n.NSM,te=n.AL,N=n.LRO,ne=n.RLO,re=n.LRE,ie=n.RLE,ae=n.PDF,oe=n.LRI,se=n.RLI,ce=n.FSI,le=n.PDI;function ue(e,t){for(var n=125,r=new Uint32Array(e.length),l=0;l0)he--;else if(P>0){for(ge=0;!pe[pe.length-1]._isolate;)pe.pop();var xe=pe[pe.length-1]._isolInitIndex;xe!=null&&(m.set(xe,F),m.set(F,xe)),pe.pop(),P--}me=pe[pe.length-1],p[F]=me._level,me._override&&f(F,me._override)}else _e&ae?(he===0&&(ge>0?ge--:!me._isolate&&pe.length>1&&(pe.pop(),me=pe[pe.length-1])),p[F]=me._level):_e&k&&(p[F]=g.level)}else p[F]=me._level,me._override&&_e!==M&&f(F,me._override)}for(var Se=[],Ce=null,we=g.start;we<=g.end;we++){var Te=r[we];if(!(Te&s)){var Ee=p[we],De=Te&i,Oe=Te===le;Ce&&Ee===Ce._level?(Ce._end=we,Ce._endsWithIsolInit=De):Se.push(Ce={_start:we,_end:we,_level:Ee,_startsWithPDI:Oe,_endsWithIsolInit:De})}}for(var ke=[],Ae=0;Ae=0;Ve--)if(!(r[Ve]&s)){Be=p[Ve];break}var He=Fe[Fe.length-1],Ue=p[He],We=g.level;if(!(r[He]&i)){for(var Ge=He+1;Ge<=g.end;Ge++)if(!(r[Ge]&s)){We=p[Ge];break}}ke.push({_seqIndices:Fe,_sosType:Math.max(Be,ze)%2?C:S,_eosType:Math.max(We,Ue)%2?C:S})}}for(var Ke=0;Ke=0;et--)if(!(r[I[et]]&s)){$e=r[I[et]];break}f(Qe,$e&(i|le)?j:$e)}}if(u.get(w))for(var tt=0;tt=-1;rt--){var it=rt===-1?Je:r[I[rt]];if(it&a){it===te&&f(nt,D);break}}}if(u.get(te))for(var at=0;at=0&&(lt=r[I[dt]],lt&s);dt--);for(var ft=st+1;ft=0&&r[I[mt]]&(E|s);mt--)f(I[mt],w);for(pt++;pt=0&&r[I[L]]&s;L--)f(I[L],j);for(var _t=ht+1;_t=0;kt--){var At=Tt[kt].char;if(At===Ot||At===b(x(Dt))||y(x(At))===Dt){wt.push([Tt[kt].seqIndex,Et]),Tt.length=kt;break}}}wt.sort(function(e,t){return e[0]-t[0]});for(var jt=0;jt=0;zt--){var z=I[zt];if(r[z]&Ct){var Bt=r[z]&St?C:S;It=Bt===Xe?Xe:Bt;break}}}if(It){if(r[I[Nt]]=r[I[Pt]]=It,It!==Xe){for(var Vt=Nt+1;Vt=0;qt--)if(r[I[qt]]&s)Wt=qt;else{Kt=r[I[qt]]&St?C:S;break}for(var Jt=Ye,Yt=Ut+1;Yt=0&&d(e[en])&c;en--)p[en]=g.level}}return{levels:p,paragraphs:h};function tn(t,n){for(var a=t;a1,j>2,t>2,u>2,1a>g,2v3>1,1>1,1ge>1,1wd>1,b>1,1j>1,f>1,ai>3,-2>3,+1,8>1k0,-1jq>1y7,-1y6>1hf,-1he>1h6,-1h5>1ha,-1h8>1qi,-1pu>1,6>3u,-3s>7,6>1,1>1,f>1,1>1,+2,3>1,1>1,+13,4>1,1>1,6>1eo,-1ee>1,3>1mg,-1me>1mk,-1mj>1mi,-1mg>1mi,-1md>1,1>1,+2,1>10k,-103>1,1>1,4>1,5>1,1>1,+10,3>1,1>8,-7>8,+1,-6>7,+1,a>1,1>1,u>1,u6>1,1>1,+5,26>1,1>1,2>1,2>2,8>1,7>1,4>1,1>1,+5,b8>1,1>1,+3,1>3,-2>1,2>1,1>1,+2,c>1,3>1,1>1,+2,h>1,3>1,a>1,1>1,2>1,3>1,1>1,d>1,f>1,3>1,1a>1,1>1,6>1,7>1,13>1,k>1,1>1,+19,4>1,1>1,+2,2>1,1>1,+18,m>1,a>1,1>1,lk>1,1>1,4>1,2>1,f>1,3>1,1>1,+3,db>1,1>1,+3,3>1,1>1,+2,14qm>1,1>1,+1,6>1,4j>1,j>2,t>2,u>2,2>1,+1`,fe;function pe(){if(!fe){var e=m(de,!0),t=e.map;e.reverseMap.forEach(function(e,n){t.set(n,e)}),fe=t}}function me(e){return pe(),fe.get(e)||null}function he(e,t,n,r){var i=e.length;n=Math.max(0,n==null?0:+n),r=Math.min(i-1,r==null?i-1:+r);for(var a=new Map,o=n;o<=r;o++)if(t[o]&1){var s=me(e[o]);s!==null&&a.set(o,s)}return a}function ge(e,t,n,r){var i=e.length;n=Math.max(0,n==null?0:+n),r=Math.min(i-1,r==null?i-1:+r);var a=[];return t.paragraphs.forEach(function(i){var o=Math.max(n,i.start),s=Math.min(r,i.end);if(o=o&&d(e[u])&c;u--)l[u]=i.level;for(var f=i.level,p=1/0,m=0;mf&&(f=h),h=p;g--)for(var _=0;_=g){for(var v=_;_+1=g;)_++;_>v&&a.push([v+o,_+o])}}}),a}function P(e,t,n,r){var i=F(e,t,n,r),a=[].concat(e);return i.forEach(function(n,r){a[r]=(t.levels[n]&1?me(e[n]):null)||e[n]}),a.join(``)}function F(e,t,n,r){for(var i=ge(e,t,n,r),a=[],o=0;o=0;r--){let i=o_.getBidiCharTypeName(e[r].text[0]);l_.has(i)?(e[r].level=t,n=!0):n&&c_.has(i)?e[r].level=t:n=!1}}function f_(e,t){let n=t,r=1/0;for(let{level:t}of e)t>n&&(n=t),(t|1)=r;e--)for(let t=0;t=e;)n++;for(let e=t,r=n;et>=e.start&&t<=e.end)?.level??0}function h_(e,t,n,r,i){let a=u_(e,t,r,i);d_(a,n);let o=``,s=[];for(let e of f_(a,n)){if(s_.test(e.text))continue;let t=p_(e);o+=t,s.push(...Array(t.length).fill(e.index))}return{text:o,sourceIndices:s}}function g_(e,t){let n=t.filter(t=>t>0&&te-t),i=[];for(let e=0;e+1e.start))).map(([t,i])=>h_(e,n,m_(r,t),t,i))}function v_(e,t){return __(e,t).map(e=>e.text)}function y_(e,t,n){return __(e,n).map(e=>[e.text,e.sourceIndices.map(e=>t[e]??0)])}var b_=4294967296,x_=typeof TextDecoder>`u`?null:new TextDecoder(`utf-8`),S_=class{constructor(e){this.buf=ArrayBuffer.isView(e)?e:new Uint8Array(e),this.dataView=new DataView(this.buf.buffer,this.buf.byteOffset,this.buf.byteLength),this.pos=0,this.type=0,this._valueStart=-1,this.length=this.buf.length}readFields(e,t,n=this.length){let r;for(;r=this.nextField(n);)e(r,t,this);return t}readMessage(e,t){return this.readFields(e,t,this.readVarint()+this.pos)}readFixed32(){let e=this.dataView.getUint32(this.pos,!0);return this.pos+=4,e}readSFixed32(){let e=this.dataView.getInt32(this.pos,!0);return this.pos+=4,e}readFixed64(){let e=this.dataView.getUint32(this.pos,!0)+this.dataView.getUint32(this.pos+4,!0)*b_;return this.pos+=8,e}readSFixed64(){let e=this.dataView.getUint32(this.pos,!0)+this.dataView.getInt32(this.pos+4,!0)*b_;return this.pos+=8,e}readFloat(){let e=this.dataView.getFloat32(this.pos,!0);return this.pos+=4,e}readDouble(){let e=this.dataView.getFloat64(this.pos,!0);return this.pos+=8,e}readVarint(e){let t=this.buf,n=t[this.pos++];if(n<128)return n;let r=n&127,i;return i=t[this.pos++],r|=(i&127)<<7,i<128||(i=t[this.pos++],r|=(i&127)<<14,i<128)||(i=t[this.pos++],r|=(i&127)<<21,i<128)?r:(i=t[this.pos],r|=(i&15)<<28,C_(r,e,this))}readSVarint(){let e=this.readVarint();return e%2==1?(e+1)/-2:e/2}readBoolean(){return!!this.readVarint()}readString(){let e=this.readVarint()+this.pos,t=this.pos;return this.pos=e,e-t>=12&&x_?x_.decode(this.buf.subarray(t,e)):T_(this.buf,t,e)}readBytes(){let e=this.readVarint()+this.pos,t=this.buf.subarray(this.pos,e);return this.pos=e,t}readPackedVarint(e=[],t){let n=this.readPackedEnd();for(;this.pos=e)return 0;let t=this.readVarint();return this.type=t&7,this._valueStart=this.pos,t>>>3}skip(e){let t=e&7;if(t===0)for(;this.buf[this.pos++]>127;);else if(t===2)this.pos=this.readVarint()+this.pos;else if(t===5)this.pos+=4;else if(t===1)this.pos+=8;else throw Error(`Unimplemented type: ${t}`)}};function C_(e,t,n){let r=n.buf,i,a;if(a=r[n.pos++],i=(a&112)>>4,a<128||(a=r[n.pos++],i|=(a&127)<<3,a<128)||(a=r[n.pos++],i|=(a&127)<<10,a<128)||(a=r[n.pos++],i|=(a&127)<<17,a<128)||(a=r[n.pos++],i|=(a&127)<<24,a<128)||(a=r[n.pos++],i|=(a&1)<<31,a<128))return w_(e,i,t);throw Error(`Expected varint not more than 10 bytes`)}function w_(e,t,n){return n?t*4294967296+(e>>>0):(t>>>0)*4294967296+(e>>>0)}function T_(e,t,n){let r=``,i=t;for(;i239?4:t>223?3:t>191?2:1;if(i+o>n)break;let s,c,l;o===1?t<128&&(a=t):o===2?(s=e[i+1],(s&192)==128&&(a=(t&31)<<6|s&63,a<=127&&(a=null))):o===3?(s=e[i+1],c=e[i+2],(s&192)==128&&(c&192)==128&&(a=(t&15)<<12|(s&63)<<6|c&63,(a<=2047||a>=55296&&a<=57343)&&(a=null))):o===4&&(s=e[i+1],c=e[i+2],l=e[i+3],(s&192)==128&&(c&192)==128&&(l&192)==128&&(a=(t&15)<<18|(s&63)<<12|(c&63)<<6|l&63,(a<=65535||a>=1114112)&&(a=null))),a===null?(a=65533,o=1):a>65535&&(a-=65536,r+=String.fromCharCode(a>>>10&1023|55296),a=56320|a&1023),r+=String.fromCharCode(a),i+=o}return r}function E_(e,t,n){e===1&&n.readMessage(D_,t)}function D_(e,t,n){if(e===3){let{id:e,bitmap:r,width:i,height:a,left:o,top:s,advance:c}=n.readMessage(O_,{});t.push({id:e,bitmap:new If({width:i+6,height:a+6},r),metrics:{width:i,height:a,left:o,top:s,advance:c}})}}function O_(e,t,n){e===1?t.id=n.readVarint():e===2?t.bitmap=n.readBytes():e===3?t.width=n.readVarint():e===4?t.height=n.readVarint():e===5?t.left=n.readSVarint():e===6?t.top=n.readSVarint():e===7&&(t.advance=n.readVarint())}function k_(e){return new S_(e).readFields(E_,[])}function A_(e){return typeof e?.renderWithWebGL==`function`}function j_(e){let{userImage:t}=e;return!t?.render||!t.render()?!1:(A_(t.data)||e.data.replace(new Uint8Array(t.data.buffer)),!0)}function M_(e){let t=0,n=0;for(let r of e)t+=r.w*r.h,n=Math.max(n,r.w);e.sort((e,t)=>t.h-e.h);let r=[{x:0,y:0,w:Math.max(Math.ceil(Math.sqrt(t/.95)),n),h:1/0}],i=0,a=0;for(let t of e)for(let e=r.length-1;e>=0;e--){let n=r[e];if(!(t.w>n.w||t.h>n.h)){if(t.x=n.x,t.y=n.y,a=Math.max(a,t.y+t.h),i=Math.max(i,t.x+t.w),t.w===n.w&&t.h===n.h){let t=r.pop();t&&e=n;e--)t.push(e);n=r+1}else{for(let e=n;ee.toCodeUnitIndex(t)),r=eg.isParsed()?eg:null;if(e.sections.length===1)return r?r.processBidirectionalText(e.toString(),n).map(t=>W_(t,e.sections,[...t].map(()=>0))):v_(e.toString(),n).map(t=>H_([...t],e.sections,[...t].map(()=>0)));let i=B_(e);return r?r.processStyledBidirectionalText(e.text,i,n).map(([t,n])=>W_(t,e.sections,n)):y_(e.text,i,n).map(([t,n])=>{let r=[...t];return H_(r,e.sections,U_(r).map(e=>n[e]??0))})}function H_(e,t,n){let r=new i_(e.join(``),t,[]),i=0;for(let e of r.graphemes())r.sectionIndex.push(n[i]??0),i+=[...e].length;return r}function U_(e){let t=[],n=0;for(let r of e)t.push(n),n+=r.length;return t}function W_(e,t,n){let r=[...e],i=U_(r),a=z_(r);return H_(a.map(e=>r[e]),t,a.map(e=>n[i[e]]??0))}function G_(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m){let h=i_.fromFeature(e,i);d===2&&h.verticalizePunctuation();let g=h.determineLineBreaks(l,a,t,r,p),_=qg(h.text)?V_(h,g):L_(h,g),v=[],y={positionedLines:v,text:h.toString(),top:u[1],bottom:u[1],left:u[0],right:u[0],writingMode:d,iconsInText:!1,verticalizable:!1};return iv(y,t,n,r,_,o,s,c,d,l,f,m),!I_(v)&&y}function K_(e){let t=.5,n=.5;switch(e){case`right`:case`top-right`:case`bottom-right`:t=1;break;case`left`:case`top-left`:case`bottom-left`:t=0}switch(e){case`bottom`:case`bottom-right`:case`bottom-left`:n=1;break;case`top`:case`top-right`:case`top-left`:n=0}return{horizontalAlign:t,verticalAlign:n}}function q_(e,t,n){let r=t.getMaxScale()*24,{maxImageWidth:i,maxImageHeight:a}=t.getMaxImageSize(e),o=Math.max(r,a*n);return{verticalLineContentWidth:Math.max(r,i*n),horizontalLineContentHeight:o}}function J_(e){switch(e){case`top`:return 0;case`center`:return .5;default:return 1}}function Y_(e,t,n,r){if(e?.rect)return e;let i=t[n.fontStack]?.default?.[r];return i?{rect:null,metrics:i.metrics}:null}function X_(e,t,n){return!(e===1||!t&&!ag(n)||t&&(Bg(n)||Gg(n)))}function Z_(e){return/\p{Nd}/u.test(String.fromCodePoint(e))}function Q_(e){return/\p{Lu}/u.test(String.fromCodePoint(e))}function $_(e){return/[\p{P}\p{S}]/u.test(String.fromCodePoint(e))}function ev(e){let t=e.some(Z_)&&e.every(e=>Z_(e)||$_(e)),n=e.length<=3&&e.every(e=>Q_(e)||Z_(e));return t||n}function tv(e){return(Z_(e)||Q_(e))&&!Gg(e)}function nv(e,t){let n=!1;for(let r=0;re.codePointAt(0)),r=n.map(ag),i=t=>!r[t]&&!Bg(n[t])&&!(`imageName`in e.getSection(t));for(let e=0;el){let e=Math.ceil(r/l);n*=e/i,i=e}return{x1:t,y1:n,x2:t+r,y2:n+i}}function dv(e,t,n,r,i,a){let o=e.image,s;if(o.content){let e=o.content,t=o.pixelRatio||1;s=[e[0]/t,e[1]/t,o.displaySize[0]-e[2]/t,o.displaySize[1]-e[3]/t]}let c=t.left*a,l=t.right*a,u,d,f,p;n===`width`||n===`both`?(p=i[0]+c-r[3],d=i[0]+l+r[1]):(p=i[0]+(c+l-o.displaySize[0])/2,d=p+o.displaySize[0]);let m=t.top*a,h=t.bottom*a;return n===`height`||n===`both`?(u=i[1]+m-r[0],f=i[1]+h+r[2]):(u=i[1]+(m+h-o.displaySize[1])/2,f=u+o.displaySize[1]),{image:o,top:u,right:d,bottom:f,left:p,collisionPadding:s}}var fv=32640;function pv(e,t){let{expression:n}=t;if(n.kind===`constant`)return{kind:`constant`,layoutSize:n.evaluate(new jl(e+1))};if(n.kind===`source`)return{kind:`source`};if(n.kind===`composite`){let{minZoom:t,maxZoom:r}=mv(n.zoomStops,e);return{kind:`composite`,minZoom:t,maxZoom:r,interpolationType:n.interpolationType}}{let t=hv(n),r=n.evaluate(new jl(e+1));return{kind:`camera`,zoomStops:n.zoomStops,sizes:t,layoutSize:r,interpolationType:n.interpolationType}}}function mv(e,t){let n=0;for(;ne.evaluate(new jl(t===-1/0?e.zoomStops[1]-1:t)))}function gv(e,{uSize:t,uSizeT:n},{lowerSize:r,upperSize:i}){return e.kind===`source`?r/128:e.kind===`composite`?ia.number(r/128,i/128,n):t}function _v(e,t){let n=0,r=0;return e.kind===`constant`?r=e.layoutSize:e.kind===`camera`?r=vv(e,t):e.kind===`composite`&&(n=yv(e,t)),{uSizeT:n,uSize:r}}function vv({zoomStops:e,sizes:t,layoutSize:n,interpolationType:r},i){let a=e.length-1;for(;a>0&&e[a]>i;)a--;let o=Math.min(a+1,e.length-1),s=r?R(na.interpolationFactor(r,i,e[a],e[o]),0,1):0;return Math.min(ia.number(t[a],t[o],s),n)}function yv({interpolationType:e,minZoom:t,maxZoom:n},r){return e?R(na.interpolationFactor(e,r,t,n),0,1):0}var bv=class e extends k{constructor(e,t,n,r){super(e,t),this.angle=n,r!==void 0&&(this.segment=r)}clone(){return new e(this.x,this.y,this.angle,this.segment)}};G(`Anchor`,bv);function xv(e,t,n,r,i){if(t.segment===void 0||n===0)return!0;let a=t,o=t.segment+1,s=0;for(;s>-n/2;){if(o--,o<0)return!1;s-=e[o].dist(a),a=e[o]}s+=e[o].dist(e[o+1]),o++;let c=[],l=0;for(;sr;)l-=c.shift().angleDelta;if(l>i)return!1;o++,s+=n.dist(a)}return!0}function Sv(e){let t=0;for(let n=0;nl){let u=(l-c)/a,d=new bv(ia.number(r.x,i.x,u),ia.number(r.y,i.y,u),i.angleTo(r),n);return d._round(),!o||xv(e,d,s,o,t)?d:void 0}c+=a}}function Ev(e,t,n,r,i,a,o,s,c){let l=Cv(r,a,o),u=wv(r,i),d=u*o,f=e[0].x===0||e[0].x===c||e[0].y===0||e[0].y===c;t-d=0&&_=0&&v=0&&f+l<=u){let n=new bv(_,v,h,t);n._round(),(!r||xv(e,n,a,r,i))&&p.push(n)}}d+=m}return!s&&!p.length&&!o&&(p=Dv(e,d/2,n,r,i,a,o,!0,c)),p}function Ov(e,t,n,r,i){let a=[];for(let o of e){let e;for(let s=0;s=r&&l.x>=r)&&(c.x>=r?c=new k(r,c.y+(l.y-c.y)*((r-c.x)/(l.x-c.x)))._round():l.x>=r&&(l=new k(r,c.y+(l.y-c.y)*((r-c.x)/(l.x-c.x)))._round()),!(c.y>=i&&l.y>=i)&&(c.y>=i?c=new k(c.x+(l.x-c.x)*((i-c.y)/(l.y-c.y)),i)._round():l.y>=i&&(l=new k(c.x+(l.x-c.x)*((i-c.y)/(l.y-c.y)),i)._round()),(!e||!c.equals(e[e.length-1]))&&(e=[c],a.push(e)),e.push(l)))))}}return a}function kv(e,t,n,r){let i=[],a=e.image,o=a.pixelRatio,s=a.paddedRect.w-2,c=a.paddedRect.h-2,l={x1:e.left,y1:e.top,x2:e.right,y2:e.bottom},u=a.stretchX||[[0,s]],d=a.stretchY||[[0,c]],f=(e,t)=>e+t[1]-t[0],p=u.reduce(f,0),m=d.reduce(f,0),h=s-p,g=c-m,_=0,v=p,y=0,b=m,x=0,S=h,C=0,w=g;if(a.content&&r){let t=a.content,n=t[2]-t[0],r=t[3]-t[1];(a.textFitWidth||a.textFitHeight)&&(l=uv(e)),_=Av(u,0,t[0]),y=Av(d,0,t[1]),v=Av(u,t[0],t[2]),b=Av(d,t[1],t[3]),x=t[0]-_,C=t[1]-y,S=n-v,w=r-b}let T=l.x1,E=l.y1,D=l.x2-T,O=l.y2-E,A=(e,r,i,s)=>{let c=Mv(e.stretch-_,v,D,T),l=Nv(e.fixed-x,S,e.stretch,p),u=Mv(r.stretch-y,b,O,E),d=Nv(r.fixed-C,w,r.stretch,m),f=Mv(i.stretch-_,v,D,T),h=Nv(i.fixed-x,S,i.stretch,p),g=Mv(s.stretch-y,b,O,E),A=Nv(s.fixed-C,w,s.stretch,m),j=new k(c,u),M=new k(f,u),ee=new k(f,g),te=new k(c,g),N=new k(l/o,d/o),ne=new k(h/o,A/o),re=t*Math.PI/180;if(re){let e=Math.sin(re),t=Math.cos(re),n=[t,-e,e,t];j._matMult(n),M._matMult(n),te._matMult(n),ee._matMult(n)}let ie=e.stretch+e.fixed,ae=i.stretch+i.fixed,oe=r.stretch+r.fixed,se=s.stretch+s.fixed;return{tl:j,tr:M,bl:te,br:ee,tex:{x:a.paddedRect.x+1+ie,y:a.paddedRect.y+1+oe,w:ae-ie,h:se-oe},writingMode:void 0,glyphOffset:[0,0],sectionIndex:0,pixelOffsetTL:N,pixelOffsetBR:ne,minFontScaleX:S/o/D,minFontScaleY:w/o/O,isSDF:n}};if(!r||!a.stretchX&&!a.stretchY)i.push(A({fixed:0,stretch:-1},{fixed:0,stretch:-1},{fixed:0,stretch:s+1},{fixed:0,stretch:c+1}));else{let e=jv(u,h,p),t=jv(d,g,m);for(let n=0;n0&&(r=Math.max(10,r),this.circleDiameter=r)}else{let c=a.image?.content&&(a.image.textFitWidth||a.image.textFitHeight)?uv(a):{x1:a.left,y1:a.top,x2:a.right,y2:a.bottom};c.y1=c.y1*o-s[0],c.y2=c.y2*o+s[2],c.x1=c.x1*o-s[3],c.x2=c.x2*o+s[1];let u=a.collisionPadding;if(u&&(c.x1-=u[0]*o,c.y1-=u[1]*o,c.x2+=u[2]*o,c.y2+=u[3]*o),l){let e=new k(c.x1,c.y1),t=new k(c.x2,c.y1),n=new k(c.x1,c.y2),r=new k(c.x2,c.y2),i=l*Math.PI/180;e._rotate(i),t._rotate(i),n._rotate(i),r._rotate(i),c.x1=Math.min(e.x,t.x,n.x,r.x),c.x2=Math.max(e.x,t.x,n.x,r.x),c.y1=Math.min(e.y,t.y,n.y,r.y),c.y2=Math.max(e.y,t.y,n.y,r.y)}e.emplaceBack(t.x,t.y,c.x1,c.y1,c.x2,c.y2,n,r,i)}this.boxEndIndex=e.length}},Iv=class{constructor(e=[],t=(e,t)=>et)){if(this.data=e,this.length=this.data.length,this.compare=t,this.length>0)for(let e=(this.length>>1)-1;e>=0;e--)this._down(e)}push(e){this.data.push(e),this._up(this.length++)}pop(){if(this.length===0)return;let e=this.data[0],t=this.data.pop();return--this.length>0&&(this.data[0]=t,this._down(0)),e}peek(){return this.data[0]}_up(e){let{data:t,compare:n}=this,r=t[e];for(;e>0;){let i=e-1>>1,a=t[i];if(n(r,a)>=0)break;t[e]=a,e=i}t[e]=r}_down(e){let{data:t,compare:n}=this,r=this.length>>1,i=t[e];for(;e=0)break;t[e]=t[r],e=r}t[e]=i}};function Lv(e,t=1){let n=km.fromPoints(e[0]),r=Math.min(n.width(),n.height()),i=r/2,a=new Iv([],Rv),{minX:o,minY:s,maxX:c,maxY:l}=n;if(r===0)return new k(o,s);for(let t=o;td.d||!d.d)&&(d=n),!(n.max-d.d<=t)&&(i=n.h/2,a.push(new zv(n.p.x-i,n.p.y-i,i,e)),a.push(new zv(n.p.x+i,n.p.y-i,i,e)),a.push(new zv(n.p.x-i,n.p.y+i,i,e)),a.push(new zv(n.p.x+i,n.p.y+i,i,e)))}return u.d>0&&d.d-u.d<=t?u.p:d.p}function Rv(e,t){return t.max-e.max}var zv=class{constructor(e,t,n,r){this.p=new k(e,t),this.h=n,this.d=Bv(this.p,r),this.max=this.d+this.h*Math.SQRT2}};function Bv(e,t){let n=!1,r=1/0;for(let i of t)for(let t=0,a=i.length,o=a-1;te.y!=s.y>e.y&&e.x<(s.x-a.x)*(e.y-a.y)/(s.y-a.y)+a.x&&(n=!n),r=Math.min(r,af(e,a,s))}return(n?1:-1)*Math.sqrt(r)}function Vv(e){let t=0,n=0,r=0,i=e[0];for(let e=0,a=i.length,o=a-1;ee*24);r.startsWith(`top`)?i[1]-=7:r.startsWith(`bottom`)&&(i[1]+=7),t[n+1]=i}return new Hi(t)}let a=r.get(`text-variable-anchor`);if(a){let i;i=e._unevaluatedLayout.getValue(`text-radial-offset`)===void 0?r.get(`text-offset`).evaluate(t,{},n).map(e=>e*24):[r.get(`text-radial-offset`).evaluate(t,{},n)*24,Uv];let o=[];for(let e of a)o.push(e,Wv(e,i));return new Hi(o)}return null}function Kv(e){e.bucket.createArrays();let t=512*e.bucket.overscaling;e.bucket.tilePixelRatio=L/t,e.bucket.compareText={},e.bucket.iconsNeedLinear=!1;let n=e.bucket.layers[0],r=n.layout,i=n._unevaluatedLayout._values,a={layoutIconSize:i[`icon-size`].possiblyEvaluate(new jl(e.bucket.zoom+1),e.canonical),layoutTextSize:i[`text-size`].possiblyEvaluate(new jl(e.bucket.zoom+1),e.canonical),textMaxSize:i[`text-size`].possiblyEvaluate(new jl(18))};if(e.bucket.textSizeData.kind===`composite`){let{minZoom:t,maxZoom:n}=e.bucket.textSizeData;a.compositeTextSizes=[i[`text-size`].possiblyEvaluate(new jl(t),e.canonical),i[`text-size`].possiblyEvaluate(new jl(n),e.canonical)]}if(e.bucket.iconSizeData.kind===`composite`){let{minZoom:t,maxZoom:n}=e.bucket.iconSizeData;a.compositeIconSizes=[i[`icon-size`].possiblyEvaluate(new jl(t),e.canonical),i[`icon-size`].possiblyEvaluate(new jl(n),e.canonical)]}let o=r.get(`text-line-height`)*24,s=r.get(`text-rotation-alignment`)!==`viewport`&&r.get(`symbol-placement`)!==`point`,c=r.get(`text-keep-upright`),l=r.get(`text-size`);for(let t of e.bucket.features){let i=r.get(`text-font`).evaluate(t,{},e.canonical).join(`,`),u=l.evaluate(t,{},e.canonical),d=a.layoutTextSize.evaluate(t,{},e.canonical),f=a.layoutIconSize.evaluate(t,{},e.canonical),p={horizontal:{},vertical:void 0},m=t.text,h=[0,0];if(m){let a=m.toString(),l=r.get(`text-letter-spacing`).evaluate(t,{},e.canonical)*24,f=Hg(a)?l:0,g=r.get(`text-anchor`).evaluate(t,{},e.canonical),_=Gv(n,t,e.canonical);if(!_){let n=r.get(`text-radial-offset`).evaluate(t,{},e.canonical);h=n?Wv(g,[n*24,Uv]):r.get(`text-offset`).evaluate(t,{},e.canonical).map(e=>e*24)}let v=s?`center`:r.get(`text-justify`).evaluate(t,{},e.canonical),y=r.get(`symbol-placement`)===`point`?r.get(`text-max-width`).evaluate(t,{},e.canonical)*24:1/0,b=()=>{e.bucket.allowVerticalPlacement&&Vg(a)&&(p.vertical=G_(m,e.glyphMap,e.glyphPositions,e.imagePositions,i,y,o,g,`left`,f,h,2,!0,d,u))};if(!s&&_){let t=new Set;if(v===`auto`)for(let e=0;e<_.values.length;e+=2)t.add(qv(_.values[e]));else t.add(v);let n=!1;for(let r of t)if(!p.horizontal[r]){if(n)p.horizontal[r]=p.horizontal[0];else{let t=G_(m,e.glyphMap,e.glyphPositions,e.imagePositions,i,y,o,`center`,r,f,h,1,!1,d,u);t&&(p.horizontal[r]=t,n=t.positionedLines.length===1)}}b()}else{v===`auto`&&(v=qv(g));let t=G_(m,e.glyphMap,e.glyphPositions,e.imagePositions,i,y,o,g,v,f,h,1,!1,d,u);t&&(p.horizontal[v]=t),b(),Vg(a)&&s&&c&&(p.vertical=G_(m,e.glyphMap,e.glyphPositions,e.imagePositions,i,y,o,g,v,f,h,2,!1,d,u))}}let g,_=!1;if(t.icon?.name){let n=e.imageMap[t.icon.name];n&&(g=lv(e.imagePositions[t.icon.name],r.get(`icon-offset`).evaluate(t,{},e.canonical),r.get(`icon-anchor`).evaluate(t,{},e.canonical)),_=!!n.sdf,e.bucket.sdfIcons===void 0?e.bucket.sdfIcons=_:e.bucket.sdfIcons!==_&&$t(`Style sheet warning: Cannot mix SDF and non-SDF icons in one buffer`),n.pixelRatio===e.bucket.pixelRatio?r.get(`icon-rotate`).constantOr(1)!==0&&(e.bucket.iconsNeedLinear=!0):e.bucket.iconsNeedLinear=!0)}let v=Zv(p.horizontal)||p.vertical;e.bucket.iconsInText||=v?v.iconsInText:!1,(v||g)&&Jv(e.bucket,t,p,g,e.imageMap,a,d,f,h,_,e.canonical,e.subdivisionGranularity,e.hasPromoteId)}e.showCollisionBoxes&&e.bucket.generateCollisionDebugBuffers()}function qv(e){switch(e){case`right`:case`top-right`:case`bottom-right`:return`right`;case`left`:case`top-left`:case`bottom-left`:return`left`}return`center`}function Jv(e,t,n,r,i,a,o,s,c,l,u,d,f){let p=a.textMaxSize.evaluate(t,{});p===void 0&&(p=o);let m=e.layers[0].layout,h=m.get(`icon-offset`).evaluate(t,{},u),g=Zv(n.horizontal),_=o/24,v=e.tilePixelRatio*_,y=e.tilePixelRatio*p/24,b=e.tilePixelRatio*s,x=e.tilePixelRatio*m.get(`symbol-spacing`),S=m.get(`text-padding`)*e.tilePixelRatio,C=vy(m,t,u,e.tilePixelRatio),w=m.get(`text-max-angle`)/180*Math.PI,T=m.get(`text-rotation-alignment`)!==`viewport`&&m.get(`symbol-placement`)!==`point`,E=m.get(`icon-rotation-alignment`).constantOr(`viewport`)===`map`&&m.get(`symbol-placement`)!==`point`,D=m.get(`symbol-placement`),O=x/2,k=m.get(`icon-text-fit`),A;r&&k!==`none`&&(e.allowVerticalPlacement&&n.vertical&&(A=dv(r,n.vertical,k,m.get(`icon-text-fit-padding`),h,_)),g&&(r=dv(r,g,k,m.get(`icon-text-fit-padding`),h,_)));let j=u?d.line.getGranularityForZoomLevel(u.z):1,M=(s,d)=>{d.x<0||d.x>=8192||d.y<0||d.y>=8192||Qv(e,d,s,n,r,i,A,e.layers[0],e.collisionBoxArray,t.index,t.sourceLayerIndex,e.index,v,[S,S,S,S],T,c,b,C,E,h,t,a,l,u,o,f)};if(D===`line`)for(let i of Ov(t.geometry,0,0,L,L)){let t=cm(i,j),a=Ev(t,x,w,n.vertical||g,r,24,y,e.overscaling,L);for(let n of a){let r=g;(!r||!$v(e,r.text,O,n))&&M(t,n)}}else if(D===`line-center`){for(let e of t.geometry)if(e.length>1){let t=cm(e,j),i=Tv(t,w,n.vertical||g,r,24,y);i&&M(t,i)}}else if(t.type===`Polygon`)for(let e of la(t.geometry,0)){let t=Lv(e,16);M(cm(e[0],j,!0),new bv(t.x,t.y,0))}else if(t.type===`LineString`)for(let e of t.geometry){let t=cm(e,j);M(t,new bv(t[0].x,t[0].y,0))}else if(t.type===`Point`)for(let e of t.geometry)for(let t of e)M([t],new bv(t.x,t.y,0))}function Yv(e,t){let n=e.length,r=t?.values;if(r?.length>0)for(let t=0;t32640&&$t(`${e.layerIds[0]}: Value for "text-size" is >= 255. Reduce your "text-size".`)):_.kind===`composite`&&(v=[128*m.compositeTextSizes[0].evaluate(o,{},h),128*m.compositeTextSizes[1].evaluate(o,{},h)],(v[0]>32640||v[1]>32640)&&$t(`${e.layerIds[0]}: Value for "text-size" is >= 255. Reduce your "text-size".`)),e.addSymbols(e.text,g,v,s,a,o,u,t,l.lineStartIndex,l.lineLength,p,h,c);for(let t of d)f[t]=e.text.placedSymbolArray.length-1;return g.length*4}function Zv(e){for(let t in e)return e[t];return null}function Qv(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g,_,v,y,b,x,S,C,w,T){let E=e.addToLineVertexArray(t,n),D=s.layout.get(`symbol-height-offset`).evaluate(b,{},C);D>e.maxHeightOffset&&(e.maxHeightOffset=D);let O,k,A,j,M=0,ee=0,te=0,N=0,ne=-1,re=-1,ie={},ae=(0,gd.default)(``);if(e.allowVerticalPlacement&&r.vertical){let e=s.layout.get(`text-rotate`).evaluate(b,{},C)+90,n=r.vertical;A=new Fv(c,t,l,u,d,n,f,p,m,e),o&&(j=new Fv(c,t,l,u,d,o,g,_,m,e))}if(i){let n=s.layout.get(`icon-rotate`).evaluate(b,{}),r=s.layout.get(`icon-text-fit`)!==`none`,a=kv(i,n,S,r),f=o?kv(o,n,S,r):void 0;k=new Fv(c,t,l,u,d,i,g,_,!1,n),M=a.length*4;let p=e.iconSizeData,m=null;p.kind===`source`?(m=[128*s.layout.get(`icon-size`).evaluate(b,{})],m[0]>32640&&$t(`${e.layerIds[0]}: Value for "icon-size" is >= 255. Reduce your "icon-size".`)):p.kind===`composite`&&(m=[128*x.compositeIconSizes[0].evaluate(b,{},C),128*x.compositeIconSizes[1].evaluate(b,{},C)],(m[0]>32640||m[1]>32640)&&$t(`${e.layerIds[0]}: Value for "icon-size" is >= 255. Reduce your "icon-size".`)),e.addSymbols(e.icon,a,m,y,v,b,0,t,E.lineStartIndex,E.lineLength,-1,C,D),ne=e.icon.placedSymbolArray.length-1,f&&(ee=f.length*4,e.addSymbols(e.icon,f,m,y,v,b,2,t,E.lineStartIndex,E.lineLength,-1,C,D),re=e.icon.placedSymbolArray.length-1)}let oe=Object.keys(r.horizontal);for(let n of oe){let i=r.horizontal[n];O||=(ae=(0,gd.default)(i.text),new Fv(c,t,l,u,d,i,f,p,m,s.layout.get(`text-rotate`).evaluate(b,{},C)));let o=i.positionedLines.length===1;if(te+=Xv(e,t,i,a,s,m,b,h,D,E,r.vertical?1:3,o?oe:[n],ie,ne,x,C),o)break}r.vertical&&(N+=Xv(e,t,r.vertical,a,s,m,b,h,D,E,2,[`vertical`],ie,re,x,C));let se=O?O.boxStartIndex:e.collisionBoxArray.length,ce=O?O.boxEndIndex:e.collisionBoxArray.length,le=A?A.boxStartIndex:e.collisionBoxArray.length,ue=A?A.boxEndIndex:e.collisionBoxArray.length,de=k?k.boxStartIndex:e.collisionBoxArray.length,fe=k?k.boxEndIndex:e.collisionBoxArray.length,pe=j?j.boxStartIndex:e.collisionBoxArray.length,me=j?j.boxEndIndex:e.collisionBoxArray.length,he=-1,ge=(e,t)=>e?.circleDiameter?Math.max(e.circleDiameter,t):t;he=ge(O,he),he=ge(A,he),he=ge(k,he),he=ge(j,he);let P=+(he>-1);P&&(he*=w/24),e.glyphOffsetArray.length>=e.maxGlyphs&&$t(`Too many glyphs being rendered in a tile. See https://github.com/mapbox/mapbox-gl-js/issues/2907`),b.sortKey!==void 0&&e.addToSortKeyRanges(e.symbolInstances.length,b.sortKey);let F=Gv(s,b,C),[_e,ve]=Yv(e.textAnchorOffsets,F);T&&(ae=ey(ae,b)),e.symbolInstances.emplaceBack(t.x,t.y,ie.right>=0?ie.right:-1,ie.center>=0?ie.center:-1,ie.left>=0?ie.left:-1,ie.vertical||-1,ne,re,ae,se,ce,le,ue,de,fe,pe,me,l,te,N,M,ee,P,0,f,he,_e,ve,D)}function $v(e,t,n,r){let i=e.compareText;if(!(t in i))i[t]=[];else{let e=i[t];for(let t=e.length-1;t>=0;t--)if(r.dist(e[t])e.id),this.index=e.index,this.pixelRatio=e.pixelRatio,this.sourceLayerIndex=e.sourceLayerIndex,this.hasDependencies=!0,this.hasRTLText=!1,this.maxHeightOffset=0,this.sortKeyRanges=[],this.collisionCircleArray=[],this.maxGlyphs=65535;let t=this.layers[0]._unevaluatedLayout._values;this.textSizeData=pv(this.zoom,t[`text-size`]),this.iconSizeData=pv(this.zoom,t[`icon-size`]);let n=this.layers[0].layout,r=n.get(`symbol-sort-key`),i=n.get(`symbol-z-order`);this.canOverlap=ty(n,`text-overlap`,`text-allow-overlap`)!==`never`||ty(n,`icon-overlap`,`icon-allow-overlap`)!==`never`||n.get(`text-ignore-placement`)||n.get(`icon-ignore-placement`),this.sortFeaturesByKey=i!==`viewport-y`&&!r.isConstant();let a=i===`viewport-y`||i===`auto`&&!this.sortFeaturesByKey;this.sortFeaturesByY=a&&this.canOverlap,n.get(`symbol-placement`)===`point`&&(this.writingModes=n.get(`text-writing-mode`).map(e=>F_[e])),this.stateDependentLayerIds=this.layers.filter(e=>e.isStateDependent()).map(e=>e.id),this.sourceID=e.sourceID}createArrays(){this.text=new oy(new zd(this.layers,this.zoom,e=>e.startsWith(`text`))),this.icon=new oy(new zd(this.layers,this.zoom,e=>e.startsWith(`icon`))),this.glyphOffsetArray=new Iu,this.lineVertexArray=new Lu,this.symbolInstances=new Fu,this.textAnchorOffsets=new zu}calculateGlyphDependencies(e,t,n,r,i){let a=(r||this.allowVerticalPlacement)&&i,o=i_.fromFeature(e,n),s=o.graphemes();for(let e=0;e0)&&(a.value.kind!==`constant`||a.value.value.length>0),l=s.value.kind!==`constant`||!!s.value.value||Object.keys(s.parameters).length>0,u=i.get(`symbol-sort-key`);if(this.features=[],!c&&!l)return;let d=t.iconDependencies,f=t.glyphDependencies,p=t.availableImages,m=new jl(this.zoom);for(let{feature:t,id:o,index:s,sourceLayerIndex:h}of e){let e=r._featureFilter.needGeometry,g=Kd(t,e);if(!r._featureFilter.filter(m,g,n))continue;e||(g.geometry=Gd(t));let _;if(c){let e=r.getValueAndResolveTokens(`text-field`,g,n,p),t=Ii.factory(e);this.hasRTLText||=ay(t),_=Og(t,r,g)}let v;if(l){let e=r.getValueAndResolveTokens(`icon-image`,g,n,p);v=e instanceof Ui?e:Ui.fromString(e)}if(!_&&!v)continue;let y=this.sortFeaturesByKey?u.evaluate(g,{},n):void 0,b={id:o,text:_,icon:v,index:s,sourceLayerIndex:h,geometry:g.geometry,properties:t.properties,type:Nm.types[t.type],sortKey:y};if(this.features.push(b),v&&(d[v.name]=!0),_){let e=a.evaluate(g,{},n).join(`,`),t=i.get(`text-rotation-alignment`)!==`viewport`&&i.get(`symbol-placement`)!==`point`;this.allowVerticalPlacement=this.writingModes?.includes(2);let r=Vg(_.toString());this.calculateGlyphDependencies(_,f,e,t,r);for(let e of _.sections)e.image&&(d[e.image.name]=!0)}}i.get(`symbol-placement`)===`line`&&(this.features=Ng(this.features)),this.sortFeaturesByKey&&this.features.sort((e,t)=>e.sortKey-t.sortKey)}update(e,t,n){this.stateDependentLayers.length&&(this.text.programConfigurations.updatePaintArrays(e,t,this.layers,{imagePositions:n}),this.icon.programConfigurations.updatePaintArrays(e,t,this.layers,{imagePositions:n}))}addFeatures({options:e,canonical:t,glyphMap:n,glyphPositions:r,iconMap:i,iconPositions:a,showCollisionBoxes:o}){Kv({bucket:this,glyphMap:n,glyphPositions:r,imageMap:i,imagePositions:a,showCollisionBoxes:o,canonical:t,subdivisionGranularity:e.subdivisionGranularity,hasPromoteId:e.featureIndex.promoteId!=null})}isEmpty(){return this.symbolInstances.length===0}uploadPending(){return!this.uploaded||this.text.programConfigurations.needsUpload||this.icon.programConfigurations.needsUpload}upload(e){!this.uploaded&&this.hasDebugData()&&(this.textCollisionBox.upload(e),this.iconCollisionBox.upload(e)),this.text.upload(e,this.sortFeaturesByY,!this.uploaded,this.text.programConfigurations.needsUpload),this.icon.upload(e,this.sortFeaturesByY,!this.uploaded,this.icon.programConfigurations.needsUpload),this.uploaded=!0}destroyDebugData(){this.textCollisionBox.destroy(),this.iconCollisionBox.destroy()}destroy(){this.text.destroy(),this.icon.destroy(),this.hasDebugData()&&this.destroyDebugData()}addToLineVertexArray(e,t){let n=this.lineVertexArray.length;if(e.segment!==void 0){let n=e.dist(t[e.segment+1]),r=e.dist(t[e.segment]),i={};for(let r=e.segment+1;r=0;n--)i[n]={x:t[n].x,y:t[n].y,tileUnitDistanceFromAnchor:r},n>0&&(r+=t[n-1].dist(t[n]));for(let e=0;e0}hasIconData(){return this.icon.segments.get().length>0}hasDebugData(){return this.textCollisionBox&&this.iconCollisionBox}hasTextCollisionBoxData(){return this.hasDebugData()&&this.textCollisionBox.segments.get().length>0}hasIconCollisionBoxData(){return this.hasDebugData()&&this.iconCollisionBox.segments.get().length>0}addIndicesForPlacedSymbol(e,t){let n=e.placedSymbolArray.get(t),r=n.vertexStartIndex+n.numGlyphs*4;for(let t=n.vertexStartIndex;tr[e]-r[t]||i[t]-i[e]),a}addToSortKeyRanges(e,t){let n=this.sortKeyRanges[this.sortKeyRanges.length-1];n?.sortKey===t?n.symbolInstanceEnd=e+1:this.sortKeyRanges.push({sortKey:t,symbolInstanceStart:e,symbolInstanceEnd:e+1})}sortFeatures(e){if(this.sortFeaturesByY&&this.sortedAngle!==e&&!(this.text.segments.get().length>1||this.icon.segments.get().length>1)){this.symbolInstanceIndexes=this.getSortedSymbolIndexes(e),this.sortedAngle=e,this.text.indexArray.clear(),this.icon.indexArray.clear(),this.featureSortOrder=[];for(let e of this.symbolInstanceIndexes){let t=this.symbolInstances.get(e);this.featureSortOrder.push(t.featureIndex);let n=[t.rightJustifiedTextSymbolIndex,t.centerJustifiedTextSymbolIndex,t.leftJustifiedTextSymbolIndex];for(let e=0;e=0&&n.indexOf(t)===e&&this.addIndicesForPlacedSymbol(this.text,t)}t.verticalPlacedTextSymbolIndex>=0&&this.addIndicesForPlacedSymbol(this.text,t.verticalPlacedTextSymbolIndex),t.placedIconSymbolIndex>=0&&this.addIndicesForPlacedSymbol(this.icon,t.placedIconSymbolIndex),t.verticalPlacedIconSymbolIndex>=0&&this.addIndicesForPlacedSymbol(this.icon,t.verticalPlacedIconSymbolIndex)}this.text.indexBuffer&&this.text.indexBuffer.updateData(this.text.indexArray),this.icon.indexBuffer&&this.icon.indexBuffer.updateData(this.icon.indexArray)}}};G(`SymbolBucket`,cy,{omit:[`layers`,`collisionBoxArray`,`features`,`compareText`]});function ly(e,t){return t.replace(/{([^{}]+)}/g,(t,n)=>e&&n in e?String(e[n]):``)}var uy,dy=()=>uy||=new Gl({"symbol-placement":new K(H.layout_symbol[`symbol-placement`],`symbol-placement`),"symbol-spacing":new K(H.layout_symbol[`symbol-spacing`],`symbol-spacing`),"symbol-avoid-edges":new K(H.layout_symbol[`symbol-avoid-edges`],`symbol-avoid-edges`),"symbol-sort-key":new q(H.layout_symbol[`symbol-sort-key`],`symbol-sort-key`),"symbol-z-order":new K(H.layout_symbol[`symbol-z-order`],`symbol-z-order`),"icon-allow-overlap":new K(H.layout_symbol[`icon-allow-overlap`],`icon-allow-overlap`),"icon-overlap":new K(H.layout_symbol[`icon-overlap`],`icon-overlap`),"icon-ignore-placement":new K(H.layout_symbol[`icon-ignore-placement`],`icon-ignore-placement`),"icon-optional":new K(H.layout_symbol[`icon-optional`],`icon-optional`),"icon-rotation-alignment":new q(H.layout_symbol[`icon-rotation-alignment`],`icon-rotation-alignment`),"icon-size":new q(H.layout_symbol[`icon-size`],`icon-size`),"icon-text-fit":new K(H.layout_symbol[`icon-text-fit`],`icon-text-fit`),"icon-text-fit-padding":new K(H.layout_symbol[`icon-text-fit-padding`],`icon-text-fit-padding`),"icon-image":new q(H.layout_symbol[`icon-image`],`icon-image`),"icon-rotate":new q(H.layout_symbol[`icon-rotate`],`icon-rotate`),"icon-padding":new q(H.layout_symbol[`icon-padding`],`icon-padding`),"icon-keep-upright":new K(H.layout_symbol[`icon-keep-upright`],`icon-keep-upright`),"icon-offset":new q(H.layout_symbol[`icon-offset`],`icon-offset`),"icon-anchor":new q(H.layout_symbol[`icon-anchor`],`icon-anchor`),"icon-pitch-alignment":new K(H.layout_symbol[`icon-pitch-alignment`],`icon-pitch-alignment`),"text-pitch-alignment":new K(H.layout_symbol[`text-pitch-alignment`],`text-pitch-alignment`),"text-rotation-alignment":new K(H.layout_symbol[`text-rotation-alignment`],`text-rotation-alignment`),"text-field":new q(H.layout_symbol[`text-field`],`text-field`),"text-font":new q(H.layout_symbol[`text-font`],`text-font`),"text-size":new q(H.layout_symbol[`text-size`],`text-size`),"text-max-width":new q(H.layout_symbol[`text-max-width`],`text-max-width`),"text-line-height":new K(H.layout_symbol[`text-line-height`],`text-line-height`),"text-letter-spacing":new q(H.layout_symbol[`text-letter-spacing`],`text-letter-spacing`),"text-justify":new q(H.layout_symbol[`text-justify`],`text-justify`),"text-radial-offset":new q(H.layout_symbol[`text-radial-offset`],`text-radial-offset`),"text-variable-anchor":new K(H.layout_symbol[`text-variable-anchor`],`text-variable-anchor`),"text-variable-anchor-offset":new q(H.layout_symbol[`text-variable-anchor-offset`],`text-variable-anchor-offset`),"text-anchor":new q(H.layout_symbol[`text-anchor`],`text-anchor`),"text-max-angle":new K(H.layout_symbol[`text-max-angle`],`text-max-angle`),"text-writing-mode":new K(H.layout_symbol[`text-writing-mode`],`text-writing-mode`),"text-rotate":new q(H.layout_symbol[`text-rotate`],`text-rotate`),"text-padding":new K(H.layout_symbol[`text-padding`],`text-padding`),"text-keep-upright":new K(H.layout_symbol[`text-keep-upright`],`text-keep-upright`),"text-transform":new q(H.layout_symbol[`text-transform`],`text-transform`),"text-offset":new q(H.layout_symbol[`text-offset`],`text-offset`),"text-allow-overlap":new K(H.layout_symbol[`text-allow-overlap`],`text-allow-overlap`),"text-overlap":new K(H.layout_symbol[`text-overlap`],`text-overlap`),"text-ignore-placement":new K(H.layout_symbol[`text-ignore-placement`],`text-ignore-placement`),"text-optional":new K(H.layout_symbol[`text-optional`],`text-optional`),"symbol-height-offset":new q(H.layout_symbol[`symbol-height-offset`],`symbol-height-offset`),"symbol-height-anchor":new K(H.layout_symbol[`symbol-height-anchor`],`symbol-height-anchor`)}),fy,py=()=>fy||=new Gl({"icon-opacity":new q(H.paint_symbol[`icon-opacity`],`icon-opacity`),"icon-color":new q(H.paint_symbol[`icon-color`],`icon-color`),"icon-halo-color":new q(H.paint_symbol[`icon-halo-color`],`icon-halo-color`),"icon-halo-width":new q(H.paint_symbol[`icon-halo-width`],`icon-halo-width`),"icon-halo-blur":new q(H.paint_symbol[`icon-halo-blur`],`icon-halo-blur`),"icon-translate":new K(H.paint_symbol[`icon-translate`],`icon-translate`),"icon-translate-anchor":new K(H.paint_symbol[`icon-translate-anchor`],`icon-translate-anchor`),"text-opacity":new q(H.paint_symbol[`text-opacity`],`text-opacity`),"text-color":new q(H.paint_symbol[`text-color`],`text-color`,{runtimeType:Br,getOverride:e=>e.textColor,hasOverride:e=>!!e.textColor}),"text-halo-color":new q(H.paint_symbol[`text-halo-color`],`text-halo-color`),"text-halo-width":new q(H.paint_symbol[`text-halo-width`],`text-halo-width`),"text-halo-blur":new q(H.paint_symbol[`text-halo-blur`],`text-halo-blur`),"text-translate":new K(H.paint_symbol[`text-translate`],`text-translate`),"text-translate-anchor":new K(H.paint_symbol[`text-translate-anchor`],`text-translate-anchor`)}),my={get paint(){return py()},get layout(){return dy()}},hy=class{constructor(e){if(e.property.overrides===void 0)throw Error(`overrides must be provided to instantiate FormatSectionOverride class`);this.type=e.property.overrides?e.property.overrides.runtimeType:Lr,this.defaultValue=e}evaluate(e){if(e.formattedSection){let t=this.defaultValue.property.overrides;if(t?.hasOverride(e.formattedSection))return t.getOverride(e.formattedSection)}return e.feature&&e.featureState?this.defaultValue.evaluate(e.feature,e.featureState):this.defaultValue.property.specification.default}eachChild(e){if(!this.defaultValue.isConstant()){let t=this.defaultValue.value;e(t._styleExpression.expression)}}outputDefined(){return!1}serialize(){return null}};G(`FormatSectionOverride`,hy,{omit:[`defaultValue`]});var gy=e=>e.type===`symbol`,_y=class e extends Jl{constructor(e,t){super(e,my,t)}recalculate(e,t){super.recalculate(e,t);let n=this.layout.get(`icon-rotation-alignment`);if((n.value.kind!==`constant`||n.value.value===`auto`)&&(this.layout._values[`icon-rotation-alignment`]=new Rl(n.property,{kind:`constant`,value:this.layout.get(`symbol-placement`)===`point`?`viewport`:`map`},n.parameters)),this.layout.get(`text-rotation-alignment`)===`auto`&&(this.layout.get(`symbol-placement`)===`point`?this.layout._values[`text-rotation-alignment`]=`viewport`:this.layout._values[`text-rotation-alignment`]=`map`),this.layout.get(`text-pitch-alignment`)===`auto`&&(this.layout._values[`text-pitch-alignment`]=this.layout.get(`text-rotation-alignment`)===`map`?`map`:`viewport`),this.layout.get(`icon-pitch-alignment`)===`auto`&&(this.layout._values[`icon-pitch-alignment`]=this.layout.get(`icon-rotation-alignment`).constantOr(`viewport`)),this.layout.get(`symbol-placement`)===`point`){let e=this.layout.get(`text-writing-mode`);if(e){let t=[];for(let n of e)t.includes(n)||t.push(n);this.layout._values[`text-writing-mode`]=t}else this.layout._values[`text-writing-mode`]=[`horizontal`]}this._setPaintOverrides()}getValueAndResolveTokens(e,t,n,r){let i=this.layout.get(e).evaluate(t,{},n,r),a=this._unevaluatedLayout._values[e];return!a.isDataDriven()&&!Ls(a.value)&&i?ly(t.properties,i):i}createBucket(e){return new cy(e)}queryRadius(){return 0}queryIntersectsFeature(){throw Error(`Should take a different path in FeatureIndex`)}_setPaintOverrides(){for(let t of my.paint.overridableProperties){if(!e.hasPaintOverride(this.layout,t))continue;let n=this.paint.get(t),r=new Ps(new hy(n),`layers[${this.id}].paint.${n.property.name}`,n.property.specification),i=null;i=n.value.kind===`constant`||n.value.kind===`source`?new zs(`source`,r):new Bs(`composite`,r,n.value.zoomStops),this.paint._values[t]=new Rl(n.property,i,n.parameters)}}_handleOverridablePaintPropertyUpdate(t,n,r){return!this.layout||n.isDataDriven()||r.isDataDriven()?!1:e.hasPaintOverride(this.layout,t)}static hasPaintOverride(e,t){let n=e.get(`text-field`),r=my.paint.properties[t],i=!1,a=e=>{for(let t of e)if(r.overrides?.hasOverride(t)){i=!0;return}};if(n.value.kind===`constant`&&n.value.value instanceof Ii)a(n.value.value.sections);else if(n.value.kind===`source`||n.value.kind===`composite`){let e=t=>{if(!i){if(t instanceof Xi&&Ji(t.value)===Kr){let e=t.value;a(e.sections)}else t instanceof aa?a(t.sections):t.eachChild(e)}},t=n.value;t._styleExpression&&e(t._styleExpression.expression)}return i}};function vy(e,t,n,r=1){let i=e.get(`icon-padding`).evaluate(t,{},n)?.values;return[i[0]*r,i[1]*r,i[2]*r,i[3]*r]}var yy,by=()=>yy||=new Gl({"background-color":new K(H.paint_background[`background-color`],`background-color`),"background-pattern":new Ul(H.paint_background[`background-pattern`],`background-pattern`),"background-opacity":new K(H.paint_background[`background-opacity`],`background-opacity`)}),xy={get paint(){return by()}},Sy=e=>e.type===`background`,Cy=class extends Jl{constructor(e,t){super(e,xy,t)}};function wy(e){let t=[],n=e.id;return n===void 0&&t.push(new U(`layers.${n}`,null,`missing required property "id"`)),e.render===void 0&&t.push(new U(`layers.${n}`,null,`missing required method "render"`)),e.renderingMode&&e.renderingMode!==`2d`&&e.renderingMode!==`3d`&&t.push(new U(`layers.${n}`,null,`property "renderingMode" must be either "2d" or "3d"`)),t}var Ty=e=>e.type===`custom`,Ey=class extends Jl{constructor(e,t){super(e,{},t),this.onAdd=e=>{this.implementation.onAdd&&this.implementation.onAdd(e,e.painter.context.gl)},this.onRemove=e=>{this.implementation.onRemove&&this.implementation.onRemove(e,e.painter.context.gl)},this.implementation=e}is3D(){return this.implementation.renderingMode===`3d`}hasOffscreenPass(){return this.implementation.prerender!==void 0}recalculate(){}updateTransitions(){}hasTransition(){return!1}serialize(){throw Error(`Custom layers cannot be serialized`)}};function Dy(e,t){if(e.type===`custom`)return new Ey(e,t);switch(e.type){case`background`:return new Cy(e,t);case`circle`:return new Of(e,t);case`color-relief`:return new np(e,t);case`fill`:return new Tm(e,t);case`fill-extrusion`:return new wh(e,t);case`heatmap`:return new Hf(e,t);case`hillshade`:return new qf(e,t);case`line`:return new Kh(e,t);case`raster`:return new $l(e,t);case`symbol`:return new _y(e,t)}}function Oy(e){let t=[];if(typeof e==`string`)t.push({id:`default`,url:e});else if(e&&e.length>0){let n=[];for(let{id:r,url:i}of e){let e=`${r}${i}`;n.includes(e)||(n.push(e),t.push({id:r,url:i}))}}return t}function ky(e,t,n){try{let r=new URL(e);return r.pathname+=`${t}${n}`,r.toString()}catch{throw Error(`Invalid sprite URL "${e}", must be absolute. Modify style specification directly or use TransformStyleFunction to correct the issue dynamically`)}}async function Ay(e,t,n,r){let i=Oy(e),a=n>1?`@2x`:``,o={},s={};for(let{id:e,url:n}of i){o[e]=Qn(await t.transformRequest(ky(n,a,`.json`),`SpriteJSON`),r);let i=await t.transformRequest(ky(n,a,`.png`),`SpriteImage`);s[e]=nr.getImage(i,r)}return await Promise.all([...Object.values(o),...Object.values(s)]),jy(o,s)}async function jy(e,t){let n={};for(let r in e){n[r]={};let i=(await t[r]).data;if(!i)throw Error(`Could not load sprite image for ${r}: the response is empty`);let a=Nn.getImageCanvasContext(i),o=(await e[r]).data;for(let e in o){let{width:t,height:i,x:s,y:c,sdf:l,pixelRatio:u,stretchX:d,stretchY:f,content:p,textFitWidth:m,textFitHeight:h}=o[e],g={width:t,height:i,x:s,y:c,context:a};n[r][e]={data:null,pixelRatio:u,sdf:l,stretchX:d,stretchY:f,content:p,textFitWidth:m,textFitHeight:h,spriteData:g}}}return n}var My=class extends sr{constructor(){super(),this.images={},this.updateVersion=0,this.loaded=!1,this.requestors=[],this.missingImageResolver=null,this._spriteImagesIds={},this._imagesIds=null,this._renderCallbacksDispatchedThisFrame={}}destroy(){for(let e of Object.keys(this.images))this.removeImage(e);this._spriteImagesIds={}}isLoaded(){return this.loaded}setLoaded(e){if(this.loaded!==e&&(this.loaded=e,e)){for(let{ids:e,promiseResolve:t}of this.requestors)t(this._getImagesForIds(e));this.requestors=[]}}getImage(e){let t=this.images[e];if(t&&!t.data&&t.spriteData){let e=t.spriteData;t.data=new Lf({width:e.width,height:e.height},e.context.getImageData(e.x,e.y,e.width,e.height).data),t.spriteData=null}return t}addImage(e,t){if(this.images[e])throw Error(`Image id ${e} already exist, use updateImage instead`);this._validate(e,t)&&(this.images[e]=t,this._imagesIds=null,t.isWebGLImage&&this.updateImage(e,t,!1))}_validate(e,t){let n=!0,r=t.data||t.spriteData;return this._validateStretch(t.stretchX,r?.width)||(this.fire(new B(Error(`Image "${e}" has invalid "stretchX" value`))),n=!1),this._validateStretch(t.stretchY,r?.height)||(this.fire(new B(Error(`Image "${e}" has invalid "stretchY" value`))),n=!1),this._validateContent(t.content,t)||(this.fire(new B(Error(`Image "${e}" has invalid "content" value`))),n=!1),n}_validateStretch(e,t){if(!e)return!0;let n=0;for(let r of e){if(r[0]=e[1]}updateImage(e,t,n=!0){let r=this.images[e];if(n){let e=r.data||r.spriteData;if(e.width!==t.data.width||e.height!==t.data.height)throw Error(`size mismatch between old image (${e.width}x${e.height}) and new image (${t.data.width}x${t.data.height}).`)}t.version=(r.version??0)+1,this.images[e]=t,this.updateVersion++}removeImage(e){let t=this.images[e];t&&(delete this.images[e],this._imagesIds=null,t.userImage?.onRemove&&t.userImage.onRemove())}listImages(){return this._imagesIds??=Object.keys(this.images),this._imagesIds}_getSpriteImageId(e,t){return e==="default"?t:`${e}:${t}`}setSpriteImages(e,t){let n=this._spriteImagesIds[e]??[],r=[];for(let n in t){let i=this._getSpriteImageId(e,n);r.push(i),i in this.images?this.updateImage(i,t[n],!1):this.addImage(i,t[n])}let i=new Set(r),a=n.filter(e=>!i.has(e));for(let e of a)this.removeImage(e);return this._spriteImagesIds[e]=r,{loaded:r,removed:a}}removeSpriteImages(e){let t=this._spriteImagesIds[e]??[];for(let e of t)this.removeImage(e);return delete this._spriteImagesIds[e],t}removeAllSpriteImages(){let e=Object.values(this._spriteImagesIds).flat();for(let t of e)this.removeImage(t);return this._spriteImagesIds={},e}setMissingImageResolver(e){this.missingImageResolver=e}getImages(e){return new Promise((t,n)=>{let r=!0;if(!this.isLoaded())for(let t of e)this.images[t]||(r=!1);this.isLoaded()||r?t(this._getImagesForIds(e)):this.requestors.push({ids:e,promiseResolve:t})})}async _getImagesForIds(e){let t=new Set(e.filter(e=>!this.getImage(e))),n=this.missingImageResolver;n&&await Promise.allSettled(Array.from(t,e=>n(e)));let r={};for(let n of e){let e=this.getImage(n);e&&(t.delete(n),r[n]={data:e.data.clone(),pixelRatio:e.pixelRatio,sdf:e.sdf,version:e.version,stretchX:e.stretchX,stretchY:e.stretchY,content:e.content,textFitWidth:e.textFitWidth,textFitHeight:e.textFitHeight,hasRenderCallback:!!e.userImage?.render,isWebGLImage:e.isWebGLImage})}for(let e of t)this.fire(new yr({id:e})),$t(`Image "${e}" could not be loaded. Please make sure you have added the image before it is needed with map.addImage(), resolved it with map.setMissingStyleImageResolver(), or included it in a "sprite" property in your style.`);return r}beginFrame(){this._renderCallbacksDispatchedThisFrame={}}dispatchRenderCallbacks(e){for(let t of e){if(this._renderCallbacksDispatchedThisFrame[t])continue;this._renderCallbacksDispatchedThisFrame[t]=!0;let e=this.getImage(t);e||$t(`Image with ID: "${t}" was not found`),j_(e)&&this.updateImage(t,e)}}cloneImages(){let e={};for(let t in this.images){let n=this.images[t];e[t]={...n,data:n.data?n.data.clone():null}}return e}},Ny=class{constructor(e){this._imageManager=e,this._entries={},this._image=new Lf({width:1,height:1}),this._dirty=!0}destroy(){this._texture&&=(this._texture.destroy(),null),this._entries={},this._image=new Lf({width:1,height:1}),this._dirty=!0}getPixelSize(){let{width:e,height:t}=this._image;return{width:e,height:t}}getPattern(e){let t=this._imageManager.getImage(e);if(!t)return null;let n=this._entries[e];if(n?.image!==t){let n={w:t.data.width+2,h:t.data.height+2,x:0,y:0};this._entries[e]={bin:n,position:new N_(n,t),image:t}}else if(n.position.version!==t.version)n.position.version=t.version;else return n.position;return this._update(),this._entries[e].position}isPatternMissing(e){if(!e)return!1;if(!e.from||!e.to)return!0;let t=this.getPattern(e.from.toString()),n=this.getPattern(e.to.toString());return!t||!n}bind(e){let t=e.gl;this._texture?this._dirty&&=(this._texture.update(this._image),!1):(this._texture=new Qf(e,this._image,t.RGBA),this._dirty=!1),this._texture.bind(t.LINEAR,t.CLAMP_TO_EDGE)}_update(){for(let e in this._entries)this._imageManager.getImage(e)||delete this._entries[e];let e=[];for(let t in this._entries)e.push(this._entries[t].bin);let{w:t,h:n}=M_(e),r=this._image;r.resize({width:t||1,height:n||1});for(let e in this._entries){let{bin:t}=this._entries[e],n=t.x+1,i=t.y+1,a=this._entries[e].image.data,o=a.width,s=a.height;Lf.copy(a,r,{x:0,y:0},{x:n,y:i},{width:o,height:s}),Lf.copy(a,r,{x:0,y:s-1},{x:n,y:i-1},{width:o,height:1}),Lf.copy(a,r,{x:0,y:0},{x:n,y:i+s},{width:o,height:1}),Lf.copy(a,r,{x:o-1,y:0},{x:n-1,y:i},{width:1,height:s}),Lf.copy(a,r,{x:0,y:0},{x:n+o,y:i},{width:1,height:s})}this._dirty=!0}},Py=1114111,Fy={start:0,end:Py},Iy=0;function Ly(e){let t=/^u\+([0-9a-f]*)(\?+)$/i.exec(e);if(t){let[,e,n]=t;return e.length+n.length>6?null:Ry(parseInt(`${e}${`0`.repeat(n.length)}`,16),parseInt(`${e}${`f`.repeat(n.length)}`,16))}let n=/^u\+([0-9a-f]{1,6})(?:-([0-9a-f]{1,6}))?$/i.exec(e);if(!n)return null;let r=parseInt(n[1],16);return Ry(r,n[2]===void 0?r:parseInt(n[2],16))}function Ry(e,t){return e>t||e>Py?null:{start:e,end:Math.min(t,Py)}}function zy(e,t){return e.ranges.some(({start:e,end:n})=>t>=e&&t<=n)}var By=class{constructor(e){this.requestManager=e,this._faces={},this._registered=new Set}setFontFaces(e){this._unregisterAll(),this._faces={};for(let[t,n]of Object.entries(e??{})){let e=Array.isArray(n)?n:[n];this._faces[t]=e.map(e=>this._declareFontFace(t,e)).filter(e=>e!==null)}}hasFontFaces(){return Object.keys(this._faces).length>0}async getFontFamily(e,t){for(let n of e.split(`,`))for(let e of this._faces[n.trim()]??[])if(zy(e,t)&&(e.loaded??=this._loadFontFace(e),await e.loaded))return e.family;return null}_declareFontFace(e,t){let n=typeof t==`string`?{url:t}:t;if(typeof n?.url!=`string`)return $t(`Ignoring the font face declared for "${e}": it has no URL.`),null;let r=`maplibre-gl-font-face-${Iy++}`,i=n[`unicode-range`];if(!i?.length)return{url:n.url,ranges:[Fy],family:r};let a=[];for(let e of i){let t=Ly(e);t?a.push(t):$t(`Ignoring the unicode range "${e}" of the font face at ${n.url}: it is not a valid range.`)}return a.length?{url:n.url,ranges:a,family:r}:null}async _loadFontFace(e){if(typeof FontFace>`u`||typeof document>`u`||!document.fonts)return $t(`Ignoring the font face at ${e.url}: this environment has no CSS Font Loading API.`),!1;let t;try{return t=new FontFace(e.family,await this._downloadFontFile(e.url)),Object.values(this._faces).some(t=>t.includes(e))?(document.fonts.add(t),this._registered.add(t),await t.load(),!0):!1}catch(n){return t&&this._unregister(t),$t(`Ignoring the font face at ${e.url}: ${vt(n).message}`),!1}}async _downloadFontFile(e){let t=await $n(await this.requestManager.transformRequest(e,`Glyphs`),new AbortController);if(!t?.data)throw Error(`the response was empty for the font file at ${e}`);return t.data}_unregister(e){document.fonts?.delete(e),this._registered.delete(e)}_unregisterAll(){for(let e of this._registered)document.fonts?.delete(e);this._registered.clear()}destroy(){this._unregisterAll(),this._faces={}}},Vy=0x56bc75e2d63100000,Hy=new Float64Array(256);for(let e=0;e<256;e++){let t=.5-(e/255)**(1/2.2);Hy[e]=t*Math.abs(t)}Hy[255]=-0x56bc75e2d63100000;var Uy=class{constructor({fontSize:e=24,buffer:t=3,radius:n=8,cutoff:r=.25,fontFamily:i=`sans-serif`,fontWeight:a=`normal`,fontStyle:o=`normal`,lang:s=null}={}){this.buffer=t,this.radius=n,this.cutoff=r,this.lang=s;let c=this.size=e+t*4,l=this._createCanvas(c),u=this.ctx=l.getContext(`2d`,{willReadFrequently:!0});u.font=`${o} ${a} ${e}px ${i}`,u.textBaseline=`alphabetic`,u.textAlign=`left`,u.fillStyle=`black`,this.gridOuter=new Float64Array(c*c),this.gridInner=new Float64Array(c*c),this.f=new Float64Array(c),this.z=new Float64Array(c+1),this.v=new Uint16Array(c)}_createCanvas(e){if(typeof OffscreenCanvas<`u`)return new OffscreenCanvas(e,e);let t=document.createElement(`canvas`);return t.width=t.height=e,t}draw(e){let{width:t,actualBoundingBoxAscent:n,actualBoundingBoxDescent:r,actualBoundingBoxLeft:i,actualBoundingBoxRight:a}=this.ctx.measureText(e),o=Math.ceil(n),s=Math.floor(-i),c=Math.max(0,Math.min(this.size-this.buffer,Math.ceil(a)-s)),l=Math.max(0,Math.min(this.size-this.buffer,o+Math.ceil(r))),u=c+2*this.buffer,d=l+2*this.buffer,f=Math.max(u*d,0),p=new Uint8ClampedArray(f),m={data:p,width:u,height:d,glyphWidth:c,glyphHeight:l,glyphTop:o,glyphLeft:s,glyphAdvance:t};if(c===0||l===0)return m;let{ctx:h,buffer:g,gridInner:_,gridOuter:v}=this;this.lang&&(h.lang=this.lang),h.clearRect(g,g,c,l),h.fillText(e,g-s,g+o);let y=h.getImageData(g,g,c,l);v.fill(Vy,0,f),_.fill(0,0,f);let b=3;for(let e=0;e-1);c++,a[c]=s,o[c]=l,o[c+1]=Vy}for(let s=0,c=0;s{let n=new Uy(e);return n.buffer=t,n},Jy=class{constructor(e,t,n,r=qy){this.requestManager=e,this.localIdeographFontFamily=t,this.entries={},this.lang=n,this.fontFaceManager=new By(e),this.createRasterizer=r}setURL(e){this.url=e}setFontFaces(e){this.fontFaceManager.setFontFaces(e),this.entries={}}async getGlyphs(e){let t=[];for(let n in e)for(let r in e[n])for(let i of e[n][r])t.push(this._getAndCacheGlyphsPromise(n,i,r));let n=await Promise.all(t),r={};for(let{stack:e,id:t,variant:i,glyph:a}of n)r[e]||={},r[e][i]||={},r[e][i][t]=a&&{id:a.id,bitmap:a.bitmap.clone(),metrics:a.metrics};return r}async _getAndCacheGlyphsPromise(e,t,n){this.entries[e]??={glyphs:{default:{}},requests:{},ranges:{}};let r=this.entries[e],i=r.glyphs[n]||={},a=i[t];if(a!==void 0)return{stack:e,id:t,variant:n,glyph:a};if(n!=="default")return i[t]=null,{stack:e,id:t,variant:n,glyph:null};let o=t.codePointAt(0),s=this.fontFaceManager.hasFontFaces()?await this.fontFaceManager.getFontFamily(e,o):null;return s?(a=i[t]=await this._drawGlyph(r,e,t,s),{stack:e,id:t,variant:n,glyph:a}):!this.url||zg(t)||this._charUsesLocalIdeographFontFamily(o)?(a=i[t]=await this._drawGlyph(r,e,t),{stack:e,id:t,variant:n,glyph:a}):{...await this._downloadAndCacheRangePromise(e,t),variant:n}}async _downloadAndCacheRangePromise(e,t){let n=t.codePointAt(0),r=this.entries[e],i=Math.floor(n/256);if(r.ranges[i])return{stack:e,id:t,glyph:null};r.requests[i]||=this._loadGlyphRange(e,i);try{let a=await r.requests[i];for(let e in a)r.glyphs.default[String.fromCodePoint(+e)]=a[+e];return r.ranges[i]=!0,{stack:e,id:t,glyph:a[n]||null}}catch(a){let o=r.glyphs.default[t]=await this._drawGlyph(r,e,t);return this._warnOnMissingGlyphRange(o,i,n,vt(a)),{stack:e,id:t,glyph:o}}}async _loadGlyphRange(e,t){let n=t*256,r=n+255,i=await $n(await this.requestManager.transformRequest(this.url.replace(`{fontstack}`,e).replace(`{range}`,`${n}-${r}`),`Glyphs`),new AbortController);if(!i?.data)throw Error(`Could not load glyph range. range: ${t}, ${n}-${r}`);let a={};for(let e of k_(i.data))a[e.id]=e;return a}_warnOnMissingGlyphRange(e,t,n,r){let i=t*256;$t(`Unable to load glyph range ${t}, ${i}-${i+255}. Rendering codepoint U+${n.toString(16).padStart(4,`0`).toUpperCase()} locally instead. ${r}`)}_charUsesLocalIdeographFontFamily(e){return!!this.localIdeographFontFamily&&rg(e)}async _drawGlyph(e,t,n,r){let i=(await this._getTinySDF(e,t,n,r)).draw(n),a=/^\p{gc=Cf}+$/u.test(n);return{id:n.codePointAt(0),bitmap:new If({width:i.width||60,height:i.height||60},i.data),metrics:{width:a?0:i.glyphWidth/2||24,height:i.glyphHeight/2||24,left:i.glyphLeft/2+.5||0,top:i.glyphTop/2-27.5||-8,advance:a?0:i.glyphAdvance/2||24,isDoubleResolution:!0}}}_getTinySDF(e,t,n,r){let i=zg(n);if(r){let t=i?`clusterTinySDFs`:`fontFaceTinySDFs`;return e[t]??={},e[t][r]||=this._createTinySDF(r,!1,i?3:1),e[t][r]}let a=t===Ky&&this.localIdeographFontFamily!==``&&this._charUsesLocalIdeographFontFamily(n.codePointAt(0)),o=a?this.localIdeographFontFamily:t;if(i)return e.clusterTinySDFs??={},e.clusterTinySDFs[o]||=this._createTinySDF(o,!0,3),e.clusterTinySDFs[o];let s=a?`ideographTinySDF`:`tinySDF`;return e[s]||=this._createTinySDF(o),e[s]}async _createTinySDF(e,t=!0,n=1){let r=e?e.split(`,`):[];r.push(`sans-serif`);let i=r.map(e=>/[-\w]+/.test(e)?e:`'${CSS.escape(e)}'`).join(`,`),a=t?this._fontWeight(r[0]):void 0,o=t?this._fontStyle(r[0]):`normal`;if(typeof document<`u`&&document.fonts?.load)try{await document.fonts.load(`${o} ${a||`normal`} 48px ${i}`)}catch(e){$t(`Failed to load font "${i}": ${vt(e).message}`)}return this.createRasterizer({fontSize:48,buffer:Math.max(6,Math.ceil(48*(n-1)/4)),radius:16,cutoff:.25,fontFamily:i,fontWeight:a,fontStyle:o,lang:this.lang},6)}_fontStyle(e){return/italic/i.test(e)?`italic`:/oblique/i.test(e)?`oblique`:`normal`}_fontWeight(e){let t={thin:100,hairline:100,"extra light":200,"ultra light":200,light:300,normal:400,regular:400,medium:500,semibold:600,demibold:600,bold:700,"extra bold":800,"ultra bold":800,black:900,heavy:900,"extra black":950,"ultra black":950},n;for(let[r,i]of Object.entries(t))RegExp(`\\b${r}\\b`,`i`).test(e)&&(n=`${i}`);return n}destroy(){for(let e in this.entries){let t=this.entries[e];t.tinySDF=null,t.ideographTinySDF=null,t.fontFaceTinySDFs={},t.glyphs={default:{}},t.requests={},t.ranges={}}this.entries={},this.fontFaceManager.destroy()}},Yy,Xy=()=>Yy||=new Gl({anchor:new K(H.light.anchor,`anchor`),position:new K(H.light.position,`position`),color:new K(H.light.color,`color`),intensity:new K(H.light.intensity,`intensity`)}),Zy=class extends sr{constructor(e,t){super(),this._transitionable=new Pl(Xy(),`light`,t),this.setLight(e),this._transitioning=this._transitionable.untransitioned(),this.recalculate(new jl(0))}getLight(){return this._transitionable.serialize()}getEvaluated(){return{anchor:this.properties.get(`anchor`),position:this.properties.get(`position`),color:this.properties.get(`color`),intensity:this.properties.get(`intensity`)}}setLight(e,t={}){this._validate(gl.light,e,t)||this._transitionable.setValues(e)}updateTransitions(e){this._transitioning=this._transitionable.transitioned(e,this._transitioning)}hasTransition(){return this._transitioning.hasTransition()}applyGlobalStateChange(e,t,n){this._transitioning=this._transitionable.applyGlobalStateChange(e,t,this._transitioning,n)}recalculate(e){this.properties=this._transitioning.possiblyEvaluate(e)}_validate(e,t,n){return xl(this,e,{value:t},n)}},Qy,$y=()=>Qy||=new Gl({"sky-color":new K(H.sky[`sky-color`],`sky-color`),"horizon-color":new K(H.sky[`horizon-color`],`horizon-color`),"fog-color":new K(H.sky[`fog-color`],`fog-color`),"fog-ground-blend":new K(H.sky[`fog-ground-blend`],`fog-ground-blend`),"horizon-fog-blend":new K(H.sky[`horizon-fog-blend`],`horizon-fog-blend`),"sky-horizon-blend":new K(H.sky[`sky-horizon-blend`],`sky-horizon-blend`),"atmosphere-blend":new K(H.sky[`atmosphere-blend`],`atmosphere-blend`)}),eb=class extends sr{constructor(e,t){super(),this._transitionable=new Pl($y(),`sky`,t),this.setSky(e),this._transitioning=this._transitionable.untransitioned(),this.recalculate(new jl(0))}setSky(e,t={}){return!this._validate(gl.sky,e,t)&&(e||={"sky-color":`transparent`,"horizon-color":`transparent`,"fog-color":`transparent`,"fog-ground-blend":1,"atmosphere-blend":0},this._transitionable.setValues(e),!0)}getSky(){return this._transitionable.serialize()}updateTransitions(e){this._transitioning=this._transitionable.transitioned(e,this._transitioning)}hasTransition(){return this._transitioning.hasTransition()}applyGlobalStateChange(e,t,n){this._transitioning=this._transitionable.applyGlobalStateChange(e,t,this._transitioning,n)}recalculate(e){this.properties=this._transitioning.possiblyEvaluate(e)}_validate(e,t,n={}){return xl(this,e,{value:t},n)}getEvaluated(){return{"sky-color":this.properties.get(`sky-color`),"horizon-color":this.properties.get(`horizon-color`),"fog-color":this.properties.get(`fog-color`),"fog-ground-blend":this.properties.get(`fog-ground-blend`),"horizon-fog-blend":this.properties.get(`horizon-fog-blend`),"sky-horizon-blend":this.properties.get(`sky-horizon-blend`),"atmosphere-blend":this.properties.get(`atmosphere-blend`)}}};function tb(e){return e<60?0:e<70?(e-60)/10:1}var nb=class{constructor(e,t){this.width=e,this.height=t,this.nextRow=0,this.data=new Uint8Array(this.width*this.height),this.dashEntry={}}getDash(e,t){let n=e.join(`,`)+String(t);return this.dashEntry[n]||=this.addDash(e,t),this.dashEntry[n]}getDashRanges(e,t,n){let r=e.length%2==1,i=[],a=r?-e[e.length-1]*n:0,o=e[0]*n,s=!0;i.push({left:a,right:o,isDash:s,zeroLength:e[0]===0});let c=e[0];for(let t=1;t1&&(s=e[++o]);let c=Math.abs(i-s.left),l=Math.abs(i-s.right),u=Math.min(c,l),d,f=t/n*(r+1);if(s.isDash){let e=r-Math.abs(f);d=Math.sqrt(u*u+e*e)}else d=r-Math.sqrt(u*u+f*f);this.data[a+i]=Math.max(0,Math.min(255,d+128))}}}addRegularDash(e){for(let t=e.length-1;t>=0;--t){let n=e[t],r=e[t+1];n.zeroLength?e.splice(t,1):r?.isDash===n.isDash&&(r.left=n.left,e.splice(t,1))}let t=e[0],n=e[e.length-1];t.isDash===n.isDash&&(t.left=n.left-this.width,n.right=t.right+this.width);let r=this.width*this.nextRow,i=0,a=e[i];for(let t=0;t1&&(a=e[++i]);let n=Math.abs(t-a.left),o=Math.abs(t-a.right),s=Math.min(n,o),c=a.isDash?s:-s;this.data[r+t]=Math.max(0,Math.min(255,c+128))}}addDash(e,t){let n=t?7:0,r=2*n+1;if(this.nextRow+r>this.height)return $t(`LineAtlas out of space`),null;let i=0;for(let t of e)i+=t;if(i!==0){let r=this.width/i,a=this.getDashRanges(e,this.width,r);t?this.addRoundDash(a,r,n):this.addRegularDash(a)}let a={y:this.nextRow+n,height:2*n,width:i};return this.nextRow+=r,this.dirty=!0,a}bind(e){let t=e.gl;this.texture?(t.bindTexture(t.TEXTURE_2D,this.texture),this.dirty&&(this.dirty=!1,t.texSubImage2D(t.TEXTURE_2D,0,0,0,this.width,this.height,t.ALPHA,t.UNSIGNED_BYTE,this.data))):(this.texture=t.createTexture(),t.bindTexture(t.TEXTURE_2D,this.texture),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.REPEAT),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.REPEAT),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texImage2D(t.TEXTURE_2D,0,t.ALPHA,this.width,this.height,0,t.ALPHA,t.UNSIGNED_BYTE,this.data))}},rb=class{constructor(e){this._methodToThrottle=e,this._triggered=!1,this._channel=new MessageChannel,this._channel.port2.onmessage=()=>{this._triggered=!1,this._methodToThrottle()}}trigger(){this._triggered||(this._triggered=!0,this._channel?.port1.postMessage(!0))}remove(){delete this._channel,this._methodToThrottle=()=>{}}},ib={once:!0},ab=class{constructor(e,t){this.target=e,this.mapId=t,this.resolveRejects={},this.tasks={},this.taskQueue=[],this.abortControllers={},this.messageHandlers={},this.invoker=new rb(()=>this.process()),this.subscription=pn(this.target,`message`,e=>this.receive(e),!1),this.globalScope=rn(self)?e:window}registerMessageHandler(e,t){this.messageHandlers[e]=t}unregisterMessageHandler(e){delete this.messageHandlers[e]}sendAsync(e,t){return new Promise((n,r)=>{let i=Math.round(Math.random()*0xde0b6b3a7640000).toString(36).substring(0,10),a=t?pn(t.signal,`abort`,()=>{a?.unsubscribe(),delete this.resolveRejects[i];let n={id:i,type:``,origin:location.origin,targetMapId:e.targetMapId,sourceMapId:this.mapId};this.target.postMessage(n),r(new Dn(t.signal.reason))},ib):null;this.resolveRejects[i]={resolve:e=>{a?.unsubscribe(),n(e)},reject:e=>{a?.unsubscribe(),r(e)}};let o=[],s={...e,id:i,sourceMapId:this.mapId,origin:location.origin,data:Ol(e.data,o)};this.target.postMessage(s,{transfer:o})})}receive(e){let t=e.data,n=t.id,r=[`file://`,`resource://android`,`null`],i=[t.origin,location.origin],a=t.origin===location.origin,o=i.some(e=>r.includes(e));if((a||o)&&!(t.targetMapId&&this.mapId!==t.targetMapId)){if(t.type===``){delete this.tasks[n];let e=this.abortControllers[n];delete this.abortControllers[n],e&&e.abort();return}if(rn(self)||t.mustQueue){this.tasks[n]=t,this.taskQueue.push(n),this.invoker.trigger();return}this.processTask(n,t)}}process(){if(this.taskQueue.length===0)return;let e=this.taskQueue.shift(),t=this.tasks[e];delete this.tasks[e],this.taskQueue.length>0&&this.invoker.trigger(),t&&this.processTask(e,t)}async processTask(e,t){if(t.type===``){let n=this.resolveRejects[e];if(delete this.resolveRejects[e],!n)return;t.error?n.reject(vt(kl(t.error))):n.resolve(kl(t.data));return}if(!this.messageHandlers[t.type]){this.completeTask(e,null,null);return}let n=kl(t.data),r=new AbortController;this.abortControllers[e]=r;try{let i=await this.messageHandlers[t.type](t.sourceMapId,n,r);this.completeTask(e,null,i)}catch(t){this.completeTask(e,vt(t))}}completeTask(e,t,n){let r=[];delete this.abortControllers[e];let i={id:e,type:``,sourceMapId:this.mapId,origin:location.origin,error:t?Ol(t):null,data:Ol(n,r)};this.target.postMessage(i,{transfer:r})}remove(){this.invoker.remove(),this.subscription.unsubscribe()}};function ob(e){if(!e)return!1;let t=globalThis.location;if(!t)return!1;try{return new URL(e,t.href).origin!==t.origin}catch{return!1}}function sb(){let e=import.meta.url;if(!/^https?:/.test(e))return``;let t=e.endsWith(`-dev.mjs`)?`maplibre-gl-worker-dev.mjs`:`maplibre-gl-worker.mjs`,n=new URL(`./${t}`,e);return n.searchParams.set(`v`,O),n.href}function cb(e){return e.split(/[?#]/)[0].endsWith(`.cjs`)}function lb(e,t){if(t)try{return new Worker(e,{type:`module`})}catch(e){console.warn(`Module worker not supported, falling back to classic worker`,e)}return new Worker(e)}async function ub(e){let t=await fetch(e);if(!t.ok)throw Error(`Failed to fetch worker script (${t.status}): ${e}`);let n=await t.text(),r=new Blob([n],{type:`text/javascript`});return URL.createObjectURL(r)}function db(e){let t=new Blob([`import ${JSON.stringify(new URL(e,import.meta.url).href)}`],{type:`text/javascript`});return URL.createObjectURL(t)}async function fb(){let e=Un.WORKER_URL||sb(),t=!cb(e);if(!ob(e))return lb(e,t);if(t){let n=db(e);try{return lb(n,t)}finally{URL.revokeObjectURL(n)}}let n=await ub(e);try{return lb(n,t)}finally{URL.revokeObjectURL(n)}}var pb=`maplibre_preloaded_worker_pool`,mb=class e{constructor(){this.active={},this.workersPromise=null}async acquire(t){if(this.active[t]=!0,!this.workersPromise){let t=[];for(;t.length{for(let t of e)t.terminate()})}}isPreloaded(){return!!this.active[pb]}numActive(){return Object.keys(this.active).length}},hb=Math.floor(Nn.hardwareConcurrency/2);mb.workerCount=sn(globalThis)?Math.max(Math.min(hb,3),1):1;var gb;function _b(){return gb||=new mb,gb}var vb=class extends sr{constructor(e,t){super(),this.workerPool=e,this.actors=[],this.currentActor=0,this.id=t,this.removed=!1,this.workerErrorSubscriptions=[],this.actorsPromise=this.initActors(t)}async initActors(e){let t=await this.workerPool.acquire(e);if(this.removed)return[];if(this.actors=t.map((t,n)=>{this.workerErrorSubscriptions.push(pn(t,`error`,()=>{this.fire(new B(Error(`Worker failed to load. Check that the worker URL is correct.`)))},!1));let r=new ab(t,e);return r.name=`Worker ${n}`,r}),!this.actors.length)throw Error(`No actors found`);return this.actors}async broadcast(e,t){let n=await this.actorsPromise;return Promise.all(n.map(n=>n.sendAsync({type:e,data:t})))}async getActor(){let e=await this.actorsPromise;return this.currentActor=(this.currentActor+1)%e.length,e[this.currentActor]}async waitForInitComplete(){this.actors.length===0&&await this.actorsPromise}getReadyActor(){return this.currentActor=(this.currentActor+1)%this.actors.length,this.actors[this.currentActor]}remove(e=!0){this.removed=!0;for(let e of this.actors)e.remove();for(let e of this.workerErrorSubscriptions)e.unsubscribe();this.actors=[],this.workerErrorSubscriptions=[],this.setEventedParent(null),e&&this.workerPool.release(this.id)}async registerMessageHandler(e,t){let n=await this.actorsPromise;for(let r of n)r.registerMessageHandler(e,t)}async unregisterMessageHandler(e){let t=await this.actorsPromise;for(let n of t)n.unregisterMessageHandler(e)}},yb;function bb(){return yb||(yb=new vb(_b(),Gn),yb.registerMessageHandler(`GR`,(e,t,n)=>Zn(t,n))),yb}function xb(e,t){let n=ue();ge(n,n,[1,1,0]),P(n,n,[e.width*.5,e.height*.5,1]);let r=e.getFastPathSimpleProjectionMatrix(t);return r?he(n,n,r):n}function Sb(e,t,n){if(e)for(let r of e){let e=t[r];if(e?.source===n&&e.type===`fill-extrusion`)return!0}else for(let e in t){let r=t[e];if(r.source===n&&r.type===`fill-extrusion`)return!0}return!1}function Cb(e,t,n,r,i,a,o){let s=Sb(i?.layers??null,t,e.id),c=a.maxPitchScaleFactor(),l=e.tilesIn(r,c,s);l.sort(Eb);let u=[];for(let r of l)u.push({wrappedTileID:r.tileID.wrapped().key,queryResults:r.tile.queryRenderedFeatures(t,n,e.getState(),r.queryGeometry,r.cameraQueryGeometry,r.scale,i,a,c,xb(a,r.tileID),o?(e,t)=>o(r.tileID,e,t):void 0)});return Ob(Db(u),e)}function wb(e,t,n,r,i,a,o){let s={},c=a.queryRenderedSymbols(r),l=[];for(let e of Object.keys(c).map(Number))l.push(o[e]);l.sort(Eb);for(let n of l){let r=n.featureIndex.lookupSymbolFeatures(c[n.bucketInstanceId],t,n.bucketIndex,n.sourceLayerIndex,{filterSpec:i.filter,globalState:i.globalState},i.layers,i.availableImages,e);for(let e in r){s[e]||=[];let t=r[e];t.sort((e,t)=>{let r=n.featureSortOrder;if(r){let n=r.indexOf(e.featureIndex);return r.indexOf(t.featureIndex)-n}return t.featureIndex-e.featureIndex});for(let n of t)s[e].push(n)}}return kb(s,e,n)}function Tb(e,t){let n=e.getRenderableIds().map(t=>e.getTileByID(t)),r=[],i={};for(let e of n){let n=e.tileID.canonical.key;i[n]||(i[n]=!0,e.querySourceFeatures(r,t))}return r}function Eb(e,t){let n=e.tileID,r=t.tileID;return n.overscaledZ-r.overscaledZ||n.canonical.y-r.canonical.y||n.wrap-r.wrap||n.canonical.x-r.canonical.x}function Db(e){let t={},n={};for(let{queryResults:r,wrappedTileID:i}of e){n[i]||={};let e=n[i];for(let n in r){let i=r[n];e[n]||={};let a=e[n];t[n]||=[];for(let e of i)a[e.featureIndex]||(a[e.featureIndex]=!0,t[n].push(e))}}return t}function Ob(e,t){for(let n in e)for(let r of e[n])Ab(r,t);return e}function kb(e,t,n){for(let r in e)for(let i of e[r]){let e=n[t[r].source];Ab(i,e)}return e}function Ab(e,t){let n=e.feature,r=t.getFeatureState(n.layer[`source-layer`],n.id);n.source=n.layer.source,n.layer[`source-layer`]&&(n.sourceLayer=n.layer[`source-layer`]),n.state=r}async function jb(e,t,n,r){let i=e;if(e.url?i=(await Qn(await t.transformRequest(e.url,`Source`),n)).data:await Nn.frameAsync(n,r),!i)return null;let a=Bt(z(i,e),[`tiles`,`minzoom`,`maxzoom`,`attribution`,`bounds`,`scheme`,`tileSize`,`encoding`]);return`vector_layers`in i&&i.vector_layers&&(a.vectorLayerIds=i.vector_layers.map(e=>e.id)),a}var Mb=class e{constructor(e,t){e&&(t?this.setSouthWest(e).setNorthEast(t):Array.isArray(e)&&(e.length===4?this.setSouthWest([e[0],e[1]]).setNorthEast([e[2],e[3]]):this.setSouthWest(e[0]).setNorthEast(e[1])))}setNorthEast(e){return this._ne=e instanceof X?new X(e.lng,e.lat):X.convert(e),this}setSouthWest(e){return this._sw=e instanceof X?new X(e.lng,e.lat):X.convert(e),this}extend(t){let n=this._sw,r=this._ne,i,a;if(t instanceof X)i=t,a=t;else if(t instanceof e){if(i=t._sw,a=t._ne,!i||!a)return this}else{if(Array.isArray(t)){if(t.length===4||t.every(Array.isArray)){let n=t;return this.extend(e.convert(n))}{let e=t;return this.extend(X.convert(e))}}return t&&(`lng`in t||`lon`in t)&&`lat`in t?this.extend(X.convert(t)):this}return!n&&!r?(this._sw=new X(i.lng,i.lat),this._ne=new X(a.lng,a.lat)):(n.lng=Math.min(i.lng,n.lng),n.lat=Math.min(i.lat,n.lat),r.lng=Math.max(a.lng,r.lng),r.lat=Math.max(a.lat,r.lat)),this}getCenter(){return new X((this._sw.lng+this._ne.lng)/2,(this._sw.lat+this._ne.lat)/2)}getSouthWest(){return this._sw}getNorthEast(){return this._ne}getNorthWest(){return new X(this.getWest(),this.getNorth())}getSouthEast(){return new X(this.getEast(),this.getSouth())}getWest(){return this._sw.lng}getSouth(){return this._sw.lat}getEast(){return this._ne.lng}getNorth(){return this._ne.lat}toArray(){return[this._sw.toArray(),this._ne.toArray()]}toString(){return`LngLatBounds(${this._sw.toString()}, ${this._ne.toString()})`}isEmpty(){return!(this._sw&&this._ne)}contains(e){let{lng:t,lat:n}=X.convert(e),r=this._sw.lat<=n&&n<=this._ne.lat,i=this._sw.lng<=t&&t<=this._ne.lng;return this._sw.lng>this._ne.lng&&(i=this._sw.lng>=t&&t>=this._ne.lng),r&&i}intersects(t){if(t=e.convert(t),!(t.getNorth()>=this.getSouth()&&t.getSouth()<=this.getNorth()))return!1;let n=Math.abs(this.getEast()-this.getWest()),r=Math.abs(t.getEast()-t.getWest());if(n>=360||r>=360)return!0;let i=zt(this.getWest(),-180,180),a=zt(this.getEast(),-180,180),o=zt(t.getWest(),-180,180),s=zt(t.getEast(),-180,180),c=i>a,l=o>s;return c&&l?!0:c?s>=i||o<=a:l?a>=o||i<=s:o<=a&&s>=i}static convert(t){return t instanceof e||!t?t:new e(t)}static fromLngLat(t,n=0){let r=360*n/40075017,i=r/Math.cos(Math.PI/180*t.lat);return new e(new X(t.lng-i,t.lat-r),new X(t.lng+i,t.lat+r))}adjustAntiMeridian(){let t=new X(this._sw.lng,this._sw.lat),n=new X(this._ne.lng,this._ne.lat);return t.lng>n.lng?new e(t,new X(n.lng+360,n.lat)):new e(t,n)}},Nb=class{constructor(e,t,n){this.bounds=Mb.convert(this.validateBounds(e)),this.minzoom=t||0,this.maxzoom=n||24}validateBounds(e){return!Array.isArray(e)||e.length!==4?[-180,-90,180,90]:[Math.max(-180,e[0]),Math.max(-90,e[1]),Math.min(180,e[2]),Math.min(90,e[3])]}contains(e){let t=2**e.z,n={minX:Math.floor(Hm(this.bounds.getWest())*t),minY:Math.floor(Um(this.bounds.getNorth())*t),maxX:Math.ceil(Hm(this.bounds.getEast())*t),maxY:Math.ceil(Um(this.bounds.getSouth())*t)};return e.x>=n.minX&&e.x=n.minY&&e.y{this.tiles=e,this._options.tiles=e}),this}setUrl(e){return this.setSourceProperty(()=>{this.url=e,this._options.url=e}),this}onRemove(){this._tileJSONRequest&&=(this._tileJSONRequest.abort(),null)}serialize(){return z({},this._options)}async loadTile(e){let t=e.tileID.canonical.url(this.tiles,this.map.getPixelRatio(),this.scheme),n={request:await this.map._requestManager.transformRequest(t,`Tile`),uid:e.uid,tileID:e.tileID,zoom:e.tileID.overscaledZ,tileSize:this.tileSize*e.tileID.overscaleFactor(),type:this.type,source:this.id,pixelRatio:this.map.getPixelRatio(),showCollisionBoxes:this.map.showCollisionBoxes,promoteId:this.promoteId,subdivisionGranularity:this.map.style.projection.subdivisionGranularity,encoding:this.encoding,overzoomParameters:await this._getOverzoomParameters(e),etag:e.etag};if(n.request.collectResourceTiming=this._collectResourceTiming,await this.dispatcher.waitForInitComplete(),e.aborted)return;let r=`RT`;if(!e.actor||e.state===`expired`)e.actor=this.dispatcher.getReadyActor(),r=`LT`;else if(e.state===`loading`)return new Promise((t,n)=>{e.reloadPromise={resolve:t,reject:n}});e.abortController=new AbortController;try{let t=await e.actor.sendAsync({type:r,data:n},e.abortController);if(delete e.abortController,e.aborted)return;this._afterTileLoadWorkerResponse(e,t);let i={};return t?.etagUnmodified&&(i.unmodified=!0),i}catch(t){if(delete e.abortController,e.aborted||On(t))return;if(t&&t.status!==404)throw t;this._afterTileLoadWorkerResponse(e,null)}}async _getOverzoomParameters(e){if(e.tileID.canonical.z<=this.maxzoom||this.map._zoomLevelsToOverscale===void 0)return;let t=e.tileID.scaledTo(this.maxzoom).canonical,n=t.url(this.tiles,this.map.getPixelRatio(),this.scheme);return{maxZoomTileID:t,overzoomRequest:await this.map._requestManager.transformRequest(n,`Tile`)}}_afterTileLoadWorkerResponse(e,t){if(t?.resourceTiming&&(e.resourceTiming=t.resourceTiming),t&&this.map._refreshExpiredTiles&&e.setExpiryData(t),e.etag=t?.etag,e.loadVectorData(t,this.map.style),e.reloadPromise){let t=e.reloadPromise;e.reloadPromise=null,this.loadTile(e).then(t.resolve).catch(t.reject)}}async abortTile(e){e.abortController&&(e.abortController.abort(),delete e.abortController),e.actor&&await e.actor.sendAsync({type:`AT`,data:{uid:e.uid,type:this.type,source:this.id}})}async unloadTile(e){e.unloadVectorData(),e.actor&&await e.actor.sendAsync({type:`RMT`,data:{uid:e.uid,type:this.type,source:this.id}})}hasTransition(){return!1}},Fb=class extends sr{constructor(e,t,n,r){super(),this.id=e,this.dispatcher=n,this.setEventedParent(r),this.type=`raster`,this.minzoom=0,this.maxzoom=22,this.roundZoom=!0,this.scheme=`xyz`,this.tileSize=512,this._loaded=!1,this._premultiplyAlpha=!0,this._options=z({type:`raster`},t),z(this,Bt(t,[`url`,`scheme`,`tileSize`]))}async load(e=!1){this._loaded=!1,this.fire(new dr(`dataloading`)),this._tileJSONRequest=new AbortController;try{let t=await jb(this._options,this.map._requestManager,this._tileJSONRequest,this.map._ownerWindow);this._tileJSONRequest=null,this._loaded=!0,t&&(z(this,t),t.bounds&&(this.tileBounds=new Nb(t.bounds,this.minzoom,this.maxzoom)),this.fire(new dr(`data`,{sourceDataType:`metadata`})),this.fire(new dr(`data`,{sourceDataType:`content`,sourceDataChanged:e})))}catch(e){this._tileJSONRequest=null,this._loaded=!0,On(e)||this.fire(new B(vt(e)))}}loaded(){return this._loaded}onAdd(e){this.map=e,this.load()}onRemove(){this._tileJSONRequest&&=(this._tileJSONRequest.abort(),null)}setSourceProperty(e){this._tileJSONRequest&&=(this._tileJSONRequest.abort(),null),e(),this.load(!0)}setTiles(e){return this.setSourceProperty(()=>{this.tiles=e,this._options.tiles=e}),this}setUrl(e){return this.setSourceProperty(()=>{this.url=e,this._options.url=e}),this}serialize(){return z({},this._options)}setPremultiplyAlpha(e){return this._premultiplyAlpha===e||this.setSourceProperty(()=>{this._premultiplyAlpha=e}),this}hasTile(e){return!this.tileBounds||this.tileBounds.contains(e.canonical)}async loadTile(e){let t=e.tileID.canonical.url(this.tiles,this.map.getPixelRatio(),this.scheme),n=this._premultiplyAlpha,r=n?void 0:{premultiplyAlpha:`none`};e.abortController=new AbortController;try{let i=await nr.transformAndGetImage(this.map._requestManager,t,`Tile`,e.abortController,this.map._refreshExpiredTiles,r);if(delete e.abortController,e.aborted){e.state=`unloaded`;return}if(i){this.map._refreshExpiredTiles&&(i.cacheControl||i.expires)&&e.setExpiryData({cacheControl:i.cacheControl,expires:i.expires});let t=this.map.painter.context,r=t.gl,a=i.data??new Lf({width:1,height:1},new Uint8Array(4));e.texture=this.map.painter.getTileTexture(a.width),e.texture?e.texture.update(a,{useMipmap:!0,premultiply:n}):(e.texture=new Qf(t,a,r.RGBA,{useMipmap:!0,premultiply:n}),e.texture.bind(r.LINEAR,r.CLAMP_TO_EDGE,r.LINEAR_MIPMAP_NEAREST)),e.state=`loaded`}}catch(t){if(delete e.abortController,e.aborted)e.state=`unloaded`;else if(t)throw e.state=`errored`,t}}async abortTile(e){e.abortController&&(e.abortController.abort(),delete e.abortController)}async unloadTile(e){e.texture&&this.map.painter.saveTileTexture(e.texture)}hasTransition(){return!1}};function Ib(e,t,n){return!(e<0||e>25||n<0||n>=2**e||t<0||t>=2**e)}function Lb(e,t){let{x:n,y:r}=Ym.fromLngLat(t);return!(e<0||e>25||r<0||r>=1||n<0||n>=1)}var Rb=class{constructor(e,t,n){if(!Ib(e,t,n))throw Error(`x=${t}, y=${n}, z=${e} outside of bounds. 0<=x<${2**e}, 0<=y<${2**e} 0<=z<=25 `);this.z=e,this.x=t,this.y=n,this.key=Vb(0,e,e,t,n)}equals(e){return this.z===e.z&&this.x===e.x&&this.y===e.y}url(e,t,n){let r=Ub(this.x,this.y,this.z),i=Gb(this.z,this.x,this.y);return e[(this.x+this.y)%e.length].replace(/{prefix}/g,(this.x%16).toString(16)+(this.y%16).toString(16)).replace(/{z}/g,String(this.z)).replace(/{x}/g,String(this.x)).replace(/{y}/g,String(n===`tms`?2**this.z-this.y-1:this.y)).replace(/{ratio}/g,t>1?`@2x`:``).replace(/{quadkey}/g,i).replace(/{bbox-epsg-3857}/g,r)}isChildOf(e){let t=this.z-e.z;return t>0&&e.x===this.x>>t&&e.y===this.y>>t}getTilePoint(e){let t=2**this.z;return new k((e.x*t-this.x)*L,(e.y*t-this.y)*L)}toString(){return`${this.z}/${this.x}/${this.y}`}},zb=class{constructor(e,t){this.wrap=e,this.canonical=t,this.key=Vb(e,t.z,t.z,t.x,t.y)}},Bb=class e{constructor(e,t,n,r,i){if(this.terrainRttPosMatrix32f=null,e= z; overscaledZ = ${e}; z = ${n}`);this.overscaledZ=e,this.wrap=t,this.canonical=new Rb(n,+r,+i),this.key=Vb(t,e,n,r,i)}clone(){return new e(this.overscaledZ,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y)}equals(e){return this.overscaledZ===e.overscaledZ&&this.wrap===e.wrap&&this.canonical.equals(e.canonical)}scaledTo(t){if(t>this.overscaledZ)throw Error(`targetZ > this.overscaledZ; targetZ = ${t}; overscaledZ = ${this.overscaledZ}`);let n=this.canonical.z-t;return t>this.canonical.z?new e(t,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y):new e(t,this.wrap,t,this.canonical.x>>n,this.canonical.y>>n)}isOverscaled(){return this.overscaledZ>this.canonical.z}calculateScaledKey(e,t){if(e>this.overscaledZ)throw Error(`targetZ > this.overscaledZ; targetZ = ${e}; overscaledZ = ${this.overscaledZ}`);let n=this.canonical.z-e;return e>this.canonical.z?Vb(this.wrap*+t,e,this.canonical.z,this.canonical.x,this.canonical.y):Vb(this.wrap*+t,e,e,this.canonical.x>>n,this.canonical.y>>n)}isChildOf(e){if(e.wrap!==this.wrap||this.overscaledZ-e.overscaledZ<=0)return!1;if(e.overscaledZ===0)return this.overscaledZ>0;let t=this.canonical.z-e.canonical.z;return t<0?!1:e.canonical.x===this.canonical.x>>t&&e.canonical.y===this.canonical.y>>t}children(t){if(this.overscaledZ>=t)return[new e(this.overscaledZ+1,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y)];let n=this.canonical.z+1,r=this.canonical.x*2,i=this.canonical.y*2;return[new e(n,this.wrap,n,r,i),new e(n,this.wrap,n,r+1,i),new e(n,this.wrap,n,r,i+1),new e(n,this.wrap,n,r+1,i+1)]}isLessThan(e){return this.wrape.wrap?!1:this.overscaledZe.overscaledZ?!1:this.canonical.xe.canonical.x?!1:this.canonical.y=0&&t=0&&n=l)return null;let d=this.canonical.x+i,f=this.wrap;return d<0?(f-=Math.ceil(-d/l),d=(d%l+l)%l):d>=l&&(f+=Math.floor(d/l),d%=l),{tileID:new e(this.overscaledZ,f,c,d,u),x:o,y:s}}};function Vb(e,t,n,r,i){e*=2,e<0&&(e=e*-1-1);let a=1<0;i--){let e=1<0&&(s[new Bb(e.overscaledZ,i,t.z,r,t.y-1).key]={backfilled:!1},s[new Bb(e.overscaledZ,e.wrap,t.z,t.x,t.y-1).key]={backfilled:!1},s[new Bb(e.overscaledZ,o,t.z,a,t.y-1).key]={backfilled:!1}),t.y+10||n.addOrUpdateProperties?.length>0;if(!i&&!a)continue;r.push(t.geometry);let o={...t};if(e.set(n.id,o),i&&(r.push(n.newGeometry),o.geometry=n.newGeometry),a){if(o.properties=n.removeAllProperties?{}:{...o.properties||{}},n.removeProperties)for(let e of n.removeProperties)delete o.properties[e];if(n.addOrUpdateProperties)for(let{key:e,value:t}of n.addOrUpdateProperties)o.properties[e]=t}}return r}function Zb(e,t,n){if(!e)return t||{};if(!t)return e||{};let r=ex(e,n),i=ex(t,n);Qb(r,i);let a={};if((r.removeAll||i.removeAll)&&(a.removeAll=!0),a.remove=new Set([...r.remove,...i.remove]),a.add=new Map([...r.add,...i.add]),a.update=new Map([...r.update,...i.update]),a.remove.size&&a.add.size)for(let e of a.add.keys())a.remove.delete(e);return tx(a)}function Qb(e,t){t.removeAll&&(e.add.clear(),e.update.clear(),e.remove.clear(),t.remove.clear());for(let n of t.remove)e.add.delete(n),e.update.delete(n);for(let[n,r]of t.update){let i=e.update.get(n);i&&(t.update.set(n,$b(i,r)),e.update.delete(n))}}function $b(e,t){let n={id:e.id};if(t.removeAllProperties&&(delete e.removeProperties,delete e.addOrUpdateProperties,delete t.removeProperties),t.removeProperties&&e.addOrUpdateProperties){let n=new Set(t.removeProperties);e.addOrUpdateProperties=e.addOrUpdateProperties.filter(e=>!n.has(e.key))}return(e.removeAllProperties||t.removeAllProperties)&&(n.removeAllProperties=!0),(e.removeProperties||t.removeProperties)&&(n.removeProperties=[...e.removeProperties||[],...t.removeProperties||[]]),(e.addOrUpdateProperties||t.addOrUpdateProperties)&&(n.addOrUpdateProperties=[...e.addOrUpdateProperties||[],...t.addOrUpdateProperties||[]]),(e.newGeometry||t.newGeometry)&&(n.newGeometry=t.newGeometry||e.newGeometry),n}function ex(e,t){if(!e)return{};let n={};return n.removeAll=e.removeAll,n.remove=new Set(e.remove||[]),n.add=new Map(e.add?.map(e=>[Jb(e,t),e])),n.update=new Map(e.update?.map(e=>[e.id,e])),n}function tx(e){let t={};return e.removeAll&&(t.removeAll=e.removeAll),e.remove&&(t.remove=Array.from(e.remove)),e.add&&(t.add=Array.from(e.add.values())),e.update&&(t.update=Array.from(e.update.values())),t}function nx(e){return!e||e.length===0?[]:typeof e[0]==`number`?[e]:e.flatMap(e=>nx(e))}function rx(e){return e.type===`GeometryCollection`?e.geometries.flatMap(e=>rx(e)):nx(e.coordinates)}function ix(e){let t=new Mb,n;switch(e.type){case`FeatureCollection`:n=e.features.flatMap(e=>rx(e.geometry));break;case`Feature`:n=rx(e.geometry);break;default:n=rx(e)}if(n.length===0)return t;for(let e of n){let[n,r]=e;t.extend([n,r])}return t}function ax({x:e,y:t,z:n},r=0){let i=Gm((e-r)/2**n),a=Km((t+1+r)/2**n),o=Gm((e+1+r)/2**n),s=Km((t-r)/2**n);return new Mb([i,a],[o,s])}var ox=class{constructor(e){this._waiting=[],this._sending=!1,this._replacedWhileSending=!1,this._handlers=e}isIdle(){return!this._sending&&this._waiting.length===0}top(){return this._waiting.length?this._waiting[this._waiting.length-1]:void 0}some(e){return this._waiting.some(e)}enqueue(e){this._waiting.push(e)}replace(e){this._waiting=[e],this._replacedWhileSending=this._sending}clear(){this._waiting=[]}flush(){if(this.isIdle())return Promise.resolve();if(!this._flushing){let e,t=new Promise(t=>{e=t});this._flushing={promise:t,resolve:e}}let{promise:e}=this._flushing;return this._next(),e}_next(){if(this._sending)return;let e=this._waiting.shift();e===void 0?(this._flushing?.resolve(),this._flushing=void 0):(this._sending=!0,this._replacedWhileSending=!1,this._send(e).finally(()=>this._next()))}async _send(e){let t;try{t=await this._handlers.send(e)}catch(t){this._sending=!1,this._handlers.onError(e,t);return}this._sending=!1;try{this._handlers.onResult(e,t,this._replacedWhileSending)}catch(t){this._handlers.onError(e,t)}}},sx=class extends sr{constructor(e,t,n,r){super(),this.id=e,this.type=`geojson`,this.minzoom=0,this.maxzoom=18,this.tileSize=512,this.isTileClipped=!0,this.reparseOverscaled=!0,this._removed=!1,this._workerUpdates=new ox({send:e=>this._sendWorkerUpdate(e),onResult:(e,t,n)=>this._onWorkerUpdateResult(e,t,n),onError:(e,t)=>this._onWorkerUpdateError(t)}),t.data!==void 0&&this._workerUpdates.enqueue({data:t.data}),this.actorPromise=n.getActor(),this.setEventedParent(r),this._data=typeof t.data==`string`?{url:t.data}:{geojson:t.data},this._options=z({},t),this._collectResourceTiming=t.collectResourceTiming,t.maxzoom!==void 0&&(this.maxzoom=t.maxzoom),t.type&&(this.type=t.type),t.attribution&&(this.attribution=t.attribution),this.promoteId=t.promoteId,t.clusterMaxZoom!==void 0&&this.maxzoom<=t.clusterMaxZoom&&$t(`The maxzoom value "${this.maxzoom}" is expected to be greater than the clusterMaxZoom value "${t.clusterMaxZoom}".`),this.workerOptions=z({source:this.id,geojsonVtOptions:{buffer:this._pixelsToTileUnits(t.buffer===void 0?128:t.buffer),tolerance:this._pixelsToTileUnits(t.tolerance===void 0?.375:t.tolerance),extent:L,maxZoom:this.maxzoom,lineMetrics:t.lineMetrics||!1,generateId:t.generateId||!1,promoteId:this._promoteIdKey,cluster:t.cluster||!1,clusterOptions:{maxZoom:this._getClusterMaxZoom(t.clusterMaxZoom),minPoints:Math.max(2,t.clusterMinPoints||2),extent:L,radius:this._pixelsToTileUnits(t.clusterRadius||50),log:!1,generateId:t.generateId||!1}},clusterProperties:t.clusterProperties,filter:t.filter},t.workerOptions)}get _promoteIdKey(){return typeof this.promoteId==`string`?this.promoteId:void 0}_pixelsToTileUnits(e){return e*(L/this.tileSize)}_tileUnitsToPixels(e){return e/(L/this.tileSize)}_getClusterMaxZoom(e){let t=e?Math.round(e):this.maxzoom-1;return Number.isInteger(e)||e===void 0||$t(`Integer expected for option 'clusterMaxZoom': provided value "${e}" rounded to "${t}"`),t}async load(){this._workerUpdates.isIdle()?$t(`No pending worker updates for GeoJSONSource ${this.id}.`):await this._workerUpdates.flush()}onAdd(e){this.map=e,this.load()}setData(e){return this._data=typeof e==`string`?{url:e}:{geojson:e},this._workerUpdates.replace({data:e}),this._workerUpdates.flush()}updateData(e){let t=this._getWaitingWorkerChange();return t?t.diff=Zb(t.diff,e,this._promoteIdKey):this._workerUpdates.enqueue({diff:e}),this._workerUpdates.flush()}async getData(){for(;this._data.url;)await this.once(`data`);return this._data.geojson?this._data.geojson:{type:`FeatureCollection`,features:Array.from(this._data.updateable.values())}}async getBounds(){return ix(await this.getData())}setClusterOptions(e){if(this.workerOptions.geojsonVtOptions.cluster=e.cluster,e.clusterRadius!==void 0&&(this.workerOptions.geojsonVtOptions.clusterOptions.radius=this._pixelsToTileUnits(e.clusterRadius)),e.clusterMaxZoom!==void 0&&(this.workerOptions.geojsonVtOptions.clusterOptions.maxZoom=this._getClusterMaxZoom(e.clusterMaxZoom)),!this._workerUpdates.some(e=>`data`in e)){let e=this._getWaitingWorkerChange();e?e.updateCluster=!0:this._workerUpdates.enqueue({updateCluster:!0})}return this._workerUpdates.flush()}_getWaitingWorkerChange(){let e=this._workerUpdates.top();return e&&!(`data`in e)?e:void 0}getClusterOptions(){let{cluster:e,clusterOptions:t}=this.workerOptions.geojsonVtOptions;return{cluster:e,clusterMaxZoom:t.maxZoom,clusterRadius:this._tileUnitsToPixels(t.radius)}}async getClusterExpansionZoom(e){return(await this.actorPromise).sendAsync({type:`GCEZ`,data:{type:this.type,clusterId:e,source:this.id}})}async getClusterChildren(e){return(await this.actorPromise).sendAsync({type:`GCC`,data:{type:this.type,clusterId:e,source:this.id}})}async getClusterLeaves(e,t,n){return(await this.actorPromise).sendAsync({type:`GCL`,data:{type:this.type,source:this.id,clusterId:e,limit:t,offset:n}})}async _getLoadGeoJSONParameters(e){let t=z({type:this.type,source:this.id},this.workerOptions);return`data`in e?typeof e.data==`string`?(t.request=await this.map._requestManager.transformRequest(Nn.resolveURL(e.data),`Source`),t.request.collectResourceTiming=this._collectResourceTiming,t):(t.data=e.data,t):(e.diff&&(t.dataDiff=e.diff),e.updateCluster&&(t.updateCluster=!0),t)}async _sendWorkerUpdate(e){this.fire(new dr(`dataloading`));let t=await this._getLoadGeoJSONParameters(e);return(await this.actorPromise).sendAsync({type:`LD`,data:t})}_onWorkerUpdateResult(e,t,n){if(this._removed||t.abandoned){this.fire(new dr(`dataabort`));return}t.data&&!n&&(this._data={geojson:t.data});let r=`data`in e||n?void 0:e.diff,i=this._applyDiffToSource(r),a=!(`data`in e)&&e.updateCluster?void 0:this._getShouldReloadTileOptions(i),o={};this._applyResourceTiming(o,t),this.fire(new dr(`data`,{...o,sourceDataType:`metadata`})),this.fire(new dr(`data`,{...o,sourceDataType:`content`,shouldReloadTileOptions:a}))}_onWorkerUpdateError(e){this._removed?this.fire(new dr(`dataabort`)):this.fire(new B(vt(e)))}_applyResourceTiming(e,t){if(!this._collectResourceTiming)return;let n=t.resourceTiming?.[this.id];if(!n)return;let r=n.slice(0);r?.length&&z(e,{resourceTiming:r})}_applyDiffToSource(e){if(!e)return;let t=this._promoteIdKey;if(!this._data.url&&!this._data.updateable){let e=Yb(this._data.geojson,t);if(!e)throw Error(`GeoJSONSource "${this.id}": GeoJSON data is not compatible with updateData`);this._data={updateable:e}}if(!this._data.updateable)return;let n=Xb(this._data.updateable,e,t);if(!(e.removeAll||this.workerOptions.geojsonVtOptions.cluster))return n}_getShouldReloadTileOptions(e){if(e)return{affectedBounds:e.filter(Boolean).map(e=>ix(e))}}shouldReloadTile(e,{affectedBounds:t}){if(e.state===`loading`)return!0;if(e.state===`unloaded`)return!1;let{buffer:n,extent:r}=this.workerOptions.geojsonVtOptions,i=ax(e.tileID.canonical,n/r);for(let e of t)if(i.intersects(e))return!0;return!1}loaded(){return this._workerUpdates.isIdle()}async loadTile(e){let t=e.actor?`RT`:`LT`;e.actor=await this.actorPromise;let n={type:this.type,uid:e.uid,tileID:e.tileID,zoom:e.tileID.overscaledZ,maxZoom:this.maxzoom,tileSize:this.tileSize,source:this.id,pixelRatio:this.map.getPixelRatio(),showCollisionBoxes:this.map.showCollisionBoxes,promoteId:this.promoteId,subdivisionGranularity:this.map.style.projection.subdivisionGranularity};e.abortController=new AbortController;try{let r=await(await this.actorPromise).sendAsync({type:t,data:n},e.abortController);delete e.abortController,e.unloadVectorData(),e.aborted||e.loadVectorData(r,this.map.style,t===`RT`)}catch(t){if(delete e.abortController,e.aborted||On(t))return;throw t}}async abortTile(e){e.abortController&&(e.abortController.abort(),delete e.abortController),e.aborted=!0}async unloadTile(e){e.unloadVectorData(),await(await this.actorPromise).sendAsync({type:`RMT`,data:{uid:e.uid,type:this.type,source:this.id}})}onRemove(){this._removed=!0,this._workerUpdates.clear(),this.actorPromise.then(e=>e.sendAsync({type:`RS`,data:{type:this.type,source:this.id}}))}serialize(){return z({},this._options,{type:this.type,data:this._data.updateable?{type:`FeatureCollection`,features:Array.from(this._data.updateable.values())}:this._data.url||this._data.geojson})}hasTransition(){return!1}},cx=[0,0,1],lx=(e,t)=>({u_tl_parent:new Sd(e,t.u_tl_parent),u_scale_parent:new Y(e,t.u_scale_parent),u_buffer_scale:new Y(e,t.u_buffer_scale),u_image_warp:new Cd(e,t.u_image_warp),u_fade_t:new Y(e,t.u_fade_t),u_opacity:new Y(e,t.u_opacity),u_image0:new J(e,t.u_image0),u_image1:new J(e,t.u_image1),u_brightness_low:new Y(e,t.u_brightness_low),u_brightness_high:new Y(e,t.u_brightness_high),u_saturation_factor:new Y(e,t.u_saturation_factor),u_contrast_factor:new Y(e,t.u_contrast_factor),u_spin_weights:new Cd(e,t.u_spin_weights),u_coords_top:new wd(e,t.u_coords_top),u_coords_bottom:new wd(e,t.u_coords_bottom)}),ux=(e,t,n,r,i,a)=>({u_tl_parent:e,u_scale_parent:t,u_buffer_scale:1,u_image_warp:a,u_fade_t:n.mix,u_opacity:n.opacity*r.paint.get(`raster-opacity`),u_image0:0,u_image1:1,u_brightness_low:r.paint.get(`raster-brightness-min`),u_brightness_high:r.paint.get(`raster-brightness-max`),u_saturation_factor:px(r.paint.get(`raster-saturation`)),u_contrast_factor:fx(r.paint.get(`raster-contrast`)),u_spin_weights:dx(r.paint.get(`raster-hue-rotate`)),u_coords_top:[i[0].x,i[0].y,i[1].x,i[1].y],u_coords_bottom:[i[3].x,i[3].y,i[2].x,i[2].y]});function dx(e){e*=Math.PI/180;let t=Math.sin(e),n=Math.cos(e);return[(2*n+1)/3,(-Math.sqrt(3)*t-n+1)/3,(Math.sqrt(3)*t-n+1)/3]}function fx(e){return e>0?1/(1-e):1+e}function px(e){return e>0?1-1/(1.001-e):-e}var mx=class{constructor(e,t,n){this.vertexBuffer=e,this.indexBuffer=t,this.segments=n}destroy(){this.vertexBuffer.destroy(),this.indexBuffer.destroy(),this.segments.destroy(),this.vertexBuffer=null,this.indexBuffer=null,this.segments=null}},hx=ru([{name:`a_pos`,type:`Int16`,components:2}]);function gx(e,t){let n=_x(t,`16bit`),r=Hu.deserialize({arrayBuffer:n.vertices,length:n.vertices.byteLength/2/2}),i=ad.deserialize({arrayBuffer:n.indices,length:n.indices.byteLength/2/3});return new mx(e.createVertexBuffer(r,hx.members),e.createIndexBuffer(i),ud.simpleSegment(0,0,r.length,i.length))}function _x(e,t){let n=e.granularity===void 0?1:Math.max(e.granularity,1),r=n+(e.generateBorders?2:0),i=n+(e.extendToNorthPole||e.generateBorders?1:0)+(e.extendToSouthPole||e.generateBorders?1:0),a=r+1,o=i+1,s=e.generateBorders?-1:0,c=e.generateBorders||e.extendToNorthPole?-1:0,l=n+ +!!e.generateBorders,u=n+(e.generateBorders||e.extendToSouthPole?1:0),d=a*o,f=r*i*6,p=a*o>65536;if(p&&t===`16bit`)throw Error(`Granularity is too large and meshes would not fit inside 16 bit vertex indices.`);let m=p||t===`32bit`,h=new Int16Array(d*2),g=0;for(let t=c;t<=u;t++)for(let r=s;r<=l;r++){let i=r/n*L;r===-1&&(i=-64),r===n+1&&(i=8256);let a=t/n*L;t===-1&&(a=e.extendToNorthPole?im:-64),t===n+1&&(a=e.extendToSouthPole?am:8256),h[g++]=i,h[g++]=a}let _=m?new Uint32Array(f):new Uint16Array(f),v=0;for(let e=0;ethis.tileID.getTilePoint(e)._round()),this.imageWarp=xx(this.tileCoords,this._warp),this._subdividedQuad=this.imageWarp[2]>0&&!Cx(this.tileCoords),this.flippedWindingOrder=bx(this.tileCoords),this.fire(new dr(`data`,{sourceDataType:`content`})),this}prepare(){if(Object.keys(this.tiles).length===0||!this.image)return;let e=this.map.painter.context,t=e.gl;this.texture?this._imageDirty&&(this.texture.update(this.image),this.texture.bind(t.LINEAR,t.CLAMP_TO_EDGE)):(this.texture=new Qf(e,this.image,t.RGBA),this.texture.bind(t.LINEAR,t.CLAMP_TO_EDGE)),this._imageDirty=!1;let n=!1;for(let e in this.tiles){let t=this.tiles[e];t.state!==`loaded`&&(t.state=`loaded`,t.texture=this.texture,n=!0)}n&&this.fire(new dr(`data`,{sourceDataType:`idle`,sourceId:this.id}))}async loadTile(e){this.tileID?.equals(e.tileID.canonical)?(this.tiles[String(e.tileID.wrap)]=e,e.buckets={}):e.state=`errored`}serialize(){let e={type:`image`,coordinates:this.coordinates};return this.options.url!==void 0&&(e.url=this.options.url),e}hasTransition(){return!1}_getOverlappingTileRanges(e){let{minX:t,minY:n,maxX:r,maxY:i}=km.fromPoints(e),a={};for(let e=0;e<=25;e++){let o=2**e,s=Math.floor(t*o),c=Math.floor(n*o),l=Math.floor(r*o),u=Math.floor(i*o),d=(s%o+o)%o,f=l%o,p=Math.floor(s/o),m=Math.floor(l/o);a[e]={minWrap:p,maxWrap:m,minTileXWrapped:d,maxTileXWrapped:f,minTileY:c,maxTileY:u}}return a}};function yx(e){let t=km.fromPoints(e),n=t.width(),r=t.height(),i=Math.max(0,Math.floor(-Math.log(Math.max(n,r))/Math.LN2)),a=2**i;return new Rb(i,Math.floor((t.minX+t.maxX)/2*a),Math.floor((t.minY+t.maxY)/2*a))}function bx(e){let t=e[1].x-e[0].x,n=e[1].y-e[0].y,r=e[2].x-e[0].x;return t*(e[2].y-e[0].y)-n*r<0}function xx(e,t){if(t===`flat`||Cx(e))return cx;let[n,r,i,a]=e,o=n.x-r.x+i.x-a.x,s=n.y-r.y+i.y-a.y,c=[r.x-i.x,r.y-i.y,a.x-i.x,a.y-i.y],[l,u,d,f]=c,p=ie(c),m=(o*f-d*s)/p,h=(l*s-o*u)/p,g=[1,1+m,1+m+h,1+h],_=Math.max(...g)/Math.min(...g),v=t===`perspective`?0:Sx(_);return!(_>=1&&_<=512)||v>=1?cx:[m,h,v]}function Sx(e){let t=(1-4/e)/(1-4/512);return Math.max(0,t)}function Cx(e){let[t,n,r,i]=e;return t.x+r.x===n.x+i.x&&t.y+r.y===n.y+i.y}var wx=class extends vx{constructor(e,t,n,r){super(e,t,n,r),this._onPlayingHandler=()=>{this.map?.triggerRepaint()},this.roundZoom=!0,this.type=`video`,this.options=t}async load(){this._loaded=!1;let e=this.options;this.urls=[];for(let t of e.urls)this.urls.push((await this.map._requestManager.transformRequest(t,`Source`)).url);try{let e=await tr(this.urls);if(this._loaded=!0,!e)return;this.video=e,this.video.loop=!0,this.video.addEventListener(`playing`,this._onPlayingHandler),this.map&&this.video.play(),this._finishLoading()}catch(e){this.fire(new B(vt(e)))}}pause(){this.video&&this.video.pause()}play(){this.video&&this.video.play()}seek(e){if(this.video){let t=this.video.seekable;et.end(0)?this.fire(new B(new U(`sources.${this.id}`,null,`Playback for this video can be set only between the ${t.start(0)} and ${t.end(0)}-second mark.`))):this.video.currentTime=e}}getVideo(){return this.video}onAdd(e){this.map||(this.map=e,this.load(),this.video&&(this.video.play(),this.setCoordinates(this.coordinates)))}onRemove(){super.onRemove(),this.video&&(this.video.removeEventListener(`playing`,this._onPlayingHandler),this.video.pause())}prepare(){if(Object.keys(this.tiles).length===0||this.video.readyState<2)return;let e=this.map.painter.context,t=e.gl;this.texture?this.video.paused||(this.texture.bind(t.LINEAR,t.CLAMP_TO_EDGE),t.texSubImage2D(t.TEXTURE_2D,0,0,0,t.RGBA,t.UNSIGNED_BYTE,this.video)):(this.texture=new Qf(e,this.video,t.RGBA),this.texture.bind(t.LINEAR,t.CLAMP_TO_EDGE));let n=!1;for(let e in this.tiles){let t=this.tiles[e];t.state!==`loaded`&&(t.state=`loaded`,t.texture=this.texture,n=!0)}n&&this.fire(new dr(`data`,{sourceDataType:`idle`,sourceId:this.id}))}serialize(){return{type:`video`,urls:this.urls,coordinates:this.coordinates}}hasTransition(){return this.video&&!this.video.paused}},Tx=class extends vx{constructor(e,t,n,r){super(e,t,n,r),t.coordinates?(!Array.isArray(t.coordinates)||t.coordinates.length!==4||t.coordinates.some(e=>!Array.isArray(e)||e.length!==2||e.some(e=>typeof e!=`number`)))&&this.fire(new B(new U(`sources.${e}`,null,`"coordinates" property must be an array of 4 longitude/latitude array pairs`))):this.fire(new B(new U(`sources.${e}`,null,`missing required property "coordinates"`))),t.animate&&typeof t.animate!=`boolean`&&this.fire(new B(new U(`sources.${e}`,null,`optional "animate" property must be a boolean value`))),t.canvas?typeof t.canvas!=`string`&&!(t.canvas instanceof HTMLCanvasElement)&&this.fire(new B(new U(`sources.${e}`,null,`"canvas" must be either a string representing the ID of the canvas element from which to read, or an HTMLCanvasElement instance`))):this.fire(new B(new U(`sources.${e}`,null,`missing required property "canvas"`))),this.options=t,this.animate=t.animate===void 0||t.animate}async load(){this._loaded=!0,this.canvas||=this.options.canvas instanceof HTMLCanvasElement?this.options.canvas:document.getElementById(this.options.canvas),this.width=this.canvas.width,this.height=this.canvas.height,this._hasInvalidDimensions()?this.fire(new B(Error(`Canvas dimensions cannot be less than or equal to zero.`))):(this.play=function(){this._playing=!0,this.map.triggerRepaint()},this.pause=function(){this._playing&&=(this.prepare(),!1)},this._finishLoading())}getCanvas(){return this.canvas}onAdd(e){this.map=e,this.load(),this.canvas&&this.animate&&this.play()}onRemove(){this._playing=!1,super.onRemove()}prepare(){let e=!1;if(this.canvas.width!==this.width&&(this.width=this.canvas.width,e=!0),this.canvas.height!==this.height&&(this.height=this.canvas.height,e=!0),this._hasInvalidDimensions()||Object.keys(this.tiles).length===0)return;let t=this.map.painter.context,n=t.gl;this.texture?(e||this._playing)&&this.texture.update(this.canvas,{premultiply:!0}):(this.texture=new Qf(t,this.canvas,n.RGBA,{premultiply:!0}),this.texture.bind(n.LINEAR,n.CLAMP_TO_EDGE));let r=!1;for(let e in this.tiles){let t=this.tiles[e];t.state!==`loaded`&&(t.state=`loaded`,t.texture=this.texture,r=!0)}r&&this.fire(new dr(`data`,{sourceDataType:`idle`,sourceId:this.id}))}serialize(){return{type:`canvas`,animate:this.animate,canvas:this.options.canvas,coordinates:this.coordinates}}hasTransition(){return this._playing}_hasInvalidDimensions(){for(let e of[this.canvas.width,this.canvas.height])if(isNaN(e)||e<=0)return!0;return!1}},Ex={},Dx=(e,t,n,r)=>{let i=new(Ox(t.type))(e,t,n,r);if(i.id!==e)throw Error(`Expected Source id to be ${e} instead of ${i.id}`);return i},Ox=e=>{switch(e){case`geojson`:return sx;case`image`:return vx;case`raster`:return Fb;case`raster-dem`:return qb;case`vector`:return Pb;case`video`:return wx;case`canvas`:return Tx}return Ex[e]};function kx(e,t){let n={};if(!t)return n;for(let r of e){let e=r.layerIds.map(e=>t.getLayer(e)).filter(Boolean);if(e.length!==0){r.layers=e,r.stateDependentLayerIds&&(r.stateDependentLayers=r.stateDependentLayerIds.map(t=>e.filter(e=>e.id===t)[0]));for(let t of e)n[t.id]=r}}return n}var Ax=`_geojsonTileLayer`,jx=class{constructor(e){this._stringToNumber={},this._numberToString=[];for(let t=0;t=this._numberToString.length)throw Error(`Out of bounds. Index requested n=${e} can't be >= this._numberToString.length ${this._numberToString.length}`);return this._numberToString[e]}},Mx=class{constructor(e,t,n,r,i){this.type=`Feature`,this._vectorTileFeature=e,this._x=n,this._y=r,this._z=t;for(let t in e.properties)typeof e.properties[t]==`string`&&e.properties[t].startsWith(`__$json__:`)&&(e.properties[t]=JSON.parse(e.properties[t].slice(10)));this.properties=e.properties,this.id=i}projectPoint(e,t,n,r){return[(e.x+t)*360/r-180,360/Math.PI*Math.atan(Math.exp((1-(e.y+n)*2/r)*Math.PI))-90]}projectLine(e,t,n,r){return e.map(e=>this.projectPoint(e,t,n,r))}get geometry(){if(this._geometry)return this._geometry;let e=this._vectorTileFeature,t=e.extent*2**this._z,n=e.extent*this._x,r=e.extent*this._y,i=e.loadGeometry();switch(e.type){case 1:{let e=[];for(let t of i)e.push(t[0]);let a=this.projectLine(e,n,r,t);this._geometry=e.length===1?{type:`Point`,coordinates:a[0]}:{type:`MultiPoint`,coordinates:a};break}case 2:{let e=i.map(e=>this.projectLine(e,n,r,t));this._geometry=e.length===1?{type:`LineString`,coordinates:e[0]}:{type:`MultiLineString`,coordinates:e};break}case 3:{let e=Pm(i),a=[];for(let i of e)a.push(i.map(e=>this.projectLine(e,n,r,t)));this._geometry=a.length===1?{type:`Polygon`,coordinates:a[0]}:{type:`MultiPolygon`,coordinates:a};break}default:throw Error(`unknown feature type: ${e.type}`)}return this._geometry}set geometry(e){this._geometry=e}toJSON(){let e={geometry:this.geometry};for(let t in this)t!==`_geometry`&&t!==`_vectorTileFeature`&&t!==`_x`&&t!==`_y`&&t!==`_z`&&(e[t]=this[t]);return e}},Nx=class{constructor(e,t,n){this._name=e,this.dataBuffer=t,typeof n==`number`?this._size=n:(this.nullabilityBuffer=n,this._size=n.size())}getValue(e){return this.nullabilityBuffer&&!this.nullabilityBuffer.get(e)?null:this.getValueFromBuffer(e)}has(e){return this.nullabilityBuffer?.get(e)||!this.nullabilityBuffer}get name(){return this._name}get size(){return this._size}},Px=class extends Nx{},Fx=class extends Px{getValueFromBuffer(e){return this.dataBuffer[e]}},Ix=class extends Px{getValueFromBuffer(e){return this.dataBuffer[e]}},Lx=class extends Nx{constructor(e,t,n,r){super(e,t,r),this.delta=n}},Rx=class extends Lx{constructor(e,t,n,r,i){super(e,i?Int32Array.of(t):Uint32Array.of(t),n,r)}getValueFromBuffer(e){return this.dataBuffer[0]+e*this.delta}},zx=class extends Nx{constructor(e,t,n,r){super(e,r?Int32Array.of(t):Uint32Array.of(t),n)}getValueFromBuffer(e){return this.dataBuffer[0]}},Bx=class{constructor(e,t,n,r,i=4096){if(this._name=e,this._geometryVector=t,this._idVector=n,this._propertyVectors=r,this._extent=i,e.length===0)throw Error(`Missing layer name`)}get name(){return this._name}get idVector(){return this._idVector}get geometryVector(){return this._geometryVector}get propertyVectors(){return this._propertyVectors??[]}getPropertyVector(e){return this.propertyVectorsMap||=new Map(this.propertyVectors.map(e=>[e.name,e])),this.propertyVectorsMap.get(e)}get numFeatures(){return this.geometryVector.numGeometries}get extent(){return this._extent}getFeatures(){let e=[],t=this.geometryVector.getGeometries();for(let n=0;n>>32-e;var Yx=Jx,Xx=65536;function Zx(e,t){return e-e%t}function Qx(e){return Zx(e+31,32)}function $x(e){if(!Number.isFinite(e)||e<=0)return Xx;let t=Zx(Math.floor(e),256);return t===0?256:t}function eS(e){let t=e>>>0;return((t&255)<<24|(t&65280)<<8|t>>>8&65280|t>>>24&255)>>>0}function tS(e,t,n,r){let i=r,a=e[t]>>>0,o=e[t+1]>>>0;n[i++]=a>>>0&3,n[i++]=a>>>2&3,n[i++]=a>>>4&3,n[i++]=a>>>6&3,n[i++]=a>>>8&3,n[i++]=a>>>10&3,n[i++]=a>>>12&3,n[i++]=a>>>14&3,n[i++]=a>>>16&3,n[i++]=a>>>18&3,n[i++]=a>>>20&3,n[i++]=a>>>22&3,n[i++]=a>>>24&3,n[i++]=a>>>26&3,n[i++]=a>>>28&3,n[i++]=a>>>30&3,n[i++]=o>>>0&3,n[i++]=o>>>2&3,n[i++]=o>>>4&3,n[i++]=o>>>6&3,n[i++]=o>>>8&3,n[i++]=o>>>10&3,n[i++]=o>>>12&3,n[i++]=o>>>14&3,n[i++]=o>>>16&3,n[i++]=o>>>18&3,n[i++]=o>>>20&3,n[i++]=o>>>22&3,n[i++]=o>>>24&3,n[i++]=o>>>26&3,n[i++]=o>>>28&3,n[i]=o>>>30&3}function nS(e,t,n,r){let i=r,a=e[t]>>>0,o=e[t+1]>>>0,s=e[t+2]>>>0;n[i++]=a>>>0&7,n[i++]=a>>>3&7,n[i++]=a>>>6&7,n[i++]=a>>>9&7,n[i++]=a>>>12&7,n[i++]=a>>>15&7,n[i++]=a>>>18&7,n[i++]=a>>>21&7,n[i++]=a>>>24&7,n[i++]=a>>>27&7,n[i++]=(a>>>30|(o&1)<<2)&7,n[i++]=o>>>1&7,n[i++]=o>>>4&7,n[i++]=o>>>7&7,n[i++]=o>>>10&7,n[i++]=o>>>13&7,n[i++]=o>>>16&7,n[i++]=o>>>19&7,n[i++]=o>>>22&7,n[i++]=o>>>25&7,n[i++]=o>>>28&7,n[i++]=(o>>>31|(s&3)<<1)&7,n[i++]=s>>>2&7,n[i++]=s>>>5&7,n[i++]=s>>>8&7,n[i++]=s>>>11&7,n[i++]=s>>>14&7,n[i++]=s>>>17&7,n[i++]=s>>>20&7,n[i++]=s>>>23&7,n[i++]=s>>>26&7,n[i]=s>>>29&7}function rS(e,t,n,r){let i=r,a=e[t]>>>0,o=e[t+1]>>>0,s=e[t+2]>>>0,c=e[t+3]>>>0;n[i++]=a>>>0&15,n[i++]=a>>>4&15,n[i++]=a>>>8&15,n[i++]=a>>>12&15,n[i++]=a>>>16&15,n[i++]=a>>>20&15,n[i++]=a>>>24&15,n[i++]=a>>>28&15,n[i++]=o>>>0&15,n[i++]=o>>>4&15,n[i++]=o>>>8&15,n[i++]=o>>>12&15,n[i++]=o>>>16&15,n[i++]=o>>>20&15,n[i++]=o>>>24&15,n[i++]=o>>>28&15,n[i++]=s>>>0&15,n[i++]=s>>>4&15,n[i++]=s>>>8&15,n[i++]=s>>>12&15,n[i++]=s>>>16&15,n[i++]=s>>>20&15,n[i++]=s>>>24&15,n[i++]=s>>>28&15,n[i++]=c>>>0&15,n[i++]=c>>>4&15,n[i++]=c>>>8&15,n[i++]=c>>>12&15,n[i++]=c>>>16&15,n[i++]=c>>>20&15,n[i++]=c>>>24&15,n[i]=c>>>28&15}function iS(e,t,n,r){let i=r,a=e[t]>>>0,o=e[t+1]>>>0,s=e[t+2]>>>0,c=e[t+3]>>>0,l=e[t+4]>>>0;n[i++]=a>>>0&31,n[i++]=a>>>5&31,n[i++]=a>>>10&31,n[i++]=a>>>15&31,n[i++]=a>>>20&31,n[i++]=a>>>25&31,n[i++]=(a>>>30|(o&7)<<2)&31,n[i++]=o>>>3&31,n[i++]=o>>>8&31,n[i++]=o>>>13&31,n[i++]=o>>>18&31,n[i++]=o>>>23&31,n[i++]=(o>>>28|(s&1)<<4)&31,n[i++]=s>>>1&31,n[i++]=s>>>6&31,n[i++]=s>>>11&31,n[i++]=s>>>16&31,n[i++]=s>>>21&31,n[i++]=s>>>26&31,n[i++]=(s>>>31|(c&15)<<1)&31,n[i++]=c>>>4&31,n[i++]=c>>>9&31,n[i++]=c>>>14&31,n[i++]=c>>>19&31,n[i++]=c>>>24&31,n[i++]=(c>>>29|(l&3)<<3)&31,n[i++]=l>>>2&31,n[i++]=l>>>7&31,n[i++]=l>>>12&31,n[i++]=l>>>17&31,n[i++]=l>>>22&31,n[i]=l>>>27&31}function aS(e,t,n,r){let i=r,a=e[t]>>>0,o=e[t+1]>>>0,s=e[t+2]>>>0,c=e[t+3]>>>0,l=e[t+4]>>>0,u=e[t+5]>>>0;n[i++]=a>>>0&63,n[i++]=a>>>6&63,n[i++]=a>>>12&63,n[i++]=a>>>18&63,n[i++]=a>>>24&63,n[i++]=(a>>>30|(o&15)<<2)&63,n[i++]=o>>>4&63,n[i++]=o>>>10&63,n[i++]=o>>>16&63,n[i++]=o>>>22&63,n[i++]=(o>>>28|(s&3)<<4)&63,n[i++]=s>>>2&63,n[i++]=s>>>8&63,n[i++]=s>>>14&63,n[i++]=s>>>20&63,n[i++]=s>>>26&63,n[i++]=c>>>0&63,n[i++]=c>>>6&63,n[i++]=c>>>12&63,n[i++]=c>>>18&63,n[i++]=c>>>24&63,n[i++]=(c>>>30|(l&15)<<2)&63,n[i++]=l>>>4&63,n[i++]=l>>>10&63,n[i++]=l>>>16&63,n[i++]=l>>>22&63,n[i++]=(l>>>28|(u&3)<<4)&63,n[i++]=u>>>2&63,n[i++]=u>>>8&63,n[i++]=u>>>14&63,n[i++]=u>>>20&63,n[i]=u>>>26&63}function oS(e,t,n,r){let i=r,a=e[t]>>>0,o=e[t+1]>>>0,s=e[t+2]>>>0,c=e[t+3]>>>0,l=e[t+4]>>>0,u=e[t+5]>>>0,d=e[t+6]>>>0;n[i++]=a>>>0&127,n[i++]=a>>>7&127,n[i++]=a>>>14&127,n[i++]=a>>>21&127,n[i++]=(a>>>28|(o&7)<<4)&127,n[i++]=o>>>3&127,n[i++]=o>>>10&127,n[i++]=o>>>17&127,n[i++]=o>>>24&127,n[i++]=(o>>>31|(s&63)<<1)&127,n[i++]=s>>>6&127,n[i++]=s>>>13&127,n[i++]=s>>>20&127,n[i++]=(s>>>27|(c&3)<<5)&127,n[i++]=c>>>2&127,n[i++]=c>>>9&127,n[i++]=c>>>16&127,n[i++]=c>>>23&127,n[i++]=(c>>>30|(l&31)<<2)&127,n[i++]=l>>>5&127,n[i++]=l>>>12&127,n[i++]=l>>>19&127,n[i++]=(l>>>26|(u&1)<<6)&127,n[i++]=u>>>1&127,n[i++]=u>>>8&127,n[i++]=u>>>15&127,n[i++]=u>>>22&127,n[i++]=(u>>>29|(d&15)<<3)&127,n[i++]=d>>>4&127,n[i++]=d>>>11&127,n[i++]=d>>>18&127,n[i]=d>>>25&127}function sS(e,t,n,r){let i=r,a=e[t]>>>0,o=e[t+1]>>>0,s=e[t+2]>>>0,c=e[t+3]>>>0,l=e[t+4]>>>0,u=e[t+5]>>>0,d=e[t+6]>>>0,f=e[t+7]>>>0;n[i++]=a>>>0&255,n[i++]=a>>>8&255,n[i++]=a>>>16&255,n[i++]=a>>>24&255,n[i++]=o>>>0&255,n[i++]=o>>>8&255,n[i++]=o>>>16&255,n[i++]=o>>>24&255,n[i++]=s>>>0&255,n[i++]=s>>>8&255,n[i++]=s>>>16&255,n[i++]=s>>>24&255,n[i++]=c>>>0&255,n[i++]=c>>>8&255,n[i++]=c>>>16&255,n[i++]=c>>>24&255,n[i++]=l>>>0&255,n[i++]=l>>>8&255,n[i++]=l>>>16&255,n[i++]=l>>>24&255,n[i++]=u>>>0&255,n[i++]=u>>>8&255,n[i++]=u>>>16&255,n[i++]=u>>>24&255,n[i++]=d>>>0&255,n[i++]=d>>>8&255,n[i++]=d>>>16&255,n[i++]=d>>>24&255,n[i++]=f>>>0&255,n[i++]=f>>>8&255,n[i++]=f>>>16&255,n[i]=f>>>24&255}function cS(e,t,n,r){let i=r,a=e[t]>>>0,o=e[t+1]>>>0,s=e[t+2]>>>0,c=e[t+3]>>>0,l=e[t+4]>>>0,u=e[t+5]>>>0,d=e[t+6]>>>0,f=e[t+7]>>>0,p=e[t+8]>>>0;n[i++]=a>>>0&511,n[i++]=a>>>9&511,n[i++]=a>>>18&511,n[i++]=(a>>>27|(o&15)<<5)&511,n[i++]=o>>>4&511,n[i++]=o>>>13&511,n[i++]=o>>>22&511,n[i++]=(o>>>31|(s&255)<<1)&511,n[i++]=s>>>8&511,n[i++]=s>>>17&511,n[i++]=(s>>>26|(c&7)<<6)&511,n[i++]=c>>>3&511,n[i++]=c>>>12&511,n[i++]=c>>>21&511,n[i++]=(c>>>30|(l&127)<<2)&511,n[i++]=l>>>7&511,n[i++]=l>>>16&511,n[i++]=(l>>>25|(u&3)<<7)&511,n[i++]=u>>>2&511,n[i++]=u>>>11&511,n[i++]=u>>>20&511,n[i++]=(u>>>29|(d&63)<<3)&511,n[i++]=d>>>6&511,n[i++]=d>>>15&511,n[i++]=(d>>>24|(f&1)<<8)&511,n[i++]=f>>>1&511,n[i++]=f>>>10&511,n[i++]=f>>>19&511,n[i++]=(f>>>28|(p&31)<<4)&511,n[i++]=p>>>5&511,n[i++]=p>>>14&511,n[i]=p>>>23&511}function lS(e,t,n,r){let i=r,a=e[t]>>>0,o=e[t+1]>>>0,s=e[t+2]>>>0,c=e[t+3]>>>0,l=e[t+4]>>>0,u=e[t+5]>>>0,d=e[t+6]>>>0,f=e[t+7]>>>0,p=e[t+8]>>>0,m=e[t+9]>>>0;n[i++]=a>>>0&1023,n[i++]=a>>>10&1023,n[i++]=a>>>20&1023,n[i++]=(a>>>30|(o&255)<<2)&1023,n[i++]=o>>>8&1023,n[i++]=o>>>18&1023,n[i++]=(o>>>28|(s&63)<<4)&1023,n[i++]=s>>>6&1023,n[i++]=s>>>16&1023,n[i++]=(s>>>26|(c&15)<<6)&1023,n[i++]=c>>>4&1023,n[i++]=c>>>14&1023,n[i++]=(c>>>24|(l&3)<<8)&1023,n[i++]=l>>>2&1023,n[i++]=l>>>12&1023,n[i++]=l>>>22&1023,n[i++]=u>>>0&1023,n[i++]=u>>>10&1023,n[i++]=u>>>20&1023,n[i++]=(u>>>30|(d&255)<<2)&1023,n[i++]=d>>>8&1023,n[i++]=d>>>18&1023,n[i++]=(d>>>28|(f&63)<<4)&1023,n[i++]=f>>>6&1023,n[i++]=f>>>16&1023,n[i++]=(f>>>26|(p&15)<<6)&1023,n[i++]=p>>>4&1023,n[i++]=p>>>14&1023,n[i++]=(p>>>24|(m&3)<<8)&1023,n[i++]=m>>>2&1023,n[i++]=m>>>12&1023,n[i]=m>>>22&1023}function uS(e,t,n,r){let i=r,a=e[t]>>>0,o=e[t+1]>>>0,s=e[t+2]>>>0,c=e[t+3]>>>0,l=e[t+4]>>>0,u=e[t+5]>>>0,d=e[t+6]>>>0,f=e[t+7]>>>0,p=e[t+8]>>>0,m=e[t+9]>>>0,h=e[t+10]>>>0;n[i++]=a>>>0&2047,n[i++]=a>>>11&2047,n[i++]=(a>>>22|(o&1)<<10)&2047,n[i++]=o>>>1&2047,n[i++]=o>>>12&2047,n[i++]=(o>>>23|(s&3)<<9)&2047,n[i++]=s>>>2&2047,n[i++]=s>>>13&2047,n[i++]=(s>>>24|(c&7)<<8)&2047,n[i++]=c>>>3&2047,n[i++]=c>>>14&2047,n[i++]=(c>>>25|(l&15)<<7)&2047,n[i++]=l>>>4&2047,n[i++]=l>>>15&2047,n[i++]=(l>>>26|(u&31)<<6)&2047,n[i++]=u>>>5&2047,n[i++]=u>>>16&2047,n[i++]=(u>>>27|(d&63)<<5)&2047,n[i++]=d>>>6&2047,n[i++]=d>>>17&2047,n[i++]=(d>>>28|(f&127)<<4)&2047,n[i++]=f>>>7&2047,n[i++]=f>>>18&2047,n[i++]=(f>>>29|(p&255)<<3)&2047,n[i++]=p>>>8&2047,n[i++]=p>>>19&2047,n[i++]=(p>>>30|(m&511)<<2)&2047,n[i++]=m>>>9&2047,n[i++]=m>>>20&2047,n[i++]=(m>>>31|(h&1023)<<1)&2047,n[i++]=h>>>10&2047,n[i]=h>>>21&2047}function dS(e,t,n,r){let i=r,a=e[t]>>>0,o=e[t+1]>>>0,s=e[t+2]>>>0,c=e[t+3]>>>0,l=e[t+4]>>>0,u=e[t+5]>>>0,d=e[t+6]>>>0,f=e[t+7]>>>0,p=e[t+8]>>>0,m=e[t+9]>>>0,h=e[t+10]>>>0,g=e[t+11]>>>0;n[i++]=a>>>0&4095,n[i++]=a>>>12&4095,n[i++]=(a>>>24|(o&15)<<8)&4095,n[i++]=o>>>4&4095,n[i++]=o>>>16&4095,n[i++]=(o>>>28|(s&255)<<4)&4095,n[i++]=s>>>8&4095,n[i++]=s>>>20&4095,n[i++]=c>>>0&4095,n[i++]=c>>>12&4095,n[i++]=(c>>>24|(l&15)<<8)&4095,n[i++]=l>>>4&4095,n[i++]=l>>>16&4095,n[i++]=(l>>>28|(u&255)<<4)&4095,n[i++]=u>>>8&4095,n[i++]=u>>>20&4095,n[i++]=d>>>0&4095,n[i++]=d>>>12&4095,n[i++]=(d>>>24|(f&15)<<8)&4095,n[i++]=f>>>4&4095,n[i++]=f>>>16&4095,n[i++]=(f>>>28|(p&255)<<4)&4095,n[i++]=p>>>8&4095,n[i++]=p>>>20&4095,n[i++]=m>>>0&4095,n[i++]=m>>>12&4095,n[i++]=(m>>>24|(h&15)<<8)&4095,n[i++]=h>>>4&4095,n[i++]=h>>>16&4095,n[i++]=(h>>>28|(g&255)<<4)&4095,n[i++]=g>>>8&4095,n[i]=g>>>20&4095}function fS(e,t,n,r){let i=r,a=e[t]>>>0,o=e[t+1]>>>0,s=e[t+2]>>>0,c=e[t+3]>>>0,l=e[t+4]>>>0,u=e[t+5]>>>0,d=e[t+6]>>>0,f=e[t+7]>>>0,p=e[t+8]>>>0,m=e[t+9]>>>0,h=e[t+10]>>>0,g=e[t+11]>>>0,_=e[t+12]>>>0,v=e[t+13]>>>0,y=e[t+14]>>>0,b=e[t+15]>>>0;n[i++]=a>>>0&65535,n[i++]=a>>>16&65535,n[i++]=o>>>0&65535,n[i++]=o>>>16&65535,n[i++]=s>>>0&65535,n[i++]=s>>>16&65535,n[i++]=c>>>0&65535,n[i++]=c>>>16&65535,n[i++]=l>>>0&65535,n[i++]=l>>>16&65535,n[i++]=u>>>0&65535,n[i++]=u>>>16&65535,n[i++]=d>>>0&65535,n[i++]=d>>>16&65535,n[i++]=f>>>0&65535,n[i++]=f>>>16&65535,n[i++]=p>>>0&65535,n[i++]=p>>>16&65535,n[i++]=m>>>0&65535,n[i++]=m>>>16&65535,n[i++]=h>>>0&65535,n[i++]=h>>>16&65535,n[i++]=g>>>0&65535,n[i++]=g>>>16&65535,n[i++]=_>>>0&65535,n[i++]=_>>>16&65535,n[i++]=v>>>0&65535,n[i++]=v>>>16&65535,n[i++]=y>>>0&65535,n[i++]=y>>>16&65535,n[i++]=b>>>0&65535,n[i]=b>>>16&65535}function pS(e,t,n,r){let i=r,a=t;for(let t=0;t<8;t++){let t=e[a++]>>>0;n[i++]=t>>>0&1,n[i++]=t>>>1&1,n[i++]=t>>>2&1,n[i++]=t>>>3&1,n[i++]=t>>>4&1,n[i++]=t>>>5&1,n[i++]=t>>>6&1,n[i++]=t>>>7&1,n[i++]=t>>>8&1,n[i++]=t>>>9&1,n[i++]=t>>>10&1,n[i++]=t>>>11&1,n[i++]=t>>>12&1,n[i++]=t>>>13&1,n[i++]=t>>>14&1,n[i++]=t>>>15&1,n[i++]=t>>>16&1,n[i++]=t>>>17&1,n[i++]=t>>>18&1,n[i++]=t>>>19&1,n[i++]=t>>>20&1,n[i++]=t>>>21&1,n[i++]=t>>>22&1,n[i++]=t>>>23&1,n[i++]=t>>>24&1,n[i++]=t>>>25&1,n[i++]=t>>>26&1,n[i++]=t>>>27&1,n[i++]=t>>>28&1,n[i++]=t>>>29&1,n[i++]=t>>>30&1,n[i++]=t>>>31&1}}function mS(e,t,n,r){let i=r,a=t;for(let t=0;t<8;t++){let t=e[a++]>>>0,r=e[a++]>>>0;n[i++]=t>>>0&3,n[i++]=t>>>2&3,n[i++]=t>>>4&3,n[i++]=t>>>6&3,n[i++]=t>>>8&3,n[i++]=t>>>10&3,n[i++]=t>>>12&3,n[i++]=t>>>14&3,n[i++]=t>>>16&3,n[i++]=t>>>18&3,n[i++]=t>>>20&3,n[i++]=t>>>22&3,n[i++]=t>>>24&3,n[i++]=t>>>26&3,n[i++]=t>>>28&3,n[i++]=t>>>30&3,n[i++]=r>>>0&3,n[i++]=r>>>2&3,n[i++]=r>>>4&3,n[i++]=r>>>6&3,n[i++]=r>>>8&3,n[i++]=r>>>10&3,n[i++]=r>>>12&3,n[i++]=r>>>14&3,n[i++]=r>>>16&3,n[i++]=r>>>18&3,n[i++]=r>>>20&3,n[i++]=r>>>22&3,n[i++]=r>>>24&3,n[i++]=r>>>26&3,n[i++]=r>>>28&3,n[i++]=r>>>30&3}}function hS(e,t,n,r){let i=r,a=t;for(let t=0;t<8;t++){let t=e[a++]>>>0,r=e[a++]>>>0,o=e[a++]>>>0;n[i++]=t>>>0&7,n[i++]=t>>>3&7,n[i++]=t>>>6&7,n[i++]=t>>>9&7,n[i++]=t>>>12&7,n[i++]=t>>>15&7,n[i++]=t>>>18&7,n[i++]=t>>>21&7,n[i++]=t>>>24&7,n[i++]=t>>>27&7,n[i++]=(t>>>30|(r&1)<<2)&7,n[i++]=r>>>1&7,n[i++]=r>>>4&7,n[i++]=r>>>7&7,n[i++]=r>>>10&7,n[i++]=r>>>13&7,n[i++]=r>>>16&7,n[i++]=r>>>19&7,n[i++]=r>>>22&7,n[i++]=r>>>25&7,n[i++]=r>>>28&7,n[i++]=(r>>>31|(o&3)<<1)&7,n[i++]=o>>>2&7,n[i++]=o>>>5&7,n[i++]=o>>>8&7,n[i++]=o>>>11&7,n[i++]=o>>>14&7,n[i++]=o>>>17&7,n[i++]=o>>>20&7,n[i++]=o>>>23&7,n[i++]=o>>>26&7,n[i++]=o>>>29&7}}function gS(e,t,n,r){let i=r,a=t;for(let t=0;t<8;t++){let t=e[a++]>>>0,r=e[a++]>>>0,o=e[a++]>>>0,s=e[a++]>>>0;n[i++]=t>>>0&15,n[i++]=t>>>4&15,n[i++]=t>>>8&15,n[i++]=t>>>12&15,n[i++]=t>>>16&15,n[i++]=t>>>20&15,n[i++]=t>>>24&15,n[i++]=t>>>28&15,n[i++]=r>>>0&15,n[i++]=r>>>4&15,n[i++]=r>>>8&15,n[i++]=r>>>12&15,n[i++]=r>>>16&15,n[i++]=r>>>20&15,n[i++]=r>>>24&15,n[i++]=r>>>28&15,n[i++]=o>>>0&15,n[i++]=o>>>4&15,n[i++]=o>>>8&15,n[i++]=o>>>12&15,n[i++]=o>>>16&15,n[i++]=o>>>20&15,n[i++]=o>>>24&15,n[i++]=o>>>28&15,n[i++]=s>>>0&15,n[i++]=s>>>4&15,n[i++]=s>>>8&15,n[i++]=s>>>12&15,n[i++]=s>>>16&15,n[i++]=s>>>20&15,n[i++]=s>>>24&15,n[i++]=s>>>28&15}}function _S(e,t,n,r){let i=r,a=t;for(let t=0;t<8;t++){let t=e[a++]>>>0,r=e[a++]>>>0,o=e[a++]>>>0,s=e[a++]>>>0,c=e[a++]>>>0;n[i++]=t>>>0&31,n[i++]=t>>>5&31,n[i++]=t>>>10&31,n[i++]=t>>>15&31,n[i++]=t>>>20&31,n[i++]=t>>>25&31,n[i++]=(t>>>30|(r&7)<<2)&31,n[i++]=r>>>3&31,n[i++]=r>>>8&31,n[i++]=r>>>13&31,n[i++]=r>>>18&31,n[i++]=r>>>23&31,n[i++]=(r>>>28|(o&1)<<4)&31,n[i++]=o>>>1&31,n[i++]=o>>>6&31,n[i++]=o>>>11&31,n[i++]=o>>>16&31,n[i++]=o>>>21&31,n[i++]=o>>>26&31,n[i++]=(o>>>31|(s&15)<<1)&31,n[i++]=s>>>4&31,n[i++]=s>>>9&31,n[i++]=s>>>14&31,n[i++]=s>>>19&31,n[i++]=s>>>24&31,n[i++]=(s>>>29|(c&3)<<3)&31,n[i++]=c>>>2&31,n[i++]=c>>>7&31,n[i++]=c>>>12&31,n[i++]=c>>>17&31,n[i++]=c>>>22&31,n[i++]=c>>>27&31}}function vS(e,t,n,r){let i=r,a=t;for(let t=0;t<8;t++){let t=e[a++]>>>0,r=e[a++]>>>0,o=e[a++]>>>0,s=e[a++]>>>0,c=e[a++]>>>0,l=e[a++]>>>0;n[i++]=t>>>0&63,n[i++]=t>>>6&63,n[i++]=t>>>12&63,n[i++]=t>>>18&63,n[i++]=t>>>24&63,n[i++]=(t>>>30|(r&15)<<2)&63,n[i++]=r>>>4&63,n[i++]=r>>>10&63,n[i++]=r>>>16&63,n[i++]=r>>>22&63,n[i++]=(r>>>28|(o&3)<<4)&63,n[i++]=o>>>2&63,n[i++]=o>>>8&63,n[i++]=o>>>14&63,n[i++]=o>>>20&63,n[i++]=o>>>26&63,n[i++]=s>>>0&63,n[i++]=s>>>6&63,n[i++]=s>>>12&63,n[i++]=s>>>18&63,n[i++]=s>>>24&63,n[i++]=(s>>>30|(c&15)<<2)&63,n[i++]=c>>>4&63,n[i++]=c>>>10&63,n[i++]=c>>>16&63,n[i++]=c>>>22&63,n[i++]=(c>>>28|(l&3)<<4)&63,n[i++]=l>>>2&63,n[i++]=l>>>8&63,n[i++]=l>>>14&63,n[i++]=l>>>20&63,n[i++]=l>>>26&63}}function yS(e,t,n,r){let i=r,a=t;for(let t=0;t<8;t++){let t=e[a++]>>>0,r=e[a++]>>>0,o=e[a++]>>>0,s=e[a++]>>>0,c=e[a++]>>>0,l=e[a++]>>>0,u=e[a++]>>>0;n[i++]=t>>>0&127,n[i++]=t>>>7&127,n[i++]=t>>>14&127,n[i++]=t>>>21&127,n[i++]=(t>>>28|(r&7)<<4)&127,n[i++]=r>>>3&127,n[i++]=r>>>10&127,n[i++]=r>>>17&127,n[i++]=r>>>24&127,n[i++]=(r>>>31|(o&63)<<1)&127,n[i++]=o>>>6&127,n[i++]=o>>>13&127,n[i++]=o>>>20&127,n[i++]=(o>>>27|(s&3)<<5)&127,n[i++]=s>>>2&127,n[i++]=s>>>9&127,n[i++]=s>>>16&127,n[i++]=s>>>23&127,n[i++]=(s>>>30|(c&31)<<2)&127,n[i++]=c>>>5&127,n[i++]=c>>>12&127,n[i++]=c>>>19&127,n[i++]=(c>>>26|(l&1)<<6)&127,n[i++]=l>>>1&127,n[i++]=l>>>8&127,n[i++]=l>>>15&127,n[i++]=l>>>22&127,n[i++]=(l>>>29|(u&15)<<3)&127,n[i++]=u>>>4&127,n[i++]=u>>>11&127,n[i++]=u>>>18&127,n[i++]=u>>>25&127}}function bS(e,t,n,r){let i=r,a=t;for(let t=0;t<8;t++){let t=e[a++]>>>0,r=e[a++]>>>0,o=e[a++]>>>0,s=e[a++]>>>0,c=e[a++]>>>0,l=e[a++]>>>0,u=e[a++]>>>0,d=e[a++]>>>0;n[i++]=t>>>0&255,n[i++]=t>>>8&255,n[i++]=t>>>16&255,n[i++]=t>>>24&255,n[i++]=r>>>0&255,n[i++]=r>>>8&255,n[i++]=r>>>16&255,n[i++]=r>>>24&255,n[i++]=o>>>0&255,n[i++]=o>>>8&255,n[i++]=o>>>16&255,n[i++]=o>>>24&255,n[i++]=s>>>0&255,n[i++]=s>>>8&255,n[i++]=s>>>16&255,n[i++]=s>>>24&255,n[i++]=c>>>0&255,n[i++]=c>>>8&255,n[i++]=c>>>16&255,n[i++]=c>>>24&255,n[i++]=l>>>0&255,n[i++]=l>>>8&255,n[i++]=l>>>16&255,n[i++]=l>>>24&255,n[i++]=u>>>0&255,n[i++]=u>>>8&255,n[i++]=u>>>16&255,n[i++]=u>>>24&255,n[i++]=d>>>0&255,n[i++]=d>>>8&255,n[i++]=d>>>16&255,n[i++]=d>>>24&255}}function xS(e,t,n,r){let i=r,a=t;for(let t=0;t<128;t++){let t=e[a++]>>>0;n[i++]=t&65535,n[i++]=t>>>16&65535}}function SS(e,t,n,r,i){let a=Yx[i]>>>0,o=t,s=0,c=e[o]>>>0,l=r;for(let t=0;t<8;t++){for(let t=0;t<32;t++)if(s+i<=32){let r=c>>>s&a;n[l+t]=r|0,s+=i,s===32&&(s=0,o++,t!==31&&(c=e[o]>>>0))}else{let r=32-s,u=c>>>s;o++,c=e[o]>>>0;let d=i-r,f=-1>>>32-d>>>0,p=(u|(c&f)<>>0)}}var CS=$x(Xx),wS=3*CS/256+CS|0;function TS(){let e=new Uint8Array(wS);return{dataToBePacked:Array(33),dataPointers:new Int32Array(33),byteContainer:e,byteContainerI32:new Int32Array(e.buffer,e.byteOffset,e.byteLength>>>2),exceptionSizes:new Int32Array(33)}}function ES(e=16){if(e<0)throw RangeError(`initialEncodedWordCapacity must be >= 0, got ${e}`);let t=Math.max(16,e|0);return{encodedWords:new Uint32Array(t),decoderWorkspace:TS()}}function DS(e,t){if(t<=e.encodedWords.length)return e.encodedWords;let n=new Uint32Array(Math.max(16,t*2));return e.encodedWords=n,n}function OS(e,t,n,r){r.byteContainer.length>>2;if(i.byteOffset&3)for(let n=0;n>>8&255,i[a+2|0]=r>>>16&255,i[a+3|0]=r>>>24&255}else{let n=r.byteContainerI32;(!n||n.buffer!==i.buffer||n.byteOffset!==i.byteOffset||n.length>>2)),n.set(e.subarray(t,t+a))}let o=n&3;if(o>0){let n=e[t+a|0]|0,r=a<<2;for(let e=0;e>>(e<<3)&255}return i}function kS(e,t,n){let r=e[t++]|0,i=n.dataToBePacked;for(let a=2;a<=32;a=a+1|0){if(!(r>>>a-1&1))continue;if(t>=e.length)throw Error(`FastPFOR decode: truncated exception stream header (bitWidth=${a}, streamWordIndex=${t}, needWords=1, availableWords=${e.length-t}, encodedWords=${e.length})`);let o=e[t++]>>>0,s=Qx(o),c=o*a+31>>>5;if(t+c>e.length)throw Error(`FastPFOR decode: truncated exception stream (bitWidth=${a}, size=${o}, streamWordIndex=${t}, needWords=${c}, availableWords=${e.length-t}, encodedWords=${e.length})`);let l=i[a];(!l||l.length>>5)|0,n.exceptionSizes[a]=o}return t}function AS(e,t,n,r,i){switch(i){case 1:pS(e,t,n,r);break;case 2:mS(e,t,n,r);break;case 3:hS(e,t,n,r);break;case 4:gS(e,t,n,r);break;case 5:_S(e,t,n,r);break;case 6:vS(e,t,n,r);break;case 7:yS(e,t,n,r);break;case 8:bS(e,t,n,r);break;case 16:xS(e,t,n,r);break;default:SS(e,t,n,r,i)}return t+(i<<3)|0}function jS(e,t,n,r){if(n+2>t)throw Error(`FastPFOR decode: byteContainer underflow at block=${r} (need 2 bytes for [bitWidth, exceptionCount], bytePos=${n}, byteSize=${t})`);let i=e[n++],a=e[n++];if(i>32)throw Error(`FastPFOR decode: invalid bitWidth=${i} at block=${r} (expected 0..32). This likely indicates corrupted or truncated input.`);return{bitWidth:i,exceptionCount:a,bytePosIn:n}}function MS(e,t,n,r,i,a){if(n+1>t)throw Error(`FastPFOR decode: exception header underflow at block=${a} (need 1 byte for maxBits, bytePos=${n}, byteSize=${t})`);let o=e[n++];if(o32)throw Error(`FastPFOR decode: invalid maxBits=${o} at block=${a} (bitWidth=${r}, expected ${r}..32)`);let s=o-r|0;if(s<1||s>32)throw Error(`FastPFOR decode: invalid exceptionBitWidth=${s} at block=${a} (bitWidth=${r}, maxBits=${o})`);if(n+i>t)throw Error(`FastPFOR decode: exception positions underflow at block=${a} (need=${i}, have=${t-n})`);return{maxBits:o,exceptionBitWidth:s,bytePosIn:n}}function NS(e,t,n,r,i,a,o,s,c){let{maxBits:l,exceptionBitWidth:u,bytePosIn:d}=MS(i,a,o,n,r,c);if(o=d,u===1){let a=1<h)throw Error(`FastPFOR decode: exception stream overflow for exceptionBitWidth=${u} (ptr=${m}, need ${r}, size=${h}) at block ${c}`);for(let a=0;a0&&(d=NS(i,f,r,o,s,c,d,l,t))}if(u!==r)throw Error(`FastPFOR decode: packed region mismatch (pageStart=${t}, packedStart=${n}, consumedPackedEnd=${u}, expectedPackedEnd=${r}, packedWords=${r-n}, encoded.length=${e.length})`)}function FS(e,t,n,r,i,a){let o=n|0,s=e[o]|0;if(s<=0||o+s>e.length-1)throw Error(`FastPFOR decode: invalid whereMeta=${s} at pageStart=${o} (expected > 0 and pageStart+whereMeta < encoded.length=${e.length})`);let c=o+1|0,l=o+s|0,u=e[l]>>>0,d=u+3>>>2,f=l+1,p=f+d;if(p>=e.length)throw Error(`FastPFOR decode: invalid byteSize=${u} (metaInts=${d}, pageStart=${o}, packedEnd=${l}, byteContainerStart=${f}) causes bitmapPos=${p} out of bounds (encoded.length=${e.length})`);let m=OS(e,f,u,a),h=u,g=kS(e,p,a);return a.dataPointers.fill(0),PS(e,o,c,l,t,r|0,i/256|0,m,h,a),g}function IS(e,t,n,r,i,a){let o=r+Zx(i,256),s=r,c=n;for(;s!==o;){let n=Math.min(CS,o-s);c=FS(e,t,c,s,n,a),s=s+n|0}return c}function LS(e,t,n,r,i,a){if(a===0)return t;let o=0,s=t,c=t+n,l=i,u=i,d=i+a,f=0,p=0;for(;s>>o&255;if(o+=8,s+=o>>>5,o&=31,f|=(t&127)<28)throw Error(`FastPFOR VByte: unterminated value (expected MSB=1 terminator within 5 bytes; shift=${p}, partial=${f}, decoded=${u-l}/${a}, inPos=${s}, inEnd=${c})`)}if(u!==d)throw Error(`FastPFOR VByte: truncated stream (decoded=${u-l}, expected=${a}, consumedWords=${s-t}/${n}, vbyteStart=${t}, vbyteEnd=${c})`);return s}function RS(e,t,n){let r=0,i=0,a=new Uint32Array(t),o=n??TS();if(e.length>0){let t=e[r]|0;if(r=r+1|0,t&255)throw Error(`FastPFOR decode: invalid alignedLength=${t} (expected multiple of 256)`);if(i+t>a.length)throw Error(`FastPFOR decode: output buffer too small (outPos=${i}, alignedLength=${t}, out.length=${a.length})`);r=IS(e,a,r,i,t,o),i=i+t|0}let s=e.length-r|0,c=t-i|0;return LS(e,r,s,a,i,c),a}function zS(e,t,n,r,i){switch(i){case 2:tS(e,t,n,r);return;case 3:nS(e,t,n,r);return;case 4:rS(e,t,n,r);return;case 5:iS(e,t,n,r);return;case 6:aS(e,t,n,r);return;case 7:oS(e,t,n,r);return;case 8:sS(e,t,n,r);return;case 9:cS(e,t,n,r);return;case 10:lS(e,t,n,r);return;case 11:uS(e,t,n,r);return;case 12:dS(e,t,n,r);return;case 16:fS(e,t,n,r);return;case 32:for(let i=0;i<32;i=i+1|0)n[r+i|0]=e[t+i|0]|0;return}let a=Yx[i]>>>0,o=t,s=0,c=e[o]>>>0;for(let t=0;t<32;t++)if(s+i<=32){let l=c>>>s&a;n[r+t]=l|0,s+=i,s===32&&(s=0,o++,t!==31&&(c=e[o]>>>0))}else{let l=32-s,u=c>>>s;o++,c=e[o]>>>0;let d=Yx[i-l]>>>0,f=(u|(c&d)<e.length)throw RangeError(`decodeBigEndianInt32sInto: out of bounds (offset=${t}, byteLength=${n}, bytes.length=${e.length})`);let i=Math.floor(n/4),a=n%4!=0,o=a?i+1:i;if(r.length0){let n=e.byteOffset+t;if(n&3)for(let n=0;n=64)throw Error(`Varint too long`)}return t.set(i),n}function WS(e,t,n){let r=new Float64Array(n);for(let i=0;i>4,i<128||(i=t[n.get()],n.increment(),r|=(i&127)<<3,i<128)||(i=t[n.get()],n.increment(),r|=(i&127)<<10,i<128)||(i=t[n.get()],n.increment(),r|=(i&127)<<17,i<128)||(i=t[n.get()],n.increment(),r|=(i&127)<<24,i<128)||(i=t[n.get()],n.increment(),r|=(i&1)<<31,i<128))return r*4294967296+(e>>>0);throw Error(`Expected varint not more than 10 bytes`)}function qS(e,t,n,r){return JS(e,t,n,r,ES(n>>>2))}function JS(e,t,n,r,i){let a=r.get();if(n&3)throw Error(`FastPFOR: invalid encodedByteLength=${n} at offset=${a} (encodedBytes.length=${e.length}; expected a multiple of 4 bytes for an int32 big-endian word stream)`);let o=n>>>2,s=DS(i,o);BS(e,a,n,s);let c=RS(s.subarray(0,o),t,i.decoderWorkspace);return r.add(n),c}function YS(e){return e>>>1^-(e&1)}function XS(e){return e>>1n^-(e&1n)}function ZS(e){return e%2==1?(e+1)/-2:e/2}function QS(e){let t=new Int32Array(e.length);for(let n=0;n=4)for(;r=4)for(;r=4)for(;n=4)for(let r=e[0];n=4)for(;r=4)for(;c>>0;for(let n=1;n>>0;return t}function xC(e){let t=new BigUint64Array(e.length);t[0]=BigInt.asUintN(64,XS(e[0]));for(let n=1;n>>0,t[1]=YS(e[1])>>>0;for(let n=2;n>>0,t[n+1]=t[n-1]+YS(e[n+1])>>>0;return t}function CC(e,t,n,r){let i=pC(e,t,n,r);return new Uint32Array(i)}function wC(e){return e[1]}function TC(e){return YS(e[1])}function EC(e){if(e.length===2){let t=YS(e[1]);return[t,t]}return[YS(e[2]),YS(e[3])]}function DC(e){return e[1]}function OC(e){return XS(e[1])}function kC(e){if(e.length===2){let t=XS(e[1]);return[t,t]}return[XS(e[2]),XS(e[3])]}var AC;(function(e){e.PRESENT=`PRESENT`,e.DATA=`DATA`,e.OFFSET=`OFFSET`,e.LENGTH=`LENGTH`})(AC||={});var jC;(function(e){e.NONE=`NONE`,e.SINGLE=`SINGLE`,e.SHARED=`SHARED`,e.VERTEX=`VERTEX`,e.MORTON=`MORTON`,e.FSST=`FSST`})(jC||={});var MC;(function(e){e.VERTEX=`VERTEX`,e.INDEX=`INDEX`,e.STRING=`STRING`,e.KEY=`KEY`})(MC||={});var NC;(function(e){e.VAR_BINARY=`VAR_BINARY`,e.GEOMETRIES=`GEOMETRIES`,e.PARTS=`PARTS`,e.RINGS=`RINGS`,e.TRIANGLES=`TRIANGLES`,e.SYMBOL=`SYMBOL`,e.DICTIONARY=`DICTIONARY`})(NC||={});var PC=[AC.PRESENT,AC.DATA,AC.OFFSET,AC.LENGTH],FC=[Kx.NONE,Kx.DELTA,Kx.COMPONENTWISE_DELTA,Kx.RLE,Kx.MORTON],IC=[qx.NONE,qx.FAST_PFOR,qx.VARINT],LC=[jC.NONE,jC.SINGLE,jC.SHARED,jC.VERTEX,jC.MORTON,jC.FSST],RC=[MC.VERTEX,MC.INDEX,MC.STRING,MC.KEY],zC=[NC.VAR_BINARY,NC.GEOMETRIES,NC.PARTS,NC.RINGS,NC.TRIANGLES,NC.SYMBOL,NC.DICTIONARY];function BC(e,t){let n=UC(e,t);return n.logicalLevelTechnique1===Kx.MORTON?VC(n,e,t):(Kx.RLE===n.logicalLevelTechnique1||Kx.RLE===n.logicalLevelTechnique2)&&qx.NONE!==n.physicalLevelTechnique?HC(n,e,t):n}function VC(e,t,n){let r=VS(t,n,2);return{physicalStreamType:e.physicalStreamType,logicalStreamType:e.logicalStreamType,logicalLevelTechnique1:e.logicalLevelTechnique1,logicalLevelTechnique2:e.logicalLevelTechnique2,physicalLevelTechnique:e.physicalLevelTechnique,numValues:e.numValues,byteLength:e.byteLength,decompressedCount:e.decompressedCount,numBits:r[0],coordinateShift:r[1]}}function HC(e,t,n){let r=VS(t,n,2);return{physicalStreamType:e.physicalStreamType,logicalStreamType:e.logicalStreamType,logicalLevelTechnique1:e.logicalLevelTechnique1,logicalLevelTechnique2:e.logicalLevelTechnique2,physicalLevelTechnique:e.physicalLevelTechnique,numValues:e.numValues,byteLength:e.byteLength,decompressedCount:r[1],runs:r[0],numRleValues:r[1]}}function UC(e,t){let n=e[t.get()],r=PC[n>>4],i={};switch(r){case AC.DATA:i={dictionaryType:LC[n&15]};break;case AC.OFFSET:i={offsetType:RC[n&15]};break;case AC.LENGTH:i={lengthType:zC[n&15]}}t.increment();let a=e[t.get()],o=FC[a>>5],s=FC[a>>2&7],c=IC[a&3];t.increment();let l=VS(e,t,2),u=l[0],d=l[1];return{physicalStreamType:r,logicalStreamType:i,logicalLevelTechnique1:o,logicalLevelTechnique2:s,physicalLevelTechnique:c,numValues:u,byteLength:d,decompressedCount:u}}var WC;(function(e){e[e.FLAT=0]=`FLAT`,e[e.CONST=1]=`CONST`,e[e.SEQUENCE=2]=`SEQUENCE`,e[e.DICTIONARY=3]=`DICTIONARY`,e[e.FSST_DICTIONARY=4]=`FSST_DICTIONARY`})(WC||={});var GC=class{constructor(e,t){this.values=e,this._size=t}get(e){let t=Math.floor(e/8),n=e%8;return(this.values[t]>>n&1)==1}set(e,t){let n=Math.floor(e/8),r=e%8;this.values[n]=this.values[n]|+!!t<>n&1}size(){return this._size}getBuffer(){return this.values}};function KC(e,t,n){if(!t)return e;let r=t.size(),i=e.constructor,a=new i(r),o=0;for(let i=0;i=o);){let n=e[r.increment()];if(n<=127){let o=n+3,s=e[r.increment()],c=Math.min(a+o,t);i.fill(s,a,c),a=c}else{let o=256-n;for(let n=0;n=12?tw.decode(e.subarray(t,n)):rw(e,t,n)}function rw(e,t,n){let r=``,i=t;for(;i239?4:t>223?3:t>191?2:1;if(i+o>n)break;let s,c,l;o===1?t<128&&(a=t):o===2?(s=e[i+1],(s&192)==128&&(a=(t&31)<<6|s&63,a<=127&&(a=null))):o===3?(s=e[i+1],c=e[i+2],(s&192)==128&&(c&192)==128&&(a=(t&15)<<12|(s&63)<<6|c&63,(a<=2047||a>=55296&&a<=57343)&&(a=null))):o===4&&(s=e[i+1],c=e[i+2],l=e[i+3],(s&192)==128&&(c&192)==128&&(l&192)==128&&(a=(t&15)<<18|(s&63)<<12|(c&63)<<6|l&63,(a<=65535||a>=1114112)&&(a=null))),a===null?(a=65533,o=1):a>65535&&(a-=65536,r+=String.fromCharCode(a>>>10&1023|55296),a=56320|a&1023),r+=String.fromCharCode(a),i+=o}return r}function iw(e,t,n,r,i){return yw(sw(e,t,n),n,r,i)}function aw(e,t,n,r,i){return bw(sw(e,t,n),n,r,i)}function ow(e,t,n){return ww(sw(e,t,n),n)}function sw(e,t,n){let r=n.physicalLevelTechnique;switch(r){case qx.FAST_PFOR:return qS(e,n.numValues,n.byteLength,t);case qx.VARINT:return VS(e,t,n.numValues);case qx.NONE:return $C(e,t,n.numValues);default:throw Error(`Specified physicalLevelTechnique ${r} is not supported (yet).`)}}function cw(e,t,n){let r=n.physicalLevelTechnique;switch(r){case qx.VARINT:return HS(e,t,n.numValues);case qx.NONE:return ew(e,t,n.numValues);default:throw Error(`Specified physicalLevelTechnique ${r} is not supported (yet).`)}}function lw(e,t,n){let r=sw(e,t,n);return r.length===1?YS(r[0]):TC(r)}function uw(e,t,n){let r=sw(e,t,n);return r.length===1?n.logicalLevelTechnique1===Kx.DELTA?YS(r[0]):r[0]:wC(r)}function dw(e,t,n){return EC(sw(e,t,n))}function fw(e,t,n){return kC(HS(e,t,n.numValues))}function pw(e,t,n,r){return xw(cw(e,t,n),n,r)}function mw(e,t,n,r){return Sw(cw(e,t,n),n,r)}function hw(e,t,n,r){let i=gw(e,t,n,!1);return r?KC(i,r,0):i}function gw(e,t,n,r){if(n.physicalLevelTechnique===qx.VARINT)return Cw(WS(e,t,n.numValues),n,r);let i=cw(e,t,n),a=r?xw(i,n):Sw(i,n);return Float64Array.from(a,Number)}function _w(e,t,n){let r=cw(e,t,n);return r.length===1?XS(r[0]):OC(r)}function vw(e,t,n){let r=cw(e,t,n);return r.length===1?n.logicalLevelTechnique1===Kx.DELTA?XS(r[0]):r[0]:DC(r)}function yw(e,t,n,r){let i;switch(t.logicalLevelTechnique1){case Kx.DELTA:if(t.logicalLevelTechnique2===Kx.RLE){let n=t;if(!r)return vC(e,n.runs,n.numRleValues);e=tC(e,n.runs,n.numRleValues),i=iC(e)}else i=iC(e);break;case Kx.RLE:i=sC(e,t.runs,t.numRleValues);break;case Kx.MORTON:uC(e),i=new Int32Array(e);break;case Kx.COMPONENTWISE_DELTA:if(n&&!r)return pC(e,n.scale,n.min,n.max);i=fC(e);break;case Kx.NONE:i=QS(e);break;default:throw Error(`The specified Logical level technique is not supported: ${t.logicalLevelTechnique1}`)}return r?KC(i,r,0):i}function bw(e,t,n,r){let i;switch(t.logicalLevelTechnique1){case Kx.DELTA:if(t.logicalLevelTechnique2===Kx.RLE){let n=t;i=bC(tC(e,n.runs,n.numRleValues))}else i=bC(e);break;case Kx.RLE:i=tC(e,t.runs,t.numRleValues);break;case Kx.MORTON:uC(e),i=e;break;case Kx.COMPONENTWISE_DELTA:i=n&&!r?CC(e,n.scale,n.min,n.max):SC(e);break;case Kx.NONE:i=e;break;default:throw Error(`The specified Logical level technique is not supported: ${t.logicalLevelTechnique1}`)}return r?KC(i,r,0):i}function xw(e,t,n){let r;switch(t.logicalLevelTechnique1){case Kx.DELTA:if(t.logicalLevelTechnique2===Kx.RLE){let i=t;if(!n)return yC(e,i.runs,i.numRleValues);e=nC(e,i.runs,i.numRleValues),r=aC(e)}else r=aC(e);break;case Kx.RLE:r=cC(e,t.runs,t.numRleValues);break;case Kx.NONE:r=$S(e);break;default:throw Error(`The specified Logical level technique is not supported: ${t.logicalLevelTechnique1}`)}return n?KC(r,n,0n):r}function Sw(e,t,n){let r;switch(t.logicalLevelTechnique1){case Kx.DELTA:if(t.logicalLevelTechnique2===Kx.RLE){let n=t;r=xC(nC(e,n.runs,n.numRleValues))}else r=xC(e);break;case Kx.RLE:r=nC(e,t.runs,t.numRleValues);break;case Kx.NONE:r=e;break;default:throw Error(`The specified Logical level technique is not supported: ${t.logicalLevelTechnique1}`)}return n?KC(r,n,0n):r}function Cw(e,t,n){switch(t.logicalLevelTechnique1){case Kx.DELTA:if(t.logicalLevelTechnique2===Kx.RLE){let n=t;e=rC(e,n.runs,n.numRleValues)}return oC(e),e;case Kx.RLE:return Dw(e,t,n);case Kx.NONE:return n&&eC(e),e;default:throw Error(`The specified Logical level technique is not supported: ${t.logicalLevelTechnique1}`)}}function ww(e,t){if(t.logicalLevelTechnique1===Kx.DELTA&&t.logicalLevelTechnique2===Kx.NONE)return hC(e);if(t.logicalLevelTechnique1===Kx.RLE&&t.logicalLevelTechnique2===Kx.NONE){let n=t;return _C(e,n.runs,n.numRleValues)}if(t.logicalLevelTechnique1===Kx.NONE&&t.logicalLevelTechnique2===Kx.NONE){dC(e);let n=new Uint32Array(t.numValues+1);return n[0]=0,n.set(e,1),n}if(t.logicalLevelTechnique1===Kx.DELTA&&t.logicalLevelTechnique2===Kx.RLE){let n=t,r=gC(e,n.runs,n.numRleValues);return uC(r),new Uint32Array(r)}throw Error(`Only delta encoding is supported for transforming length to offset streams yet.`)}function Tw(e,t,n,r,i=`int32`){let a=e.logicalLevelTechnique1;if(a===Kx.RLE)return e.runs===1?WC.CONST:WC.FLAT;if(a!==Kx.DELTA||e.logicalLevelTechnique2!==Kx.RLE)return e.numValues===1?WC.CONST:WC.FLAT;let o=t instanceof GC?t.size():t,s=e;if(s.numRleValues!==o)return WC.FLAT;if(s.runs===1)return WC.SEQUENCE;if(s.runs!==2)return e.numValues===1?WC.CONST:WC.FLAT;let c=r.get();if(e.physicalLevelTechnique===qx.VARINT)return Ew(n,r,i)?WC.SEQUENCE:e.numValues===1?WC.CONST:WC.FLAT;let l=r.get(),u=new Int32Array(n.buffer,n.byteOffset+l,4);return r.set(c),u[2]===2&&u[3]===2?WC.SEQUENCE:e.numValues===1?WC.CONST:WC.FLAT}function Ew(e,t,n){let r=new Gx(t.get());if(n===`int64`){let t=HS(e,r,4);return t[2]===2n&&t[3]===2n}let i=VS(e,r,4);return i[2]===2&&i[3]===2}function Dw(e,t,n){return n?lC(e,t.runs,t.numRleValues):rC(e,t.runs,t.numRleValues)}var Ow=class extends Px{getValueFromBuffer(e){return this.dataBuffer[e]}},kw=class extends Lx{constructor(e,t,n,r,i){super(e,i?BigInt64Array.of(t):BigUint64Array.of(t),n,r)}getValueFromBuffer(e){return this.dataBuffer[0]+BigInt(e)*this.delta}};function Aw(e,t,n){return{x:jw(e,t)-n,y:jw(e>>1,t)-n}}function jw(e,t){let n=0;for(let r=0;r>r;return n}var Mw;(function(e){e[e.POINT=0]=`POINT`,e[e.LINESTRING=1]=`LINESTRING`,e[e.POLYGON=2]=`POLYGON`,e[e.MULTIPOINT=3]=`MULTIPOINT`,e[e.MULTILINESTRING=4]=`MULTILINESTRING`,e[e.MULTIPOLYGON=5]=`MULTIPOLYGON`})(Mw||={});var Nw;(function(e){e[e.POINT=0]=`POINT`,e[e.LINESTRING=1]=`LINESTRING`,e[e.POLYGON=2]=`POLYGON`})(Nw||={});var Pw;(function(e){e[e.MORTON=0]=`MORTON`,e[e.VEC_2=1]=`VEC_2`,e[e.VEC_3=2]=`VEC_3`})(Pw||={});function Fw(e){let t=Array(e.numGeometries),n=1,r=1,i=1,a=0,o=0,s=0,c=e.mortonSettings,l=e.topologyVector,u=l.geometryOffsets,d=l.partOffsets,f=l.ringOffsets,p=e.vertexOffsets,m=!p||p.length===0,h=e.containsPolygonGeometry(),g=e.vertexBuffer;for(let l=0;l[e]),n+=l,r+=l}break;case Mw.LINESTRING:{let l;h?(l=f[r]-f[r-1],r++):l=d[n]-d[n-1],n++;let _;m?(_=Lw(g,o,l,!1),o+=l*2):(_=Iw(e.vertexBufferType,g,p,s,l,!1,c),s+=l),t[a++]=[_],u&&i++}break;case Mw.POLYGON:{let l=d[n]-d[n-1];n++;let h=Array(l-1),_,v=f[r]-f[r-1];if(r++,m){_=Lw(g,o,v,!0),o+=v*2;for(let e=0;en?t[a++]:1);return r}function eT(e,t,n,r){let i=new Uint32Array(t[t.length-1]+1),a=0;i[0]=a;let o=1,s=0;for(let c=0;c0;)i[a++]=e[o++]}}return i}var dT=class extends oT{constructor(e,t,n,r,i,a,o,s){super(e,n,r,o??t.length),this.indexBuffer=t,this.symbolOffsetBuffer=i,this.symbolTableBuffer=a,this.sharedDictionaryCache=s}getValueFromBuffer(e){this.decodedDictionary??(this.decodedDictionary=this.sharedDictionaryCache?.decodedDictionary,this.decodedDictionary??(this.decodedDictionary=this.decodeDictionary(),this.sharedDictionaryCache&&(this.sharedDictionaryCache.decodedDictionary=this.decodedDictionary)));let t=this.indexBuffer[e],n=this.offsetBuffer[t],r=this.offsetBuffer[t+1];return nw(this.decodedDictionary,n,r)}decodeDictionary(){return this.symbolLengthBuffer??=this.offsetToLengthBuffer(this.symbolOffsetBuffer),uT(this.symbolTableBuffer,this.symbolLengthBuffer,this.dataBuffer)}offsetToLengthBuffer(e){let t=new Uint32Array(e.length-1),n=e[0];for(let r=1;r1&&!c.nullable||l===1&&c.nullable)throw Error(`The number of streams for the child field ${c.name} does not match its nullability. nullibilty: ${c.nullable}, numStreams: ${l}`);let m;if(c.nullable){let n=BC(e,t);m=new GC(YC(e,n.numValues,n.byteLength,t),n.numValues)}let h=aw(e,t,BC(e,t),void 0,m);if(s){if(!o)throw Error(`Incomplete shared FSST dictionary for column "${p}"`);u[f++]=new dT(p,h,i,a,o,s,m,d)}else u[f++]=new cT(p,h,i,a,m)}return u}var _T=class extends Nx{constructor(e,t,n){super(e,new Uint8Array,n??t.length),this.values=t}getValueFromBuffer(e){return this.values[e]}},vT;(function(e){e[e.STRING=1]=`STRING`,e[e.INT32=2]=`INT32`,e[e.UINT32=4]=`UINT32`,e[e.INT64=8]=`INT64`,e[e.UINT64=16]=`UINT64`,e[e.FLOAT=32]=`FLOAT`,e[e.DOUBLE=64]=`DOUBLE`,e[e.PRESENCE=128]=`PRESENCE`})(vT||={});var yT;(function(e){e[e.FALSE=0]=`FALSE`,e[e.TRUE=1]=`TRUE`,e[e.START_MAP=2]=`START_MAP`,e[e.START_LIST=3]=`START_LIST`,e[e.COUNT=4]=`COUNT`})(yT||={});function bT(e,t,n,r){let i=xT(n);if(r===0)return i.map(e=>new _T(e,[]));let a=ST(e,t,r),o=(a.presentStream?a.presentCount:a.lengthStream.length)/i.length,s=[],c=0,l=0;for(let e=0;ee.name+(t.name??``))}function ST(e,t,n){let r=e[t.get()];t.add(1);let i=aw(e,t,BC(e,t)),a=n-1,o=[];r&vT.STRING&&(a-=CT(e,t,o)),a-=wT(e,t,r,o),a-=TT(e,t,r,o);let s,c=0;if(r&vT.PRESENCE){let n=ET(e,t);s=n.value,c=n.count,a--}let l=new Uint32Array;if(a>0&&(l=aw(e,t,BC(e,t)),a--),a!==0)throw Error(`Unexpected number of remaining streams while decoding map column: ${a}`);return{lengthStream:i,dictionary:o,presentStream:s,presentCount:c,flattenedValues:l}}function CT(e,t,n){let r=e[t.get()];t.add(1);let i=fT(``,e,t,r);if(i)for(let e=0;ea.length)throw Error(`Merged map counts underflow while decoding child streams`);let p=Array(n),m=r,h=i;for(let e=0;eo.length)throw Error(`Map value stream underflow while decoding feature payload`);let n=OT(o,h,t,c);p[e]=n.value,h=n.nextIndex}let g=0;for(let e=r;e=n)throw Error(`Unexpected end of map value stream`);let i=e[t];if(i===yT.FALSE)return{value:!1,nextIndex:t+1};if(i===yT.TRUE)return{value:!0,nextIndex:t+1};if(i===yT.START_MAP){let i=jT(e,t,n);return{value:kT(e,t+2,i,r).value,nextIndex:i}}if(i===yT.START_LIST){let i=jT(e,t,n),a=[],o=t+2;for(;o=n)throw Error(`Missing length for nested map/list payload`);let r=e[t+1];if(r<2)throw Error(`Invalid nested payload length: ${r}`);let i=t+r;if(i>n)throw Error(`Nested payload exceeds containing payload bounds`);return i}function MT(e,t){let n=e-yT.COUNT;if(n<0||n>=t.length)throw Error(`Scalar dictionary index out of range: ${e}`);return t[n]}function NT(e,t){for(let n of t)e.push(n)}function PT(e,t,n,r,i,a){return n.type===`scalarType`?a&&!a.has(n.name)?(JC(r,e,t),null):FT(r,e,t,i,n.scalarType,n):n.complexType?.physicalType===Ux.MAP?bT(e,t,n,r):r===0?null:gT(e,t,n,a)}function FT(e,t,n,r,i,a){let o;if(e===0)return null;if(a.nullable){let e=BC(t,n),r=e.numValues,i=n.get(),a=YC(t,r,e.byteLength,n);n.set(i+e.byteLength),o=new GC(a,e.numValues)}let s=o??r;switch(i.physicalType){case Hx.UINT_32:case Hx.INT_32:return BT(t,n,a,i,s);case Hx.STRING:{let r=a.nullable?e-1:e;return fT(a.name,t,n,r,o)??null}case Hx.BOOLEAN:return IT(t,n,a,r,s);case Hx.UINT_64:case Hx.INT_64:return zT(t,n,a,s,i);case Hx.FLOAT:return LT(t,n,a,s);case Hx.DOUBLE:return RT(t,n,a,s);default:throw Error(`The specified data type for the field is currently not supported: ${i}`)}}function IT(e,t,n,r,i){let a=BC(e,t),o=a.numValues,s=t.get(),c=VT(i)?i:void 0,l=YC(e,o,a.byteLength,t,c);t.set(s+a.byteLength);let u=new GC(l,o);return new rT(n.name,u,i)}function LT(e,t,n,r){let i=BC(e,t),a=VT(r)?r:void 0,o=ZC(e,t,i.numValues,a);return new iT(n.name,o,r)}function RT(e,t,n,r){let i=BC(e,t),a=VT(r)?r:void 0,o=QC(e,t,i.numValues,a);return new Ix(n.name,o,r)}function zT(e,t,n,r,i){let a=BC(e,t),o=Tw(a,r,e,t,`int64`),s=i.physicalType===Hx.INT_64;if(o===WC.FLAT){let i=VT(r)?r:void 0,o=s?pw(e,t,a,i):mw(e,t,a,i);return new Ow(n.name,o,r)}if(o===WC.SEQUENCE){let r=fw(e,t,a);return new kw(n.name,r[0],r[1],a.numRleValues,s)}let c=s?_w(e,t,a):vw(e,t,a);return new aT(n.name,c,r,s)}function BT(e,t,n,r,i){let a=BC(e,t),o=Tw(a,i,e,t),s=r.physicalType===Hx.INT_32;if(o===WC.FLAT){let r=VT(i)?i:void 0,o=s?iw(e,t,a,void 0,r):aw(e,t,a,void 0,r);return new Fx(n.name,o,i)}if(o===WC.SEQUENCE){let r=dw(e,t,a);return new Rx(n.name,r[0],r[1],a.numRleValues,s)}let c=s?lw(e,t,a):uw(e,t,a);return new zx(n.name,c,i,s)}function VT(e){return e instanceof GC}var HT={ID:0,ID_NULLABLE:1,ID_LONG:2,GEOMETRY:4,SCALAR_BASE:10,STRUCT:30,MAP:31};function UT(e){switch(e){case HT.ID:case HT.ID|HT.ID_NULLABLE:case HT.ID|HT.ID_LONG:case HT.ID|HT.ID_LONG|HT.ID_NULLABLE:return{nullable:(e&HT.ID_NULLABLE)!==0,columnScope:Vx.FEATURE,type:`scalarType`,scalarType:{longID:(e&HT.ID_LONG)!==0,type:`logicalType`,logicalType:Wx.ID}};case HT.GEOMETRY:return{nullable:!1,columnScope:Vx.FEATURE,type:`complexType`,complexType:{type:`physicalType`,physicalType:Ux.GEOMETRY,children:[]}};case HT.STRUCT:return{nullable:!1,columnScope:Vx.FEATURE,type:`complexType`,complexType:{type:`physicalType`,physicalType:Ux.STRUCT,children:[]}};case HT.MAP:return{nullable:!0,columnScope:Vx.FEATURE,type:`complexType`,complexType:{type:`physicalType`,physicalType:Ux.MAP,children:[]}};default:return YT(e)}}function WT(e){return e>=HT.SCALAR_BASE}function GT(e){return e===HT.STRUCT||e===HT.MAP}function KT(e){if(e.type===`scalarType`){let t=e.scalarType;if(t.type===`physicalType`)switch(t.physicalType){case Hx.BOOLEAN:case Hx.INT_8:case Hx.UINT_8:case Hx.INT_32:case Hx.UINT_32:case Hx.INT_64:case Hx.UINT_64:case Hx.FLOAT:case Hx.DOUBLE:return!1;case Hx.STRING:return!0;default:return!1}if(t.type===`logicalType`)return!1}else if(e.type===`complexType`){let t=e.complexType;if(t.type===`physicalType`)switch(t.physicalType){case Ux.GEOMETRY:case Ux.STRUCT:case Ux.MAP:return!0;default:return!1}}return console.warn(`Unexpected column type in hasStreamCount`,e),!1}function qT(e){return e.type===`scalarType`&&e.scalarType?.type===`logicalType`&&e.scalarType.logicalType===Wx.ID}function JT(e){return e.type===`complexType`&&e.complexType?.type===`physicalType`&&e.complexType.physicalType===Ux.GEOMETRY}function YT(e){let t;switch(e){case 10:case 11:t=Hx.BOOLEAN;break;case 12:case 13:t=Hx.INT_8;break;case 14:case 15:t=Hx.UINT_8;break;case 16:case 17:t=Hx.INT_32;break;case 18:case 19:t=Hx.UINT_32;break;case 20:case 21:t=Hx.INT_64;break;case 22:case 23:t=Hx.UINT_64;break;case 24:case 25:t=Hx.FLOAT;break;case 26:case 27:t=Hx.DOUBLE;break;case 28:case 29:t=Hx.STRING;break;default:return null}return{nullable:!!(e&1),columnScope:Vx.FEATURE,type:`scalarType`,scalarType:{longID:!1,type:`physicalType`,physicalType:t}}}var XT=new TextDecoder,ZT=`0-3(ID), 4(GEOMETRY), 10-29(scalars), 30(STRUCT), 31(MAP)`;function QT(e,t){let n=VS(e,t,1)[0];if(n===0)return``;let r=t.get(),i=r+n,a=e.subarray(r,i);return t.add(n),XT.decode(a)}function $T(e){let t=e.name,n=e.nullable;return e.type===`scalarType`?{type:`scalarField`,scalarField:e.scalarType,name:t,nullable:n}:{type:`complexField`,complexField:e.complexType,name:t,nullable:n}}function eE(e,t){let n=VS(e,t,1)[0]>>>0,r=n>=HT.SCALAR_BASE?UT(n):null;if(!r)throw Error(`Unsupported field type code ${n}. Supported: 10-29(scalars), 30(STRUCT), 31(MAP)`);let i={...r,name:QT(e,t)};if(i.type===`complexType`&>(n)){let n=i.complexType,r=VS(e,t,1)[0]>>>0;n.children=Array(r);for(let i=0;i>>0,r=UT(n);if(!r)throw Error(`Unsupported column type code ${n}. Supported: ${ZT}`);let i;if(WT(n))i=QT(e,t);else if(n>>0,r=a.complexType;r.children=Array(n);for(let i=0;i>>0,a=VS(e,t,1)[0]>>>0;r.columns=Array(a);for(let n=0;n>>0,o=r.get()+a;if(o>e.length)throw Error(`Block overruns tile: ${o} > ${e.length}`);let s=VS(e,r,1)[0]>>>0;if(s!==1&&s!==2){r.set(o);continue}let[c,l]=nE(e,r),u=c.featureTables[0],d=null,f=null,p=[],m=0;for(let i of u.columns){let a=i.name;if(qT(i)){let t=null;if(i.nullable){let n=BC(e,r),i=r.get(),a=YC(e,n.numValues,n.byteLength,r);r.set(i+n.byteLength),t=new GC(a,n.numValues)}let o=BC(e,r);m=t?t.size():o.decompressedCount,d=iE(e,i,r,a,o,t??m,n)}else if(JT(i)){let n=VS(e,r,1)[0];if(m===0){let t=r.get();m=BC(e,r).decompressedCount,r.set(t)}t&&(t.scale=t.extent/l),f=Qw(e,n,r,m,t)}else{let t=KT(i)?VS(e,r,1)[0]:1;if(t===0)continue;let n=PT(e,r,i,t,m,void 0);if(n){if(Array.isArray(n))for(let e of n)p.push(e);else p.push(n)}}}let h=new Bx(u.name,f,d,p,l);i.push(h),r.set(o)}return i}function iE(e,t,n,r,i,a,o=!1){let s=t.scalarType?.longID?Hx.UINT_64:Hx.UINT_32,c=typeof a==`number`?void 0:a,l=Tw(i,a,e,n,s===Hx.UINT_64?`int64`:`int32`);if(s===Hx.UINT_32)switch(l){case WC.FLAT:return new Fx(r,aw(e,n,i,void 0,c),a);case WC.SEQUENCE:{let t=dw(e,n,i);return new Rx(r,t[0],t[1],i.numRleValues,!1)}case WC.CONST:return new zx(r,uw(e,n,i),a,!1)}switch(l){case WC.FLAT:return o?new Ix(r,hw(e,n,i,c),a):new Ow(r,mw(e,n,i,c),a);case WC.SEQUENCE:{let t=fw(e,n,i);return new kw(r,t[0],t[1],i.numRleValues,!1)}case WC.CONST:return new aT(r,vw(e,n,i),a,!1)}throw Error(`Vector type not supported for id column.`)}var aE=$x(Xx);aE/32*4,3*aE/256+aE|0;var oE=class{constructor(e,t){switch(this._featureData=e,this.properties=this._featureData.properties||{},this._featureData.geometry?.type){case Mw.POINT:case Mw.MULTIPOINT:this.type=1;break;case Mw.LINESTRING:case Mw.MULTILINESTRING:this.type=2;break;case Mw.POLYGON:case Mw.MULTIPOLYGON:this.type=3;break;default:this.type=0}this.extent=t,this.id=Number(this._featureData.id)}loadGeometry(){let e=[];for(let t of this._featureData.geometry.coordinates){let n=[];for(let e of t)n.push(new k(e.x,e.y));e.push(n)}return e}},sE=class{constructor(e){this.features=[],this.featureTable=e,this.name=e.name,this.extent=e.extent,this.version=2,this.features=e.getFeatures(),this.length=this.features.length}feature(e){return new oE(this.features[e],this.extent)}},cE=class{constructor(e){this.layers={};let t=rE(new Uint8Array(e));this.layers=t.reduce((e,t)=>({...e,[t.name]:new sE(t)}),{})}};G(`FeatureIndex`,class{constructor(e,t){this.tileID=e,this.x=e.canonical.x,this.y=e.canonical.y,this.z=e.canonical.z,this.grid=new Sl(L,16,0),this.grid3D=new Sl(L,16,0),this.featureIndexArray=new Vu,this.promoteId=t}insert(e,t,n,r,i,a){let o=this.featureIndexArray.length;this.featureIndexArray.emplaceBack(n,r,i);let s=a?this.grid3D:this.grid;for(let e of t){let t=[1/0,1/0,-1/0,-1/0];for(let n of e)t[0]=Math.min(t[0],n.x),t[1]=Math.min(t[1],n.y),t[2]=Math.max(t[2],n.x),t[3]=Math.max(t[3],n.y);t[0]<8192&&t[1]<8192&&t[2]>=0&&t[3]>=0&&s.insert(o,t[0],t[1],t[2],t[3])}}loadVTLayers(){if(!this.vtLayers){switch(this.encoding){case`mlt`:this.vtLayers=new cE(this.rawTileData).layers;break;default:this.vtLayers=new Rm(new S_(this.rawTileData)).layers}this.sourceLayerCoder=new jx(this.vtLayers?Object.keys(this.vtLayers).sort():[Ax])}return this.vtLayers}query(e,t,n,r){this.loadVTLayers();let i=e.params,a=L/e.tileSize/e.scale,o=oc(i.filter,`queryRenderedFeatures filter`,i.globalState),s=e.queryGeometry,c=e.queryPadding*a,l=km.fromPoints(s),u=this.grid.query(l.minX-c,l.minY-c,l.maxX+c,l.maxY+c),d=km.fromPoints(e.cameraQueryGeometry).expandBy(c),f=this.grid3D.query(d.minX,d.minY,d.maxX,d.maxY,(t,n,r,i)=>cf(e.cameraQueryGeometry,t-c,n-c,r+c,i+c));for(let e of f)u.push(e);u.sort(dE);let p={},m;for(let c of u){if(c===m)continue;m=c;let l=this.featureIndexArray.get(c),u=null;this.loadMatchingFeature(p,l.bucketIndex,l.sourceLayerIndex,l.featureIndex,o,i.layers,i.availableImages,t,n,r,(t,n,r)=>(u||=Gd(t),n.queryIntersectsFeature({queryGeometry:s,feature:t,featureState:r,geometry:u,zoom:this.z,transform:e.transform,pixelsToTileUnits:a,pixelPosMatrix:e.pixelPosMatrix,unwrappedTileID:this.tileID.toUnwrapped(),getElevation:e.getElevation})))}return p}loadMatchingFeature(e,t,n,r,i,a,o,s,c,l,u){let d=this.bucketLayerIDs[t];if(a&&!d.some(e=>a.has(e)))return;let f=this.sourceLayerCoder.decode(n),p=this.vtLayers[f].feature(r);if(i.needGeometry){let e=Kd(p,!0);if(!i.filter(new jl(this.tileID.overscaledZ),e,this.tileID.canonical))return}else if(!i.filter(new jl(this.tileID.overscaledZ),p))return;let m=this.getId(p,f);for(let t of d){if(a&&!a.has(t))continue;let n=s[t];if(!n)continue;let i={};m&&l&&(i=l.getState(n.sourceLayer||`_geojsonTileLayer`,m));let d=z({},c[t]);d.paint=uE(d.paint,n.paint,p,i,o),d.layout=uE(d.layout,n.layout,p,i,o);let f=!u||u(p,n,i);if(!f)continue;let h=new Mx(p,this.z,this.x,this.y,m);h.layer=d;let g=e[t];g===void 0&&(g=e[t]=[]),g.push({featureIndex:r,feature:h,intersectionZ:f})}}lookupSymbolFeatures(e,t,n,r,i,a,o,s){let c={};this.loadVTLayers();let l=oc(i.filterSpec,`queryRenderedFeatures symbol filter`,i.globalState);for(let i of e)this.loadMatchingFeature(c,n,r,i,l,a,o,s,t);return c}hasLayer(e){for(let t of this.bucketLayerIDs)for(let n of t)if(e===n)return!0;return!1}getId(e,t){let n=e.id;if(this.promoteId){let r=typeof this.promoteId==`string`?this.promoteId:this.promoteId[t];n=e.properties[r],typeof n==`boolean`&&(n=Number(n)),n===void 0&&e.properties?.cluster&&this.promoteId&&(n=Number(e.properties.cluster_id))}return n}},{omit:[`rawTileData`,`sourceLayerCoder`]});function lE(e){return typeof e==`object`&&!!e&&`evaluate`in e}function uE(e,t,n,r,i){return Jt(e,(e,a)=>{let o=t instanceof zl?t.get(a):null;return lE(o)?o.evaluate(n,r,void 0,i):o})}function dE(e,t){return t-e}var fE=`RTLPluginLoaded`,pE=class extends sr{constructor(...e){super(...e),this.status=`unavailable`,this.url=null,this.dispatcher=bb()}_syncState(e){return this.status=e,this.dispatcher.broadcast(`SRPS`,{pluginStatus:e,pluginURL:this.url}).catch(e=>{throw this.status=`error`,e})}getRTLTextPluginStatus(){return this.status}clearRTLTextPlugin(){this.status=`unavailable`,this.url=null}async setRTLTextPlugin(e,t=!1){if(this.url)throw Error(`setRTLTextPlugin cannot be called multiple times.`);if(this.url=Nn.resolveURL(e),!this.url)throw Error(`requested url ${e} is invalid`);if(this.status===`unavailable`){if(t)this.status=`deferred`,this._syncState(this.status);else return this._requestImport()}else if(this.status===`requested`)return this._requestImport()}async _requestImport(){await this._syncState(`loading`),this.status=`loaded`,this.fire(new or(fE))}lazyLoad(){this.status===`unavailable`?this.status=`requested`:this.status===`deferred`&&this._requestImport()}},mE=null;function hE(){return mE||=new pE,mE}var gE=class{constructor(e,t){this.timeAdded=0,this.fadeEndTime=0,this.fadeOpacity=1,this.tileID=e,this.uid=Ht(),this.uses=0,this.tileSize=t,this.buckets={},this.expirationTime=null,this.queryPadding=0,this.hasSymbolBuckets=!1,this.hasRTLText=!1,this.dependencies={},this.rttObjects=[],this.rttFingerprint={},this.expiredRequestCount=0,this.state=`loading`,this.featureStateRevision=-1}isRenderable(e){return this.hasData()&&(!this.fadeEndTime||this.fadingDirection!==0||this.fadeOpacity>0)&&(e||!this.holdingForSymbolFade())}setCrossFadeLogic({fadingRole:e,fadingDirection:t,fadingParentID:n,fadeEndTime:r}){this.resetFadeLogic(),this.fadingRole=e,this.fadingDirection=t,this.fadingParentID=n,this.fadeEndTime=r}setSelfFadeLogic(e){this.resetFadeLogic(),this.selfFading=!0,this.fadeEndTime=e}resetFadeLogic(){this.fadingRole=null,this.fadingDirection=null,this.fadingParentID=null,this.selfFading=!1,this.timeAdded=Fn(),this.fadeEndTime=0,this.fadeOpacity=1}wasRequested(){return this.state===`errored`||this.state===`loaded`||this.state===`reloading`}clearTextures(e){this.demTexture&&e.saveTileTexture(this.demTexture),this.demTexture=null}getRTT(e){return this.rttObjects[e]}acquireRTT(e,t,n){return this.rttObjects[t]=e.acquireRTT(n)}releaseRTT(e){if(this.rttObjects.length!==0){for(let t of this.rttObjects)t&&e.releaseRTT(t);this.rttObjects.length=0}}loadVectorData(e,t,n){if(e?.etagUnmodified===!0)this.state=`loaded`;else if(this.hasData()&&this.unloadVectorData(),this.state=`loaded`,!e)this.collisionBoxArray=new ju;else{e.featureIndex&&(this.latestFeatureIndex=e.featureIndex,e.rawTileData?(this.latestRawTileData=e.rawTileData,this.latestEncoding=e.encoding,this.latestFeatureIndex.rawTileData=e.rawTileData,this.latestFeatureIndex.encoding=e.encoding):this.latestRawTileData&&(this.latestFeatureIndex.rawTileData=this.latestRawTileData,this.latestFeatureIndex.encoding=this.latestEncoding)),this.collisionBoxArray=e.collisionBoxArray,this.buckets=kx(e.buckets,t),this.hasSymbolBuckets=!1;for(let e in this.buckets){let t=this.buckets[e];if(t instanceof cy){if(this.hasSymbolBuckets=!0,n)t.justReloaded=!0;else break}}if(this.hasRTLText=!1,this.hasSymbolBuckets)for(let e in this.buckets){let t=this.buckets[e];if(t instanceof cy&&t.hasRTLText){this.hasRTLText=!0,hE().lazyLoad();break}}this.queryPadding=0;for(let e in this.buckets){let n=this.buckets[e];this.queryPadding=Math.max(this.queryPadding,t.getLayer(e).queryRadius(n))}e.imageAtlas&&(this.imageAtlas=e.imageAtlas),e.glyphAtlasImage&&(this.glyphAtlasImage=e.glyphAtlasImage),this.dashPositions=e.dashPositions}}unloadVectorData(){for(let e in this.buckets)this.buckets[e].destroy();this.buckets={},this.imageAtlasTexture&&this.imageAtlasTexture.destroy(),this.glyphAtlasTexture&&this.glyphAtlasTexture.destroy(),this.imageAtlas=null,this.dashPositions=null,this.latestFeatureIndex=null,this.state=`unloaded`}getBucket(e){return this.buckets[e.id]}upload(e){for(let t in this.buckets){let n=this.buckets[t];n.uploadPending()&&n.upload(e)}let t=e.gl;this.imageAtlas&&!this.imageAtlas.uploaded&&(this.imageAtlasTexture=new Qf(e,this.imageAtlas.image,t.RGBA),this.imageAtlas.uploaded=!0),this.glyphAtlasImage&&=(this.glyphAtlasTexture=new Qf(e,this.glyphAtlasImage,t.ALPHA),null)}prepare(e){this.imageAtlas&&this.imageAtlas.patchUpdatedImages(e,this.imageAtlasTexture)}queryRenderedFeatures(e,t,n,r,i,a,o,s,c,l,u){return this.latestFeatureIndex?.rawTileData?this.latestFeatureIndex.query({queryGeometry:r,cameraQueryGeometry:i,scale:a,tileSize:this.tileSize,pixelPosMatrix:l,transform:s,params:o,queryPadding:this.queryPadding*c,getElevation:u},e,t,n):{}}querySourceFeatures(e,t){let n=this.latestFeatureIndex;if(!n?.rawTileData)return;let r=n.loadVTLayers(),i=t?.sourceLayer?t.sourceLayer:``,a=r._geojsonTileLayer||r[i];if(!a)return;let o=oc(t?.filter,`querySourceFeatures[${i}].filter`,t?.globalState),{z:s,x:c,y:l}=this.tileID.canonical,u={z:s,x:c,y:l};for(let t=0;te)n=!1;else if(!t)n=!0;else if(this.expirationTime{this.remove(e,i)},n)),this.data[r].push(i),this.order.push(r),this.order.length>this.max){let e=this._getAndRemoveByKey(this.order[0]);e&&this.onRemove(e)}return this}has(e){return e.wrapped().key in this.data}getAndRemove(e){return this.has(e)?this._getAndRemoveByKey(e.wrapped().key):null}_getAndRemoveByKey(e){let t=this.data[e].shift();return t.timeout&&clearTimeout(t.timeout),this.data[e].length===0&&delete this.data[e],this.order.splice(this.order.indexOf(e),1),t.value}getByKey(e){let t=this.data[e];return t?t[0].value:null}get(e){return this.has(e)?this.data[e.wrapped().key][0].value:null}remove(e,t){if(!this.has(e))return this;let n=e.wrapped().key,r=t===void 0?0:this.data[n].indexOf(t),i=this.data[n][r];return this.data[n].splice(r,1),i.timeout&&clearTimeout(i.timeout),this.data[n].length===0&&delete this.data[n],this.onRemove(i.value),this.order.splice(this.order.indexOf(n),1),this}setMaxSize(e){for(this.max=e;this.order.length>this.max;){let e=this._getAndRemoveByKey(this.order[0]);e&&this.onRemove(e)}return this}filter(e){let t=[];for(let n in this.data)for(let r of this.data[n])e(r.value)||t.push(r);for(let e of t)this.remove(e.value.tileID,e)}};function vE(e){let t=[];for(let n in e)t.push({id:n,state:e[n]});return t}var yE=class{constructor(){this.state={},this.stateChanges={},this.deletedStates={},this.revision=0}updateState(e,t,n){let r=String(t);if(this.stateChanges[e]||={},this.stateChanges[e][r]||={},z(this.stateChanges[e][r],n),this.deletedStates[e]===null){this.deletedStates[e]={};for(let t in this.state[e])if(t===r){this.deletedStates[e][r]={};for(let i in this.state[e][t])n[i]===void 0&&(this.deletedStates[e][r][i]=null)}else this.deletedStates[e][t]=null}else if(this.deletedStates[e]?.[r]===null){this.deletedStates[e][r]={};for(let t in this.state[e][r])n[t]===void 0&&(this.deletedStates[e][r][t]=null)}else for(let t in n)this.deletedStates[e]?.[r]?.[t]===null&&delete this.deletedStates[e][r][t]}removeFeatureState(e,t,n){if(this.deletedStates[e]===null)return;let r=String(t);if(this.deletedStates[e]||={},n&&t!==void 0)this.deletedStates[e][r]!==null&&(this.deletedStates[e][r]||={},this.deletedStates[e][r][n]=null);else if(t!==void 0){if(this.stateChanges[e]?.[r])for(n in this.deletedStates[e][r]={},this.stateChanges[e][r])this.deletedStates[e][r][n]=null;else this.deletedStates[e][r]=null}else this.deletedStates[e]=null}getState(e,t){let n=String(t),r=this.state[e]||{},i=this.stateChanges[e]||{},a=z({},r[n],i[n]);if(this.deletedStates[e]===null)return{};if(this.deletedStates[e]){let n=this.deletedStates[e][t];if(n===null)return{};for(let e in n)delete a[e]}return a}initializeTileState(e,t){let n={};for(let e in this.state)n[e]=vE(this.state[e]);e.setFeatureState(n,t,this.revision)}coalesceChanges(e,t){let n={};for(let e in this.stateChanges){this.state[e]||={},n[e]||={};for(let t in this.stateChanges[e])this.state[e][t]||={},z(this.state[e][t],this.stateChanges[e][t]),n[e][t]=this.state[e][t]}for(let e in this.deletedStates)if(this.state[e]||={},n[e]||={},this.deletedStates[e]===null)for(let t in this.state[e])this.state[e][t]={},n[e][t]={};else for(let t in this.deletedStates[e]){if(this.deletedStates[e][t]===null)this.state[e][t]={};else if(this.state[e][t])for(let n of Object.keys(this.deletedStates[e][t]))delete this.state[e][t][n];else continue;n[e][t]=this.state[e][t]}if(this.stateChanges={},this.deletedStates={},Object.keys(n).length===0)return;this.revision++;let r={};for(let e in n)r[e]=vE(n[e]);e.setFeatureState(r,t,this.revision)}},bE=class e{constructor(e,t){this.min=e,this.max=t,this.center=Me([],Ae([],this.min,this.max),.5)}quadrant(t){let n=[t%2==0,t<2],r=De(this.min),i=De(this.max);for(let e=0;ethis.max[0]||e.aabb.min[1]>this.max[1]||e.aabb.min[2]>this.max[2]||e.aabb.max[0]0?(t+=e[r]*this.min[r],n+=e[r]*this.max[r]):(n+=e[r]*this.min[r],t+=e[r]*this.max[r]);return t>=0?2:n<0?0:1}},xE=class e{constructor(e,t,n){this.points=e,this.planes=t,this.aabb=n}static fromInvProjectionMatrix(t,n=1,r=0,i,a){let o=[[-1,1,-1,1],[1,1,-1,1],[1,-1,-1,1],[-1,-1,-1,1],[-1,1,1,1],[1,1,1,1],[1,-1,1,1],[-1,-1,1,1]],s=a?[[6,5,4],[0,1,2],[0,3,7],[2,1,5],[3,2,6],[0,4,5]]:[[0,1,2],[6,5,4],[0,3,7],[2,1,5],[3,2,6],[0,4,5]],c=2**r,l=o.map(e=>SE(e,t,n,c));i&&CE(l,s[0],i,a);let u=s.map(e=>{let t=Ie([],Re([],qe([],l[e[0]],l[e[1]]),qe([],l[e[2]],l[e[1]]))),n=-Le(t,l[e[1]]);return t.concat(n)}),d=[1/0,1/0,1/0],f=[-1/0,-1/0,-1/0];for(let e of l)for(let t=0;t<3;t++)d[t]=Math.min(d[t],e[t]),f[t]=Math.max(f[t],e[t]);return new e(l,u,new bE(d,f))}};function SE(e,t,n,r){let i=$e([],e,t),a=1/i[3]/n*r;return et(i,i,[a,a,1/i[3],a])}function CE(e,t,n,r){let i=r?4:0,a=r?0:4,o=0,s=[],c=[];for(let t=0;t<4;t++){let n=qe([],e[t+a],e[t+i]),r=Oe(n);Me(n,n,1/r),s.push(r),c.push(n)}for(let t=0;t<4;t++){let r=Dt(e[t+i],c[t],n);o=r!==null&&r>=0?Math.max(o,r):Math.max(o,s[t])}let l=wE(e,t),u=TE(n,l);if(u!==null){let e=u/Le(c[0],l);o=Math.min(o,e)}for(let t=0;t<4;t++){let n=Math.min(o,s[t]);e[t+a]=[e[t+i][0]+c[t][0]*n,e[t+i][1]+c[t][1]*n,e[t+i][2]+c[t][2]*n,1]}}function wE(e,t){let n=qe([],e[t[0]],e[t[1]]),r=qe([],e[t[2]],e[t[1]]),i=[0,0,0,0];return Ie(i,Re([],n,r)),i[3]=-Le(i,e[t[0]]),i}function TE(e,t){let n=Ze([],e,1/I(e)),r=qe([],t,Me([],n,Le(t,n))),i=I(r);if(i>0){let e=Math.sqrt(1-n[3]*n[3]);return Tt(t,Ae([],Me([],n,-n[3]),Me([],r,e/i)))}return null}function EE(e,t,n){let r=t.intersectsFrustum(e);if(!n||r===0)return r;let i=t.intersectsPlane(n);return i===0?0:r===2&&i===2?2:1}function DE(e,t,n){let r=0,i=(n-t)/10;for(let a=0;a<10;a++){let o=t+(a+.5)/10*(n-t);r+=i*Math.cos(o)**+e}return r}function OE(e,t){return function(n,r,i,a,o){let s=2*((e-1)/Kt(Math.cos(mn(Xm-o))/Math.cos(mn(Xm)))-1),c=Math.acos(i/a),l=2*DE(s-1,0,mn(o/2)),u=Math.min(mn(Xm),c+mn(o/2)),d=Math.min(u,c-mn(o/2)),f=DE(s-1,d,u),p=Math.atan(r/i),m=Math.hypot(r,i),h=n;return h+=Kt(a/m/Math.max(.5,Math.cos(mn(o/2)))),h+=s*Kt(Math.cos(p))/2,h-=Kt(Math.max(1,f/l/t))/2,h}}var kE=OE(9.314,3);function AE(e,t){let n=(t.roundZoom?Math.round:Math.floor)(e.zoom+Kt(e.tileSize/t.tileSize));return Math.max(0,n)}function jE(e,t){let n=R((15-(Xm-e.pitch-e.fov/2))/15,0,1),r=Math.max(500,t??0);return e.elevation+n*r}function ME(e,t,n){let r=e.planes[1],i=e.points.map(e=>{let i=r[0]*e[0]+r[1]*e[1]+r[2]*e[2]+r[3];if(Math.abs(i)>1e-6)return e;let a=[e[0]-n[0],e[1]-n[1],e[2]-n[2]],o=r[0]*a[0]+r[1]*a[1]+r[2]*a[2];if(o>=-1e-9)return e;let s=t/-o;return[e[0]+a[0]*s,e[1]+a[1]*s,e[2]+a[2]*s,e[3]]}),a=e.planes.map((e,n)=>n===1?[e[0],e[1],e[2],e[3]+t]:e),o=[1/0,1/0,1/0],s=[-1/0,-1/0,-1/0];for(let e of i)for(let t=0;t<3;t++)o[t]=Math.min(o[t],e[t]),s[t]=Math.max(s[t],e[t]);return new xE(i,a,new bE(o,s))}function NE(e,t,n,r){let i=Math.hypot(t[0],t[1],t[2]);if(i===0)return{frustum:e,plane:t};let a=1+r/zm,o=R(-t[3]/i,-1,1),s=Math.cos(Math.acos(o)+Math.acos(1/a));return{frustum:ME(e,Math.sqrt(a*a-1),n),plane:[t[0],t[1],t[2],-s*i]}}function PE(e,t){let n=e.getCameraFrustum(),r=e.getClippingPlane();r&&t.maxContentElevation>0&&({frustum:n,plane:r}=NE(n,r,e.cameraPosition,t.maxContentElevation));let i=e.getCoveringTilesDetailsProvider(),a=i.getCenter(e),o=ih(e,a),s=Ym.fromLngLat(a,e.elevation),c=jE(e,t.maxContentElevation),l=i.allowVariableZoom(e,t),u=AE(e,t),d=t.minzoom||0,f=t.maxzoom===void 0?e.maxZoom:t.maxzoom,p=Math.min(Math.max(0,u),f),m=2**p,h=[m*o.x,m*o.y,0],g=[m*s.x,m*s.y,0],_=Math.hypot(s.x-o.x,s.y-o.y),v=Math.abs(s.z-o.z),y=Math.hypot(_,v),b=e=>({zoom:0,x:0,y:0,wrap:e,fullyVisible:!1}),x=[],S=[];if(e.renderWorldCopies&&i.allowWorldCopies())for(let e=1;e<=3;e++)x.push(b(-e)),x.push(b(e));for(x.push(b(0));x.length>0;){let a=x.pop(),m=a.x,_=a.y,b=a.fullyVisible,C={x:m,y:_,z:a.zoom},w=i.getTileBoundingVolume(C,a.wrap,c,t);if(!b){let e=EE(n,w,r);if(e===0)continue;b=e===2}let T=i.distanceToTile2d(o.x,o.y,C,w),E=u;l&&(E=(t.calculateTileZoom||kE)(e.zoom+Kt(e.tileSize/t.tileSize),T,v,y,e.fov)),E=(t.roundZoom?Math.round:Math.floor)(E),E=Math.max(0,E);let D=Math.min(E,f);if(a.wrap=i.getWrap(s,C,a.wrap),a.zoom>=D){if(a.zoom>1),r=a.zoom+1;x.push({zoom:r,x:t,y:n,wrap:a.wrap,fullyVisible:b})}}return S.sort((e,t)=>e.distanceSq-t.distanceSq).map(e=>e.tileID)}function FE(e){return e===`raster`||e===`image`||e===`video`}function IE(e,t,n,r,i,a,o){let s=Fn(),c=Ft(t);for(let l of t){let t=e.getTileById(l.key);(t.fadingDirection===0||t.fadeOpacity===0)&&t.resetFadeLogic(),!LE(e,t,n,s,r,i,o)&&(RE(e,t,n,s,a,o)||BE(t,c,s,o)||t.resetFadeLogic())}}function LE(e,t,n,r,i,a,o){if(!t.hasData())return!1;let{tileID:s,fadingRole:c,fadingDirection:l,fadingParentID:u}=t;if(c===0&&l===1&&u)return n[u.key]=u,!0;let d=Math.max(s.overscaledZ-i,a);for(let i=s.overscaledZ-1;i>=d;i--){let a=s.scaledTo(i),c=e.getLoadedTile(a);if(c)return t.setCrossFadeLogic({fadingRole:0,fadingDirection:1,fadingParentID:c.tileID,fadeEndTime:r+o}),c.setCrossFadeLogic({fadingRole:1,fadingDirection:0,fadeEndTime:r+o}),n[a.key]=a,!0}return!1}function RE(e,t,n,r,i,a){if(!t.hasData())return!1;let o=t.tileID.children(i),s=zE(e,t,o,n,r,i,a);if(s)return!0;for(let c of o)zE(e,t,c.children(i),n,r,i,a)&&(s=!0);return s}function zE(e,t,n,r,i,a,o){if(n[0].overscaledZ>a)return!1;let s=!1;for(let a of n){let n=e.getLoadedTile(a);if(!n)continue;let{fadingRole:c,fadingDirection:l,fadingParentID:u}=n;(c!==0||l!==0||!u)&&(n.setCrossFadeLogic({fadingRole:0,fadingDirection:0,fadingParentID:t.tileID,fadeEndTime:i+o}),t.setCrossFadeLogic({fadingRole:1,fadingDirection:1,fadeEndTime:i+o})),r[a.key]=a,s=!0}return s}function BE(e,t,n,r){let i=e.tileID;if(e.selfFading)return!0;if(e.hasData())return!1;if(t.has(i)){let t=n+r;return e.setSelfFadeLogic(t),!0}return!1}function VE(e,t){if(t<=0)return!1;let n=Fn();for(let t of e.getAllTiles())if(t.fadeEndTime>=n)return!0;return!1}function HE(e,t){let n=t.getRenderableIds();for(let r of n){if(!e.neighboringTiles?.[r])continue;let n=t.getTileById(r);e.neighboringTiles[r].backfilled||UE(e,n),!n.neighboringTiles?.[e.tileID.key]?.backfilled&&UE(n,e)}}function UE(e,t){e.needsHillshadePrepare=!0,e.needsTerrainPrepare=!0,e.needsColorReliefPrepare=!0;let n=t.tileID.canonical.x-e.tileID.canonical.x,r=t.tileID.canonical.y-e.tileID.canonical.y,i=2**e.tileID.canonical.z,a=t.tileID.key;(n!==0||r!==0)&&(Math.abs(r)>1||(Math.abs(n)>1&&(Math.abs(n+i)===1?n+=i:Math.abs(n-i)===1&&(n-=i)),t.dem&&e.dem&&(e.dem.backfillBorder(t.dem,n,r),e.neighboringTiles?.[a]&&(e.neighboringTiles[a].backfilled=!0))))}var WE=class{constructor(){this._tiles={}}handleWrapJump(e){let t={};for(let n in this._tiles){let r=this._tiles[n];r.tileID=r.tileID.unwrapTo(r.tileID.wrap+e),t[r.tileID.key]=r}this._tiles=t}setFeatureState(e,t,n){for(let r in this._tiles)this._tiles[r].setFeatureState(e,t,n)}getAllTiles(){return Object.values(this._tiles)}getAllIds(e=!1){return e?Object.values(this._tiles).map(e=>e.tileID).sort(Kb).map(e=>e.key):Object.keys(this._tiles)}getTileById(e){return this._tiles[e]}setTile(e,t){this._tiles[e]=t}deleteTileById(e){delete this._tiles[e]}getLoadedTile(e){let t=this.getTileById(e.key);return t?.hasData()?t:null}isIdRenderable(e,t=!1){return this.getTileById(e)?.isRenderable(t)}getRenderableIds(e=0,t){let n=[];for(let e of this.getAllIds())this.isIdRenderable(e,t)&&n.push(this.getTileById(e));return t?n.sort((t,n)=>{let r=t.tileID,i=n.tileID,a=new k(r.canonical.x,r.canonical.y)._rotate(-e),o=new k(i.canonical.x,i.canonical.y)._rotate(-e);return r.overscaledZ-i.overscaledZ||o.y-a.y||o.x-a.x}).map(e=>e.tileID.key):n.map(e=>e.tileID).sort(Kb).map(e=>e.key)}},GE=class e extends sr{static{this.maxUnderzooming=10}static{this.maxOverzooming=3}constructor(e,t,n){super(),this._maxContentElevationSeen=0,this.id=e,this.dispatcher=n,this.on(`data`,e=>{this._dataHandler(e)}),this.on(`dataloading`,()=>{this._sourceErrored=!1}),this.on(`error`,()=>{this._sourceErrored=this._source.loaded()}),this._source=Dx(e,t,n,this),this._inViewTiles=new WE,this._outOfViewCache=new _E(0,e=>this._unloadTile(e)),this._timers={},this._maxTileCacheSize=null,this._maxTileCacheZoomLevels=null,this._rasterFadeDuration=0,this._maxFadingAncestorLevels=5,this._state=new yE,this._didEmitContent=!1,this._updated=!1}onAdd(e){this.map=e,this._maxTileCacheSize=e?e._maxTileCacheSize:null,this._maxTileCacheZoomLevels=e?e._maxTileCacheZoomLevels:null,this._source?.onAdd&&this._source.onAdd(e)}onRemove(e){for(let e of this._inViewTiles.getAllTiles())e.unloadVectorData();this.clearTiles(),this._source?.onRemove&&this._source.onRemove(e),this._inViewTiles=new WE}loaded(){if(this._sourceErrored)return!0;if(!this._sourceLoaded||!this._source.loaded())return!1;if((this.used!==void 0||this.usedForTerrain!==void 0)&&!this.used&&!this.usedForTerrain)return!0;if(!this._updated)return!1;for(let e of this._inViewTiles.getAllTiles())if(e.state!==`loaded`&&e.state!==`errored`)return!1;return!0}getSource(){return this._source}getState(){return this._state}pause(){this._paused=!0}resume(){if(!this._paused)return;let e=this._shouldReloadOnResume;this._paused=!1,this._shouldReloadOnResume=!1,e&&this.reload(),this.transform&&this.update(this.transform,this.terrain)}async _loadTile(e,t,n,r){try{let i=await this._source.loadTile(e);this._tileLoaded(e,t,n,r,i)}catch(t){e.state=`errored`,t.status===404?this.update(this.transform,this.terrain):this._source.fire(new B(vt(t),{tile:e}))}}_unloadTile(e){this._source.unloadTile&&this._source.unloadTile(e)}_abortTile(e){this._source.abortTile&&this._source.abortTile(e),this._source.fire(new dr(`dataabort`,{tile:e,coord:e.tileID}))}serialize(){return this._source.serialize()}prepare(e){this._source.prepare&&this._source.prepare(),this._state.coalesceChanges(this._inViewTiles,this.style);for(let t of this._inViewTiles.getAllTiles())t.upload(e),t.prepare(this.map.style.imageManager)}getIds(){return this._inViewTiles.getAllIds(!0)}getRenderableIds(e){return this._inViewTiles.getRenderableIds(this.transform?.bearingInRadians,e)}hasRenderableParent(e){let t=e.overscaledZ-1;if(t>=this._source.minzoom){let n=this.getLoadedTile(e.scaledTo(t));if(n)return this._inViewTiles.isIdRenderable(n.tileID.key)}return!1}reload(e,t=void 0){if(this._paused)this._shouldReloadOnResume=!0;else{this._outOfViewCache.reset();for(let n of this._inViewTiles.getAllIds()){let r=this._inViewTiles.getTileById(n);(!t||this._source.shouldReloadTile(r,t))&&(e?this._reloadTile(n,r.state===`errored`?`loading`:`expired`):r.state!==`errored`&&this._reloadTile(n,`reloading`))}}}async _reloadTile(e,t){let n=this._inViewTiles.getTileById(e);if(!n)return;let r=n.hasData();n.state!==`loading`&&(n.state=t),await this._loadTile(n,e,t,r)}_tileLoaded(e,t,n,r,i){r||(e.timeAdded=Fn(),e.selfFading&&(e.fadeEndTime=e.timeAdded+this._rasterFadeDuration)),n===`expired`&&(e.refreshedUponExpiration=!0),this._setTileReloadTimer(t,e),!i?.unmodified&&(this.getSource().type===`raster-dem`&&e.dem&&HE(e,this._inViewTiles),e.featureStateRevision=-1,this._state.initializeTileState(e,this.style),e.aborted||this._source.fire(new dr(`data`,{tile:e,coord:e.tileID})))}getTile(e){return this.getTileByID(e.key)}getTileByID(e){return this._inViewTiles.getTileById(e)}_retainLoadedChildren(t,n){let r=this._getLoadedDescendents(n),i=new Set;for(let a of n){let n=r[a.key];if(!n?.length){i.add(a);continue}let o=a.overscaledZ+e.maxOverzooming,s=n.filter(e=>e.tileID.overscaledZ<=o);if(!s.length){i.add(a);continue}let c=Math.min(...s.map(e=>e.tileID.overscaledZ)),l=s.filter(e=>e.tileID.overscaledZ===c).map(e=>e.tileID);for(let e of l)t[e.key]=e;this._areDescendentsComplete(l,c,a.overscaledZ)||i.add(a)}return i}_getLoadedDescendents(e){let t={};for(let n of this._inViewTiles.getAllTiles().filter(e=>e.hasData()))for(let r of e)n.tileID.isChildOf(r)&&(t[r.key]||=[],t[r.key].push(n));return t}_areDescendentsComplete(e,t,n){return e.length===1&&e[0].isOverscaled()?e[0].overscaledZ===t:4**(t-n)===e.length}getLoadedTile(e){return this._inViewTiles.getLoadedTile(e)}updateCacheSize(e){let t=(Math.ceil(e.width/this._source.tileSize)+1)*(Math.ceil(e.height/this._source.tileSize)+1),n=this._maxTileCacheZoomLevels===null?Un.MAX_TILE_CACHE_ZOOM_LEVELS:this._maxTileCacheZoomLevels,r=Math.floor(t*n),i=typeof this._maxTileCacheSize==`number`?Math.min(this._maxTileCacheSize,r):r;this._outOfViewCache.setMaxSize(i)}handleWrapJump(e){let t=(e-(this._prevLng===void 0?e:this._prevLng))/360,n=Math.round(t);this._prevLng=e,n&&(this._inViewTiles.handleWrapJump(n),this._resetTileReloadTimers())}_updateMaxContentElevation(){let e=this._maxContentElevationSeen,t=this.map?.style?._layers;if(!t)return e;let n=this._inViewTiles.getAllTiles();for(let r in t){let i=t[r];if(i.type!==`symbol`||i.source!==this.id||i.isHidden(this.transform.zoom))continue;let a=i;if(!a.layout)continue;let o=a.layout.get(`symbol-height-offset`);if(e=Math.max(e,o.constantOr(0)),!o.isConstant())for(let t of n){let n=t.getBucket(i);n&&n.maxHeightOffset>e&&(e=n.maxHeightOffset)}}return this._maxContentElevationSeen=e,e}update(e,t){if(!this._sourceLoaded||this._paused)return;this.transform=e,this.terrain=t,this.updateCacheSize(e),this.handleWrapJump(this.transform.center.lng);let n;!this.used&&!this.usedForTerrain?n=[]:this._source.tileID?n=e.getVisibleUnwrappedCoordinates(this._source.tileID).map(e=>new Bb(e.canonical.z,e.wrap,e.canonical.z,e.canonical.x,e.canonical.y)):(n=PE(e,{tileSize:this.usedForTerrain?this.tileSize:this._source.tileSize,minzoom:this._source.minzoom,maxzoom:this._source.type===`vector`&&this.map._zoomLevelsToOverscale!==void 0?Math.max(this._source.maxzoom,e.maxZoom-this.map._zoomLevelsToOverscale):this._source.maxzoom,roundZoom:!this.usedForTerrain&&this._source.roundZoom,reparseOverscaled:this._source.reparseOverscaled,terrain:t,calculateTileZoom:this._source.calculateTileZoom,maxContentElevation:this._updateMaxContentElevation()}),this._source.hasTile&&(n=n.filter(e=>this._source.hasTile(e)))),this.usedForTerrain&&(n=this._addTerrainIdealTiles(n));let r=n.length===0&&!this._updated&&this._didEmitContent;this._updated=!0,r&&this.fire(new dr(`data`,{sourceDataType:`idle`,sourceId:this.id}));let i=AE(e,this._source),a=this._updateRetainedTiles(n,i),o=FE(this._source.type);o&&this._rasterFadeDuration>0&&!t&&IE(this._inViewTiles,n,a,this._maxFadingAncestorLevels,this._source.minzoom,this._source.maxzoom,this._rasterFadeDuration),o?this._cleanUpRasterTiles(a):this._cleanUpVectorTiles(a)}_cleanUpRasterTiles(e){for(let t of this._inViewTiles.getAllIds())e[t]||this._removeTile(t)}_cleanUpVectorTiles(e){for(let t of this._inViewTiles.getAllIds()){let n=this._inViewTiles.getTileById(t);e[t]?n.clearSymbolFadeHold():n.hasSymbolBuckets?n.holdingForSymbolFade()?n.symbolFadeFinished()&&this._removeTile(t):n.setSymbolHoldDuration(this.map._fadeDuration):this._removeTile(t)}}_addTerrainIdealTiles(e){let t=[];for(let n of e)if(n.canonical.z>this._source.minzoom){let e=n.scaledTo(n.canonical.z-1);t.push(e);let r=n.scaledTo(Math.max(this._source.minzoom,Math.min(n.canonical.z,5)));t.push(r)}return e.concat(t)}releaseSymbolFadeTiles(){for(let e of this._inViewTiles.getAllIds())this._inViewTiles.getTileById(e).holdingForSymbolFade()&&this._removeTile(e)}_updateRetainedTiles(t,n){let r=new Set;for(let e of t)this._addTile(e).hasData()||r.add(e);let i=t.reduce((e,t)=>(e[t.key]=t,e),{}),a=this._retainLoadedChildren(i,r),o={},s=Math.max(n-e.maxUnderzooming,this._source.minzoom);for(let e of a){let t=this._inViewTiles.getTileById(e.key),n=t?.wasRequested();for(let r=e.overscaledZ-1;r>=s;--r){let a=e.scaledTo(r);if(o[a.key])break;if(o[a.key]=!0,t=this.getTile(a),!t&&n&&(t=this._addTile(a)),t){let e=t.hasData();if((e||!this.map?.cancelPendingTileRequestsWhileZooming||n)&&(i[a.key]=a),n=t.wasRequested(),e)break}}}return i}_addTile(e){let t=this._inViewTiles.getTileById(e.key);if(t)return t;t=this._outOfViewCache.getAndRemove(e),t&&(t.resetFadeLogic(),this._setTileReloadTimer(e.key,t),t.tileID=e,this._state.initializeTileState(t,this.style));let n=t;return t||(t=new gE(e,this._source.tileSize*e.overscaleFactor()),this._loadTile(t,e.key,t.state,!1)),t.uses++,this._inViewTiles.setTile(e.key,t),n||this._source.fire(new dr(`dataloading`,{tile:t,coord:t.tileID})),t}_setTileReloadTimer(e,t){this._clearTileReloadTimer(e);let n=t.getExpiryTimeout();if(n){let t=()=>{this._reloadTile(e,`expired`),delete this._timers[e]};this._timers[e]=setTimeout(t,n)}}_clearTileReloadTimer(e){let t=this._timers[e];t&&(clearTimeout(t),delete this._timers[e])}_resetTileReloadTimers(){for(let e in this._timers)clearTimeout(this._timers[e]),delete this._timers[e];for(let e of this._inViewTiles.getAllIds()){let t=this._inViewTiles.getTileById(e);this._setTileReloadTimer(e,t)}}refreshTiles(e){for(let t of this._inViewTiles.getAllIds()){let n=this._inViewTiles.getTileById(t);(this._inViewTiles.isIdRenderable(t)||n.state==`errored`)&&e.some(e=>e.equals(n.tileID.canonical))&&this._reloadTile(t,`expired`)}}_removeTile(e){let t=this._inViewTiles.getTileById(e);t&&(t.uses--,this._inViewTiles.deleteTileById(e),this._clearTileReloadTimer(e),!(t.uses>0)&&(t.hasData()&&t.state!==`reloading`?this._outOfViewCache.add(t.tileID,t,t.getExpiryTimeout()):(t.aborted=!0,this._abortTile(t),this._unloadTile(t))))}_dataHandler(e){if(e.dataType===`source`){if(e.sourceDataType===`metadata`){this._sourceLoaded=!0;return}e.sourceDataType===`content`&&this._sourceLoaded&&!this._paused&&(this.reload(e.sourceDataChanged,e.shouldReloadTileOptions),this.transform&&this.update(this.transform,this.terrain),this._didEmitContent=!0)}}resetMaxContentElevation(){this._maxContentElevationSeen=0}clearTiles(){this._shouldReloadOnResume=!1,this._paused=!1,this.resetMaxContentElevation();for(let e of this._inViewTiles.getAllIds())this._removeTile(e);this._outOfViewCache.reset()}tilesIn(e,t,n){let r=[],i=this.transform;if(!i)return r;let a=i.getCoveringTilesDetailsProvider().allowWorldCopies(),o=n?i.getCameraQueryGeometry(e):e,s=e=>i.screenPointToMercatorCoordinate(e,this.terrain),c=this.transformBbox(e,s,!a),l=this.transformBbox(o,s,!a),u=this.getIds(),d=km.fromPoints(l);for(let e of u){let n=this._inViewTiles.getTileById(e);if(n.holdingForSymbolFade())continue;let o=a?[n.tileID]:[n.tileID.unwrapTo(-1),n.tileID.unwrapTo(0)],s=2**(i.zoom-n.tileID.overscaledZ),u=t*n.queryPadding*L/n.tileSize/s;for(let e of o){let t=d.map(t=>e.getTilePoint(new Ym(t.x,t.y)));if(t.expandBy(u),t.intersects(Am)){let t=c.map(t=>e.getTilePoint(t)),i=l.map(t=>e.getTilePoint(t));r.push({tile:n,tileID:a?e:e.unwrapTo(0),queryGeometry:t,cameraQueryGeometry:i,scale:s})}}}return r}transformBbox(e,t,n){let r=e.map(t);if(n){let n=km.fromPoints(e);n.shrinkBy(Math.min(n.width(),n.height())*.001);let i=n.map(t);km.fromPoints(r).covers(i)||(r=r.map(e=>e.x>.5?new Ym(e.x-1,e.y,e.z):e))}return r}getVisibleCoordinates(e){let t=this.getRenderableIds(e).map(e=>this._inViewTiles.getTileById(e).tileID);return this.transform&&this.transform.populateCache(t),t}hasTransition(){return this._source.hasTransition()?!0:FE(this._source.type)&&VE(this._inViewTiles,this._rasterFadeDuration)}setRasterFadeDuration(e){this._rasterFadeDuration=e}setFeatureState(e,t,n){e||=Ax,this._state.updateState(e,t,n)}removeFeatureState(e,t,n){e||=Ax,this._state.removeFeatureState(e,t,n)}getFeatureState(e,t){return e||=Ax,this._state.getState(e,t)}setDependencies(e,t,n){let r=this._inViewTiles.getTileById(e);r&&r.setDependencies(t,n)}reloadTilesForDependencies(e,t){for(let n of this._inViewTiles.getAllIds())this._inViewTiles.getTileById(n).hasDependency(e,t)&&this._reloadTile(n,`reloading`);this._outOfViewCache.filter(n=>!n.hasDependency(e,t))}areTilesLoaded(){for(let e of this._inViewTiles.getAllTiles())if(e.state!==`loaded`&&e.state!==`errored`)return!1;return!0}},KE=class{constructor(e,t){this.reset(e,t)}reset(e,t){this.points=e||[],this._distances=[0];for(let e=1;e0?(r-a)/o:0;return this.points[i].mult(1-s).add(this.points[t].mult(s))}};function qE(e,t,n,r,i){return i?e?e(t,n)+r:r===0?void 0:r:r}function JE(e,t){let n=!0;return e===`always`||(e===`never`||t===`never`)&&(n=!1),n}var YE=class{constructor(e,t,n){let r=this.boxCells=[],i=this.circleCells=[];this.xCellCount=Math.ceil(e/n),this.yCellCount=Math.ceil(t/n);for(let e=0;ethis.width||r<0||t>this.height)return[];let s=[];if(e<=0&&t<=0&&this.width<=n&&this.height<=r){if(i)return[{key:null,x1:e,y1:t,x2:n,y2:r}];for(let e=0;e0}hitTestCircle(e,t,n,r,i){let a=e-n,o=e+n,s=t-n,c=t+n;if(o<0||a>this.width||c<0||s>this.height)return!1;let l=[],u={hitTest:!0,overlapMode:r,circle:{x:e,y:t,radius:n},seenUids:{box:{},circle:{}}};return this._forEachCell(a,s,o,c,this._queryCellCircle,l,u,i),l.length>0}_queryCell(e,t,n,r,i,a,o,s){let{seenUids:c,hitTest:l,overlapMode:u}=o,d=this.boxCells[i],f=1e-6;if(d!==null){let i=this.bboxes;for(let o of d)if(!c.box[o]){c.box[o]=!0;let d=o*4,p=this.boxKeys[o];if(e<=i[d+2]+f&&t<=i[d+3]+f&&n>=i[d+0]-f&&r>=i[d+1]-f&&(!s||s(p))&&(!l||!JE(u,p.overlapMode))&&(a.push({key:p,x1:i[d],y1:i[d+1],x2:i[d+2],y2:i[d+3]}),l))return!0}}let p=this.circleCells[i];if(p!==null){let i=this.circles;for(let o of p)if(!c.circle[o]){c.circle[o]=!0;let d=o*3,f=this.circleKeys[o];if(this._circleAndRectCollide(i[d],i[d+1],i[d+2],e,t,n,r)&&(!s||s(f))&&(!l||!JE(u,f.overlapMode))){let e=i[d],t=i[d+1],n=i[d+2];if(a.push({key:f,x1:e-n,y1:t-n,x2:e+n,y2:t+n}),l)return!0}}}return!1}_queryCellCircle(e,t,n,r,i,a,o,s){let{circle:c,seenUids:l,overlapMode:u}=o,d=this.boxCells[i];if(d!==null){let e=this.bboxes;for(let t of d)if(!l.box[t]){l.box[t]=!0;let n=t*4,r=this.boxKeys[t];if(this._circleAndRectCollide(c.x,c.y,c.radius,e[n+0],e[n+1],e[n+2],e[n+3])&&(!s||s(r))&&!JE(u,r.overlapMode))return a.push(!0),!0}}let f=this.circleCells[i];if(f!==null){let e=this.circles;for(let t of f)if(!l.circle[t]){l.circle[t]=!0;let n=t*3,r=this.circleKeys[t];if(this._circlesCollide(e[n],e[n+1],e[n+2],c.x,c.y,c.radius)&&(!s||s(r))&&!JE(u,r.overlapMode))return a.push(!0),!0}}}_forEachCell(e,t,n,r,i,a,o,s){let c=this._convertToXCellCoord(e),l=this._convertToYCellCoord(t),u=this._convertToXCellCoord(n),d=this._convertToYCellCoord(r);for(let f=c;f<=u;f++)for(let c=l;c<=d;c++){let l=this.xCellCount*c+f;if(i.call(this,e,t,n,r,l,a,o,s))return}}_convertToXCellCoord(e){return Math.max(0,Math.min(this.xCellCount-1,Math.floor(e*this.xScale)))}_convertToYCellCoord(e){return Math.max(0,Math.min(this.yCellCount-1,Math.floor(e*this.yScale)))}_circlesCollide(e,t,n,r,i,a){let o=r-e,s=i-t,c=n+a;return c*c>o*o+s*s}_circleAndRectCollide(e,t,n,r,i,a,o){let s=(a-r)/2,c=Math.abs(e-(r+s));if(c>s+n)return!1;let l=(o-i)/2,u=Math.abs(t-(i+l));if(u>l+n)return!1;if(c<=s||u<=l)return!0;let d=c-s,f=u-l;return d*d+f*f<=n*n}};function XE(e,t){let n=1/(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]),r=1/(t[8]*t[8]+t[9]*t[9]+t[10]*t[10]),i=t[0]*n,a=t[4]*n,o=t[8]*r,s=t[1]*n,c=t[5]*n,l=t[9]*r,u=t[2]*n,d=t[6]*n,f=t[10]*r;e[0]=i,e[1]=a,e[2]=o,e[4]=s,e[5]=c,e[6]=l,e[8]=u,e[9]=d,e[10]=f;let p=t[12],m=t[13],h=t[14];return e[12]=-i*p-s*m-u*h,e[13]=-a*p-c*m-d*h,e[14]=-o*p-l*m-f*h,e[3]=0,e[7]=0,e[11]=0,e[15]=1,e}function ZE(e,t){return e[0]=1/t[0],e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1/t[5],e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=0,e[11]=1/t[14],e[12]=0,e[13]=0,e[14]=-1,e[15]=t[10]/t[14],e}function QE(e,t){let n=1/(t[0]*t[5]-t[1]*t[4]);return e[0]=t[5]*n,e[1]=-t[1]*n,e[2]=0,e[3]=0,e[4]=-t[4]*n,e[5]=t[0]*n,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1/t[10],e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1/t[15],e}var $E=ue();function eD(e,t,n){let r=ue();if(!e){let{vecSouth:e,vecEast:n}=nD(t),i=ne();i[0]=n[0],i[1]=n[1],i[2]=e[0],i[3]=e[1],re(i,i),r[0]=i[0],r[1]=i[1],r[4]=i[2],r[5]=i[3]}return P(r,r,[1/n,1/n,1]),r}function tD(e,t,n,r){if(e){let e=ue();if(!t){let{vecSouth:t,vecEast:r}=nD(n);e[0]=r[0],e[1]=r[1],e[4]=t[0],e[5]=t[1]}return P(e,e,[r,r,1]),e}return n.pixelsToClipSpaceMatrix}function nD(e){let t=Math.cos(e.rollInRadians),n=Math.sin(e.rollInRadians),r=Math.cos(e.pitchInRadians),i=Math.cos(e.bearingInRadians),a=Math.sin(e.bearingInRadians),o=lt();o[0]=-i*r*n-a*t,o[1]=-a*r*n+i*t;let s=ft(o);s<1e-9?ht(o):dt(o,o,1/s);let c=lt();c[0]=i*r*t-a*n,c[1]=a*r*t+i*n;let l=ft(c);return l<1e-9?ht(c):dt(c,c,1/l),{vecEast:c,vecSouth:o}}function rD(e,t,n){return qE(e.getElevation,t,n,e.heightOffset??0,e.heightAnchorGround??!0)}function iD(e,t,n,r){let i;r==null?(i=[e,t,0,1],xD(i,i,n)):(i=[e,t,r,1],$e(i,i,n));let a=i[3];return{point:new k(i[0]/a,i[1]/a),signedDistanceFromCamera:a,isOccluded:!1}}function aD(e,t){return .5+e/t*.5}function oD(e,t){return e.x>=-t[0]&&e.x<=t[0]&&e.y>=-t[1]&&e.y<=t[1]}function sD(e,t,n,r,i,a,o,s,c,l,u,d){let f=r?e.textSizeData:e.iconSizeData,p=_v(f,n.zoom),m=[256/t.width*2+1,256/t.height*2+1],h=r?e.text.dynamicLayoutVertexArray:e.icon.dynamicLayoutVertexArray;h.clear();let g=e.lineVertexArray,_=r?e.text.placedSymbolArray:e.icon.placedSymbolArray,v=n.width/n.height,y=!1;for(let t=0;t<_.length;t++){let r=_.get(t);if(r.hidden||r.writingMode===2&&!y){bD(r.numGlyphs,h);continue}y=!1;let b={getElevation:d,pitchedLabelPlaneMatrix:i,lineVertexArray:g,pitchWithMap:o,projectionCache:{projections:{},offsets:{},cachedAnchorPoint:void 0,anyProjectionOccluded:!1},transform:n,tileAnchorPoint:new k(r.anchorX,r.anchorY),unwrappedTileID:l,width:n.width,height:n.height,translation:u},x=hD(r.anchorX,r.anchorY,b);if(!oD(x.point,m)){bD(r.numGlyphs,h);continue}let S=x.signedDistanceFromCamera,C=aD(n.cameraToCenterDistance,S),w=gv(f,p,r),T=o?w*n.getPitchedTextCorrection(r.anchorX,r.anchorY,l)/C:w*C,E=uD({projectionContext:b,pitchedLabelPlaneMatrixInverse:a,symbol:r,fontSize:T,flip:!1,keepUpright:s,glyphOffsetArray:e.glyphOffsetArray,dynamicLayoutVertexArray:h,aspectRatio:v,rotateToLine:c});y=E.useVertical,(E.notEnoughRoom||y||E.needsFlipping&&uD({projectionContext:b,pitchedLabelPlaneMatrixInverse:a,symbol:r,fontSize:T,flip:!0,keepUpright:s,glyphOffsetArray:e.glyphOffsetArray,dynamicLayoutVertexArray:h,aspectRatio:v,rotateToLine:c}).notEnoughRoom)&&bD(r.numGlyphs,h)}r?e.text.dynamicLayoutVertexBuffer.updateData(h):e.icon.dynamicLayoutVertexBuffer.updateData(h)}function cD(e,t,n,r,i,a,o,s){let c=a.glyphStartIndex+a.numGlyphs,l=a.lineStartIndex,u=a.lineStartIndex+a.lineLength,d=t.getoffsetX(a.glyphStartIndex),f=t.getoffsetX(c-1),p=vD(e*d,n,r,i,a.segment,l,u,s,o);if(!p)return null;let m=vD(e*f,n,r,i,a.segment,l,u,s,o);return!m||s.projectionCache.anyProjectionOccluded?null:{first:p,last:m}}function lD(e,t,n,r){return e===1&&Math.abs(n.y-t.y)>Math.abs(n.x-t.x)*r?{useVertical:!0}:(e===2?t.yn.x)?{needsFlipping:!0}:null}function uD(e){let{projectionContext:t,pitchedLabelPlaneMatrixInverse:n,symbol:r,fontSize:i,flip:a,keepUpright:o,glyphOffsetArray:s,dynamicLayoutVertexArray:c,aspectRatio:l,rotateToLine:u}=e,d=i/24,f=r.lineOffsetX*d,p=r.lineOffsetY*d,m;if(r.numGlyphs>1){let e=r.glyphStartIndex+r.numGlyphs,i=r.lineStartIndex,c=r.lineStartIndex+r.lineLength,h=cD(d,s,f,p,a,r,u,t);if(!h)return{notEnoughRoom:!0};let g=mD(h.first.point.x,h.first.point.y,t,n),_=mD(h.last.point.x,h.last.point.y,t,n);if(o&&!a){let e=lD(r.writingMode,g,_,l);if(e)return e}m=[h.first];for(let n=r.glyphStartIndex+1;n0?o.point:dD(t.tileAnchorPoint,a,e,1,t),c=mD(e.x,e.y,t,n),u=mD(s.x,s.y,t,n),d=lD(r.writingMode,c,u,l);if(d)return d}let e=vD(d*s.getoffsetX(r.glyphStartIndex),f,p,a,r.segment,r.lineStartIndex,r.lineStartIndex+r.lineLength,t,u);if(!e||t.projectionCache.anyProjectionOccluded)return{notEnoughRoom:!0};m=[e]}for(let e of m)iy(c,e.point,e.angle);return{}}function dD(e,t,n,r,i){let a=e.add(e.sub(t)._unit()),o=pD(a.x,a.y,i).point,s=n.sub(o);return n.add(s._mult(r/s.mag()))}function fD(e,t,n){let r=t.projectionCache;if(r.projections[e])return r.projections[e];let i=new k(t.lineVertexArray.getx(e),t.lineVertexArray.gety(e)),a=pD(i.x,i.y,t);if(a.signedDistanceFromCamera>0)return r.projections[e]=a.point,r.anyProjectionOccluded||=a.isOccluded,a.point;let o=e-n.direction,s=n.distanceFromAnchor===0?t.tileAnchorPoint:new k(t.lineVertexArray.getx(o),t.lineVertexArray.gety(o)),c=n.absOffsetX-n.distanceFromAnchor+1;return dD(s,i,n.previousVertex,c,t)}function pD(e,t,n){let r=e+n.translation[0],i=t+n.translation[1],a;return n.pitchWithMap?(a=iD(r,i,n.pitchedLabelPlaneMatrix,rD(n,r,i)),a.isOccluded=!1):(a=n.transform.projectTileCoordinates(r,i,n.unwrappedTileID,rD(n,r,i)),a.point.x=(a.point.x*.5+.5)*n.width,a.point.y=(-a.point.y*.5+.5)*n.height),a}function mD(e,t,n,r){if(n.pitchWithMap){let i=[e,t,0,1];$e(i,i,r);let a=i[0]/i[3],o=i[1]/i[3];return n.transform.projectTileCoordinates(a,o,n.unwrappedTileID,rD(n,a,o)).point}return{x:e/n.width*2-1,y:1-t/n.height*2}}function hD(e,t,n){return n.transform.projectTileCoordinates(e,t,n.unwrappedTileID,rD(n,e,t))}function gD(e,t,n){return e._unit()._perp()._mult(t*n)}function _D(e,t,n,r,i,a,o,s,c){if(s.projectionCache.offsets[e])return s.projectionCache.offsets[e];let l=n.add(t);if(e+c.direction=i)return s.projectionCache.offsets[e]=l,l;let u=fD(e+c.direction,s,c),d=gD(u.sub(n),o,c.direction),f=n.add(d),p=u.add(d);return s.projectionCache.offsets[e]=tn(a,l,f,p)||l,s.projectionCache.offsets[e]}function vD(e,t,n,r,i,a,o,s,c){let l=r?e-t:e+t,u=l>0?1:-1,d=0;r&&(u*=-1,d=Math.PI),u<0&&(d+=Math.PI);let f=u>0?a+i:a+i+1,p;s.projectionCache.cachedAnchorPoint?p=s.projectionCache.cachedAnchorPoint:(p=pD(s.tileAnchorPoint.x,s.tileAnchorPoint.y,s).point,s.projectionCache.cachedAnchorPoint=p);let m=p,h=p,g,_,v=0,y=0,b=Math.abs(l),x=[],S;for(;v+y<=b;){if(f+=u,f=o)return null;v+=y,h=m,_=g;let e={absOffsetX:b,direction:u,distanceFromAnchor:v,previousVertex:h};if(m=fD(f,s,e),n===0)x.push(h),S=m.sub(h);else{let t,r=m.sub(h);t=r.mag()===0?gD(fD(f+u,s,e).sub(m),n,u):gD(r,n,u),_||=h.add(t),g=_D(f,t,m,a,o,_,n,s,e),x.push(_),S=g.sub(_)}y=S.mag()}let C=(b-v)/y,w=S._mult(C)._add(_||h),T=d+Math.atan2(m.y-h.y,m.x-h.x);return x.push(w),{point:w,angle:c?T:0,path:x}}var yD=new Float32Array([-1/0,-1/0,0,-1/0,-1/0,0,-1/0,-1/0,0,-1/0,-1/0,0]);function bD(e,t){for(let n=0;n{let r=iD(e.x,e.y,n,rD(t,e.x,e.y)),i=t.transform.projectTileCoordinates(r.point.x,r.point.y,t.unwrappedTileID,rD(t,r.point.x,r.point.y));return i.point.x=(i.point.x*.5+.5)*t.width,i.point.y=(-i.point.y*.5+.5)*t.height,i})}function CD(e){let t=0,n=0,r=0,i=0;for(let a=0;an&&(n=i,t=r));return e.slice(t,t+n)}var wD=class{constructor(e,t=new YE(e.width+200,e.height+200,25),n=new YE(e.width+200,e.height+200,25)){this.transform=e,this.grid=t,this.ignoredGrid=n,this.pitchFactor=Math.cos(e.pitch*Math.PI/180)*e.cameraToCenterDistance,this.screenRightBoundary=e.width+100,this.screenBottomBoundary=e.height+100,this.gridRightBoundary=e.width+200,this.gridBottomBoundary=e.height+200,this.perspectiveRatioCutoff=.6}placeCollisionBox(e,t,n,r,i,a,o,s,c,l,u,d,f=0,p=!0){let m=e.anchorPointX+s[0],h=e.anchorPointY+s[1],g=this.projectAndGetPerspectiveRatio(m,h,i,qE(l,m,h,f,p),d),_=n*g.perspectiveRatio,v;if(!a&&!o){let t=g.x+(u?u.x*_:0),n=g.y+(u?u.y*_:0);v={allPointsOccluded:!1,box:[t+e.x1*_,n+e.y1*_,t+e.x2*_,n+e.y2*_]}}else v=this._projectCollisionBox(e,_,r,i,a,o,s,g,l,u,d,f,p);let[y,b,x,S]=v.box,C=a?v.allPointsOccluded:g.isOccluded,w=C;return w||=g.perspectiveRatio=1;e--)f.push(a.path[e]);for(let e=1;ee.signedDistanceFromCamera<=0)?[]:e.map(e=>e.point)}let h=[];if(f.length>0){let e=f[0].clone(),t=f[0].clone();for(let n=1;n=n.x&&t.x<=r.x&&e.y>=n.y&&t.y<=r.y?[f]:t.xr.x||t.yr.y?[]:Ov([f],n.x,n.y,r.x,r.y)}for(let n of h){i.reset(n,t*.25);let r=0;r=i.length<=.5*t?1:Math.ceil(i.paddedLength/p)+1;for(let n=0;n=this.screenRightBoundary||r<100||t>this.screenBottomBoundary}isInsideGrid(e,t,n,r){return n>=0&&e=0&&tthis.projectAndGetPerspectiveRatio(e.x,e.y,r,qE(c,e.x,e.y,d,f),u));j=e.some(e=>!e.isOccluded),A=e.map(e=>new k(e.x,e.y))}else j=!0;return{box:Pt(A),allPointsOccluded:!j}}},TD=class{constructor(e,t,n,r){this.opacity=e?Math.max(0,Math.min(1,e.opacity+(e.placed?t:-t))):r&&n?1:0,this.placed=n}isHidden(){return this.opacity===0&&!this.placed}},ED=class{constructor(e,t,n,r,i){this.text=new TD(e?e.text:null,t,n,i),this.icon=new TD(e?e.icon:null,t,r,i)}isHidden(){return this.text.isHidden()&&this.icon.isHidden()}},DD=class{constructor(e,t,n){this.text=e,this.icon=t,this.skipFade=n}},OD=class{constructor(e,t,n,r,i){this.bucketInstanceId=e,this.featureIndex=t,this.sourceLayerIndex=n,this.bucketIndex=r,this.tileID=i}},kD=class{constructor(e){this.crossSourceCollisions=e,this.maxGroupID=0,this.collisionGroups={}}get(e){if(this.crossSourceCollisions)return{ID:0,predicate:null};if(!this.collisionGroups[e]){let t=++this.maxGroupID;this.collisionGroups[e]={ID:t,predicate:e=>e.collisionGroupID===t}}return this.collisionGroups[e]}};function AD(e,t,n,r,i){let{horizontalAlign:a,verticalAlign:o}=K_(e),s=-(a-.5)*t,c=-(o-.5)*n;return new k(s+r[0]*i,c+r[1]*i)}var jD=$h.members.find(e=>e.name===`crossTileID`).offset/4,MD=class{constructor(e,t,n,r,i){this.transform=e.clone(),this.terrain=t,this.collisionIndex=new wD(this.transform),this.placements={},this.opacities={},this.variableOffsets={},this.stale=!1,this.commitTime=0,this.fadeDuration=n,this.retainedQueryData={},this.collisionGroups=new kD(r),this.collisionCircleArrays={},this.collisionBoxArrays=new Map,this.lastOpacityInputs=new WeakMap,this.prevPlacement=i,i&&(i.prevPlacement=void 0),this.placedOrientations={}}_getTerrainElevationFunc(e){let t=this.terrain;if(t)return(n,r)=>t.getElevation(e,n,r)}getBucketParts(e,t,n,r){let i=n.getBucket(t),a=n.latestFeatureIndex;if(!i||!a||t.id!==i.layerIds[0])return;let o=n.collisionBoxArray,s=i.layers[0].layout,c=i.layers[0].paint,l=2**(this.transform.zoom-n.tileID.overscaledZ),u=n.tileSize/L,d=n.tileID.toUnwrapped(),f=s.get(`text-rotation-alignment`)===`map`,p=_t(n,1,this.transform.zoom),m=wt(this.collisionIndex.transform,n,c.get(`text-translate`),c.get(`text-translate-anchor`)),h=wt(this.collisionIndex.transform,n,c.get(`icon-translate`),c.get(`icon-translate-anchor`)),g=eD(f,this.transform,p);this.retainedQueryData[i.bucketInstanceId]=new OD(i.bucketInstanceId,a,i.sourceLayerIndex,i.index,n.tileID);let _={bucket:i,layout:s,translationText:m,translationIcon:h,unwrappedTileID:d,pitchedLabelPlaneMatrix:g,scale:l,textPixelRatio:u,holdingForFade:n.holdingForSymbolFade(),collisionBoxArray:o,partiallyEvaluatedTextSize:_v(i.textSizeData,this.transform.zoom),collisionGroup:this.collisionGroups.get(i.sourceID)};if(r)for(let t of i.sortKeyRanges){let{sortKey:n,symbolInstanceStart:r,symbolInstanceEnd:i}=t;e.push({sortKey:n,symbolInstanceStart:r,symbolInstanceEnd:i,parameters:_})}else e.push({symbolInstanceStart:0,symbolInstanceEnd:i.symbolInstances.length,parameters:_})}attemptAnchorPlacement(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g,_,v,y,b,x){let S=Hv[e.textAnchor],C=[e.textOffset0,e.textOffset1],w=AD(S,n,r,C,i),T=this.collisionIndex.placeCollisionBox(t,d,s,c,l,o,a,h,u.predicate,v,w,y,b,x);if((!_||this.collisionIndex.placeCollisionBox(_,d,s,c,l,o,a,g,u.predicate,v,w,y,b,x).placeable)&&T.placeable){let e;if(this.prevPlacement?.variableOffsets[f.crossTileID]&&this.prevPlacement?.placements[f.crossTileID]?.text&&(e=this.prevPlacement.variableOffsets[f.crossTileID].anchor),f.crossTileID===0)throw Error(`symbolInstance.crossTileID can't be 0`);return this.variableOffsets[f.crossTileID]={textOffset:C,width:n,height:r,anchor:S,textBoxScale:i,prevAnchor:e},this.markUsedJustification(p,S,f,m),p.allowVerticalPlacement&&(this.markUsedOrientation(p,m,f),this.placedOrientations[f.crossTileID]=m),{shift:w,placedGlyphBoxes:T}}}placeLayerBucketPart(e,t,n){let{bucket:r,layout:i,translationText:a,translationIcon:o,unwrappedTileID:s,pitchedLabelPlaneMatrix:c,textPixelRatio:l,holdingForFade:u,collisionBoxArray:d,partiallyEvaluatedTextSize:f,collisionGroup:p}=e.parameters,m=i.get(`text-optional`),h=i.get(`icon-optional`),g=ty(i,`text-overlap`,`text-allow-overlap`),_=g===`always`,v=ty(i,`icon-overlap`,`icon-allow-overlap`),y=v===`always`,b=i.get(`text-rotation-alignment`)===`map`,x=i.get(`text-pitch-alignment`)===`map`,S=i.get(`icon-text-fit`)!==`none`,C=i.get(`symbol-z-order`)===`viewport-y`,w=i.get(`symbol-height-anchor`)===`ground`,T=_&&(y||!r.hasIconData()||h),E=y&&(_||!r.hasTextData()||m);!r.collisionArrays&&d&&r.deserializeCollisionBoxes(d);let D=this.retainedQueryData[r.bucketInstanceId].tileID,O=this._getTerrainElevationFunc(D),k=this.transform.getFastPathSimpleProjectionMatrix(D),A=(e,d,y)=>{if(t[e.crossTileID])return;if(u){this.placements[e.crossTileID]=new DD(!1,!1,!1);return}let C=e.heightOffset,A=!1,j=!1,M=!0,ee=null,te={box:null,placeable:!1,offscreen:null,occluded:!1},N={box:null,placeable:!1,offscreen:null},ne=null,re=null,ie=null,ae=0,oe=0,se=0;d.textFeatureIndex?ae=d.textFeatureIndex:e.useRuntimeCollisionCircles&&(ae=e.featureIndex),d.verticalTextFeatureIndex&&(oe=d.verticalTextFeatureIndex);let ce=d.textBox;if(ce){let t=t=>{let n=1;if(r.allowVerticalPlacement&&!t&&this.prevPlacement){let t=this.prevPlacement.placedOrientations[e.crossTileID];t&&(this.placedOrientations[e.crossTileID]=t,n=t,this.markUsedOrientation(r,n,e))}return n},i=(t,n)=>{if(r.allowVerticalPlacement&&e.numVerticalGlyphVertices>0&&d.verticalTextBox){for(let e of r.writingModes)if(e===2?(te=n(),N=te):te=t(),te?.placeable)break}else te=t()},c=e.textAnchorOffsetStartIndex,u=e.textAnchorOffsetEndIndex;if(u===c){let n=(t,n)=>{let i=this.collisionIndex.placeCollisionBox(t,g,l,D,s,x,b,a,p.predicate,O,void 0,k,C,w);return i?.placeable&&(this.markUsedOrientation(r,n,e),this.placedOrientations[e.crossTileID]=n),i};i(()=>n(ce,1),()=>{let t=d.verticalTextBox;return r.allowVerticalPlacement&&e.numVerticalGlyphVertices>0&&t?n(t,2):{box:null,offscreen:null}}),t(te?.placeable)}else{let f=Hv[this.prevPlacement?.variableOffsets[e.crossTileID]?.anchor],m=(t,i,d)=>{let m=t.x2-t.x1,h=t.y2-t.y1,_=e.textBoxScale,y=S&&v===`never`?i:null,T=null,E=g===`never`?1:2,j=`never`;f&&E++;for(let n=0;nm(ce,d.iconBox,1),()=>{let t=d.verticalTextBox,n=te?.placeable;return r.allowVerticalPlacement&&!n&&e.numVerticalGlyphVertices>0&&t?m(t,d.verticalIconBox,2):{box:null,occluded:!0,offscreen:null}}),te&&(A=te.placeable,M=te.offscreen);let h=t(te?.placeable);if(!A&&this.prevPlacement){let t=this.prevPlacement.variableOffsets[e.crossTileID];t&&(this.variableOffsets[e.crossTileID]=t,this.markUsedJustification(r,t.anchor,e,h))}}}if(ne=te,A=ne?.placeable,M=ne?.offscreen,e.useRuntimeCollisionCircles&&e.centerJustifiedTextSymbolIndex>=0){let t=r.text.placedSymbolArray.get(e.centerJustifiedTextSymbolIndex),o=gv(r.textSizeData,f,t),l=i.get(`text-padding`),u=e.collisionCircleDiameter;re=this.collisionIndex.placeCollisionCircles(g,t,r.lineVertexArray,r.glyphOffsetArray,o,s,c,n,x,p.predicate,u,l,a,O),re.circles.length&&re.collisionDetected&&!n&&$t(`Collisions detected, but collision boxes are not shown`),A=_||re.circles.length>0&&!re.collisionDetected,M&&=re.offscreen}if(d.iconFeatureIndex&&(se=d.iconFeatureIndex),d.iconBox){let e=e=>this.collisionIndex.placeCollisionBox(e,v,l,D,s,x,b,o,p.predicate,O,S&&ee?ee:void 0,k,C,w);N&&N.placeable&&d.verticalIconBox?(ie=e(d.verticalIconBox),j=ie.placeable):(ie=e(d.iconBox),j=ie.placeable),M&&=ie.offscreen}let le=m||e.numHorizontalGlyphVertices===0&&e.numVerticalGlyphVertices===0,ue=h||e.numIconVertices===0;!le&&!ue?j=A=j&&A:ue?le||(j&&=A):A=j&&A;let de=A&&ne.placeable,fe=j&&ie.placeable;if(de&&(N&&N.placeable&&oe?this.collisionIndex.insertCollisionBox(ne.box,g,i.get(`text-ignore-placement`),r.bucketInstanceId,oe,p.ID):this.collisionIndex.insertCollisionBox(ne.box,g,i.get(`text-ignore-placement`),r.bucketInstanceId,ae,p.ID)),fe&&this.collisionIndex.insertCollisionBox(ie.box,v,i.get(`icon-ignore-placement`),r.bucketInstanceId,se,p.ID),re&&A&&this.collisionIndex.insertCollisionCircles(re.circles,g,i.get(`text-ignore-placement`),r.bucketInstanceId,ae,p.ID),n&&this.storeCollisionData(r.bucketInstanceId,y,d,ne,ie,re),e.crossTileID===0)throw Error(`symbolInstance.crossTileID can't be 0`);if(r.bucketInstanceId===0)throw Error(`bucket.bucketInstanceId can't be 0`);let pe=(A||T)&&!ne?.occluded,me=(j||E)&&!ie?.occluded;this.placements[e.crossTileID]=new DD(pe,me,M||r.justReloaded),t[e.crossTileID]=!0};if(C){if(e.symbolInstanceStart!==0)throw Error(`bucket.bucketInstanceId should be 0`);let t=r.getSortedSymbolIndexes(-this.transform.bearingInRadians);for(let e=t.length-1;e>=0;--e){let n=t[e];A(r.symbolInstances.get(n),r.collisionArrays[n],n)}}else for(let t=e.symbolInstanceStart;t=0&&(a>=0&&t!==a?e.text.placedSymbolArray.get(t).crossTileID=0:e.text.placedSymbolArray.get(t).crossTileID=n.crossTileID)}markUsedOrientation(e,t,n){let r=t===1||t===3?t:0,i=t===2?t:0,a=[n.leftJustifiedTextSymbolIndex,n.centerJustifiedTextSymbolIndex,n.rightJustifiedTextSymbolIndex];for(let t of a)e.text.placedSymbolArray.get(t).placedOrientation=r;n.verticalPlacedTextSymbolIndex&&(e.text.placedSymbolArray.get(n.verticalPlacedTextSymbolIndex).placedOrientation=i)}commit(e){this.commitTime=e,this.zoomAtLastRecencyCheck=this.transform.zoom;let t=this.prevPlacement,n=!1;this.prevZoomAdjustment=t?t.zoomAdjustment(this.transform.zoom):0;let r=t?t.symbolFadeChange(e):1,i=t?t.opacities:{},a=t?t.variableOffsets:{},o=t?t.placedOrientations:{};for(let e in this.placements){let t=this.placements[e],a=i[e];a?(this.opacities[e]=new ED(a,r,t.text,t.icon),n||=t.text!==a.text.placed,n||=t.icon!==a.icon.placed):(this.opacities[e]=new ED(null,r,t.text,t.icon,t.skipFade),n||=t.text||t.icon)}for(let e in i){let t=i[e];if(!this.opacities[e]){let i=new ED(t,r,!1,!1);i.isHidden()||(this.opacities[e]=i,n||=t.text.placed,n||=t.icon.placed)}}for(let e in a)!this.variableOffsets[e]&&this.opacities[e]&&!this.opacities[e].isHidden()&&(this.variableOffsets[e]=a[e]);for(let e in o)!this.placedOrientations[e]&&this.opacities[e]&&!this.opacities[e].isHidden()&&(this.placedOrientations[e]=o[e]);if(t&&t.lastPlacementChangeTime===void 0)throw Error(`Last placement time for previous placement is not defined`);n?this.lastPlacementChangeTime=e:typeof this.lastPlacementChangeTime!=`number`&&(this.lastPlacementChangeTime=t?t.lastPlacementChangeTime:e)}updateLayerOpacities(e,t){let n={};for(let r of t){let t=r.getBucket(e);if(!t||!r.latestFeatureIndex||e.id!==t.layerIds[0])continue;let{duplicates:i,changed:a}=this._markDuplicates(t,n),o=!!t.hasDebugData()||t.bucketInstanceId in this.collisionCircleArrays;(a||o)&&this.updateBucketOpacities(t,r.tileID,i,r.collisionBoxArray),t.sortFeatures(-this.transform.bearingInRadians),this.retainedQueryData[t.bucketInstanceId]&&(this.retainedQueryData[t.bucketInstanceId].featureSortOrder=t.featureSortOrder)}}_markDuplicates(e,t){let n=e.symbolInstances.length,r=this.lastOpacityInputs.get(e),i=!1;r||(r={crossTileIDs:Array(n).fill(0),duplicates:Array(n).fill(!1)},this.lastOpacityInputs.set(e,r),i=!0);let{crossTileIDs:a,duplicates:o}=r,s=e.symbolInstances.uint32,c=e.symbolInstances.bytesPerElement/4;for(let e=0;e{for(let r=0;r0||a>0,v=r.numIconVertices>0,y=this.placedOrientations[r.crossTileID],b=y===2,x=y===1||y===3;if(_){let t=RD(g.text),n=b?0:t;m(e.text,i,n);let o=x?0:t;m(e.text,a,o);let s=g.text.isHidden(),c=[r.rightJustifiedTextSymbolIndex,r.centerJustifiedTextSymbolIndex,r.leftJustifiedTextSymbolIndex];for(let t of c)t>=0&&(e.text.placedSymbolArray.get(t).hidden=s||b?1:0);r.verticalPlacedTextSymbolIndex>=0&&(e.text.placedSymbolArray.get(r.verticalPlacedTextSymbolIndex).hidden=s||x?1:0);let l=this.variableOffsets[r.crossTileID];l&&this.markUsedJustification(e,l.anchor,r,y);let u=this.placedOrientations[r.crossTileID];u&&(this.markUsedJustification(e,`left`,r,u),this.markUsedOrientation(e,u,r))}if(v){let t=RD(g.icon),n=!(f&&r.verticalPlacedIconSymbolIndex&&b);if(r.placedIconSymbolIndex>=0){let i=n?t:0;m(e.icon,r.numIconVertices,i),e.icon.placedSymbolArray.get(r.placedIconSymbolIndex).hidden=g.icon.isHidden()}if(r.verticalPlacedIconSymbolIndex>=0){let i=n?0:t;m(e.icon,r.numVerticalIconVertices,i),e.icon.placedSymbolArray.get(r.verticalPlacedIconSymbolIndex).hidden=g.icon.isHidden()}}let S=h?.has(t)?h.get(t):{text:null,icon:null};if(e.hasIconCollisionBoxData()||e.hasTextCollisionBoxData()){let n=e.collisionArrays[t];if(n){let t=new k(0,0);if(n.textBox||n.verticalTextBox){let r=!0;if(l){let e=this.variableOffsets[s];e?(t=AD(e.anchor,e.width,e.height,e.textOffset,e.textBoxScale),u&&t._rotate(d?-this.transform.bearingInRadians:this.transform.bearingInRadians)):r=!1}if(n.textBox||n.verticalTextBox){let i;n.textBox&&(i=b),n.verticalTextBox&&(i=x),ND(e.textCollisionBox.collisionVertexArray,g.text.placed,!r||i,S.text,t.x,t.y)}}if(n.iconBox||n.verticalIconBox){let r=!(x||!n.verticalIconBox),i;n.iconBox&&(i=r),n.verticalIconBox&&(i=!r),ND(e.iconCollisionBox.collisionVertexArray,g.icon.placed,i,S.icon,f?t.x:0,f?t.y:0)}}}}if(e.hasTextData()&&e.text.opacityVertexBuffer&&e.text.opacityVertexBuffer.updateData(e.text.opacityVertexArray),e.hasIconData()&&e.icon.opacityVertexBuffer&&e.icon.opacityVertexBuffer.updateData(e.icon.opacityVertexArray),e.hasIconCollisionBoxData()&&e.iconCollisionBox.collisionVertexBuffer&&e.iconCollisionBox.collisionVertexBuffer.updateData(e.iconCollisionBox.collisionVertexArray),e.hasTextCollisionBoxData()&&e.textCollisionBox.collisionVertexBuffer&&e.textCollisionBox.collisionVertexBuffer.updateData(e.textCollisionBox.collisionVertexArray),e.text.opacityVertexArray.length!==e.text.layoutVertexArray.length/4)throw Error(`bucket.text.opacityVertexArray.length (= ${e.text.opacityVertexArray.length}) !== bucket.text.layoutVertexArray.length (= ${e.text.layoutVertexArray.length}) / 4`);if(e.icon.opacityVertexArray.length!==e.icon.layoutVertexArray.length/4)throw Error(`bucket.icon.opacityVertexArray.length (= ${e.icon.opacityVertexArray.length}) !== bucket.icon.layoutVertexArray.length (= ${e.icon.layoutVertexArray.length}) / 4`);e.bucketInstanceId in this.collisionCircleArrays&&(e.collisionCircleArray=this.collisionCircleArrays[e.bucketInstanceId],delete this.collisionCircleArrays[e.bucketInstanceId])}symbolFadeChange(e){return this.fadeDuration===0?1:(e-this.commitTime)/this.fadeDuration+this.prevZoomAdjustment}zoomAdjustment(e){return Math.max(0,(this.transform.zoom-e)/1.5)}hasTransitions(e){return this.stale||e-this.lastPlacementChangeTimee}setStale(){this.stale=!0}};function ND(e,t,n,r,i,a){(!r||r.length===0)&&(r=[0,0,0,0]);let o=r[0]-100,s=r[1]-100,c=r[2]-100,l=r[3]-100;e.emplaceBack(+!!t,+!!n,i||0,a||0,o,s),e.emplaceBack(+!!t,+!!n,i||0,a||0,c,s),e.emplaceBack(+!!t,+!!n,i||0,a||0,c,l),e.emplaceBack(+!!t,+!!n,i||0,a||0,o,l)}var PD=2**25,FD=2**24,ID=2**17,LD=2**16;function RD(e){if(e.opacity===0&&!e.placed)return 0;if(e.opacity===1&&e.placed)return zD;let t=+!!e.placed,n=Math.floor(e.opacity*127);return n*PD+t*FD+n*ID+t*LD+n*512+t*256+n*2+t}var zD=4294967295,BD=class{constructor(e){this._sortAcrossTiles=e.layout.get(`symbol-z-order`)!==`viewport-y`&&!e.layout.get(`symbol-sort-key`).isConstant(),this._currentTileIndex=0,this._currentPartIndex=0,this._seenCrossTileIDs={},this._bucketParts=[]}continuePlacement(e,t,n,r,i){let a=this._bucketParts;for(;this._currentTileIndexe.sortKey-t.sortKey));this._currentPartIndex!this._forceFullPlacement&&Fn()-r>2;for(;this._currentPlacementIndex>=0;){let r=t[e[this._currentPlacementIndex]],a=this.placement.collisionIndex.transform.zoom;if(gy(r)&&r.layout&&(!r.minzoom||r.minzoom<=a)&&(!r.maxzoom||r.maxzoom>a)){if(this._inProgressLayer||=new BD(r),this._inProgressLayer.continuePlacement(n[r.source],this.placement,this._showCollisionBoxes,r,i))return;delete this._inProgressLayer}this._currentPlacementIndex--}this._done=!0}commit(e){return this.placement.commit(e),this.placement}},HD=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],UD=new Uint32Array(96),WD=class e{static from(t){if(!t||t.byteLength===void 0||t.buffer)throw Error(`Data must be an instance of ArrayBuffer or SharedArrayBuffer.`);let[n,r]=new Uint8Array(t,0,2);if(n!==219)throw Error(`Data does not appear to be in a KDBush format.`);let i=r>>4;if(i!==1)throw Error(`Got v${i} data when expected v1.`);let a=HD[r&15];if(!a)throw Error(`Unrecognized array type.`);let[o]=new Uint16Array(t,2,1),[s]=new Uint32Array(t,4,1);return new e(s,o,a,void 0,t)}constructor(e,t=64,n=Float64Array,r=ArrayBuffer,i){if(isNaN(e)||e<0)throw Error(`Unexpected numItems value: ${e}.`);this.numItems=+e,this.nodeSize=Math.min(Math.max(+t,2),65535),this.ArrayType=n,this.IndexArrayType=e<65536?Uint16Array:Uint32Array;let a=HD.indexOf(this.ArrayType),o=e*2*this.ArrayType.BYTES_PER_ELEMENT,s=e*this.IndexArrayType.BYTES_PER_ELEMENT,c=(8-s%8)%8;if(a<0)throw Error(`Unexpected typed array class: ${n}.`);if(i)this.data=i,this.ids=new this.IndexArrayType(i,8,e),this.coords=new n(i,8+s+c,e*2),this._pos=e*2,this._finished=!0;else{let i=this.data=new r(8+o+s+c);this.ids=new this.IndexArrayType(i,8,e),this.coords=new n(i,8+s+c,e*2),this._pos=0,this._finished=!1,new Uint8Array(i,0,2).set([219,16+a]),new Uint16Array(i,2,1)[0]=t,new Uint32Array(i,4,1)[0]=e}}add(e,t){let n=this._pos>>1;return this.ids[n]=n,this.coords[this._pos++]=e,this.coords[this._pos++]=t,n}finish(){let e=this._pos>>1;if(e!==this.numItems)throw Error(`Added ${e} items when expected ${this.numItems}.`);return GD(this.ids,this.coords,this.nodeSize,0,this.numItems-1,0),this._finished=!0,this}range(e,t,n,r){if(!this._finished)throw Error(`Data not yet indexed - call index.finish().`);let{ids:i,coords:a,nodeSize:o}=this;UD[0]=0,UD[1]=i.length-1,UD[2]=0;let s=3,c=[];for(;s>0;){let l=UD[--s],u=UD[--s],d=UD[--s];if(u-d<=o){for(let o=d;o<=u;o++){let s=a[2*o],l=a[2*o+1];s>=e&&s<=n&&l>=t&&l<=r&&c.push(i[o])}continue}let f=d+u>>1,p=a[2*f],m=a[2*f+1];p>=e&&p<=n&&m>=t&&m<=r&&c.push(i[f]),(l===0?e<=p:t<=m)&&(UD[s++]=d,UD[s++]=f-1,UD[s++]=1-l),(l===0?n>=p:r>=m)&&(UD[s++]=f+1,UD[s++]=u,UD[s++]=1-l)}return c}within(e,t,n){let r=[];return this.withinInto(e,t,n,r),r}withinInto(e,t,n,r){if(!this._finished)throw Error(`Data not yet indexed - call index.finish().`);let{ids:i,coords:a,nodeSize:o}=this;UD[0]=0,UD[1]=i.length-1,UD[2]=0;let s=3,c=0,l=n*n;for(;s>0;){let u=UD[--s],d=UD[--s],f=UD[--s];if(d-f<=o){for(let n=f;n<=d;n++)YD(a[2*n],a[2*n+1],e,t)<=l&&(r[c++]=i[n]);continue}let p=f+d>>1,m=a[2*p],h=a[2*p+1];YD(m,h,e,t)<=l&&(r[c++]=i[p]),(u===0?e-n<=m:t-n<=h)&&(UD[s++]=f,UD[s++]=p-1,UD[s++]=1-u),(u===0?e+n>=m:t+n>=h)&&(UD[s++]=p+1,UD[s++]=d,UD[s++]=1-u)}return c}};function GD(e,t,n,r,i,a){if(i-r<=n)return;let o=r+i>>1;KD(e,t,o,r,i,a),GD(e,t,n,r,o-1,1-a),GD(e,t,n,o+1,i,1-a)}function KD(e,t,n,r,i,a){for(;i>r;){if(i-r>600){let o=i-r+1,s=n-r+1,c=Math.log(o),l=.5*Math.exp(2*c/3),u=.5*Math.sqrt(c*l*(o-l)/o)*(s-o/2<0?-1:1);KD(e,t,n,Math.max(r,Math.floor(n-s*l/o+u)),Math.min(i,Math.floor(n+(o-s)*l/o+u)),a)}let o=t[2*n+a],s=r,c=i;for(qD(e,t,r,n),t[2*i+a]>o&&qD(e,t,r,i);so;)c--}t[2*r+a]===o?qD(e,t,r,c):(c++,qD(e,t,c,i)),c<=n&&(r=c+1),n<=c&&(i=c-1)}}function qD(e,t,n,r){JD(e,n,r),JD(t,2*n,2*r),JD(t,2*n+1,2*r+1)}function JD(e,t,n){let r=e[t];e[t]=e[n],e[n]=r}function YD(e,t,n,r){let i=e-n,a=t-r;return i*i+a*a}var XD=512/L/2,ZD=class{constructor(e,t,n){this.tileID=e,this.bucketInstanceId=n,this._symbolsByKey={};let r=new Map;for(let e=0;e({x:Math.floor(e.anchorX*XD),y:Math.floor(e.anchorY*XD)})),crossTileIDs:t.map(e=>e.crossTileID)};if(n.positions.length>128){let e=new WD(n.positions.length,16,Uint16Array);for(let{x:t,y:r}of n.positions)e.add(t,r);e.finish(),delete n.positions,n.index=e}this._symbolsByKey[e]=n}}getScaledCoordinates(e,t){let{x:n,y:r,z:i}=this.tileID.canonical,{x:a,y:o,z:s}=t.canonical,c=XD/2**(s-i),l=(a*L+e.anchorX)*c,u=(o*L+e.anchorY)*c,d=n*L*XD,f=r*L*XD;return{x:Math.floor(l-d),y:Math.floor(u-f)}}findMatches(e,t,n){let r=this.tileID.canonical.ze)}},QD=class{constructor(){this.maxCrossTileID=0}generate(){return++this.maxCrossTileID}},$D=class{constructor(){this.indexes={},this.usedCrossTileIDs={},this.lng=0}handleWrapJump(e){let t=Math.round((e-this.lng)/360);if(t!==0)for(let e in this.indexes){let n=this.indexes[e],r={};for(let e in n){let i=n[e];i.tileID=i.tileID.unwrapTo(i.tileID.wrap+t),r[i.tileID.key]=i}this.indexes[e]=r}this.lng=e}addBucket(e,t,n){if(this.indexes[e.overscaledZ]?.[e.key]){if(this.indexes[e.overscaledZ][e.key].bucketInstanceId===t.bucketInstanceId)return!1;this.removeBucketCrossTileIDs(e.overscaledZ,this.indexes[e.overscaledZ][e.key])}for(let e=0;ee.overscaledZ)for(let n in i){let a=i[n];a.tileID.isChildOf(e)&&a.findMatches(t.symbolInstances,e,r)}else{let a=i[e.scaledTo(Number(n)).key];a&&a.findMatches(t.symbolInstances,e,r)}}for(let e=0;e> 1u)/127.0,float(packedOpacity & 1u));}vec4 decode_color(const vec2 encodedColor) {return vec4(unpack_float(encodedColor[0])/255.0,unpack_float(encodedColor[1])/255.0 );}float unpack_mix_vec2(const vec2 packedValue,const float t) {return mix(packedValue[0],packedValue[1],t);}vec4 unpack_mix_color(const vec4 packedColors,const float t) {vec4 minColor=decode_color(vec2(packedColors[0],packedColors[1]));vec4 maxColor=decode_color(vec2(packedColors[2],packedColors[3]));return mix(minColor,maxColor,t);}vec2 get_pattern_pos(const vec2 pixel_coord_upper,const vec2 pixel_coord_lower,const vec2 pattern_size,const float tile_units_to_pixels,const vec2 pos) {vec2 offset=mod(mod(mod(pixel_coord_upper,pattern_size)*256.0,pattern_size)*256.0+pixel_coord_lower,pattern_size);return (tile_units_to_pixels*pos+offset)/pattern_size;}mat3 rotationMatrixFromAxisAngle(vec3 u,float angle) {float c=cos(angle);float s=sin(angle);float c2=1.0-c;return mat3(u.x*u.x*c2+ c,u.x*u.y*c2-u.z*s,u.x*u.z*c2+u.y*s,u.y*u.x*c2+u.z*s,u.y*u.y*c2+ c,u.y*u.z*c2-u.x*s,u.z*u.x*c2-u.y*s,u.z*u.y*c2+u.x*s,u.z*u.z*c2+ c );} #ifdef TERRAIN3D uniform sampler2D u_terrain;uniform highp sampler2D u_depth;layout(std140) uniform TerrainUBO {highp mat4 u_terrain_matrix;highp vec4 u_terrain_unpack;highp float u_terrain_dim;highp float u_terrain_exaggeration;}; #endif const highp vec4 bitSh=vec4(256.*256.*256.,256.*256.,256.,1.);const highp vec4 bitShifts=vec4(1.)/bitSh;highp float unpack(highp vec4 color) {return dot(color,bitShifts);}highp float depthOpacity(vec3 frag) { #ifdef TERRAIN3D highp float d=unpack(texture(u_depth,frag.xy*0.5+0.5))+0.0001-frag.z;return 1.0-max(0.0,min(1.0,-d*500.0)); #else return 1.0; #endif }float calculate_visibility(vec4 pos) { #ifdef TERRAIN3D vec3 frag=pos.xyz/pos.w;highp float d=depthOpacity(frag);if (d > 0.95) return 1.0;return (d+depthOpacity(frag+vec3(0.0,0.01,0.0)))/2.0; #else return 1.0; #endif }float ele(ivec2 pos) { #ifdef TERRAIN3D vec4 rgb=(texelFetch(u_terrain,pos,0)*255.0)*u_terrain_unpack;return rgb.r+rgb.g+rgb.b-u_terrain_unpack.a; #else return 0.0; #endif }float get_elevation(vec2 pos) { #ifdef TERRAIN3D #ifdef GLOBE if ((pos.y <-32767.5) || (pos.y > 32766.5)) {return 0.0;} #endif vec2 coord=(u_terrain_matrix*vec4(pos,0.0,1.0)).xy*u_terrain_dim+1.5;vec2 f=fract(coord);ivec2 c=ivec2(floor(coord));ivec2 hi=textureSize(u_terrain,0)-1;float tl=ele(clamp(c,ivec2(0),hi));float tr=ele(clamp(c+ivec2(1,0),ivec2(0),hi));float bl=ele(clamp(c+ivec2(0,1),ivec2(0),hi));float br=ele(clamp(c+ivec2(1,1),ivec2(0),hi));float elevation=mix(mix(tl,tr,f.x),mix(bl,br,f.x),f.y);return elevation*u_terrain_exaggeration; #else return 0.0; #endif }const float PI=3.141592653589793; #define PROJECTION_UBO layout(std140) uniform ProjectionUBO {highp mat4 u_projection_matrix;highp mat4 u_projection_fallback_matrix;highp vec4 u_projection_tile_mercator_coords;highp vec4 u_projection_clipping_plane;highp float u_projection_transition;highp int u_projection_clip_antimeridian;};layout(std140) uniform FrameUBO {highp vec2 u_units_to_pixels;highp vec2 u_world_size;highp float u_camera_to_center_distance;highp float u_symbol_fade_change;highp float u_aspect_ratio;highp float u_device_pixel_ratio;highp vec2 u_viewport_size;highp vec2 u_pixel_extrude_scale;highp float u_pitch;};`,rO=`uniform vec4 u_color;uniform float u_opacity;void main() {fragColor=u_color*u_opacity; #ifdef OVERDRAW_INSPECTOR fragColor=vec4(1.0); #endif }`,iO=`layout(location=0) in vec2 a_pos;void main() {gl_Position=projectTile(a_pos,a_pos);}`,aO=`uniform vec2 u_pattern_tl_a;uniform vec2 u_pattern_br_a;uniform vec2 u_pattern_tl_b;uniform vec2 u_pattern_br_b;uniform vec2 u_texsize;uniform float u_mix;uniform float u_opacity;uniform sampler2D u_image;in vec2 v_pos_a;in vec2 v_pos_b;void main() {vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(u_pattern_tl_a/u_texsize,u_pattern_br_a/u_texsize,imagecoord);vec4 color1=texture(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(u_pattern_tl_b/u_texsize,u_pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture(u_image,pos2);fragColor=mix(color1,color2,u_mix)*u_opacity; #ifdef OVERDRAW_INSPECTOR fragColor=vec4(1.0); #endif }`,oO=`uniform vec2 u_pattern_size_a;uniform vec2 u_pattern_size_b;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform float u_scale_a;uniform float u_scale_b;uniform float u_tile_units_to_pixels;layout(location=0) in vec2 a_pos;out vec2 v_pos_a;out vec2 v_pos_b;void main() {gl_Position=projectTile(a_pos,a_pos);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,u_scale_a*u_pattern_size_a,u_tile_units_to_pixels,a_pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,u_scale_b*u_pattern_size_b,u_tile_units_to_pixels,a_pos);}`,sO=`in vec3 v_data;in float v_visibility; #pragma maplibre: define highp vec4 color #pragma maplibre: define mediump float radius #pragma maplibre: define lowp float blur #pragma maplibre: define lowp float opacity #pragma maplibre: define highp vec4 stroke_color #pragma maplibre: define mediump float stroke_width #pragma maplibre: define lowp float stroke_opacity void main() { #pragma maplibre: initialize highp vec4 color #pragma maplibre: initialize mediump float radius #pragma maplibre: initialize lowp float blur #pragma maplibre: initialize lowp float opacity #pragma maplibre: initialize highp vec4 stroke_color #pragma maplibre: initialize mediump float stroke_width #pragma maplibre: initialize lowp float stroke_opacity vec2 extrude=v_data.xy;float extrude_length=length(extrude);float antialiased_blur=v_data.z;float opacity_t=smoothstep(0.0,antialiased_blur,extrude_length-1.0);float color_t=stroke_width < 0.01 ? 0.0 : smoothstep(antialiased_blur,0.0,extrude_length-radius/(radius+stroke_width));fragColor=v_visibility*opacity_t*mix(color*opacity,stroke_color*stroke_opacity,color_t);const float epsilon=0.5/255.0;if (fragColor.r < epsilon && fragColor.g < epsilon && fragColor.b < epsilon && fragColor.a < epsilon) {discard;} #ifdef OVERDRAW_INSPECTOR fragColor=vec4(1.0); #endif }`,cO=`uniform bool u_scale_with_map;uniform bool u_pitch_with_map;uniform vec2 u_extrude_scale;uniform highp float u_globe_extrude_scale;uniform vec2 u_translate;layout(location=0) in ivec2 a_pos;out vec3 v_data;out float v_visibility; #pragma maplibre: define highp vec4 color #pragma maplibre: define mediump float radius #pragma maplibre: define lowp float blur #pragma maplibre: define lowp float opacity #pragma maplibre: define highp vec4 stroke_color #pragma maplibre: define mediump float stroke_width #pragma maplibre: define lowp float stroke_opacity void main(void) { #pragma maplibre: initialize highp vec4 color #pragma maplibre: initialize mediump float radius #pragma maplibre: initialize lowp float blur #pragma maplibre: initialize lowp float opacity #pragma maplibre: initialize highp vec4 stroke_color #pragma maplibre: initialize mediump float stroke_width #pragma maplibre: initialize lowp float stroke_opacity ivec2 pos_raw=a_pos+32768;vec2 extrude=vec2(pos_raw & 7)/7.0*2.0-1.0;vec2 circle_center=vec2(pos_raw >> 3)+u_translate;float ele=get_elevation(circle_center);v_visibility=calculate_visibility(projectTileWithElevation(circle_center,ele));if (u_pitch_with_map) { #ifdef GLOBE vec3 center_vector=projectToSphere(circle_center); #endif float angle_scale=u_globe_extrude_scale;vec2 corner_position=circle_center;if (u_scale_with_map) {angle_scale*=(radius+stroke_width);corner_position+=extrude*u_extrude_scale*(radius+stroke_width);} else { #ifdef GLOBE vec4 projected_center=interpolateProjection(circle_center,center_vector,ele); #else vec4 projected_center=projectTileWithElevation(circle_center,ele); #endif corner_position+=extrude*u_extrude_scale*(radius+stroke_width)*(projected_center.w/u_camera_to_center_distance);angle_scale*=(radius+stroke_width)*(projected_center.w/u_camera_to_center_distance);} #ifdef GLOBE vec2 angles=extrude*angle_scale;vec3 corner_vector=globeRotateVector(center_vector,angles);gl_Position=interpolateProjection(corner_position,corner_vector,ele); #else gl_Position=projectTileWithElevation(corner_position,ele); #endif } else {gl_Position=projectTileWithElevation(circle_center,ele);if (gl_Position.z/gl_Position.w > 1.0) {gl_Position.xy=vec2(10000.0);}if (u_scale_with_map) {gl_Position.xy+=extrude*(radius+stroke_width)*u_extrude_scale*u_camera_to_center_distance;} else {gl_Position.xy+=extrude*(radius+stroke_width)*u_extrude_scale*gl_Position.w;}}float antialiasblur=-max(1.0/u_device_pixel_ratio/(radius+stroke_width),blur);v_data=vec3(extrude.x,extrude.y,antialiasblur);}`,lO=`void main() {fragColor=vec4(1.0);}`,uO={prelude:dO(tO,nO),projectionMercator:dO(` void clipAntimeridian() {}`,`float projectLineThickness(float tileY) {return 1.0;}float projectCircleRadius(float tileY) {return 1.0;}vec4 projectTile(vec2 p) {vec4 result=u_projection_matrix*vec4(p,0.0,1.0);return result;}vec4 projectTile(vec2 p,vec2 rawPos) {vec4 result=u_projection_matrix*vec4(p,0.0,1.0);if (rawPos.y <-32767.5 || rawPos.y > 32766.5) {result.z=-10000000.0;}return result;}vec4 projectTileWithElevation(vec2 posInTile,float elevation) {return u_projection_matrix*vec4(posInTile,elevation,1.0);}vec4 projectTileFor3D(vec2 posInTile,float elevation) {return projectTileWithElevation(posInTile,elevation);}`),projectionGlobe:dO(`in highp float v_projection_tile_x;void clipAntimeridian() {if (u_projection_clip_antimeridian !=0 && (v_projection_tile_x < 0.0 || v_projection_tile_x >=8192.0)) {discard;}}`,`#define GLOBE_RADIUS 6371008.8 #ifndef PROJECTION_UBO uniform highp vec4 u_projection_tile_mercator_coords;uniform highp vec4 u_projection_clipping_plane;uniform highp float u_projection_transition;uniform mat4 u_projection_fallback_matrix; #endif out highp float v_projection_tile_x;vec3 globeRotateVector(vec3 vec,vec2 angles) {vec3 axisRight=vec3(vec.z,0.0,-vec.x);vec3 axisUp=cross(axisRight,vec);axisRight=normalize(axisRight);axisUp=normalize(axisUp);vec2 t=tan(angles);return normalize(vec+axisRight*t.x+axisUp*t.y);}mat3 globeGetRotationMatrix(vec3 spherePos) {vec3 axisRight=vec3(spherePos.z,0.0,-spherePos.x);vec3 axisDown=cross(axisRight,spherePos);axisRight=normalize(axisRight);axisDown=normalize(axisDown);return mat3(axisRight,axisDown,spherePos );}float circumferenceRatioAtTileY(float tileY) {float mercator_pos_y=u_projection_tile_mercator_coords.y+u_projection_tile_mercator_coords.w*tileY;float t=exp(PI-(mercator_pos_y*PI*2.0));return (2.0*t)/(t*t+1.0);}float projectLineThickness(float tileY) {float thickness=1.0/circumferenceRatioAtTileY(tileY);if (u_projection_transition < 0.999) {return mix(1.0,thickness,u_projection_transition);} else {return thickness;}}vec3 projectToSphere(vec2 translatedPos,vec2 rawPos) {vec2 mercator_pos=u_projection_tile_mercator_coords.xy+u_projection_tile_mercator_coords.zw*translatedPos;float spherical_x=mercator_pos.x*PI*2.0+PI;float t=exp(PI-(mercator_pos.y*PI*2.0));float t2=t*t;float denom=t2+1.0;float sin_sy=(t2-1.0)/denom;float cos_sy=(2.0*t)/denom;vec3 pos=vec3(sin(spherical_x)*cos_sy,sin_sy,cos(spherical_x)*cos_sy );if (rawPos.y <-32767.5) {pos=vec3(0.0,1.0,0.0);}if (rawPos.y > 32766.5) {pos=vec3(0.0,-1.0,0.0);}return pos;}vec3 projectToSphere(vec2 posInTile) {return projectToSphere(posInTile,vec2(0.0,0.0));}float globeComputeClippingZ(vec3 spherePos) {return (1.0-(dot(spherePos,u_projection_clipping_plane.xyz)+u_projection_clipping_plane.w));}vec4 interpolateProjection(vec2 posInTile,vec3 spherePos,float elevation) {v_projection_tile_x=posInTile.x;vec3 elevatedPos=spherePos*(1.0+elevation/GLOBE_RADIUS);vec4 globePosition=u_projection_matrix*vec4(elevatedPos,1.0);globePosition.z=globeComputeClippingZ(elevatedPos)*globePosition.w;if (u_projection_transition > 0.999) {return globePosition;}vec4 flatPosition=u_projection_fallback_matrix*vec4(posInTile,elevation,1.0);const float z_globeness_threshold=0.2;vec4 result=globePosition;result.z=mix(0.0,globePosition.z,clamp((u_projection_transition-z_globeness_threshold)/(1.0-z_globeness_threshold),0.0,1.0));result.xyw=mix(flatPosition.xyw,globePosition.xyw,u_projection_transition);if ((posInTile.y <-32767.5) || (posInTile.y > 32766.5)) {result=globePosition;const float poles_hidden_anim_percentage=0.02;result.z=mix(globePosition.z,100.0,pow(max((1.0-u_projection_transition)/poles_hidden_anim_percentage,0.0),8.0));}return result;}vec4 interpolateProjectionFor3D(vec2 posInTile,vec3 spherePos,float elevation) {v_projection_tile_x=posInTile.x;vec3 elevatedPos=spherePos*(1.0+elevation/GLOBE_RADIUS);vec4 globePosition=u_projection_matrix*vec4(elevatedPos,1.0);if (u_projection_transition > 0.999) {return globePosition;}vec4 fallbackPosition=u_projection_fallback_matrix*vec4(posInTile,elevation,1.0);return mix(fallbackPosition,globePosition,u_projection_transition);}vec4 projectTile(vec2 posInTile) {return interpolateProjection(posInTile,projectToSphere(posInTile),0.0);}vec4 projectTile(vec2 posInTile,vec2 rawPos) {return interpolateProjection(posInTile,projectToSphere(posInTile,rawPos),0.0);}vec4 projectTileWithElevation(vec2 posInTile,float elevation) {return interpolateProjection(posInTile,projectToSphere(posInTile),elevation);}vec4 projectTileFor3D(vec2 posInTile,float elevation) {vec3 spherePos=projectToSphere(posInTile,posInTile);return interpolateProjectionFor3D(posInTile,spherePos,elevation);}`),background:dO(rO,iO),backgroundPattern:dO(aO,oO),circle:dO(sO,cO),clippingMask:dO(lO,`layout(location=0) in vec2 a_pos;void main() {gl_Position=projectTile(a_pos,a_pos);}`),heatmap:dO(`uniform highp float u_intensity;in vec2 v_extrude; #pragma maplibre: define highp float weight #define GAUSS_COEF 0.3989422804014327 void main() { #pragma maplibre: initialize highp float weight float d=-0.5*3.0*3.0*dot(v_extrude,v_extrude);float val=weight*u_intensity*GAUSS_COEF*exp(d);fragColor=vec4(val,1.0,1.0,1.0); #ifdef OVERDRAW_INSPECTOR fragColor=vec4(1.0); #endif }`,`uniform float u_extrude_scale;uniform float u_opacity;uniform float u_intensity;uniform highp float u_globe_extrude_scale;layout(location=0) in ivec2 a_pos;out vec2 v_extrude; #pragma maplibre: define highp float weight #pragma maplibre: define mediump float radius const highp float ZERO=1.0/255.0/16.0; #define GAUSS_COEF 0.3989422804014327 void main(void) { #pragma maplibre: initialize highp float weight #pragma maplibre: initialize mediump float radius ivec2 pos_raw=a_pos+32768;vec2 unscaled_extrude=vec2(pos_raw & 7)/7.0*2.0-1.0;float S=sqrt(-2.0*log(ZERO/weight/u_intensity/GAUSS_COEF))/3.0;v_extrude=S*unscaled_extrude;vec2 extrude=v_extrude*radius*u_extrude_scale;vec2 circle_center=vec2(pos_raw >> 3); #ifdef GLOBE vec2 angles=v_extrude*radius*u_globe_extrude_scale;vec3 center_vector=projectToSphere(circle_center);vec3 corner_vector=globeRotateVector(center_vector,angles);gl_Position=interpolateProjection(circle_center+extrude,corner_vector,0.0); #else gl_Position=projectTileFor3D(circle_center+extrude,get_elevation(circle_center)); #endif }`),heatmapTexture:dO(`uniform sampler2D u_image;uniform sampler2D u_color_ramp;uniform float u_opacity;in vec2 v_pos;void main() {float t=texture(u_image,v_pos).r;vec4 color=texture(u_color_ramp,vec2(t,0.5));fragColor=color*u_opacity; #ifdef OVERDRAW_INSPECTOR fragColor=vec4(0.0); #endif }`,`uniform mat4 u_matrix;layout(location=0) in vec2 a_pos;out vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos*u_world_size,0,1);v_pos.x=a_pos.x;v_pos.y=1.0-a_pos.y;}`),collisionBox:dO(`in float v_placed;in float v_notUsed;void main() {float alpha=0.5;fragColor=vec4(1.0,0.0,0.0,1.0)*alpha;if (v_placed > 0.5) {fragColor=vec4(0.0,0.0,1.0,0.5)*alpha;}if (v_notUsed > 0.5) {fragColor*=.1;}}`,`layout(location=0) in vec2 a_anchor_pos;layout(location=1) in vec2 a_placed;layout(location=2) in vec2 a_box_real;out float v_placed;out float v_notUsed;void main() {gl_Position=projectTileWithElevation(a_anchor_pos,get_elevation(a_anchor_pos));gl_Position.xy=((a_box_real+0.5)*u_pixel_extrude_scale*2.0-1.0)*vec2(1.0,-1.0)*gl_Position.w;if (gl_Position.z/gl_Position.w < 1.1) {gl_Position.z=0.5;}v_placed=a_placed.x;v_notUsed=a_placed.y;}`),collisionCircle:dO(`in float v_radius;in vec2 v_extrude;in float v_collision;void main() {float alpha=0.5;float stroke_radius=0.9;float distance_to_center=length(v_extrude);float distance_to_edge=abs(distance_to_center-v_radius);float opacity_t=smoothstep(-stroke_radius,0.0,-distance_to_edge);vec4 color=mix(vec4(0.0,0.0,1.0,0.5),vec4(1.0,0.0,0.0,1.0),v_collision);fragColor=color*alpha*opacity_t;}`,`layout(location=0) in vec2 a_pos;layout(location=1) in float a_radius;layout(location=2) in vec2 a_flags;out float v_radius;out vec2 v_extrude;out float v_collision;void main() {float radius=a_radius;float collision=a_flags.x;float vertexIdx=a_flags.y;vec2 quadVertexOffset=vec2(mix(-1.0,1.0,float(vertexIdx >=2.0)),mix(-1.0,1.0,float(vertexIdx >=1.0 && vertexIdx <=2.0)));vec2 quadVertexExtent=quadVertexOffset*radius;float padding_factor=1.2;v_radius=radius;v_extrude=quadVertexExtent*padding_factor;v_collision=collision;gl_Position=vec4((a_pos/u_viewport_size*2.0-1.0)*vec2(1.0,-1.0),0.0,1.0)+vec4(quadVertexExtent*padding_factor/u_viewport_size*2.0,0.0,0.0);}`),colorRelief:dO(`#ifdef GL_ES precision highp float; #endif uniform sampler2D u_image;uniform vec4 u_unpack;uniform sampler2D u_elevation_stops;uniform sampler2D u_color_stops;uniform int u_color_ramp_size;uniform float u_opacity;in vec2 v_pos;float getElevation(vec2 coord) {vec4 data=texture(u_image,coord)*255.0;data.a=-1.0;return dot(data,u_unpack);}float getElevationStop(int stop) {vec4 data=texelFetch(u_elevation_stops,ivec2(stop,0),0)*255.0;data.a=-1.0;return dot(data,u_unpack);}void main() {float el=getElevation(v_pos);int r=(u_color_ramp_size-1);int l=0;float el_l=getElevationStop(l);float el_r=getElevationStop(r);while(r-l > 1){int m=(r+l)/2;float el_m=getElevationStop(m);if(el < el_m){r=m;el_r=el_m;}else {l=m;el_l=el_m;}}float x=(float(l)+(el-el_l)/(el_r-el_l)+0.5)/float(u_color_ramp_size);fragColor=u_opacity*texture(u_color_stops,vec2(x,0)); #ifdef OVERDRAW_INSPECTOR fragColor=vec4(1.0); #endif }`,`uniform vec2 u_dimension;layout(location=0) in vec2 a_pos;out vec2 v_pos;void main() {gl_Position=projectTile(a_pos,a_pos);highp vec2 epsilon=2.0/u_dimension;float scale=(u_dimension.x-4.0)/u_dimension.x;v_pos=(a_pos/8192.0)*scale+epsilon;if (a_pos.y <-32767.5) {v_pos.y=0.0;}if (a_pos.y > 32766.5) {v_pos.y=1.0;}}`),debug:dO(`uniform highp vec4 u_color;uniform sampler2D u_overlay;in vec2 v_uv;void main() {vec4 overlay_color=texture(u_overlay,v_uv);fragColor=mix(u_color,overlay_color,overlay_color.a);}`,`layout(location=0) in vec2 a_pos;out vec2 v_uv;uniform float u_overlay_scale;void main() {v_uv=a_pos/8192.0;gl_Position=projectTileWithElevation(a_pos*u_overlay_scale,get_elevation(a_pos));}`),depth:dO(lO,`layout(location=0) in vec2 a_pos;void main() { #ifdef GLOBE gl_Position=projectTileFor3D(a_pos,0.0); #else gl_Position=u_projection_matrix*vec4(a_pos,0.0,1.0); #endif }`),fill:dO(`#pragma maplibre: define highp vec4 color #pragma maplibre: define lowp float opacity void main() { #pragma maplibre: initialize highp vec4 color #pragma maplibre: initialize lowp float opacity fragColor=color*opacity; #ifdef OVERDRAW_INSPECTOR fragColor=vec4(1.0); #endif }`,`uniform vec2 u_fill_translate;layout(location=0) in vec2 a_pos; #pragma maplibre: define highp vec4 color #pragma maplibre: define lowp float opacity void main() { #pragma maplibre: initialize highp vec4 color #pragma maplibre: initialize lowp float opacity if (opacity < 0.01) {gl_Position=vec4(-2.0,-2.0,-2.0,1.0);return;}gl_Position=projectTile(a_pos+u_fill_translate,a_pos);}`),fillOutline:dO(`in vec2 v_pos; #ifdef GLOBE in float v_depth; #endif #pragma maplibre: define highp vec4 outline_color #pragma maplibre: define lowp float opacity void main() { #pragma maplibre: initialize highp vec4 outline_color #pragma maplibre: initialize lowp float opacity float dist=length(v_pos-gl_FragCoord.xy);float alpha=1.0-smoothstep(0.0,1.0,dist);fragColor=outline_color*(alpha*opacity); #ifdef GLOBE if (v_depth > 1.0) {discard;} #endif #ifdef OVERDRAW_INSPECTOR fragColor=vec4(1.0); #endif }`,`uniform vec2 u_fill_translate;layout(location=0) in vec2 a_pos;out vec2 v_pos; #ifdef GLOBE out float v_depth; #endif #pragma maplibre: define highp vec4 outline_color #pragma maplibre: define lowp float opacity void main() { #pragma maplibre: initialize highp vec4 outline_color #pragma maplibre: initialize lowp float opacity if (opacity < 0.01) {gl_Position=vec4(-2.0,-2.0,-2.0,1.0);return;}gl_Position=projectTile(a_pos+u_fill_translate,a_pos);v_pos=(gl_Position.xy/gl_Position.w+1.0)/2.0*u_world_size; #ifdef GLOBE v_depth=gl_Position.z/gl_Position.w; #endif }`),fillOutlinePattern:dO(`uniform vec2 u_texsize;uniform sampler2D u_image;uniform float u_fade;uniform bool u_sdf_pattern;in vec2 v_pos_a;in vec2 v_pos_b;in vec2 v_pos; #ifdef GLOBE in float v_depth; #endif #pragma maplibre: define lowp float opacity #pragma maplibre: define highp vec4 color #pragma maplibre: define lowp vec4 pattern_from #pragma maplibre: define lowp vec4 pattern_to void main() { #pragma maplibre: initialize lowp float opacity #pragma maplibre: initialize highp vec4 color #pragma maplibre: initialize mediump vec4 pattern_from #pragma maplibre: initialize mediump vec4 pattern_to vec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture(u_image,pos2);float dist=length(v_pos-gl_FragCoord.xy);float alpha=1.0-smoothstep(0.0,1.0,dist);if (u_sdf_pattern) {highp float sdf_edge=(256.0-64.0)/256.0;highp float sdf_gamma_a=max(fwidth(color1.a)*0.5,1.0/255.0/16.0);highp float sdf_gamma_b=max(fwidth(color2.a)*0.5,1.0/255.0/16.0);float sdf_alpha_a=smoothstep(sdf_edge-sdf_gamma_a,sdf_edge+sdf_gamma_a,color1.a);float sdf_alpha_b=smoothstep(sdf_edge-sdf_gamma_b,sdf_edge+sdf_gamma_b,color2.a);fragColor=mix(color*sdf_alpha_a,color*sdf_alpha_b,u_fade)*alpha*opacity;} else {fragColor=mix(color1,color2,u_fade)*alpha*opacity;} #ifdef GLOBE if (v_depth > 1.0) {discard;} #endif #ifdef OVERDRAW_INSPECTOR fragColor=vec4(1.0); #endif }`,`uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform vec3 u_scale;uniform vec2 u_fill_translate;layout(location=0) in vec2 a_pos;out vec2 v_pos_a;out vec2 v_pos_b;out vec2 v_pos; #ifdef GLOBE out float v_depth; #endif #pragma maplibre: define lowp float opacity #pragma maplibre: define highp vec4 color #pragma maplibre: define lowp vec4 pattern_from #pragma maplibre: define lowp vec4 pattern_to #pragma maplibre: define lowp float pixel_ratio_from #pragma maplibre: define lowp float pixel_ratio_to void main() { #pragma maplibre: initialize lowp float opacity #pragma maplibre: initialize highp vec4 color #pragma maplibre: initialize mediump vec4 pattern_from #pragma maplibre: initialize mediump vec4 pattern_to #pragma maplibre: initialize lowp float pixel_ratio_from #pragma maplibre: initialize lowp float pixel_ratio_to if (opacity < 0.01) {gl_Position=vec4(-2.0,-2.0,-2.0,1.0);return;}vec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float tileRatio=u_scale.x;float fromScale=u_scale.y;float toScale=u_scale.z;gl_Position=projectTile(a_pos+u_fill_translate,a_pos);vec2 display_size_a=(pattern_br_a-pattern_tl_a)/pixel_ratio_from;vec2 display_size_b=(pattern_br_b-pattern_tl_b)/pixel_ratio_to;v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileRatio,a_pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileRatio,a_pos);v_pos=(gl_Position.xy/gl_Position.w+1.0)/2.0*u_world_size; #ifdef GLOBE v_depth=gl_Position.z/gl_Position.w; #endif }`),fillPattern:dO(`#ifdef GL_ES precision highp float; #endif uniform vec2 u_texsize;uniform float u_fade;uniform bool u_sdf_pattern;uniform sampler2D u_image;in vec2 v_pos_a;in vec2 v_pos_b; #pragma maplibre: define lowp float opacity #pragma maplibre: define highp vec4 color #pragma maplibre: define lowp vec4 pattern_from #pragma maplibre: define lowp vec4 pattern_to void main() { #pragma maplibre: initialize lowp float opacity #pragma maplibre: initialize highp vec4 color #pragma maplibre: initialize mediump vec4 pattern_from #pragma maplibre: initialize mediump vec4 pattern_to vec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture(u_image,pos2);if (u_sdf_pattern) {highp float sdf_edge=(256.0-64.0)/256.0;highp float sdf_gamma_a=max(fwidth(color1.a)*0.5,1.0/255.0/16.0);highp float sdf_gamma_b=max(fwidth(color2.a)*0.5,1.0/255.0/16.0);float sdf_alpha_a=smoothstep(sdf_edge-sdf_gamma_a,sdf_edge+sdf_gamma_a,color1.a);float sdf_alpha_b=smoothstep(sdf_edge-sdf_gamma_b,sdf_edge+sdf_gamma_b,color2.a);fragColor=mix(color*sdf_alpha_a,color*sdf_alpha_b,u_fade)*opacity;} else {fragColor=mix(color1,color2,u_fade)*opacity;} #ifdef OVERDRAW_INSPECTOR fragColor=vec4(1.0); #endif }`,`uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform vec3 u_scale;uniform vec2 u_fill_translate;layout(location=0) in vec2 a_pos;out vec2 v_pos_a;out vec2 v_pos_b; #pragma maplibre: define lowp float opacity #pragma maplibre: define highp vec4 color #pragma maplibre: define lowp vec4 pattern_from #pragma maplibre: define lowp vec4 pattern_to #pragma maplibre: define lowp float pixel_ratio_from #pragma maplibre: define lowp float pixel_ratio_to void main() { #pragma maplibre: initialize lowp float opacity #pragma maplibre: initialize highp vec4 color #pragma maplibre: initialize mediump vec4 pattern_from #pragma maplibre: initialize mediump vec4 pattern_to #pragma maplibre: initialize lowp float pixel_ratio_from #pragma maplibre: initialize lowp float pixel_ratio_to if (opacity < 0.01) {gl_Position=vec4(-2.0,-2.0,-2.0,1.0);return;}vec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float tileZoomRatio=u_scale.x;float fromScale=u_scale.y;float toScale=u_scale.z;vec2 display_size_a=(pattern_br_a-pattern_tl_a)/pixel_ratio_from;vec2 display_size_b=(pattern_br_b-pattern_tl_b)/pixel_ratio_to;gl_Position=projectTile(a_pos+u_fill_translate,a_pos);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileZoomRatio,a_pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileZoomRatio,a_pos);}`),fillExtrusion:dO(`in vec4 v_color;void main() {fragColor=v_color; #ifdef OVERDRAW_INSPECTOR fragColor=vec4(1.0); #endif }`,`uniform vec3 u_lightcolor;uniform lowp vec3 u_lightpos;uniform lowp vec3 u_lightpos_globe;uniform lowp float u_lightintensity;uniform float u_vertical_gradient;uniform lowp float u_opacity;uniform vec2 u_fill_translate;layout(location=0) in vec2 a_pos;layout(location=1) in ivec4 a_normal_ed; #ifdef TERRAIN3D layout(location=2) in vec2 a_centroid; #endif out vec4 v_color; #pragma maplibre: define highp float base #pragma maplibre: define highp float height #pragma maplibre: define highp vec4 color void main() { #pragma maplibre: initialize highp float base #pragma maplibre: initialize highp float height #pragma maplibre: initialize highp vec4 color vec3 normal=vec3(a_normal_ed.xyz);float gradient_base=max(0.0,base);float gradient_height=max(0.0,height); #ifdef TERRAIN3D float height_terrain3d_offset=get_elevation(a_centroid);float base_terrain3d_offset=height_terrain3d_offset-(base > 0.0 ? 0.0 : 10.0); #else float height_terrain3d_offset=0.0;float base_terrain3d_offset=0.0; #endif base=max(0.0,base)+base_terrain3d_offset;height=max(0.0,height)+height_terrain3d_offset;float t=float(a_normal_ed.x & 1);float elevation=t > 0.0 ? height : base;vec2 posInTile=a_pos+u_fill_translate; #ifdef GLOBE vec3 spherePos=projectToSphere(posInTile,a_pos);gl_Position=interpolateProjectionFor3D(posInTile,spherePos,elevation); #else gl_Position=u_projection_matrix*vec4(posInTile,elevation,1.0); #endif float colorvalue=color.r*0.2126+color.g*0.7152+color.b*0.0722;v_color=vec4(0.0,0.0,0.0,1.0);vec4 ambientlight=vec4(0.03,0.03,0.03,1.0);color+=ambientlight;vec3 normalForLighting=normal/16384.0;float directional=clamp(dot(normalForLighting,u_lightpos),0.0,1.0); #ifdef GLOBE mat3 rotMatrix=globeGetRotationMatrix(spherePos);normalForLighting=rotMatrix*normalForLighting;directional=mix(directional,clamp(dot(normalForLighting,u_lightpos_globe),0.0,1.0),u_projection_transition); #endif directional=mix((1.0-u_lightintensity),max((1.0-colorvalue+u_lightintensity),1.0),directional);if (normal.z==0.0) {directional*=((1.0-u_vertical_gradient)+(u_vertical_gradient*clamp((t+gradient_base)*pow(gradient_height/150.0,0.5),mix(0.7,0.98,1.0-u_lightintensity),1.0)));}v_color.r+=clamp(color.r*directional*u_lightcolor.r,mix(0.0,0.3,1.0-u_lightcolor.r),1.0);v_color.g+=clamp(color.g*directional*u_lightcolor.g,mix(0.0,0.3,1.0-u_lightcolor.g),1.0);v_color.b+=clamp(color.b*directional*u_lightcolor.b,mix(0.0,0.3,1.0-u_lightcolor.b),1.0);v_color*=u_opacity;}`),fillExtrusionPattern:dO(`uniform vec2 u_texsize;uniform float u_fade;uniform sampler2D u_image;in vec2 v_pos_a;in vec2 v_pos_b;in vec4 v_lighting; #pragma maplibre: define lowp float base #pragma maplibre: define lowp float height #pragma maplibre: define lowp vec4 pattern_from #pragma maplibre: define lowp vec4 pattern_to #pragma maplibre: define lowp float pixel_ratio_from #pragma maplibre: define lowp float pixel_ratio_to void main() { #pragma maplibre: initialize lowp float base #pragma maplibre: initialize lowp float height #pragma maplibre: initialize mediump vec4 pattern_from #pragma maplibre: initialize mediump vec4 pattern_to #pragma maplibre: initialize lowp float pixel_ratio_from #pragma maplibre: initialize lowp float pixel_ratio_to vec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture(u_image,pos2);vec4 mixedColor=mix(color1,color2,u_fade);fragColor=mixedColor*v_lighting; #ifdef OVERDRAW_INSPECTOR fragColor=vec4(1.0); #endif }`,`uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform float u_height_factor;uniform vec3 u_scale;uniform float u_vertical_gradient;uniform lowp float u_opacity;uniform vec2 u_fill_translate;uniform vec3 u_lightcolor;uniform lowp vec3 u_lightpos;uniform lowp vec3 u_lightpos_globe;uniform lowp float u_lightintensity;layout(location=0) in vec2 a_pos;layout(location=1) in ivec4 a_normal_ed; #ifdef TERRAIN3D layout(location=2) in vec2 a_centroid; #endif #ifdef GLOBE out vec3 v_sphere_pos; #endif out vec2 v_pos_a;out vec2 v_pos_b;out vec4 v_lighting; #pragma maplibre: define lowp float base #pragma maplibre: define lowp float height #pragma maplibre: define lowp vec4 pattern_from #pragma maplibre: define lowp vec4 pattern_to #pragma maplibre: define lowp float pixel_ratio_from #pragma maplibre: define lowp float pixel_ratio_to void main() { #pragma maplibre: initialize lowp float base #pragma maplibre: initialize lowp float height #pragma maplibre: initialize mediump vec4 pattern_from #pragma maplibre: initialize mediump vec4 pattern_to #pragma maplibre: initialize lowp float pixel_ratio_from #pragma maplibre: initialize lowp float pixel_ratio_to vec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float tileRatio=u_scale.x;float fromScale=u_scale.y;float toScale=u_scale.z;vec3 normal=vec3(a_normal_ed.xyz);float edgedistance=float(a_normal_ed.w);vec2 display_size_a=(pattern_br_a-pattern_tl_a)/pixel_ratio_from;vec2 display_size_b=(pattern_br_b-pattern_tl_b)/pixel_ratio_to;float gradient_base=max(0.0,base);float gradient_height=max(0.0,height); #ifdef TERRAIN3D float height_terrain3d_offset=get_elevation(a_centroid);float base_terrain3d_offset=height_terrain3d_offset-(base > 0.0 ? 0.0 : 10.0); #else float height_terrain3d_offset=0.0;float base_terrain3d_offset=0.0; #endif base=max(0.0,base)+base_terrain3d_offset;height=max(0.0,height)+height_terrain3d_offset;float t=float(a_normal_ed.x & 1);float elevation=t > 0.0 ? height : base;vec2 posInTile=a_pos+u_fill_translate; #ifdef GLOBE vec3 spherePos=projectToSphere(posInTile,a_pos);vec3 elevatedPos=spherePos*(1.0+elevation/GLOBE_RADIUS);v_sphere_pos=elevatedPos;gl_Position=interpolateProjectionFor3D(posInTile,spherePos,elevation); #else gl_Position=u_projection_matrix*vec4(posInTile,elevation,1.0); #endif vec2 pos=a_normal_ed.x==1 && a_normal_ed.y==0 && a_normal_ed.z==16384 ? a_pos : vec2(edgedistance,elevation*u_height_factor);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileRatio,pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileRatio,pos);v_lighting=vec4(0.0,0.0,0.0,1.0);float directional=clamp(dot(normal/16383.0,u_lightpos),0.0,1.0);directional=mix((1.0-u_lightintensity),max((0.5+u_lightintensity),1.0),directional);if (normal.z==0.0) {directional*=((1.0-u_vertical_gradient)+(u_vertical_gradient*clamp((t+gradient_base)*pow(gradient_height/150.0,0.5),mix(0.7,0.98,1.0-u_lightintensity),1.0)));}v_lighting.rgb+=clamp(directional*u_lightcolor,mix(vec3(0.0),vec3(0.3),1.0-u_lightcolor),vec3(1.0));v_lighting*=u_opacity;}`),hillshadePrepare:dO(`#ifdef GL_ES precision highp float; #endif uniform sampler2D u_image;in vec2 v_pos;uniform vec2 u_dimension;uniform float u_zoom;uniform vec4 u_unpack;float getElevation(ivec2 texel) {vec4 data=texelFetch(u_image,texel,0)*255.0;data.a=-1.0;return dot(data,u_unpack);}void main() {ivec2 pos=ivec2(gl_FragCoord.xy)+ivec2(1);float tileSize=u_dimension.x-4.0;float a=getElevation(pos+ivec2(-1,-1));float b=getElevation(pos+ivec2(0,-1));float c=getElevation(pos+ivec2(1,-1));float d=getElevation(pos+ivec2(-1,0));float e=getElevation(pos);float f=getElevation(pos+ivec2(1,0));float g=getElevation(pos+ivec2(-1,1));float h=getElevation(pos+ivec2(0,1));float i=getElevation(pos+ivec2(1,1));float exaggerationFactor=u_zoom < 2.0 ? 0.4 : u_zoom < 4.5 ? 0.35 : 0.3;float exaggeration=u_zoom < 15.0 ? (u_zoom-15.0)*exaggerationFactor : 0.0;vec2 deriv=vec2((c+f+f+i)-(a+d+d+g),(g+h+h+i)-(a+b+b+c))*tileSize/pow(2.0,exaggeration+(28.2562-u_zoom));fragColor=clamp(vec4(deriv.x/8.0+128.0/255.0,deriv.y/8.0+128.0/255.0,1.0,1.0),0.0,1.0); #ifdef OVERDRAW_INSPECTOR fragColor=vec4(1.0); #endif }`,`uniform mat4 u_matrix;uniform vec2 u_dimension;layout(location=0) in vec2 a_pos;layout(location=1) in vec2 a_texture_pos;out vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);highp vec2 epsilon=1.0/u_dimension;float scale=(u_dimension.x-2.0)/u_dimension.x;v_pos=(a_texture_pos/8192.0)*scale+epsilon;}`),hillshade:dO(`uniform sampler2D u_image;in highp vec2 v_pos;uniform vec2 u_latrange;uniform float u_exaggeration;uniform vec4 u_accent;uniform int u_method;uniform float u_altitudes[NUM_ILLUMINATION_SOURCES];uniform float u_azimuths[NUM_ILLUMINATION_SOURCES];uniform vec4 u_shadows[NUM_ILLUMINATION_SOURCES];uniform vec4 u_highlights[NUM_ILLUMINATION_SOURCES]; #define PI 3.141592653589793 #define STANDARD 0 #define COMBINED 1 #define IGOR 2 #define MULTIDIRECTIONAL 3 #define BASIC 4 float get_aspect(vec2 deriv){return deriv.x !=0.0 ? atan(deriv.y,-deriv.x) : PI/2.0*(deriv.y > 0.0 ? 1.0 :-1.0);}void igor_hillshade(vec2 deriv){deriv=deriv*u_exaggeration*2.0;float aspect=get_aspect(deriv);float azimuth=u_azimuths[0]+PI;float slope_stength=atan(length(deriv))*2.0/PI;float aspect_strength=1.0-abs(mod((aspect+azimuth)/PI+0.5,2.0)-1.0);float shadow_strength=slope_stength*aspect_strength;float highlight_strength=slope_stength*(1.0-aspect_strength);fragColor=u_shadows[0]*shadow_strength+u_highlights[0]*highlight_strength;}void standard_hillshade(vec2 deriv){float azimuth=u_azimuths[0]+PI;float slope=atan(0.625*length(deriv));float aspect=get_aspect(deriv);float intensity=u_exaggeration;float base=1.875-intensity*1.75;float maxValue=0.5*PI;float scaledSlope=intensity !=0.5 ? ((pow(base,slope)-1.0)/(pow(base,maxValue)-1.0))*maxValue : slope;float accent=cos(scaledSlope);vec4 accent_color=(1.0-accent)*u_accent*clamp(intensity*2.0,0.0,1.0);float shade=abs(mod((aspect+azimuth)/PI+0.5,2.0)-1.0);vec4 shade_color=mix(u_shadows[0],u_highlights[0],shade)*sin(scaledSlope)*clamp(intensity*2.0,0.0,1.0);fragColor=accent_color*(1.0-shade_color.a)+shade_color;}void basic_hillshade(vec2 deriv){deriv=deriv*u_exaggeration*2.0;float azimuth=u_azimuths[0]+PI;float cos_az=cos(azimuth);float sin_az=sin(azimuth);float cos_alt=cos(u_altitudes[0]);float sin_alt=sin(u_altitudes[0]);float cang=(sin_alt-(deriv.y*cos_az*cos_alt-deriv.x*sin_az*cos_alt))/sqrt(1.0+dot(deriv,deriv));float shade=clamp(cang,0.0,1.0);if(shade > 0.5){fragColor=u_highlights[0]*(2.0*shade-1.0);}else {fragColor=u_shadows[0]*(1.0-2.0*shade);}}void multidirectional_hillshade(vec2 deriv){deriv=deriv*u_exaggeration*2.0;fragColor=vec4(0,0,0,0);for(int i=0; i < NUM_ILLUMINATION_SOURCES; i++){float cos_alt=cos(u_altitudes[i]);float sin_alt=sin(u_altitudes[i]);float cos_az=-cos(u_azimuths[i]);float sin_az=-sin(u_azimuths[i]);float cang=(sin_alt-(deriv.y*cos_az*cos_alt-deriv.x*sin_az*cos_alt))/sqrt(1.0+dot(deriv,deriv));float shade=clamp(cang,0.0,1.0);if(shade > 0.5){fragColor+=u_highlights[i]*(2.0*shade-1.0)/float(NUM_ILLUMINATION_SOURCES);}else {fragColor+=u_shadows[i]*(1.0-2.0*shade)/float(NUM_ILLUMINATION_SOURCES);}}}void combined_hillshade(vec2 deriv){deriv=deriv*u_exaggeration*2.0;float azimuth=u_azimuths[0]+PI;float cos_az=cos(azimuth);float sin_az=sin(azimuth);float cos_alt=cos(u_altitudes[0]);float sin_alt=sin(u_altitudes[0]);float cang=acos((sin_alt-(deriv.y*cos_az*cos_alt-deriv.x*sin_az*cos_alt))/sqrt(1.0+dot(deriv,deriv)));cang=clamp(cang,0.0,PI/2.0);float shade=cang*atan(length(deriv))*4.0/PI/PI;float highlight=(PI/2.0-cang)*atan(length(deriv))*4.0/PI/PI;fragColor=u_shadows[0]*shade+u_highlights[0]*highlight;}void main() {highp vec2 size=vec2(textureSize(u_image,0));highp vec2 texturePos=(v_pos*(size-2.0)+1.0)/size;vec4 pixel=texture(u_image,texturePos);float scaleFactor=cos(radians((u_latrange[0]-u_latrange[1])*(1.0-v_pos.y)+u_latrange[1]));vec2 deriv=(pixel.rg-128.0/255.0)*8.0/scaleFactor;if (u_method==BASIC) {basic_hillshade(deriv);} else if (u_method==COMBINED) {combined_hillshade(deriv);} else if (u_method==IGOR) {igor_hillshade(deriv);} else if (u_method==MULTIDIRECTIONAL) {multidirectional_hillshade(deriv);} else if (u_method==STANDARD) {standard_hillshade(deriv);} else {standard_hillshade(deriv);} #ifdef OVERDRAW_INSPECTOR fragColor=vec4(1.0); #endif }`,`uniform mat4 u_matrix;layout(location=0) in vec2 a_pos;out vec2 v_pos;void main() {gl_Position=projectTile(a_pos,a_pos);v_pos=a_pos/8192.0;if (a_pos.y <-32767.5) {v_pos.y=0.0;}if (a_pos.y > 32766.5) {v_pos.y=1.0;}}`),line:dO(`in vec2 v_width2;in vec2 v_normal;in float v_gamma_scale; #ifdef GLOBE in float v_depth; #endif #pragma maplibre: define highp vec4 color #pragma maplibre: define lowp float blur #pragma maplibre: define lowp float opacity void main() { #pragma maplibre: initialize highp vec4 color #pragma maplibre: initialize lowp float blur #pragma maplibre: initialize lowp float opacity clipAntimeridian();float dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);fragColor=color*(alpha*opacity); #ifdef GLOBE if (v_depth > 1.0) {discard;} #endif #ifdef OVERDRAW_INSPECTOR fragColor=vec4(1.0); #endif }`,` #define scale 0.015873016 layout(location=0) in ivec2 a_pos_normal;layout(location=1) in uvec4 a_data;layout(location=2) in vec2 a_offset_normal;uniform vec2 u_translation;uniform mediump float u_ratio;out vec2 v_normal;out vec2 v_width2;out float v_gamma_scale;out highp float v_linesofar; #ifdef GLOBE out float v_depth; #endif #pragma maplibre: define highp vec4 color #pragma maplibre: define lowp float blur #pragma maplibre: define lowp float opacity #pragma maplibre: define mediump float gapwidth #pragma maplibre: define lowp float offset #pragma maplibre: define mediump float width void main() { #pragma maplibre: initialize highp vec4 color #pragma maplibre: initialize lowp float blur #pragma maplibre: initialize lowp float opacity #pragma maplibre: initialize mediump float gapwidth #pragma maplibre: initialize lowp float offset #pragma maplibre: initialize mediump float width if (opacity < 0.01) {gl_Position=vec4(-2.0,-2.0,-2.0,1.0);return;}float ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=vec2(ivec2(a_data.xy)-128);v_linesofar=float((a_data.z >> 2u)+a_data.w*64u)*2.0;vec2 pos=vec2(a_pos_normal >> 1);mediump vec2 normal=vec2(a_pos_normal & 1);normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump vec2 offset2=offset*a_offset_normal*scale*normal.y;float adjustedThickness=projectLineThickness(pos.y);vec4 projected_no_extrude=projectTile(pos+offset2/u_ratio*adjustedThickness+u_translation);vec4 projected_with_extrude=projectTile(pos+offset2/u_ratio*adjustedThickness+u_translation+dist/u_ratio*adjustedThickness);gl_Position=projected_with_extrude; #ifdef GLOBE v_depth=gl_Position.z/gl_Position.w; #endif #ifdef TERRAIN3D v_gamma_scale=1.0; #else float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length((projected_with_extrude.xy-projected_no_extrude.xy)/projected_with_extrude.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective; #endif v_width2=vec2(outset,inset);}`),lineGradient:dO(`uniform sampler2D u_image;in vec2 v_width2;in vec2 v_normal;in float v_gamma_scale;in highp vec2 v_uv; #ifdef GLOBE in float v_depth; #endif #pragma maplibre: define lowp float blur #pragma maplibre: define lowp float opacity void main() { #pragma maplibre: initialize lowp float blur #pragma maplibre: initialize lowp float opacity clipAntimeridian();float dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);vec4 color=texture(u_image,v_uv);fragColor=color*(alpha*opacity); #ifdef GLOBE if (v_depth > 1.0) {discard;} #endif #ifdef OVERDRAW_INSPECTOR fragColor=vec4(1.0); #endif }`,` #define scale 0.015873016 layout(location=0) in ivec2 a_pos_normal;layout(location=1) in uvec4 a_data;layout(location=2) in vec2 a_offset_normal;layout(location=3) in float a_uv_x;layout(location=4) in float a_split_index;uniform vec2 u_translation;uniform mediump float u_ratio;uniform float u_image_height;out vec2 v_normal;out vec2 v_width2;out float v_gamma_scale;out highp vec2 v_uv; #ifdef GLOBE out float v_depth; #endif #pragma maplibre: define lowp float blur #pragma maplibre: define lowp float opacity #pragma maplibre: define mediump float gapwidth #pragma maplibre: define lowp float offset #pragma maplibre: define mediump float width void main() { #pragma maplibre: initialize lowp float blur #pragma maplibre: initialize lowp float opacity #pragma maplibre: initialize mediump float gapwidth #pragma maplibre: initialize lowp float offset #pragma maplibre: initialize mediump float width if (opacity < 0.01) {gl_Position=vec4(-2.0,-2.0,-2.0,1.0);return;}float ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=vec2(ivec2(a_data.xy)-128);highp float texel_height=1.0/u_image_height;highp float half_texel_height=0.5*texel_height;v_uv=vec2(a_uv_x,a_split_index*texel_height-half_texel_height);vec2 pos=vec2(a_pos_normal >> 1);mediump vec2 normal=vec2(a_pos_normal & 1);normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump vec2 offset2=offset*a_offset_normal*scale*normal.y;float adjustedThickness=projectLineThickness(pos.y);vec4 projected_no_extrude=projectTile(pos+offset2/u_ratio*adjustedThickness+u_translation);vec4 projected_with_extrude=projectTile(pos+offset2/u_ratio*adjustedThickness+u_translation+dist/u_ratio*adjustedThickness);gl_Position=projected_with_extrude; #ifdef GLOBE v_depth=gl_Position.z/gl_Position.w; #endif #ifdef TERRAIN3D v_gamma_scale=1.0; #else float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length((projected_with_extrude.xy-projected_no_extrude.xy)/projected_with_extrude.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective; #endif v_width2=vec2(outset,inset);}`),linePattern:dO(`#ifdef GL_ES precision highp float; #endif uniform vec2 u_texsize;uniform float u_fade;uniform mediump vec3 u_scale;uniform sampler2D u_image;in vec2 v_normal;in vec2 v_width2;in float v_linesofar;in float v_gamma_scale;in float v_width; #ifdef GLOBE in float v_depth; #endif #pragma maplibre: define lowp vec4 pattern_from #pragma maplibre: define lowp vec4 pattern_to #pragma maplibre: define lowp float pixel_ratio_from #pragma maplibre: define lowp float pixel_ratio_to #pragma maplibre: define lowp float blur #pragma maplibre: define lowp float opacity void main() { #pragma maplibre: initialize mediump vec4 pattern_from #pragma maplibre: initialize mediump vec4 pattern_to #pragma maplibre: initialize lowp float pixel_ratio_from #pragma maplibre: initialize lowp float pixel_ratio_to #pragma maplibre: initialize lowp float blur #pragma maplibre: initialize lowp float opacity clipAntimeridian();vec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float tileZoomRatio=u_scale.x;float fromScale=u_scale.y;float toScale=u_scale.z;vec2 display_size_a=(pattern_br_a-pattern_tl_a)/pixel_ratio_from;vec2 display_size_b=(pattern_br_b-pattern_tl_b)/pixel_ratio_to;vec2 pattern_size_a=vec2(display_size_a.x*fromScale/tileZoomRatio,display_size_a.y);vec2 pattern_size_b=vec2(display_size_b.x*toScale/tileZoomRatio,display_size_b.y);float aspect_a=display_size_a.y/v_width;float aspect_b=display_size_b.y/v_width;float dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);float x_a=mod(v_linesofar/pattern_size_a.x*aspect_a,1.0);float x_b=mod(v_linesofar/pattern_size_b.x*aspect_b,1.0);float y=0.5*v_normal.y+0.5;vec2 texel_size=1.0/u_texsize;vec2 pos_a=mix(pattern_tl_a*texel_size-texel_size,pattern_br_a*texel_size+texel_size,vec2(x_a,y));vec2 pos_b=mix(pattern_tl_b*texel_size-texel_size,pattern_br_b*texel_size+texel_size,vec2(x_b,y));vec4 color=mix(texture(u_image,pos_a),texture(u_image,pos_b),u_fade);fragColor=color*alpha*opacity; #ifdef GLOBE if (v_depth > 1.0) {discard;} #endif #ifdef OVERDRAW_INSPECTOR fragColor=vec4(1.0); #endif }`,` #define scale 0.015873016 #define LINE_DISTANCE_SCALE 2.0 layout(location=0) in ivec2 a_pos_normal;layout(location=1) in uvec4 a_data;layout(location=2) in vec2 a_offset_normal;uniform vec2 u_translation;uniform mediump float u_ratio;out vec2 v_normal;out vec2 v_width2;out float v_linesofar;out float v_gamma_scale;out float v_width; #ifdef GLOBE out float v_depth; #endif #pragma maplibre: define lowp float blur #pragma maplibre: define lowp float opacity #pragma maplibre: define lowp float offset #pragma maplibre: define mediump float gapwidth #pragma maplibre: define mediump float width #pragma maplibre: define lowp float floorwidth #pragma maplibre: define lowp vec4 pattern_from #pragma maplibre: define lowp vec4 pattern_to #pragma maplibre: define lowp float pixel_ratio_from #pragma maplibre: define lowp float pixel_ratio_to void main() { #pragma maplibre: initialize lowp float blur #pragma maplibre: initialize lowp float opacity #pragma maplibre: initialize lowp float offset #pragma maplibre: initialize mediump float gapwidth #pragma maplibre: initialize mediump float width #pragma maplibre: initialize lowp float floorwidth #pragma maplibre: initialize mediump vec4 pattern_from #pragma maplibre: initialize mediump vec4 pattern_to #pragma maplibre: initialize lowp float pixel_ratio_from #pragma maplibre: initialize lowp float pixel_ratio_to if (opacity < 0.01) {gl_Position=vec4(-2.0,-2.0,-2.0,1.0);return;}float ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=vec2(ivec2(a_data.xy)-128);float a_linesofar=float((a_data.z >> 2u)+a_data.w*64u)*LINE_DISTANCE_SCALE;vec2 pos=vec2(a_pos_normal >> 1);mediump vec2 normal=vec2(a_pos_normal & 1);normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump vec2 offset2=offset*a_offset_normal*scale*normal.y;float adjustedThickness=projectLineThickness(pos.y);vec4 projected_no_extrude=projectTile(pos+offset2/u_ratio*adjustedThickness+u_translation);vec4 projected_with_extrude=projectTile(pos+offset2/u_ratio*adjustedThickness+u_translation+dist/u_ratio*adjustedThickness);gl_Position=projected_with_extrude; #ifdef GLOBE v_depth=gl_Position.z/gl_Position.w; #endif #ifdef TERRAIN3D v_gamma_scale=1.0; #else float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length((projected_with_extrude.xy-projected_no_extrude.xy)/projected_with_extrude.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective; #endif v_linesofar=a_linesofar;v_width2=vec2(outset,inset);v_width=floorwidth;}`),lineSDF:dO(`uniform lowp float u_lineatlas_width;uniform sampler2D u_image;uniform float u_mix;in vec2 v_normal;in vec2 v_width2;in vec2 v_tex_a;in vec2 v_tex_b;in float v_gamma_scale; #ifdef GLOBE in float v_depth; #endif #pragma maplibre: define highp vec4 color #pragma maplibre: define lowp float blur #pragma maplibre: define lowp float opacity #pragma maplibre: define mediump float width #pragma maplibre: define lowp float floorwidth #pragma maplibre: define mediump vec4 dasharray_from #pragma maplibre: define mediump vec4 dasharray_to void main() { #pragma maplibre: initialize highp vec4 color #pragma maplibre: initialize lowp float blur #pragma maplibre: initialize lowp float opacity #pragma maplibre: initialize mediump float width #pragma maplibre: initialize lowp float floorwidth #pragma maplibre: initialize mediump vec4 dasharray_from #pragma maplibre: initialize mediump vec4 dasharray_to clipAntimeridian();float dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);float sdfdist_a=texture(u_image,v_tex_a).a;float sdfdist_b=texture(u_image,v_tex_b).a;float sdfdist=mix(sdfdist_a,sdfdist_b,u_mix);float sdfgamma=(u_lineatlas_width/256.0/u_device_pixel_ratio)/min(dasharray_from.w,dasharray_to.w);alpha*=smoothstep(0.5-sdfgamma/floorwidth,0.5+sdfgamma/floorwidth,sdfdist);fragColor=color*(alpha*opacity); #ifdef GLOBE if (v_depth > 1.0) {discard;} #endif #ifdef OVERDRAW_INSPECTOR fragColor=vec4(1.0); #endif }`,` #define scale 0.015873016 #define LINE_DISTANCE_SCALE 2.0 layout(location=0) in ivec2 a_pos_normal;layout(location=1) in uvec4 a_data;layout(location=2) in vec2 a_offset_normal;uniform vec2 u_translation;uniform mediump float u_ratio;uniform float u_tileratio;uniform float u_crossfade_from;uniform float u_crossfade_to;uniform float u_lineatlas_height;out vec2 v_normal;out vec2 v_width2;out vec2 v_tex_a;out vec2 v_tex_b;out float v_gamma_scale; #ifdef GLOBE out float v_depth; #endif #pragma maplibre: define highp vec4 color #pragma maplibre: define lowp float blur #pragma maplibre: define lowp float opacity #pragma maplibre: define mediump float gapwidth #pragma maplibre: define lowp float offset #pragma maplibre: define mediump float width #pragma maplibre: define lowp float floorwidth #pragma maplibre: define mediump vec4 dasharray_from #pragma maplibre: define mediump vec4 dasharray_to void main() { #pragma maplibre: initialize highp vec4 color #pragma maplibre: initialize lowp float blur #pragma maplibre: initialize lowp float opacity #pragma maplibre: initialize mediump float gapwidth #pragma maplibre: initialize lowp float offset #pragma maplibre: initialize mediump float width #pragma maplibre: initialize lowp float floorwidth #pragma maplibre: initialize mediump vec4 dasharray_from #pragma maplibre: initialize mediump vec4 dasharray_to if (opacity < 0.01) {gl_Position=vec4(-2.0,-2.0,-2.0,1.0);return;}float ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=vec2(ivec2(a_data.xy)-128);float a_linesofar=float((a_data.z >> 2u)+a_data.w*64u)*LINE_DISTANCE_SCALE;vec2 pos=vec2(a_pos_normal >> 1);mediump vec2 normal=vec2(a_pos_normal & 1);normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump vec2 offset2=offset*a_offset_normal*scale*normal.y;float adjustedThickness=projectLineThickness(pos.y);vec4 projected_no_extrude=projectTile(pos+offset2/u_ratio*adjustedThickness+u_translation);vec4 projected_with_extrude=projectTile(pos+offset2/u_ratio*adjustedThickness+u_translation+dist/u_ratio*adjustedThickness);gl_Position=projected_with_extrude; #ifdef GLOBE v_depth=gl_Position.z/gl_Position.w; #endif #ifdef TERRAIN3D v_gamma_scale=1.0; #else float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length((projected_with_extrude.xy-projected_no_extrude.xy)/projected_with_extrude.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective; #endif float u_patternscale_a_x=u_tileratio/dasharray_from.w/u_crossfade_from;float u_patternscale_a_y=-dasharray_from.z/2.0/u_lineatlas_height;float u_patternscale_b_x=u_tileratio/dasharray_to.w/u_crossfade_to;float u_patternscale_b_y=-dasharray_to.z/2.0/u_lineatlas_height;v_tex_a=vec2(a_linesofar*u_patternscale_a_x/floorwidth,normal.y*u_patternscale_a_y+(float(dasharray_from.y)+0.5)/u_lineatlas_height);v_tex_b=vec2(a_linesofar*u_patternscale_b_x/floorwidth,normal.y*u_patternscale_b_y+(float(dasharray_to.y)+0.5)/u_lineatlas_height);v_width2=vec2(outset,inset);}`),lineGradientSDF:dO(`uniform sampler2D u_image;uniform sampler2D u_image_dash;uniform float u_mix;uniform lowp float u_lineatlas_width;in vec2 v_normal;in vec2 v_width2;in vec2 v_tex_a;in vec2 v_tex_b;in float v_gamma_scale;in highp vec2 v_uv; #ifdef GLOBE in float v_depth; #endif #pragma maplibre: define lowp float blur #pragma maplibre: define lowp float opacity #pragma maplibre: define mediump float width #pragma maplibre: define lowp float floorwidth #pragma maplibre: define mediump vec4 dasharray_from #pragma maplibre: define mediump vec4 dasharray_to void main() { #pragma maplibre: initialize lowp float blur #pragma maplibre: initialize lowp float opacity #pragma maplibre: initialize mediump float width #pragma maplibre: initialize lowp float floorwidth #pragma maplibre: initialize mediump vec4 dasharray_from #pragma maplibre: initialize mediump vec4 dasharray_to clipAntimeridian();float dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);vec4 color=texture(u_image,v_uv);float sdfdist_a=texture(u_image_dash,v_tex_a).a;float sdfdist_b=texture(u_image_dash,v_tex_b).a;float sdfdist=mix(sdfdist_a,sdfdist_b,u_mix);float sdfgamma=(u_lineatlas_width/256.0)/min(dasharray_from.w,dasharray_to.w);float dash_alpha=smoothstep(0.5-sdfgamma/floorwidth,0.5+sdfgamma/floorwidth,sdfdist);fragColor=color*(alpha*dash_alpha*opacity); #ifdef GLOBE if (v_depth > 1.0) {discard;} #endif #ifdef OVERDRAW_INSPECTOR fragColor=vec4(1.0); #endif }`,` #define scale 0.015873016 #define LINE_DISTANCE_SCALE 2.0 layout(location=0) in ivec2 a_pos_normal;layout(location=1) in uvec4 a_data;layout(location=2) in vec2 a_offset_normal;layout(location=3) in float a_uv_x;layout(location=4) in float a_split_index;uniform vec2 u_translation;uniform mediump float u_ratio;uniform float u_image_height;uniform float u_tileratio;uniform float u_crossfade_from;uniform float u_crossfade_to;uniform float u_lineatlas_height;out vec2 v_normal;out vec2 v_width2;out float v_gamma_scale;out highp vec2 v_uv;out vec2 v_tex_a;out vec2 v_tex_b; #ifdef GLOBE out float v_depth; #endif #pragma maplibre: define lowp float blur #pragma maplibre: define lowp float opacity #pragma maplibre: define mediump float gapwidth #pragma maplibre: define lowp float offset #pragma maplibre: define mediump float width #pragma maplibre: define lowp float floorwidth #pragma maplibre: define mediump vec4 dasharray_from #pragma maplibre: define mediump vec4 dasharray_to void main() { #pragma maplibre: initialize lowp float blur #pragma maplibre: initialize lowp float opacity #pragma maplibre: initialize mediump float gapwidth #pragma maplibre: initialize lowp float offset #pragma maplibre: initialize mediump float width #pragma maplibre: initialize lowp float floorwidth #pragma maplibre: initialize mediump vec4 dasharray_from #pragma maplibre: initialize mediump vec4 dasharray_to if (opacity < 0.01) {gl_Position=vec4(-2.0,-2.0,-2.0,1.0);return;}float ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=vec2(ivec2(a_data.xy)-128);float a_linesofar=float((a_data.z >> 2u)+a_data.w*64u)*LINE_DISTANCE_SCALE;float texel_height=1.0/u_image_height;float half_texel_height=0.5*texel_height;v_uv=vec2(a_uv_x,a_split_index*texel_height-half_texel_height);vec2 pos=vec2(a_pos_normal >> 1);mediump vec2 normal=vec2(a_pos_normal & 1);normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump vec2 offset2=offset*a_offset_normal*scale*normal.y;float adjustedThickness=projectLineThickness(pos.y);vec4 projected_no_extrude=projectTile(pos+offset2/u_ratio*adjustedThickness+u_translation);vec4 projected_with_extrude=projectTile(pos+offset2/u_ratio*adjustedThickness+u_translation+dist/u_ratio*adjustedThickness);gl_Position=projected_with_extrude; #ifdef GLOBE v_depth=gl_Position.z/gl_Position.w; #endif #ifdef TERRAIN3D v_gamma_scale=1.0; #else float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length((projected_with_extrude.xy-projected_no_extrude.xy)/projected_with_extrude.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective; #endif float u_patternscale_a_x=u_tileratio/dasharray_from.w/u_crossfade_from;float u_patternscale_a_y=-dasharray_from.z/2.0/u_lineatlas_height;float u_patternscale_b_x=u_tileratio/dasharray_to.w/u_crossfade_to;float u_patternscale_b_y=-dasharray_to.z/2.0/u_lineatlas_height;v_tex_a=vec2(a_linesofar*u_patternscale_a_x/floorwidth,normal.y*u_patternscale_a_y+(float(dasharray_from.y)+0.5)/u_lineatlas_height);v_tex_b=vec2(a_linesofar*u_patternscale_b_x/floorwidth,normal.y*u_patternscale_b_y+(float(dasharray_to.y)+0.5)/u_lineatlas_height);v_width2=vec2(outset,inset);}`),layerOpacity:dO(`uniform sampler2D u_image;uniform float u_opacity;in vec2 v_pos;void main() {fragColor=texture(u_image,v_pos)*u_opacity; #ifdef OVERDRAW_INSPECTOR fragColor=vec4(0.0); #endif }`,`layout(location=0) in vec2 a_pos;out vec2 v_pos;void main() {gl_Position=vec4(a_pos.x*2.0-1.0,1.0-a_pos.y*2.0,0.0,1.0);v_pos.x=a_pos.x;v_pos.y=1.0-a_pos.y;}`),raster:dO(`uniform float u_fade_t;uniform float u_opacity;uniform sampler2D u_image0;uniform sampler2D u_image1;in vec3 v_pos0;in vec3 v_pos1;uniform float u_brightness_low;uniform float u_brightness_high;uniform float u_saturation_factor;uniform float u_contrast_factor;uniform vec3 u_spin_weights;void main() {vec4 color0=texture(u_image0,v_pos0.xy/v_pos0.z);vec4 color1=texture(u_image1,v_pos1.xy/v_pos1.z);if (color0.a > 0.0) {color0.rgb=color0.rgb/color0.a;}if (color1.a > 0.0) {color1.rgb=color1.rgb/color1.a;}vec4 color=mix(color0,color1,u_fade_t);color.a*=u_opacity;vec3 rgb=color.rgb;rgb=vec3(dot(rgb,u_spin_weights.xyz),dot(rgb,u_spin_weights.zxy),dot(rgb,u_spin_weights.yzx));float average=(color.r+color.g+color.b)/3.0;rgb+=(average-rgb)*u_saturation_factor;rgb=(rgb-0.5)*u_contrast_factor+0.5;vec3 u_high_vec=vec3(u_brightness_low,u_brightness_low,u_brightness_low);vec3 u_low_vec=vec3(u_brightness_high,u_brightness_high,u_brightness_high);fragColor=vec4(mix(u_high_vec,u_low_vec,rgb)*color.a,color.a); #ifdef OVERDRAW_INSPECTOR fragColor=vec4(1.0); #endif }`,`uniform vec2 u_tl_parent;uniform float u_scale_parent;uniform float u_buffer_scale;uniform vec3 u_image_warp;uniform vec4 u_coords_top;uniform vec4 u_coords_bottom;layout(location=0) in vec2 a_pos;out vec3 v_pos0;out vec3 v_pos1;void main() {vec2 fractionalPos=a_pos/8192.0;vec2 topLeft=u_coords_top.xy;vec2 topRight=u_coords_top.zw;vec2 bottomLeft=u_coords_bottom.xy;vec2 bottomRight=u_coords_bottom.zw;vec2 bilinearPos=mix(mix(topLeft,topRight,fractionalPos.x),mix(bottomLeft,bottomRight,fractionalPos.x),fractionalPos.y);float denominator=dot(u_image_warp.xy,fractionalPos)+1.0;vec2 acrossTop=topRight-topLeft+u_image_warp.x*topRight;vec2 downLeft=bottomLeft-topLeft+u_image_warp.y*bottomLeft;vec2 projectivePos=(acrossTop*fractionalPos.x+downLeft*fractionalPos.y+topLeft)/denominator;vec2 position=mix(projectivePos,bilinearPos,u_image_warp.z);gl_Position=projectTile(position,position);vec2 texturePos=((fractionalPos-0.5)/u_buffer_scale)+0.5; #ifdef GLOBE if (a_pos.y <-32767.5) {texturePos.y=0.0;}if (a_pos.y > 32766.5) {texturePos.y=1.0;} #endif float perspectiveRatio=mix(1.0/denominator,1.0,u_image_warp.z);v_pos0=vec3(texturePos*perspectiveRatio,perspectiveRatio);vec2 parentPos=(texturePos*u_scale_parent)+u_tl_parent;v_pos1=vec3(parentPos*perspectiveRatio,perspectiveRatio);}`),symbolIcon:dO(`uniform sampler2D u_texture;in vec2 v_tex;in float v_total_opacity;void main() {fragColor=texture(u_texture,v_tex)*v_total_opacity; #ifdef OVERDRAW_INSPECTOR fragColor=vec4(1.0); #endif }`,`layout(location=0) in vec4 a_pos_offset;layout(location=1) in uvec4 a_data;layout(location=2) in vec4 a_pixeloffset;layout(location=3) in vec3 a_projected_pos;layout(location=4) in uint a_fade_opacity;layout(location=5) in float a_height_offset;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform bool u_rotate_symbol;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform vec2 u_texsize;uniform bool u_is_along_line;uniform bool u_is_variable_anchor;uniform vec2 u_translation;uniform float u_pitched_scale;uniform bool u_is_offset;uniform bool u_height_anchor_ground;out vec2 v_tex;out float v_total_opacity; #pragma maplibre: define lowp float opacity void main() { #pragma maplibre: initialize lowp float opacity vec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=vec2(a_data.xy);vec2 a_size=vec2(a_data.zw);float a_size_min=float(a_data.z >> 1u);vec2 a_pxoffset=a_pixeloffset.xy;vec2 a_minFontScale=a_pixeloffset.zw/256.0;float ele=a_height_offset+(u_height_anchor_ground ? get_elevation(a_pos) : 0.0);highp float segment_angle=-a_projected_pos[2];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size_min,a_size[1],u_size_t)/128.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size_min/128.0;} else {size=u_size;}vec2 translated_a_pos=a_pos+u_translation;vec4 projectedPoint=projectTileWithElevation(translated_a_pos,ele);vec2 fade_opacity=unpack_opacity(a_fade_opacity);float fade_change=fade_opacity[1] > 0.5 ? u_symbol_fade_change :-u_symbol_fade_change;float visibility=calculate_visibility(projectedPoint);v_total_opacity=opacity*max(0.0,min(visibility,fade_opacity[0]+fade_change));if (v_total_opacity < 0.1){gl_Position=vec4(-2.,-2.,-2.,1.);return;}highp float camera_to_anchor_distance=projectedPoint.w;highp float distance_ratio=u_pitch_with_map ? camera_to_anchor_distance/u_camera_to_center_distance : u_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(0.5+0.5*distance_ratio,0.0,4.0);if (!u_is_offset) {size*=perspective_ratio;}float fontScale=u_is_text ? size/24.0 : size;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint=projectTileWithElevation(translated_a_pos+vec2(1,0),ele);vec2 a=projectedPoint.xy/projectedPoint.w;vec2 b=offsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos;if (u_is_along_line || u_is_variable_anchor) {projected_pos=vec4(a_projected_pos.xy,ele,1.0);} else if (u_pitch_with_map) {projected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy+u_translation,ele,1.0);} else {projected_pos=u_label_plane_matrix*projectTileWithElevation(a_projected_pos.xy+u_translation,ele);}float z=float(u_pitch_with_map)*projected_pos.z/projected_pos.w;float projectionScaling=1.0; #ifdef GLOBE if(u_pitch_with_map) {float anchor_pos_tile_y=(u_coord_matrix*vec4(projected_pos.xy/projected_pos.w,z,1.0)).y;projectionScaling=mix(projectionScaling,1.0/circumferenceRatioAtTileY(anchor_pos_tile_y)*u_pitched_scale,u_projection_transition);} #endif vec4 finalPos=u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*max(a_minFontScale,fontScale)+a_pxoffset/16.0)*projectionScaling,z,1.0);if(u_pitch_with_map) {finalPos=projectTileWithElevation(finalPos.xy,finalPos.z);}gl_Position=finalPos;v_tex=a_tex/u_texsize;}`),symbolSDF:dO(`#define SDF_PX 8.0 uniform bool u_is_halo;uniform bool u_is_plain;uniform sampler2D u_texture;uniform highp float u_gamma_scale;uniform bool u_is_text;in vec2 v_data0;in vec3 v_data1; #pragma maplibre: define highp vec4 fill_color #pragma maplibre: define highp vec4 halo_color #pragma maplibre: define lowp float halo_width #pragma maplibre: define lowp float halo_blur void main() { #pragma maplibre: initialize highp vec4 fill_color #pragma maplibre: initialize highp vec4 halo_color #pragma maplibre: initialize lowp float halo_width #pragma maplibre: initialize lowp float halo_blur float EDGE_GAMMA=0.105/u_device_pixel_ratio;vec2 tex=v_data0.xy;float gamma_scale=v_data1.x;float size=v_data1.y;float total_opacity=v_data1[2];float fontScale=u_is_text ? size/24.0 : size;highp float gamma=EDGE_GAMMA/(fontScale*u_gamma_scale);lowp float inner_edge=(256.0-64.0)/256.0;lowp float dist=texture(u_texture,tex).a;lowp vec4 color_alpha_out_text,color_alpha_out_halo;if (u_is_plain){highp float gamma_scaled=gamma*gamma_scale;highp float alpha=smoothstep(inner_edge-gamma_scaled,inner_edge+gamma_scaled,dist);color_alpha_out_text=total_opacity*alpha*fill_color;}if (u_is_halo) {float gamma_halo=(halo_blur*1.19/SDF_PX+EDGE_GAMMA)/(fontScale*u_gamma_scale);float inner_edge_halo=inner_edge+gamma_halo*gamma_scale;highp float gamma_scaled_halo=gamma_halo*gamma_scale;highp float alpha_halo=smoothstep(inner_edge_halo-gamma_scaled_halo,inner_edge_halo+gamma_scaled_halo,dist);highp float halo_edge=(6.0-halo_width/fontScale)/SDF_PX;alpha_halo= min(smoothstep(halo_edge-gamma_scaled_halo,halo_edge+gamma_scaled_halo,dist),1.0-alpha_halo);color_alpha_out_halo=total_opacity*alpha_halo*halo_color;}if (u_is_plain && u_is_halo) {fragColor=color_alpha_out_text+(1.-color_alpha_out_text.a)*color_alpha_out_halo;} else if (u_is_halo){fragColor=color_alpha_out_halo;} else {fragColor=color_alpha_out_text;} #ifdef OVERDRAW_INSPECTOR fragColor=vec4(1.0); #endif }`,`layout(location=0) in vec4 a_pos_offset;layout(location=1) in uvec4 a_data;layout(location=2) in vec4 a_pixeloffset;layout(location=3) in vec3 a_projected_pos;layout(location=4) in uint a_fade_opacity;layout(location=5) in float a_height_offset;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform bool u_is_along_line;uniform bool u_is_variable_anchor;uniform bool u_rotate_symbol;uniform vec2 u_texsize;uniform vec2 u_translation;uniform float u_pitched_scale;uniform bool u_is_offset;uniform bool u_height_anchor_ground;out vec2 v_data0;out vec3 v_data1; #pragma maplibre: define highp vec4 fill_color #pragma maplibre: define highp vec4 halo_color #pragma maplibre: define lowp float opacity #pragma maplibre: define lowp float halo_width #pragma maplibre: define lowp float halo_blur void main() { #pragma maplibre: initialize highp vec4 fill_color #pragma maplibre: initialize highp vec4 halo_color #pragma maplibre: initialize lowp float opacity #pragma maplibre: initialize lowp float halo_width #pragma maplibre: initialize lowp float halo_blur vec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=vec2(a_data.xy);vec2 a_size=vec2(a_data.zw);float a_size_min=float(a_data.z >> 1u);vec2 a_pxoffset=a_pixeloffset.xy/16.0;vec2 a_minFontScale=a_pixeloffset.zw/256.0;float ele=a_height_offset+(u_height_anchor_ground ? get_elevation(a_pos) : 0.0);highp float segment_angle=-a_projected_pos[2];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size_min,a_size[1],u_size_t)/128.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size_min/128.0;} else {size=u_size;}vec2 translated_a_pos=a_pos+u_translation;vec4 projectedPoint=projectTileWithElevation(translated_a_pos,ele);vec2 fade_opacity=unpack_opacity(a_fade_opacity);float visibility=calculate_visibility(projectedPoint);float fade_change=fade_opacity[1] > 0.5 ? u_symbol_fade_change :-u_symbol_fade_change;float interpolated_fade_opacity=max(0.0,min(visibility,fade_opacity[0]+fade_change));float total_opacity=opacity*interpolated_fade_opacity;if (total_opacity < 0.1){gl_Position=vec4(-2.,-2.,-2.,1.);return;}highp float camera_to_anchor_distance=projectedPoint.w;highp float distance_ratio=u_pitch_with_map ? camera_to_anchor_distance/u_camera_to_center_distance : u_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(0.5+0.5*distance_ratio,0.0,4.0);if (!u_is_offset) {size*=perspective_ratio;}float fontScale=u_is_text ? size/24.0 : size;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint=projectTileWithElevation(translated_a_pos+vec2(1,0),ele);vec2 a=projectedPoint.xy/projectedPoint.w;vec2 b=offsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos;if (u_is_along_line || u_is_variable_anchor) {projected_pos=vec4(a_projected_pos.xy,ele,1.0);} else if (u_pitch_with_map) {projected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy+u_translation,ele,1.0);} else {projected_pos=u_label_plane_matrix*projectTileWithElevation(a_projected_pos.xy+u_translation,ele);}float z=float(u_pitch_with_map)*projected_pos.z/projected_pos.w;float projectionScaling=1.0; #ifdef GLOBE if(u_pitch_with_map) {float anchor_pos_tile_y=(u_coord_matrix*vec4(projected_pos.xy/projected_pos.w,z,1.0)).y;projectionScaling=mix(projectionScaling,1.0/circumferenceRatioAtTileY(anchor_pos_tile_y)*u_pitched_scale,u_projection_transition);} #endif vec4 finalPos=u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*max(a_minFontScale,fontScale)+a_pxoffset)*projectionScaling,z,1.0);if(u_pitch_with_map) {finalPos=projectTileWithElevation(finalPos.xy,finalPos.z);}float gamma_scale=finalPos.w;gl_Position=finalPos;v_data0=a_tex/u_texsize;v_data1=vec3(gamma_scale,size,total_opacity);}`),symbolTextAndIcon:dO(`#define SDF_PX 8.0 #define SDF 1.0 #define ICON 0.0 uniform bool u_is_halo;uniform bool u_is_text;uniform sampler2D u_texture;uniform sampler2D u_texture_icon;uniform highp float u_gamma_scale;in vec4 v_data0;in vec3 v_data1;in float v_is_sdf; #pragma maplibre: define highp vec4 fill_color #pragma maplibre: define highp vec4 halo_color #pragma maplibre: define lowp float halo_width #pragma maplibre: define lowp float halo_blur void main() { #pragma maplibre: initialize highp vec4 fill_color #pragma maplibre: initialize highp vec4 halo_color #pragma maplibre: initialize lowp float halo_width #pragma maplibre: initialize lowp float halo_blur float total_opacity=v_data1[2];if (v_is_sdf==ICON) {vec2 tex_icon=v_data0.zw;fragColor=texture(u_texture_icon,tex_icon)*total_opacity; #ifdef OVERDRAW_INSPECTOR fragColor=vec4(1.0); #endif return;}vec2 tex=v_data0.xy;float EDGE_GAMMA=0.105/u_device_pixel_ratio;float gamma_scale=v_data1.x;float size=v_data1.y;float fontScale=size/24.0;highp float gamma=EDGE_GAMMA/(fontScale*u_gamma_scale);lowp float buff=(256.0-64.0)/256.0;lowp float dist=texture(u_texture,tex).a;lowp vec4 color_alpha_out,color_alpha_out_halo;if (u_is_text) {highp float gamma_scaled=gamma*gamma_scale;highp float alpha=smoothstep(buff-gamma_scaled,buff+gamma_scaled,dist);color_alpha_out=fill_color*(alpha*total_opacity);}if (u_is_halo) {highp float gamma_halo=(halo_blur*1.19/SDF_PX+EDGE_GAMMA)/(fontScale*u_gamma_scale);lowp float buff_halo=(6.0-halo_width/fontScale)/SDF_PX;highp float gamma_scaled_halo=gamma_halo*gamma_scale;highp float alpha_halo=smoothstep(buff_halo-gamma_scaled_halo,buff_halo+gamma_scaled_halo,dist);color_alpha_out_halo=halo_color*(alpha_halo*total_opacity);}if (u_is_text && u_is_halo) {fragColor=color_alpha_out+(1.-color_alpha_out.a)*color_alpha_out_halo;} else if (u_is_halo) {fragColor=color_alpha_out_halo;} else {fragColor=color_alpha_out;} #ifdef OVERDRAW_INSPECTOR fragColor=vec4(1.0); #endif }`,`layout(location=0) in vec4 a_pos_offset;layout(location=1) in uvec4 a_data;layout(location=2) in vec3 a_projected_pos;layout(location=3) in uint a_fade_opacity;layout(location=4) in float a_height_offset;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform bool u_rotate_symbol;uniform vec2 u_texsize;uniform vec2 u_texsize_icon;uniform bool u_is_along_line;uniform bool u_is_variable_anchor;uniform vec2 u_translation;uniform float u_pitched_scale;uniform bool u_is_offset;uniform bool u_height_anchor_ground;out vec4 v_data0;out vec3 v_data1;out float v_is_sdf; #pragma maplibre: define highp vec4 fill_color #pragma maplibre: define highp vec4 halo_color #pragma maplibre: define lowp float opacity #pragma maplibre: define lowp float halo_width #pragma maplibre: define lowp float halo_blur void main() { #pragma maplibre: initialize highp vec4 fill_color #pragma maplibre: initialize highp vec4 halo_color #pragma maplibre: initialize lowp float opacity #pragma maplibre: initialize lowp float halo_width #pragma maplibre: initialize lowp float halo_blur vec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=vec2(a_data.xy);vec2 a_size=vec2(a_data.zw);float a_size_min=float(a_data.z >> 1u);float is_sdf=float(a_data.z & 1u);float ele=a_height_offset+(u_height_anchor_ground ? get_elevation(a_pos) : 0.0);highp float segment_angle=-a_projected_pos[2];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size_min,a_size[1],u_size_t)/128.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size_min/128.0;} else {size=u_size;}vec2 translated_a_pos=a_pos+u_translation;vec4 projectedPoint=projectTileWithElevation(translated_a_pos,ele);vec2 fade_opacity=unpack_opacity(a_fade_opacity);float visibility=calculate_visibility(projectedPoint);float fade_change=fade_opacity[1] > 0.5 ? u_symbol_fade_change :-u_symbol_fade_change;float interpolated_fade_opacity=max(0.0,min(visibility,fade_opacity[0]+fade_change));float total_opacity=opacity*interpolated_fade_opacity;if (total_opacity < 0.1){gl_Position=vec4(-2.,-2.,-2.,1.);return;}highp float camera_to_anchor_distance=projectedPoint.w;highp float distance_ratio=u_pitch_with_map ? camera_to_anchor_distance/u_camera_to_center_distance : u_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(0.5+0.5*distance_ratio,0.0,4.0);if (!u_is_offset) {size*=perspective_ratio;}float fontScale=size/24.0;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint=projectTileWithElevation(translated_a_pos+vec2(1,0),ele);vec2 a=projectedPoint.xy/projectedPoint.w;vec2 b=offsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos;if (u_is_along_line || u_is_variable_anchor) {projected_pos=vec4(a_projected_pos.xy,ele,1.0);} else if (u_pitch_with_map) {projected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy+u_translation,ele,1.0);} else {projected_pos=u_label_plane_matrix*projectTileWithElevation(a_projected_pos.xy+u_translation,ele);}float z=float(u_pitch_with_map)*projected_pos.z/projected_pos.w;float projectionScaling=1.0; #ifdef GLOBE if(u_pitch_with_map && !u_is_along_line) {float anchor_pos_tile_y=(u_coord_matrix*vec4(projected_pos.xy/projected_pos.w,z,1.0)).y;projectionScaling=mix(projectionScaling,1.0/circumferenceRatioAtTileY(anchor_pos_tile_y)*u_pitched_scale,u_projection_transition);} #endif vec4 finalPos=u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*fontScale)*projectionScaling,z,1.0);if(u_pitch_with_map) {finalPos=projectTileWithElevation(finalPos.xy,finalPos.z);}float gamma_scale=finalPos.w;gl_Position=finalPos;v_data0.xy=a_tex/u_texsize;v_data0.zw=a_tex/u_texsize_icon;v_data1=vec3(gamma_scale,size,total_opacity);v_is_sdf=is_sdf;}`),terrain:dO(`uniform sampler2D u_texture;uniform vec4 u_fog_color;uniform vec4 u_horizon_color;uniform float u_fog_ground_blend;uniform float u_fog_ground_blend_opacity;uniform float u_horizon_fog_blend;uniform bool u_is_globe_mode;in vec2 v_texture_pos;in float v_fog_depth;const float gamma=2.2;vec4 gammaToLinear(vec4 color) {return pow(color,vec4(gamma));}vec4 linearToGamma(vec4 color) {return pow(color,vec4(1.0/gamma));}void main() {vec4 surface_color=texture(u_texture,vec2(v_texture_pos.x,1.0-v_texture_pos.y));if (!u_is_globe_mode && u_fog_ground_blend_opacity > 0.0 && v_fog_depth > u_fog_ground_blend) {vec4 surface_color_linear=gammaToLinear(surface_color);float blend_color=smoothstep(0.0,1.0,max((v_fog_depth-u_horizon_fog_blend)/(1.0-u_horizon_fog_blend),0.0));vec4 fog_horizon_color_linear=mix(gammaToLinear(u_fog_color),gammaToLinear(u_horizon_color),blend_color);float factor_fog=max(v_fog_depth-u_fog_ground_blend,0.0)/(1.0-u_fog_ground_blend);fragColor=linearToGamma(mix(surface_color_linear,fog_horizon_color_linear,pow(factor_fog,2.0)*u_fog_ground_blend_opacity));} else {fragColor=surface_color;}}`,`layout(location=0) in vec3 a_pos3d;uniform mat4 u_fog_matrix;uniform float u_ele_delta;out vec2 v_texture_pos;out float v_fog_depth;void main() {float ele=get_elevation(a_pos3d.xy);float ele_delta=a_pos3d.z==1.0 ? u_ele_delta : 0.0;v_texture_pos=a_pos3d.xy/8192.0;gl_Position=projectTileFor3D(a_pos3d.xy,ele-ele_delta);vec4 pos=u_fog_matrix*vec4(a_pos3d.xy,ele,1.0);v_fog_depth=pos.z/pos.w*0.5+0.5;}`),terrainDepth:dO(`in float v_depth;const highp vec4 bitSh=vec4(256.*256.*256.,256.*256.,256.,1.);const highp vec4 bitMsk=vec4(0.,vec3(1./256.0));highp vec4 pack(highp float value) {highp vec4 comp=fract(value*bitSh);comp-=comp.xxyz*bitMsk;return comp;}void main() {fragColor=pack(v_depth);}`,`layout(location=0) in vec3 a_pos3d;uniform float u_ele_delta;out float v_depth;void main() {float ele=get_elevation(a_pos3d.xy);float ele_delta=a_pos3d.z==1.0 ? u_ele_delta : 0.0;gl_Position=projectTileFor3D(a_pos3d.xy,ele-ele_delta);v_depth=gl_Position.z/gl_Position.w;}`),terrainHeight:dO(`in highp float v_elevation;void main() {fragColor=vec4(v_elevation,0.0,0.0,1.0);}`,`layout(location=0) in vec3 a_pos3d;uniform vec4 u_tile_bounds;out highp float v_elevation;void main() {v_elevation=get_elevation(a_pos3d.xy);vec2 position=u_tile_bounds.xy+a_pos3d.xy/8192.0*u_tile_bounds.zw;gl_Position=vec4(position.x*2.0-1.0,1.0-position.y*2.0,0.0,1.0);}`),atmosphere:dO(`#ifdef GL_ES precision highp float; #endif in vec3 view_direction;uniform vec3 u_sun_pos;uniform vec3 u_globe_position;uniform float u_globe_radius;uniform float u_atmosphere_blend;/**Shader use from https:*Made some change to adapt to MapLibre Globe geometry*/const float PI=3.141592653589793;const int iSteps=5;const int jSteps=3;/*radius of the planet*/const float EARTH_RADIUS=6371e3;/*radius of the atmosphere*/const float ATMOS_RADIUS=6471e3;vec2 rsi(vec3 r0,vec3 rd,float sr) {float a=dot(rd,rd);float b=2.0*dot(rd,r0);float c=dot(r0,r0)-(sr*sr);float d=(b*b)-4.0*a*c;if (d < 0.0) return vec2(1e5,-1e5);return vec2((-b-sqrt(d))/(2.0*a),(-b+sqrt(d))/(2.0*a));}vec4 atmosphere(vec3 r,vec3 r0,vec3 pSun,float iSun,float rPlanet,float rAtmos,vec3 kRlh,float kMie,float shRlh,float shMie,float g) {pSun=normalize(pSun);r=normalize(r);vec2 p=rsi(r0,r,rAtmos);if (p.x > p.y) {return vec4(0.0,0.0,0.0,1.0);}if (p.x < 0.0) {p.x=0.0;}vec3 pos=r0+r*p.x;vec2 p2=rsi(r0,r,rPlanet);if (p2.x <=p2.y && p2.x > 0.0) {p.y=min(p.y,p2.x);}float iStepSize=(p.y-p.x)/float(iSteps);float iTime=p.x+iStepSize*0.5;vec3 totalRlh=vec3(0,0,0);vec3 totalMie=vec3(0,0,0);float iOdRlh=0.0;float iOdMie=0.0;float mu=dot(r,pSun);float mumu=mu*mu;float gg=g*g;float pRlh=3.0/(16.0*PI)*(1.0+mumu);float pMie=3.0/(8.0*PI)*((1.0-gg)*(mumu+1.0))/(pow(1.0+gg-2.0*mu*g,1.5)*(2.0+gg));for (int i=0; i < iSteps; i++) {vec3 iPos=r0+r*iTime;float iHeight=length(iPos)-rPlanet;float odStepRlh=exp(-iHeight/shRlh)*iStepSize;float odStepMie=exp(-iHeight/shMie)*iStepSize;iOdRlh+=odStepRlh;iOdMie+=odStepMie;float jStepSize=rsi(iPos,pSun,rAtmos).y/float(jSteps);float jTime=jStepSize*0.5;float jOdRlh=0.0;float jOdMie=0.0;for (int j=0; j < jSteps; j++) {vec3 jPos=iPos+pSun*jTime;float jHeight=length(jPos)-rPlanet;jOdRlh+=exp(-jHeight/shRlh)*jStepSize;jOdMie+=exp(-jHeight/shMie)*jStepSize;jTime+=jStepSize;}vec3 attn=exp(-(kMie*(iOdMie+jOdMie)+kRlh*(iOdRlh+jOdRlh)));totalRlh+=odStepRlh*attn;totalMie+=odStepMie*attn;iTime+=iStepSize;}float opacity=exp(-(length(kRlh)*length(totalRlh)+kMie*length(totalMie)));vec3 color=iSun*(pRlh*kRlh*totalRlh+pMie*kMie*totalMie);return vec4(color,opacity);}void main() {vec3 scale_camera_pos=-u_globe_position*EARTH_RADIUS/u_globe_radius;vec4 color=atmosphere(normalize(view_direction),scale_camera_pos,u_sun_pos,22.0,EARTH_RADIUS,ATMOS_RADIUS,vec3(5.5e-6,13.0e-6,22.4e-6),21e-6,8e3,1.2e3,0.758 );color.rgb=1.0-exp(-1.0*color.rgb);color=pow(color,vec4(1.0/2.2));fragColor=vec4(color.rgb,1.0-color.a)*u_atmosphere_blend;}`,`layout(location=0) in vec2 a_pos;uniform mat4 u_inv_proj_matrix;out vec3 view_direction;void main() {view_direction=(u_inv_proj_matrix*vec4(a_pos,0.0,1.0)).xyz;gl_Position=vec4(a_pos,0.0,1.0);}`),sky:dO(`uniform vec4 u_sky_color;uniform vec4 u_horizon_color;uniform vec2 u_horizon;uniform vec2 u_horizon_normal;uniform float u_sky_horizon_blend;uniform float u_sky_blend;uniform vec3 u_globe_position;uniform float u_globe_radius;uniform float u_atmosphere_blend;in vec3 v_view_direction;const float ATMOSPHERE_HEIGHT_TO_GLOBE_RADIUS=100000.0/6371000.0;void main() {float x=gl_FragCoord.x;float y=gl_FragCoord.y;float blend=(y-u_horizon.y)*u_horizon_normal.y+(x-u_horizon.x)*u_horizon_normal.x;float opacity=1.0;if (u_sky_blend > 0.0) {vec3 ray=normalize(v_view_direction);float globe_distance=length(u_globe_position);float angle_to_globe_center=acos(clamp(dot(ray,u_globe_position)/globe_distance,-1.0,1.0));float horizon_angle=asin(min(u_globe_radius/globe_distance,1.0));blend=mix(blend,((angle_to_globe_center-horizon_angle)*u_camera_to_center_distance+1.0)*u_device_pixel_ratio,u_sky_blend);float closest_approach=max(dot(ray,u_globe_position),0.0);float lowest_altitude=sqrt(max(globe_distance*globe_distance-closest_approach*closest_approach,0.0))-u_globe_radius;float atmosphere_height=u_globe_radius*ATMOSPHERE_HEIGHT_TO_GLOBE_RADIUS;float inside_atmosphere=1.0-smoothstep(atmosphere_height,10.0*atmosphere_height,globe_distance-u_globe_radius);float through_atmosphere=1.0-smoothstep(0.0,atmosphere_height,lowest_altitude);opacity=inside_atmosphere*through_atmosphere*(1.0-u_atmosphere_blend);}if (blend > 0.0) {if (blend < u_sky_horizon_blend) {fragColor=mix(u_sky_color,u_horizon_color,pow(1.0-blend/u_sky_horizon_blend,2.0));} else {fragColor=u_sky_color;}}fragColor*=mix(1.0,opacity,u_sky_blend);}`,`layout(location=0) in vec2 a_pos;uniform mat4 u_inv_proj_matrix;out vec3 v_view_direction;void main() {v_view_direction=(u_inv_proj_matrix*vec4(a_pos,0.0,1.0)).xyz;gl_Position=vec4(a_pos,1.0,1.0);}`)};function dO(e,t){let n=/#pragma maplibre: ([\w]+) ([\w]+) ([\w]+) ([\w]+)/g,r=t.match(/in ([\w]+) ([\w]+)/g),i=e.match(/uniform ([\w]+) ([\w]+)([\s]*)([\w]*)/g),a=t.match(/uniform ([\w]+) ([\w]+)([\s]*)([\w]*)/g),o=a?a.concat(i):i,s=r?r.length:0,c={};return e=e.replace(n,(e,t,n,r,i)=>(c[i]=!0,t===`define`?` #ifndef HAS_UNIFORM_u_${i} in ${n} ${r} ${i}; #else uniform ${n} ${r} u_${i}; #endif `:` #ifdef HAS_UNIFORM_u_${i} ${n} ${r} ${i} = u_${i}; #endif `)),t=t.replace(n,(e,t,n,r,i)=>{let a=r===`float`?`vec2`:`vec4`,o=i.match(/color/)?`color`:a;return c[i]?t===`define`?` #ifndef HAS_UNIFORM_u_${i} uniform lowp float u_${i}_t; layout(location = ${s++}) in ${n} ${a} a_${i}; out ${n} ${r} ${i}; #else uniform ${n} ${r} u_${i}; #endif `:o===`vec4`?` #ifndef HAS_UNIFORM_u_${i} ${i} = a_${i}; #else ${n} ${r} ${i} = u_${i}; #endif `:` #ifndef HAS_UNIFORM_u_${i} ${i} = unpack_mix_${o}(a_${i}, u_${i}_t); #else ${n} ${r} ${i} = u_${i}; #endif `:t===`define`?` #ifndef HAS_UNIFORM_u_${i} uniform lowp float u_${i}_t; layout(location = ${s++}) in ${n} ${a} a_${i}; #else uniform ${n} ${r} u_${i}; #endif `:o===`vec4`?` #ifndef HAS_UNIFORM_u_${i} ${n} ${r} ${i} = a_${i}; #else ${n} ${r} ${i} = u_${i}; #endif `:` #ifndef HAS_UNIFORM_u_${i} ${n} ${r} ${i} = unpack_mix_${o}(a_${i}, u_${i}_t); #else ${n} ${r} ${i} = u_${i}; #endif `}),{fragmentSource:e,vertexSource:t,staticAttributes:r,staticUniforms:o}}var fO=`#define PROJECTION_MERCATOR`,pO=`mercator`,mO=class{constructor(){this._cachedMesh=null}get name(){return`mercator`}get useSubdivision(){return!1}get shaderVariantName(){return pO}get shaderDefine(){return fO}get shaderPreludeCode(){return uO.projectionMercator}get vertexShaderPreludeCode(){return uO.projectionMercator.vertexSource}get subdivisionGranularity(){return rm.noSubdivision}get useGlobeControls(){return!1}get transitionState(){return 0}destroy(){}getMeshFromTileID(e,t,n,r,i){if(this._cachedMesh)return this._cachedMesh;let a=new Hu;a.emplaceBack(0,0),a.emplaceBack(L,0),a.emplaceBack(0,L),a.emplaceBack(L,L);let o=e.createVertexBuffer(a,hx.members),s=ud.simpleSegment(0,0,4,2),c=new ad;c.emplaceBack(1,0,2),c.emplaceBack(1,2,3);let l=e.createIndexBuffer(c);return this._cachedMesh=new mx(o,l,s),this._cachedMesh}recalculate(){}hasTransition(){return!1}},hO=class e{constructor(e=0,t=0,n=0,r=0){if(isNaN(e)||e<0||isNaN(t)||t<0||isNaN(n)||n<0||isNaN(r)||r<0)throw Error(`Invalid value for edge-insets, top, bottom, left and right must all be numbers`);this.top=e,this.bottom=t,this.left=n,this.right=r}interpolate(e,t,n){return t.top!=null&&e.top!=null&&(this.top=ia.number(e.top,t.top,n)),t.bottom!=null&&e.bottom!=null&&(this.bottom=ia.number(e.bottom,t.bottom,n)),t.left!=null&&e.left!=null&&(this.left=ia.number(e.left,t.left,n)),t.right!=null&&e.right!=null&&(this.right=ia.number(e.right,t.right,n)),this}getCenter(e,t){return new k(R((this.left+e-this.right)/2,0,e),R((this.top+t-this.bottom)/2,0,t))}equals(e){return this.top===e.top&&this.bottom===e.bottom&&this.left===e.left&&this.right===e.right}clone(){return new e(this.top,this.bottom,this.left,this.right)}toJSON(){return{top:this.top,bottom:this.bottom,left:this.left,right:this.right}}};function gO(e,t){if(!e.renderWorldCopies||e.lngRange)return;let n=t.lng-e.center.lng;t.lng+=n>180?-360:n<-180?360:0}function _O(e){return Math.max(0,Math.floor(e))}var vO=class{constructor(e,t){this.applyConstrain=(e,t)=>this._constrainOverride===null?this._callbacks.defaultConstrain(e,t):this._constrainOverride(e,t),this._callbacks=e,this._tileSize=512,this._renderWorldCopies=t?.renderWorldCopies===void 0||!!t?.renderWorldCopies,this._minZoom=t?.minZoom||0,this._maxZoom=t?.maxZoom||22,this._minPitch=t?.minPitch===void 0||t?.minPitch===null?0:t?.minPitch,this._maxPitch=t?.maxPitch===void 0||t?.maxPitch===null?60:t?.maxPitch,this._constrainOverride=t?.constrainOverride??null,this.setMaxBounds(),this._width=0,this._height=0,this._center=new X(0,0),this._elevation=0,this._zoom=0,this._tileZoom=_O(this._zoom),this._scale=Gt(this._zoom),this._bearingInRadians=0,this._fovInRadians=.6435011087932844,this._pitchInRadians=0,this._rollInRadians=0,this._unmodified=!0,this._edgeInsets=new hO,this._minElevationForCurrentTile=0,this._autoCalculateNearFarZ=!0}apply(e,t){this._constrainOverride=e.constrainOverride,this._latRange=e.latRange,this._lngRange=e.lngRange,this._width=e.width,this._height=e.height,this._center=e.center,this._elevation=e.elevation,this._minElevationForCurrentTile=e.minElevationForCurrentTile,this._zoom=e.zoom,this._tileZoom=_O(this._zoom),this._scale=Gt(this._zoom),this._bearingInRadians=e.bearingInRadians,this._fovInRadians=e.fovInRadians,this._pitchInRadians=e.pitchInRadians,this._rollInRadians=e.rollInRadians,this._unmodified=e.unmodified,this._edgeInsets=new hO(e.padding.top,e.padding.bottom,e.padding.left,e.padding.right),this._minZoom=e.minZoom,this._maxZoom=e.maxZoom,this._minPitch=e.minPitch,this._maxPitch=e.maxPitch,this._renderWorldCopies=e.renderWorldCopies,this._cameraToCenterDistance=e.cameraToCenterDistance,this._nearZ=e.nearZ,this._farZ=e.farZ,this._autoCalculateNearFarZ=e.autoCalculateNearFarZ,t&&this.constrainInternal(),this._calcMatrices()}get pixelsToClipSpaceMatrix(){return this._pixelsToClipSpaceMatrix}get clipSpaceToPixelsMatrix(){return this._clipSpaceToPixelsMatrix}get minElevationForCurrentTile(){return this._minElevationForCurrentTile}setMinElevationForCurrentTile(e){e!==this._minElevationForCurrentTile&&(this._minElevationForCurrentTile=e,this._calcMatrices())}get tileSize(){return this._tileSize}get tileZoom(){return this._tileZoom}get scale(){return this._scale}get width(){return this._width}get height(){return this._height}get bearingInRadians(){return this._bearingInRadians}get lngRange(){return this._lngRange}get latRange(){return this._latRange}get pixelsToGLUnits(){return this._pixelsToGLUnits}get minZoom(){return this._minZoom}setMinZoom(e){if(this._minZoom===e)return;this._minZoom=e;let t=this._unmodified;this.setZoom(this.applyConstrain(this._center,this.zoom).zoom),this._unmodified=t}get maxZoom(){return this._maxZoom}setMaxZoom(e){if(this._maxZoom===e)return;this._maxZoom=e;let t=this._unmodified;this.setZoom(this.applyConstrain(this._center,this.zoom).zoom),this._unmodified=t}get minPitch(){return this._minPitch}setMinPitch(e){if(this._minPitch===e)return;this._minPitch=e;let t=this._unmodified;this.setPitch(Math.max(this.pitch,e)),this._unmodified=t}get maxPitch(){return this._maxPitch}setMaxPitch(e){if(this._maxPitch===e)return;this._maxPitch=e;let t=this._unmodified;this.setPitch(Math.min(this.pitch,e)),this._unmodified=t}get renderWorldCopies(){return this._renderWorldCopies}setRenderWorldCopies(e){e===void 0?e=!0:e===null&&(e=!1),this._renderWorldCopies=e}get constrainOverride(){return this._constrainOverride}setConstrainOverride(e){e===void 0&&(e=null),this._constrainOverride!==e&&(this._constrainOverride=e,this.constrainInternal(),this._calcMatrices())}get worldSize(){return this._tileSize*this._scale}get centerOffset(){return this.centerPoint._sub(this.size._div(2))}get size(){return new k(this._width,this._height)}get bearing(){return this._bearingInRadians/Math.PI*180}setBearing(e){let t=zt(e,-180,180)*Math.PI/180;this._bearingInRadians!==t&&(this._unmodified=!1,this._bearingInRadians=t,this._calcMatrices(),this._rotationMatrix=ne(),ae(this._rotationMatrix,this._rotationMatrix,-this._bearingInRadians))}get rotationMatrix(){return this._rotationMatrix}get pitchInRadians(){return this._pitchInRadians}get pitch(){return this._pitchInRadians/Math.PI*180}setPitch(e){let t=R(e,this.minPitch,this.maxPitch)/180*Math.PI;this._pitchInRadians!==t&&(this._unmodified=!1,this._pitchInRadians=t,this._calcMatrices())}get rollInRadians(){return this._rollInRadians}get roll(){return this._rollInRadians/Math.PI*180}setRoll(e){let t=e/180*Math.PI;this._rollInRadians!==t&&(this._unmodified=!1,this._rollInRadians=t,this._calcMatrices())}get fovInRadians(){return this._fovInRadians}get fov(){return hn(this._fovInRadians)}setFov(e){e=R(e,.1,150),this.fov!==e&&(this._unmodified=!1,this._fovInRadians=mn(e),this._calcMatrices())}get zoom(){return this._zoom}setZoom(e){let t=this.applyConstrain(this._center,e).zoom;this._zoom!==t&&(this._unmodified=!1,this._zoom=t,this._tileZoom=Math.max(0,Math.floor(t)),this._scale=Gt(t),this.constrainInternal(),this._calcMatrices())}get center(){return this._center}setCenter(e){(e.lat!==this._center.lat||e.lng!==this._center.lng)&&(this._unmodified=!1,this._center=e,this.constrainInternal(),this._calcMatrices())}get elevation(){return this._elevation}setElevation(e){e!==this._elevation&&(this._elevation=e,this.constrainInternal(),this._calcMatrices())}get padding(){return this._edgeInsets.toJSON()}setPadding(e){this._edgeInsets.equals(e)||(this._unmodified=!1,this._edgeInsets.interpolate(this._edgeInsets,e,1),this.constrainInternal(),this._calcMatrices())}get centerPoint(){return this._edgeInsets.getCenter(this._width,this._height)}get pixelsPerMeter(){return this._pixelPerMeter}get unmodified(){return this._unmodified}get cameraToCenterDistance(){return this._cameraToCenterDistance}get nearZ(){return this._nearZ}get farZ(){return this._farZ}get autoCalculateNearFarZ(){return this._autoCalculateNearFarZ}overrideNearFarZ(e,t){this._autoCalculateNearFarZ=!1,this._nearZ=e,this._farZ=t,this._calcMatrices()}clearNearFarZOverride(){this._autoCalculateNearFarZ=!0,this._calcMatrices()}isPaddingEqual(e){return this._edgeInsets.equals(e)}interpolatePadding(e,t,n){this._unmodified=!1,this._edgeInsets.interpolate(e,t,n),this.constrainInternal(),this._calcMatrices()}resize(e,t,n=!0){this._width=e,this._height=t,n&&this.constrainInternal(),this._calcMatrices()}getMaxBounds(){return this._latRange?.length!==2||this._lngRange?.length!==2?null:new Mb([this._lngRange[0],this._latRange[0]],[this._lngRange[1],this._latRange[1]])}setMaxBounds(e){e?(this._lngRange=[e.getWest(),e.getEast()],this._latRange=[e.getSouth(),e.getNorth()],this.constrainInternal()):(this._lngRange=null,this._latRange=[-85.051129,bn])}getCameraQueryGeometry(e,t){if(t.length===1)return[t[0],e];{let{minX:n,minY:r,maxX:i,maxY:a}=km.fromPoints(t).extend(e);return[new k(n,r),new k(i,r),new k(i,a),new k(n,a),new k(n,r)]}}constrainInternal(){if(!this.center||!this._width||!this._height||this._constraining)return;this._constraining=!0;let e=this._unmodified,{center:t,zoom:n}=this.applyConstrain(this.center,this.zoom);this.setCenter(t),this.setZoom(n),this._unmodified=e,this._constraining=!1}_calcMatrices(){if(this._pixelPerMeter=Wm(1,this.center.lat)*this.worldSize,!this._width||!this._height)return;this._pixelsToGLUnits=[2/this._width,-2/this._height];let e=pe(new Float64Array(16));P(e,e,[this._width/2,-this._height/2,1]),ge(e,e,[1,-1,0]),this._clipSpaceToPixelsMatrix=e,e=pe(new Float64Array(16)),P(e,e,[1,-1,1]),ge(e,e,[-1,-1,0]),P(e,e,[2/this._width,2/this._height,1]),this._pixelsToClipSpaceMatrix=e;let t=this.fovInRadians/2;this._cameraToCenterDistance=.5/Math.tan(t)*this._height,this._callbacks.calcMatrices()}calculateCenterFromCameraLngLatAlt(e,t,n,r){let i=n===void 0?this.bearing:n,a=r=r===void 0?this.pitch:r,{distanceToCenter:o,clampedElevation:s}=this._distanceToCenterFromAltElevationPitch(t,this.elevation,a),{x:c,y:l}=ah(a,i),u=Ym.fromLngLat(e,t),{centerMercator:d,dMercator:f}=this._centerAlongView(u,c,l,o,qm(1,u.y));return{center:d.toLngLat(),elevation:s,zoom:Kt(this.height/2/Math.tan(this.fovInRadians/2)/f/this.tileSize)}}recalculateZoomAndCenter(e){if(this.elevation-e===0)return;let t=this.pitch,n=this.bearing,{x:r,y:i,z:a}=ah(t,n),o=Ym.fromLngLat(this.center,this.elevation),s=1/Wm(1,this.center.lat),c=this.cameraToCenterDistance/this.worldSize,l=new Ym(o.x-r*c,o.y-i*c,o.z+a*c),{distanceToCenter:u,clampedElevation:d}=this._distanceToCenterFromAltElevationPitch(l.z*s,e,t),{centerMercator:f,dMercator:p}=this._centerAlongView(l,r,i,u,s),m=f.toLngLat(),h=Kt(this.cameraToCenterDistance/p/this.tileSize);this._elevation=d,this._center=m;let g=this._zoom;this.setZoom(h),this._zoom===g&&(this._unmodified=!1,this.constrainInternal(),this._calcMatrices())}_centerAlongView(e,t,n,r,i){let a=r/i,o=new Ym(e.x+t*a,e.y+n*a),s=1/0;for(let c=1;c<10;c++){let c=1/o.meterInMercatorCoordinateUnits(),l=Math.abs(c-i);if(l<=1e-12*i||l>=s)break;s=l,i=c,a=r/i,o=new Ym(e.x+t*a,e.y+n*a)}return{centerMercator:o,dMercator:a}}_distanceToCenterFromAltElevationPitch(e,t,n){let r=-Math.cos(mn(n)),i=e-t,a,o=t;return r*i>=0||Math.abs(r)=0?1<n}allowWorldCopies(){return!0}prepareNextFrame(){}},bO=L*(1-1e-12),xO=-.5,SO={covered:!1,demLoaded:!1,elevation:0},CO=class{constructor(e,t){this.tileManager=e,this.exaggeration=t,this._samplerCache=new Map}reset(){this._samplerCache.clear(),this._index=void 0,this._ownDemIndex=void 0}getIndex(e=!1){return e?(this._ownDemIndex===void 0&&(this._ownDemIndex=this._build(!0)),this._ownDemIndex):(this._index===void 0&&(this._index=this._build(!1)),this._index)}sample(e,t=!1){let n=this.getIndex(t);if(!n)return;let r=Ym.fromLngLat(e),i=wO(n,this.exaggeration,r.x,r.y);return i.demLoaded?i.elevation:void 0}getSampler(e){let t=e.key,n=this._samplerCache.get(t);if(n)return n;let r=this._createElevationSampler(e);return r&&this._samplerCache.set(t,r),r}_createElevationSampler(e){let t=this.tileManager.getSourceTile(e,!0),n=t?.dem;if(!t||!n)return null;let r=e.canonical.z-t.tileID.canonical.z,i=1<>r<>r<{let i=r===8192?1:L/r;return n.sampleBilinear(e*i*a+o,t*i*a+s)}}_build(e){let{tileManager:t}=this,n=[],r=new Map,i=0,a=0;for(let o of t.getRenderableTiles()){if(!o)continue;let{canonical:s,wrap:c}=o.tileID;n.includes(s.z)||n.push(s.z);let l=e&&!t.getSourceTile(o.tileID)?.dem?null:this.getSampler(o.tileID);r.set(`${c}/${s.z}/${s.x}/${s.y}`,l);let u=t.getSourceTile(o.tileID,!0)?.dem;i=Math.min(i,(u?.min??0)*this.exaggeration),a=Math.max(a,(u?.max??0)*this.exaggeration)}return r.size===0?null:(n.sort((e,t)=>t-e),{zooms:n,samplerPerTile:r,minElevation:i-10,maxElevation:a+10})}};function wO(e,t,n,r){if(r<0||r>=1)return SO;let i=Math.floor(n),a=n-i;for(let n of e.zooms){let o=1<i;a++){let i=(n+r)/2;t(e,i)?r=i:n=i}return{lo:n,hi:r}}var DO=class e{get pixelsToClipSpaceMatrix(){return this._helper.pixelsToClipSpaceMatrix}get clipSpaceToPixelsMatrix(){return this._helper.clipSpaceToPixelsMatrix}get pixelsToGLUnits(){return this._helper.pixelsToGLUnits}get centerOffset(){return this._helper.centerOffset}get size(){return this._helper.size}get rotationMatrix(){return this._helper.rotationMatrix}get centerPoint(){return this._helper.centerPoint}get pixelsPerMeter(){return this._helper.pixelsPerMeter}setMinZoom(e){this._helper.setMinZoom(e)}setMaxZoom(e){this._helper.setMaxZoom(e)}setMinPitch(e){this._helper.setMinPitch(e)}setMaxPitch(e){this._helper.setMaxPitch(e)}setRenderWorldCopies(e){this._helper.setRenderWorldCopies(e)}setBearing(e){this._helper.setBearing(e)}setPitch(e){this._helper.setPitch(e)}setRoll(e){this._helper.setRoll(e)}setFov(e){this._helper.setFov(e)}setZoom(e){this._helper.setZoom(e)}setCenter(e){this._helper.setCenter(e)}setElevation(e){this._helper.setElevation(e)}setMinElevationForCurrentTile(e){this._helper.setMinElevationForCurrentTile(e)}setPadding(e){this._helper.setPadding(e)}interpolatePadding(e,t,n){this._helper.interpolatePadding(e,t,n)}isPaddingEqual(e){return this._helper.isPaddingEqual(e)}resize(e,t,n=!0){this._helper.resize(e,t,n)}getMaxBounds(){return this._helper.getMaxBounds()}setMaxBounds(e){this._helper.setMaxBounds(e)}setConstrainOverride(e){this._helper.setConstrainOverride(e)}overrideNearFarZ(e,t){this._helper.overrideNearFarZ(e,t)}clearNearFarZOverride(){this._helper.clearNearFarZOverride()}getCameraQueryGeometry(e){return this._helper.getCameraQueryGeometry(this.getCameraPoint(),e)}get tileSize(){return this._helper.tileSize}get tileZoom(){return this._helper.tileZoom}get scale(){return this._helper.scale}get worldSize(){return this._helper.worldSize}get width(){return this._helper.width}get height(){return this._helper.height}get lngRange(){return this._helper.lngRange}get latRange(){return this._helper.latRange}get minZoom(){return this._helper.minZoom}get maxZoom(){return this._helper.maxZoom}get zoom(){return this._helper.zoom}get center(){return this._helper.center}get minPitch(){return this._helper.minPitch}get maxPitch(){return this._helper.maxPitch}get pitch(){return this._helper.pitch}get pitchInRadians(){return this._helper.pitchInRadians}get roll(){return this._helper.roll}get rollInRadians(){return this._helper.rollInRadians}get bearing(){return this._helper.bearing}get bearingInRadians(){return this._helper.bearingInRadians}get fov(){return this._helper.fov}get fovInRadians(){return this._helper.fovInRadians}get elevation(){return this._helper.elevation}get minElevationForCurrentTile(){return this._helper.minElevationForCurrentTile}get padding(){return this._helper.padding}get unmodified(){return this._helper.unmodified}get renderWorldCopies(){return this._helper.renderWorldCopies}get cameraToCenterDistance(){return this._helper.cameraToCenterDistance}get constrainOverride(){return this._helper.constrainOverride}get nearZ(){return this._helper.nearZ}get farZ(){return this._helper.farZ}get autoCalculateNearFarZ(){return this._helper.autoCalculateNearFarZ}setTransitionState(e){}constructor(e,t){this._posMatrixCache=new Map,this._alignedPosMatrixCache=new Map,this._fogMatrixCacheF32=new Map,this.defaultConstrain=(e,t)=>{t=R(+t,this.minZoom,this.maxZoom);let n={center:new X(e.lng,e.lat),zoom:t},r=this._helper._lngRange;!this._helper._renderWorldCopies&&r===null&&(r=[-179.9999999999,180-1e-10]);let i=this.tileSize*Gt(n.zoom),a=0,o=i,s=0,c=i,l=0,u=0,{top:d=0,bottom:f=0,left:p=0,right:m=0}=this.padding,h=this.width-p-m,g=this.height-d-f;if(this._helper._latRange){let e=this._helper._latRange;a=Um(e[1])*i,o=Um(e[0])*i,o-ao&&(b=o-e)}if(r){let e=(s+c)/2,t=_;this._helper._renderWorldCopies&&(t=zt(_,e-i/2,e+i/2));let n=h/2;t-nc&&(y=c-n)}return(y!==void 0||b!==void 0)&&(n.center=eh(i,new k(y??_,b??v)).wrap()),n},this.applyConstrain=(e,t)=>this._helper.applyConstrain(e,t),this._helper=t??new vO({calcMatrices:()=>this._calcMatrices(),defaultConstrain:(e,t)=>this.defaultConstrain(e,t)},e),this._coveringTilesDetailsProvider=new yO}clone(){let t=new e;return t.apply(this,!1),t}apply(e,t){this._helper.apply(e,t)}get cameraPosition(){return this._cameraPosition}get projectionMatrix(){return this._projectionMatrix}get modelViewProjectionMatrix(){return this._viewProjMatrix}get inverseProjectionMatrix(){return this._invProjMatrix}get mercatorMatrix(){return this._mercatorMatrix}getVisibleUnwrappedCoordinates(e){let t=[new zb(0,e)];if(this._helper._renderWorldCopies){let n=this.screenPointToMercatorCoordinate(new k(0,0)),r=this.screenPointToMercatorCoordinate(new k(this._helper._width,0)),i=this.screenPointToMercatorCoordinate(new k(this._helper._width,this._helper._height)),a=this.screenPointToMercatorCoordinate(new k(0,this._helper._height)),o=Math.floor(Math.min(n.x,r.x,i.x,a.x)),s=Math.floor(Math.max(n.x,r.x,i.x,a.x));for(let n=o-1;n<=s+1;n++)n!==0&&t.push(new zb(n,e))}return t}getCameraFrustum(){return xE.fromInvProjectionMatrix(this._invViewProjMatrix,this.worldSize)}getClippingPlane(){return null}getCoveringTilesDetailsProvider(){return this._coveringTilesDetailsProvider}recalculateZoomAndCenter(e){for(let t=0;t<3;t++){let t=e&&this._terrainPointPastMaxZoom(e)||this.screenPointToLocation(this.centerPoint,e),n=e?e.getElevationForLngLat(t,this):0;if(this.pitch<90&&n>=this.getCameraAltitude()||(this._helper.recalculateZoomAndCenter(n),!e||Math.abs(e.getElevationForLngLat(this.center,this)-this.elevation)<=1e-4))return}}setLocationAtPoint(e,t,n=this.elevation){let r=n-this.elevation,i=this.screenPointToMercatorCoordinateAtZ(t,r),a=this.screenPointToMercatorCoordinateAtZ(this.centerPoint,0),o=Ym.fromLngLat(e),s=new Ym(o.x-(i.x-a.x),o.y-(i.y-a.y));this.setCenter(s?.toLngLat()),this._helper._renderWorldCopies&&this.setCenter(this.center.wrap())}locationToScreenPoint(e,t){return t?this.coordinatePoint(Ym.fromLngLat(e),t.getElevationForLngLat(e,this),this._pixelMatrix3D):this.coordinatePoint(Ym.fromLngLat(e))}screenPointToLocation(e,t){return this.screenPointToMercatorCoordinate(e,t)?.toLngLat()}screenPointToLocationAtElevation(e,t){return this.screenPointToMercatorCoordinateAtZ(e,t-this.elevation)?.toLngLat()}screenPointToMercatorCoordinate(e,t){if(t){let n=this.screenTerrainPointToMercatorCoordinate(e,t);if(n!=null)return n}return this.screenPointToMercatorCoordinateAtZ(e)}_terrainPointPastMaxZoom(e){let t=e.getCoverageIndex();if(!t)return null;let{near:n,far:r}=this.getRaySegmentFromPixel(this.centerPoint,-1),i=this.cameraToCenterDistance*Gt(this.zoom-this.maxZoom),a=ze([],n,r,Math.max(0,(i-this.nearZ)/(this.farZ-this.nearZ)));return TO(wO(t,e.exaggeration,a[0]/this.worldSize,a[1]/this.worldSize),a[2])?null:this._raycastTerrain(a,r,e)?.toLngLat()??null}screenTerrainPointToMercatorCoordinate(e,t){let{near:n,far:r}=this.getRaySegmentFromPixel(e,-1);return this._raycastTerrain(n,r,t)}_raycastTerrain(e,t,n){let r=n.getCoverageIndex();if(!r)return null;let i=this.worldSize,a=t[0]-e[0],o=t[1]-e[1],s=t[2]-e[2],c={index:r,exaggeration:n.exaggeration,near:e,dx:a,dy:o,dz:s,worldSize:i},l=0,u=1;if(s===0){if(e[2]>r.maxElevation||e[2]u)return null}let d=Math.hypot(a,o),f=R(Math.ceil(d*(u-l)/4),1,512),p=0,m=!AO(c,0);for(let t=0;t<=f;t++){let n=l+(u-l)*t/f;if(!m)m=!AO(c,n);else if(AO(c,n)){let{lo:t,hi:r}=EO(c,AO,p,n,.001/d),l=kO(c,t),u=kO(c,r),f=e[2]+t*s-l.elevation,m=e[2]+r*s-u.elevation,h=l.covered&&f>m?R(t+f*(r-t)/(f-m),t,r):r;return new Ym((e[0]+h*a)/i,(e[1]+h*o)/i,kO(c,h).elevation)}p=n}return null}getRaySegmentFromPixel(e,t=0){let n=[e.x,e.y,t,1],r=[e.x,e.y,1,1];$e(n,n,this._pixelMatrixInverse),$e(r,r,this._pixelMatrixInverse);let i=n[3],a=r[3],o=this.elevation;return{near:[n[0]/i,n[1]/i,n[2]/i+o],far:[r[0]/a,r[1]/a,r[2]/a+o]}}screenPointToMercatorCoordinateAtZ(e,t){let n=t||0,{near:r,far:i}=this.getRaySegmentFromPixel(e),a=r[2]===i[2]?0:(n+this.elevation-r[2])/(i[2]-r[2]);return new Ym(ia.number(r[0],i[0],a)/this.worldSize,ia.number(r[1],i[1],a)/this.worldSize,n)}coordinatePoint(e,t=0,n=this._pixelMatrix){let r=this._coordinateClipPoint(e,t,n),i=r[3];return i>0?new k(r[0]/i,r[1]/i):this._offScreenPointBehindCamera(r[0],r[1],i)}_coordinateClipPoint(e,t,n){let r=[e.x*this.worldSize,e.y*this.worldSize,t,1];return $e(r,r,n)}_offScreenPointBehindCamera(e,t,n){let r=this.width/2,i=this.height/2,a=e-r*n,o=t-i*n;a===0&&o===0&&(o=1);let s=r+this.width,c=i+this.height,l=Math.min(a===0?1/0:s/Math.abs(a),o===0?1/0:c/Math.abs(o));return new k(r+a*l,i+o*l)}getBounds(){let e=Math.max(0,this._helper._height/2-th(this));return new Mb().extend(this.screenPointToLocation(new k(0,e))).extend(this.screenPointToLocation(new k(this._helper._width,e))).extend(this.screenPointToLocation(new k(this._helper._width,this._helper._height))).extend(this.screenPointToLocation(new k(0,this._helper._height)))}isPointOnMapSurface(e,t){return t?this.screenTerrainPointToMercatorCoordinate(e,t)!=null:e.y>this.centerPoint.y-th(this)}calculatePosMatrix(e,t=!1,n=!1){let r=e.key??Vb(e.wrap,e.canonical.z,e.canonical.z,e.canonical.x,e.canonical.y),i=t?this._alignedPosMatrixCache:this._posMatrixCache;if(i.has(r)){let e=i.get(r);return n?e.f32:e.f64}let a=nh(e,this.worldSize);he(a,t?this._alignedProjMatrix:this._viewProjMatrix,a);let o={f64:a,f32:new Float32Array(a)};return i.set(r,o),n?o.f32:o.f64}calculateFogMatrix(e){let t=e.key,n=this._fogMatrixCacheF32;if(n.has(t))return n.get(t);let r=nh(e,this.worldSize);return he(r,this._fogMatrix,r),n.set(t,new Float32Array(r)),n.get(t)}calculateCenterFromCameraLngLatAlt(e,t,n,r){return this._helper.calculateCenterFromCameraLngLatAlt(e,t,n,r)}calculateCameraOptionsFromTo(e,t,n,r){let i=Ym.fromLngLat(e,t),a=Ym.fromLngLat(n,r),o=a.x-i.x,s=a.y-i.y,c=a.z-i.z,l=Math.hypot(o,s,c);if(l===0)throw Error(`Can't calculate camera options with same From and To`);let u=Math.hypot(o,s),d=Kt(this.cameraToCenterDistance/l/this.tileSize),f=hn(Math.atan2(o,-s)),p=hn(Math.acos(u/l));return p=c<0?90-p:90+p,{center:a.toLngLat(),elevation:r,zoom:d,pitch:p,bearing:f}}_calculateNearFarZ(e,t,n){let r=Math.min(this.elevation,this.minElevationForCurrentTile,this.getCameraAltitude()-100),i=e-r*this._helper._pixelPerMeter/Math.cos(t),a=r<0?i:e,o=Math.PI/2+this.pitchInRadians,s=mn(this.fov)*(Math.abs(Math.cos(mn(this.roll)))*this.height+Math.abs(Math.sin(mn(this.roll)))*this.width)/this.height*(.5+n.y/this.height),c=Math.sin(s)*a/Math.sin(R(Math.PI-o-s,.01,Math.PI-.01)),l=th(this),u=Math.atan(l/this._helper.cameraToCenterDistance),d=mn(.75),f=u>d?2*u*(.5+n.y/(l*2)):d,p=Math.sin(f)*a/Math.sin(R(Math.PI-o-f,.01,Math.PI-.01)),m=Math.min(c,p);this._helper._farZ=(Math.cos(Math.PI/2-t)*m+a)*1.01,this._helper._nearZ=this._helper._height/50}_calcMatrices(e=this._helper.autoCalculateNearFarZ){let t=this.centerOffset,n=$m(this.worldSize,this.center),r=n.x,i=n.y,a=mn(Math.min(this.pitch,Xm)),o=Math.max(this._helper.cameraToCenterDistance/2,this._helper.cameraToCenterDistance+this._helper._elevation*this._helper._pixelPerMeter/Math.cos(a));e&&this._calculateNearFarZ(o,a,t);let s;s=new Float64Array(16),xe(s,this.fovInRadians,this._helper._width/this._helper._height,this._helper._nearZ,this._helper._farZ),this._invProjMatrix=new Float64Array(16),ZE(this._invProjMatrix,s),s[8]=-t.x*2/this._helper._width,s[9]=t.y*2/this._helper._height,this._projectionMatrix=de(s),P(s,s,[1,-1,1]),ge(s,s,[0,0,-this._helper.cameraToCenterDistance]),ve(s,s,-this.rollInRadians),F(s,s,this.pitchInRadians),ve(s,s,-this.bearingInRadians),ge(s,s,[-r,-i,0]),this._mercatorMatrix=P([],s,[this.worldSize,this.worldSize,this.worldSize]),P(s,s,[1,1,this._helper._pixelPerMeter]),this._pixelMatrix=he(new Float64Array(16),this.clipSpaceToPixelsMatrix,s),ge(s,s,[0,0,-this.elevation]),this._viewProjMatrix=s,this._invViewProjMatrix=me([],s);let c=[0,0,-1,1];$e(c,c,this._invViewProjMatrix),this._cameraPosition=[c[0]/c[3],c[1]/c[3],c[2]/c[3]],this._fogMatrix=new Float64Array(16),xe(this._fogMatrix,this.fovInRadians,this.width/this.height,o,this._helper._farZ),this._fogMatrix[8]=-t.x*2/this.width,this._fogMatrix[9]=t.y*2/this.height,P(this._fogMatrix,this._fogMatrix,[1,-1,1]),ge(this._fogMatrix,this._fogMatrix,[0,0,-this.cameraToCenterDistance]),ve(this._fogMatrix,this._fogMatrix,-this.rollInRadians),F(this._fogMatrix,this._fogMatrix,this.pitchInRadians),ve(this._fogMatrix,this._fogMatrix,-this.bearingInRadians),ge(this._fogMatrix,this._fogMatrix,[-r,-i,0]),P(this._fogMatrix,this._fogMatrix,[1,1,this._helper._pixelPerMeter]),ge(this._fogMatrix,this._fogMatrix,[0,0,-this.elevation]),this._pixelMatrix3D=he(new Float64Array(16),this.clipSpaceToPixelsMatrix,s);let l=this._helper._width%2/2,u=this._helper._height%2/2,d=Math.cos(this.bearingInRadians),f=Math.sin(-this.bearingInRadians),p=r-Math.round(r)+d*l+f*u,m=i-Math.round(i)+d*u+f*l,h=new Float64Array(s);if(ge(h,h,[p>.5?p-1:p,m>.5?m-1:m,0]),this._alignedProjMatrix=h,s=me(new Float64Array(16),this._pixelMatrix),!s)throw Error(`failed to invert matrix`);this._pixelMatrixInverse=s,this._clearMatrixCaches()}_clearMatrixCaches(){this._posMatrixCache.clear(),this._alignedPosMatrixCache.clear(),this._fogMatrixCacheF32.clear()}maxPitchScaleFactor(){if(!this._pixelMatrixInverse)return 1;let e=this.screenPointToMercatorCoordinate(new k(0,0)),t=[e.x*this.worldSize,e.y*this.worldSize,0,1];return $e(t,t,this._pixelMatrix)[3]/this._helper.cameraToCenterDistance}getCameraPoint(){return this._helper.getCameraPoint()}getCameraAltitude(){return Math.cos(this.pitchInRadians)*this.cameraToCenterDistance/this.pixelsPerMeter+this.elevation}getCameraLngLat(){let e=Wm(1,this.center.lat)*this.worldSize,t=this._helper.cameraToCenterDistance/e;return rh(this.center,this.elevation,this.pitch,this.bearing,t).toLngLat()}getProjectionData(e){let{overscaledTileID:t,aligned:n,applyTerrainMatrix:r}=e,i=this._helper.getMercatorTileCoordinates(t),a=t?this.calculatePosMatrix(t,n,!0):null,o;return o=t?.terrainRttPosMatrix32f&&r?t.terrainRttPosMatrix32f:a||Ct(),{mainMatrix:o,tileMercatorCoords:i,clippingPlane:[0,0,0,0],projectionTransition:0,fallbackMatrix:o,clipAntimeridian:!1}}isLocationOccluded(e,t,n){if(!t?.getCoverageIndex())return!1;let r=Ym.fromLngLat(e);n??=t.getElevationForLngLat(e,this);let i=this._coordinateClipPoint(r,n,this._pixelMatrix3D),a=i[3];if(a<=0||i[2]>a)return!0;let o=new k(i[0]/a,i[1]/a),s=this.screenTerrainPointToMercatorCoordinate(o,t);if(s==null)return!1;let c=this.getRaySegmentFromPixel(o,-1),l=jO(c,r.x*this.worldSize,r.y*this.worldSize,n);return jO(c,s.x*this.worldSize,s.y*this.worldSize,s.z){if(c&&e.setZoom(ia.number(n,p,o)),gn(i,a)||NO({startEulerAngles:i,endEulerAngles:a,tr:e,k:o,useSlerp:i.roll!=a.roll}),s&&(e.interpolatePadding(r,t.padding,o),u=e.centerPoint.add(t.offsetAsPoint)),t.around)e.setLocationAtPoint(t.around,t.aroundPoint);else{let t=Gt(e.zoom-n),r=(p>n?Math.min(2,g):Math.max(.5,g))**(1-o),i=eh(e.worldSize,m.add(h.mult(o*r)).mult(t));e.setLocationAtPoint(e.renderWorldCopies?i.wrap():i,u)}},v=this._transformAtAnimationEnd(e,p,a,t.padding);return t.around?v.setLocationAtPoint(t.around,t.aroundPoint):v.setLocationAtPoint(f,v.centerPoint.add(t.offsetAsPoint)),{easeFunc:_,isZooming:c,elevationCenter:v.center}}handleFlyTo(e,t){let n=t.zoom!==void 0,r=e.zoom,i=e.applyConstrain(X.convert(t.center||t.locationAtOffset),n?+t.zoom:r),a=i.center,o=i.zoom;gO(e,a);let s=e.worldSize,c=$m(s,t.locationAtOffset),l=$m(s,a).sub(c),u=l.mag(),d=Gt(o-r),f=t.minZoom===void 0?e.minZoom:+t.minZoom,p=Math.max(f,e.minZoom),m=Math.min(p,r,o),h=e.applyConstrain(a,m).zoom,g=Gt(h-r),_=(t,n,i,u)=>{e.setZoom(t===1?o:r+Kt(n));let d=t===1?a:eh(s,c.add(l.mult(i)));e.setLocationAtPoint(e.renderWorldCopies?d.wrap():d,u)},v=this._transformAtAnimationEnd(e,o,{roll:t.roll,pitch:t.pitch,bearing:t.bearing},t.padding);return v.setLocationAtPoint(a,v.centerPoint.add(t.offsetAsPoint)),{easeFunc:_,scaleOfZoom:d,targetCenter:v.center,scaleOfMinZoom:g,pixelPathLength:u}}_transformAtAnimationEnd(e,t,n,r){let i=e.clone();return i.setZoom(t),i.setRoll(n.roll),i.setPitch(n.pitch),i.setBearing(n.bearing),i.setPadding(r),i}},IO,LO=()=>IO||=new Gl({type:new K(H.projection.type,`type`)}),RO=new rm({fill:new nm(128,2),line:new nm(512,0),tile:new nm(128,32),stencil:new nm(128,1),circle:3}),zO=class{constructor(){this._tileMeshCache={}}get name(){return`vertical-perspective`}get transitionState(){return 1}get useSubdivision(){return!0}get shaderVariantName(){return`globe`}get shaderDefine(){return`#define GLOBE`}get shaderPreludeCode(){return uO.projectionGlobe}get vertexShaderPreludeCode(){return uO.projectionMercator.vertexSource}get subdivisionGranularity(){return RO}get useGlobeControls(){return!0}destroy(){}_getMeshKey(e){return`${e.granularity.toString(36)}_${e.generateBorders?`b`:``}${e.extendToNorthPole?`n`:``}${e.extendToSouthPole?`s`:``}`}getMeshFromTileID(e,t,n,r,i){let a=(i===`stencil`?RO.stencil:RO.tile).getGranularityForZoomLevel(t.z),o=t.y===0&&r,s=t.y===(1<0}get currentProjection(){return this.useGlobeRendering?this._verticalPerspectiveProjection:this._mercatorProjection}get name(){return`globe`}get useSubdivision(){return this.currentProjection.useSubdivision}get shaderVariantName(){return this.currentProjection.shaderVariantName}get shaderDefine(){return this.currentProjection.shaderDefine}get shaderPreludeCode(){return this.currentProjection.shaderPreludeCode}get vertexShaderPreludeCode(){return this.currentProjection.vertexShaderPreludeCode}get subdivisionGranularity(){return this.currentProjection.subdivisionGranularity}get useGlobeControls(){return this.transitionState>0}destroy(){this._mercatorProjection.destroy(),this._verticalPerspectiveProjection.destroy()}getMeshFromTileID(e,t,n,r,i){return this.currentProjection.getMeshFromTileID(e,t,n,r,i)}setProjection(e){this._transitionable.setValue(`type`,e?.type||`mercator`)}updateTransitions(e){this._transitioning=this._transitionable.transitioned(e,this._transitioning)}hasTransition(){return this._transitioning.hasTransition()||this.currentProjection.hasTransition()}recalculate(e){this.properties=this._transitioning.possiblyEvaluate(e)}};function VO(e){let t=qO(e.worldSize,e.center.lat);return 2*Math.PI*t}function HO(e,t,n){let r=R(Le(KO(t),KO(n)),-1,1),i=Math.acos(r),a=VO(e);return i/(2*Math.PI)*a}function UO(e,t){return[jt(e*Math.PI*2+Math.PI,Math.PI*2),2*Math.atan(Math.exp(Math.PI-t*Math.PI*2))-Math.PI*.5]}function WO(e,t){let n=Math.cos(t),r=new Float64Array(3);return r[0]=Math.sin(e)*n,r[1]=Math.sin(t),r[2]=Math.cos(e)*n,r}function GO(e,t,n,r,i){let a=1/(1<1e-6){let r=e[0]/n,i=e[2]/n,a=Math.acos(i);return new X(zt((r>0?a:-a)/Math.PI*180,-180,180),t)}return new X(0,t)}function XO(e,t){return ot(yt(),-e.lng,-e.lat,t)}function ZO(e){let t=e[0],n=e[1],r=e[2],i=e[3];return{lng:-Math.atan2(2*(i*t+n*r),1-2*(t*t+n*n))*180/Math.PI,lat:-Math.asin(R(2*(i*n-r*t),-1,1))*180/Math.PI,bearing:Math.atan2(2*(i*r+t*n),1-2*(n*n+r*r))*180/Math.PI}}var QO=Math.PI*.98;function $O(e,t){let n=e.cameraPosition,r=Oe(n);if(r<=1)return e.screenPointToLocation(t);let i=bt();Ie(i,n);let a=e.getRayDirectionFromPixel(t),o=-Le(a,i),s=bt();Ne(s,a,i,o);let c=Oe(s);if(c<1e-9)return e.screenPointToLocation(t);let l=Math.atan2(c,o),u=Math.asin(1/r)*.9;if(l0?90:-90}function nk(e,t,n,r){let i=e.center.lng,a=e.center.lat,o=a>=0?90:-90,s=e.locationToScreenPoint(new X(0,o)),c=t.x-s.x,l=t.y-s.y,u=c*c+l*l,d=R(1-(bn-Math.abs(a))/12,0,1),f=d*d*(3-2*d),p=jt(r-i+180,360)-180,m=0;if(f>0&&n){let e=(c*n.y-l*n.x)/Math.max(u,400);m=(o>0?1:-1)*e*180/Math.PI}return i+(1-f)*p+f*m}function rk(e){let t=bt();return t[0]=e[0]*-e[3],t[1]=e[1]*-e[3],t[2]=e[2]*-e[3],{center:t,radius:Math.sqrt(1-e[3]*e[3])}}function ik(e,t,n){let r=bt();qe(r,n,e);let i=bt();return Ne(i,e,r,t/I(r)),i}function ak(e){return Math.cos(Math.min(Math.abs(e),bn)*Math.PI/180)}function ok(e,t){let n=ak(e);return Kt(ak(t)/n)}function sk(e,t){return 360/VO({worldSize:e,center:{lat:t}})}function ck(e,t){let n=e.rotate(t.bearingInRadians),r=t.zoom+ok(t.center.lat,0),i=Nt(1/ak(t.center.lat),1/ak(Math.min(Math.abs(t.center.lat),60)),Mt(r,7,3,0,1)),a=sk(t.worldSize,t.center.lat);return new X(t.center.lng-n.x*a*i,R(t.center.lat+n.y*a,-90,90))}function lk(e){let t=.5*e,n=Math.sin(t),r=Math.cos(t);return Math.log(n+r)-Math.log(r-n)}function uk(e,t,n,r){let i=R(e.lat+n*r,-90,90),a=R(e.lat,-85.051129,bn),o=R(e.lat+n,-85.051129,bn);if(Math.abs(o-a)>1){let n=(Math.sign(o)===Math.sign(a)?Math.abs(a):-Math.abs(a))*Math.PI/180,s=Math.abs(o)*Math.PI/180,c=lk(n+r*(s-n)),l=lk(n),u=lk(s),d=(c-l)/(u-l);return new X(e.lng+t*d,i)}return new X(e.lng+t*r,i)}function dk(e,t,n=1){let r=Le(e,t),i=n*n,a=bt(),o=bt();Me(o,t,r),qe(a,e,o);let s=i-Le(a,a);if(s<0)return null;let c=Le(e,e)-i,l=-r+(r<0?1:-1)*Math.sqrt(s),u=c/l,d=l,f=Math.max(u,d);return f<0?null:{tMin:Math.min(u,d),tMax:f}}function fk(e,t){let n=t*.01569612305760477,r=R((e-n)/(9*n),0,1);return r*r*(3-2*r)}var pk=class{constructor(e){this._cachePrevious=new Map,this._cache=new Map,this._hadAnyChanges=!1,this._boundingVolumeFactory=e}swapBuffers(){if(!this._hadAnyChanges)return;let e=this._cachePrevious;this._cachePrevious=this._cache,this._cache=e,this._cache.clear(),this._hadAnyChanges=!1}getTileBoundingVolume(e,t,n,r){let i=`${e.z}_${e.x}_${e.y}_${r?.terrain?`t`:``}_${Math.round(n)}`,a=this._cache.get(i);if(a)return a;let o=this._cachePrevious.get(i);if(o)return this._cache.set(i,o),o;let s=this._boundingVolumeFactory(e,t,n,r);return this._cache.set(i,s),this._hadAnyChanges=!0,s}},mk=class e{constructor(e,t,n,r){this.min=n,this.max=r,this.points=e,this.planes=t}static fromAabb(t,n){let r=[];for(let e=0;e<8;e++)r.push([((e|0)&1)==1?n[0]:t[0],(e>>1&1)==1?n[1]:t[1],(e>>2&1)==1?n[2]:t[2]]);return new e(r,[[-1,0,0,n[0]],[1,0,0,-t[0]],[0,-1,0,n[1]],[0,1,0,-t[1]],[0,0,-1,n[2]],[0,0,1,-t[2]]],t,n)}static fromCenterSizeAngles(t,n,r){let i=ot([],r[0],r[1],r[2]),a=He([],[n[0],0,0],i),o=He([],[0,n[1],0],i),s=He([],[0,0,n[2]],i),c=[...t],l=[...t];for(let e=0;e<8;e++)for(let n=0;n<3;n++){let r=t[n]+a[n]*(((e|0)&1)==1?1:-1)+o[n]*((e>>1&1)==1?1:-1)+s[n]*((e>>2&1)==1?1:-1);c[n]=Math.min(c[n],r),l[n]=Math.max(l[n],r)}let u=[];for(let e=0;e<8;e++){let n=[...t];Ae(n,n,Me([],a,((e|0)&1)==1?1:-1)),Ae(n,n,Me([],o,(e>>1&1)==1?1:-1)),Ae(n,n,Me([],s,(e>>2&1)==1?1:-1)),u.push(n)}return new e(u,[[...a,-Le(a,u[0])],[...o,-Le(o,u[0])],[...s,-Le(s,u[0])],[-a[0],-a[1],-a[2],-Le(a,u[7])],[-o[0],-o[1],-o[2],-Le(o,u[7])],[-s[0],-s[1],-s[2],-Le(s,u[7])]],c,l)}intersectsFrustum(e){let t=!0,n=this.points.length,r=this.planes.length,i=e.planes.length,a=e.points.length;for(let r=0;r=0&&a++}if(a===0)return 0;a=0&&r++}if(r===0)return 0}return 1}intersectsPlane(e){let t=this.points.length,n=0;for(let r=0;r=0&&n++}return n===t?2:n===0?0:1}};function hk(e,t,n){let r=e-t;return r<0?-r:Math.max(0,r-n)}function gk(e,t,n,r,i){let a=e-n,o;return o=a<0?Math.min(-a,1+a-i):a>i?Math.min(Math.max(a-i,0),1-a):0,Math.max(o,hk(t,r,i))}var _k=class{constructor(){this._boundingVolumeCache=new pk(this._computeTileBoundingVolume)}getCenter(e){return new X(e.center.lng,R(e.center.lat,-85.051129,bn))}prepareNextFrame(){this._boundingVolumeCache.swapBuffers()}distanceToTile2d(e,t,n,r){let i=1<4}allowWorldCopies(){return!1}getTileBoundingVolume(e,t,n,r){return this._boundingVolumeCache.getTileBoundingVolume(e,t,n,r)}_computeTileBoundingVolume(e,t,n,r){let i=Math.min(0,n),a=Math.max(0,n);if(r?.terrain){let n=new Bb(e.z,t,e.z,e.x,e.y),o=r.terrain.getMinMaxElevation(n);i=o.minElevation??i,a=Math.max(o.maxElevation??a,a)}if(i/=zm,a/=zm,i+=1,a+=1,e.z<=0)return mk.fromAabb([-a,-a,-a],[a,a,a]);if(e.z===1)return mk.fromAabb([e.x===0?-a:0,e.y===0?0:-a,-a],[e.x===0?0:a,e.y===0?a:0,a]);{let t=[GO(0,0,e.x,e.y,e.z),GO(L,0,e.x,e.y,e.z),GO(L,L,e.x,e.y,e.z),GO(0,L,e.x,e.y,e.z)],n=[];for(let e of t)n.push(Me([],e,a));if(a!==i)for(let e of t)n.push(Me([],e,i));e.y===0&&n.push([0,1,0]),e.y===(1<=(1<{let n=R(+t,this.minZoom+ok(0,e.lat),this.maxZoom),r=this._getMaxLatitude(n);return{center:new X(e.lng,R(e.lat,-r,r)),zoom:n}},this.applyConstrain=(e,t)=>this._helper.applyConstrain(e,t),this._helper=t??new vO({calcMatrices:()=>this._calcMatrices(),defaultConstrain:(e,t)=>this.defaultConstrain(e,t)},e),this._coveringTilesDetailsProvider=new _k}clone(){let t=new e;return t.apply(this,!1),t}apply(e,t){this._helper.apply(e,t)}get projectionMatrix(){return this._projectionMatrix}get modelViewProjectionMatrix(){return this._globeViewProjMatrixF64}get inverseProjectionMatrix(){return this._globeProjMatrixInverted}get cameraPosition(){let e=bt();return e[0]=this._cameraPosition[0],e[1]=this._cameraPosition[1],e[2]=this._cameraPosition[2],e}get cameraToCenterDistance(){return this._helper.cameraToCenterDistance}getProjectionData(e){let{overscaledTileID:t,applyGlobeMatrix:n}=e,r=this._helper.getMercatorTileCoordinates(t);return{mainMatrix:this._globeViewProjMatrix32f,tileMercatorCoords:r,clippingPlane:this._cachedClippingPlane,projectionTransition:+!!n,fallbackMatrix:this._globeViewProjMatrix32f,clipAntimeridian:t?.canonical.z===0}}_computeClippingPlane(e){let t=this.pitchInRadians,n=this.cameraToCenterDistance/e,r=Math.sin(t)*n,i=Math.cos(t)*n+1,a=1/Math.sqrt(r*r+i*i)*1,o=-r,s=i,c=Math.sqrt(o*o+s*s);o/=c,s/=c;let l=[0,o,s];Ge(l,l,[0,0,0],-this.bearingInRadians),Ue(l,l,[0,0,0],-1*this.center.lat*Math.PI/180),We(l,l,[0,0,0],this.center.lng*Math.PI/180);let u=1/Oe(l);return Me(l,l,u),[...l,-a*u]}isLocationOccluded(e,t,n){let r=t?.getCoverageIndex();n??=r?t.getElevationForLngLat(e,this):0;let i=wk(e,n);if(!this.isSurfacePointVisible(i))return!0;if(!r)return!1;let a=this._projectSurfacePointToScreen(i),o=this.cameraPosition,s=this.getRayDirectionFromPixel(a),c=Tk(o,s,i);if(c<=0)return!0;let l=this.screenTerrainPointToMercatorCoordinate(a,t);return l!=null&&Tk(o,s,wk(l.toLngLat(),l.z))i&&(i=t),no&&(o=n)}let l=[c.lng+a,c.lat+s,c.lng+i,c.lat+o];return this.isSurfacePointOnScreen([0,1,0])&&(l[3]=90,l[0]=-180,l[2]=180),this.isSurfacePointOnScreen([0,-1,0])&&(l[1]=-90,l[0]=-180,l[2]=180),new Mb(l)}_getMaxLatitude(e){let t=mn(4.948870999999997),n=qO(this.tileSize*Gt(e),bn)*t,r=Math.min(this.width,this.height)/2;return bn+hn(t*(Math.min(n,r)*Mt(n,r,r*4,1,0))/n)}calculateCenterFromCameraLngLatAlt(e,t,n,r){return this._helper.calculateCenterFromCameraLngLatAlt(e,t,n,r)}calculateCameraOptionsFromTo(e,t,n,r){let i=X.convert(n),a=KO(X.convert(e));Me(a,a,1+t/zm);let o=KO(i),s=Me(bt(),o,1+r/zm),c=je(bt(),a,o),l=Oe(c);if(l=-_&&m<=_,y=g>=-_&&g<=_,b,x;if(v&&y){let e=this.center.lng*Math.PI/180,t=this.center.lat*Math.PI/180,n=At(d,e),r=At(m,t),i=At(f,e),a=At(g,t);n+r=0}isSurfacePointOnScreen(e){if(!this.isSurfacePointVisible(e))return!1;let t=yt();return $e(t,[...e,1],this._globeViewProjMatrixF64),t[0]/=t[3],t[1]/=t[3],t[2]/=t[3],t[0]>-1&&t[0]<1&&t[1]>-1&&t[1]<1&&t[2]>-1&&t[2]<1}unprojectScreenPoint(e){let t=this._cameraPosition,n=this.getRayDirectionFromPixel(e),r=dk(t,n);if(r){let e=bt();Ae(e,t,[n[0]*r.tMin,n[1]*r.tMin,n[2]*r.tMin]);let i=bt();return Ie(i,e),YO(i)}let i=this._cachedClippingPlane,a=i[0]*n[0]+i[1]*n[1]+i[2]*n[2],o=-Tt(i,t)/a,s=bt();if(o>0)Ae(s,t,[n[0]*o,n[1]*o,n[2]*o]);else{let e=bt();Ae(e,t,[n[0]*2,n[1]*2,n[2]*2]);let r=Tt(this._cachedClippingPlane,e);qe(s,e,[this._cachedClippingPlane[0]*r,this._cachedClippingPlane[1]*r,this._cachedClippingPlane[2]*r])}let c=rk(i);return YO(ik(c.center,c.radius,s))}getProjectionDataForCustomLayer(e=!0){let t=this.getProjectionData({overscaledTileID:new Bb(0,0,0,0,0),applyGlobeMatrix:e});return t.tileMercatorCoords=[0,0,1,1],t}getFastPathSimpleProjectionMatrix(e){}};function xk(e){return new bk(e)}function Sk(e,t){let n=bt();Ne(n,e.origin,e.direction,t);let r=Oe(n),i=bt();Me(i,n,1/r);let a=YO(i),o=Ym.fromLngLat(a),s=new Ym(o.x,R(o.y,0,.999999999)),c=wO(e.index,e.exaggeration,s.x,s.y),l=Math.abs(a.lat)>85.051129?0:c.elevation;return{sample:{...c,elevation:l},radius:r,mercator:s}}function Ck(e,t){let{sample:n,radius:r}=Sk(e,t);return TO(n,(r-1)*zm)}function wk(e,t){let n=KO(e);return Me(n,n,1+t/zm)}function Tk(e,t,n){return Le(je(bt(),n,e),t)}var Ek=class e{get pixelsToClipSpaceMatrix(){return this._helper.pixelsToClipSpaceMatrix}get clipSpaceToPixelsMatrix(){return this._helper.clipSpaceToPixelsMatrix}get pixelsToGLUnits(){return this._helper.pixelsToGLUnits}get centerOffset(){return this._helper.centerOffset}get size(){return this._helper.size}get rotationMatrix(){return this._helper.rotationMatrix}get centerPoint(){return this._helper.centerPoint}get pixelsPerMeter(){return this._helper.pixelsPerMeter}setMinZoom(e){this._helper.setMinZoom(e)}setMaxZoom(e){this._helper.setMaxZoom(e)}setMinPitch(e){this._helper.setMinPitch(e)}setMaxPitch(e){this._helper.setMaxPitch(e)}setRenderWorldCopies(e){this._helper.setRenderWorldCopies(e)}setBearing(e){this._helper.setBearing(e)}setPitch(e){this._helper.setPitch(e)}setRoll(e){this._helper.setRoll(e)}setFov(e){this._helper.setFov(e)}setZoom(e){this._helper.setZoom(e)}setCenter(e){this._helper.setCenter(e)}setElevation(e){this._helper.setElevation(e)}setMinElevationForCurrentTile(e){this._helper.setMinElevationForCurrentTile(e)}setPadding(e){this._helper.setPadding(e)}interpolatePadding(e,t,n){this._helper.interpolatePadding(e,t,n)}isPaddingEqual(e){return this._helper.isPaddingEqual(e)}resize(e,t,n=!0){this._helper.resize(e,t,n)}getMaxBounds(){return this._helper.getMaxBounds()}setMaxBounds(e){this._helper.setMaxBounds(e)}setConstrainOverride(e){this._helper.setConstrainOverride(e)}overrideNearFarZ(e,t){this._helper.overrideNearFarZ(e,t)}clearNearFarZOverride(){this._helper.clearNearFarZOverride()}getCameraQueryGeometry(e){return this._helper.getCameraQueryGeometry(this.getCameraPoint(),e)}get tileSize(){return this._helper.tileSize}get tileZoom(){return this._helper.tileZoom}get scale(){return this._helper.scale}get worldSize(){return this._helper.worldSize}get width(){return this._helper.width}get height(){return this._helper.height}get lngRange(){return this._helper.lngRange}get latRange(){return this._helper.latRange}get minZoom(){return this._helper.minZoom}get maxZoom(){return this._helper.maxZoom}get zoom(){return this._helper.zoom}get center(){return this._helper.center}get minPitch(){return this._helper.minPitch}get maxPitch(){return this._helper.maxPitch}get pitch(){return this._helper.pitch}get pitchInRadians(){return this._helper.pitchInRadians}get roll(){return this._helper.roll}get rollInRadians(){return this._helper.rollInRadians}get bearing(){return this._helper.bearing}get bearingInRadians(){return this._helper.bearingInRadians}get fov(){return this._helper.fov}get fovInRadians(){return this._helper.fovInRadians}get elevation(){return this._helper.elevation}get minElevationForCurrentTile(){return this._helper.minElevationForCurrentTile}get padding(){return this._helper.padding}get unmodified(){return this._helper.unmodified}get renderWorldCopies(){return this._helper.renderWorldCopies}get cameraToCenterDistance(){return this._helper.cameraToCenterDistance}get constrainOverride(){return this._helper.constrainOverride}get nearZ(){return this._helper.nearZ}get farZ(){return this._helper.farZ}get autoCalculateNearFarZ(){return this._helper.autoCalculateNearFarZ}get isGlobeRendering(){return this._globeness>0}setTransitionState(e){this._globeness=e,this._calcMatrices(),this._verticalPerspectiveTransform.getCoveringTilesDetailsProvider().prepareNextFrame(),this._mercatorTransform.getCoveringTilesDetailsProvider().prepareNextFrame()}get currentTransform(){return this.isGlobeRendering?this._verticalPerspectiveTransform:this._mercatorTransform}constructor(e){this._globeness=1,this.defaultConstrain=(e,t)=>this.currentTransform.defaultConstrain(e,t),this.applyConstrain=(e,t)=>this._helper.applyConstrain(e,t),this._helper=new vO({calcMatrices:()=>this._calcMatrices(),defaultConstrain:(e,t)=>this.defaultConstrain(e,t)},e),this._globeness=1,this._mercatorTransform=new DO(void 0,this._helper),this._verticalPerspectiveTransform=new bk(void 0,this._helper)}clone(){let t=new e;return t._globeness=this._globeness,t.apply(this,!1),t}apply(e,t){this._helper.apply(e,t)}get projectionMatrix(){return this.currentTransform.projectionMatrix}get modelViewProjectionMatrix(){return this.currentTransform.modelViewProjectionMatrix}get inverseProjectionMatrix(){return this.currentTransform.inverseProjectionMatrix}get cameraPosition(){return this.currentTransform.cameraPosition}getProjectionData(e){let t=this._mercatorTransform.getProjectionData(e),n=this._verticalPerspectiveTransform.getProjectionData(e);return{mainMatrix:this.isGlobeRendering?n.mainMatrix:t.mainMatrix,clippingPlane:n.clippingPlane,tileMercatorCoords:n.tileMercatorCoords,projectionTransition:e.applyGlobeMatrix?this._globeness:0,fallbackMatrix:t.fallbackMatrix,clipAntimeridian:n.clipAntimeridian}}isLocationOccluded(e,t,n){return this.currentTransform.isLocationOccluded(e,t,n)}transformLightDirection(e){return this.currentTransform.transformLightDirection(e)}getPixelScale(){return Nt(this._mercatorTransform.getPixelScale(),this._verticalPerspectiveTransform.getPixelScale(),this._globeness)}getCircleRadiusCorrection(){return this.currentTransform.getCircleRadiusCorrection()}getPitchedTextCorrection(e,t,n){return Nt(this._mercatorTransform.getPitchedTextCorrection(e,t,n),this._verticalPerspectiveTransform.getPitchedTextCorrection(e,t,n),this._globeness)}projectTileCoordinates(e,t,n,r){return this.currentTransform.projectTileCoordinates(e,t,n,r)}_calcMatrices(){this._helper._width&&this._helper._height&&(this._verticalPerspectiveTransform._calcMatrices(),this._mercatorTransform._calcMatrices(this.autoCalculateNearFarZ&&!this.isGlobeRendering))}calculateFogMatrix(e){return this.currentTransform.calculateFogMatrix(e)}getVisibleUnwrappedCoordinates(e){return this.currentTransform.getVisibleUnwrappedCoordinates(e)}getCameraFrustum(){return this.currentTransform.getCameraFrustum()}getClippingPlane(){return this.currentTransform.getClippingPlane()}getCoveringTilesDetailsProvider(){return this.currentTransform.getCoveringTilesDetailsProvider()}recalculateZoomAndCenter(e){this.currentTransform.recalculateZoomAndCenter(e)}maxPitchScaleFactor(){return this._mercatorTransform.maxPitchScaleFactor()}getCameraPoint(){return this._helper.getCameraPoint()}getCameraAltitude(){return this.currentTransform.getCameraAltitude()}getCameraLngLat(){return this.currentTransform.getCameraLngLat()}populateCache(e){this._mercatorTransform.populateCache(e),this._verticalPerspectiveTransform.populateCache(e)}getBounds(){return this.currentTransform.getBounds()}calculateCenterFromCameraLngLatAlt(e,t,n,r){return this._helper.calculateCenterFromCameraLngLatAlt(e,t,n,r)}calculateCameraOptionsFromTo(e,t,n,r){return this.currentTransform.calculateCameraOptionsFromTo(e,t,n,r)}setLocationAtPoint(e,t,n){this.currentTransform.setLocationAtPoint(e,t,n)}locationToScreenPoint(e,t){return this.currentTransform.locationToScreenPoint(e,t)}screenPointToMercatorCoordinate(e,t){return this.currentTransform.screenPointToMercatorCoordinate(e,t)}screenTerrainPointToMercatorCoordinate(e,t){return this.currentTransform.screenTerrainPointToMercatorCoordinate(e,t)}screenPointToLocation(e,t){return this.currentTransform.screenPointToLocation(e,t)}screenPointToLocationAtElevation(e,t){return this.currentTransform.screenPointToLocationAtElevation(e,t)}isPointOnMapSurface(e,t){return this.currentTransform.isPointOnMapSurface(e,t)}getRayDirectionFromPixel(e){return this._verticalPerspectiveTransform.getRayDirectionFromPixel(e)}getProjectionDataForCustomLayer(e=!0){let t=this._mercatorTransform.getProjectionDataForCustomLayer(e);if(!this.isGlobeRendering)return t;let n=this._verticalPerspectiveTransform.getProjectionDataForCustomLayer(e);return n.fallbackMatrix=t.mainMatrix,n.projectionTransition=this._globeness,n}getFastPathSimpleProjectionMatrix(e){return this.currentTransform.getFastPathSimpleProjectionMatrix(e)}};function Dk(e){return new Ek(e)}var Ok=class e{get useGlobeControls(){return!0}handlePanInertia(e,t){let n=ck(e,t);return Math.abs(n.lng-t.center.lng)>180&&(n.lng=t.center.lng+179.5*Math.sign(n.lng-t.center.lng)),{easingCenter:n,easingOffset:new k(0,0)}}handleMapControlsRollPitchBearingZoom(e,t){let n=e.around,r=t.screenPointToLocation(n);e.bearingDelta&&t.setBearing(t.bearing+e.bearingDelta),e.pitchDelta&&t.setPitch(t.pitch+e.pitchDelta),e.rollDelta&&t.setRoll(t.roll+e.rollDelta);let i=t.zoom;e.zoomDelta&&t.setZoom(t.zoom+e.zoomDelta);let a=t.zoom-i;if(a===0)return;let o=kt(t.center.lng,r.lng),s=o/(Math.abs(o/180)+1),c=kt(t.center.lat,r.lat),l=t.getRayDirectionFromPixel(n),u=t.cameraPosition,d=Le(u,l)*-1,f=bt();Ae(f,u,[l[0]*d,l[1]*d,l[2]*d]);let p=Oe(f),m=p-1,h=Math.exp(-Math.max(m-.3,0)*.5),g=Mt(p,.95,.999,0,1),_=Mt(qO(t.worldSize,t.center.lat)/Math.min(t.width,t.height),.9,.5,1,.25),v=Math.min(h,Nt(1,_,g)),y=(1-Gt(-a))*v,b=t.center.lat,x=t.zoom,S=new X(t.center.lng+s*y,R(t.center.lat+c*y,-90,90));t.setLocationAtPoint(r,n);let C=t.center,w=Mt(Math.abs(o),45,85,0,1),T=Math.max(w,g)**.25,E=kt(C.lng,S.lng),D=kt(C.lat,S.lat);t.setCenter(new X(C.lng+E*T,R(C.lat+D*T,-90,90)).wrap()),t.setZoom(x+ok(b,t.center.lat))}handleMapControlsPan(e,t,n){e.panDelta&&ek(t,n,t.isPointOnMapSurface(e.around)?e.around:t.centerPoint,e.panDelta)}cameraForBoxAndBearing(t,n,r,i,a,o){let s=PO(t,n,r,i,a,o);if(!s)return;let c=n.left/o.width*2-1,l=(o.width-n.right)/o.width*2-1,u=n.top/o.height*-2+1,d=(o.height-n.bottom)/o.height*-2+1,f=kt(i.getWest(),i.getEast())<0,p=f?i.getEast():i.getWest(),m=f?i.getWest():i.getEast(),h=Math.max(i.getNorth(),i.getSouth()),g=Math.min(i.getNorth(),i.getSouth()),_=p+kt(p,m)*.5,v=h+kt(h,g)*.5,y=o.clone();y.setCenter(s.center),y.setPadding(r),y.setBearing(s.bearing),y.setPitch(0),y.setRoll(0),y.setZoom(s.zoom);let b=y.modelViewProjectionMatrix,x=[KO(i.getNorthWest()),KO(i.getNorthEast()),KO(i.getSouthWest()),KO(i.getSouthEast()),KO(new X(m,v)),KO(new X(p,v)),KO(new X(_,h)),KO(new X(_,g))],S=KO(s.center),C=1/0;for(let t of x)c<0&&(C=e.getLesserNonNegativeNonNull(C,e.solveVectorScale(t,S,b,`x`,c))),l>0&&(C=e.getLesserNonNegativeNonNull(C,e.solveVectorScale(t,S,b,`x`,l))),u>0&&(C=e.getLesserNonNegativeNonNull(C,e.solveVectorScale(t,S,b,`y`,u))),d<0&&(C=e.getLesserNonNegativeNonNull(C,e.solveVectorScale(t,S,b,`y`,d)));if(!Number.isFinite(C)||C===0)MO();else return s.zoom=Math.min(y.zoom+Kt(C),t.maxZoom),s}handleJumpToCenterZoom(e,t){let n=e.center.lat,r=t.center?X.convert(t.center):e.center;e.setCenter(e.applyConstrain(r,e.zoom).center.wrap());let i=t.zoom===void 0?e.zoom+ok(n,e.center.lat):+t.zoom;e.zoom!==i&&(e.setZoom(i),e.setCenter(e.applyConstrain(r,e.zoom).center.wrap()))}handleEaseTo(e,t){let n=e.zoom,r=e.center,i=e.padding,a={roll:e.roll,pitch:e.pitch,bearing:e.bearing},o={roll:t.roll===void 0?e.roll:t.roll,pitch:t.pitch===void 0?e.pitch:t.pitch,bearing:t.bearing===void 0?e.bearing:t.bearing},s=t.zoom!==void 0,c=!e.isPaddingEqual(t.padding),l=!1,u=t.center?X.convert(t.center):r,d=e.applyConstrain(u,s?+t.zoom:n).center;gO(e,d);let f=e.clone();f.setCenter(d),f.setZoom(s?+t.zoom:n+ok(r.lat,u.lat)),f.setBearing(t.bearing);let p=new k(R(e.centerPoint.x+t.offsetAsPoint.x,0,e.width),R(e.centerPoint.y+t.offsetAsPoint.y,0,e.height));f.setLocationAtPoint(d,p);let m=(t.offset&&t.offsetAsPoint.mag())>0?f.center:d,h=s?+t.zoom:n+ok(r.lat,m.lat),g=n+ok(r.lat,0),_=h+ok(m.lat,0),v=kt(r.lng,m.lng),y=kt(r.lat,m.lat),b=Gt(_-g);return l=h!==n,{easeFunc:n=>{if(gn(a,o)||NO({startEulerAngles:a,endEulerAngles:o,tr:e,k:n,useSlerp:a.roll!=o.roll}),c&&e.interpolatePadding(i,t.padding,n),t.around)$t(`Easing around a point is not supported under globe projection.`),e.setLocationAtPoint(t.around,t.aroundPoint);else{let t=n*(_>g?Math.min(2,b):Math.max(.5,b))**(1-n),i=uk(r,v,y,t);e.setCenter(i.wrap())}if(l){let t=ia.number(g,_,n)+ok(0,e.center.lat);e.setZoom(t)}n===1&&!t.around&&e.setCenter(m.wrap())},isZooming:l,elevationCenter:m}}handleFlyTo(e,t){let n=t.zoom!==void 0,r=e.center,i=e.zoom,a=e.padding,o=!e.isPaddingEqual(t.padding),s=e.applyConstrain(X.convert(t.center||t.locationAtOffset),n?+t.zoom:i).center,c=n?+t.zoom:e.zoom+ok(e.center.lat,s.lat),l=e.clone();l.setCenter(s),l.setZoom(c),l.setBearing(t.bearing);let u=new k(R(e.centerPoint.x+t.offsetAsPoint.x,0,e.width),R(e.centerPoint.y+t.offsetAsPoint.y,0,e.height));l.setLocationAtPoint(s,u);let d=l.center;gO(e,d);let f=HO(e,r,d),p=i+ok(r.lat,0),m=c+ok(d.lat,0),h=Gt(m-p),g=typeof t.minZoom==`number`?+t.minZoom:e.minZoom,_=Math.max(g,e.minZoom)+ok(d.lat,0),v=Math.min(_,p,m)+ok(0,d.lat),y=Gt(e.applyConstrain(d,v).zoom+ok(d.lat,0)-p),b=kt(r.lng,d.lng),x=kt(r.lat,d.lat);return{easeFunc:(n,i,s,l)=>{let u=uk(r,b,x,s);o&&e.interpolatePadding(a,t.padding,n);let f=n===1?d:u;e.setCenter(f.wrap());let m=p+Kt(i);e.setZoom(n===1?c:m+ok(0,f.lat)),n===1&&e.setCenter(d.wrap())},scaleOfZoom:h,targetCenter:d,scaleOfMinZoom:y,pixelPathLength:f}}static solveVectorScale(e,t,n,r,i){let a=i,o=r===`x`?[n[0],n[4],n[8],n[12]]:[n[1],n[5],n[9],n[13]],s=[n[3],n[7],n[11],n[15]],c=e[0]*o[0]+e[1]*o[1]+e[2]*o[2],l=e[0]*s[0]+e[1]*s[1]+e[2]*s[2],u=t[0]*o[0]+t[1]*o[1]+t[2]*o[2],d=t[0]*s[0]+t[1]*s[1]+t[2]*s[2],f=(u+o[3]-a*d-a*s[3])/(u-c-a*d+a*l);return u+a*l===c+a*d||s[3]*(c-u)+o[3]*(d-l)+c*d===u*l?null:f}static getLesserNonNegativeNonNull(e,t){return t!==null&&t>=0&&t{for(let e in this.tileManagers){let t=this.tileManagers[e].getSource().type;(t===`vector`||t===`geojson`)&&this.tileManagers[e].reload()}},this.map=e,this.dispatcher=new vb(_b(),e._getMapId()).setEventedParent(this),this.dispatcher.registerMessageHandler(`GG`,(e,t)=>this.getGlyphs(e,t)),this.dispatcher.registerMessageHandler(`GI`,(e,t)=>this.getImages(e,t)),this.dispatcher.registerMessageHandler(`GDA`,(e,t)=>this.getDashes(e,t)),this.imageManager=new My,this.imageManager.setEventedParent(this),this.imageManager.setMissingImageResolver(e._missingStyleImageResolver),this.patternAtlas=new Ny(this.imageManager);let n=e._container?.lang||typeof document<`u`&&document.documentElement?.lang||void 0;this.glyphManager=new Jy(e._requestManager,t.localIdeographFontFamily,n),this.lineAtlas=new nb(256,512),this.crossTileSymbolIndex=new eO,this._setInitialValues(),this._initialGlobalState=t.globalState??{},this._resetUpdates(),this.dispatcher.broadcast(`SR`,qn()),hE().on(fE,this._rtlPluginLoaded),this.on(`data`,e=>{if(e.dataType!==`source`||e.sourceDataType!==`metadata`)return;let t=this.tileManagers[e.sourceId];if(!t)return;let n=t.getSource();if(n?.vectorLayerIds)for(let e in this._layers){let t=this._layers[e];t.source===n.id&&this._validateLayer(t)}})}_setInitialValues(){this._layers={},this._order=[],this.tileManagers={},this.zoomHistory=new Al,this._imagesListDirty=!1,this._initialGlobalState={},this._globalState={},this._serializedLayers={},this.stylesheet=null,this.light=null,this.sky=null,this.projection&&(this.projection.destroy(),delete this.projection),this._loaded=!1,this._changed=!1,this._updatedLayers={},this._updatedSources={},this._changedImages={},this._glyphsDidChange=!1,this._updatedPaintProps={},this._layerOrderChanged=!1,this._symbolPlacementTriggered=!1,this._placedProjectionTransition=void 0,this.crossTileSymbolIndex=new((this.crossTileSymbolIndex?.constructor)||Object),this.pauseablePlacement=void 0,this.placement=void 0,this.z=0}setGlobalStateProperty(e,t){this._checkLoaded();let n=t===null?this.stylesheet.state?.[e]?.default??null:t;return this._setGlobalStateValues({[e]:n}),this}getGlobalState(){return this._globalState}setGlobalState(e){this._checkLoaded();let t={},n=new Set([...Object.keys(e??{}),...Object.keys(this._initialGlobalState)]);for(let r of n)t[r]=this._initialGlobalState[r]??e[r]?.default??null;this._setGlobalStateValues(t)}_setGlobalStateValues(e){let t=[];for(let n in e)Xt(e[n],this._globalState[n])||t.push(n);if(t.length===0)return;let n={...this._globalState};for(let n of t)this._globalState[n]=e[n];this._applyGlobalStateChanges(t,n)}_applyGlobalStateChanges(e,t){let n=new Set,r={};for(let t of e)r[t]=this._globalState[t];for(let r in this._layers){let i=this._layers[r];i.retainPriorGlobalState(e,t);let a=i.getLayoutAffectingGlobalStateRefs(),o=i.getPaintAffectingGlobalStateRefs(),s=i.getVisibilityAffectingGlobalStateRefs();for(let t of e){if(a.has(t)&&n.add(i.source),o.has(t))for(let{name:e,value:n}of o.get(t))this._updatePaintProperty(i,e,n,{validate:!1});s?.has(t)&&(i.recalculateVisibility(),this._updateLayer(i))}}let i={now:Fn(),transition:this.getTransition()};this.light?.applyGlobalStateChange(e,t,i),this.sky?.applyGlobalStateChange(e,t,i),this.dispatcher.broadcast(`UGS`,r);for(let e in this.tileManagers)n.has(e)&&(this._reloadSource(e),this._changed=!0)}async loadURL(e,t={},n){this.fire(new ur(`dataloading`)),t.validate=typeof t.validate!=`boolean`||t.validate,this._loadStyleRequest=new AbortController;let r=this._loadStyleRequest;try{let i=await this.map._requestManager.transformRequest(e,`Style`);kn(r.signal);let a=await Qn(i,r);this._loadStyleRequest===r&&(this._loadStyleRequest=null),this._load(a.data,t,n)}catch(e){this._loadStyleRequest===r&&(this._loadStyleRequest=null),e&&!r.signal.aborted&&this.fire(new B(vt(e)))}}loadJSON(e,t={},n){this.fire(new ur(`dataloading`)),this._frameRequest=new AbortController,Nn.frameAsync(this._frameRequest,this.map._ownerWindow).then(()=>{this._frameRequest=null,t.validate=t.validate!==!1,this._load(e,t,n)}).catch(()=>{})}loadEmpty(){this.fire(new ur(`dataloading`)),this._load(jk,{validate:!1})}_load(e,t,n){let r=t.transformStyle?t.transformStyle(n,e):e;if(!(t.validate&&yl(this,r))){r={...r},this._loaded=!0,this.stylesheet=r;for(let e in r.sources)this.addSource(e,r.sources[e],{validate:!1});r.sprite?this._loadSprite(r.sprite):this.imageManager.setLoaded(!0),this.glyphManager.setURL(r.glyphs),this.glyphManager.setFontFaces(r[`font-faces`]),this._createLayers(),this.light=new Zy(this.stylesheet.light??{},this._globalState),this._setProjectionInternal(this.stylesheet.projection?.type||`mercator`),this.sky=new eb(this.stylesheet.sky,this._globalState),this.sky.setEventedParent(this),this.map.setTerrain(this.stylesheet.terrain??null,{validate:!1}),this.fire(new ur(`data`)),this.fire(new lr)}}_createLayers(){let e=Cr(this.stylesheet.layers);this.setGlobalState(this.stylesheet.state??null),this.dispatcher.broadcast(`SL`,e),this._order=e.map(e=>e.id),this._layers={},this._serializedLayers=null;for(let t of e){let e=Dy(t,this._globalState);if(e.setEventedParent(this,{layer:{id:t.id}}),this._layers[t.id]=e,Ql(e)&&this.tileManagers[e.source]){let n=t.paint?.[`raster-fade-duration`]??e.paint.get(`raster-fade-duration`);this.tileManagers[e.source].setRasterFadeDuration(n)}}}async _loadSprite(e,t=!1,n=void 0){this.imageManager.setLoaded(!1);let r=new AbortController;this._spriteRequest=r;let i;try{let n=await Ay(e,this.map._requestManager,this.map.getPixelRatio(),r);if(!n)return;for(let e in n){let{loaded:r,removed:i}=this.imageManager.setSpriteImages(e,n[e]);this._markImagesChanged(i),t&&this._markImagesChanged(r)}}catch(e){i=e,r.signal.aborted||this.fire(new B(i))}finally{this._spriteRequest=null,this.imageManager.setLoaded(!0),t&&(this._changed=!0),this.dispatcher.broadcast(`SI`,this.imageManager.listImages()),this.fire(new ur(`data`)),n?.(i)}}_unloadSprite(){this._markImagesChanged(this.imageManager.removeAllSpriteImages()),this._imagesListDirty=!0,this._changed=!0,this.fire(new ur(`data`))}_validateLayer(e){let t=this.tileManagers[e.source];if(!t)return;let n=e.sourceLayer;if(!n)return;let r=t.getSource();(r.type===`geojson`||r.vectorLayerIds&&!r.vectorLayerIds.includes(n))&&this.fire(new B(Error(`Source layer "${n}" does not exist on source "${r.id}" as specified by style layer "${e.id}".`)))}loaded(){if(!this._loaded||Object.keys(this._updatedSources).length)return!1;for(let e in this.tileManagers)if(!this.tileManagers[e].loaded())return!1;return this.imageManager.isLoaded()}_serializeByIds(e,t=!1){let n=this._serializedAllLayers();if(!e||e.length===0)return Object.values(t?Zt(n):n);let r=[];for(let i of e)if(n[i]){let e=t?Zt(n[i]):n[i];r.push(e)}return r}_serializedAllLayers(){let e=this._serializedLayers;if(e)return e;e=this._serializedLayers={};let t=Object.keys(this._layers);for(let n of t){let t=this._layers[n];t.type!==`custom`&&(e[n]=t.serialize())}return e}hasTransitions(){if(this.light?.hasTransition()||this.sky?.hasTransition()||this.projection?.hasTransition())return!0;for(let e in this.tileManagers)if(this.tileManagers[e].hasTransition())return!0;for(let e in this._layers)if(this._layers[e].hasTransition())return!0;return!1}_checkLoaded(){if(!this._loaded)throw Error(`Style is not done loading.`)}update(e){if(!this._loaded)return;let t=this._changed;if(t){this._imagesListDirty&&=(this.dispatcher.broadcast(`SI`,this.imageManager.listImages()),!1);let t=Object.keys(this._updatedLayers),n=Object.keys(this._removedLayers);(t.length||n.length)&&this._updateWorkerLayers(t,n);for(let e in this._updatedSources){let t=this._updatedSources[e];if(t===`reload`)this._reloadSource(e);else if(t===`clear`)this._clearSource(e);else throw Error(`Invalid action ${t}`)}this._updateTilesForChangedImages(),this._updateTilesForChangedGlyphs();for(let t in this._updatedPaintProps)this._layers[t].updateTransitions(e);this._resetUpdates()}let n={};for(let e in this.tileManagers){let t=this.tileManagers[e];n[e]=t.used,t.used=!1}let r=this.imageManager.listImages();for(let t of this._order){let n=this._layers[t];n.recalculate(e,r),!n.isHidden(e.zoom)&&n.source&&(this.tileManagers[n.source].used=!0)}for(let e in n){let t=this.tileManagers[e];!!n[e]!=!!t.used&&t.fire(new dr(`data`,{sourceDataType:`visibility`,sourceId:e}))}this.light.recalculate(e),this.sky.recalculate(e),this.projection.recalculate(e),this.z=e.zoom,t&&this.fire(new ur(`data`))}_updateTilesForChangedImages(){let e=Object.keys(this._changedImages);if(e.length){for(let t in this.tileManagers)this.tileManagers[t].reloadTilesForDependencies([`icons`,`patterns`],e);this._changedImages={}}}_updateTilesForChangedGlyphs(){if(this._glyphsDidChange){for(let e in this.tileManagers)this.tileManagers[e].reloadTilesForDependencies([`glyphs`],[``]);this._glyphsDidChange=!1}}_updateWorkerLayers(e,t){this.dispatcher.broadcast(`UL`,{layers:this._serializeByIds(e,!1),removedIds:t})}resize(){for(let e of this._order)this._layers[e].resize()}_resetUpdates(){this._changed=!1,this._updatedLayers={},this._removedLayers={},this._updatedSources={},this._updatedPaintProps={},this._changedImages={},this._glyphsDidChange=!1}setState(e,t={}){this._checkLoaded();let n=this.serialize();if(e=t.transformStyle?t.transformStyle(n,e):e,(t.validate??!0)&&yl(this,e))return!1;e=Zt(e),e.layers=Cr(e.layers);let r=Ir(n,e),i=this._getOperationsToPerform(r);if(i.unimplemented.length>0)throw Error(`Unimplemented: ${i.unimplemented.join(`, `)}.`);if(i.operations.length===0)return!1;this._initialGlobalState=t.globalState??{};for(let e of i.operations)e();return this.stylesheet=e,this._serializedLayers=null,this.fire(new lr({style:this})),!0}_getOperationsToPerform(e){let t=[],n=[];for(let r of e)switch(r.command){case`setCenter`:case`setZoom`:case`setBearing`:case`setPitch`:case`setRoll`:continue;case`addLayer`:{let[e,n]=r.args;t.push(()=>this.addLayer(e,n));break}case`removeLayer`:{let[e]=r.args;t.push(()=>this.removeLayer(e));break}case`setPaintProperty`:{let[e,n,i]=r.args;t.push(()=>this.setPaintProperty(e,n,i));break}case`setLayoutProperty`:{let[e,n,i]=r.args;t.push(()=>this.setLayoutProperty(e,n,i));break}case`setFilter`:{let[e,n]=r.args;t.push(()=>this.setFilter(e,n));break}case`addSource`:{let[e,n]=r.args;t.push(()=>this.addSource(e,n));break}case`removeSource`:{let[e]=r.args;t.push(()=>this.removeSource(e));break}case`setLayerZoomRange`:{let[e,n,i]=r.args;t.push(()=>this.setLayerZoomRange(e,n,i));break}case`setLight`:{let[e]=r.args;t.push(()=>this.setLight(e));break}case`setGeoJSONSourceData`:{let[e,n]=r.args;t.push(()=>this.setGeoJSONSourceData(e,n));break}case`setGlyphs`:{let[e]=r.args;t.push(()=>this.setGlyphs(e));break}case`setFontFaces`:{let[e]=r.args;t.push(()=>this.setFontFaces(e));break}case`setSprite`:{let[e]=r.args;t.push(()=>this.setSprite(e));break}case`setTerrain`:{let[e]=r.args;t.push(()=>this.map.setTerrain(e));break}case`setSky`:{let[e]=r.args;t.push(()=>this.setSky(e));break}case`setProjection`:{let[e]=r.args;t.push(()=>this.setProjection(e));break}case`setGlobalState`:{let[e]=r.args;t.push(()=>this.setGlobalState(e));break}case`setTransition`:t.push(()=>{});break;default:n.push(r.command)}return{operations:t,unimplemented:n}}addImage(e,t){this.getImage(e)?this.fire(new B(Error(`An image named "${e}" already exists.`))):(this.imageManager.addImage(e,t),this._afterImageUpdated(e))}updateImage(e,t){this.imageManager.updateImage(e,t)}getImage(e){return this.imageManager.getImage(e)}setMissingImageResolver(e){this.imageManager.setMissingImageResolver(e)}removeImage(e){this.getImage(e)?(this.imageManager.removeImage(e),this._afterImageUpdated(e)):this.fire(new B(Error(`An image named "${e}" does not exist.`)))}_markImagesChanged(e){for(let t of e)this._changedImages[t]=!0}_afterImageUpdated(e){this._changedImages[e]=!0,this._imagesListDirty=!0,this._changed=!0,this.fire(new ur(`data`))}listImages(){return this._checkLoaded(),this.imageManager.listImages()}addSource(e,t,n={}){if(this._checkLoaded(),this.tileManagers[e]!==void 0)throw Error(`Source "${e}" already exists.`);if(!t.type)throw Error(`The type property must be defined, but only the following properties were given: ${Object.keys(t).join(`, `)}.`);if(_l.has(t.type)&&this._validate(gl.source,`sources.${e}`,t,null,n))return;this.map?._collectResourceTiming&&(t.collectResourceTiming=!0);let r=this.tileManagers[e]=new GE(e,t,this.dispatcher);r.style=this,r.setEventedParent(this,()=>({isSourceLoaded:r.loaded(),source:r.serialize(),sourceId:e})),r.onAdd(this.map),this._changed=!0}removeSource(e){if(this._checkLoaded(),this.tileManagers[e]===void 0)throw Error(`There is no source with this ID=${e}`);for(let t in this._layers)if(this._layers[t].source===e)return this.fire(new B(Error(`Source "${e}" cannot be removed while layer "${t}" is using it.`)));let t=this.tileManagers[e];delete this.tileManagers[e],delete this._updatedSources[e],t.fire(new dr(`data`,{sourceDataType:`metadata`,sourceId:e})),t.setEventedParent(null),t.onRemove(this.map),this._changed=!0}setGeoJSONSourceData(e,t){if(this._checkLoaded(),this.tileManagers[e]===void 0)throw Error(`There is no source with this ID=${e}`);let n=this.tileManagers[e].getSource();if(n.type!==`geojson`)throw Error(`geojsonSource.type is ${n.type}, which is !== 'geojson`);n.setData(t),this._changed=!0}getSource(e){return this.tileManagers[e]?.getSource()}addLayer(e,t,n={}){this._checkLoaded();let r=e.id;if(this.getLayer(r)){this.fire(new B(Error(`Layer "${r}" already exists on this map.`)));return}let i;if(e.type===`custom`){if(bl(this,wy(e)))return;i=Dy(e,this._globalState)}else{if(`source`in e&&typeof e.source==`object`&&(this.addSource(r,e.source),e=Zt(e),e=z(e,{source:r})),this._validate(gl.layer,`layers.${r}`,e,{arrayIndex:-1},n))return;i=Dy(e,this._globalState),this._validateLayer(i),i.setEventedParent(this,{layer:{id:r}})}let a=t?this._order.indexOf(t):this._order.length;if(t&&a===-1)this.fire(new B(Error(`Cannot add layer "${r}" before non-existing layer "${t}".`)));else{if(this._order.splice(a,0,r),this._layerOrderChanged=!0,this._layers[r]=i,this._removedLayers[r]&&i.source&&i.type!==`custom`){let e=this._removedLayers[r];delete this._removedLayers[r],e.type===i.type?(this._updatedSources[i.source]=`reload`,this.tileManagers[i.source].pause()):this._updatedSources[i.source]=`clear`}this._updateLayer(i),i.onAdd&&i.onAdd(this.map)}}moveLayer(e,t){if(this._checkLoaded(),this._changed=!0,!this._layers[e]){this.fire(new B(Error(`The layer '${e}' does not exist in the map's style and cannot be moved.`)));return}if(e===t)return;if(t&&!this._order.includes(t)){this.fire(new B(Error(`Cannot move layer "${e}" before non-existing layer "${t}".`)));return}let n=this._order.indexOf(e);this._order.splice(n,1);let r=t?this._order.indexOf(t):this._order.length;this._order.splice(r,0,e),this._layerOrderChanged=!0}removeLayer(e){this._checkLoaded();let t=this._layers[e];if(!t){this.fire(new B(Error(`Cannot remove non-existing layer "${e}".`)));return}t.setEventedParent(null);let n=this._order.indexOf(e);this._order.splice(n,1),this._layerOrderChanged=!0,this._changed=!0,this._removedLayers[e]=t,delete this._layers[e],this._serializedLayers&&delete this._serializedLayers[e],delete this._updatedLayers[e],delete this._updatedPaintProps[e],t.type===`symbol`&&t.source&&this.tileManagers[t.source]?.resetMaxContentElevation(),t.onRemove&&t.onRemove(this.map)}getLayer(e){return this._layers[e]}getLayersOrder(){return[...this._order]}hasLayer(e){return e in this._layers}setLayerZoomRange(e,t,n){this._checkLoaded();let r=this.getLayer(e);r?(r.minzoom!==t||r.maxzoom!==n)&&(t!=null&&(r.minzoom=t),n!=null&&(r.maxzoom=n),this._updateLayer(r)):this.fire(new B(Error(`Cannot set the zoom range of non-existing layer "${e}".`)))}setFilter(e,t,n={}){this._checkLoaded();let r=this.getLayer(e);if(!r)this.fire(new B(Error(`Cannot filter non-existing layer "${e}".`)));else if(!Xt(r.filter,t)){if(t==null){r.setFilter(void 0),this._updateLayer(r);return}this._validate(gl.filter,`layers.${r.id}.filter`,t,null,n)||(r.setFilter(Zt(t)),this._updateLayer(r))}}getFilter(e){return Zt(this.getLayer(e).filter)}setLayoutProperty(e,t,n,r={}){this._checkLoaded();let i=this.getLayer(e);i?Xt(i.getLayoutProperty(t),n)||(i.setLayoutProperty(t,n,r),this._updateLayer(i)):this.fire(new B(Error(`Cannot style non-existing layer "${e}".`)))}getLayoutProperty(e,t){let n=this.getLayer(e);if(!n)this.fire(new B(Error(`Cannot get style of non-existing layer "${e}".`)));else return n.getLayoutProperty(t)}setPaintProperty(e,t,n,r={}){this._checkLoaded();let i=this.getLayer(e);i?Xt(i.getPaintProperty(t),n)||this._updatePaintProperty(i,t,n,r):this.fire(new B(Error(`Cannot style non-existing layer "${e}".`)))}_updatePaintProperty(e,t,n,r={}){e.setPaintProperty(t,n,r)&&this._updateLayer(e),Ql(e)&&t===`raster-fade-duration`&&this.tileManagers[e.source].setRasterFadeDuration(n),this._changed=!0,this._updatedPaintProps[e.id]=!0,e.type===`symbol`&&this.triggerSymbolPlacement(),this._serializedLayers=null}getPaintProperty(e,t){return this.getLayer(e).getPaintProperty(t)}setFeatureState(e,t){this._checkLoaded();let n=e.source,r=e.sourceLayer,i=this.tileManagers[n];if(i===void 0){this.fire(new B(Error(`The source '${n}' does not exist in the map's style.`)));return}let a=i.getSource().type;if(a===`geojson`&&r){this.fire(new B(Error(`GeoJSON sources cannot have a sourceLayer parameter.`)));return}if(a===`vector`&&!r){this.fire(new B(Error(`The sourceLayer parameter must be provided for vector source types.`)));return}if(e.id===void 0){this.fire(new B(Error(`The feature id parameter must be provided.`)));return}let o=[`__proto__`,`constructor`,`prototype`];t&&Object.keys(t).some(e=>o.includes(e))?this.fire(new B(Error(`The feature state should not include one of the following keys: ${o}`))):i.setFeatureState(r,e.id,t)}removeFeatureState(e,t){this._checkLoaded();let n=e.source,r=this.tileManagers[n];if(r===void 0){this.fire(new B(Error(`The source '${n}' does not exist in the map's style.`)));return}let i=r.getSource().type,a=i===`vector`?e.sourceLayer:void 0;i===`vector`&&!a?this.fire(new B(Error(`The sourceLayer parameter must be provided for vector source types.`))):t&&typeof e.id!=`string`&&typeof e.id!=`number`?this.fire(new B(Error(`A feature id is required to remove its specific state property.`))):r.removeFeatureState(a,e.id,t)}getFeatureState(e){this._checkLoaded();let t=e.source,n=e.sourceLayer,r=this.tileManagers[t];if(r===void 0)this.fire(new B(Error(`The source '${t}' does not exist in the map's style.`)));else if(r.getSource().type===`vector`&&!n)this.fire(new B(Error(`The sourceLayer parameter must be provided for vector source types.`)));else return e.id===void 0&&this.fire(new B(Error(`The feature id parameter must be provided.`))),r.getFeatureState(n,e.id)}getTransition(){return z({duration:300,delay:0},this.stylesheet?.transition)}serialize(){if(!this._loaded)return;let e=Jt(this.tileManagers,e=>e.serialize()),t=this._serializeByIds(this._order,!0),n=this.map.getTerrain()||void 0,r=this.stylesheet;return Yt({version:r.version,name:r.name,metadata:r.metadata,light:r.light,sky:r.sky,center:r.center,zoom:r.zoom,bearing:r.bearing,pitch:r.pitch,sprite:r.sprite,glyphs:r.glyphs,"font-faces":r[`font-faces`],transition:r.transition,projection:r.projection,state:r.state,sources:e,layers:t,terrain:n},e=>e!==void 0)}_updateLayer(e){this._updatedLayers[e.id]=!0,e.source&&!this._updatedSources[e.source]&&this.tileManagers[e.source].getSource().type!==`raster`&&(this._updatedSources[e.source]=`reload`,this.tileManagers[e.source].pause()),this._serializedLayers=null,this._changed=!0}_flattenAndSortRenderedFeatures(e){let t=e=>this._layers[e].type===`fill-extrusion`,n={},r=[];for(let i=this._order.length-1;i>=0;i--){let a=this._order[i];if(t(a)){n[a]=i;for(let t of e){let e=t[a];if(e)for(let t of e)r.push(t)}}}r.sort((e,t)=>t.intersectionZ-e.intersectionZ);let i=[];for(let a=this._order.length-1;a>=0;a--){let o=this._order[a];if(t(o))for(let e=r.length-1;e>=0;e--){let t=r[e].feature;if(n[t.layer.id]this.map.terrain.getElevation(e,t,n):void 0));return this.placement&&i.push(wb(this._layers,a,this.tileManagers,e,s,this.placement.collisionIndex,this.placement.retainedQueryData)),this._flattenAndSortRenderedFeatures(i)}querySourceFeatures(e,t){t?.filter&&this._validate(gl.filter,`querySourceFeatures.filter`,t.filter,null,t);let n=this.tileManagers[e];return n?Tb(n,t?{...t,globalState:this._globalState}:{globalState:this._globalState}):[]}getLight(){return this.light.getLight()}setLight(e,t={}){this._checkLoaded();let n=this.light.getLight(),r=!1;for(let t in e)if(!Xt(e[t],n[t])){r=!0;break}if(!r)return;let i={now:Fn(),transition:z({duration:300,delay:0},this.stylesheet.transition)};this.light.setLight(e,t),this.light.updateTransitions(i)}getProjection(){return this.stylesheet?.projection}setProjection(e){this._checkLoaded();let t=e??{type:`mercator`};if(this.stylesheet.projection=e,this.projection){if(this.projection.name===t.type)return;this.projection.destroy(),delete this.projection}this._setProjectionInternal(t.type)}getSky(){return this.stylesheet?.sky}setSky(e,t={}){this._checkLoaded();let n=this.getSky(),r=!1;if(!e&&!n)return;if(e&&!n)r=!0;else if(!e&&n)r=!0;else for(let t in e)if(!Xt(e[t],n[t])){r=!0;break}if(!r)return;let i={now:Fn(),transition:z({duration:300,delay:0},this.stylesheet.transition)};this.sky.setSky(e,t)&&(this.stylesheet.sky=e,this.sky.updateTransitions(i))}_setProjectionInternal(e){let t=Ak(e,this.map._camera?.transform.constrainOverride,this._globalState);this.projection=t.projection,this.map.migrateProjection(t.transform,t.cameraHelper);for(let e in this.tileManagers)this.tileManagers[e].reload()}_validate(e,t,n,r,i={}){return i.validate!==!1&&xl(this,e,{key:t,style:this.serialize(),value:n,...r},i)}_remove(e=!0){this._frameRequest&&=(this._frameRequest.abort(),null),this._loadStyleRequest&&=(this._loadStyleRequest.abort(),null),this._spriteRequest&&=(this._spriteRequest.abort(),null),hE().off(fE,this._rtlPluginLoaded);for(let e in this._layers)this._layers[e].setEventedParent(null);for(let e in this.tileManagers){let t=this.tileManagers[e];t.setEventedParent(null),t.onRemove(this.map)}this.imageManager.setEventedParent(null),this.setEventedParent(null),e&&this.dispatcher.broadcast(`RM`,void 0),this.dispatcher.remove(e)}_clearSource(e){this.tileManagers[e].clearTiles()}_reloadSource(e){this.tileManagers[e].resume(),this.tileManagers[e].reload()}_updateSources(e){for(let t in this.tileManagers)this.tileManagers[t].update(e,this.map.terrain)}_generateCollisionBoxes(){for(let e in this.tileManagers)this._reloadSource(e)}triggerSymbolPlacement(){this._symbolPlacementTriggered=!0}_placementInputsChanged(e,t,n){let r=this.pauseablePlacement;return!r||this._symbolPlacementTriggered||this._placedProjectionTransition!==this.projection?.transitionState||r._showCollisionBoxes!==t||r.placement.collisionGroups.crossSourceCollisions!==n||r.placement.transform.renderWorldCopies!==e.renderWorldCopies||!we(r.placement.transform.modelViewProjectionMatrix,e.modelViewProjectionMatrix)}_updatePlacement(e,t,n,r,i=!1){let a=!1,o=!1,s={};for(let t of this._order){let n=this._layers[t];if(n.type!==`symbol`)continue;if(!s[n.source]){let e=this.tileManagers[n.source];s[n.source]=e.getRenderableIds(!0).map(t=>e.getTileByID(t)).sort((e,t)=>t.tileID.overscaledZ-e.tileID.overscaledZ||(e.tileID.isLessThan(t.tileID)?-1:1))}let r=this.crossTileSymbolIndex.addLayer(n,s[n.source],e.center.lng);a||=r}this.crossTileSymbolIndex.pruneUnusedLayers(this._order),i||=this._layerOrderChanged||n===0;let c=a||this._placementInputsChanged(e,t,r),l=this.pauseablePlacement?.isDone()&&!this.placement.stillRecent(Fn(),e.zoom);if((i||!this.pauseablePlacement||l&&(c||this.placement.stale))&&(this._symbolPlacementTriggered=!1,this._placedProjectionTransition=this.projection?.transitionState,this.pauseablePlacement=new VD(e,this.map.terrain,this._order,i,t,n,r,this.placement),this._layerOrderChanged=!1),this.pauseablePlacement.isDone()?c&&this.placement.setStale():(this.pauseablePlacement.continuePlacement(this._order,this._layers,s),this.pauseablePlacement.isDone()&&(this.placement=this.pauseablePlacement.commit(Fn()),o=!0),a&&this.pauseablePlacement.placement.setStale()),o||a)for(let e of this._order){let t=this._layers[e];t.type===`symbol`&&this.placement.updateLayerOpacities(t,s[t.source])}return!this.pauseablePlacement.isDone()||this.placement.hasTransitions(Fn())}_releaseSymbolFadeTiles(){for(let e in this.tileManagers)this.tileManagers[e].releaseSymbolFadeTiles()}async getImages(e,t){let n=await this.imageManager.getImages(t.icons);this._updateTilesForChangedImages();let r=this.tileManagers[t.source];return r&&r.setDependencies(t.tileID.key,t.type,t.icons),n}async getGlyphs(e,t){let n=await this.glyphManager.getGlyphs(t.stacks),r=this.tileManagers[t.source];return r&&r.setDependencies(t.tileID.key,t.type,[``]),n}getGlyphsUrl(){return this.stylesheet.glyphs||null}setGlyphs(e,t={}){this._checkLoaded(),!(e&&this._validate(gl.glyphs,`glyphs`,e,null,t))&&(this._changed=!0,this._glyphsDidChange=!0,this.stylesheet.glyphs=e,this.glyphManager.entries={},this.glyphManager.setURL(e))}getFontFaces(){return this.stylesheet[`font-faces`]||null}setFontFaces(e){this._checkLoaded(),this._changed=!0,this._glyphsDidChange=!0,this.stylesheet[`font-faces`]=e,this.glyphManager.setFontFaces(e)}async getDashes(e,t){let n={};for(let[e,r]of Object.entries(t.dashes))n[e]=this.lineAtlas.getDash(r.dasharray,r.round);return n}addSprite(e,t,n={},r){this._checkLoaded();let i=[{id:e,url:t}],a=[...Oy(this.stylesheet.sprite),...i];this._validate(gl.sprite,`sprite`,a,null,n)||(this.stylesheet.sprite=a,this._loadSprite(i,!0,r))}removeSprite(e){this._checkLoaded();let t=Oy(this.stylesheet.sprite);if(!t.find(t=>t.id===e)){this.fire(new B(Error(`Sprite "${e}" doesn't exists on this map.`)));return}let n=this.imageManager.removeSpriteImages(e);this._markImagesChanged(n),t.splice(t.findIndex(t=>t.id===e),1),this.stylesheet.sprite=t.length>0?t:void 0,this._imagesListDirty=!0,this._changed=!0,this.fire(new ur(`data`))}getSprite(){return Oy(this.stylesheet.sprite)}setSprite(e,t={},n){this._checkLoaded(),!(e&&this._validate(gl.sprite,`sprite`,e,null,t))&&(this.stylesheet.sprite=e,e?this._loadSprite(e,!0,n):(this._unloadSprite(),n&&n(null)))}destroy(){this._frameRequest&&=(this._frameRequest.abort(),null),this._loadStyleRequest&&=(this._loadStyleRequest.abort(),null),this._spriteRequest&&=(this._spriteRequest.abort(),null);for(let e in this.tileManagers){let t=this.tileManagers[e];t.setEventedParent(null),t.onRemove(this.map)}this.tileManagers={},this.imageManager&&(this.imageManager.setEventedParent(null),this.imageManager.destroy(),this.patternAtlas.destroy()),this.glyphManager&&this.glyphManager.destroy();for(let e in this._layers){let t=this._layers[e];t.setEventedParent(null),t.onRemove&&t.onRemove(this.map)}this._setInitialValues(),this.setEventedParent(null),this.dispatcher.unregisterMessageHandler(`GG`),this.dispatcher.unregisterMessageHandler(`GI`),this.dispatcher.unregisterMessageHandler(`GDA`),this.dispatcher.remove(!0),this._listeners={},this._oneTimeListeners={}}},Nk=ru([{name:`a_pos`,type:`Int16`,components:2},{name:`a_texture_pos`,type:`Int16`,components:2}]),Pk=class{constructor(e,t,n){this.context=e;let r=e.gl;this.buffer=r.createBuffer(),this.dynamicDraw=!!n,this.context.unbindVAO(),e.bindElementBuffer.set(this.buffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,t.arrayBuffer,this.dynamicDraw?r.DYNAMIC_DRAW:r.STATIC_DRAW),this.dynamicDraw||t.freeBufferAfterUpload()}bind(){this.context.bindElementBuffer.set(this.buffer)}updateData(e){let t=this.context.gl;if(!this.dynamicDraw)throw Error(`Attempted to update data while not in dynamic mode.`);this.context.unbindVAO(),this.bind(),t.bufferSubData(t.ELEMENT_ARRAY_BUFFER,0,e.arrayBuffer)}destroy(){let e=this.context.gl;this.buffer&&(e.deleteBuffer(this.buffer),delete this.buffer)}},Fk={Int8:`BYTE`,Uint8:`UNSIGNED_BYTE`,Int16:`SHORT`,Uint16:`UNSIGNED_SHORT`,Int32:`INT`,Uint32:`UNSIGNED_INT`,Float32:`FLOAT`},Ik=class{constructor(e,t,n,r){this.length=t.length,this.attributes=n,this.itemSize=t.bytesPerElement,this.dynamicDraw=r,this.context=e;let i=e.gl;this.buffer=i.createBuffer(),e.bindVertexBuffer.set(this.buffer),i.bufferData(i.ARRAY_BUFFER,t.arrayBuffer,this.dynamicDraw?i.DYNAMIC_DRAW:i.STATIC_DRAW),this.dynamicDraw||t.freeBufferAfterUpload()}bind(){this.context.bindVertexBuffer.set(this.buffer)}updateData(e){if(e.length!==this.length)throw Error(`Length of new data is ${e.length}, which doesn't match current length of ${this.length}`);let t=this.context.gl;this.bind(),t.bufferSubData(t.ARRAY_BUFFER,0,e.arrayBuffer)}enableAttributes(e,t){for(let n of this.attributes){let r=t.attributes[n.name];r!==void 0&&e.enableVertexAttribArray(r.location)}}setVertexAttribPointers(e,t,n){for(let r of this.attributes){let i=t.attributes[r.name];if(i!==void 0){let t=r.offset+this.itemSize*(n||0);i.isInteger?e.vertexAttribIPointer(i.location,r.components,e[Fk[r.type]],this.itemSize,t):e.vertexAttribPointer(i.location,r.components,e[Fk[r.type]],!1,this.itemSize,t)}}}destroy(){let e=this.context.gl;this.buffer&&(e.deleteBuffer(this.buffer),delete this.buffer)}},Lk=class{constructor(e){this.gl=e.gl,this.default=this.getDefault(),this.current=this.default,this.dirty=!1}get(){return this.current}set(e){}getDefault(){return this.default}setDefault(){this.set(this.default)}},Rk=class extends Lk{getDefault(){return Ni.transparent}set(e){let t=this.current;(e.r!==t.r||e.g!==t.g||e.b!==t.b||e.a!==t.a||this.dirty)&&(this.gl.clearColor(e.r,e.g,e.b,e.a),this.current=e,this.dirty=!1)}},zk=class extends Lk{getDefault(){return 1}set(e){(e!==this.current||this.dirty)&&(this.gl.clearDepth(e),this.current=e,this.dirty=!1)}},Bk=class extends Lk{getDefault(){return 0}set(e){(e!==this.current||this.dirty)&&(this.gl.clearStencil(e),this.current=e,this.dirty=!1)}},Vk=class extends Lk{getDefault(){return[!0,!0,!0,!0]}set(e){let t=this.current;(e[0]!==t[0]||e[1]!==t[1]||e[2]!==t[2]||e[3]!==t[3]||this.dirty)&&(this.gl.colorMask(e[0],e[1],e[2],e[3]),this.current=e,this.dirty=!1)}},Hk=class extends Lk{getDefault(){return!0}set(e){(e!==this.current||this.dirty)&&(this.gl.depthMask(e),this.current=e,this.dirty=!1)}},Uk=class extends Lk{getDefault(){return 255}set(e){(e!==this.current||this.dirty)&&(this.gl.stencilMask(e),this.current=e,this.dirty=!1)}},Wk=class extends Lk{getDefault(){return{func:this.gl.ALWAYS,ref:0,mask:255}}set(e){let t=this.current;(e.func!==t.func||e.ref!==t.ref||e.mask!==t.mask||this.dirty)&&(this.gl.stencilFunc(e.func,e.ref,e.mask),this.current=e,this.dirty=!1)}},Gk=class extends Lk{getDefault(){let e=this.gl;return[e.KEEP,e.KEEP,e.KEEP]}set(e){let t=this.current;(e[0]!==t[0]||e[1]!==t[1]||e[2]!==t[2]||this.dirty)&&(this.gl.stencilOp(e[0],e[1],e[2]),this.current=e,this.dirty=!1)}},Kk=class extends Lk{getDefault(){return!1}set(e){if(e===this.current&&!this.dirty)return;let t=this.gl;e?t.enable(t.STENCIL_TEST):t.disable(t.STENCIL_TEST),this.current=e,this.dirty=!1}},qk=class extends Lk{getDefault(){return[0,1]}set(e){let t=this.current;(e[0]!==t[0]||e[1]!==t[1]||this.dirty)&&(this.gl.depthRange(e[0],e[1]),this.current=e,this.dirty=!1)}},Jk=class extends Lk{getDefault(){return!1}set(e){if(e===this.current&&!this.dirty)return;let t=this.gl;e?t.enable(t.DEPTH_TEST):t.disable(t.DEPTH_TEST),this.current=e,this.dirty=!1}},Yk=class extends Lk{getDefault(){return this.gl.LESS}set(e){(e!==this.current||this.dirty)&&(this.gl.depthFunc(e),this.current=e,this.dirty=!1)}},Xk=class extends Lk{getDefault(){return!1}set(e){if(e===this.current&&!this.dirty)return;let t=this.gl;e?t.enable(t.BLEND):t.disable(t.BLEND),this.current=e,this.dirty=!1}},Zk=class extends Lk{getDefault(){let e=this.gl;return[e.ONE,e.ZERO]}set(e){let t=this.current;(e[0]!==t[0]||e[1]!==t[1]||this.dirty)&&(this.gl.blendFunc(e[0],e[1]),this.current=e,this.dirty=!1)}},Qk=class extends Lk{getDefault(){return Ni.transparent}set(e){let t=this.current;(e.r!==t.r||e.g!==t.g||e.b!==t.b||e.a!==t.a||this.dirty)&&(this.gl.blendColor(e.r,e.g,e.b,e.a),this.current=e,this.dirty=!1)}},$k=class extends Lk{getDefault(){return this.gl.FUNC_ADD}set(e){(e!==this.current||this.dirty)&&(this.gl.blendEquation(e),this.current=e,this.dirty=!1)}},eA=class extends Lk{getDefault(){return!1}set(e){if(e===this.current&&!this.dirty)return;let t=this.gl;e?t.enable(t.CULL_FACE):t.disable(t.CULL_FACE),this.current=e,this.dirty=!1}},tA=class extends Lk{getDefault(){return this.gl.BACK}set(e){(e!==this.current||this.dirty)&&(this.gl.cullFace(e),this.current=e,this.dirty=!1)}},nA=class extends Lk{getDefault(){return this.gl.CCW}set(e){(e!==this.current||this.dirty)&&(this.gl.frontFace(e),this.current=e,this.dirty=!1)}},rA=class extends Lk{getDefault(){return null}set(e){(e!==this.current||this.dirty)&&(this.gl.useProgram(e),this.current=e,this.dirty=!1)}},iA=class extends Lk{getDefault(){return this.gl.TEXTURE0}set(e){(e!==this.current||this.dirty)&&(this.gl.activeTexture(e),this.current=e,this.dirty=!1)}},aA=class extends Lk{getDefault(){let e=this.gl;return[0,0,e.drawingBufferWidth,e.drawingBufferHeight]}set(e){let t=this.current;(e[0]!==t[0]||e[1]!==t[1]||e[2]!==t[2]||e[3]!==t[3]||this.dirty)&&(this.gl.viewport(e[0],e[1],e[2],e[3]),this.current=e,this.dirty=!1)}},oA=class extends Lk{getDefault(){return null}set(e){if(e===this.current&&!this.dirty)return;let t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,e),this.current=e,this.dirty=!1}},sA=class extends Lk{getDefault(){return null}set(e){if(e===this.current&&!this.dirty)return;let t=this.gl;t.bindRenderbuffer(t.RENDERBUFFER,e),this.current=e,this.dirty=!1}},cA=class extends Lk{getDefault(){return null}set(e){if(e===this.current&&!this.dirty)return;let t=this.gl;t.bindTexture(t.TEXTURE_2D,e),this.current=e,this.dirty=!1}},lA=class extends Lk{getDefault(){return null}set(e){if(e===this.current&&!this.dirty)return;let t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,e),this.current=e,this.dirty=!1}},uA=class extends Lk{getDefault(){return null}set(e){let t=this.gl;t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,e),this.current=e,this.dirty=!1}},dA=class extends Lk{getDefault(){return null}set(e){(e!==this.current||this.dirty)&&(this.gl.bindVertexArray(e),this.current=e,this.dirty=!1)}},fA=class extends Lk{getDefault(){return 4}set(e){if(e===this.current&&!this.dirty)return;let t=this.gl;t.pixelStorei(t.UNPACK_ALIGNMENT,e),this.current=e,this.dirty=!1}},pA=class extends Lk{getDefault(){return!1}set(e){if(e===this.current&&!this.dirty)return;let t=this.gl;t.pixelStorei(t.UNPACK_PREMULTIPLY_ALPHA_WEBGL,e),this.current=e,this.dirty=!1}},mA=class extends Lk{getDefault(){return!1}set(e){if(e===this.current&&!this.dirty)return;let t=this.gl;t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL,e),this.current=e,this.dirty=!1}},hA=class extends Lk{constructor(e,t){super(e),this.context=e,this.parent=t}getDefault(){return null}},gA=class extends hA{setDirty(){this.dirty=!0}set(e){if(e===this.current&&!this.dirty)return;this.context.bindFramebuffer.set(this.parent);let t=this.gl;t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,e,0),this.current=e,this.dirty=!1}},_A=class extends hA{set(e){if(e===this.current&&!this.dirty)return;this.context.bindFramebuffer.set(this.parent);let t=this.gl;t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_ATTACHMENT,t.RENDERBUFFER,e),this.current=e,this.dirty=!1}},vA=class extends hA{set(e){if(e===this.current&&!this.dirty)return;this.context.bindFramebuffer.set(this.parent);let t=this.gl;t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,e),this.current=e,this.dirty=!1}},yA=class{constructor(e,t,n,r,i){this.context=e,this.width=t,this.height=n;let a=e.gl,o=this.framebuffer=a.createFramebuffer();if(this.colorAttachment=new gA(e,o),r)this.depthAttachment=i?new vA(e,o):new _A(e,o);else if(i)throw Error(`Stencil cannot be set without depth`)}destroy(){let e=this.context.gl,t=this.colorAttachment.get();if(t&&e.deleteTexture(t),this.depthAttachment){let t=this.depthAttachment.get();t&&e.deleteRenderbuffer(t)}e.deleteFramebuffer(this.framebuffer)}},bA={ProjectionUBO:0,TerrainUBO:1,FrameUBO:2};function xA(e,t){for(let[n,r]of Object.entries(bA)){let i=e.getUniformBlockIndex(t,n);i!==e.INVALID_INDEX&&e.uniformBlockBinding(t,i,r)}}var SA={float:[1,1],int:[1,1],vec2:[2,2],vec4:[4,4],mat4:[16,4]};function CA(e){let t={},n=0;for(let{name:r,type:i}of e){let[e,a]=SA[i];n=Math.ceil(n/a)*a,t[r]=n,n+=e}return{offsets:t,contentWords:n,sizeWords:Math.ceil(n/4)*4}}var wA=class{constructor(e,t,n){this.context=e,this.binding=t,this.contentWords=n.contentWords;let r=e.gl;this.buffer=r.createBuffer(),r.bindBuffer(r.UNIFORM_BUFFER,this.buffer),r.bufferData(r.UNIFORM_BUFFER,n.sizeWords*4,r.DYNAMIC_DRAW),this.uploaded=new Float32Array(n.sizeWords),this.pending=new Float32Array(n.sizeWords),this.uploadedWords=new Uint32Array(this.uploaded.buffer),this.pendingWords=new Uint32Array(this.pending.buffer),this.hasData=!1}upload(){let e=this.context.gl,t=!this.hasData;if(!t){let e=this.pendingWords,n=this.uploadedWords;for(let r=0;r({u_depth:new J(e,t.u_depth),u_terrain:new J(e,t.u_terrain)}),GA=(e,t)=>({u_texture:new J(e,t.u_texture),u_ele_delta:new Y(e,t.u_ele_delta),u_fog_matrix:new kd(e,t.u_fog_matrix),u_fog_color:new Td(e,t.u_fog_color),u_fog_ground_blend:new Y(e,t.u_fog_ground_blend),u_fog_ground_blend_opacity:new Y(e,t.u_fog_ground_blend_opacity),u_horizon_color:new Td(e,t.u_horizon_color),u_horizon_fog_blend:new Y(e,t.u_horizon_fog_blend),u_is_globe_mode:new Y(e,t.u_is_globe_mode)}),KA=(e,t)=>({u_ele_delta:new Y(e,t.u_ele_delta)}),qA=(e,t)=>({u_tile_bounds:new wd(e,t.u_tile_bounds)}),JA=(e,t,n,r,i)=>({u_texture:0,u_ele_delta:e,u_fog_matrix:t,u_fog_color:n?n[`fog-color`]:Ni.white,u_fog_ground_blend:n?n[`fog-ground-blend`]:1,u_fog_ground_blend_opacity:i?0:n?tb(r):0,u_horizon_color:n?n[`horizon-color`]:Ni.white,u_horizon_fog_blend:n?n[`horizon-fog-blend`]:1,u_is_globe_mode:+!!i}),YA=e=>({u_ele_delta:e}),XA=e=>({u_tile_bounds:e});function ZA(e){let t=[];for(let n of e){if(n===null)continue;let e=n.split(` `);t.push(e.pop())}return t}function QA(e,t){let n=new Set([e.INT,e.INT_VEC2,e.INT_VEC3,e.INT_VEC4,e.UNSIGNED_INT,e.UNSIGNED_INT_VEC2,e.UNSIGNED_INT_VEC3,e.UNSIGNED_INT_VEC4]),r=new Set,i=e.getProgramParameter(t,e.ACTIVE_ATTRIBUTES);for(let a=0;a=0&&(this.attributes[e]={location:t,isInteger:w.has(e)})}l.deleteShader(S),l.deleteShader(x);for(let e of _)if(e&&!C[e]){let t=l.getUniformLocation(this.program,e);t&&(C[e]=t)}this.fixedUniforms=r(e,C),this.terrainUniforms=WA(e,C),this.binderUniforms=n?n.getUniforms(e,C):[]}draw(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g,_,v){let y=e.gl;if(this.failedToCreate)return;if(e.program.set(this.program),e.terrainUniformBuffer.bind(),e.frameUniformBuffer.bind(),e.setDepthMode(n),e.setStencilMode(r),e.setColorMode(i),e.setCullFace(a),s){e.activeTexture.set(y.TEXTURE2),y.bindTexture(y.TEXTURE_2D,s.depthTexture),e.activeTexture.set(y.TEXTURE3),y.bindTexture(y.TEXTURE_2D,s.texture);for(let e in this.terrainUniforms)this.terrainUniforms[e].set(s[e]);BA(e.terrainUniformBuffer,s)}if(kA(e,c),o)for(let e in this.fixedUniforms)this.fixedUniforms[e].set(o[e]);h&&h.setUniforms(e,this.binderUniforms,p,{zoom:m});let b=0;switch(t){case y.LINES:b=2;break;case y.TRIANGLES:b=3;break;case y.LINE_STRIP:b=1}for(let n of f.get())n.vaos||={},n.vaos[l]||=new UA,n.vaos[l].bind(e,this,u,h?h.getPaintVertexBuffers():[],d,n.vertexOffset,g,_,v),y.drawElements(t,n.primitiveLength*b,y.UNSIGNED_SHORT,n.primitiveOffset*b*2)}};function ej(e,t,n){let r=1/_t(n,1,t.tileZoom),i=2**n.tileID.overscaledZ,a=n.tileSize*2**t.tileZoom/i,o=a*(n.tileID.canonical.x+n.tileID.wrap*i),s=a*n.tileID.canonical.y;return{u_image:0,u_texsize:n.imageAtlasTexture.size,u_scale:[r,e.fromScale,e.toScale],u_fade:e.t,u_pixel_coord_upper:[o>>16,s>>16],u_pixel_coord_lower:[o&65535,s&65535]}}function tj(e,t,n,r,i){let a=n.getPattern(e.from.toString()),o=n.getPattern(e.to.toString()),{width:s,height:c}=n.getPixelSize(),l=2**i.tileID.overscaledZ,u=i.tileSize*2**r.tileZoom/l,d=u*(i.tileID.canonical.x+i.tileID.wrap*l),f=u*i.tileID.canonical.y;return{u_image:0,u_pattern_tl_a:a.tl,u_pattern_br_a:a.br,u_pattern_tl_b:o.tl,u_pattern_br_b:o.br,u_texsize:[s,c],u_mix:t.t,u_pattern_size_a:a.displaySize,u_pattern_size_b:o.displaySize,u_scale_a:t.fromScale,u_scale_b:t.toScale,u_tile_units_to_pixels:1/_t(i,1,r.tileZoom),u_pixel_coord_upper:[d>>16,f>>16],u_pixel_coord_lower:[d&65535,f&65535]}}var nj=(e,t)=>({u_lightpos:new Cd(e,t.u_lightpos),u_lightpos_globe:new Cd(e,t.u_lightpos_globe),u_lightintensity:new Y(e,t.u_lightintensity),u_lightcolor:new Cd(e,t.u_lightcolor),u_vertical_gradient:new Y(e,t.u_vertical_gradient),u_opacity:new Y(e,t.u_opacity),u_fill_translate:new Sd(e,t.u_fill_translate)}),rj=(e,t)=>({u_lightpos:new Cd(e,t.u_lightpos),u_lightpos_globe:new Cd(e,t.u_lightpos_globe),u_lightintensity:new Y(e,t.u_lightintensity),u_lightcolor:new Cd(e,t.u_lightcolor),u_vertical_gradient:new Y(e,t.u_vertical_gradient),u_height_factor:new Y(e,t.u_height_factor),u_opacity:new Y(e,t.u_opacity),u_fill_translate:new Sd(e,t.u_fill_translate),u_image:new J(e,t.u_image),u_texsize:new Sd(e,t.u_texsize),u_pixel_coord_upper:new Sd(e,t.u_pixel_coord_upper),u_pixel_coord_lower:new Sd(e,t.u_pixel_coord_lower),u_scale:new Cd(e,t.u_scale),u_fade:new Y(e,t.u_fade)}),ij=(e,t,n,r,i)=>{let a=nn(t.position),o=oe();t.anchor===`viewport`&&ce(o,e.bearingInRadians),Ve(a,a,o);let s=e.transformLightDirection(a),c=t.color;return{u_lightpos:a,u_lightpos_globe:s,u_lightintensity:t.intensity,u_lightcolor:[c.r,c.g,c.b],u_vertical_gradient:+n,u_opacity:r,u_fill_translate:i}},aj=(e,t,n,r,i,a,o,s)=>z(ij(e,t,n,r,i),ej(o,e,s),{u_height_factor:-(2**a.overscaledZ)/s.tileSize/8}),oj=(e,t)=>({u_fill_translate:new Sd(e,t.u_fill_translate)}),sj=(e,t)=>({u_image:new J(e,t.u_image),u_texsize:new Sd(e,t.u_texsize),u_pixel_coord_upper:new Sd(e,t.u_pixel_coord_upper),u_pixel_coord_lower:new Sd(e,t.u_pixel_coord_lower),u_scale:new Cd(e,t.u_scale),u_fade:new Y(e,t.u_fade),u_sdf_pattern:new J(e,t.u_sdf_pattern),u_fill_translate:new Sd(e,t.u_fill_translate)}),cj=(e,t)=>({u_fill_translate:new Sd(e,t.u_fill_translate)}),lj=(e,t)=>({u_image:new J(e,t.u_image),u_texsize:new Sd(e,t.u_texsize),u_pixel_coord_upper:new Sd(e,t.u_pixel_coord_upper),u_pixel_coord_lower:new Sd(e,t.u_pixel_coord_lower),u_scale:new Cd(e,t.u_scale),u_fade:new Y(e,t.u_fade),u_sdf_pattern:new J(e,t.u_sdf_pattern),u_fill_translate:new Sd(e,t.u_fill_translate)}),uj=(e,t,n,r,i)=>z(ej(t,e,n),{u_fill_translate:r,u_sdf_pattern:+!!i}),dj=e=>({u_fill_translate:e}),fj=e=>({u_fill_translate:e}),pj=(e,t,n,r,i)=>uj(e,t,n,r,i),mj=(e,t)=>({u_scale_with_map:new J(e,t.u_scale_with_map),u_pitch_with_map:new J(e,t.u_pitch_with_map),u_extrude_scale:new Sd(e,t.u_extrude_scale),u_globe_extrude_scale:new Y(e,t.u_globe_extrude_scale),u_translate:new Sd(e,t.u_translate)}),hj=(e,t,n,r,i)=>{let a,o,s=0;if(n.paint.get(`circle-pitch-alignment`)===`map`){let n=_t(t,1,e.zoom);a=!0,o=[n,n],s=n/(L*2**t.tileID.overscaledZ)*2*Math.PI*i}else a=!1,o=e.pixelsToGLUnits;return{u_scale_with_map:+(n.paint.get(`circle-pitch-scale`)===`map`),u_pitch_with_map:+a,u_extrude_scale:o,u_globe_extrude_scale:s,u_translate:r}},gj=(e,t)=>({u_color:new Td(e,t.u_color),u_overlay:new J(e,t.u_overlay),u_overlay_scale:new Y(e,t.u_overlay_scale)}),_j=(e,t=1)=>({u_color:e,u_overlay:0,u_overlay_scale:t}),vj=(e,t)=>({u_extrude_scale:new Y(e,t.u_extrude_scale),u_intensity:new Y(e,t.u_intensity),u_globe_extrude_scale:new Y(e,t.u_globe_extrude_scale)}),yj=(e,t)=>({u_matrix:new kd(e,t.u_matrix),u_image:new J(e,t.u_image),u_color_ramp:new J(e,t.u_color_ramp),u_opacity:new Y(e,t.u_opacity)}),bj=(e,t,n,r)=>{let i=_t(e,1,t)/(L*2**e.tileID.overscaledZ)*2*Math.PI*r;return{u_extrude_scale:_t(e,1,t),u_intensity:n,u_globe_extrude_scale:i}},xj=(e,t,n,r)=>{let i=ue();return Ce(i,0,e.width,e.height,0,0,1),{u_matrix:i,u_image:n,u_color_ramp:r,u_opacity:t.paint.get(`heatmap-opacity`)}},Sj=(e,t)=>({u_image:new J(e,t.u_image),u_latrange:new Sd(e,t.u_latrange),u_exaggeration:new Y(e,t.u_exaggeration),u_altitudes:new Dd(e,t.u_altitudes),u_azimuths:new Dd(e,t.u_azimuths),u_accent:new Td(e,t.u_accent),u_method:new J(e,t.u_method),u_shadows:new Ed(e,t.u_shadows),u_highlights:new Ed(e,t.u_highlights)}),Cj=(e,t)=>({u_matrix:new kd(e,t.u_matrix),u_image:new J(e,t.u_image),u_dimension:new Sd(e,t.u_dimension),u_zoom:new Y(e,t.u_zoom),u_unpack:new wd(e,t.u_unpack)}),wj=(e,t,n)=>{let r=n.paint.get(`hillshade-accent-color`),i;switch(n.paint.get(`hillshade-method`)){case`basic`:i=4;break;case`combined`:i=1;break;case`igor`:i=2;break;case`multidirectional`:i=3;break;default:i=0}let a=n.getIlluminationProperties();for(let t=0;t{let n=t.stride,r=ue();return Ce(r,0,L,-8192,0,0,1),ge(r,r,[0,-8192,0]),{u_matrix:r,u_image:1,u_dimension:[n,n],u_zoom:e.overscaledZ,u_unpack:t.getUnpackVector()}};function Ej(e){let t=2**e.canonical.z,n=e.canonical.y;return[new Ym(0,n/t).toLngLat().lat,new Ym(0,(n+1)/t).toLngLat().lat]}var Dj=(e,t)=>({u_image:new J(e,t.u_image),u_unpack:new wd(e,t.u_unpack),u_dimension:new Sd(e,t.u_dimension),u_elevation_stops:new J(e,t.u_elevation_stops),u_color_stops:new J(e,t.u_color_stops),u_color_ramp_size:new J(e,t.u_color_ramp_size),u_opacity:new Y(e,t.u_opacity)}),Oj=(e,t,n=0)=>({u_image:0,u_unpack:t.getUnpackVector(),u_dimension:[t.stride,t.stride],u_elevation_stops:1,u_color_stops:4,u_color_ramp_size:n,u_opacity:e.paint.get(`color-relief-opacity`)}),kj=(e,t)=>({u_translation:new Sd(e,t.u_translation),u_ratio:new Y(e,t.u_ratio)}),Aj=(e,t)=>({u_translation:new Sd(e,t.u_translation),u_ratio:new Y(e,t.u_ratio),u_image:new J(e,t.u_image),u_image_height:new Y(e,t.u_image_height)}),jj=(e,t)=>({u_translation:new Sd(e,t.u_translation),u_texsize:new Sd(e,t.u_texsize),u_ratio:new Y(e,t.u_ratio),u_image:new J(e,t.u_image),u_scale:new Cd(e,t.u_scale),u_fade:new Y(e,t.u_fade)}),Mj=(e,t)=>({u_translation:new Sd(e,t.u_translation),u_ratio:new Y(e,t.u_ratio),u_image:new J(e,t.u_image),u_mix:new Y(e,t.u_mix),u_tileratio:new Y(e,t.u_tileratio),u_crossfade_from:new Y(e,t.u_crossfade_from),u_crossfade_to:new Y(e,t.u_crossfade_to),u_lineatlas_width:new Y(e,t.u_lineatlas_width),u_lineatlas_height:new Y(e,t.u_lineatlas_height)}),Nj=(e,t)=>({u_translation:new Sd(e,t.u_translation),u_ratio:new Y(e,t.u_ratio),u_image:new J(e,t.u_image),u_image_height:new Y(e,t.u_image_height),u_tileratio:new Y(e,t.u_tileratio),u_crossfade_from:new Y(e,t.u_crossfade_from),u_crossfade_to:new Y(e,t.u_crossfade_to),u_image_dash:new J(e,t.u_image_dash),u_mix:new Y(e,t.u_mix),u_lineatlas_width:new Y(e,t.u_lineatlas_width),u_lineatlas_height:new Y(e,t.u_lineatlas_height)}),Pj=(e,t,n,r)=>({u_translation:Bj(e,t,n),u_ratio:r/_t(t,1,e.zoom)}),Fj=(e,t,n,r,i)=>z(Pj(e,t,n,r),{u_image:0,u_image_height:i}),Ij=(e,t,n,r,i)=>{let a=zj(t,e);return{u_translation:Bj(e,t,n),u_texsize:t.imageAtlasTexture.size,u_ratio:r/_t(t,1,e.zoom),u_image:0,u_scale:[a,i.fromScale,i.toScale],u_fade:i.t}},Lj=(e,t,n,r,i,a)=>{let o=zj(n,e);return z(Pj(e,n,r,i),{u_tileratio:o,u_crossfade_from:a.fromScale,u_crossfade_to:a.toScale,u_image:0,u_mix:a.t,u_lineatlas_width:t.width,u_lineatlas_height:t.height})},Rj=(e,t,n,r,i,a,o)=>{let s=zj(n,e);return z(Pj(e,n,r,i),{u_image:0,u_image_height:o,u_tileratio:s,u_crossfade_from:a.fromScale,u_crossfade_to:a.toScale,u_image_dash:1,u_mix:a.t,u_lineatlas_width:t.width,u_lineatlas_height:t.height})};function zj(e,t){return 1/_t(e,1,t.tileZoom)}function Bj(e,t,n){return wt(e,t,n.paint.get(`line-translate`),n.paint.get(`line-translate-anchor`))}var Vj=(e,t)=>({u_image:new J(e,t.u_image),u_opacity:new Y(e,t.u_opacity)}),Hj=(e,t)=>({u_image:t,u_opacity:e}),Uj=(e,t)=>({u_is_size_zoom_constant:new J(e,t.u_is_size_zoom_constant),u_is_size_feature_constant:new J(e,t.u_is_size_feature_constant),u_size_t:new Y(e,t.u_size_t),u_size:new Y(e,t.u_size),u_rotate_symbol:new J(e,t.u_rotate_symbol),u_label_plane_matrix:new kd(e,t.u_label_plane_matrix),u_coord_matrix:new kd(e,t.u_coord_matrix),u_is_text:new J(e,t.u_is_text),u_pitch_with_map:new J(e,t.u_pitch_with_map),u_is_along_line:new J(e,t.u_is_along_line),u_is_variable_anchor:new J(e,t.u_is_variable_anchor),u_texsize:new Sd(e,t.u_texsize),u_texture:new J(e,t.u_texture),u_translation:new Sd(e,t.u_translation),u_pitched_scale:new Y(e,t.u_pitched_scale),u_is_offset:new J(e,t.u_is_offset),u_height_anchor_ground:new J(e,t.u_height_anchor_ground)}),Wj=(e,t)=>({u_is_size_zoom_constant:new J(e,t.u_is_size_zoom_constant),u_is_size_feature_constant:new J(e,t.u_is_size_feature_constant),u_size_t:new Y(e,t.u_size_t),u_size:new Y(e,t.u_size),u_rotate_symbol:new J(e,t.u_rotate_symbol),u_label_plane_matrix:new kd(e,t.u_label_plane_matrix),u_coord_matrix:new kd(e,t.u_coord_matrix),u_is_text:new J(e,t.u_is_text),u_pitch_with_map:new J(e,t.u_pitch_with_map),u_is_along_line:new J(e,t.u_is_along_line),u_is_variable_anchor:new J(e,t.u_is_variable_anchor),u_texsize:new Sd(e,t.u_texsize),u_texture:new J(e,t.u_texture),u_gamma_scale:new Y(e,t.u_gamma_scale),u_is_halo:new J(e,t.u_is_halo),u_is_plain:new J(e,t.u_is_plain),u_translation:new Sd(e,t.u_translation),u_pitched_scale:new Y(e,t.u_pitched_scale),u_is_offset:new J(e,t.u_is_offset),u_height_anchor_ground:new J(e,t.u_height_anchor_ground)}),Gj=(e,t)=>({u_is_size_zoom_constant:new J(e,t.u_is_size_zoom_constant),u_is_size_feature_constant:new J(e,t.u_is_size_feature_constant),u_size_t:new Y(e,t.u_size_t),u_size:new Y(e,t.u_size),u_rotate_symbol:new J(e,t.u_rotate_symbol),u_label_plane_matrix:new kd(e,t.u_label_plane_matrix),u_coord_matrix:new kd(e,t.u_coord_matrix),u_is_text:new J(e,t.u_is_text),u_pitch_with_map:new J(e,t.u_pitch_with_map),u_is_along_line:new J(e,t.u_is_along_line),u_is_variable_anchor:new J(e,t.u_is_variable_anchor),u_texsize:new Sd(e,t.u_texsize),u_texsize_icon:new Sd(e,t.u_texsize_icon),u_texture:new J(e,t.u_texture),u_texture_icon:new J(e,t.u_texture_icon),u_gamma_scale:new Y(e,t.u_gamma_scale),u_is_halo:new J(e,t.u_is_halo),u_translation:new Sd(e,t.u_translation),u_pitched_scale:new Y(e,t.u_pitched_scale),u_is_offset:new J(e,t.u_is_offset),u_height_anchor_ground:new J(e,t.u_height_anchor_ground)}),Kj=(e,t,n,r,i,a,o,s,c,l,u,d,f,p)=>({u_is_size_zoom_constant:+(e===`constant`||e===`source`),u_is_size_feature_constant:+(e===`constant`||e===`camera`),u_size_t:t?t.uSizeT:0,u_size:t?t.uSize:0,u_rotate_symbol:+n,u_label_plane_matrix:o,u_coord_matrix:s,u_is_text:+l,u_pitch_with_map:+r,u_is_along_line:i,u_is_variable_anchor:a,u_texsize:u,u_texture:0,u_translation:c,u_pitched_scale:d,u_is_offset:f,u_height_anchor_ground:+p}),qj=(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h)=>z(Kj(e,t,n,r,i,a,s,c,l,u,d,p,m,h),{u_gamma_scale:r?Math.cos(o.pitch*Math.PI/180)*o.cameraToCenterDistance:1,u_is_halo:+!!f,u_is_plain:1}),Jj=(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m)=>z(qj(e,t,n,r,i,a,o,s,c,l,!0,u,!0,f,p,m),{u_texsize_icon:d,u_texture_icon:1}),Yj=(e,t)=>({u_opacity:new Y(e,t.u_opacity),u_color:new Td(e,t.u_color)}),Xj=(e,t)=>({u_opacity:new Y(e,t.u_opacity),u_image:new J(e,t.u_image),u_pattern_tl_a:new Sd(e,t.u_pattern_tl_a),u_pattern_br_a:new Sd(e,t.u_pattern_br_a),u_pattern_tl_b:new Sd(e,t.u_pattern_tl_b),u_pattern_br_b:new Sd(e,t.u_pattern_br_b),u_texsize:new Sd(e,t.u_texsize),u_mix:new Y(e,t.u_mix),u_pattern_size_a:new Sd(e,t.u_pattern_size_a),u_pattern_size_b:new Sd(e,t.u_pattern_size_b),u_scale_a:new Y(e,t.u_scale_a),u_scale_b:new Y(e,t.u_scale_b),u_pixel_coord_upper:new Sd(e,t.u_pixel_coord_upper),u_pixel_coord_lower:new Sd(e,t.u_pixel_coord_lower),u_tile_units_to_pixels:new Y(e,t.u_tile_units_to_pixels)}),Zj=(e,t)=>({u_opacity:e,u_color:t}),Qj=(e,t,n,r,i,a)=>z(tj(r,a,t,n,i),{u_opacity:e}),$j=(e,t)=>({u_sun_pos:new Cd(e,t.u_sun_pos),u_atmosphere_blend:new Y(e,t.u_atmosphere_blend),u_globe_position:new Cd(e,t.u_globe_position),u_globe_radius:new Y(e,t.u_globe_radius),u_inv_proj_matrix:new kd(e,t.u_inv_proj_matrix)}),eM=(e,t,n,r,i)=>({u_sun_pos:e,u_atmosphere_blend:t,u_globe_position:n,u_globe_radius:r,u_inv_proj_matrix:i}),tM=(e,t)=>({u_sky_color:new Td(e,t.u_sky_color),u_horizon_color:new Td(e,t.u_horizon_color),u_horizon:new Sd(e,t.u_horizon),u_horizon_normal:new Sd(e,t.u_horizon_normal),u_sky_horizon_blend:new Y(e,t.u_sky_horizon_blend),u_sky_blend:new Y(e,t.u_sky_blend),u_inv_proj_matrix:new kd(e,t.u_inv_proj_matrix),u_globe_position:new Cd(e,t.u_globe_position),u_globe_radius:new Y(e,t.u_globe_radius),u_atmosphere_blend:new Y(e,t.u_atmosphere_blend)}),nM=(e,t,n)=>{let r=Math.cos(t.rollInRadians),i=Math.sin(t.rollInRadians),a=th(t),o=t.getProjectionData({overscaledTileID:null,applyGlobeMatrix:!0,applyTerrainMatrix:!0}).projectionTransition,s=JO(t),c=qO(t.worldSize,t.center.lat);return{u_sky_color:e[`sky-color`],u_horizon_color:e[`horizon-color`],u_horizon:[(t.width/2-a*i)*n,(t.height/2+a*r)*n],u_horizon_normal:[-i,r],u_sky_horizon_blend:e[`sky-horizon-blend`]*t.height/2*n,u_sky_blend:o,u_inv_proj_matrix:t.inverseProjectionMatrix,u_globe_position:s,u_globe_radius:c,u_atmosphere_blend:e[`atmosphere-blend`]*fk(Oe(s)-c,c)}},rM=(e,t)=>({}),iM={fillExtrusion:nj,fillExtrusionPattern:rj,fill:oj,fillPattern:sj,fillOutline:cj,fillOutlinePattern:lj,circle:mj,collisionBox:rM,collisionCircle:rM,debug:gj,depth:rM,clippingMask:rM,heatmap:vj,heatmapTexture:yj,hillshade:Sj,hillshadePrepare:Cj,colorRelief:Dj,line:kj,lineGradient:Aj,linePattern:jj,lineSDF:Mj,lineGradientSDF:Nj,layerOpacity:Vj,raster:lx,symbolIcon:Uj,symbolSDF:Wj,symbolTextAndIcon:Gj,background:Yj,backgroundPattern:Xj,terrain:GA,terrainDepth:KA,terrainHeight:qA,atmosphere:$j,sky:tM},aM=class{constructor(e){this.programs={},this.context=e}getProgram(e){let t=e.programConfiguration?e.programConfiguration.cacheKey:``,n=`/${e.projectionShaderVariant.name}`,r=e.showOverdrawInspector?`/overdraw`:``,i=e.useTerrain?`/terrain`:``,a=e.defines?`/${e.defines.join(`/`)}`:``,o=e.name+t+n+r+i+a;return this.programs[o]||=new $A(this.context,uO[e.name],e.programConfiguration,iM[e.name],e.showOverdrawInspector,e.useTerrain,e.projectionShaderVariant.prelude,e.projectionShaderVariant.define,e.defines),this.programs[o]}destroy(){for(let e of Object.values(this.programs))e.program&&this.context.gl.deleteProgram(e.program);this.programs={}}},oM=7680,sM=class{constructor(e,t,n,r,i,a){this.test=e,this.ref=t,this.mask=n,this.fail=r,this.depthFail=i,this.pass=a}};sM.disabled=new sM({func:519,mask:0},0,0,oM,oM,oM);var cM=1029,lM=2305,uM=class{constructor(e,t,n){this.enable=e,this.mode=t,this.frontFace=n}};uM.disabled=new uM(!1,cM,lM),uM.backCCW=new uM(!0,cM,lM),uM.frontCCW=new uM(!0,1028,lM);var dM=class{constructor(e,t,n){this.func=e,this.mask=t,this.range=n}};dM.ReadOnly=!1,dM.ReadWrite=!0,dM.disabled=new dM(519,dM.ReadOnly,[0,1]);var fM;function pM(e,t,n,r,i){let a=i.context,o=a.gl,s=i.useProgram(`collisionBox`),c=[],l=0,u=0;for(let d of n){let n=e.getTile(d).getBucket(t);if(!n)continue;let f=r?n.textCollisionBox:n.iconCollisionBox,p=n.collisionCircleArray;p.length>0&&(c.push({circleArray:p,circleOffset:u,coord:d}),l+=p.length/4,u=l),f&&s.draw(a,o.LINES,dM.disabled,sM.disabled,i.colorModeForRenderPass(),uM.disabled,null,i.getTerrainDataForTile(d),i.getProjectionDataForTile(d),t.id,f.layoutVertexBuffer,f.indexBuffer,f.segments,null,i.transform.zoom,null,null,f.collisionVertexBuffer)}if(!r||!c.length)return;let d=i.useProgram(`collisionCircle`),f=new nd;f.resize(l*4),f._trim();let p=0;for(let e of c)for(let t=0;tl.getElevation(r,e,t):void 0;bM(i,d,f,u,c,m,n,p,h,wt(c,e,a,o),r.toUnwrapped(),s,t.layout.get(`symbol-height-anchor`)===`ground`)}}}function yM(e,t,n,r,i,a){let o=t.tileAnchorPoint.add(new k(t.translation[0],t.translation[1]));if(t.pitchWithMap){let e=r.mult(a);n||(e=e.rotate(-i));let s=o.add(e);return iD(s.x,s.y,t.pitchedLabelPlaneMatrix,rD(t,s.x,s.y)).point}if(n){let n=pD(t.tileAnchorPoint.x+1,t.tileAnchorPoint.y,t).point.sub(e),i=Math.atan(n.y/n.x)+(n.x<0?Math.PI:0);return e.add(r.rotate(i))}return e.add(r)}function bM(e,t,n,r,i,a,o,s,c,l,u,d,f){let p=e.text.placedSymbolArray,m=e.text.dynamicLayoutVertexArray,h=e.icon.dynamicLayoutVertexArray,g={};m.clear();for(let h=0;h=0&&(g[_.associatedIconIndex]={shiftedAnchor:O,angle:A})}}if(c){h.clear();let t=e.icon.placedSymbolArray;for(let e=0;ef.terrain.getElevation(s,e,t):void 0;sD(c,e,h,i,re,t,_,l,n.layout.get(`text-rotation-alignment`)===`map`,s.toUnwrapped(),ae,r)}let fe=i&&C||ce,pe=_?re:f.transform.clipSpaceToPixelsMatrix,me=v||fe?hM:pe,he=p&&n.paint.get(i?`text-halo-width`:`icon-halo-width`).constantOr(1)!==0,ge;ge=p?c.iconsInText?Jj(S.kind,O,y,_,v,fe,h,me,ie,ae,A,j,T,le,de):qj(S.kind,O,y,_,v,fe,h,me,ie,ae,i,A,he,T,le,de):Kj(S.kind,O,y,_,v,fe,me,ie,ae,i,A,T,le,de);let P={program:D,buffers:u,uniformValues:ge,projectionData:oe,atlasTexture:M,atlasTextureIcon:te,atlasInterpolation:ee,atlasInterpolationIcon:N,isSDF:p,hasHalo:he};if(b&&c.canOverlap){x=!0;let e=u.segments.get();for(let t of e)w.push({segments:new ud([t]),sortKey:t.sortKey,state:P,terrainData:k})}else w.push({segments:u.segments,sortKey:0,state:P,terrainData:k})}x&&w.sort((e,t)=>e.sortKey-t.sortKey);let E=n.paint.get(i?`text-halo-width`:`icon-halo-width`).constantOr(null)??1/0,D=n.layout.get(`text-letter-spacing`).constantOr(0)*24<0||E>1;for(let e of w){let t=e.state;p.activeTexture.set(m.TEXTURE0),t.atlasTexture.bind(t.atlasInterpolation,m.CLAMP_TO_EDGE),t.atlasTextureIcon&&(p.activeTexture.set(m.TEXTURE1),t.atlasTextureIcon&&t.atlasTextureIcon.bind(t.atlasInterpolationIcon,m.CLAMP_TO_EDGE));let r=t.isSDF&&t.hasHalo;if(r){let r=t.uniformValues;r.u_is_halo=1,D&&(r.u_is_plain=0,CM(t.buffers,e.segments,n,f,t.program,S,u,d,r,t.projectionData,e.terrainData),r.u_is_halo=0,r.u_is_plain=1)}CM(t.buffers,e.segments,n,f,t.program,S,u,d,t.uniformValues,t.projectionData,e.terrainData),r&&!D&&(t.uniformValues.u_is_halo=0)}}function CM(e,t,n,r,i,a,o,s,c,l,u){let d=r.context,f=d.gl;i.draw(d,f.TRIANGLES,a,o,s,uM.backCCW,c,u,l,n.id,e.layoutVertexBuffer,e.indexBuffer,t,n.paint,r.transform.zoom,e.programConfigurations.get(n.id),e.dynamicLayoutVertexBuffer,e.opacityVertexBuffer)}function wM(e,t,n,r){if(r.currentPass!==`translucent`)return;let i=t.paint.get(`circle-opacity`),a=t.paint.get(`circle-stroke-width`),o=t.paint.get(`circle-stroke-opacity`),s=!t.layout.get(`circle-sort-key`).isConstant();if(i.constantOr(1)===0&&(a.constantOr(1)===0||o.constantOr(1)===0))return;let c=r.context,l=c.gl,u=r.transform,d=r.getDepthModeForSublayer(0,dM.ReadOnly),f=sM.disabled,p=r.colorModeForRenderPass(),m=[],h=u.getCircleRadiusCorrection();for(let i of n){let n=e.getTile(i),a=n.getBucket(t);if(!a)continue;let o=wt(u,n,t.paint.get(`circle-translate`),t.paint.get(`circle-translate-anchor`)),c=a.programConfigurations.get(t.id),l=r.useProgram(`circle`,c),d=a.layoutVertexBuffer,f=a.indexBuffer,p=r.getTerrainDataForTile(i),g={programConfiguration:c,program:l,layoutVertexBuffer:d,indexBuffer:f,uniformValues:hj(u,n,t,o,h),terrainData:p,projectionData:r.getProjectionDataForTile(i)};if(s){let e=a.segments.get();for(let t of e)m.push({segments:new ud([t]),sortKey:t.sortKey,state:g})}else m.push({segments:a.segments,sortKey:0,state:g})}s&&m.sort((e,t)=>e.sortKey-t.sortKey);for(let e of m){let{programConfiguration:n,program:i,layoutVertexBuffer:a,indexBuffer:o,uniformValues:s,terrainData:u,projectionData:m}=e.state,h=e.segments;i.draw(c,l.TRIANGLES,d,f,p,uM.backCCW,s,u,m,t.id,a,o,h,t.paint,r.transform.zoom,n)}}function TM(e,t,n,r,i){if(n.paint.get(`heatmap-opacity`)===0)return;let a=i.context;if(i.terrain){for(let a of r){let r=t.getTile(a);t.hasRenderableParent(a)||(i.currentPass===`offscreen`?OM(r,n,a,i):i.currentPass===`translucent`&&kM(e,n,a,i))}a.viewport.set([0,0,e.width,e.height])}else i.currentPass===`offscreen`?EM(e,t,n,r,i):i.currentPass===`translucent`&&DM(e,n,i)}function EM(e,t,n,r,i){let a=i.context,o=a.gl,s=i.transform,c=sM.disabled,l=new VA([o.ONE,o.ONE],Ni.transparent,[!0,!0,!0,!0]);AM(a,e,n),a.clear({color:Ni.transparent});for(let e of r){if(t.hasRenderableParent(e))continue;let r=t.getTile(e),u=r.getBucket(n);if(!u)continue;let d=u.programConfigurations.get(n.id),f=i.useProgram(`heatmap`,d),p=i.getProjectionDataForTile(e,{applyTerrainMatrix:!1}),m=s.getCircleRadiusCorrection();f.draw(a,o.TRIANGLES,dM.disabled,c,l,uM.backCCW,bj(r,s.zoom,n.paint.get(`heatmap-intensity`),m),null,p,n.id,u.layoutVertexBuffer,u.indexBuffer,u.segments,n.paint,s.zoom,d)}a.viewport.set([0,0,e.width,e.height])}function DM(e,t,n){let r=n.context,i=r.gl;r.setColorMode(n.colorModeForRenderPass());let a=t.heatmapFbos.get(Bf);a&&(r.activeTexture.set(i.TEXTURE0),i.bindTexture(i.TEXTURE_2D,a.colorAttachment.get()),r.activeTexture.set(i.TEXTURE1),MM(r,t).bind(i.LINEAR,i.CLAMP_TO_EDGE),n.useProgram(`heatmapTexture`).draw(r,i.TRIANGLES,dM.disabled,sM.disabled,n.colorModeForRenderPass(),uM.disabled,xj(e,t,0,1),null,null,t.id,e.viewportBuffer,e.quadTriangleIndexBuffer,e.viewportSegments,t.paint,n.transform.zoom))}function OM(e,t,n,r){let i=r.context,a=i.gl,o=sM.disabled,s=new VA([a.ONE,a.ONE],Ni.transparent,[!0,!0,!0,!0]),c=e.getBucket(t);if(!c)return;let l=n.key,u=t.heatmapFbos.get(l);u||(u=jM(i,e.tileSize,e.tileSize),t.heatmapFbos.set(l,u)),i.bindFramebuffer.set(u.framebuffer),i.viewport.set([0,0,e.tileSize,e.tileSize]),i.clear({color:Ni.transparent});let d=c.programConfigurations.get(t.id),f=r.useProgram(`heatmap`,d,!r.data.isRenderingGlobe),p=r.getProjectionDataForTile(e.tileID),m=r.getTerrainDataForTile(n);f.draw(i,a.TRIANGLES,dM.disabled,o,s,uM.disabled,bj(e,r.transform.zoom,t.paint.get(`heatmap-intensity`),1),m,p,t.id,c.layoutVertexBuffer,c.indexBuffer,c.segments,t.paint,r.transform.zoom,d)}function kM(e,t,n,r){let i=r.context,a=i.gl,o=r.transform;i.setColorMode(r.colorModeForRenderPass());let s=MM(i,t),c=n.key,l=t.heatmapFbos.get(c);if(!l)return;i.activeTexture.set(a.TEXTURE0),a.bindTexture(a.TEXTURE_2D,l.colorAttachment.get()),i.activeTexture.set(a.TEXTURE1),s.bind(a.LINEAR,a.CLAMP_TO_EDGE);let u=r.getProjectionDataForTile(n,{applyTerrainMatrix:r.data.isRenderingGlobe});r.useProgram(`heatmapTexture`).draw(i,a.TRIANGLES,dM.disabled,sM.disabled,r.colorModeForRenderPass(),uM.disabled,xj(e,t,0,1),null,u,t.id,e.rasterBoundsBuffer,e.quadTriangleIndexBuffer,e.rasterBoundsSegments,t.paint,o.zoom),l.destroy(),t.heatmapFbos.delete(c)}function AM(e,t,n){let r=e.gl;e.activeTexture.set(r.TEXTURE1),e.viewport.set([0,0,t.width/4,t.height/4]);let i=n.heatmapFbos.get(Bf);i?(r.bindTexture(r.TEXTURE_2D,i.colorAttachment.get()),e.bindFramebuffer.set(i.framebuffer)):(i=jM(e,t.width/4,t.height/4),n.heatmapFbos.set(Bf,i))}function jM(e,t,n){let r=e.gl,i=r.createTexture();r.bindTexture(r.TEXTURE_2D,i),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,r.LINEAR),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MAG_FILTER,r.LINEAR),r.texStorage2D(r.TEXTURE_2D,1,r.RGBA16F,t,n);let a=e.createFramebuffer(t,n,!1,!1);return a.colorAttachment.set(i),a}function MM(e,t){return t.colorRampTexture||=new Qf(e,t.colorRamp,e.gl.RGBA),t.colorRampTexture}function NM(e,t,n,r){let i=r.context,a=i.bindFramebuffer.get(),o=i.viewport.get(),[,,s,c]=o;return PM(e,s,c),i.viewport.set([0,0,s,c]),i.clear({color:Ni.transparent,depth:1,stencil:0}),r.invalidateTileClippingMasks(),r.renderTileClippingMasks(t,n),{compositeTarget:a,compositeViewport:o}}function PM(e,t,n){let r=e.context.gl;if(!e.layerOpacityFbo){let i=e.context.createFramebuffer(t,n,!0,!0),a=r.createTexture();r.bindTexture(r.TEXTURE_2D,a),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,r.LINEAR),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MAG_FILTER,r.LINEAR),r.texImage2D(r.TEXTURE_2D,0,r.RGBA,t,n,0,r.RGBA,r.UNSIGNED_BYTE,null),i.colorAttachment.set(a),i.depthAttachment.set(e.context.createRenderbuffer(r.DEPTH_STENCIL,t,n)),e.layerOpacityFbo=i,e.context.bindFramebuffer.set(e.layerOpacityFbo.framebuffer);return}if(e.layerOpacityFbo.width===t&&e.layerOpacityFbo.height===n){e.context.bindFramebuffer.set(e.layerOpacityFbo.framebuffer);return}let i=e.layerOpacityFbo;r.bindTexture(r.TEXTURE_2D,i.colorAttachment.get()),r.texImage2D(r.TEXTURE_2D,0,r.RGBA,t,n,0,r.RGBA,r.UNSIGNED_BYTE,null),e.context.bindRenderbuffer.set(i.depthAttachment.get()),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_STENCIL,t,n),e.context.bindRenderbuffer.set(null),i.width=t,i.height=n,e.context.bindFramebuffer.set(i.framebuffer)}function FM(e,t,n,r,i){let a=i.context,o=a.gl;a.bindFramebuffer.set(n.compositeTarget),a.viewport.set(n.compositeViewport),a.activeTexture.set(o.TEXTURE0),o.bindTexture(o.TEXTURE_2D,e.layerOpacityFbo.colorAttachment.get()),i.useProgram(`layerOpacity`).draw(a,o.TRIANGLES,dM.disabled,sM.disabled,i.colorModeForRenderPass(),uM.disabled,Hj(t,0),null,null,r.id,e.viewportBuffer,e.quadTriangleIndexBuffer,e.viewportSegments,r.paint,i.transform.zoom),i.invalidateTileClippingMasks()}function IM(e,t,n,r,i,a,o,s){let c=256;if(r.stepInterpolant){let n=e.getSource().maxzoom,r=a.canonical.z===n?Math.ceil(1<l.data.anisotropicFilterPitch&&p.texParameterf(p.TEXTURE_2D,f.extTextureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT,f.extTextureFilterAnisotropicMax);let D=l.getTerrainDataForTile(x),O=l.getProjectionDataForTile(x,{aligned:g}),k=ux(T,w,E.fadeMix,t,o,s),A=u??l.getMeshFromTileID(x.canonical,i,a,`raster`),j=r?r[x.overscaledZ]:sM.disabled;m.draw(f,p.TRIANGLES,n,j,h,c?uM.frontCCW:uM.backCCW,k,D,O,t.id,A.vertexBuffer,A.indexBuffer,A.segments)}}function aN(e,t,n,r){let i={parentTile:null,parentScaleBy:1,parentTopLeft:[0,0],fadeValues:{tileOpacity:1,parentTileOpacity:1,fadeMix:{opacity:1,mix:0}}};if(n===0||r)return i;if(e.fadingParentID){let r=t.getLoadedTile(e.fadingParentID);if(!r)return i;let a=2**(r.tileID.overscaledZ-e.tileID.overscaledZ);return{parentTile:r,parentScaleBy:a,parentTopLeft:[e.tileID.canonical.x*a%1,e.tileID.canonical.y*a%1],fadeValues:oN(e,r,n)}}return e.selfFading?{parentTile:null,parentScaleBy:1,parentTopLeft:[0,0],fadeValues:sN(e,n)}:i}function oN(e,t,n){let r=Fn(),i=(r-e.timeAdded)/n,a=(r-t.timeAdded)/n,o=e.fadingDirection===1,s=R(i,0,1),c=R(1-a,0,1),l=o?s:c;return{tileOpacity:l,parentTileOpacity:o?c:s,fadeMix:{opacity:1,mix:1-l}}}function sN(e,t){let n=R((Fn()-e.timeAdded)/t,0,1);return{tileOpacity:n,fadeMix:{opacity:n,mix:0}}}function cN(e,t,n,r,i){let a=n.paint.get(`background-color`),o=n.paint.get(`background-opacity`);if(o===0)return;let s=i.context,c=s.gl,l=i.transform,u=l.tileSize,d=n.paint.get(`background-pattern`);if(e.patternAtlas.isPatternMissing(d))return;let f=!d&&a.a===1&&o===1&&i.opaquePassEnabledForLayer()?`opaque`:`translucent`;if(i.currentPass!==f)return;let p=sM.disabled,m=i.getDepthModeForSublayer(0,f===`opaque`?dM.ReadWrite:dM.ReadOnly),h=i.colorModeForRenderPass(),g=i.useProgram(d?`backgroundPattern`:`background`),_=r||PE(l,{tileSize:u,terrain:i.terrain});d&&(s.activeTexture.set(c.TEXTURE0),e.patternAtlas.bind(s));let v=n.getCrossfadeParameters();for(let t of _){let r=i.getProjectionDataForTile(t),f=d?Qj(o,e.patternAtlas,l,d,{tileID:t,tileSize:u},v):Zj(o,a),_=i.getTerrainDataForTile(t),y=i.getMeshFromTileID(t.canonical,!1,!0,`raster`);g.draw(s,c.TRIANGLES,m,p,h,uM.backCCW,f,_,r,n.id,y.vertexBuffer,y.indexBuffer,y.segments)}}var lN=new Ni(1,0,0,1),uN=new Ni(0,1,0,1),dN=new Ni(0,0,1,1),fN=new Ni(1,0,1,1),pN=new Ni(0,1,1,1);function mN(e){let t=e.transform.padding;gN(e,e.transform.height-(t.top||0),3,lN),gN(e,t.bottom||0,3,uN),_N(e,t.left||0,3,dN),_N(e,e.transform.width-(t.right||0),3,fN);let n=e.transform.centerPoint;hN(e,n.x,e.transform.height-n.y,pN)}function hN(e,t,n,r){vN(e,t-1,n-10,2,20,r),vN(e,t-10,n-1,20,2,r)}function gN(e,t,n,r){vN(e,0,t+n/2,e.transform.width,n,r)}function _N(e,t,n,r){vN(e,t-n/2,0,n,e.transform.height,r)}function vN(e,t,n,r,i,a){let o=e.context,s=o.gl,c=e.data.pixelRatio;s.enable(s.SCISSOR_TEST),s.scissor(t*c,n*c,r*c,i*c),o.clear({color:a}),s.disable(s.SCISSOR_TEST)}function yN(e,t,n,r){for(let i of n)bN(e,t,i,r)}function bN(e,t,n,r){let i=r.context,a=i.gl,o=r.useProgram(`debug`),s=dM.disabled,c=sM.disabled,l=r.colorModeForRenderPass(),u=`$debug`,d=r.getTerrainDataForTile(n);i.activeTexture.set(a.TEXTURE0);let f=t.getTileByID(n.key).latestRawTileData?.byteLength||0,p=Math.floor(f/1024),m=t.getTile(n).tileSize,h=512/Math.min(m,512)*(n.overscaledZ/r.transform.zoom)*.5,g=n.canonical.toString();n.overscaledZ!==n.canonical.z&&(g+=` => ${n.overscaledZ}`),xN(e,`${g} ${p}kB`);let _=r.getProjectionDataForTile(n);o.draw(i,a.TRIANGLES,s,c,VA.alphaBlended,uM.disabled,_j(Ni.transparent,h),null,_,u,e.debugBuffer,e.quadTriangleIndexBuffer,e.debugSegments),o.draw(i,a.LINE_STRIP,s,c,l,uM.disabled,_j(Ni.red),d,_,u,e.debugBuffer,e.tileBorderIndexBuffer,e.debugSegments)}function xN(e,t){e.initDebugOverlayCanvas();let n=e.debugOverlayCanvas,r=e.context.gl,i=e.debugOverlayCanvas.getContext(`2d`);i.clearRect(0,0,n.width,n.height),i.shadowColor=`white`,i.shadowBlur=2,i.lineWidth=1.5,i.strokeStyle=`white`,i.textBaseline=`top`,i.font=`bold 36px Open Sans, sans-serif`,i.fillText(t,5,5),i.strokeText(t,5,5),e.debugOverlayTexture.update(n),e.debugOverlayTexture.bind(r.LINEAR,r.CLAMP_TO_EDGE)}function SN(e,t){let n=null,r=Object.values(e._layers).flatMap(n=>n.source&&!n.isHidden(t)?[e.tileManagers[n.source]]:[]),i=r.filter(e=>e.getSource().type===`vector`),a=r.filter(e=>e.getSource().type!==`vector`),o=e=>{(!n||n.getSource().maxzoomu.getProjectionData({overscaledTileID:new Bb(e.tileID.canonical.z,e.tileID.wrap??0,e.tileID.canonical.z,e.tileID.canonical.x,e.tileID.canonical.y),aligned:e.aligned,applyGlobeMatrix:e.applyGlobeMatrix,applyTerrainMatrix:e.applyTerrainMatrix}),renderTerrainHeightMap:s&&i.currentPass===`offscreen`?e=>TN(i,s,e):void 0},p=l.renderingMode?l.renderingMode:`2d`;if(i.currentPass===`offscreen`){let t=l.prerender;t&&(c.setCustomLayerDefaults(),c.setColorMode(i.colorModeForRenderPass()),t.call(l,c.gl,f),c.setDirty(),e.setBaseState())}else if(i.currentPass===`translucent`){c.setCustomLayerDefaults(),c.setColorMode(i.colorModeForRenderPass()),c.setStencilMode(sM.disabled);let t=p===`3d`?i.getDepthModeFor3D():i.getDepthModeForSublayer(0,dM.ReadOnly);c.setDepthMode(t),l.render(c.gl,f),c.setDirty(),e.setBaseState(),c.bindFramebuffer.set(null)}}function DN(e,t,n,r){let i=r.context,a=i.bindFramebuffer.get(),o=i.viewport.get();i.setCustomLayerDefaults(),i.setColorMode(r.colorModeForRenderPass()),i.setDepthMode(dM.disabled),i.setStencilMode(sM.disabled),t.implementation.renderToTerrainTile(i.gl,{tileID:{canonical:n.canonical,wrap:n.wrap},width:o[2],height:o[3]}),i.setDirty(),e.setBaseState(),i.bindFramebuffer.set(a),i.viewport.set(o)}function ON(e,t){let n=t.context,r=n.gl,{sky:i,pixelRatio:a}=t.data,o=nM(i,t.transform,a),s=new dM(r.LEQUAL,dM.ReadWrite,[0,1]),c=sM.disabled,l=t.colorModeForRenderPass();t.useProgram(`sky`).draw(n,r.TRIANGLES,s,c,l,uM.disabled,o,null,void 0,`sky`,e.vertexBuffer,e.indexBuffer,e.segments)}function kN(e,t){let n=nn(e.position);Fe(n,n);let r=pe(new Float64Array(16));return e.anchor===`map`&&(ve(r,r,t.rollInRadians),F(r,r,-t.pitchInRadians),ve(r,r,t.bearingInRadians),F(r,r,t.center.lat*Math.PI/180),_e(r,r,-t.center.lng*Math.PI/180)),Be(n,n,r),n}function AN(e,t){let n=t.context,r=n.gl,{sky:i,light:a}=t.data,o=t.useProgram(`atmosphere`),s=new dM(r.LEQUAL,dM.ReadOnly,[0,1]),c=t.transform,l=kN(a,c),u=c.getProjectionData({overscaledTileID:null,applyGlobeMatrix:!0,applyTerrainMatrix:!0}),d=qO(c.worldSize,c.center.lat),f=JO(c),p=fk(Oe(f)-d,d),m=i[`atmosphere-blend`]*u.projectionTransition*p;if(m===0)return;let h=eM(l,m,f,d,c.inverseProjectionMatrix);o.draw(n,r.TRIANGLES,s,sM.disabled,VA.alphaBlended,uM.disabled,h,null,null,`atmosphere`,e.vertexBuffer,e.indexBuffer,e.segments)}var jN={symbol:gM,circle:wM,heatmap:TM,line:VM,fill:WM,fillExtrusion:JM,hillshade:XM,colorRelief:$M,raster:rN,background:cN,sky:ON,atmosphere:AN,custom:EN,debug:yN,debugPadding:mN,terrainDepth:CN},MN=GE.maxOverzooming+GE.maxUnderzooming+1,NN=1/2**16,PN={name:pO,define:fO,prelude:uO.projectionMercator},FN=class{constructor(e){this.currentLayer=0,this.opaquePassCutoff=1/0,this.depthRangeFor3D=[0,1],this.isRenderingToTexture=!1,this.nextStencilID=1,this.tileClippingMaskIDs={},this.transform=e.transform,this.terrain=e.terrain,this.data=e.data,this.context=e.context,this.programCache=e.programCache,this.currentPass=e.currentPass,this.projection=e.projection}getProjectionDataForTile(e,t={}){let n=this.transform.getProjectionData({overscaledTileID:e,aligned:t.aligned,applyGlobeMatrix:!this.isRenderingToTexture,applyTerrainMatrix:t.applyTerrainMatrix??!0});return this.isRenderingToTexture||(n.uniformBufferKey=t.aligned?`${e.key}/aligned`:e.key),n}getTerrainDataForTile(e){return this.isRenderingToTexture?null:this.terrain?.getTerrainData(e)??null}getMeshFromTileID(e,t,n,r){return this.projection.getMeshFromTileID(this.context,e,t,n,r)}useProgram(e,t,n=!1,r=[]){return this.programCache.getProgram({name:e,programConfiguration:t,projectionShaderVariant:n?PN:this.data.projectionShaderVariant,showOverdrawInspector:this.data.showOverdrawInspector,useTerrain:this.terrain!==null,defines:r})}colorModeForRenderPass(){let e=this.context.gl;if(this.data.showOverdrawInspector){let t=1/8;return new VA([e.CONSTANT_COLOR,e.ONE],new Ni(t,t,t,0),[!0,!0,!0,!0])}return this.currentPass===`opaque`?VA.unblended:VA.alphaBlended}getDepthModeForSublayer(e,t,n){if(!this.opaquePassEnabledForLayer())return dM.disabled;let r=1-((1+this.currentLayer)*MN+e)*NN;return new dM(n||this.context.gl.LEQUAL,t,[r,r])}getDepthModeFor3D(){return new dM(this.context.gl.LEQUAL,dM.ReadWrite,this.depthRangeFor3D)}setDepthRangeFor3D(e){this.depthRangeFor3D=[0,1-(e+2)*MN*NN]}opaquePassEnabledForLayer(){return this.currentLayer256&&this.clearStencil();let n=this.context;n.setColorMode(VA.disabled),n.setDepthMode(dM.disabled);let r={};for(let e of t)r[e.key]=this.nextStencilID++;this.data.useSubdivision&&this.renderTileMasks(r,t,!0),this.renderTileMasks(r,t,!1),this.tileClippingMaskIDs=r}renderTileMasks(e,t,n){let r=this.context,i=r.gl,a=this.useProgram(`clippingMask`);for(let o of t){let t=e[o.key],s=this.getTerrainDataForTile(o),c=this.getMeshFromTileID(o.canonical,n,!0,`stencil`),l=this.getProjectionDataForTile(o);a.draw(r,i.TRIANGLES,dM.disabled,new sM({func:i.ALWAYS,mask:0},t,255,i.KEEP,i.KEEP,i.REPLACE),VA.disabled,this.isRenderingToTexture?uM.disabled:uM.backCCW,null,s,l,`$clipping`,c.vertexBuffer,c.indexBuffer,c.segments)}}stencilModeFor3D(){this.currentStencilSource=void 0,this.nextStencilID+1>256&&this.clearStencil();let e=this.nextStencilID++,t=this.context.gl;return new sM({func:t.NOTEQUAL,mask:255},e,255,t.KEEP,t.KEEP,t.REPLACE)}stencilModeForClipping(e){let t=this.context.gl;return new sM({func:t.EQUAL,mask:255},this.tileClippingMaskIDs[e.key],0,t.KEEP,t.KEEP,t.REPLACE)}getStencilConfigForOverlapAndUpdateStencilID(e){let t=this.context.gl,n=e.sort((e,t)=>t.overscaledZ-e.overscaledZ),r=n[n.length-1].overscaledZ,i=n[0].overscaledZ-r+1;if(i>1){this.currentStencilSource=void 0,this.nextStencilID+i>256&&this.clearStencil();let e={};for(let n=0;nt.overscaledZ-e.overscaledZ),r=n[n.length-1].overscaledZ,i=n[0].overscaledZ-r+1;if(this.clearStencil(),i>1){let e={},a={};for(let n=0;n=0;r.currentLayer--){let n=e._layers[i[r.currentLayer]];if(n.isHidden(t.zoom))continue;let s=a[n.source],c=o[n.source];r.renderTileClippingMasks(n,c),this.renderLayer(this,s,n,c,r)}r.currentPass=`translucent`;let l=!1;for(r.currentLayer=0;r.currentLayer0?t.pop():null}acquireRTT(e){let t=this.context.gl,n=this._rttObjectRecyclePool.pop();if(n)return n.size!==e&&(n.texture.update({width:e,height:e,data:null},{premultiply:!1,useMipmap:!0}),n.texture.bind(t.LINEAR,t.CLAMP_TO_EDGE,t.LINEAR_MIPMAP_LINEAR),this.context.extTextureFilterAnisotropic&&t.texParameterf(t.TEXTURE_2D,this.context.extTextureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT,this.context.extTextureFilterAnisotropicMax),n.size=e),n;let r=new Qf(this.context,{width:e,height:e,data:null},t.RGBA,{premultiply:!1,useMipmap:!0});return r.bind(t.LINEAR,t.CLAMP_TO_EDGE,t.LINEAR_MIPMAP_LINEAR),this.context.extTextureFilterAnisotropic&&t.texParameterf(t.TEXTURE_2D,this.context.extTextureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT,this.context.extTextureFilterAnisotropicMax),{texture:r,size:e}}bindRTT(e){let t=this.context.gl,n=e.size;if(!this._rttSharedFbo){let e=this.context.createFramebuffer(n,n,!0,!0),r=this.context.createRenderbuffer(t.DEPTH_STENCIL,n,n);e.depthAttachment.set(r),this._rttSharedFbo={fbo:e,depthRenderbuffer:r,size:n}}this._rttSharedFbo.size!==n&&(this.context.bindRenderbuffer.set(this._rttSharedFbo.depthRenderbuffer),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,n,n),this.context.bindRenderbuffer.set(null),this._rttSharedFbo.fbo.width=n,this._rttSharedFbo.fbo.height=n,this._rttSharedFbo.size=n),this._rttSharedFbo.fbo.colorAttachment.set(e.texture.texture),this.context.bindFramebuffer.set(this._rttSharedFbo.fbo.framebuffer)}releaseRTT(e){this._rttObjectRecyclePool.push(e)}clearRTTPool(){for(let e of this._rttObjectRecyclePool)e.texture.destroy();this._rttObjectRecyclePool.length=0}destroyRTTResources(){if(this.clearRTTPool(),!this._rttSharedFbo)return;this._rttSharedFbo.fbo.colorAttachment.set(null),this._rttSharedFbo.fbo.depthAttachment.set(null);let e=this.context.gl;e.deleteRenderbuffer(this._rttSharedFbo.depthRenderbuffer),e.deleteFramebuffer(this._rttSharedFbo.fbo.framebuffer),this._rttSharedFbo=null}setBaseState(){let e=this.context.gl;this.context.cullFace.set(!1),this.context.viewport.set([0,0,this.width,this.height]),this.context.blendEquation.set(e.FUNC_ADD)}initDebugOverlayCanvas(){if(this.debugOverlayCanvas==null){this.debugOverlayCanvas=document.createElement(`canvas`),this.debugOverlayCanvas.width=512,this.debugOverlayCanvas.height=512;let e=this.context.gl;this.debugOverlayTexture=new Qf(this.context,this.debugOverlayCanvas,e.RGBA)}}destroy(){if(this._tileTextures){for(let e in this._tileTextures){let t=this._tileTextures[e];if(t)for(let e of t)e.destroy()}this._tileTextures={}}this.destroyRTTResources(),this.layerOpacityFbo?.destroy(),this.layerOpacityFbo=null,this.tileExtentBuffer&&this.tileExtentBuffer.destroy(),this.debugBuffer&&this.debugBuffer.destroy(),this.rasterBoundsBuffer&&this.rasterBoundsBuffer.destroy(),this.viewportBuffer&&this.viewportBuffer.destroy(),this.tileBorderIndexBuffer&&this.tileBorderIndexBuffer.destroy(),this.quadTriangleIndexBuffer&&this.quadTriangleIndexBuffer.destroy(),this.tileExtentMesh&&this.tileExtentMesh.vertexBuffer?.destroy(),this.tileExtentMesh&&this.tileExtentMesh.indexBuffer?.destroy(),this.skyMesh?.destroy(),this.skyMesh=null,this.debugOverlayTexture&&this.debugOverlayTexture.destroy(),this.context.destroy(),this.programCache.destroy(),this.context&&this.context.setDefault()}overLimit(){let{drawingBufferWidth:e,drawingBufferHeight:t}=this.context.gl;return this.width!==e||this.height!==t}},LN=class extends Error{constructor(e,t){super(`WebGL2 is required to display this map. We are sorry, but it seems that your browser does not support WebGL2, a technology for rendering 3D graphics on the web. Read more on https://wiki.openstreetmap.org/wiki/This_map_requires_WebGL`),this.name=`GPUInitializationError`,this.requestedAttributes=e,this.statusMessage=t?.statusMessage??null}};function RN(e,t){let n=!1,r=null,i,a=()=>{r=null,n&&=(e(...i),r=setTimeout(a,t),!1)};return(...e)=>(n=!0,i=e,r||a(),r)}var zN=class{constructor(e){this._getHashParams=()=>new URLSearchParams(window.location.hash.replace(`#`,``)),this._getCurrentHash=()=>{let e=this._getHashParams();return this._hashName?(e.get(this._hashName)||``).split(`/`):([...e.keys()][0]??``).split(`/`)},this._onHashChange=()=>{let e=this._getCurrentHash();if(!this._isValidHash(e))return!1;let t=this._map.dragRotate.isEnabled()&&this._map.touchZoomRotate.isEnabled()?+(e[3]||0):this._map.getBearing();return this._map.jumpTo({center:[+e[2],+e[1]],zoom:+e[0],bearing:t,pitch:+(e[4]||0)}),!0},this._updateHashUnthrottled=()=>{let e=window.location.href.replace(/(#.*)?$/,this.getHashString());window.history.replaceState(window.history.state,null,e)},this._removeHash=()=>{let e=this._getHashParams();if(this._hashName)e.delete(this._hashName);else{let t=Array.from(e.keys());t.length>0&&e.delete(t[0])}let t=decodeURIComponent(e.toString()).replace(/=&/g,`&`).replace(/=$/g,``),n=t?`#${t}`:``,r=window.location.href.replace(/(#.+)?$/,n);r=r.replace(`&&`,`&`),window.history.replaceState(window.history.state,null,r)},this._updateHash=RN(this._updateHashUnthrottled,300),this._hashName=e&&encodeURIComponent(e)}addTo(e){return this._map=e,addEventListener(`hashchange`,this._onHashChange,!1),this._map.on(`moveend`,this._updateHash),this}remove(){return removeEventListener(`hashchange`,this._onHashChange,!1),this._map.off(`moveend`,this._updateHash),clearTimeout(this._updateHash()),this._removeHash(),delete this._map,this}getHashString(e){let t=this._map.getCenter(),n=Math.round(this._map.getZoom()*100)/100,r=10**Math.ceil((n*Math.LN2+Math.log(512/360/.5))/Math.LN10),i=Math.round(t.lng*r)/r,a=Math.round(t.lat*r)/r,o=this._map.getBearing(),s=this._map.getPitch(),c=``;if(c+=e?`/${i}/${a}/${n}`:`${n}/${a}/${i}`,(o||s)&&(c+=`/${Math.round(o*10)/10}`),s&&(c+=`/${Math.round(s)}`),this._hashName){let e=this._getHashParams();return e.set(this._hashName,c),`#${decodeURIComponent(e.toString()).replace(/=&/g,`&`).replace(/=$/g,``)}`}return`#${c}`}_isValidHash(e){if(e.length<3||e.some(e=>isNaN(+e)))return!1;try{new X(+e[2],+e[1])}catch{return!1}let t=+e[0],n=+(e[3]||0),r=+(e[4]||0);return t>=this._map.getMinZoom()&&t<=this._map.getMaxZoom()&&n>=-180&&n<=180&&r>=this._map.getMinPitch()&&r<=this._map.getMaxPitch()}},BN={linearity:.3,easing:Lt(0,0,.3,1)},VN=z({deceleration:2500,maxSpeed:1400},BN),HN=z({deceleration:20,maxSpeed:1400},BN),UN=z({deceleration:1e3,maxSpeed:360},BN),WN=z({deceleration:1e3,maxSpeed:90},BN),GN=z({deceleration:1e3,maxSpeed:360},BN),KN=class{constructor(e){this._map=e,this.clear()}clear(){this._inertiaBuffer=[]}record(e){this._drainInertiaBuffer(),this._inertiaBuffer.push({time:Fn(),settings:e})}_drainInertiaBuffer(){let e=this._inertiaBuffer,t=Fn();for(;e.length>0&&t-e[0].time>160;)e.shift()}_getVelocityEntries(){let e=this._inertiaBuffer,t=Fn()-60,n=Math.max(0,e.length-2);for(;n>0&&e[n-1].time>=t;)n--;return e.slice(n)}_onMoveEnd(e){this._drainInertiaBuffer();let t=this._getVelocityEntries();if(t.length<2){this.clear();return}let n={zoom:0,bearing:0,pitch:0,roll:0,pan:new k(0,0),pinchAround:void 0,around:void 0};for(let{settings:e}of t)e.around&&(n.around=e.around),e.pinchAround&&(n.pinchAround=e.pinchAround);for(let{settings:e}of t.slice(1))n.zoom+=e.zoomDelta||0,n.bearing+=e.bearingDelta||0,n.pitch+=e.pitchDelta||0,n.roll+=e.rollDelta||0,e.panDelta&&n.pan._add(e.panDelta);if(!n.pan.mag()&&!n.zoom&&!n.bearing&&!n.pitch&&!n.roll){this.clear();return}let r=Fn()-t[0].time,i={};if(n.pan.mag()){let t=JN(n.pan.mag(),r,z({},VN,e||{})),a=n.pan.mult(t.amount/n.pan.mag()),o=this._map._camera.cameraHelper.handlePanInertia(a,this._map._camera.transform);i.center=o.easingCenter,i.offset=o.easingOffset,qN(i,t)}if(n.zoom){let e=JN(n.zoom,r,HN);i.zoom=qt(this._map.getZoom()+e.amount,this._map.getZoomSnap(),e.amount),qN(i,e)}if(n.bearing){let e=JN(n.bearing,r,UN);i.bearing=this._map.getBearing()+R(e.amount,-179,179),qN(i,e)}if(n.pitch){let e=JN(n.pitch,r,WN);i.pitch=this._map.getPitch()+e.amount,qN(i,e)}if(n.roll){let e=JN(n.roll,r,GN);i.roll=this._map.getRoll()+R(e.amount,-179,179),qN(i,e)}if(i.zoom||i.bearing){let e=n.pinchAround===void 0?n.around:n.pinchAround;i.around=e?this._map.unproject(e):this._map.getCenter()}return this.clear(),z(i,{noMoveStart:!0})}};function qN(e,t){(!e.duration||e.duration=this._clickTolerance||this._map.fire(new fr(e.type,this._map,e))}dblclick(e){return this._firePreventable(new fr(e.type,this._map,e))}mouseover(e){this._map.fire(new fr(e.type,this._map,e))}mouseout(e){this._map.fire(new fr(e.type,this._map,e))}touchstart(e){return this._firePreventable(new pr(e.type,this._map,e))}touchmove(e){this._map.fire(new pr(e.type,this._map,e))}touchend(e){this._map.fire(new pr(e.type,this._map,e))}touchcancel(e){this._map.fire(new pr(e.type,this._map,e))}_firePreventable(e){if(this._map.fire(e),e.defaultPrevented)return{}}isEnabled(){return!0}isActive(){return!1}enable(){}disable(){}},XN=class{constructor(e,t){this._map=e,this._clickTolerance=t.clickTolerance}reset(){this._delayContextMenu=!1,this._ignoreContextMenu=!0,delete this._contextMenuEvent,this._clearLongPress(),this._touchActive=!1}mousemove(e){this._map.fire(new fr(e.type,this._map,e))}mousedown(){this._delayContextMenu=!0,this._ignoreContextMenu=!1}mouseup(){this._delayContextMenu=!1,this._contextMenuEvent&&(this._map.fire(new fr(`contextmenu`,this._map,this._contextMenuEvent)),delete this._contextMenuEvent)}touchstart(e,t,n){if(this._clearLongPress(),this._touchActive=n.length>0,n.length!==1)return;this._longPressStart=t[0];let r=n[0];this._longPressTimer=setTimeout(()=>{this._longPressTimer=void 0;let e=new MouseEvent(`contextmenu`,{clientX:r.clientX,clientY:r.clientY,button:2,bubbles:!0,cancelable:!0});this._map.fire(new fr(`contextmenu`,this._map,e))},500)}touchmove(e,t,n){this._longPressTimer&&(n.length!==1||!this._longPressStart||t[0].dist(this._longPressStart)>this._clickTolerance)&&this._clearLongPress()}touchend(){this._touchActive=!1,this._clearLongPress()}touchcancel(){this._touchActive=!1,this._clearLongPress()}_clearLongPress(){this._longPressTimer&&=(clearTimeout(this._longPressTimer),void 0),this._longPressStart=void 0}contextmenu(e){this._touchActive?e.preventDefault():(this._delayContextMenu?this._contextMenuEvent=e:this._ignoreContextMenu||this._map.fire(new fr(e.type,this._map,e)),this._map.listens(`contextmenu`)&&e.preventDefault())}isEnabled(){return!0}isActive(){return!1}enable(){}disable(){}},ZN=class{constructor(e,t,n){this._map=e,this._tr=n,this._el=e.getCanvasContainer(),this._container=e.getContainer(),this._clickTolerance=t.clickTolerance||1,t.boxZoom&&typeof t.boxZoom==`object`&&(this._boxZoomEnd=t.boxZoom.boxZoomEnd)}isEnabled(){return!!this._enabled}isActive(){return!!this._active}enable(){this.isEnabled()||(this._enabled=!0)}disable(){this.isEnabled()&&(this._enabled=!1)}mousedown(e,t){this.isEnabled()&&e.shiftKey&&e.button===0&&(Hn.disableDrag(),this._startPos=this._lastPos=t,this._active=!0)}mousemoveWindow(e,t){if(!this._active)return;let n=t;if(this._lastPos.equals(n)||!this._box&&n.dist(this._startPos)e.fitScreenCoordinates(n,r,this._tr.bearing,{linear:!0})}}}keydown(e){this._active&&e.keyCode===27&&(this.reset(),this._fireEvent(`boxzoomcancel`,e))}reset(){this._active=!1,this._container.classList.remove(`maplibregl-crosshair`),this._box&&=(this._box.remove(),null),Hn.enableDrag(),delete this._startPos,delete this._lastPos}_fireEvent(e,t){return this._map.fire(new hr(e,{originalEvent:t}))}};function QN(e,t){if(e.length!==t.length)throw Error(`The number of touches and points are not equal - touches ${e.length}, points ${t.length}`);let n={};for(let r=0;rthis.numTouches)&&(this.aborted=!0),!this.aborted&&(this.startTime===void 0&&(this.startTime=e.timeStamp),n.length===this.numTouches&&(this.centroid=$N(t),this.touches=QN(n,t)))}touchmove(e,t,n){if(this.aborted||!this.centroid)return;let r=QN(n,t);for(let e in this.touches){let t=this.touches[e],n=r[e];(!n||n.dist(t)>30)&&(this.aborted=!0)}}touchend(e,t,n){if((!this.centroid||e.timeStamp-this.startTime>500)&&(this.aborted=!0),n.length===0){let e=!this.aborted&&this.centroid;if(this.reset(),e)return e}}},tP=class{constructor(e){this.singleTap=new eP(e),this.numTaps=e.numTaps,this.reset()}reset(){this.lastTime=1/0,delete this.lastTap,this.count=0,this.singleTap.reset()}touchstart(e,t,n){this.singleTap.touchstart(e,t,n)}touchmove(e,t,n){this.singleTap.touchmove(e,t,n)}touchend(e,t,n){let r=this.singleTap.touchend(e,t,n);if(r){let t=e.timeStamp-this.lastTime<500,n=!this.lastTap||this.lastTap.dist(r)<30;if((!t||!n)&&this.reset(),this.count++,this.lastTime=e.timeStamp,this.lastTap=r,this.count===this.numTaps)return this.reset(),r}}},nP=class{constructor(e,t){this._tr=t,this._zoomIn=new tP({numTouches:1,numTaps:2}),this._zoomOut=new tP({numTouches:2,numTaps:1}),this.reset()}reset(){this._active=!1,this._zoomIn.reset(),this._zoomOut.reset()}touchstart(e,t,n){this._zoomIn.touchstart(e,t,n),this._zoomOut.touchstart(e,t,n)}touchmove(e,t,n){this._zoomIn.touchmove(e,t,n),this._zoomOut.touchmove(e,t,n)}touchend(e,t,n){let r=this._zoomIn.touchend(e,t,n),i=this._zoomOut.touchend(e,t,n),a=this._tr;if(r)return this._active=!0,e.preventDefault(),setTimeout(()=>this.reset(),0),{cameraAnimation:t=>t.easeTo({duration:300,zoom:qt(a.zoom+1,t.getZoomSnap()),around:a.transform.isPointOnMapSurface(r)?a.unproject(r):void 0},{originalEvent:e})};if(i)return this._active=!0,e.preventDefault(),setTimeout(()=>this.reset(),0),{cameraAnimation:t=>t.easeTo({duration:300,zoom:qt(a.zoom-1,t.getZoomSnap()),around:a.transform.isPointOnMapSurface(i)?a.unproject(i):void 0},{originalEvent:e})}}touchcancel(){this.reset()}enable(){this._enabled=!0}disable(){this._enabled=!1,this.reset()}isEnabled(){return this._enabled}isActive(){return this._active}},rP=class{constructor(e){this._enabled=!!e.enable,this._moveStateManager=e.moveStateManager,this._clickTolerance=e.clickTolerance||1,this._moveFunction=e.move,this._activateOnStart=!!e.activateOnStart,e.assignEvents(this),this.reset()}reset(e){this._active=!1,this._moved=!1,delete this._lastPoint,this._moveStateManager.endMove(e)}_move(...e){let t=this._moveFunction(...e);if(t.bearingDelta||t.pitchDelta||t.rollDelta||t.around||t.panDelta)return this._active=!0,t}dragStart(e,t){this.isEnabled()&&!this._lastPoint&&this._moveStateManager.isValidStartEvent(e)&&(this._moveStateManager.startMove(e),this._lastPoint=Array.isArray(t)?t[0]:t,this._activateOnStart&&this._lastPoint&&(this._active=!0))}dragMove(e,t){if(!this.isEnabled())return;let n=this._lastPoint;if(!n)return;if(e.preventDefault(),!this._moveStateManager.isValidMoveEvent(e)){this.reset(e);return}let r=Array.isArray(t)?t[0]:t;if(!(!this._moved&&r.dist(n){e.mousedown=e.dragStart,e.mousemoveWindow=e.dragMove,e.mouseup=e.dragEnd,e.contextmenu=e=>{e.preventDefault()}};function cP({enable:e,clickTolerance:t}){return new rP({clickTolerance:t,move:(e,t)=>({around:t,panDelta:t.sub(e)}),activateOnStart:!0,moveStateManager:new oP({checkCorrectEvent:e=>e.button===0&&!e.ctrlKey}),enable:e,assignEvents:sP})}function lP({enable:e,clickTolerance:t,aroundCenter:n=!0,minPixelCenterThreshold:r=100,rotateSpeed:i=.8},a){return new rP({clickTolerance:t,move:(e,t)=>{let o=a();if(n&&Math.abs(o.y-e.y)>r)return{bearingDelta:vn(new k(e.x,t.y),t,o)};let s=(t.x-e.x)*i;return n&&t.ye.button===0&&e.ctrlKey||e.button===2&&!e.ctrlKey}),enable:e,assignEvents:sP})}function uP({enable:e,clickTolerance:t,pitchSpeed:n=-.5}){return new rP({clickTolerance:t,move:(e,t)=>({pitchDelta:(t.y-e.y)*n}),moveStateManager:new oP({checkCorrectEvent:e=>e.button===0&&e.ctrlKey||e.button===2}),enable:e,assignEvents:sP})}function dP({enable:e,clickTolerance:t,rollDegreesPerPixelMoved:n=.3},r){return new rP({clickTolerance:t,move:(e,t)=>{let i=r(),a=(t.x-e.x)*n;return t.ye.button===2&&e.ctrlKey}),enable:e,assignEvents:sP})}var fP=class{constructor(e,t){this._clickTolerance=e.clickTolerance||1,this._map=t,this.reset()}reset(){this._active=!1,this._touches={},this._sum=new k(0,0)}_shouldBePrevented(e){return e<(this._map.cooperativeGestures.isEnabled()?2:1)}touchstart(e,t,n){return this._calculateTransform(e,t,n)}touchmove(e,t,n){if(this._active){if(this._shouldBePrevented(n.length)){this._map.cooperativeGestures.notifyGestureBlocked(`touch_pan`,e);return}return e.preventDefault(),this._calculateTransform(e,t,n)}}touchend(e,t,n){this._calculateTransform(e,t,n),this._active&&this._shouldBePrevented(n.length)&&this.reset()}touchcancel(){this.reset()}_calculateTransform(e,t,n){n.length>0&&(this._active=!0);let r=QN(n,t),i=new k(0,0),a=new k(0,0),o=0;for(let e in r){let t=r[e],n=this._touches[e];n&&(i._add(t),a._add(t.sub(n)),o++,r[e]=t)}if(this._touches=r,this._shouldBePrevented(o)||!a.mag())return;let s=a.div(o);if(this._sum._add(s),!(this._sum.mag()Math.abs(e.x)}var xP=class extends pP{constructor(e){super(),this._currentTouchCount=0,this._map=e}reset(){super.reset(),this._valid=void 0,delete this._firstMove,delete this._lastPoints}touchstart(e,t,n){super.touchstart(e,t,n),this._currentTouchCount=n.length}_start(e){this._lastPoints=e,bP(e[0].sub(e[1]))&&(this._valid=!1)}_move(e,t,n){if(this._map.cooperativeGestures.isEnabled()&&this._currentTouchCount<3)return;let r=e[0].sub(this._lastPoints[0]),i=e[1].sub(this._lastPoints[1]);if(this._valid=this.gestureBeginsVertically(r,i,n.timeStamp),this._valid)return this._lastPoints=e,this._active=!0,{pitchDelta:(r.y+i.y)/2*-.5}}gestureBeginsVertically(e,t,n){if(this._valid!==void 0)return this._valid;let r=e.mag()>=2,i=t.mag()>=2;if(!r&&!i)return;if(!r||!i)return this._firstMove===void 0&&(this._firstMove=n),n-this._firstMove<100&&void 0;let a=e.y>0==t.y>0;return bP(e)&&bP(t)&&a}},SP={panStep:100,bearingStep:15,pitchStep:10},CP=class{constructor(e,t){this._tr=t;let n=SP;this._panStep=n.panStep,this._bearingStep=n.bearingStep,this._pitchStep=n.pitchStep,this._rotationDisabled=!1}reset(){this._active=!1}keydown(e){if(e.altKey||e.ctrlKey||e.metaKey)return;let t=0,n=0,r=0,i=0,a=0;switch(e.keyCode){case 61:case 107:case 171:case 187:t=1;break;case 189:case 109:case 173:t=-1;break;case 37:e.shiftKey?n=-1:(e.preventDefault(),i=-1);break;case 39:e.shiftKey?n=1:(e.preventDefault(),i=1);break;case 38:e.shiftKey?r=1:(e.preventDefault(),a=-1);break;case 40:e.shiftKey?r=-1:(e.preventDefault(),a=1);break;default:return}return this._rotationDisabled&&(n=0,r=0),{cameraAnimation:o=>{let s=this._tr;o.easeTo({duration:300,easeId:`keyboardHandler`,easing:wP,zoom:t?qt(s.zoom+t*(e.shiftKey?2:1),o.getZoomSnap()):s.zoom,bearing:s.bearing+n*this._bearingStep,pitch:s.pitch+r*this._pitchStep,offset:[-i*this._panStep,-a*this._panStep],center:s.center},{originalEvent:e})}}}enable(){this._enabled=!0}disable(){this._enabled=!1,this.reset()}isEnabled(){return this._enabled}isActive(){return this._active}disableRotation(){this._rotationDisabled=!0}enableRotation(){this._rotationDisabled=!1}};function wP(e){return e*(2-e)}var TP=4.000244140625,EP=class{constructor(e,t,n){this._onTimeout=e=>{this._type=`wheel`,this._delta-=this._lastValue,this._active||this._start(e)},this._map=e,this._tr=n,this._triggerRenderFrame=t,this._delta=0,this._defaultZoomRate=.01,this._wheelZoomRate=.0022222222222222222}setZoomRate(e){this._defaultZoomRate=e}setWheelZoomRate(e){this._wheelZoomRate=e}isEnabled(){return!!this._enabled}isActive(){return!!this._active||this._finishTimeout!==void 0}isZooming(){return!!this._zooming}enable(e){this.isEnabled()||(this._enabled=!0,this._aroundCenter=!!e&&e.around===`center`)}disable(){this.isEnabled()&&(this._enabled=!1)}_shouldBePrevented(e){return this._map.cooperativeGestures.isEnabled()?!(e.ctrlKey||this._map.cooperativeGestures.isBypassed(e)):!1}wheel(e){if(!this.isEnabled())return;if(this._shouldBePrevented(e)){this._map.cooperativeGestures.notifyGestureBlocked(`wheel_zoom`,e);return}let t=e.deltaMode===WheelEvent.DOM_DELTA_LINE?e.deltaY*40:e.deltaY,n=Fn(),r=n-(this._lastWheelEventTime||0);this._lastWheelEventTime=n,t!==0&&t%TP==0?this._type=`wheel`:t!==0&&Math.abs(t)<4?this._type=`trackpad`:r>400?(this._type=null,this._lastValue=t,this._timeout=setTimeout(this._onTimeout,40,e)):this._type||(this._type=Math.abs(r*t)<200?`trackpad`:`wheel`,this._timeout&&(clearTimeout(this._timeout),this._timeout=null,t+=this._lastValue)),e.shiftKey&&t&&(t/=4),this._type&&(this._lastWheelEvent=e,this._delta-=t,this._active||this._start(e)),e.preventDefault()}_start(e){if(!this._delta)return;this._needsRerender=!1,this._active=!0,this.isZooming()||(this._zooming=!0),this._finishTimeout&&(clearTimeout(this._finishTimeout),delete this._finishTimeout);let t=Hn.mousePos(this._map.getCanvas(),e),n=this._tr;this._aroundPoint=this._aroundCenter?n.transform.locationToScreenPoint(X.convert(n.center)):t,this._needsRerender||(this._needsRerender=!0,this._triggerRenderFrame())}renderFrame(){if(!this._needsRerender||(this._needsRerender=!1,!this.isActive()))return;let e=this._tr.transform;if(typeof this._lastExpectedZoom==`number`){let t=e.zoom-this._lastExpectedZoom;typeof this._startZoom==`number`&&(this._startZoom+=t),typeof this._targetZoom==`number`&&(this._targetZoom+=t)}if(this._delta!==0){let t=this._type===`wheel`&&Math.abs(this._delta)>TP?this._wheelZoomRate:this._defaultZoomRate,n=2/(1+Math.exp(-Math.abs(this._delta*t)));this._delta<0&&n!==0&&(n=1/n);let r=typeof this._targetZoom==`number`?Gt(this._targetZoom):e.scale,i=e.applyConstrain(e.getCameraLngLat(),Kt(r*n)).zoom,a=this._map.getZoomSnap();if(this._type===`wheel`&&a>0){let t=qt(e.zoom,a);this._targetZoom=qt(i,a,i-t)}else this._targetZoom=i;this._type===`wheel`&&(this._startZoom=e.zoom,this._easing=this._smoothOutEasing(200)),this._delta=0}let t=typeof this._targetZoom==`number`?this._targetZoom:e.zoom,n=this._startZoom,r=this._easing,i=!1,a;if(this._type===`wheel`&&n&&r){let e=Fn()-this._lastWheelEventTime,o=Math.min((e+5)/200,1),s=r(o);a=ia.number(n,t,s),o<1?this._needsRerender=!0:i=!0}else a=t,i=!0;return this._active=!0,i&&(this._active=!1,this._finishTimeout=setTimeout(()=>{this._zooming=!1,this._triggerRenderFrame(),delete this._targetZoom,delete this._lastExpectedZoom,delete this._finishTimeout},200)),this._lastExpectedZoom=a,{noInertia:!0,needsRenderFrame:!i,zoomDelta:a-e.zoom,around:this._aroundPoint,originalEvent:this._lastWheelEvent}}_smoothOutEasing(e){let t=Rt;if(this._prevEase){let e=this._prevEase,n=(Fn()-e.start)/e.duration,r=e.easing(n+.01)-e.easing(n),i=.27/Math.sqrt(r*r+1e-4)*.01;t=Lt(i,Math.sqrt(.0729-i*i),.25,1)}return this._prevEase={start:Fn(),duration:e,easing:t},t}reset(){this._active=!1,this._zooming=!1,delete this._targetZoom,delete this._lastExpectedZoom,this._finishTimeout&&(clearTimeout(this._finishTimeout),delete this._finishTimeout)}},DP=class{constructor(e,t){this._clickZoom=e,this._tapZoom=t}enable(){this._clickZoom.enable(),this._tapZoom.enable()}disable(){this._clickZoom.disable(),this._tapZoom.disable()}isEnabled(){return this._clickZoom.isEnabled()&&this._tapZoom.isEnabled()}isActive(){return this._clickZoom.isActive()||this._tapZoom.isActive()}},OP=class{constructor(e,t){this._tr=t,this.reset()}reset(){this._active=!1}dblclick(e,t){return e.preventDefault(),{cameraAnimation:n=>{n.easeTo({duration:300,zoom:qt(this._tr.zoom+(e.shiftKey?-1:1),n.getZoomSnap()),around:this._tr.transform.isPointOnMapSurface(t)?this._tr.unproject(t):void 0},{originalEvent:e})}}}enable(){this._enabled=!0}disable(){this._enabled=!1,this.reset()}isEnabled(){return this._enabled}isActive(){return this._active}},kP=class{constructor(){this._tap=new tP({numTouches:1,numTaps:1}),this._zoomRate=1,this.reset()}setZoomRate(e){this._zoomRate=e??1}reset(){this._active=!1,delete this._swipePoint,delete this._swipeTouch,delete this._tapTime,delete this._tapPoint,this._tap.reset()}touchstart(e,t,n){if(!this._swipePoint){if(!this._tapTime)this._tap.touchstart(e,t,n);else{let r=t[0],i=e.timeStamp-this._tapTime<500,a=this._tapPoint.dist(r)<30;!i||!a?this.reset():n.length>0&&(this._swipePoint=r,this._swipeTouch=n[0].identifier)}}}touchmove(e,t,n){if(!this._tapTime)this._tap.touchmove(e,t,n);else if(this._swipePoint){if(n[0].identifier!==this._swipeTouch)return;let r=t[0],i=r.y-this._swipePoint.y;return this._swipePoint=r,e.preventDefault(),this._active=!0,{zoomDelta:i/128*this._zoomRate}}}touchend(e,t,n){if(this._tapTime)this._swipePoint&&n.length===0&&this.reset();else{let r=this._tap.touchend(e,t,n);r&&(this._tapTime=e.timeStamp,this._tapPoint=r)}}touchcancel(){this.reset()}enable(){this._enabled=!0}disable(){this._enabled=!1,this.reset()}isEnabled(){return this._enabled}isActive(){return this._active}},AP=class{constructor(e,t,n){this._el=e,this._mousePan=t,this._touchPan=n}enable(e){this._inertiaOptions=e||{},this._mousePan.enable(),this._touchPan.enable(),this._el.classList.add(`maplibregl-touch-drag-pan`)}disable(){this._mousePan.disable(),this._touchPan.disable(),this._el.classList.remove(`maplibregl-touch-drag-pan`)}isEnabled(){return this._mousePan.isEnabled()&&this._touchPan.isEnabled()}isActive(){return this._mousePan.isActive()||this._touchPan.isActive()}},jP=class{constructor(e,t,n,r){this._pitchWithRotate=e.pitchWithRotate,this._rollEnabled=e.rollEnabled,this._mouseRotate=t,this._mousePitch=n,this._mouseRoll=r}enable(){this._mouseRotate.enable(),this._pitchWithRotate&&this._mousePitch.enable(),this._rollEnabled&&this._mouseRoll.enable()}disable(){this._mouseRotate.disable(),this._mousePitch.disable(),this._mouseRoll.disable()}isEnabled(){return this._mouseRotate.isEnabled()&&(!this._pitchWithRotate||this._mousePitch.isEnabled())&&(!this._rollEnabled||this._mouseRoll.isEnabled())}isActive(){return this._mouseRotate.isActive()||this._mousePitch.isActive()||this._mouseRoll.isActive()}},MP=class{constructor(e,t,n,r){this._el=e,this._touchZoom=t,this._touchRotate=n,this._tapDragZoom=r,this._rotationDisabled=!1,this._enabled=!0}enable(e){this._touchZoom.enable(e),this._rotationDisabled||this._touchRotate.enable(e),this._tapDragZoom.enable(),this._el.classList.add(`maplibregl-touch-zoom-rotate`)}disable(){this._touchZoom.disable(),this._touchRotate.disable(),this._tapDragZoom.disable(),this._el.classList.remove(`maplibregl-touch-zoom-rotate`)}isEnabled(){return this._touchZoom.isEnabled()&&(this._rotationDisabled||this._touchRotate.isEnabled())&&this._tapDragZoom.isEnabled()}isActive(){return this._touchZoom.isActive()||this._touchRotate.isActive()||this._tapDragZoom.isActive()}setZoomRate(e){this._touchZoom.setZoomRate(e),this._tapDragZoom.setZoomRate(e)}setZoomThreshold(e){this._touchZoom.setZoomThreshold(e)}disableRotation(){this._rotationDisabled=!0,this._touchRotate.disable()}enableRotation(){this._rotationDisabled=!1,this._touchZoom.isEnabled()&&this._touchRotate.enable()}},NP=class{constructor(e,t){this._bypassKey=navigator.userAgent.includes(`Mac`)?`metaKey`:`ctrlKey`,this._map=e,this._options=t,this._enabled=!1}isActive(){return!1}reset(){}_setupUI(){if(this._container)return;let e=this._map.getCanvasContainer();e.classList.add(`maplibregl-cooperative-gestures`),this._container=Hn.create(`div`,`maplibregl-cooperative-gesture-screen`,e);let t=this._map._getUIString(`CooperativeGesturesHandler.WindowsHelpText`);this._bypassKey===`metaKey`&&(t=this._map._getUIString(`CooperativeGesturesHandler.MacHelpText`));let n=this._map._getUIString(`CooperativeGesturesHandler.MobileHelpText`),r=document.createElement(`div`);r.className=`maplibregl-desktop-message`,r.textContent=t,this._container.appendChild(r);let i=document.createElement(`div`);i.className=`maplibregl-mobile-message`,i.textContent=n,this._container.appendChild(i),this._container.setAttribute(`aria-hidden`,`true`)}_destroyUI(){this._container&&(this._container.remove(),this._map.getCanvasContainer().classList.remove(`maplibregl-cooperative-gestures`)),delete this._container}enable(){this._setupUI(),this._enabled=!0}disable(){this._enabled=!1,this._destroyUI()}isEnabled(){return this._enabled}isBypassed(e){return e[this._bypassKey]}notifyGestureBlocked(e,t){this._enabled&&(this._map.fire(new cr(`cooperativegestureprevented`,{gestureType:e,originalEvent:t})),this._container.classList.add(`maplibregl-show`),setTimeout(()=>{this._container.classList.remove(`maplibregl-show`)},100))}},PP=class{constructor(e){this._camera=e}get transform(){return this._camera._requestedCameraState||this._camera.transform}get center(){return{lng:this.transform.center.lng,lat:this.transform.center.lat}}get zoom(){return this.transform.zoom}get pitch(){return this.transform.pitch}get bearing(){return this.transform.bearing}unproject(e){return this.transform.screenPointToLocation(k.convert(e),this._camera.terrain)}},FP=e=>e.zoom||e.drag||e.roll||e.pitch||e.rotate,IP=class extends or{};function LP(e){return e.panDelta?.mag()||e.zoomDelta||e.bearingDelta||e.pitchDelta||e.rollDelta}var RP=class{get _ownerDocument(){return this._el?.ownerDocument||document}get _ownerWindow(){return this._el?.ownerDocument?.defaultView||window}constructor(e,t,n){this._terrainGesture={inFlight:!1,anchorElevation:null,anchorCenterElevation:null},this.handleWindowEvent=e=>{this.handleEvent(e,`${e.type}Window`)},this.handleEvent=(e,t)=>{if(e.type===`blur`){this.stop(!0);return}this._updatingCamera=!0;let n=e.type===`renderFrame`?void 0:e,r={needsRenderFrame:!1},i={},a={};for(let{handlerName:o,handler:s,allowed:c}of this._handlers){if(!s.isEnabled())continue;let l;if(this._blockedByActive(a,c,o))s.reset();else if(s[t||e.type]){if(wn(e,t||e.type)){let n=Hn.mousePos(this._map.getCanvas(),e);l=s[t||e.type](e,n)}else if(Cn(e,t||e.type)){let n=e.touches,r=this._getMapTouches(n),i=Hn.touchPos(this._map.getCanvas(),r);l=s[t||e.type](e,i,r)}else Tn(t||e.type)||(l=s[t||e.type](e));this.mergeHandlerResult(r,i,l,o,n),l?.needsRenderFrame&&this._triggerRenderFrame()}(l||s.isActive())&&(a[o]=s)}let o={};for(let e in this._previousActiveHandlers)a[e]||(o[e]=n);this._previousActiveHandlers=a,(Object.keys(o).length||LP(r))&&(this._changes.push([r,i,o]),this._triggerRenderFrame()),(Object.keys(a).length||LP(r))&&this._camera.stop(!0),this._updatingCamera=!1;let{cameraAnimation:s}=r;s&&(this._inertia.clear(),this._fireEvents({},{},!0),this._changes=[],s(this._map))},this._map=e,this._camera=t,this._transformProvider=new PP(this._camera),this._el=this._map.getCanvasContainer(),this._handlers=[],this._handlersById={},this._changes=[],this._inertia=new KN(e),this._bearingSnap=n.bearingSnap,this._previousActiveHandlers={},this._eventsInProgress={},this._addDefaultHandlers(n);let r=this._el;this._listeners=[[r,`touchstart`,{passive:!0}],[r,`touchmove`,{passive:!1}],[r,`touchend`,void 0],[r,`touchcancel`,void 0],[r,`mousedown`,void 0],[r,`mousemove`,void 0],[r,`mouseup`,void 0],[this._ownerDocument,`mousemove`,{capture:!0}],[this._ownerDocument,`mouseup`,void 0],[r,`mouseover`,void 0],[r,`mouseout`,void 0],[r,`dblclick`,void 0],[r,`click`,void 0],[r,`keydown`,{capture:!1}],[r,`keyup`,void 0],[r,`wheel`,{passive:!1}],[r,`contextmenu`,void 0],[this._ownerWindow,`blur`,void 0]];for(let[e,t,n]of this._listeners)e.addEventListener(t,e===this._ownerDocument?this.handleWindowEvent:this.handleEvent,n)}destroy(){for(let[e,t,n]of this._listeners)e.removeEventListener(t,e===this._ownerDocument?this.handleWindowEvent:this.handleEvent,n)}_addDefaultHandlers(e){let t=this._map,n=t.getCanvasContainer();this._add(`mapEvent`,new YN(t,e));let r=t.boxZoom=new ZN(t,e,this._transformProvider);this._add(`boxZoom`,r),e.interactive&&e.boxZoom&&r.enable();let i=t.cooperativeGestures=new NP(t,e.cooperativeGestures);this._add(`cooperativeGestures`,i),e.cooperativeGestures&&i.enable();let a=new nP(t,this._transformProvider),o=new OP(t,this._transformProvider);t.doubleClickZoom=new DP(o,a),this._add(`tapZoom`,a),this._add(`clickZoom`,o),e.interactive&&e.doubleClickZoom&&t.doubleClickZoom.enable();let s=new kP;this._add(`tapDragZoom`,s);let c=t.touchPitch=new xP(t);this._add(`touchPitch`,c),e.interactive&&e.touchPitch&&t.touchPitch.enable(e.touchPitch);let l=()=>this._camera.transform.centerPoint,u=lP(e,l),d=uP(e),f=dP(e,l);t.dragRotate=new jP(e,u,d,f),this._add(`mouseRotate`,u,[`mousePitch`]),this._add(`mousePitch`,d,[`mouseRotate`,`mouseRoll`]),this._add(`mouseRoll`,f,[`mousePitch`]),e.interactive&&e.dragRotate&&t.dragRotate.enable();let p=cP(e),m=new fP(e,t);t.dragPan=new AP(n,p,m),this._add(`mousePan`,p),this._add(`touchPan`,m,[`touchZoom`,`touchRotate`]),e.interactive&&e.dragPan&&t.dragPan.enable(e.dragPan);let h=new yP,g=new _P;t.touchZoomRotate=new MP(n,g,h,s),this._add(`touchRotate`,h,[`touchPan`,`touchZoom`]),this._add(`touchZoom`,g,[`touchPan`,`touchRotate`]),e.interactive&&e.touchZoomRotate&&t.touchZoomRotate.enable(e.touchZoomRotate),this._add(`blockableMapEvent`,new XN(t,e),[`touchPan`]);let _=t.scrollZoom=new EP(t,()=>this._triggerRenderFrame(),this._transformProvider);this._add(`scrollZoom`,_,[`mousePan`]),e.interactive&&e.scrollZoom&&t.scrollZoom.enable(e.scrollZoom);let v=t.keyboard=new CP(t,this._transformProvider);this._add(`keyboard`,v),e.interactive&&e.keyboard&&t.keyboard.enable()}_add(e,t,n){this._handlers.push({handlerName:e,handler:t,allowed:n}),this._handlersById[e]=t}stop(e){if(!this._updatingCamera){for(let{handler:e}of this._handlers)e.reset();this._inertia.clear(),this._fireEvents({},{},e),this._changes=[]}}isActive(){for(let{handler:e}of this._handlers)if(e.isActive())return!0;return!1}isZooming(){return!!this._eventsInProgress.zoom||this._map.scrollZoom.isZooming()}isRotating(){return!!this._eventsInProgress.rotate}isMoving(){return!!FP(this._eventsInProgress)||this.isZooming()}_blockedByActive(e,t,n){for(let r in e)if(r!==n&&!t?.includes(r))return!0;return!1}_getMapTouches(e){let t=[];for(let n of e){let e=n.target;this._el.contains(e)&&t.push(n)}return t}mergeHandlerResult(e,t,n,r,i){if(!n)return;z(e,n);let a={handlerName:r,originalEvent:n.originalEvent||i};n.zoomDelta!==void 0&&(t.zoom=a),n.panDelta!==void 0&&(t.drag=a),n.rollDelta!==void 0&&(t.roll=a),n.pitchDelta!==void 0&&(t.pitch=a),n.bearingDelta!==void 0&&(t.rotate=a)}_applyChanges(){let e={},t={},n={};for(let[r,i,a]of this._changes)r.panDelta&&(e.panDelta=(e.panDelta||new k(0,0))._add(r.panDelta)),r.zoomDelta&&(e.zoomDelta=(e.zoomDelta||0)+r.zoomDelta),r.bearingDelta&&(e.bearingDelta=(e.bearingDelta||0)+r.bearingDelta),r.pitchDelta&&(e.pitchDelta=(e.pitchDelta||0)+r.pitchDelta),r.rollDelta&&(e.rollDelta=(e.rollDelta||0)+r.rollDelta),r.around!==void 0&&(e.around=r.around),r.pinchAround!==void 0&&(e.pinchAround=r.pinchAround),r.noInertia&&(e.noInertia=r.noInertia),z(t,i),z(n,a);this._updateMapTransform(e,t,n),this._changes=[]}_updateMapTransform(e,t,n){let r=this._map.terrain;if(!LP(e)){this._fireEvents(t,n,!0);return}let i=this._camera.getTransformForUpdate();this._camera.stop(!0);let{panDelta:a,zoomDelta:o,bearingDelta:s,pitchDelta:c,rollDelta:l}=e;o>0&&this._terrainGesture.inFlight&&this._camera.moveCenterOntoTerrain(i,o);let{around:u,aroundOnSurface:d}=this._resolveAround(e,r,i),f=r?this._terrainGestureElevation(r,u,d,i,t):void 0,p={panDelta:a,zoomDelta:o,rollDelta:l,pitchDelta:c,bearingDelta:s,around:u,aroundElevation:f};this._camera.cameraHelper.useGlobeControls&&!i.isPointOnMapSurface(u)&&(u=i.centerPoint);let m=this._computePreZoomAroundLoc(i,u,a,f);this._handleMapControls({terrain:r,tr:i,deltasForHelper:p,preZoomAroundLoc:m,combinedEventsInProgress:t,panDelta:a}),this._camera.applyUpdatedTransform(i),this._map._update(),e.noInertia||this._inertia.record(e),this._fireEvents(t,n,!0)}_resolveAround(e,t,n){let r=e.pinchAround===void 0?e.around:e.pinchAround;return r||=this._camera.transform.centerPoint,t&&!n.isPointOnMapSurface(r)?{around:n.centerPoint,aroundOnSurface:!1}:{around:r,aroundOnSurface:!0}}_terrainGestureElevation(e,t,n,r,i){if(!n)return;if(this._terrainGesture.anchorCenterElevation!==r.elevation&&(i.drag||i.zoom)){let n=r.screenTerrainPointToMercatorCoordinate(t,e);this._terrainGesture.anchorElevation=n?n.z:void 0,this._terrainGesture.anchorCenterElevation=r.elevation}let a=this._terrainGesture.anchorElevation;if(a!=null&&!(t.distSqr(r.centerPoint)<.01)&&!(a-r.elevation>=.9*(r.getCameraAltitude()-r.elevation)))return a}_computePreZoomAroundLoc(e,t,n,r){if(t.distSqr(e.centerPoint)<.01)return e.center;let i=n?t.sub(n):t;return r===void 0?e.screenPointToLocation(i):e.screenPointToLocationAtElevation(i,r)}_handleMapControls({terrain:e,tr:t,deltasForHelper:n,preZoomAroundLoc:r,combinedEventsInProgress:i,panDelta:a}){let o=this._camera.cameraHelper;o.handleMapControlsRollPitchBearingZoom(n,t),!e&&!o.useGlobeControls&&!t.isPointOnMapSurface(n.around)?a&&t.setCenter(t.screenPointToLocation(t.centerPoint.sub(a))):e?this._terrainGesture.inFlight?!o.useGlobeControls&&n.aroundElevation===void 0&&i.drag&&a?t.setCenter(t.screenPointToLocation(t.centerPoint.sub(a))):o.handleMapControlsPan(n,t,r):(this._terrainGesture.inFlight=!0,this._camera.holdElevation(t,`gesture`),o.handleMapControlsPan(n,t,r)):o.handleMapControlsPan(n,t,r)}_fireEvents(e,t,n){let r=FP(this._eventsInProgress),i=FP(e),a={};for(let t in e){let{originalEvent:n}=e[t];this._eventsInProgress[t]||(a[`${t}start`]=n),this._eventsInProgress[t]=e[t]}!r&&i&&this._fireEvent(`movestart`,i.originalEvent);for(let e in a)this._fireEvent(e,a[e]);i&&this._fireEvent(`move`,i.originalEvent);for(let t in e){let{originalEvent:n}=e[t];this._fireEvent(t,n)}let o={},s;for(let e in this._eventsInProgress){let{handlerName:n,originalEvent:r}=this._eventsInProgress[e];this._handlersById[n].isActive()||(delete this._eventsInProgress[e],s=t[n]||r,o[`${e}end`]=s)}for(let e in o)this._fireEvent(e,o[e]);let c=FP(this._eventsInProgress),l=(r||i)&&!c;if(l&&this._terrainGesture.inFlight){let e=this._camera.releaseElevation();this._terrainGesture={inFlight:!1,anchorElevation:null,anchorCenterElevation:null},this._camera.applyTransformChange(t=>{this._map.getCenterClampedToGround()&&(this._map.terrain?this._camera.putCenterBackOnTerrain(t,this._map.terrain,e):t.setElevation(0))})}if(n&&l){this._updatingCamera=!0;let e=this._inertia._onMoveEnd(this._map.dragPan._inertiaOptions),t=e=>e!==0&&-this._bearingSnap{delete this._frameId,this.handleEvent(new IP(`renderFrame`,{timeStamp:e})),this._applyChanges()})}_triggerRenderFrame(){this._frameId===void 0&&(this._frameId=this._requestFrame())}},zP=class{constructor(e,t,n){this.holder=e,this.lift=null,this._terrainChanged=!1,this._dem=t?`awaiting`:`loaded`,this.keepsTerrainBelowMaxZoomForCenter=n}get tookDem(){return this._dem===`taken`}noteTerrainChange(){this._terrainChanged=!0}take(e,t){let n=!1;if(this._terrainChanged&&(this._terrainChanged=!1,t.hasElevationForLngLat(e.center,e)||(e.setElevation(0),this._dem=`awaiting`,n=!0)),this._dem!==`awaiting`)return n;let r=t.getDrawnElevationForLngLat(e.center,!0);if(r!==void 0)return e.setElevation(r),this._dem=`taken`,!0;let i=t.getDrawnElevationForLngLat(e.center);return i===void 0||i===e.elevation?n:(e.setElevation(i),!0)}},BP=.01,VP=class extends sr{constructor(e){super(),this._elevationHold=null,this._renderFrameCallback=()=>{let e=Math.min((Fn()-this._easeStart)/this._easeOptions.duration,1);this._onEaseFrame(this._easeOptions.easing(e)),e<1&&this._easeFrameId?this._easeFrameId=this._requestRenderFrame(this._renderFrameCallback):this.stop()},this.transform=OO(),this.cameraHelper=new FO,e.minZoom!==void 0&&this.transform.setMinZoom(e.minZoom),e.maxZoom!==void 0&&this.transform.setMaxZoom(e.maxZoom),e.minPitch!==void 0&&this.transform.setMinPitch(e.minPitch),e.maxPitch!==void 0&&this.transform.setMaxPitch(e.maxPitch),e.renderWorldCopies!==void 0&&this.transform.setRenderWorldCopies(e.renderWorldCopies),e.transformConstrain!==null&&this.transform.setConstrainOverride(e.transformConstrain),this._moving=!1,this._zooming=!1,this._bearingSnap=e.bearingSnap,this._zoomSnap=e.zoomSnap,this._requestRenderFrame=e.requestRenderFrame,this._cancelRenderFrame=e.cancelRenderFrame,this.terrain=e.terrain,this._centerClampedToGround=e.centerClampedToGround??!0,this.transformCameraUpdate=e.transformCameraUpdate??null,this._stopHandlers=e.stopHandlers??(()=>{}),this.on(`moveend`,()=>{delete this._requestedCameraState})}setTerrain(e){this.terrain=e,e&&this._elevationHold?.noteTerrainChange(),this.applyTerrainChange()}migrateProjection(e,t){if(e.apply(this.transform,!0),this.transform=e,this.cameraHelper=t,this._requestedCameraState){let t=e.clone();t.apply(this._requestedCameraState,!0),this._requestedCameraState=t}}getCenter(){return new X(this.transform.center.lng,this.transform.center.lat)}setCenter(e,t){return this.jumpTo({center:e},t)}getCenterElevation(){return this.transform.elevation}setCenterElevation(e,t){return this.jumpTo({elevation:e},t),this}getCenterClampedToGround(){return this._centerClampedToGround}setCenterClampedToGround(e){this._centerClampedToGround=e}panBy(e,t,n){return e=k.convert(e).mult(-1),this.panTo(this.transform.center,z({offset:e},t),n)}panTo(e,t,n){return this.easeTo(z({center:e},t),n)}getZoom(){return this.transform.zoom}setZoom(e,t){return this.jumpTo({zoom:e},t),this}zoomTo(e,t,n){return this.easeTo(z({zoom:e},t),n)}zoomIn(e,t){return this.zoomTo(qt(this.getZoom()+1,this._zoomSnap),e,t),this}zoomOut(e,t){return this.zoomTo(qt(this.getZoom()-1,this._zoomSnap),e,t),this}getVerticalFieldOfView(){return this.transform.fov}setVerticalFieldOfView(e,t){return e!=this.transform.fov&&(this.applyTransformChange(t=>t.setFov(e)),this.fire(new V(`movestart`,t)).fire(new V(`move`,t)).fire(new V(`moveend`,t))),this}getBearing(){return this.transform.bearing}setZoomSnap(e){return this._zoomSnap=e,this}getZoomSnap(){return this._zoomSnap}setBearing(e,t){return this.jumpTo({bearing:e},t),this}getPadding(){return this.transform.padding}setPadding(e,t){return this.jumpTo({padding:e},t),this}rotateTo(e,t,n){return this.easeTo(z({bearing:e},t),n)}resetNorth(e,t){return this.rotateTo(0,z({duration:1e3},e),t),this}resetNorthPitch(e,t){return this.easeTo(z({bearing:0,pitch:0,roll:0,duration:1e3},e),t),this}snapToNorth(e,t){return Math.abs(this.getBearing()){m.easeFunc(r),this.terrain&&!e.freezeElevation&&this._updateElevation(r,n),this.applyUpdatedTransform(n),this._fireMoveEvents(t)},n=>{this._afterEase(t,n,e.freezeElevation)},e),this}_prepareEase(e,t,n={},r){this._moving=!0,this.terrain&&r&&(this._prepareElevation(r.center,r.tr),r.freeze&&this.holdElevation(r.tr,`animation`)),!t&&!n.moving&&this.fire(new V(`movestart`,e)),this._zooming&&!n.zooming&&this.fire(new V(`zoomstart`,e)),this._rotating&&!n.rotating&&this.fire(new V(`rotatestart`,e)),this._pitching&&!n.pitching&&this.fire(new V(`pitchstart`,e)),this._rolling&&!n.rolling&&this.fire(new V(`rollstart`,e))}_prepareElevation(e,t){this._elevationCenter=e,this._elevationStart=t.elevation,this._elevationTarget=this.terrain.getElevationForLngLat(e,t),this.elevationFreeze=!0}_updateElevation(e,t){(this._elevationStart===void 0||this._elevationCenter===void 0)&&this._prepareElevation(t.center,t),t.setMinElevationForCurrentTile(this.terrain.getMinTileElevationForLngLatZoom(this._elevationCenter,t.tileZoom));let n=this.terrain.getElevationForLngLat(this._elevationCenter,t);if(e<1&&n!==this._elevationTarget){let t=this._elevationTarget-this._elevationStart,r=(n-(t*e+this._elevationStart))/(1-e);this._elevationStart+=e*(t-r),this._elevationTarget=n}this.getCenterClampedToGround()&&t.setElevation(ia.number(this._elevationStart,this._elevationTarget,e))}holdElevation(e,t){this.elevationFreeze=!0;let n=!!this.terrain&&this.getCenterClampedToGround()&&!this.terrain.hasElevationForLngLat(e.center,e),r=this.terrain?this._terrainHeightAboveMaxZoomForCenter(e):void 0;this._elevationHold=new zP(t,n,r!==void 0&&r<=BP)}releaseElevation(){let e=this._elevationHold?.tookDem??!1;return this.elevationFreeze=!1,this._elevationHold=null,e}putCenterBackOnTerrain(e,t,n){if(n&&t.getDrawnElevationForLngLat(e.center,!0)===void 0){e.setElevation(t.getElevationForLngLat(e.center,e));let n=this._raiseCameraByPitchAndZoom(e);n!==e&&e.apply(n,!1)}else e.recalculateZoomAndCenter(t)}_takeLandedElevation(e){return!this._elevationHold||!this.terrain||!this.getCenterClampedToGround()?!1:this._elevationHold.take(e,this.terrain)}applyTerrainChange(){if(this.elevationFreeze){let e=this._requestedCameraState;this._elevationHold?.holder===`gesture`&&e&&this._takeLandedElevation(e)&&this.applyUpdatedTransform(e);return}let e=this.transform;e.setMinElevationForCurrentTile(this.terrain?this.terrain.getMinTileElevationForLngLatZoom(e.center,e.tileZoom):0),this.getCenterClampedToGround()&&e.setElevation(this.terrain?this.terrain.getElevationForLngLat(e.center,e):0)}getTransformForUpdate(){return!this.transformCameraUpdate&&!this.terrain?this.transform:(this._requestedCameraState||=this.transform.clone(),this._requestedCameraState)}_keepCameraAboveTerrain(e){let t=this._elevationHold;if(!this.terrain||!t||e.pitch>=90||!this.getCenterClampedToGround()||e.getClippingPlane())return this._raiseCameraByPitchAndZoom(e);let n=t.holder===`gesture`,r=t.lift&&t.lift.heldElevation+t.lift.height===e.elevation?t.lift:{heldElevation:e.elevation,height:0},i=this._terrainHeightAboveMaxZoomForCenter(e);i!==void 0&&i<=BP&&(t.keepsTerrainBelowMaxZoomForCenter=!0);let a=t.keepsTerrainBelowMaxZoomForCenter&&i!==void 0?i:-1/0,o=n?this._terrainHeightAboveCamera(e):-1/0,s=Math.max(0,Math.max(o,a)+r.height);return s!==r.height&&e.setElevation(r.heldElevation+s),t.lift=s>0?{heldElevation:r.heldElevation,height:s}:null,n?e:this._raiseCameraByPitchAndZoom(e)}_raiseCameraByPitchAndZoom(e){if(!this.terrain&&e.elevation>=0&&e.pitch<=90||e.getClippingPlane())return e;let t=e.getCameraLngLat(),n=this.terrain?this._terrainHeightAboveCamera(e):-e.getCameraAltitude();if(n<=0)return e;let r=e.clone();for(let e=0;e<3&&n>0;e++){let{zoom:e,pitch:i}=r.calculateCameraOptionsFromTo(t,r.getCameraAltitude()+n,r.center,r.elevation);r.setZoom(e),r.setPitch(i),n=this.terrain?this._terrainHeightAboveCamera(r):-r.getCameraAltitude()}return r}_terrainHeightAboveCamera(e){let t=this.terrain.getElevationForLngLat(e.getCameraLngLat(),e)-e.getCameraAltitude(),n=e.getClippingPlane()?null:this.terrain.getCoverageIndex();if(!n)return t;let[r,i,a,o]=e.getCameraFrustum().points;for(let e=0;e<=2;e++){let s=e/2;for(let e=0;e<=2;e++){let c=e/2,l=(1-c)*(1-s),u=c*(1-s),d=c*s,f=(1-c)*s,p=l*r[0]+u*i[0]+d*a[0]+f*o[0],m=l*r[1]+u*i[1]+d*a[1]+f*o[1],h=l*r[2]+u*i[2]+d*a[2]+f*o[2],g=wO(n,this.terrain.exaggeration,p,m);g.covered&&(t=Math.max(t,g.elevation-h))}}return t}_terrainHeightAboveMaxZoomForCenter(e){let t=this.terrain.getCoverageIndex();if(!t)return;let n=Ym.fromLngLat(e.getCameraLngLat()),r=Ym.fromLngLat(e.center),i=Gt(e.zoom-e.maxZoom),a=wO(t,this.terrain.exaggeration,Nt(n.x,r.x,i),Nt(n.y,r.y,i));return a.covered?a.elevation-Nt(e.getCameraAltitude(),e.elevation,i):void 0}moveCenterOntoTerrain(e,t){if(!this.terrain||!this.getCenterClampedToGround()||e.getClippingPlane())return;let{center:n,elevation:r,zoom:i}=e;e.recalculateZoomAndCenter(this.terrain),(!(e.zoom>i-t&&e.zoom=1)&&(e.setZoom(i),e.setCenter(n),e.setElevation(r))}applyUpdatedTransform(e){this._takeLandedElevation(e);let t=this._keepCameraAboveTerrain(e);if(!this.transformCameraUpdate){t!==this.transform&&this.transform.apply(t,!1);return}let n=t.clone(),{center:r,zoom:i,roll:a,pitch:o,bearing:s,elevation:c}=this.transformCameraUpdate(n);r&&n.setCenter(r),c!==void 0&&n.setElevation(c),i!==void 0&&n.setZoom(i),a!==void 0&&n.setRoll(a),o!==void 0&&n.setPitch(o),s!==void 0&&n.setBearing(s),this.transform.apply(c===void 0?n:this._raiseCameraByPitchAndZoom(n),!1)}applyTransformChange(e){let t=this._requestedCameraState!==void 0,n=this.getTransformForUpdate();e(n),this.applyUpdatedTransform(n),t||delete this._requestedCameraState}_fireMoveEvents(e){this.fire(new V(`move`,e)),this._zooming&&this.fire(new V(`zoom`,e)),this._rotating&&this.fire(new V(`rotate`,e)),this._pitching&&this.fire(new V(`pitch`,e)),this._rolling&&this.fire(new V(`roll`,e))}_afterEase(e,t,n=!1){this._takeLandedElevation(this.transform);let r=this.releaseElevation();if(this.terrain&&n&&this.getCenterClampedToGround()&&this.putCenterBackOnTerrain(this.transform,this.terrain,r),this._easeId&&t&&this._easeId===t)return;delete this._easeId;let i=this._zooming,a=this._rotating,o=this._pitching,s=this._rolling;this._moving=!1,this._zooming=!1,this._rotating=!1,this._pitching=!1,this._rolling=!1,this._padding=!1,i&&this.fire(new V(`zoomend`,e)),a&&this.fire(new V(`rotateend`,e)),o&&this.fire(new V(`pitchend`,e)),s&&this.fire(new V(`rollend`,e)),this.fire(new V(`moveend`,e))}flyTo(e,t){if(!e.essential&&Nn.prefersReducedMotion)return this.easeTo(e,t);this.stop(),e=z({offset:[0,0],speed:1.2,curve:1.42,easing:Rt},e),e.zoom!==void 0&&this._zoomSnap&&(e.zoom=qt(e.zoom,this._zoomSnap));let n=this.getTransformForUpdate(),r=n.bearing,i=n.pitch,a=n.roll,o=n.padding,s=e.bearing===void 0?r:this._normalizeBearing(e.bearing,r),c=e.pitch===void 0?i:+e.pitch,l=e.roll===void 0?a:this._normalizeBearing(e.roll,a),u=e.padding===void 0?n.padding:e.padding,d=k.convert(e.offset),f=n.centerPoint.add(d),p=n.screenPointToLocation(f),m=this.cameraHelper.handleFlyTo(n,{bearing:s,pitch:c,roll:l,padding:u,locationAtOffset:p,offsetAsPoint:d,center:e.center,minZoom:e.minZoom,zoom:e.zoom}),h=e.curve,g=Math.max(n.width,n.height),_=g/m.scaleOfZoom,v=m.pixelPathLength,y=g/m.scaleOfMinZoom;h=Math.min(h,Math.sqrt(y/v*2));let b=h*h;function x(e){let t=(_*_-g*g+(e?-1:1)*b*b*v*v)/(2*(e?_:g)*b*v);return Math.log(Math.sqrt(t*t+1)-t)}function S(e){return(Math.exp(e)-Math.exp(-e))/2}function C(e){return(Math.exp(e)+Math.exp(-e))/2}function w(e){return S(e)/C(e)}let T=x(!1),E=function(e){return C(T)/C(T+h*e)},D=function(e){return g*((C(T)*w(T+h*e)-S(T))/b)/v},O=(x(!0)-T)/h;if(Math.abs(v)<2e-6||!isFinite(O)){if(Math.abs(g-_)<1e-6)return this.easeTo(e,t);let n=_0,E=e=>Math.exp(n*h*e)}if(e.duration!==void 0)e.duration=+e.duration;else{let t=e.screenSpeed===void 0?+e.speed:+e.screenSpeed/h;e.duration=1e3*O/t}return e.maxDuration&&e.duration>e.maxDuration&&(e.duration=0),this._zooming=!0,this._rotating=r!==s,this._pitching=c!==i,this._rolling=l!==a,this._padding=!n.isPaddingEqual(u),this._prepareEase(t,!1,{},{tr:n,center:m.targetCenter,freeze:e.freezeElevation}),this._ease(p=>{let h=p*O,g=1/E(h),_=D(h);this._rotating&&n.setBearing(ia.number(r,s,p)),this._pitching&&n.setPitch(ia.number(i,c,p)),this._rolling&&n.setRoll(ia.number(a,l,p)),this._padding&&(n.interpolatePadding(o,u,p),f=n.centerPoint.add(d)),m.easeFunc(p,g,_,f),this.terrain&&!e.freezeElevation&&this._updateElevation(p,n),this.applyUpdatedTransform(n),this._fireMoveEvents(t)},()=>{this._afterEase(t,void 0,e.freezeElevation)},e),this}isEasing(){return!!this._easeFrameId}stop(e){return this._stop(e)}_stop(e,t){if(this._easeFrameId&&(this._cancelRenderFrame(this._easeFrameId),delete this._easeFrameId,delete this._onEaseFrame),this._onEaseEnd){let e=this._onEaseEnd;delete this._onEaseEnd,e.call(this,t)}return e||this._stopHandlers(),this}_ease(e,t,n){n.animate===!1||n.duration===0?(e(1),t()):(this._easeStart=Fn(),this._easeOptions=n,this._onEaseFrame=e,this._onEaseEnd=t,this._easeFrameId=this._requestRenderFrame(this._renderFrameCallback))}_normalizeBearing(e,t){e=zt(e,-180,180);let n=Math.abs(e-t);return Math.abs(e-360-t)MapLibre`},UP=class{constructor(e=HP){this._toggleAttribution=()=>{this._container.classList.contains(`maplibregl-compact`)&&(this._container.classList.contains(`maplibregl-compact-show`)?(this._container.setAttribute(`open`,``),this._container.classList.remove(`maplibregl-compact-show`)):(this._container.classList.add(`maplibregl-compact-show`),this._container.removeAttribute(`open`)))},this._updateData=e=>{e&&(e.type===`terrain`||e.dataType===`style`||e.dataType===`source`&&(e.sourceDataType===`metadata`||e.sourceDataType===`visibility`))&&this._updateAttributions()},this._updateCompact=()=>{this._map.getCanvasContainer().offsetWidth<=640||this._compact?this._compact===!1?this._container.setAttribute(`open`,``):!this._container.classList.contains(`maplibregl-compact`)&&!this._container.classList.contains(`maplibregl-attrib-empty`)&&(this._container.setAttribute(`open`,``),this._container.classList.add(`maplibregl-compact`,`maplibregl-compact-show`)):(this._container.setAttribute(`open`,``),this._container.classList.contains(`maplibregl-compact`)&&this._container.classList.remove(`maplibregl-compact`,`maplibregl-compact-show`))},this._updateCompactMinimize=()=>{this._container.classList.contains(`maplibregl-compact`)&&this._container.classList.contains(`maplibregl-compact-show`)&&this._container.classList.remove(`maplibregl-compact-show`)},this.options=e}getDefaultPosition(){return`bottom-right`}onAdd(e){return this._map=e,this._compact=this.options.compact,this._container=Hn.create(`details`,`maplibregl-ctrl maplibregl-ctrl-attrib`),this._compactButton=Hn.create(`summary`,`maplibregl-ctrl-attrib-button`,this._container),this._compactButton.addEventListener(`click`,this._toggleAttribution),this._setElementTitle(this._compactButton,`ToggleAttribution`),this._innerContainer=Hn.create(`div`,`maplibregl-ctrl-attrib-inner`,this._container),this._updateAttributions(),this._updateCompact(),this._map.on(`styledata`,this._updateData),this._map.on(`sourcedata`,this._updateData),this._map.on(`terrain`,this._updateData),this._map.on(`resize`,this._updateCompact),this._map.on(`drag`,this._updateCompactMinimize),this._container}onRemove(){this._container.remove(),this._map.off(`styledata`,this._updateData),this._map.off(`sourcedata`,this._updateData),this._map.off(`terrain`,this._updateData),this._map.off(`resize`,this._updateCompact),this._map.off(`drag`,this._updateCompactMinimize),this._map=void 0,this._compact=void 0,this._attribHTML=void 0}_setElementTitle(e,t){let n=this._map._getUIString(`AttributionControl.${t}`);e.title=n,e.setAttribute(`aria-label`,n)}_updateAttributions(){if(!this._map.style)return;let e=[];if(this.options.customAttribution&&(Array.isArray(this.options.customAttribution)?e=e.concat(this.options.customAttribution.map(e=>typeof e==`string`?e:``)):typeof this.options.customAttribution==`string`&&e.push(this.options.customAttribution)),this._map.style.stylesheet){let e=this._map.style.stylesheet;this.styleOwner=e.owner,this.styleId=e.id}let t=this._map.style.tileManagers;for(let n in t){let r=t[n];if(r.used||r.usedForTerrain){let t=r.getSource();t.attribution&&!e.includes(t.attribution)&&e.push(t.attribution)}}e=e.filter(e=>String(e).trim()),e.sort((e,t)=>e.length-t.length),e=e.filter((t,n)=>{for(let r=n+1;r{let e=this._container.children;if(e.length){let t=e[0];this._map.getCanvasContainer().offsetWidth<=640||this._compact?this._compact!==!1&&t.classList.add(`maplibregl-compact`):t.classList.remove(`maplibregl-compact`)}},this.options=e}getDefaultPosition(){return`bottom-left`}onAdd(e){this._map=e,this._compact=this.options?.compact,this._container=Hn.create(`div`,`maplibregl-ctrl`);let t=Hn.create(`a`,`maplibregl-ctrl-logo`);return t.target=`_blank`,t.rel=`noopener nofollow`,t.href=`https://maplibre.org/`,t.setAttribute(`aria-label`,this._map._getUIString(`LogoControl.Title`)),t.setAttribute(`rel`,`noopener nofollow`),this._container.appendChild(t),this._container.style.display=`block`,this._map.on(`resize`,this._updateCompact),this._updateCompact(),this._container}onRemove(){this._container.remove(),this._map.off(`resize`,this._updateCompact),this._map=void 0,this._compact=void 0}},GP=class{constructor(){this._queue=[],this._id=0,this._cleared=!1,this._currentlyRunning=!1}add(e){let t=++this._id;return this._queue.push({callback:e,id:t,cancelled:!1}),t}remove(e){let t=this._currentlyRunning,n=t?this._queue.concat(t):this._queue;for(let t of n)if(t.id===e){t.cancelled=!0;return}}run(e=0){if(this._currentlyRunning)throw Error(`Attempting to run(), but is already running.`);let t=this._currentlyRunning=this._queue;this._queue=[];let n=!1,r;for(let i of t)if(!i.cancelled){try{i.callback(e)}catch(e){n||(n=!0,r=e)}if(this._cleared)break}if(this._cleared=!1,this._currentlyRunning=!1,n)throw r}clear(){this._currentlyRunning&&(this._cleared=!0),this._queue=[]}},KP=ru([{name:`a_pos3d`,type:`Int16`,components:3}]),qP=class extends sr{constructor(e){super(),this._lastTilesetChange=Fn(),this.tileManager=e,this._tiles={},this._renderableTilesKeys=[],this._sourceTileCache={},this.minzoom=0,this.maxzoom=22,this.deltaZoom=1,this.tileSize=e._source.tileSize*2**this.deltaZoom,e.usedForTerrain=!0,e.tileSize=this.tileSize}destruct(){this.tileManager.usedForTerrain=!1,this.tileManager.tileSize=null,this.releaseAllRTT()}getSource(){return this.tileManager._source}update(e,t){this.tileManager.update(e,t),this._renderableTilesKeys=[];let n={},r=!1;for(let i of PE(e,{tileSize:this.tileSize,minzoom:this.minzoom,maxzoom:this.maxzoom,reparseOverscaled:!1,terrain:t}))n[i.key]=!0,this._renderableTilesKeys.push(i.key),this._tiles[i.key]||(i.terrainRttPosMatrix32f=new Float32Array(16),Ce(i.terrainRttPosMatrix32f,0,8192,8192,0,0,1),this._tiles[i.key]=new gE(i,this.tileSize),this._lastTilesetChange=Fn(),r=!0);for(let e in this._tiles)n[e]||(this._tiles[e].releaseRTT(this.tileManager.map.painter),delete this._tiles[e],r=!0);return r}releaseRTT(e){for(let t in this._tiles){let n=this._tiles[t];(n.tileID.equals(e)||n.tileID.isChildOf(e)||e.isChildOf(n.tileID))&&n.releaseRTT(this.tileManager.map.painter)}}releaseAllRTT(){for(let e in this._tiles)this._tiles[e].releaseRTT(this.tileManager.map.painter)}getRenderableTiles(){return this._renderableTilesKeys.map(e=>this.getTileByID(e))}getTileByID(e){return this._tiles[e]}getTerrainCoords(e,t){return t?this._getTerrainCoordsForTileRanges(e,t):this._getTerrainCoordsForRegularTile(e)}_getTerrainCoordsForRegularTile(e){let t={};for(let n of this._renderableTilesKeys){let r=this._tiles[n].tileID,i=e.clone(),a=xt();if(r.canonical.equals(e.canonical))Ce(a,0,L,L,0,0,1);else if(r.canonical.isChildOf(e.canonical)){let t=r.canonical.z-e.canonical.z,n=r.canonical.x-(r.canonical.x>>t<>t<>t;Ce(a,0,o,o,0,0,1),ge(a,a,[-n*o,-i*o,0])}else if(e.canonical.isChildOf(r.canonical)){let t=e.canonical.z-r.canonical.z,n=e.canonical.x-(e.canonical.x>>t<>t<>t;Ce(a,0,L,L,0,0,1),ge(a,a,[n*o,i*o,0]),P(a,a,[1/2**t,1/2**t,0])}else continue;i.terrainRttPosMatrix32f=new Float32Array(a),t[n]=i}return t}_getTerrainCoordsForTileRanges(e,t){let n={};for(let r of this._renderableTilesKeys){let i=this._tiles[r].tileID;if(!this._isWithinTileRanges(i,t))continue;let a=e.clone(),o=xt();if(i.canonical.z===e.canonical.z){let t=e.canonical.x-i.canonical.x+e.wrap*(1<e.canonical.z){let t=i.canonical.z-e.canonical.z,n=i.canonical.x-(i.canonical.x>>t<>t<>t),s=e.canonical.y-(i.canonical.y>>t),c=L>>t;Ce(o,0,c,c,0,0,1),ge(o,o,[-n*c+a*L,-r*c+s*L,0])}else{let t=e.canonical.z-i.canonical.z,n=e.canonical.x-(e.canonical.x>>t<>t<>t)-i.canonical.x,s=(e.canonical.y>>t)-i.canonical.y,c=L<n.maxzoom&&(r=n.maxzoom),r=n.minzoom&&!i?.dem;)i=this.findTileInCaches(e.scaledTo(r--).key);return i}findTileInCaches(e){let t=this.tileManager.getTileByID(e);return t||(t=this.tileManager._outOfViewCache.getByKey(e),t)}anyTilesAfterTime(e=Fn()){return this._lastTilesetChange>=e}_isWithinTileRanges(e,t){let n=t[e.canonical.z];return!!n&&(e.wrap>n.minWrap||e.wrap=n.minTileXWrapped&&e.canonical.x<=n.maxTileXWrapped&&e.canonical.y>=n.minTileY&&e.canonical.y<=n.maxTileY)}},JP=class{constructor(e,t,n,r=`auto`){this._meshCache={},this.painter=e,this.tileManager=new qP(t),this.options=n,this.exaggeration=typeof n.exaggeration==`number`?n.exaggeration:1,this._terrainSkirtLength=r,this.qualityFactor=2,this.meshSize=128,this._demMatrixCache=new Map,this.coverage=new CO(this.tileManager,this.exaggeration)}destroy(){this._fbo&&=(this._fbo.destroy(),null),this._heightMapFbo&&=(this._heightMapFbo.destroy(),null),this._fboDepthTexture&&=(this._fboDepthTexture.destroy(),null),this._emptyDemTexture&&=(this._emptyDemTexture.destroy(),null),this._emptyDepthTexture&&=(this._emptyDepthTexture.destroy(),null);for(let e in this._meshCache)this._meshCache[e].destroy();this._meshCache={},this.tileManager.destruct()}getDEMElevation(e,t,n,r=L){let i=e.normalizeCoordinates(t,n,r);if(!i)return 0;let a=this.coverage.getSampler(i.tileID);return a?a(i.x,i.y,r):0}getElevationForLngLatZoom(e,t){if(!Lb(t,e.wrap()))return 0;let{tileID:n,mercatorX:r,mercatorY:i}=this._getOverscaledTileIDFromLngLatZoom(e,t);return this.getElevation(n,r%L,i%L,L)}getElevationForLngLat(e,t){let n=this.getDrawnElevationForLngLat(e);return n===void 0?this.getElevationForLngLatZoom(e,this._getFallbackZoom(t)):n}getDrawnElevationForLngLat(e,t=!1){return this.coverage.sample(e,t)}hasElevationForLngLat(e,t){if(this.getDrawnElevationForLngLat(e)!==void 0)return!0;let n=this._getFallbackZoom(t);if(!Lb(n,e.wrap()))return!1;let{tileID:r}=this._getOverscaledTileIDFromLngLatZoom(e,n);return!!this.tileManager.getSourceTile(r,!0)?.dem}_getFallbackZoom(e){return Math.min(e.tileZoom,this.tileManager.maxzoom)}getElevation(e,t,n,r=L){return this.getDEMElevation(e,t,n,r)*this.exaggeration}resetElevationCache(){this.coverage.reset()}getCoverageIndex(){return this.coverage.getIndex()}_getDEMTileMatrix(e,t){let n=`${t.tileID.key}/${e.key}`,r=this._demMatrixCache.get(n);if(r)return r;let i=e.canonical.z-t.tileID.canonical.z,a=e.canonical.x-(e.canonical.x>>i<>i<e.key).sort().join(),this._revision=t,this._zoom=n,this._visibleLayerIds=r}difference(e){return this._revision===e?._revision?this._visibleLayerIds===e._visibleLayerIds?this._tileKeys===e._tileKeys?this._zoom===e._zoom?`none`:`zoom`:`sourceTiles`:`visibleLayers`:`revision`}},ZP={background:!0,fill:!0,line:!0,raster:!0,hillshade:!0,"color-relief":!0};function QP(e){return Ty(e)?`custom-layer:${e.id}`:e.source}function $P(e){return Ty(e)?e.implementation.renderToTerrainTile!==void 0:ZP[e.type]===!0}var eF=class{constructor(e,t){this.needsFollowUpFrame=!1,this.painter=e,this.terrain=t,this.rttSize=t.tileManager.tileSize*t.qualityFactor}getTexture(e){return e.getRTT(this._stacks.length-1).texture}prepareForRender(e,t,n){let r=t!==this._lastPrepareZoom;this._lastPrepareZoom=t,this._stacks=[],this._prevRenderedToTexture=!1,this._rttTiles=[],this._renderableTiles=this.terrain.tileManager.getRenderableTiles(),this._renderableLayerIds=e._order.filter(n=>!e._layers[n].isHidden(t));let i=this._renderableLayerIds.join(),a=new Set;for(let t of this._renderableLayerIds){let n=e._layers[t],r=n.source;r&&ZP[n.type]&&a.add(r)}this._coordsAscending={},this._rttFingerprints={};for(let n of a){let r=e.tileManagers[n];if(!r)continue;this._coordsAscending[n]={};let a=this._coordsAscending[n],o=r.getSource(),s=o instanceof vx?o.terrainTileRanges:null;for(let e of r.getVisibleCoordinates()){let t=this.terrain.tileManager.getTerrainCoords(e,s);for(let e in t)a[e]||=[],a[e].push(t[e])}this._rttFingerprints[n]={};let c=this._rttFingerprints[n],l=r.getState().revision;for(let e in a)c[e]=new XP(a[e],l,t,i)}for(let n of this._renderableLayerIds){let r=e._layers[n];if(!Ty(r)||!$P(r))continue;let a=r.implementation.terrainTileRevision??0,o={};for(let e of this._renderableTiles)o[e.tileID.key]=new XP([e.tileID],a,t,i);this._rttFingerprints[QP(r)]=o}this.needsFollowUpFrame=!1;let o=r||n,s=!1;for(let e of this._renderableTiles){let t=this._textureDifference(e);t!==`none`&&(t===`zoom`&&o||t===`visibleLayers`&&r?this.needsFollowUpFrame=!0:t===`zoom`||t===`sourceTiles`?(s?this.needsFollowUpFrame=!0:e.releaseRTT(this.painter),s=!0):e.releaseRTT(this.painter))}}_textureDifference(e){let t=`none`;for(let n in this._rttFingerprints){let r=this._rttFingerprints[n][e.tileID.key];if(!r)continue;let i=r.difference(e.rttFingerprint[n]);YP.indexOf(i)>YP.indexOf(t)&&(t=i)}return t}renderLayer(e,t,n){if(e.isHidden(n.transform.zoom))return!1;let r=$P(e),i=this.painter,a=this._renderableLayerIds[this._renderableLayerIds.length-1]===e.id;if(r&&(this._prevRenderedToTexture||this._stacks.push([]),this._prevRenderedToTexture=!0,this._stacks[this._stacks.length-1].push(e.id),!a))return!0;if(this._prevRenderedToTexture||r&&a){this._prevRenderedToTexture=r;let e=this._stacks.length-1,a=this._stacks[e]||[];n.isRenderingToTexture=!0,IA(i.context.frameUniformBuffer,this.rttSize,this.rttSize);for(let r of this._renderableTiles){if(this._rttTiles.push(r),r.getRTT(e))continue;let o=r.acquireRTT(i,e,this.rttSize);i.bindRTT(o),i.context.clear({color:Ni.transparent,stencil:0}),n.invalidateTileClippingMasks();for(let e of a){let a=t._layers[e],o=a.source?this._coordsAscending[a.source][r.tileID.key]:[r.tileID];i.context.viewport.set([0,0,this.rttSize,this.rttSize]),n.renderTileClippingMasks(a,o),i.renderLayer(i,t.tileManagers[a.source],a,o,n);let s=QP(a);s&&(r.rttFingerprint[s]=this._rttFingerprints[s][r.tileID.key])}o.texture.generateMipmap()}return n.isRenderingToTexture=!1,IA(i.context.frameUniformBuffer,i.context.gl.drawingBufferWidth,i.context.gl.drawingBufferHeight),wN(this.painter,this.terrain,this._rttTiles,n),this._rttTiles=[],r}return!1}},tF={"AttributionControl.ToggleAttribution":`Toggle attribution`,"AttributionControl.MapFeedback":`Map feedback`,"FullscreenControl.Enter":`Enter fullscreen`,"FullscreenControl.Exit":`Exit fullscreen`,"GeolocateControl.FindMyLocation":`Find my location`,"GeolocateControl.LocationNotAvailable":`Location not available`,"LogoControl.Title":`MapLibre logo`,"Map.Title":`Map`,"Marker.Title":`Map marker`,"NavigationControl.ResetBearing":`Drag to rotate map, click to reset north`,"NavigationControl.ZoomIn":`Zoom in`,"NavigationControl.ZoomOut":`Zoom out`,"Popup.Close":`Close popup`,"ScaleControl.Feet":`ft`,"ScaleControl.Meters":`m`,"ScaleControl.Kilometers":`km`,"ScaleControl.Miles":`mi`,"ScaleControl.NauticalMiles":`nm`,"GlobeControl.Enable":`Enable globe`,"GlobeControl.Disable":`Disable globe`,"TerrainControl.Enable":`Enable terrain`,"TerrainControl.Disable":`Disable terrain`,"CooperativeGesturesHandler.WindowsHelpText":`Use Ctrl + scroll to zoom the map`,"CooperativeGesturesHandler.MacHelpText":`Use ⌘ + scroll to zoom the map`,"CooperativeGesturesHandler.MobileHelpText":`Use two fingers to move the map`},nF=O,rF={hash:!1,interactive:!0,bearingSnap:7,zoomSnap:0,attributionControl:HP,maplibreLogo:!1,refreshExpiredTiles:!0,canvasContextAttributes:{antialias:!1,preserveDrawingBuffer:!1,powerPreference:`high-performance`,failIfMajorPerformanceCaveat:!1,desynchronized:!1,contextType:void 0},scrollZoom:!0,minZoom:-2,maxZoom:22,minPitch:0,maxPitch:60,boxZoom:!0,dragRotate:!0,dragPan:!0,keyboard:!0,doubleClickZoom:!0,touchZoomRotate:!0,touchPitch:!0,cooperativeGestures:!1,trackResize:!0,center:[0,0],elevation:0,zoom:0,bearing:0,pitch:0,roll:0,renderWorldCopies:!0,maxTileCacheSize:null,maxTileCacheZoomLevels:Un.MAX_TILE_CACHE_ZOOM_LEVELS,transformRequest:null,transformCameraUpdate:null,transformConstrain:null,fadeDuration:300,crossSourceCollisions:!0,clickTolerance:3,localIdeographFontFamily:`sans-serif`,pitchWithRotate:!0,rollEnabled:!1,rotateSpeed:.8,pitchSpeed:-.5,reduceMotion:void 0,validateStyle:!0,globalState:void 0,maxCanvasSize:[4096,4096],cancelPendingTileRequestsWhileZooming:!0,centerClampedToGround:!0,terrainSkirtLength:`auto`,zoomLevelsToOverscale:4,anisotropicFilterPitch:20},iF=class extends sr{get _ownerWindow(){return this._container?.ownerDocument?.defaultView||window}constructor(e){super(),this._idleTriggered=!1,this._crossFadingFactor=1,this._renderTaskQueue=new GP,this._controls=[],this._mapId=Ht(),this._styleUrl=null,this._missingStyleImageResolver=null,this._lostContextStyle={style:null,images:null},this._contextLost=e=>{if(e.preventDefault(),this._frameRequest&&=(this._frameRequest.abort(),null),this.painter.destroy(),this._lostContextStyle=this._getStyleAndImages(),!this.style)this.fire(new vr(`webglcontextlost`,{originalEvent:e}));else{for(let e of Object.values(this.style._layers))if(e.type===`custom`&&console.warn(`Custom layer with id '${e.id}' cannot be restored after WebGL context loss. You will need to re-add it manually after context restoration.`),e._listeners)for(let[t]of Object.entries(e._listeners))console.warn(`Custom layer with id '${e.id}' had event listeners for event '${t}' which cannot be restored after WebGL context loss. You will need to re-add them manually after context restoration.`);this.style.off(`error`,this._onStyleError),this.style.destroy(),this.style=null,this.fire(new vr(`webglcontextlost`,{originalEvent:e}))}},this._contextRestored=e=>{if(this._lostContextStyle.style&&this.setStyle(this._lostContextStyle.style,{diff:!1}),this._lostContextStyle.images&&this.style){this.style.imageManager.images=this._lostContextStyle.images;for(let e in this._lostContextStyle.images){let t=this._lostContextStyle.images[e];t.isWebGLImage&&this.style.imageManager.updateImage(e,t,!1)}}this._lostContextStyle={style:null,images:null};try{this._setupPainter()}catch(e){this.fire(new B(e));return}this.resize(),this._update(),this._resizeInternal(),this.fire(new vr(`webglcontextrestored`,{originalEvent:e}))},this._onMapScroll=e=>{if(e.target===this._container)return this._container.scrollTop=0,this._container.scrollLeft=0,!1},this._onStyleError=e=>{e.tile&&this.triggerRepaint()},this._onWindowOnline=()=>{this._update()};let t={...rF,...e,canvasContextAttributes:{...rF.canvasContextAttributes,...e.canvasContextAttributes}};if(t.minZoom!=null&&t.maxZoom!=null&&t.minZoom>t.maxZoom)throw Error(`maxZoom must be greater than or equal to minZoom`);if(t.minPitch!=null&&t.maxPitch!=null&&t.minPitch>t.maxPitch)throw Error(`maxPitch must be greater than or equal to minPitch`);if(t.minPitch!=null&&t.minPitch<0)throw Error(`minPitch must be greater than or equal to 0`);if(t.maxPitch!=null&&t.maxPitch>180)throw Error(`maxPitch must be less than or equal to 180`);this._camera=new VP({minZoom:t.minZoom,maxZoom:t.maxZoom,minPitch:t.minPitch,maxPitch:t.maxPitch,bearingSnap:t.bearingSnap,zoomSnap:t.zoomSnap,renderWorldCopies:t.renderWorldCopies,centerClampedToGround:t.centerClampedToGround,terrain:this.terrain,transformConstrain:t.transformConstrain,requestRenderFrame:e=>this._requestRenderFrame(e),cancelRenderFrame:e=>this._cancelRenderFrame(e),transformCameraUpdate:t.transformCameraUpdate,stopHandlers:()=>this._handlers?.stop(!1)}),this._camera.setEventedParent(this),this._interactive=t.interactive,this._maxTileCacheSize=t.maxTileCacheSize,this._maxTileCacheZoomLevels=t.maxTileCacheZoomLevels,this._canvasContextAttributes={...t.canvasContextAttributes},this._trackResize=t.trackResize===!0,this._terrainSkirtLength=t.terrainSkirtLength,this._refreshExpiredTiles=t.refreshExpiredTiles===!0,this._fadeDuration=t.fadeDuration,this._crossSourceCollisions=t.crossSourceCollisions===!0,this._collectResourceTiming=t.collectResourceTiming===!0,this._locale={...tF,...t.locale},this._clickTolerance=t.clickTolerance,this._overridePixelRatio=t.pixelRatio,this._maxCanvasSize=t.maxCanvasSize,this._zoomLevelsToOverscale=t.zoomLevelsToOverscale,this.cancelPendingTileRequestsWhileZooming=t.cancelPendingTileRequestsWhileZooming===!0,this.setAnisotropicFilterPitch(t.anisotropicFilterPitch),t.reduceMotion!==void 0&&(Nn.prefersReducedMotion=t.reduceMotion),this._requestManager=new rr(t.transformRequest),this._container=this._resolveContainer(t.container),t.maxBounds&&this.setMaxBounds(t.maxBounds),this._setupContainer();try{this._setupPainter()}catch(e){throw this._cleanupContainer(),e}this._imageQueueHandle=nr.addThrottleControl(()=>this.isMoving()),this.on(`move`,()=>this._update(!1)),this.on(`moveend`,()=>this._update(!1)),this.on(`zoom`,()=>this._update(!0)),this.on(`terrain`,()=>{this.painter.markTerrainDepthDirty(),this._update(!0)}),this.once(`idle`,()=>this._idleTriggered=!0),this._handlers=new RP(this,this._camera,t),typeof window<`u`&&(this._ownerWindow.addEventListener(`online`,this._onWindowOnline,!1),this._setupResizeObserver());let n=typeof t.hash==`string`&&t.hash||void 0;this._hash=t.hash?new zN(n).addTo(this):void 0,this._hash?._onHashChange()||(this.jumpTo({center:t.center,elevation:t.elevation,zoom:t.zoom,bearing:t.bearing,pitch:t.pitch,roll:t.roll}),t.bounds&&(this.resize(),this.fitBounds(t.bounds,z({},t.fitBoundsOptions,{duration:0}))));let r=typeof t.style==`string`||t.style?.projection?.type!==`globe`;this.resize(null,r),this._localIdeographFontFamily=t.localIdeographFontFamily,this._validateStyle=t.validateStyle,this._initialGlobalState=t.globalState,t.style&&this.setStyle(t.style,{localIdeographFontFamily:t.localIdeographFontFamily}),t.attributionControl&&this.addControl(new UP(typeof t.attributionControl==`boolean`?void 0:t.attributionControl)),t.maplibreLogo&&this.addControl(new WP,t.logoPosition),this.on(`style.load`,()=>{if(r||this._resizeTransform(),this._camera.transform.unmodified){let e=Bt(this.style.stylesheet,[`center`,`zoom`,`bearing`,`pitch`,`roll`]);this.jumpTo(e)}}),this.on(`data`,e=>{this._update(e.dataType===`style`),this.fire(e.dataType===`style`?new ur(`styledata`,e):new dr(`sourcedata`,e))}),this.on(`dataloading`,e=>{this.fire(e.dataType===`style`?new ur(`styledataloading`,e):new dr(`sourcedataloading`,e))}),this.on(`dataabort`,e=>{this.fire(new dr(`sourcedataabort`,e))})}_getMapId(){return this._mapId}setGlobalStateProperty(e,t){return this.style.setGlobalStateProperty(e,t),this._update(!0)}getGlobalState(){return this.style.getGlobalState()}addControl(e,t){if(t===void 0&&(t=e.getDefaultPosition?e.getDefaultPosition():`top-right`),!e?.onAdd)return this.fire(new B(Error(`Invalid argument to map.addControl(). Argument must be a control with onAdd and onRemove methods.`)));let n=e.onAdd(this);this._controls.push(e);let r=this._controlPositions[t];return t.includes(`bottom`)?r.insertBefore(n,r.firstChild):r.appendChild(n),this}removeControl(e){if(!e?.onRemove)return this.fire(new B(Error(`Invalid argument to map.removeControl(). Argument must be a control with onAdd and onRemove methods.`)));let t=this._controls.indexOf(e);return t>-1&&this._controls.splice(t,1),e.onRemove(this),this}hasControl(e){return this._controls.includes(e)}coveringTiles(e){return PE(this._camera.transform,e)}setTransformCameraUpdate(e){this._camera.transformCameraUpdate=e}getCenter(){return new X(this._camera.transform.center.lng,this._camera.transform.center.lat)}setCenter(e,t){return this._camera.setCenter(e,t),this}getCenterElevation(){return this._camera.transform.elevation}setCenterElevation(e,t){return this._camera.setCenterElevation(e,t),this}setCenterClampedToGround(e){this._camera.setCenterClampedToGround(e)}panBy(e,t,n){return this._camera.panBy(e,t,n),this}panTo(e,t,n){return this._camera.panTo(e,t,n),this}getZoom(){return this._camera.transform.zoom}setZoom(e,t){return this._camera.setZoom(e,t),this}zoomTo(e,t,n){return this._camera.zoomTo(e,t,n),this}zoomIn(e,t){return this._camera.zoomIn(e,t),this}zoomOut(e,t){return this._camera.zoomOut(e,t),this}getVerticalFieldOfView(){return this._camera.transform.fov}setVerticalFieldOfView(e,t){return this._camera.setVerticalFieldOfView(e,t),this}getBearing(){return this._camera.transform.bearing}setBearing(e,t){return this._camera.setBearing(e,t),this}getZoomSnap(){return this._camera.getZoomSnap()}setZoomSnap(e){return this._camera.setZoomSnap(e),this}getPadding(){return this._camera.transform.padding}setPadding(e,t){return this._camera.setPadding(e,t),this}rotateTo(e,t,n){return this._camera.rotateTo(e,t,n),this}resetNorth(e,t){return this._camera.resetNorth(e,t),this}resetNorthPitch(e,t){return this._camera.resetNorthPitch(e,t),this}snapToNorth(e,t){return this._camera.snapToNorth(e,t),this}getPitch(){return this._camera.transform.pitch}setPitch(e,t){return this._camera.setPitch(e,t),this}getRoll(){return this._camera.transform.roll}setRoll(e,t){return this._camera.setRoll(e,t),this}cameraForBounds(e,t){return this._camera.cameraForBounds(e,t)}fitBounds(e,t,n){return this._camera.fitBounds(e,t,n),this}fitScreenCoordinates(e,t,n,r,i){return this._camera.fitScreenCoordinates(e,t,n,r,i),this}jumpTo(e,t){return this._camera.jumpTo(e,t),this}calculateAnchoredCameraOptions(e){return this._camera.calculateAnchoredCameraOptions(e)}calculateCameraOptionsFromCameraLngLatAltRotation(e,t,n,r,i){return this._camera.calculateCameraOptionsFromCameraLngLatAltRotation(e,t,n,r,i)}easeTo(e,t){return this._camera.easeTo(e,t),this}flyTo(e,t){return this._camera.flyTo(e,t),this}stop(){return this._camera.stop(),this}queryTerrainElevation(e){return this.terrain?this.terrain.getElevationForLngLat(X.convert(e),this._camera.transform):null}getCenterClampedToGround(){return this._camera.getCenterClampedToGround()}calculateCameraOptionsFromTo(e,t,n,r){return r==null&&this.terrain&&(r=this.terrain.getElevationForLngLat(n,this._camera.transform)),this._camera.transform.calculateCameraOptionsFromTo(e,t,n,r??0)}resize(e,t=!0){if(this._lostContextStyle.style!==null)return this;this._resizeInternal(t);let n=!this._camera._moving;return n&&(this.stop(),this.fire(new V(`movestart`,e)).fire(new V(`move`,e))),this.fire(new cr(`resize`,e)),n&&this.fire(new V(`moveend`,e)),this}_resizeInternal(e=!0){let[t,n]=this._containerDimensions();if(this._clampedPixelRatio=this._getClampedPixelRatio(t,n),this._resizeCanvas(t,n,this._clampedPixelRatio),this.painter.resize(t,n,this._clampedPixelRatio),this.painter.overLimit()){let e=this.painter.context.gl;this._maxCanvasSize=[e.drawingBufferWidth,e.drawingBufferHeight],this._clampedPixelRatio=this._getClampedPixelRatio(t,n),this._resizeCanvas(t,n,this._clampedPixelRatio),this.painter.resize(t,n,this._clampedPixelRatio)}this.style?.resize(),this._resizeTransform(e)}_resizeTransform(e=!0){let[t,n]=this._containerDimensions();this._camera.transform.resize(t,n,e),this._camera._requestedCameraState?.resize(t,n,e)}_getClampedPixelRatio(e,t){let{0:n,1:r}=this._maxCanvasSize,i=this.getPixelRatio(),a=e*i,o=t*i,s=a>n?n/a:1,c=o>r?r/o:1,l=Math.min(s,c);return l<1&&$t(`The canvas is larger than maxCanvasSize and is rendered at a lower pixel ratio to fit. Increase maxCanvasSize, within MAX_TEXTURE_SIZE, to render at full resolution.`),l*i}getPixelRatio(){return this._overridePixelRatio??devicePixelRatio}setPixelRatio(e){this._overridePixelRatio=e,this.resize()}getBounds(){return this._camera.transform.getBounds()}getMaxBounds(){return this._camera.transform.getMaxBounds()}setMaxBounds(e){return this._camera.applyTransformChange(t=>t.setMaxBounds(Mb.convert(e))),this._update()}setMinZoom(e){if(e??=-2,e>=-2&&e<=this._camera.transform.maxZoom){let t=this._camera.transform.zoom;return this._camera.applyTransformChange(t=>t.setMinZoom(e)),this._update(),t!==this._camera.transform.zoom&&this.fire(new V(`zoomstart`)).fire(new V(`zoom`)).fire(new V(`zoomend`)).fire(new V(`movestart`)).fire(new V(`move`)).fire(new V(`moveend`)),this}throw Error(`minZoom must be between -2 and the current maxZoom, inclusive`)}getMinZoom(e=!1){let t=this._camera.transform;return e?t.applyConstrain(t.center,t.minZoom).zoom:t.minZoom}setMaxZoom(e){if(e??=22,e>=this._camera.transform.minZoom){let t=this._camera.transform.zoom;return this._camera.applyTransformChange(t=>t.setMaxZoom(e)),this._update(),t!==this._camera.transform.zoom&&this.fire(new V(`zoomstart`)).fire(new V(`zoom`)).fire(new V(`zoomend`)).fire(new V(`movestart`)).fire(new V(`move`)).fire(new V(`moveend`)),this}throw Error(`maxZoom must be greater than the current minZoom`)}getMaxZoom(){return this._camera.transform.maxZoom}setMinPitch(e){if(e??=0,e<0)throw Error(`minPitch must be greater than or equal to 0`);if(e>=0&&e<=this._camera.transform.maxPitch){let t=this._camera.transform.pitch;return this._camera.applyTransformChange(t=>t.setMinPitch(e)),this._update(),t!==this._camera.transform.pitch&&this.fire(new V(`pitchstart`)).fire(new V(`pitch`)).fire(new V(`pitchend`)).fire(new V(`movestart`)).fire(new V(`move`)).fire(new V(`moveend`)),this}throw Error(`minPitch must be between 0 and the current maxPitch, inclusive`)}getMinPitch(){return this._camera.transform.minPitch}setMaxPitch(e){if(e??=60,e>180)throw Error(`maxPitch must be less than or equal to 180`);if(e>=this._camera.transform.minPitch){let t=this._camera.transform.pitch;return this._camera.applyTransformChange(t=>t.setMaxPitch(e)),this._update(),t!==this._camera.transform.pitch&&this.fire(new V(`pitchstart`)).fire(new V(`pitch`)).fire(new V(`pitchend`)).fire(new V(`movestart`)).fire(new V(`move`)).fire(new V(`moveend`)),this}throw Error(`maxPitch must be greater than the current minPitch`)}getMaxPitch(){return this._camera.transform.maxPitch}getAnisotropicFilterPitch(){return this._anisotropicFilterPitch}setAnisotropicFilterPitch(e){if(e??=20,e>180)throw Error(`anisotropicFilterPitch must be less than or equal to 180`);if(e<0)throw Error(`anisotropicFilterPitch must be greater than or equal to 0`);return this._anisotropicFilterPitch=e,this._update()}getRenderWorldCopies(){return this._camera.transform.renderWorldCopies}setRenderWorldCopies(e){return this._camera.applyTransformChange(t=>t.setRenderWorldCopies(e)),this._update()}setTransformConstrain(e){return this._camera.applyTransformChange(t=>t.setConstrainOverride(e)),this._update()}project(e){return this._camera.transform.locationToScreenPoint(X.convert(e),this.style&&this.terrain)}unproject(e){return this._camera.transform.screenPointToLocation(k.convert(e),this.terrain)}isMoving(){return this._camera.isMoving()||this._handlers?.isMoving()||!1}isZooming(){return this._camera.isZooming()||this._handlers?.isZooming()||!1}isRotating(){return this._camera.isRotating()||this._handlers?.isRotating()||!1}_createDelegates(e,t,n){if(e===`mouseenter`||e===`mouseover`){let r=!1;return{mousemove:i=>{let a=t.filter(e=>this.getLayer(e)),o=a.length===0?[]:this.queryRenderedFeatures(i.point,{layers:a});o.length?r||(r=!0,n.call(this,new fr(e,this,i.originalEvent,{features:o}))):r=!1},mouseout:()=>{r=!1}}}if(e===`mouseleave`||e===`mouseout`){let r=!1;return{mousemove:i=>{let a=t.filter(e=>this.getLayer(e));(a.length===0?[]:this.queryRenderedFeatures(i.point,{layers:a})).length?r=!0:r&&(r=!1,n.call(this,new fr(e,this,i.originalEvent)))},mouseout:t=>{r&&(r=!1,n.call(this,new fr(e,this,t.originalEvent)))}}}{let r=e=>{let r=t.filter(e=>this.getLayer(e)),i=r.length===0?[]:this.queryRenderedFeatures(e.point,{layers:r});i.length&&(e.features=i,n.call(this,e),delete e.features)};return{[e]:r}}}_addDelegatedListener(e,t){this._delegatedListeners||={},this._delegatedListeners[e]||=[],this._delegatedListeners[e].push(t);for(let e in t.delegates)this.on(e,t.delegates[e])}_removeDelegatedListener(e,t,n){if(!this._delegatedListeners?.[e])return;let r=this._delegatedListeners[e];for(let e=0;et.includes(e))){for(let e in i.delegates)this.off(e,i.delegates[e]);r.splice(e,1);return}}}on(e,t,n){if(n===void 0)return super.on(e,t);let r=typeof t==`string`?[t]:t,i={layers:r,listener:n,delegates:this._createDelegates(e,r,n)};return this._addDelegatedListener(e,i),{unsubscribe:()=>{this._removeDelegatedListener(e,r,n)}}}once(e,t,n){if(n===void 0)return super.once(e,t);let r=typeof t==`string`?[t]:t,i={layers:r,listener:n,delegates:this._createDelegates(e,r,t=>{this._removeDelegatedListener(e,r,n),n.call(this,t)})};return this._addDelegatedListener(e,i),this}off(e,t,n){if(n===void 0)return super.off(e,t);let r=typeof t==`string`?[t]:t;return this._removeDelegatedListener(e,r,n),this}queryRenderedFeatures(e,t){if(!this.style)return[];let n,r=e instanceof k||Array.isArray(e),i=r?e:[[0,0],[this._camera.transform.width,this._camera.transform.height]];if(t||=(r?{}:e)||{},i instanceof k||typeof i[0]==`number`)n=[k.convert(i)];else{let e=k.convert(i[0]),t=k.convert(i[1]);n=[e,new k(t.x,e.y),t,new k(e.x,t.y),e]}return this.style.queryRenderedFeatures(n,t,this._camera.transform)}querySourceFeatures(e,t){return this.style.querySourceFeatures(e,t)}setStyle(e,t){return t=z({},{localIdeographFontFamily:this._localIdeographFontFamily,validate:this._validateStyle,globalState:this._initialGlobalState},t),this._styleUrl=typeof e==`string`?e:null,t.diff!==!1&&t.localIdeographFontFamily===this._localIdeographFontFamily&&this.style&&e?(this._diffStyle(e,t),this):(this._localIdeographFontFamily=t.localIdeographFontFamily,this._updateStyle(e,t))}setTransformRequest(e){return this._requestManager.setTransformRequest(e),this}_getUIString(e){let t=this._locale[e];if(t==null)throw Error(`Missing UI string '${e}'`);return t}_updateStyle(e,t){if(this._diffStyleRequest?.abort(),this._diffStyleRequest=null,t.transformStyle&&this.style&&!this.style._loaded){this.style.once(`style.load`,()=>this._updateStyle(e,t));return}let n=this.style&&t.transformStyle?this.style.serialize():void 0;if(this.style&&(this.style.off(`error`,this._onStyleError),this.style.setEventedParent(null),this.style._remove(!e)),e)this.style=new Mk(this,t||{});else return this._frameRequest&&=(this._frameRequest.abort(),null),this.style?.projection?.destroy(),delete this.style,this;return this.style.setEventedParent(this,{style:this.style}),this.style.on(`error`,this._onStyleError),typeof e==`string`?this.style.loadURL(e,t,n):this.style.loadJSON(e,t,n),this}_lazyInitEmptyStyle(){this.style||(this.style=new Mk(this,{}),this.style.setEventedParent(this,{style:this.style}),this.style.on(`error`,this._onStyleError),this.style.loadEmpty())}async _diffStyle(e,t){if(this._diffStyleRequest?.abort(),typeof e==`string`){let n=e;this._diffStyleRequest=new AbortController;let r=this._diffStyleRequest;try{let e=await this._requestManager.transformRequest(n,`Style`);if(r.signal.aborted){this._diffStyleRequest=null;return}let i=await Qn(e,r);this._diffStyleRequest=null,this._updateDiff(i.data,t)}catch(e){this._diffStyleRequest=null,On(e)||this.fire(new B(vt(e)))}}else typeof e==`object`&&(this._diffStyleRequest=null,this._updateDiff(e,t))}_updateDiff(e,t){try{this.style.setState(e,t)&&this._update(!0)}catch(n){$t(`Unable to perform style diff: ${vt(n).message}. Rebuilding the style from scratch.`),this._updateStyle(e,t)}}getStyle(){if(this.style)return this.style.serialize()}getStyleUrl(){return this._styleUrl}_getStyleAndImages(){return this.style?{style:this.style.serialize(),images:this.style.imageManager.cloneImages()}:{style:null,images:{}}}isStyleLoaded(){if(!this.style)$t(`There is no style added to the map.`);else return this.style.loaded()}addSource(e,t){return this._lazyInitEmptyStyle(),this.style.addSource(e,t),this._update(!0)}isSourceLoaded(e){let t=this.style?.tileManagers[e];if(t===void 0)this.fire(new B(Error(`There is no tile manager with ID '${e}'`)));else return t.loaded()}setTerrain(e,t={}){if(this.style._checkLoaded(),e&&xl(this,gl.terrain,{value:e},t))return this;if(this._terrainDataCallback&&this.style.off(`data`,this._terrainDataCallback),!e)this.terrain&&this.terrain.destroy(),this.terrain=null,this.painter.renderToTexture=null,this.painter.destroyRTTResources(),this._camera.setTerrain(null);else{let t=this.style.tileManagers[e.source];if(!t)throw Error(`cannot load terrain, because there exists no source with ID: ${e.source}`);this.terrain===null&&t.reload();for(let t in this.style._layers){let n=this.style._layers[t];n.type===`hillshade`&&n.source===e.source&&$t(`You are using the same source for a hillshade layer and for 3D terrain. Please consider using two separate sources to improve rendering quality.`),n.type===`color-relief`&&n.source===e.source&&$t(`You are using the same source for a color-relief layer and for 3D terrain. Please consider using two separate sources to improve rendering quality.`)}this.terrain&&this.terrain.destroy(),this.terrain=new JP(this.painter,t,e,this._terrainSkirtLength),this.painter.renderToTexture=new eF(this.painter,this.terrain),this._camera.setTerrain(this.terrain),this._terrainDataCallback=t=>this._handleTerrainDataEvent(t,e.source),this.style.on(`data`,this._terrainDataCallback)}return this.style.triggerSymbolPlacement(),this.fire(new gr({terrain:e})),this}_handleTerrainDataEvent(e,t){if(e.dataType===`style`){this.terrain.tileManager.releaseAllRTT();return}let n=e.sourceId===t;if(n&&(this.terrain.resetElevationCache(),this.style.triggerSymbolPlacement()),n&&e.tile&&(this.painter.markTerrainDepthDirty(),this._camera.applyTerrainChange()),e.tile){if(e.source?.type===`image`){this.terrain.tileManager.releaseAllRTT();return}this.terrain.tileManager.releaseRTT(e.tile.tileID)}}getTerrain(){return this.terrain?.options??null}areTilesLoaded(){let e=this.style?.tileManagers;for(let t of Object.values(e))if(!t.areTilesLoaded())return!1;return!0}removeSource(e){return this.style.removeSource(e),this._update(!0)}getSource(e){return this.style?.getSource(e)}setSourceTileLodParams(e,t,n){if(n){let r=this.getSource(n);if(!r)throw Error(`There is no source with ID "${n}", cannot set LOD parameters`);r.calculateTileZoom=OE(Math.max(1,e),Math.max(1,t))}else for(let n in this.style.tileManagers)this.style.tileManagers[n].getSource().calculateTileZoom=OE(Math.max(1,e),Math.max(1,t));return this._update(!0),this}refreshTiles(e,t){let n=this.style.tileManagers[e];if(!n)throw Error(`There is no tile manager with ID "${e}", cannot refresh tile`);t===void 0?n.reload(!0):n.refreshTiles(t.map(e=>new Rb(e.z,e.x,e.y)))}addImage(e,t,n={}){this._lazyInitEmptyStyle();let r=this._createStyleImage(t,n);return r&&(this.style.addImage(e,r),r.userImage?.onAdd&&r.userImage.onAdd(this,e)),this}setMissingStyleImageResolver(e){return this._missingStyleImageResolver=e,this.style?.setMissingImageResolver(e),this}_createStyleImage(e,t={}){let{pixelRatio:n=1,sdf:r=!1,stretchX:i,stretchY:a,content:o,textFitWidth:s,textFitHeight:c}=t;if(e instanceof HTMLImageElement||cn(e)){let{width:t,height:l,data:u}=Nn.getImageData(e);return{data:new Lf({width:t,height:l},u),pixelRatio:n,stretchX:i,stretchY:a,content:o,textFitWidth:s,textFitHeight:c,sdf:r,version:0}}if(e.width===void 0||e.height===void 0)return this.fire(new B(Error("Invalid arguments to map.addImage(). The second argument must be an `HTMLImageElement`, `ImageData`, `ImageBitmap`, or object with `width`, `height`, and `data` properties with the same format as `ImageData`"))),null;{let{width:t,height:l,data:u}=e,d=e,f=A_(d.data);return{data:f?new Lf({width:t,height:l}):new Lf({width:t,height:l},new Uint8Array(u)),pixelRatio:n,stretchX:i,stretchY:a,content:o,textFitWidth:s,textFitHeight:c,sdf:r,version:0,isWebGLImage:f,userImage:d}}}updateImage(e,t){let n=this.style.getImage(e);if(!n)return this.fire(new B(Error("The map has no image with that id. If you are adding a new image use `map.addImage(...)` instead.")));let{width:r,height:i,data:a}=t instanceof HTMLImageElement||cn(t)?Nn.getImageData(t):t;if(r===void 0||i===void 0)return this.fire(new B(Error("Invalid arguments to map.updateImage(). The second argument must be an `HTMLImageElement`, `ImageData`, `ImageBitmap`, or object with `width`, `height`, and `data` properties with the same format as `ImageData`")));if(r!==n.data.width||i!==n.data.height)return this.fire(new B(Error(`The width and height of the updated image must be that same as the previous version of the image`)));if(n.isWebGLImage=A_(a),n.isWebGLImage)n.userImage=t;else{let e=!(t instanceof HTMLImageElement||cn(t));n.data.replace(a,e)}return this.style.updateImage(e,n),this}getImage(e){return this.style.getImage(e)}hasImage(e){return e?!!this.style.getImage(e):(this.fire(new B(Error(`Missing required image id`))),!1)}removeImage(e){this.style.removeImage(e)}async loadImage(e){let t=await nr.getImage(await this._requestManager.transformRequest(e,`Image`),new AbortController);if(!t.data)throw Error(`Could not load image ${e}: the response is empty`);return t}listImages(){return this.style?.listImages()??[]}addLayer(e,t){return this._lazyInitEmptyStyle(),this.style.addLayer(e,t),this._update(!0)}moveLayer(e,t){return this.style.moveLayer(e,t),this._update(!0)}removeLayer(e){return this.style.removeLayer(e),this._update(!0)}getLayer(e){return this.style?.getLayer(e)}getLayersOrder(){return this.style?.getLayersOrder()??[]}setLayerZoomRange(e,t,n){return this.style.setLayerZoomRange(e,t,n),this._update(!0)}setFilter(e,t,n={}){return this.style?.setFilter(e,t,n),this._update(!0)}getFilter(e){return this.style.getFilter(e)}setPaintProperty(e,t,n,r={}){return this.style?.setPaintProperty(e,t,n,r),this._update(!0)}getPaintProperty(e,t){return this.style.getPaintProperty(e,t)}setLayoutProperty(e,t,n,r={}){return this.style.setLayoutProperty(e,t,n,r),this._update(!0)}getLayoutProperty(e,t){return this.style.getLayoutProperty(e,t)}setGlyphs(e,t={}){return this._lazyInitEmptyStyle(),this.style.setGlyphs(e,t),this._update(!0)}getGlyphs(){return this.style.getGlyphsUrl()}setFontFaces(e){return this._lazyInitEmptyStyle(),this.style.setFontFaces(e),this._update(!0)}getFontFaces(){return this.style.getFontFaces()}addSprite(e,t,n={}){return this._lazyInitEmptyStyle(),this.style.addSprite(e,t,n,e=>{e||this._update(!0)}),this}removeSprite(e){return this._lazyInitEmptyStyle(),this.style.removeSprite(e),this._update(!0)}getSprite(){return this.style.getSprite()}setSprite(e,t={}){return this._lazyInitEmptyStyle(),this.style.setSprite(e,t,e=>{e||this._update(!0)}),this}setLight(e,t={}){return this._lazyInitEmptyStyle(),this.style.setLight(e,t),this._update(!0)}getLight(){return this.style.getLight()}setSky(e,t={}){return this._lazyInitEmptyStyle(),this.style.setSky(e,t),this._update(!0)}getSky(){return this.style.getSky()}setFeatureState(e,t){return this.style.setFeatureState(e,t),this._update()}removeFeatureState(e,t){return this.style.removeFeatureState(e,t),this._update()}getFeatureState(e){return this.style.getFeatureState(e)}getContainer(){return this._container}getCanvasContainer(){return this._canvasContainer}getCanvas(){return this._canvas}_containerDimensions(){let e=0,t=0;return this._container&&(e=Math.floor(this._container.clientWidth)||400,t=Math.floor(this._container.clientHeight)||300),[e,t]}_shouldHandleInitialResize(){if(!this._container?.clientWidth||!this._container.clientHeight)return!1;let[e,t]=this._containerDimensions();return e!==this._camera.transform.width||t!==this._camera.transform.height}_setupResizeObserver(){let e=!1,t=RN(e=>{this._trackResize&&!this._removed&&(this.resize(e),this.redraw())},50),n=this._ownerWindow.ResizeObserver??ResizeObserver;this._resizeObserver=new n(n=>{!e&&(e=!0,!this._shouldHandleInitialResize())||t(n)}),this._resizeObserver.observe(this._container)}_resolveContainer(e){if(typeof e==`string`){let t=document.getElementById(e);if(!t)throw Error(`Container '${e}' not found.`);return t}if(e instanceof HTMLElement||e&&typeof e==`object`&&e.nodeType===1)return e;throw Error(`Invalid type: 'container' must be a String or HTMLElement.`)}_setupContainer(){let e=this._containerDimensions(),t=this._getClampedPixelRatio(e[0],e[1]),n=this._container;n.classList.add(`maplibregl-map`);let r=this._canvasContainer=Hn.create(`div`,`maplibregl-canvas-container`,n);this._interactive&&r.classList.add(`maplibregl-interactive`),this._canvas=Hn.create(`canvas`,`maplibregl-canvas`,r),this._canvas.addEventListener(`webglcontextlost`,this._contextLost,!1),this._canvas.addEventListener(`webglcontextrestored`,this._contextRestored,!1),this._canvas.setAttribute(`tabindex`,this._interactive?`0`:`-1`),this._canvas.setAttribute(`aria-label`,this._getUIString(`Map.Title`)),this._canvas.setAttribute(`role`,`region`),this._resizeCanvas(e[0],e[1],t);let i=this._controlContainer=Hn.create(`div`,`maplibregl-control-container`,n),a=this._controlPositions={};for(let e of[`top-left`,`top-right`,`bottom-left`,`bottom-right`])a[e]=Hn.create(`div`,`maplibregl-ctrl-${e} `,i);this._container.addEventListener(`scroll`,this._onMapScroll,!1)}_cleanupContainer(){this._canvas.removeEventListener(`webglcontextrestored`,this._contextRestored,!1),this._canvas.removeEventListener(`webglcontextlost`,this._contextLost,!1),this._canvasContainer.remove(),this._controlContainer.remove(),this._container.removeEventListener(`scroll`,this._onMapScroll,!1),this._container.classList.remove(`maplibregl-map`)}_resizeCanvas(e,t,n){let r=Math.round(n*e),i=Math.round(n*t);this._canvas.width=r,this._canvas.height=i,this._canvas.style.width=`${r/n}px`,this._canvas.style.height=`${i/n}px`}_setupPainter(){let e={...this._canvasContextAttributes,alpha:!0,depth:!0,stencil:!0,premultipliedAlpha:!0},t=null;this._canvas.addEventListener(`webglcontextcreationerror`,e=>{t=e},{once:!0});let n=this._canvas.getContext(`webgl2`,e);if(!n)throw new LN(e,t);this.painter=new IN(n)}migrateProjection(e,t){this._camera.migrateProjection(e,t),this.fire(new _r({newProjection:this.style.projection.name}))}loaded(){return!this._styleDirty&&!this._sourcesDirty&&!!this.style&&this.style.loaded()}_update(e){return this.style?._loaded&&(this._styleDirty||=e,this._sourcesDirty=!0,this.triggerRepaint()),this}_requestRenderFrame(e){return this._update(),this._renderTaskQueue.add(e)}_cancelRenderFrame(e){this._renderTaskQueue.remove(e)}_render(e){let t=this._idleTriggered?this._fadeDuration:0,n=this.style.projection?.transitionState>0;if(this.painter.context.setDirty(),this.painter.setBaseState(),this._renderTaskQueue.run(e),this._removed)return;let r=!1;if(this.style&&this._styleDirty){this._styleDirty=!1;let e=this._camera.transform.zoom,n=Fn();this.style.zoomHistory.update(e,n);let i=new jl(e,{now:n,fadeDuration:t,zoomHistory:this.style.zoomHistory,transition:this.style.getTransition()}),a=i.crossFadingFactor();(a!==1||a!==this._crossFadingFactor)&&(r=!0,this._crossFadingFactor=a),this.style.update(i)}let i=this.style.projection?.transitionState>0!==n;this._camera.transform.setTransitionState(this.style.projection?.transitionState),this.style&&(this._sourcesDirty||i)&&(this._sourcesDirty=!1,this.style._updateSources(this._camera.transform)),this.terrain?(this.terrain.tileManager.update(this._camera.transform,this.terrain)&&this.terrain.resetElevationCache(),this._camera.transform.setMinElevationForCurrentTile(this.terrain.getMinTileElevationForLngLatZoom(this._camera.transform.center,this._camera.transform.tileZoom)),!this._camera.elevationFreeze&&this.getCenterClampedToGround()&&this._camera.transform.setElevation(this.terrain.getElevationForLngLat(this._camera.transform.center,this._camera.transform))):(this._camera.transform.setMinElevationForCurrentTile(0),this.getCenterClampedToGround()&&this._camera.transform.setElevation(0)),this._placementDirty=this.style?._updatePlacement(this._camera.transform,this.showCollisionBoxes,t,this._crossSourceCollisions,i);let a=this.style.projection,o=a?.transitionState??0;this.painter.render(this.style,this._camera.transform,{showTileBoundaries:this.showTileBoundaries,showOverdrawInspector:this._showOverdrawInspector,rotating:this.isRotating(),zooming:this.isZooming(),moving:this.isMoving(),fadeDuration:t,symbolFadeChange:this.style.placement.symbolFadeChange(Fn()),variableOffsets:this.style.placement.variableOffsets,showPadding:this.showPadding,anisotropicFilterPitch:this.getAnisotropicFilterPitch(),projectionTransition:o,isRenderingGlobe:o>0,projectionShaderVariant:a?{name:a.shaderVariantName,define:a.shaderDefine,prelude:a.shaderPreludeCode}:void 0,useSubdivision:a?.useSubdivision??!1,pixelRatio:this._clampedPixelRatio,light:this.style.light?.getEvaluated(),sky:this.style.sky?.getEvaluated()}),this.fire(new cr(`render`)),this.loaded()&&!this._loaded&&(this._loaded=!0,this.fire(new cr(`load`))),this.style&&(this.style.hasTransitions()||r)&&(this._styleDirty=!0),this.style&&!this._placementDirty&&this.style._releaseSymbolFadeTiles();let s=this._sourcesDirty||this._styleDirty||this._placementDirty||this.painter.renderToTexture?.needsFollowUpFrame;return s||this._repaint?this.triggerRepaint():!this.isMoving()&&this.loaded()&&this.fire(new cr(`idle`)),this._loaded&&!this._fullyLoaded&&!s&&(this._fullyLoaded=!0),this}redraw(){return this.style&&(this._frameRequest&&=(this._frameRequest.abort(),null),this._render(0)),this}remove(){this._hash&&this._hash.remove();for(let e of this._controls)e.onRemove(this);this._controls=[],this._frameRequest&&=(this._frameRequest.abort(),null),this._renderTaskQueue.clear(),this._diffStyleRequest?.abort(),this.painter.destroy(),this._handlers.destroy(),this.setStyle(null),typeof window<`u`&&this._ownerWindow.removeEventListener(`online`,this._onWindowOnline,!1),nr.removeThrottleControl(this._imageQueueHandle),this._resizeObserver?.disconnect();let e=this.painter.context.gl.getExtension(`WEBGL_lose_context`);e?.loseContext&&e.loseContext(),this._cleanupContainer(),this._removed=!0,this.fire(new cr(`remove`))}triggerRepaint(){this.style&&!this._frameRequest&&(this._frameRequest=new AbortController,Nn.frame(this._frameRequest,e=>{this._frameRequest=null;try{this._render(e)}catch(e){if(!On(e))throw e}},()=>{},this._ownerWindow))}get showTileBoundaries(){return!!this._showTileBoundaries}set showTileBoundaries(e){this._showTileBoundaries!==e&&(this._showTileBoundaries=e,this._update())}get showPadding(){return!!this._showPadding}set showPadding(e){this._showPadding!==e&&(this._showPadding=e,this._update())}get showCollisionBoxes(){return!!this._showCollisionBoxes}set showCollisionBoxes(e){this._showCollisionBoxes!==e&&(this._showCollisionBoxes=e,e?this.style._generateCollisionBoxes():this._update())}get showOverdrawInspector(){return!!this._showOverdrawInspector}set showOverdrawInspector(e){this._showOverdrawInspector!==e&&(this._showOverdrawInspector=e,this._update())}get repaint(){return!!this._repaint}set repaint(e){this._repaint!==e&&(this._repaint=e,this.triggerRepaint())}get vertices(){return!!this._vertices}set vertices(e){this._vertices=e,this._update()}get version(){return nF}getCameraTargetElevation(){return this._camera.transform.elevation}getProjection(){return this.style.getProjection()}setProjection(e){return this._lazyInitEmptyStyle(),this.style.setProjection(e),this._update(!0)}};function aF(e,t,n,r=!1){if(r||!n.getCoveringTilesDetailsProvider().allowWorldCopies())return e?.wrap();let i=new X(e.lng,e.lat);if(e=new X(e.lng,e.lat),t){let r=new X(e.lng-360,e.lat),i=new X(e.lng+360,e.lat),a=n.locationToScreenPoint(e).distSqr(t);n.locationToScreenPoint(r).distSqr(t)180;){let t=n.locationToScreenPoint(e);if(t.x>=0&&t.y>=0&&t.x<=n.width&&t.y<=n.height)break;e.lng>n.center.lng?e.lng-=360:e.lng+=360}return e.lng!==i.lng&&n.isPointOnMapSurface(n.locationToScreenPoint(e))?e:i}var oF={center:`translate(-50%,-50%)`,top:`translate(-50%,0)`,"top-left":`translate(0,0)`,"top-right":`translate(-100%,0)`,bottom:`translate(-50%,-100%)`,"bottom-left":`translate(0,-100%)`,"bottom-right":`translate(-100%,-100%)`,left:`translate(0,-50%)`,right:`translate(-100%,-50%)`};function sF(e,t,n){let r=e.classList;for(let e in oF)r.remove(`maplibregl-${n}-anchor-${e}`);r.add(`maplibregl-${n}-anchor-${t}`)}var cF={ArrowLeft:[-1,0],ArrowRight:[1,0],ArrowUp:[0,-1],ArrowDown:[0,1]},lF=`#3FB1CE`;function uF(e,t,n=[]){let r=Hn.createNS(`http://www.w3.org/2000/svg`,e);for(let e in t)r.setAttributeNS(null,e,t[e]);for(let e of n)r.appendChild(e);return r}var dF;function fF(){return dF||(dF=uF(`svg`,{display:`block`,height:`41px`,width:`27px`,viewBox:`0 0 27 41`},[uF(`g`,{"fill-rule":`nonzero`},[uF(`g`,{transform:`translate(3.0, 29.0)`,fill:`#000000`},[[`10.5`,`5.25002273`],[`10.5`,`5.25002273`],[`9.5`,`4.77275007`],[`8.5`,`4.29549936`],[`7.5`,`3.81822308`],[`6.5`,`3.34094679`],[`5.5`,`2.86367051`],[`4.5`,`2.38636864`]].map(([e,t])=>uF(`ellipse`,{opacity:`0.04`,cx:`10.5`,cy:`5.80029008`,rx:e,ry:t}))),uF(`g`,{fill:lF},[uF(`path`,{d:`M27,13.5 C27,19.074644 20.250001,27.000002 14.75,34.500002 C14.016665,35.500004 12.983335,35.500004 12.25,34.500002 C6.7499993,27.000002 0,19.222562 0,13.5 C0,6.0441559 6.0441559,0 13.5,0 C20.955844,0 27,6.0441559 27,13.5 Z`})]),uF(`g`,{opacity:`0.25`,fill:`#000000`},[uF(`path`,{d:`M13.5,0 C6.0441559,0 0,6.0441559 0,13.5 C0,19.222562 6.7499993,27 12.25,34.5 C13,35.522727 14.016664,35.500004 14.75,34.5 C20.250001,27 27,19.074644 27,13.5 C27,6.0441559 20.955844,0 13.5,0 Z M13.5,1 C20.415404,1 26,6.584596 26,13.5 C26,15.898657 24.495584,19.181431 22.220703,22.738281 C19.945823,26.295132 16.705119,30.142167 13.943359,33.908203 C13.743445,34.180814 13.612715,34.322738 13.5,34.441406 C13.387285,34.322738 13.256555,34.180814 13.056641,33.908203 C10.284481,30.127985 7.4148684,26.314159 5.015625,22.773438 C2.6163816,19.232715 1,15.953538 1,13.5 C1,6.584596 6.584596,1 13.5,1 Z`})]),uF(`g`,{transform:`translate(6.0, 7.0)`,fill:`#FFFFFF`}),uF(`g`,{transform:`translate(8.0, 8.0)`},[uF(`circle`,{fill:`#000000`,opacity:`0.25`,cx:`5.5`,cy:`5.5`,r:`5.4999962`}),uF(`circle`,{fill:`#FFFFFF`,cx:`5.5`,cy:`5.5`,r:`5.4999962`})])])]),dF)}function pF(e){return e.firstElementChild.children[1]}var mF=class extends or{},hF=class extends or{},gF=class extends sr{constructor(e){if(super(),this._onClick=e=>{this.fire(new hF(`click`,{originalEvent:e}))},this._onKeyPress=e=>{(e.code===`Space`||e.code===`Enter`)&&this.togglePopup()},this._onKeyDown=e=>{if(!this._defaultMarker||!this._draggable||!this._map||!this._lngLat||e.composedPath()[0]!==this._element||e.altKey||e.ctrlKey||e.metaKey)return;let t=cF[e.key];if(!t)return;e.preventDefault(),e.stopPropagation();let n=e.shiftKey?10:1,r=this._map.project(this._lngLat);this.setLngLat(this._map.unproject(new k(r.x+t[0]*n,r.y+t[1]*n))),this._keyboardDragActive||(this._keyboardDragActive=!0,this.fire(new mF(`dragstart`))),this.fire(new mF(`drag`))},this._onKeyUp=e=>{cF[e.key]&&this._endKeyboardDrag()},this._onBlur=()=>{this._endKeyboardDrag()},this._onMapClick=e=>{let t=e.originalEvent.target,n=this._element;this._popup&&(t===n||n.contains(t))&&this.togglePopup()},this._updateCoveredUnthrottled=()=>{let e=this._map?.terrain;if(!e||!this._isInViewport())return;let t=this._isCovered(e);t&&this._popup?.isOpen()&&this._popup.remove(),this._element.style.opacity=t?this._opacityWhenCovered:this._opacity,this._element.classList.toggle(`maplibregl-marker-covered`,t)},this._updateCovered=RN(this._updateCoveredUnthrottled,100),this._update=e=>{if(!this._map)return;this._lngLat=aF(this._lngLat,this._flatPos,this._map._camera.transform),this._flatPos=this._pos=this._map.project(this._lngLat)._add(this._offset),this._map.terrain&&(this._flatPos=this._map._camera.transform.locationToScreenPoint(this._lngLat)._add(this._offset));let t=``;this._rotationAlignment===`viewport`||this._rotationAlignment===`auto`?t=`rotateZ(${this._rotation}deg)`:this._rotationAlignment===`map`&&(t=`rotateZ(${this._rotation-this._map.getBearing()}deg)`);let n=``;this._pitchAlignment===`viewport`||this._pitchAlignment===`auto`?n=`rotateX(0deg)`:this._pitchAlignment===`map`&&(n=`rotateX(${this._map.getPitch()}deg)`),!this._subpixelPositioning&&e?.type!==`move`&&(this._pos=this._pos.round()),this._element.style.transform=`${oF[this._anchor]} translate(${this._pos.x}px, ${this._pos.y}px) ${n} ${t}`,this._updateOpacity()},this._onMove=e=>{if(!this._isDragging){let t=this._clickTolerance||this._map._clickTolerance;this._isDragging=e.point.dist(this._pointerdownPos)>=t}this._isDragging&&(this._pos=e.point.sub(this._positionDelta),this._lngLat=this._map.unproject(this._pos),this.setLngLat(this._lngLat),this._element.style.pointerEvents=`none`,this._state===`pending`&&(this._state=`active`,this.fire(new mF(`dragstart`))),this.fire(new mF(`drag`)))},this._onUp=()=>{this._element.style.pointerEvents=`auto`,this._positionDelta=null,this._pointerdownPos=null,this._isDragging=!1,this._map.off(`mousemove`,this._onMove),this._map.off(`touchmove`,this._onMove),this._state===`active`&&this.fire(new mF(`dragend`)),this._state=`inactive`},this._addDragHandler=e=>{this._element.contains(e.originalEvent.target)&&(e.preventDefault(),this._positionDelta=e.point.sub(this._pos).add(this._offset),this._pointerdownPos=e.point,this._state=`pending`,this._map.on(`mousemove`,this._onMove),this._map.on(`touchmove`,this._onMove),this._map.once(`mouseup`,this._onUp),this._map.once(`touchend`,this._onUp))},this._anchor=e?.anchor||`center`,this._color=e?.color||lF,this._scale=e?.scale||1,this._draggable=e?.draggable||!1,this._clickTolerance=e?.clickTolerance||0,this._subpixelPositioning=e?.subpixelPositioning||!1,this._isDragging=!1,this._roleManaged=!1,this._tabIndexManaged=!1,this._keyboardDragActive=!1,this._state=`inactive`,this._rotation=e?.rotation||0,this._rotationAlignment=e?.rotationAlignment||`auto`,this._pitchAlignment=e?.pitchAlignment&&e.pitchAlignment!==`auto`?e.pitchAlignment:this._rotationAlignment,this.setOpacity(e?.opacity,e?.opacityWhenCovered),e?.element)this._element=e.element,this._offset=k.convert(e?.offset||[0,0]);else{this._defaultMarker=!0,this._element=Hn.create(`div`);let t=fF().cloneNode(!0);t.setAttributeNS(null,`height`,`${41*this._scale}px`),t.setAttributeNS(null,`width`,`${27*this._scale}px`),pF(t).setAttributeNS(null,`fill`,this._color),this._element.appendChild(t),this._offset=k.convert(e?.offset||[0,-14])}if(this._element.classList.add(`maplibregl-marker`),this._element.addEventListener(`dragstart`,e=>{e.preventDefault()}),this._element.addEventListener(`mousedown`,e=>{e.preventDefault()}),sF(this._element,this._anchor,`marker`),e?.className)for(let t of e.className.split(` `))this._element.classList.add(t);this._popup=null}addTo(e){return this.remove(),this._map=e,this._defaultMarker&&!this._element.hasAttribute(`aria-label`)&&this._element.setAttribute(`aria-label`,e._getUIString(`Marker.Title`)),this._updateAccessibilityRole(),e.getCanvasContainer().appendChild(this._element),e.on(`move`,this._update),e.on(`moveend`,this._update),e.on(`terrain`,this._update),e.on(`projectiontransition`,this._update),e.on(`idle`,this._update),this._element.addEventListener(`click`,this._onClick),this.setDraggable(this._draggable),this._update(),this._map.on(`click`,this._onMapClick),this}remove(){return this._map&&(this._map.off(`click`,this._onMapClick),this._map.off(`move`,this._update),this._map.off(`moveend`,this._update),this._map.off(`terrain`,this._update),this._map.off(`projectiontransition`,this._update),this._map.off(`idle`,this._update),this._map.off(`mousedown`,this._addDragHandler),this._map.off(`touchstart`,this._addDragHandler),this._map.off(`mouseup`,this._onUp),this._map.off(`touchend`,this._onUp),this._map.off(`mousemove`,this._onMove),this._map.off(`touchmove`,this._onMove),delete this._map),this._element.removeEventListener(`click`,this._onClick),this._element.removeEventListener(`keydown`,this._onKeyDown),this._element.removeEventListener(`keyup`,this._onKeyUp),this._element.removeEventListener(`blur`,this._onBlur),this._element.removeEventListener(`keypress`,this._onKeyPress),this._keyboardDragActive=!1,this._element.remove(),this._popup&&this._popup.remove(),this}getLngLat(){return this._lngLat}setLngLat(e){return this._lngLat=X.convert(e),this._pos=null,this._update(),this._popup&&this._popup.setLngLat(this._lngLat),this}getElement(){return this._element}setPopup(e){if(this._popup&&(this._popup.remove(),this._popup=null,this._element.removeEventListener(`keypress`,this._onKeyPress)),e){if(!(`offset`in e.options)){let t=13.5/Math.SQRT2;e.options.offset=this._defaultMarker?{top:[0,0],"top-left":[0,0],"top-right":[0,0],bottom:[0,-38.1],"bottom-left":[t,(24.6+t)*-1],"bottom-right":[-t,(24.6+t)*-1],left:[13.5,-24.6],right:[-13.5,-24.6]}:this._offset}this._popup=e,this._element.addEventListener(`keypress`,this._onKeyPress)}return this._updateTabIndex(),this._updateAccessibilityRole(),this}setSubpixelPositioning(e){return this._subpixelPositioning=e,this}_endKeyboardDrag(){this._keyboardDragActive&&(this._keyboardDragActive=!1,this.fire(new mF(`dragend`)))}getPopup(){return this._popup}togglePopup(){let e=this._popup;if(this._element.style.opacity===this._opacityWhenCovered)return this;if(e)e.isOpen()?e.remove():(e.setLngLat(this._lngLat),e.addTo(this._map));else return this;return this}_updateOpacity(){if(!this._isInViewport())return;let e=this._map?.terrain,t=this._map._camera.transform.isLocationOccluded(this._lngLat);if(!e||t){let e=t?this._opacityWhenCovered:this._opacity;this._element.style.opacity!==e&&(this._element.style.opacity=e,this._element.classList.toggle(`maplibregl-marker-covered`,t))}else this._updateCovered()}_isInViewport(){let{width:e,height:t}=this._map._camera.transform;return!!this._pos&&this._pos.x>=0&&this._pos.y>=0&&this._pos.x<=e&&this._pos.y<=t}_isCovered(e){let t=this._map._camera.transform,n=e.getElevationForLngLat(this._lngLat,t),r=Math.max(0,-this._offset.y)/t.pixelsPerMeter,i=Math.sin(this._map.getPitch()*Math.PI/180)*r;return t.isLocationOccluded(this._lngLat,e,n+i)}getOffset(){return this._offset}setOffset(e){return this._offset=k.convert(e),this._update(),this}addClassName(e){this._element.classList.add(e)}removeClassName(e){this._element.classList.remove(e)}toggleClassName(e){return this._element.classList.toggle(e)}setDraggable(e){return this._draggable=!!e,this._element.classList.toggle(`maplibregl-marker-draggable`,this._draggable),this._map&&(e?(this._map.on(`mousedown`,this._addDragHandler),this._map.on(`touchstart`,this._addDragHandler)):(this._map.off(`mousedown`,this._addDragHandler),this._map.off(`touchstart`,this._addDragHandler))),this._defaultMarker&&(this._draggable?(this._element.addEventListener(`keydown`,this._onKeyDown),this._element.addEventListener(`keyup`,this._onKeyUp),this._element.addEventListener(`blur`,this._onBlur)):(this._element.removeEventListener(`keydown`,this._onKeyDown),this._element.removeEventListener(`keyup`,this._onKeyUp),this._element.removeEventListener(`blur`,this._onBlur),this._endKeyboardDrag())),this._updateTabIndex(),this._updateAccessibilityRole(),this}isDraggable(){return this._draggable}_updateTabIndex(){this._popup||this._defaultMarker&&this._draggable?this._element.hasAttribute(`tabindex`)||(this._element.setAttribute(`tabindex`,`0`),this._tabIndexManaged=!0):this._tabIndexManaged&&=(this._element.getAttribute(`tabindex`)===`0`&&this._element.removeAttribute(`tabindex`),!1)}_updateAccessibilityRole(){if(!this._defaultMarker||this._element.hasAttribute(`role`)&&!this._roleManaged)return;let e=this._draggable||this._popup?`button`:`img`;this._element.setAttribute(`role`,e),this._roleManaged=!0}setRotation(e){return this._rotation=e||0,this._update(),this}getRotation(){return this._rotation}setRotationAlignment(e){return this._rotationAlignment=e||`auto`,this._update(),this}getRotationAlignment(){return this._rotationAlignment}setPitchAlignment(e){return this._pitchAlignment=e&&e!==`auto`?e:this._rotationAlignment,this._update(),this}getPitchAlignment(){return this._pitchAlignment}setOpacity(e,t){return(this._opacity===void 0||e===void 0&&t===void 0)&&(this._opacity=`1`,this._opacityWhenCovered=`0.2`),e!==void 0&&(this._opacity=String(e)),t!==void 0&&(this._opacityWhenCovered=String(t)),this._map&&this._updateOpacity(),this}};[`a[href]`,`[tabindex]:not([tabindex='-1'])`,`[contenteditable]:not([contenteditable='false'])`,`button:not([disabled])`,`input:not([disabled])`,`select:not([disabled])`,`textarea:not([disabled])`].join(`, `);var _F=e=>e?.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase();function vF(e,t,n=[]){if(t==null)throw Error(`[lucide]: iconNode is required when icon name is used`);return{name:_F(e),size:24,node:t,...n.length>0?{aliases:n}:{}}}var yF=e=>{let t=``,n=!1;for(let r of e)r===`-`||r===`_`||r<=` `?n=t.length>0:(t.length===0?t+=r.toLowerCase():t+=n?r.toUpperCase():r,n=!1);return t},bF=e=>{let t=yF(e);return t.charAt(0).toUpperCase()+t.slice(1)},xF=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),SF={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":2,"stroke-linecap":`round`,"stroke-linejoin":`round`};function CF(e){return e!=null}function wF(e,t={}){let n=t.attributeNames??{},r=e=>n[e]??e,i=e.size??e.width??SF.width,a=e.size??e.height??SF.height,o=e.aliases?.filter(e=>typeof e==`string`&&e.trim()!==``).map(e=>`lucide-${e}`)??[],s=[...e.name?[`lucide-${e.name}`]:[],...o],c=t.className?.split(` `).filter(Boolean)??[],l=t.includeDefaultClasses===!1?xF(...c):xF(`lucide`,...s,...c),u=t.absoluteStrokeWidth?Number(t.strokeWidth??SF[`stroke-width`])*Number(e.size??e.width??SF.width)/Number(t.size??t.width??SF.width):t.strokeWidth??SF[`stroke-width`];return[`svg`,{...Object.entries(SF).reduce((e,[t,n])=>(e[r(t)]=n,e),{}),...`color`in t&&t.color&&{[r(`stroke`)]:t.color},...`size`in t&&CF(t.size)&&{[r(`width`)]:t.size,[r(`height`)]:t.size},...`width`in t&&CF(t.width)&&{[r(`width`)]:t.width},...`height`in t&&CF(t.height)&&{[r(`height`)]:t.height},[r(`stroke-width`)]:u,...l&&{[r(`class`)]:l},[r(`viewBox`)]:`0 0 ${i} ${a}`,...t.hasA11yProp===!1?{[r(`aria-hidden`)]:`true`}:{},...`attributes`in t&&t.attributes},e.node.map(e=>{let[n,i,a]=e,o=t.nonScalingStroke?{[r(`vector-effect`)]:`non-scaling-stroke`,...i}:i;return a?[n,o,a]:[n,o]})]}function TF(e,t={}){return wF(e,{...t,attributeNames:{...t.attributeNames,class:`className`,"stroke-width":`strokeWidth`,"stroke-linecap":`strokeLinecap`,"stroke-linejoin":`strokeLinejoin`,"vector-effect":`vectorEffect`}})}var EF=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0;return!1},DF=(0,_.createContext)({}),OF=()=>(0,_.useContext)(DF),kF=(0,_.forwardRef)(({color:e,size:t,width:n,height:r,strokeWidth:i,absoluteStrokeWidth:a,nonScalingStroke:o,className:s=``,children:c,iconNode:l=[],icon:u={node:l,aliases:[],size:24},...d},f)=>{let{size:p=24,strokeWidth:m=2,absoluteStrokeWidth:h=!1,nonScalingStroke:g=!1,color:v=`currentColor`,className:y=``}=OF()??{},b=!!c||EF(d),[x,S,C=[]]=TF(u,{color:e??v,width:n??t??p,height:r??t??p,strokeWidth:i??m,absoluteStrokeWidth:a??h,nonScalingStroke:o??g,className:xF(y,s),hasA11yProp:b,attributes:d});return(0,_.createElement)(x,{ref:f,...S},[...C.map(([e,t])=>(0,_.createElement)(e,t)),...Array.isArray(c)?c:[c]])});function Z(e,t=[],n=[]){let r=typeof e==`string`?vF(e,t,n):e,i=(0,_.forwardRef)(({className:e,...t},n)=>(0,_.createElement)(kF,{ref:n,icon:r,className:e,...t}));return r.name&&(i.displayName=bF(r.name)),i}var AF={name:`arrow-left`,size:24,node:[[`path`,{d:`m12 19-7-7 7-7`,key:`1l729n`}],[`path`,{d:`M19 12H5`,key:`x3x0zl`}]]};AF.node;var jF=Z(AF),MF={name:`bus`,size:24,node:[[`path`,{d:`M8 6v6`,key:`18i7km`}],[`path`,{d:`M15 6v6`,key:`1sg6z9`}],[`path`,{d:`M2 12h19.6`,key:`de5uta`}],[`path`,{d:`M18 18h3s.5-1.7.8-2.8c.1-.4.2-.8.2-1.2 0-.4-.1-.8-.2-1.2l-1.4-5C20.1 6.8 19.1 6 18 6H4a2 2 0 0 0-2 2v10h3`,key:`1wwztk`}],[`circle`,{cx:`7`,cy:`18`,r:`2`,key:`19iecd`}],[`path`,{d:`M9 18h5`,key:`lrx6i`}],[`circle`,{cx:`16`,cy:`18`,r:`2`,key:`1v4tcr`}]]};MF.node;var NF=Z(MF),PF={name:`calendar`,size:24,node:[[`path`,{d:`M8 2v3`,key:`1ioesn`}],[`path`,{d:`M16 2v3`,key:`otl347`}],[`rect`,{x:`3`,y:`3`,width:`18`,height:`18`,rx:`2`,key:`h1oib`}],[`path`,{d:`M3 9h18`,key:`1pudct`}]]};PF.node;var FF=Z(PF),IF={name:`camera`,size:24,node:[[`path`,{d:`M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z`,key:`18u6gg`}],[`circle`,{cx:`12`,cy:`13`,r:`3`,key:`1vg3eu`}]]};IF.node;var LF=Z(IF),RF={name:`car`,size:24,node:[[`path`,{d:`M19 17h2c.6 0 1-.4 1-1v-3c0-.9-.7-1.7-1.5-1.9C18.7 10.6 16 10 16 10s-1.3-1.4-2.2-2.3c-.5-.4-1.1-.7-1.8-.7H5c-.6 0-1.1.4-1.4.9l-1.4 2.9A3.7 3.7 0 0 0 2 12v4c0 .6.4 1 1 1h2`,key:`5owen`}],[`circle`,{cx:`7`,cy:`17`,r:`2`,key:`u2ysq9`}],[`path`,{d:`M9 17h6`,key:`r8uit2`}],[`circle`,{cx:`17`,cy:`17`,r:`2`,key:`axvx0g`}]]};RF.node;var zF=Z(RF),BF={name:`check`,size:24,node:[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]};BF.node;var VF=Z(BF),HF={name:`chevron-left`,size:24,node:[[`path`,{d:`m15 18-6-6 6-6`,key:`1wnfg3`}]]};HF.node;var UF=Z(HF),WF={name:`chevron-right`,size:24,node:[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]};WF.node;var GF=Z(WF),KF={name:`circle-check`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m16 9-5.5 5.5L8 12`,key:`xofnsj`}]],aliases:[`check-circle-2`]};KF.node;var qF=Z(KF),JF={name:`clock`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 6v6l4 2`,key:`mmk7yg`}]]};JF.node;var YF=Z(JF),XF={name:`cloud-rain`,size:24,node:[[`path`,{d:`M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242`,key:`1pljnt`}],[`path`,{d:`M16 14v6`,key:`1j4efv`}],[`path`,{d:`M8 14v6`,key:`17c4r9`}],[`path`,{d:`M12 16v6`,key:`c8a4gj`}]]};XF.node;var ZF=Z(XF),QF={name:`compass`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m16.24 7.76-1.804 5.411a2 2 0 0 1-1.265 1.265L7.76 16.24l1.804-5.411a2 2 0 0 1 1.265-1.265z`,key:`9ktpf1`}]]};QF.node;var $F=Z(QF),eI={name:`crosshair`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`line`,{x1:`22`,x2:`18`,y1:`12`,y2:`12`,key:`l9bcsi`}],[`line`,{x1:`6`,x2:`2`,y1:`12`,y2:`12`,key:`13hhkx`}],[`line`,{x1:`12`,x2:`12`,y1:`6`,y2:`2`,key:`10w3f3`}],[`line`,{x1:`12`,x2:`12`,y1:`22`,y2:`18`,key:`15g9kq`}]]};eI.node;var tI=Z(eI),nI={name:`dollar-sign`,size:24,node:[[`line`,{x1:`12`,x2:`12`,y1:`2`,y2:`22`,key:`7eqyqh`}],[`path`,{d:`M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6`,key:`1b0p4s`}]]};nI.node;var rI=Z(nI),iI={name:`droplets`,size:24,node:[[`path`,{d:`M7 16.3c2.2 0 4-1.83 4-4.05 0-1.16-.57-2.26-1.71-3.19S7.29 6.75 7 5.3c-.29 1.45-1.14 2.84-2.29 3.76S3 11.1 3 12.25c0 2.22 1.8 4.05 4 4.05z`,key:`1ptgy4`}],[`path`,{d:`M12.56 6.6A10.97 10.97 0 0 0 14 3.02c.5 2.5 2 4.9 4 6.5s3 3.5 3 5.5a6.98 6.98 0 0 1-11.91 4.97`,key:`1sl1rz`}]]};iI.node;var aI=Z(iI),oI={name:`ellipsis`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`1`,key:`41hilf`}],[`circle`,{cx:`19`,cy:`12`,r:`1`,key:`1wjl8i`}],[`circle`,{cx:`5`,cy:`12`,r:`1`,key:`1pcz8c`}]],aliases:[`more-horizontal`]};oI.node;var sI=Z(oI),cI={name:`external-link`,size:24,node:[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`M10 14 21 3`,key:`gplh6r`}],[`path`,{d:`M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6`,key:`a6xqqp`}]]};cI.node;var lI=Z(cI),uI={name:`gift`,size:24,node:[[`path`,{d:`M12 7v14`,key:`1akyts`}],[`path`,{d:`M20 11v8a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-8`,key:`1sqzm4`}],[`path`,{d:`M7.5 7a1 1 0 0 1 0-5A4.8 8 0 0 1 12 7a4.8 8 0 0 1 4.5-5 1 1 0 0 1 0 5`,key:`kc0143`}],[`rect`,{x:`3`,y:`7`,width:`18`,height:`4`,rx:`1`,key:`1hberx`}]]};uI.node;var dI=Z(uI),fI={name:`house`,size:24,node:[[`path`,{d:`M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8`,key:`5wwlr5`}],[`path`,{d:`M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z`,key:`r6nss1`}]],aliases:[`home`]};fI.node;var pI=Z(fI),mI={name:`info`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 16v-4`,key:`1dtifu`}],[`path`,{d:`M12 8h.01`,key:`e9boi3`}]]};mI.node;var hI=Z(mI),gI={name:`key`,size:24,node:[[`path`,{d:`m2 21 9.6-9.6`,key:`9l79m3`}],[`path`,{d:`m7.5 15.5 2.3 2.3a1 1 0 0 1 0 1.4l-2.1 2.1a1 1 0 0 1-1.4 0L4 19`,key:`fw8biw`}],[`circle`,{cx:`15.5`,cy:`7.5`,r:`5.5`,key:`4wxmhb`}]]};gI.node;var _I=Z(gI),vI={name:`layers`,size:24,node:[[`path`,{d:`M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z`,key:`zw3jo`}],[`path`,{d:`M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12`,key:`1wduqc`}],[`path`,{d:`M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17`,key:`kqbvx6`}]],aliases:[`layers-3`]};vI.node;var yI=Z(vI),bI={name:`leaf`,size:24,node:[[`path`,{d:`M11 20a10 10 0 0010-10 25.9 25.9 0 00-1.04-7.281 1 1 0 00-1.755-.325C15.833 5.5 13 5.5 9.8 6.1A7 7 0 0011 20`,key:`1wjnjv`}],[`path`,{d:`M2 21a5 5 0 012.911-4.544C7.613 15.212 8.351 15.24 11 13`,key:`c1ejpn`}]]};bI.node;var xI=Z(bI),SI={name:`lock`,size:24,node:[[`rect`,{width:`18`,height:`11`,x:`3`,y:`11`,rx:`2`,ry:`2`,key:`1w4ew1`}],[`path`,{d:`M7 11V7a5 5 0 0 1 10 0v4`,key:`fwvmzm`}]]};SI.node;var CI=Z(SI),wI={name:`map-pin`,size:24,node:[[`path`,{d:`M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0`,key:`1r0f0z`}],[`circle`,{cx:`12`,cy:`10`,r:`3`,key:`ilqhr7`}]]};wI.node;var TI=Z(wI),EI={name:`map`,size:24,node:[[`path`,{d:`M14.106 5.553a2 2 0 0 0 1.788 0l3.659-1.83A1 1 0 0 1 21 4.619v12.764a1 1 0 0 1-.553.894l-4.553 2.277a2 2 0 0 1-1.788 0l-4.212-2.106a2 2 0 0 0-1.788 0l-3.659 1.83A1 1 0 0 1 3 19.381V6.618a1 1 0 0 1 .553-.894l4.553-2.277a2 2 0 0 1 1.788 0z`,key:`169xi5`}],[`path`,{d:`M15 5.764v15`,key:`1pn4in`}],[`path`,{d:`M9 3.236v15`,key:`1uimfh`}]]};EI.node;var DI=Z(EI),OI={name:`maximize-2`,size:24,node:[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`m21 3-7 7`,key:`1l2asr`}],[`path`,{d:`m3 21 7-7`,key:`tjx5ai`}],[`path`,{d:`M9 21H3v-6`,key:`wtvkvv`}]]};OI.node;var kI=Z(OI),AI={name:`minimize-2`,size:24,node:[[`path`,{d:`m14 10 7-7`,key:`oa77jy`}],[`path`,{d:`M20 10h-6V4`,key:`mjg0md`}],[`path`,{d:`m3 21 7-7`,key:`tjx5ai`}],[`path`,{d:`M4 14h6v6`,key:`rmj7iw`}]]};AI.node;var jI=Z(AI),MI={name:`moon`,size:24,node:[[`path`,{d:`M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401`,key:`kfwtm`}]]};MI.node;var NI=Z(MI),PI={name:`navigation`,size:24,node:[[`polygon`,{points:`3 11 22 2 13 21 11 13 3 11`,key:`1ltx0t`}]]};PI.node;var FI=Z(PI),II={name:`plane`,size:24,node:[[`path`,{d:`M17.8 19.2 16 11l3.5-3.5C21 6 21.5 4 21 3c-1-.5-3 0-4.5 1.5L13 8 4.8 6.2c-.5-.1-.9.1-1.1.5l-.3.5c-.2.5-.1 1 .3 1.3L9 12l-2 3H4l-1 1 3 2 2 3 1-1v-3l3-2 3.5 5.3c.3.4.8.5 1.3.3l.5-.2c.4-.3.6-.7.5-1.2z`,key:`1v9wt8`}]]};II.node;var LI=Z(II),RI={name:`plus`,size:24,node:[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]]};RI.node;var zI=Z(RI),BI={name:`radio`,size:24,node:[[`path`,{d:`M16.247 7.761a6 6 0 0 1 0 8.478`,key:`1fwjs5`}],[`path`,{d:`M19.075 4.933a10 10 0 0 1 0 14.134`,key:`ehdyv1`}],[`path`,{d:`M4.925 19.067a10 10 0 0 1 0-14.134`,key:`1q22gi`}],[`path`,{d:`M7.753 16.239a6 6 0 0 1 0-8.478`,key:`r2q7qm`}],[`circle`,{cx:`12`,cy:`12`,r:`2`,key:`1c9p78`}]]};BI.node;var VI=Z(BI),HI={name:`rotate-ccw`,size:24,node:[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}]]};HI.node;var UI=Z(HI),WI={name:`rotate-cw`,size:24,node:[[`path`,{d:`M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8`,key:`1p45f6`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}]]};WI.node;var GI=Z(WI),KI={name:`search`,size:24,node:[[`path`,{d:`m21 21-4.34-4.34`,key:`14j7rj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}]]};KI.node;var qI=Z(KI),JI={name:`share-2`,size:24,node:[[`circle`,{cx:`18`,cy:`5`,r:`3`,key:`gq8acd`}],[`circle`,{cx:`6`,cy:`12`,r:`3`,key:`w7nqdw`}],[`circle`,{cx:`18`,cy:`19`,r:`3`,key:`1xt0gg`}],[`line`,{x1:`8.59`,x2:`15.42`,y1:`13.51`,y2:`17.49`,key:`47mynk`}],[`line`,{x1:`15.41`,x2:`8.59`,y1:`6.51`,y2:`10.49`,key:`1n3mei`}]]};JI.node;var YI=Z(JI),XI={name:`shield`,size:24,node:[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}]]};XI.node;var ZI=Z(XI),QI={name:`ship`,size:24,node:[[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M12 9.189V13`,key:`yp40p3`}],[`path`,{d:`M19 12V6a2 2 0 00-2-2H7a2 2 0 00-2 2v6`,key:`1wcigf`}],[`path`,{d:`M19.38 19A11.6 11.6 0 0021 13l-8.188-3.639a2 2 0 00-1.624 0L3 13.001a11.6 11.6 0 002.81 7.76`,key:`1kdp0u`}],[`path`,{d:`M2 20c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1s1.2 1 2.5 1c2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1`,key:`1l8w7g`}]]};QI.node;var $I=Z(QI),eL={name:`sliders-vertical`,size:24,node:[[`path`,{d:`M10 8h4`,key:`1sr2af`}],[`path`,{d:`M12 21v-9`,key:`17s77i`}],[`path`,{d:`M12 8V3`,key:`13r4qs`}],[`path`,{d:`M17 16h4`,key:`h1uq16`}],[`path`,{d:`M19 12V3`,key:`o1uvq1`}],[`path`,{d:`M19 21v-5`,key:`qua636`}],[`path`,{d:`M3 14h4`,key:`bcjad9`}],[`path`,{d:`M5 10V3`,key:`cb8scm`}],[`path`,{d:`M5 21v-7`,key:`1w1uti`}]],aliases:[`sliders`]};eL.node;var tL=Z(eL),nL={name:`smartphone`,size:24,node:[[`rect`,{width:`14`,height:`20`,x:`5`,y:`2`,rx:`2`,ry:`2`,key:`1yt0o3`}],[`path`,{d:`M12 18h.01`,key:`mhygvu`}]]};nL.node;var rL=Z(nL),iL={name:`sparkles`,size:24,node:[[`path`,{d:`M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z`,key:`1s2grr`}],[`path`,{d:`M20 2v4`,key:`1rf3ol`}],[`path`,{d:`M22 4h-4`,key:`gwowj6`}],[`circle`,{cx:`4`,cy:`20`,r:`2`,key:`6kqj1y`}]],aliases:[`stars`]};iL.node;var aL=Z(iL),oL={name:`sun`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`4`,key:`4exip2`}],[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M12 20v2`,key:`1lh1kg`}],[`path`,{d:`m4.93 4.93 1.41 1.41`,key:`149t6j`}],[`path`,{d:`m17.66 17.66 1.41 1.41`,key:`ptbguv`}],[`path`,{d:`M2 12h2`,key:`1t8f8n`}],[`path`,{d:`M20 12h2`,key:`1q8mjw`}],[`path`,{d:`m6.34 17.66-1.41 1.41`,key:`1m8zz5`}],[`path`,{d:`m19.07 4.93-1.41 1.41`,key:`1shlcs`}]]};oL.node;var sL=Z(oL),cL={name:`tag`,size:24,node:[[`path`,{d:`M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z`,key:`vktsd0`}],[`circle`,{cx:`7.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`kqv944`}]]};cL.node;var lL=Z(cL),uL={name:`tram-front`,size:24,node:[[`rect`,{width:`16`,height:`16`,x:`4`,y:`3`,rx:`2`,key:`1wxw4b`}],[`path`,{d:`M4 11h16`,key:`mpoxn0`}],[`path`,{d:`M12 3v8`,key:`1h2ygw`}],[`path`,{d:`m8 19-2 3`,key:`13i0xs`}],[`path`,{d:`m18 22-2-3`,key:`1p0ohu`}],[`path`,{d:`M8 15h.01`,key:`a7atzg`}],[`path`,{d:`M16 15h.01`,key:`rnfrdf`}]],aliases:[`train`]};uL.node;var dL=Z(uL),fL={name:`trash`,size:24,node:[[`path`,{d:`M10 11v6`,key:`nco0om`}],[`path`,{d:`M14 11v6`,key:`outv1u`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`,key:`miytrc`}],[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`,key:`e791ji`}]],aliases:[`trash-2`]};fL.node;var pL=Z(fL),mL={name:`triangle-alert`,size:24,node:[[`path`,{d:`m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3`,key:`wmoenq`}],[`path`,{d:`M12 9v4`,key:`juzpu7`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]],aliases:[`alert-triangle`]};mL.node;var hL=Z(mL),gL={name:`umbrella`,size:24,node:[[`path`,{d:`M12 13v7a2 2 0 0 0 4 0`,key:`rpgb42`}],[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M20.992 13a1 1 0 0 0 .97-1.274 10.284 10.284 0 0 0-19.923 0A1 1 0 0 0 3 13z`,key:`124nyo`}]]};gL.node;var _L=Z(gL),vL={name:`video`,size:24,node:[[`path`,{d:`m16 13 5.223 3.482a.5.5 0 0 0 .777-.416V7.87a.5.5 0 0 0-.752-.432L16 10.5`,key:`ftymec`}],[`rect`,{x:`2`,y:`6`,width:`14`,height:`12`,rx:`2`,key:`158x01`}]]};vL.node;var yL=Z(vL),bL={name:`volume-2`,size:24,node:[[`path`,{d:`M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z`,key:`uqj9uw`}],[`path`,{d:`M16 9a5 5 0 0 1 0 6`,key:`1q6k2b`}],[`path`,{d:`M19.364 18.364a9 9 0 0 0 0-12.728`,key:`ijwkga`}]]};bL.node;var xL=Z(bL),SL={name:`volume-x`,size:24,node:[[`path`,{d:`M11 4.702a.7.7 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.7.7 0 0 0 11 19.298z`,key:`1p7khw`}],[`path`,{d:`m16.5 14.5 5-5`,key:`cul3yw`}],[`path`,{d:`m16.5 9.5 5 5`,key:`1akey5`}]]};SL.node;var CL=Z(SL),wL={name:`waves-horizontal`,size:24,node:[[`path`,{d:`M2 12q2.5 2 5 0t5 0 5 0 5 0`,key:`8ddzzs`}],[`path`,{d:`M2 19q2.5 2 5 0t5 0 5 0 5 0`,key:`1wj4st`}],[`path`,{d:`M2 5q2.5 2 5 0t5 0 5 0 5 0`,key:`69x50u`}]],aliases:[`waves`]};wL.node;var TL=Z(wL),EL={name:`wind`,size:24,node:[[`path`,{d:`M12.8 19.6A2 2 0 1 0 14 16H2`,key:`148xed`}],[`path`,{d:`M17.5 8a2.5 2.5 0 1 1 2 4H2`,key:`1u4tom`}],[`path`,{d:`M9.8 4.4A2 2 0 1 1 11 8H2`,key:`75valh`}]]};EL.node;var DL=Z(EL),OL={name:`x`,size:24,node:[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]};OL.node;var kL=Z(OL),AL={name:`zap`,size:24,node:[[`path`,{d:`M15.914 4a1.5 1.5 0 00-2.474-1.561l-9 9A1.5 1.5 0 005.5 14h4.002a.5.5 0 01.471.666L8.086 20a1.5 1.5 0 002.475 1.56l9-9A1.5 1.5 0 0018.5 10h-3.997a.5.5 0 01-.472-.667z`,key:`1v7up4`}]]};AL.node;var jL=Z(AL),ML=[{id:`cam-glenshane-summit`,cctvId:`821-1`,name:`A6 Glenshane Pass Summit`,county:`Co. Londonderry`,route:`A6 Glenshane Road`,region:`Passes & Summits`,elevationM:302,lat:54.8821,lng:-6.7842,description:`302m Altitude summit plateau. Primary trans-Ulster arterial mountain pass between Belfast and Derry.`,isMountainPass:!0},{id:`cam-m2-bellevue`,cctvId:`13`,name:`M2 Bellevue Hill Climb / Sandyknowes`,county:`Co. Antrim`,route:`M2 Motorway J4`,region:`Passes & Summits`,elevationM:145,lat:54.6742,lng:-5.9692,description:`Steep motorway incline climbing Bellevue Hill out of Belfast towards Antrim & International Airport.`,isMountainPass:!0},{id:`cam-foyle-bridge`,cctvId:`832-1`,name:`Derry Foyle Bridge & City`,county:`Co. Londonderry`,route:`A515 Foyle Bridge`,region:`Passes & Summits`,elevationM:35,lat:55.0212,lng:-7.3021,description:`Ireland’s longest sea bridge. Monitored for crosswind gale closures and Lough Foyle squalls.`},{id:`cam-mournes-gateway`,cctvId:`3299`,name:`Newry & Mournes Gateway (A1 Camlough)`,county:`Co. Down`,route:`A1 Camlough Interchange`,region:`Passes & Summits`,elevationM:110,lat:54.175,lng:-6.36,description:`Southern artery into Co. Down and the western Mourne passes, linking Belfast and Dublin.`,isMountainPass:!0},{id:`cam-toome-bypass`,cctvId:`3256`,name:`A6 Toome Pass / Lough Neagh Basin`,county:`Co. Antrim`,route:`A6 Toome Expressway`,region:`Passes & Summits`,elevationM:55,lat:54.755,lng:-6.495,description:`Expressway corridor crossing River Bann, monitoring trans-Ulster expressway bottleneck.`},{id:`cam-a6-randalstown`,cctvId:`3250`,name:`A6 Randalstown Bypass`,county:`Co. Antrim`,route:`A6 Dual Carriageway`,region:`A6 Trans-Ulster`,elevationM:48,lat:54.752,lng:-6.32,description:`A6 arterial section between Antrim and Randalstown near Lough Neagh.`},{id:`cam-a6-castledawson`,cctvId:`3251`,name:`A6 Castledawson Roundabout`,county:`Co. Londonderry`,route:`A6 / A31 Interchange`,region:`A6 Trans-Ulster`,elevationM:42,lat:54.786,lng:-6.55,description:`Key junction linking Mid-Ulster and Magherafelt to the A6 northern corridor.`},{id:`cam-a6-maghera`,cctvId:`3255`,name:`A6 Maghera / Glenshane Foothills`,county:`Co. Londonderry`,route:`A6 Maghera Bypass`,region:`A6 Trans-Ulster`,elevationM:120,lat:54.845,lng:-6.67,description:`Lower approach climbing towards Glenshane Pass summit.`},{id:`cam-a6-dungiven`,cctvId:`3260`,name:`A6 Dungiven Bypass Expressway`,county:`Co. Londonderry`,route:`A6 Dungiven Expressway`,region:`A6 Trans-Ulster`,elevationM:95,lat:54.935,lng:-6.92,description:`Western descent of the Sperrins towards Derry and the Roe Valley.`},{id:`cam-westlink-divis`,cctvId:`505`,name:`Belfast Westlink / Divis Corridor`,county:`Co. Antrim`,route:`A12 Westlink`,region:`Belfast & Motorways`,elevationM:45,lat:54.6014,lng:-5.9425,description:`Belfast central throughway below Divis Mountain carrying over 80,000 vehicles daily.`},{id:`cam-westlink-clifton`,cctvId:`503`,name:`Belfast Westlink / Clifton Street`,county:`Co. Antrim`,route:`A12 Westlink / Clifton Jct`,region:`Belfast & Motorways`,elevationM:35,lat:54.606,lng:-5.938,description:`North Belfast junction where the Westlink merges directly into the M2.`},{id:`cam-m1-broadway`,cctvId:`1`,name:`M1 Broadway Roundabout / Westlink Jct`,county:`Co. Antrim`,route:`M1 Motorway J1`,region:`Belfast & Motorways`,elevationM:25,lat:54.584,lng:-5.961,description:`Beginning of the M1 Motorway linking Belfast city centre to southern counties.`},{id:`cam-m1-stockmans`,cctvId:`2`,name:`M1 Stockmans Lane / Musgrave Park`,county:`Co. Antrim`,route:`M1 Motorway J2`,region:`Belfast & Motorways`,elevationM:28,lat:54.571,lng:-5.975,description:`Major South Belfast arterial junction near Musgrave Hospital.`},{id:`cam-m1-blacks-rd`,cctvId:`3`,name:`M1 Blacks Road / Dunmurry`,county:`Co. Antrim`,route:`M1 Motorway J3`,region:`Belfast & Motorways`,elevationM:38,lat:54.555,lng:-5.996,description:`Park & Ride junction climbing towards Dunmurry and Lisburn.`},{id:`cam-m1-blacks-hill`,cctvId:`4`,name:`M1 Blacks Road Hill Section`,county:`Co. Antrim`,route:`M1 Motorway J3/J4`,region:`Belfast & Motorways`,elevationM:52,lat:54.545,lng:-6.012,description:`Elevated motorway cutting prone to early morning congestion.`},{id:`cam-m1-saintfield`,cctvId:`5`,name:`M1 Saintfield Road / Lisburn`,county:`Co. Antrim`,route:`M1 Motorway J6`,region:`Belfast & Motorways`,elevationM:45,lat:54.512,lng:-6.038,description:`Lisburn city gateway connecting Co. Down commuters to Belfast.`},{id:`cam-m1-sprucefield`,cctvId:`6`,name:`M1 Sprucefield Interchange / A1 Fork`,county:`Co. Down`,route:`M1 J7 / A1 Split`,region:`Belfast & Motorways`,elevationM:55,lat:54.492,lng:-6.065,description:`Northern Ireland’s busiest inter-urban junction where M1 splits for Newry & Dublin.`},{id:`cam-m1-blaris`,cctvId:`7`,name:`M1 Blaris / Culcavy`,county:`Co. Down`,route:`M1 Motorway J8`,region:`Belfast & Motorways`,elevationM:48,lat:54.482,lng:-6.095,description:`Western Lisburn stretch heading into the Lagan Valley.`},{id:`cam-m1-moira`,cctvId:`8`,name:`M1 Moira Roundabout`,county:`Co. Down`,route:`M1 Motorway J9`,region:`Belfast & Motorways`,elevationM:62,lat:54.475,lng:-6.21,description:`Gateway to Moira village and the A26 corridor towards Belfast International Airport.`},{id:`cam-m1-lurgan`,cctvId:`9`,name:`M1 Lurgan / Lough Neagh South`,county:`Co. Armagh`,route:`M1 Motorway J10`,region:`Belfast & Motorways`,elevationM:40,lat:54.468,lng:-6.34,description:`Southern Lough Neagh basin prone to dense radiation fog.`},{id:`cam-m1-ballynacor`,cctvId:`10`,name:`M1 Ballynacor / Craigavon`,county:`Co. Armagh`,route:`M1 Motorway J11`,region:`Belfast & Motorways`,elevationM:35,lat:54.462,lng:-6.445,description:`Connecting Craigavon urban district and Portadown.`},{id:`cam-m1-birches`,cctvId:`11`,name:`M1 The Birches / Peatlands Park`,county:`Co. Armagh`,route:`M1 Motorway J12`,region:`Belfast & Motorways`,elevationM:32,lat:54.458,lng:-6.55,description:`Bogland motorway section where low fog ponds from Lough Neagh.`},{id:`cam-m1-tamnamore`,cctvId:`12`,name:`M1 Tamnamore / Dungannon Gateway`,county:`Co. Tyrone`,route:`M1 Motorway J14`,region:`Belfast & Motorways`,elevationM:45,lat:54.475,lng:-6.675,description:`Western terminus of M1 where it transitions into A4 towards Enniskillen.`},{id:`cam-m2-fortwilliam`,cctvId:`14`,name:`M2 Fortwilliam Interchange`,county:`Co. Antrim`,route:`M2 Motorway J1`,region:`Belfast & Motorways`,elevationM:15,lat:54.628,lng:-5.925,description:`North Belfast sea-level corridor along Belfast Lough.`},{id:`cam-m2-duncrue`,cctvId:`15`,name:`M2 Duncrue Street / Belfast Port`,county:`Co. Antrim`,route:`M2 Duncrue Complex`,region:`Belfast & Motorways`,elevationM:8,lat:54.618,lng:-5.922,description:`Port of Belfast commercial container freight arterial.`},{id:`cam-m2-nelson`,cctvId:`16`,name:`M2 Nelson Street / Yorkgate`,county:`Co. Antrim`,route:`M2 Inbound`,region:`Belfast & Motorways`,elevationM:10,lat:54.609,lng:-5.926,description:`City centre inbound merge at Yorkgate.`},{id:`cam-sydenham-airport`,cctvId:`104`,name:`Sydenham Bypass / Belfast City Airport`,county:`Co. Down`,route:`A2 Sydenham Bypass`,region:`Belfast & Motorways`,elevationM:12,lat:54.615,lng:-5.875,description:`Direct approach to George Best Belfast City Airport and Harland & Wolff cranes.`},{id:`cam-knocknagoney`,cctvId:`105`,name:`Knocknagoney / Holywood Arches`,county:`Co. Down`,route:`A2 Knocknagoney Jct`,region:`Belfast & Motorways`,elevationM:20,lat:54.618,lng:-5.85,description:`Commuter junction linking East Belfast to the Holywood coastal route.`},{id:`cam-a1-hillsborough`,cctvId:`3295`,name:`A1 Hillsborough / Dromore Corridor`,county:`Co. Down`,route:`A1 Dual Carriageway`,region:`A1 & Mournes Gateway`,elevationM:95,lat:54.435,lng:-6.115,description:`Rolling hill section of A1 prone to heavy cross-border commuter flow.`},{id:`cam-a1-banbridge`,cctvId:`3298`,name:`A1 Banbridge Bypass`,county:`Co. Down`,route:`A1 Banbridge Corridor`,region:`A1 & Mournes Gateway`,elevationM:80,lat:54.345,lng:-6.275,description:`Major arterial bridge crossing River Bann in County Down.`},{id:`cam-a1-sheepbridge`,cctvId:`3300`,name:`A1 Sheepbridge / Newry North`,county:`Co. Down`,route:`A1 North Newry Jct`,region:`A1 & Mournes Gateway`,elevationM:65,lat:54.215,lng:-6.335,description:`North entrance into Newry basin with views of the Mourne foothills.`},{id:`cam-a2-bangor`,cctvId:`108`,name:`A2 Bangor Road / Ballyrobert`,county:`Co. Down`,route:`A2 Bangor Dual Carriageway`,region:`North & Antrim Coast`,elevationM:35,lat:54.652,lng:-5.735,description:`Primary coastal highway connecting Belfast, Holywood, and Bangor.`},{id:`cam-a2-shore-greenisland`,cctvId:`115`,name:`A2 Shore Road / Greenisland & Carrick`,county:`Co. Antrim`,route:`A2 Shore Road`,region:`North & Antrim Coast`,elevationM:18,lat:54.702,lng:-5.875,description:`Antrim coast artery below Knockagh Monument leading to Carrickfergus Castle.`},{id:`cam-a8-larne`,cctvId:`125`,name:`A8 Larne Bypass Expressway`,county:`Co. Antrim`,route:`A8 Dual Carriageway`,region:`North & Antrim Coast`,elevationM:110,lat:54.835,lng:-5.85,description:`High-speed dual carriageway crossing Antrim hills towards Larne ferry terminal.`},{id:`cam-a26-frosses`,cctvId:`202`,name:`A26 Frosses Road / Ballymena North`,county:`Co. Antrim`,route:`A26 Frosses Dual Carriageway`,region:`North & Antrim Coast`,elevationM:75,lat:54.915,lng:-6.295,description:`Famous Scots Pine lined corridor heading towards Coleraine and North Coast.`},{id:`cam-a26-crankill`,cctvId:`215`,name:`A26 Crankill Road / Glarryford`,county:`Co. Antrim`,route:`A26 Glarryford`,region:`North & Antrim Coast`,elevationM:68,lat:54.965,lng:-6.335,description:`Central Antrim corridor between Ballymena and Ballymoney.`},{id:`cam-a5-omagh`,cctvId:`301`,name:`A5 Omagh Bypass / Doogary`,county:`Co. Tyrone`,route:`A5 Omagh South`,region:`Tyrone & West`,elevationM:75,lat:54.585,lng:-7.285,description:`County Tyrone heartland crossroads connecting Derry, Strabane, and Monaghan.`}],NL=[{id:`cargo-dhl-q400`,type:`air_freight`,callsign:`BCS611`,name:`DHL Air UK Express`,operator:`DHL Express Freight`,origin:`East Midlands (EMA)`,destination:`Belfast International (BFS)`,lat:54.678,lng:-6.12,headingDeg:285,speedUnit:`kts`,speedVal:240,altitudeFt:4200,cargoDescription:`Express Parcels, High-Value E-Commerce & Time-Critical Freight`,status:`IN_TRANSIT`,hub:`Belfast International (BFS)`},{id:`cargo-royal-mail-b737`,type:`air_freight`,callsign:`TAY29A`,name:`ASL Airlines / Royal Mail Airmail`,operator:`Royal Mail Night Freight`,origin:`Stansted (STN)`,destination:`Belfast International (BFS)`,lat:54.635,lng:-6.045,headingDeg:290,speedUnit:`kts`,speedVal:215,altitudeFt:3100,cargoDescription:`1st Class Trans-Ulster Postal Air Bags & Priority Freight`,status:`APPROACHING_BERTH`,hub:`Belfast International (BFS)`},{id:`cargo-swissport-cargo`,type:`air_freight`,callsign:`SWP802`,name:`Swissport Cargo Global`,operator:`Swissport Cargo BFS`,origin:`Belfast International (BFS)`,destination:`Frankfurt (FRA)`,lat:54.695,lng:-6.31,headingDeg:110,speedUnit:`kts`,speedVal:280,altitudeFt:7800,cargoDescription:`Pharmaceuticals, Aerospace Engine Spares & Medical Supplies`,status:`IN_TRANSIT`,hub:`Belfast International (BFS)`},{id:`vessel-stena-superfast-vii`,type:`maritime_roro`,callsign:`MBSF7`,name:`Stena Superfast VII`,operator:`Stena Line Freight & Passenger`,origin:`Cairnryan (Scotland)`,destination:`Belfast Harbour (VT4 Terminal)`,lat:54.745,lng:-5.71,headingDeg:245,speedUnit:`kts`,speedVal:21.4,cargoDescription:`130 Commercial Articulated HGVs, Chilled Food Trailers & Vehicles`,grossTonnage:30285,status:`IN_TRANSIT`,hub:`Belfast Harbour`},{id:`vessel-stena-embla`,type:`maritime_roro`,callsign:`STEMB`,name:`Stena Embla (E-Flexer RoRo)`,operator:`Stena Line Irish Sea`,origin:`Birkenhead / Liverpool`,destination:`Belfast Harbour (VT2 Quay)`,lat:54.632,lng:-5.58,headingDeg:280,speedUnit:`kts`,speedVal:19.8,cargoDescription:`3,100 Lane Meters of Heavy Freight, Agri-Food Haulage & Containers`,grossTonnage:41671,status:`IN_TRANSIT`,hub:`Belfast Harbour`},{id:`vessel-po-european-causeway`,type:`maritime_roro`,callsign:`POEC1`,name:`European Causeway`,operator:`P&O Ferries Freight`,origin:`Port of Larne (Curran Quay)`,destination:`Cairnryan (Loch Ryan)`,lat:54.895,lng:-5.685,headingDeg:55,speedUnit:`kts`,speedVal:20.6,cargoDescription:`Just-In-Time Supply Chain Haulage & Supermarket Super-Trailers`,grossTonnage:20646,status:`IN_TRANSIT`,hub:`Port of Larne`},{id:`vessel-bg-freight-belfast`,type:`container_ship`,callsign:`BGF88`,name:`B.G. Freight Emerald`,operator:`BG Freight Line Container Services`,origin:`Rotterdam (Netherlands)`,destination:`Belfast Container Terminal (VT3)`,lat:54.685,lng:-5.79,headingDeg:220,speedUnit:`kts`,speedVal:12.8,cargoDescription:`504 TEU Mixed ISO Shipping Containers, Electronics & Retail Goods`,containerTeu:504,grossTonnage:7850,status:`APPROACHING_BERTH`,hub:`Belfast Harbour`},{id:`vessel-seatruck-progress`,type:`container_ship`,callsign:`STPRG`,name:`Seatruck Progress`,operator:`Seatruck Ferries Ltd`,origin:`Heysham (Lancashire)`,destination:`Warrenpoint Port (Carlingford Lough)`,lat:54.105,lng:-6.085,headingDeg:305,speedUnit:`kts`,speedVal:15.2,cargoDescription:`Unaccompanied Freight Trailers & Cross-Border Logistics`,grossTonnage:18920,status:`APPROACHING_BERTH`,hub:`Warrenpoint Port`},{id:`vessel-arklow-bulk`,type:`bulk_carrier`,callsign:`EIAK2`,name:`Arklow River (Bulk Grain & Aggregates)`,operator:`Arklow Shipping Logistics`,origin:`Avonmouth (Bristol Channel)`,destination:`Belfast Harbour (West Bank Silo)`,lat:54.645,lng:-5.84,headingDeg:250,speedUnit:`kts`,speedVal:9.8,cargoDescription:`4,500 Tonnes Milling Wheat & Livestock Feed Grain`,grossTonnage:4950,status:`IN_TRANSIT`,hub:`Belfast Harbour`},{id:`vessel-mv-strangford-ii`,type:`lough_ferry`,callsign:`STRNG2`,name:`MV Strangford II (Vehicle Ferry)`,operator:`DfI Strangford Lough Ferry Service`,origin:`Strangford Terminal`,destination:`Portaferry Slipway`,lat:54.376,lng:-5.552,headingDeg:78,speedUnit:`kts`,speedVal:6.5,cargoDescription:`28 Motor Vehicles, Commercial Delivery Vans & Foot Passengers`,status:`IN_TRANSIT`,hub:`Strangford Lough`},{id:`vessel-spirit-of-rathlin`,type:`lough_ferry`,callsign:`RATH1`,name:`Spirit of Rathlin (Island Lifeline)`,operator:`Rathlin Island Ferry Ltd`,origin:`Ballycastle Harbour`,destination:`Church Bay (Rathlin Island)`,lat:55.255,lng:-6.21,headingDeg:355,speedUnit:`kts`,speedVal:11.2,cargoDescription:`Island Fuel Supplies, Groceries, Postal Sacks & Passenger Transit`,status:`IN_TRANSIT`,hub:`Port of Larne`}],PL=[{id:`corridor-westlink`,name:`A12 Westlink Urban Bottleneck`,routeCode:`A12 Westlink`,region:`Belfast Urban Core`,startPoint:`M1 J1 Broadway Roundabout`,endPoint:`M2 J1 York Street / Clifton`,lengthKm:4.2,freeFlowMinutes:5,currentMinutes:14,averageSpeedMph:22,speedLimitMph:50,status:`MODERATE_DELAY`,chokepoints:[`Broadway Underpass`,`Grosvenor Road Off-slip`,`Divis Street Inbound`],detourAdvice:`Heavy standstill northbound. Divert via Knockbreda Outer Ring / Shaws Bridge or Sydenham Bypass.`,coordinates:[[-5.961,54.584],[-5.954,54.59],[-5.947,54.596],[-5.9425,54.6014],[-5.938,54.606],[-5.926,54.609]]},{id:`corridor-m2-bellevue`,name:`M2 Northbound Bellevue Climb`,routeCode:`M2 Motorway`,region:`Belfast & South Antrim`,startPoint:`M2 J1 Fortwilliam`,endPoint:`M2 J4 Sandyknowes Roundabout`,lengthKm:8.5,freeFlowMinutes:6,currentMinutes:8,averageSpeedMph:54,speedLimitMph:70,status:`FREE_FLOW`,chokepoints:[`Bellevue Hill Motorway Climb`,`J2 Greencastle Merge`],coordinates:[[-5.925,54.628],[-5.936,54.643],[-5.952,54.658],[-5.9692,54.6742],[-5.992,54.679]]},{id:`corridor-a6-glenshane`,name:`A6 Glenshane Trans-Ulster Summit`,routeCode:`A6 Expressway`,region:`Co. Londonderry`,startPoint:`Maghera Bypass (A6)`,endPoint:`Dungiven Expressway (A6)`,lengthKm:24,freeFlowMinutes:18,currentMinutes:19,averageSpeedMph:55,speedLimitMph:60,status:`FREE_FLOW`,chokepoints:[`Glenshane Pass 302m Summit Plateau`,`Carntogher Incline`],coordinates:[[-6.67,54.845],[-6.72,54.862],[-6.7842,54.8821],[-6.85,54.91],[-6.92,54.935]]},{id:`corridor-m1-lisburn`,name:`M1 Belfast to Lisburn & Sprucefield`,routeCode:`M1 Motorway`,region:`Lagan Valley`,startPoint:`M1 J1 Broadway`,endPoint:`M1 J7 Sprucefield A1 Fork`,lengthKm:14.2,freeFlowMinutes:11,currentMinutes:16,averageSpeedMph:45,speedLimitMph:70,status:`MODERATE_DELAY`,chokepoints:[`J2 Stockmans Lane`,`J3 Blacks Road Hill`,`J6 Saintfield Road`],detourAdvice:`Tailbacks easing after Blacks Road hill section.`,coordinates:[[-5.961,54.584],[-5.975,54.571],[-5.996,54.555],[-6.012,54.545],[-6.038,54.512],[-6.065,54.492]]},{id:`corridor-a1-border`,name:`A1 Sprucefield to Newry & Cross-Border`,routeCode:`A1 Dual Carriageway`,region:`Co. Down & Armagh`,startPoint:`Sprucefield Interchange`,endPoint:`Newry / Border (Cloghoge)`,lengthKm:42,freeFlowMinutes:30,currentMinutes:32,averageSpeedMph:56,speedLimitMph:60,status:`FREE_FLOW`,chokepoints:[`Hillsborough Roundabout`,`Banbridge Flyover`,`Sheepbridge`],coordinates:[[-6.065,54.492],[-6.115,54.435],[-6.185,54.39],[-6.275,54.345],[-6.315,54.28],[-6.335,54.215],[-6.36,54.175]]},{id:`corridor-a2-sydenham`,name:`A2 Sydenham Bypass & Airport Corridor`,routeCode:`A2 Dual Carriageway`,region:`East Belfast & North Down`,startPoint:`Belfast M3 Lagan Bridge`,endPoint:`Knocknagoney / Holywood Bypass`,lengthKm:6.8,freeFlowMinutes:6,currentMinutes:9,averageSpeedMph:36,speedLimitMph:50,status:`FREE_FLOW`,chokepoints:[`George Best Belfast City Airport Terminal Turn-off`,`Tillysburn Roundabout`],coordinates:[[-5.915,54.602],[-5.895,54.608],[-5.875,54.615],[-5.85,54.618]]}],FL=[{id:`gauge-lagan-stranmillis`,name:`Stranmillis Weir (Belfast)`,riverName:`River Lagan`,county:`Co. Antrim & Down`,lat:54.575,lng:-5.928,currentLevelM:1.45,normalLevelM:1.2,floodThresholdM:2.1,trend:`STEADY`,status:`NORMAL`,lastUpdatedStr:`Live (5m update)`},{id:`gauge-lagan-shaws-bridge`,name:`Shaw's Bridge (South Belfast)`,riverName:`River Lagan`,county:`Co. Down`,lat:54.551,lng:-5.945,currentLevelM:1.82,normalLevelM:1.4,floodThresholdM:2.3,trend:`RISING`,status:`ELEVATED`,lastUpdatedStr:`Live (5m update)`},{id:`gauge-foyle-strabane`,name:`Strabane / Lifford Confluence`,riverName:`River Foyle / Mourne`,county:`Co. Tyrone`,lat:54.825,lng:-7.472,currentLevelM:2.15,normalLevelM:1.8,floodThresholdM:3.4,trend:`STEADY`,status:`NORMAL`,lastUpdatedStr:`Live (5m update)`},{id:`gauge-bann-portadown`,name:`Portadown Bridge (Upper Bann)`,riverName:`Upper River Bann`,county:`Co. Armagh`,lat:54.422,lng:-6.448,currentLevelM:1.65,normalLevelM:1.3,floodThresholdM:2.5,trend:`RISING`,status:`ELEVATED`,lastUpdatedStr:`Live (5m update)`},{id:`gauge-bann-toome`,name:`Toome Sluice Gates (Lough Neagh Outlet)`,riverName:`Lower River Bann`,county:`Co. Antrim`,lat:54.756,lng:-6.494,currentLevelM:1.1,normalLevelM:1.05,floodThresholdM:1.95,trend:`STEADY`,status:`NORMAL`,lastUpdatedStr:`Live (5m update)`},{id:`gauge-bush-bushmills`,name:`Bushmills Salmon Leap`,riverName:`River Bush`,county:`Co. Antrim`,lat:55.204,lng:-6.522,currentLevelM:.95,normalLevelM:.8,floodThresholdM:1.7,trend:`FALLING`,status:`NORMAL`,lastUpdatedStr:`Live (5m update)`}],IL=[{icao24:`4009f4`,callsign:`EZY482`,flightNumber:`U2458`,airline:`EasyJet`,route:`London Gatwick (LGW) ➔ Belfast Intl (BFS)`,aircraftType:`Airbus A320-214`,originCountry:`United Kingdom`,lng:-6.152,lat:54.685,altitudeFt:8400,velocityKts:265,headingDeg:285,verticalRateFpm:-1200,onGround:!1},{icao24:`4ca761`,callsign:`RYR668`,flightNumber:`FR668`,airline:`Ryanair`,route:`Edinburgh (EDI) ➔ Belfast Intl (BFS)`,aircraftType:`Boeing 737-800`,originCountry:`Ireland`,lng:-5.842,lat:54.71,altitudeFt:5800,velocityKts:240,headingDeg:275,verticalRateFpm:-800,onGround:!1},{icao24:`407519`,callsign:`BAW1416`,flightNumber:`BA1416`,airline:`British Airways`,route:`London Heathrow (LHR) ➔ Belfast City (BHD)`,aircraftType:`Airbus A320neo`,originCountry:`United Kingdom`,lng:-5.62,lat:54.45,altitudeFt:11200,velocityKts:310,headingDeg:310,verticalRateFpm:-1400,onGround:!1},{icao24:`4ca821`,callsign:`EAI3662`,flightNumber:`EI3662`,airline:`Aer Lingus`,route:`Dublin (DUB) ➔ Belfast City (BHD)`,aircraftType:`ATR 72-600`,originCountry:`Ireland`,lng:-6.045,lat:54.39,altitudeFt:4600,velocityKts:215,headingDeg:20,verticalRateFpm:-600,onGround:!1},{icao24:`4ca993`,callsign:`RYR274`,flightNumber:`FR274`,airline:`Ryanair`,route:`Manchester (MAN) ➔ Belfast Intl (BFS)`,aircraftType:`Boeing 737-800`,originCountry:`Ireland`,lng:-5.72,lat:54.58,altitudeFt:7600,velocityKts:255,headingDeg:290,verticalRateFpm:-900,onGround:!1},{icao24:`406a12`,callsign:`RESCUE-999`,airline:`HM Coastguard SAR`,route:`Irish Sea & Mournes Maritime Patrol`,aircraftType:`Sikorsky S-92 Helicopter`,originCountry:`United Kingdom`,lng:-5.85,lat:54.21,altitudeFt:1850,velocityKts:135,headingDeg:45,verticalRateFpm:100,onGround:!1,isEmergency:!0},{icao24:`4011aa`,callsign:`SCOT-99`,airline:`PSNI Air Support`,route:`Belfast Urban Patrol & Motorway Recon`,aircraftType:`Eurocopter EC135 T2+`,originCountry:`United Kingdom`,lng:-5.945,lat:54.595,altitudeFt:1200,velocityKts:95,headingDeg:180,verticalRateFpm:0,onGround:!1,isEmergency:!0},{icao24:`4055cc`,callsign:`HELI-MED23`,airline:`NI Air Ambulance`,route:`Maze Long Kesh HQ ➔ Royal Victoria Hospital`,aircraftType:`Airbus H145 EMS`,originCountry:`United Kingdom`,lng:-6.012,lat:54.515,altitudeFt:1450,velocityKts:130,headingDeg:35,verticalRateFpm:-200,onGround:!1,isEmergency:!0},{icao24:`4d01b4`,callsign:`BCS611`,flightNumber:`BCS611`,airline:`DHL Air UK Express`,route:`East Midlands (EMA) ➔ Belfast Intl (BFS)`,aircraftType:`Boeing 757-200SF Freighter`,originCountry:`United Kingdom`,lng:-6.085,lat:54.662,altitudeFt:3800,velocityKts:220,headingDeg:285,verticalRateFpm:-900,onGround:!1,isCargo:!0},{icao24:`4009f5`,callsign:`EZY466`,flightNumber:`U2466`,airline:`EasyJet`,route:`London Luton (LTN) ➔ Belfast Intl (BFS)`,aircraftType:`Airbus A320`,originCountry:`United Kingdom`,lng:-5.92,lat:54.52,altitudeFt:12500,velocityKts:295,headingDeg:305,verticalRateFpm:-1100,onGround:!1},{icao24:`485901`,callsign:`KLM949`,flightNumber:`KL949`,airline:`KLM Royal Dutch`,route:`Amsterdam (AMS) ➔ Belfast City (BHD)`,aircraftType:`Embraer E195-E2`,originCountry:`Netherlands`,lng:-5.58,lat:54.49,altitudeFt:9800,velocityKts:280,headingDeg:315,verticalRateFpm:-1e3,onGround:!1},{icao24:`4005aa`,callsign:`LOG34B`,airline:`Loganair`,route:`City of Derry (LDY) ➔ Glasgow (GLA)`,aircraftType:`Embraer ERJ-145`,originCountry:`United Kingdom`,lng:-7.12,lat:55.08,altitudeFt:14600,velocityKts:330,headingDeg:65,verticalRateFpm:1500,onGround:!1}],LL=new class{lastFetch=0;flights=[...IL];async getLiveFlights(){let e=Date.now();if(e-this.lastFetch<1e4&&this.flights.length>0)return this.flights;try{let t=await fetch(`/api/flights`);if(t.ok){let n=await t.json();if(n.flights&&Array.isArray(n.flights)&&n.flights.length>0)return this.flights=n.flights,this.lastFetch=e,this.flights}}catch{}return this.flights=this.flights.map(e=>{let t=e.velocityKts*1.852/3600*10,n=e.headingDeg*Math.PI/180,r=t*Math.cos(n)/111,i=t*Math.sin(n)/(111*Math.cos(e.lat*Math.PI/180)),a=e.lat+r,o=e.lng+i;return a>55.6&&(a=54),a<53.8&&(a=55.3),o>-5&&(o=-8.2),o<-8.5&&(o=-5.3),{...e,lat:Number(a.toFixed(5)),lng:Number(o.toFixed(5))}}),this.lastFetch=e,this.flights}advanceFlightPositions(e=1){return this.flights=this.flights.map(t=>{let n=t.velocityKts*1.852/3600*e,r=t.headingDeg*Math.PI/180,i=n*Math.cos(r)/111,a=n*Math.sin(r)/(111*Math.cos(t.lat*Math.PI/180)),o=t.lat+i,s=t.lng+a;return o>55.6&&(o=54),o<53.8&&(o=55.3),s>-5&&(s=-8.2),s<-8.5&&(s=-5.3),{...t,lat:Number(o.toFixed(5)),lng:Number(s.toFixed(5))}}),this.flights}},RL=[{id:`strat-a6-toome`,route:`A6 Randalstown`,location:`Between Randalstown (M22 J3) & Toome Bypass`,county:`Antrim`,type:`Closure`,description:`Road closed in both directions due to serious two-vehicle collision investigation and fuel spill cleanup`,dates:`Expected clear 13:00`,severity:`STANDSTILL`,lat:54.7405,lng:-6.34445,closedStretchCoordinates:[[-6.30534,54.74134],[-6.31041,54.74259],[-6.31545,54.74661],[-6.3212,54.7425],[-6.32764,54.74202],[-6.33419,54.74132],[-6.33925,54.74087],[-6.34445,54.7405],[-6.35272,54.7399],[-6.35994,54.73939],[-6.36714,54.73886],[-6.3723,54.7385],[-6.37787,54.73846],[-6.38396,54.73907],[-6.38962,54.73963],[-6.39537,54.73975],[-6.40295,54.74049],[-6.40956,54.74105],[-6.41595,54.74096],[-6.422,54.74098],[-6.42757,54.7417],[-6.43352,54.7433],[-6.43868,54.7452],[-6.44441,54.74729],[-6.44987,54.75088],[-6.45273,54.7544]],diversionCoordinates:[[-6.31425,54.75001],[-6.31796,54.74921],[-6.32141,54.75033],[-6.32818,54.74937],[-6.33575,54.7489],[-6.34781,54.74954],[-6.35732,54.74936],[-6.36037,54.75063],[-6.3615,54.7526],[-6.36186,54.75335],[-6.36414,54.75263],[-6.37305,54.75407],[-6.38371,54.75752],[-6.39392,54.75828],[-6.40481,54.75624],[-6.41537,54.75071],[-6.42097,54.75142],[-6.42623,54.75051],[-6.42825,54.74545],[-6.44361,54.74827],[-6.44709,54.74988],[-6.44907,54.74966],[-6.45506,54.75773],[-6.45697,54.75965],[-6.45266,54.75429]],diversionAdvice:`Divert via Castle Road ➔ B18 Neillsbrook Road ➔ Staffordstown ➔ Moneynick ➔ rejoin Toome Bypass (+8 mins)`,delayMins:12}],zL=new class{cache=[...RL];lastFetchTime=0;isFetching=!1;constructor(){this.init()}init(){try{let e=localStorage.getItem(`ispy_live_roadworks_cache`);if(e){let t=JSON.parse(e);Array.isArray(t)&&t.length>0&&(this.cache=t)}}catch{}this.refreshLiveIncidents()}getCachedIncidents(){return this.cache}async refreshLiveIncidents(){if(this.isFetching)return this.cache;let e=Date.now();if(this.cache.length>0&&e-this.lastFetchTime<3e4)return this.cache;this.isFetching=!0;try{let e=[`/api/incidents`,`http://localhost:3010/api/incidents`],t=null;for(let n of e)try{let e=new AbortController,r=setTimeout(()=>e.abort(),3500),i=await fetch(n,{signal:e.signal});if(clearTimeout(r),i.ok&&(t=await i.json(),t?.incidents&&Array.isArray(t.incidents)&&t.incidents.length>0))break}catch{}if(t?.incidents&&Array.isArray(t.incidents)&&t.incidents.length>0){let e=t.incidents.map(e=>this.validateClosure(e));this.cache=e,this.lastFetchTime=Date.now();try{localStorage.setItem(`ispy_live_roadworks_cache`,JSON.stringify(this.cache))}catch{}return this.cache}}catch(e){console.warn(`[RoadIncidentService] Fetch fallback active:`,e)}finally{this.isFetching=!1}return this.cache}validateClosure(e){let t=typeof e.lat==`number`?e.lat:54.5973,n=typeof e.lng==`number`?e.lng:-5.9301,r=Array.isArray(e.closedStretchCoordinates)&&e.closedStretchCoordinates.length>=2?e.closedStretchCoordinates:[[n-.004,t-.002],[n-.002,t-.001],[n,t],[n+.002,t+.001],[n+.004,t+.002]],i=Array.isArray(e.diversionCoordinates)&&e.diversionCoordinates.length>=2?e.diversionCoordinates:[r[0],[n-.002,t+.004],[n+.002,t+.004],r[r.length-1]];return{id:String(e.id||`inc-${Date.now()}`),route:String(e.route||`Northern Ireland Corridor`),location:String(e.location||`Northern Ireland`),county:String(e.county||`Antrim`),type:e.type||`Roadworks`,description:String(e.description||`Active roadworks and traffic management in place.`),dates:String(e.dates||`Active Now`),severity:e.severity||`MODERATE_DELAY`,lat:t,lng:n,closedStretchCoordinates:r,diversionCoordinates:i,diversionAdvice:String(e.diversionAdvice||`Follow local signs and proceed with caution.`),delayMins:typeof e.delayMins==`number`?e.delayMins:8}}},BL={currentOutages:4,propertiesAffected:1240,breakdown:[{id:`pwr-antrim-bt41`,region:`Antrim Area`,county:`Antrim`,affected:320,status:`Crews on site`,estRestoration:`13:30`,lat:54.718,lng:-6.216,postcodePrefix:`BT41`,faultRef:`#NIE-84920`,cause:`Overhead 11kV conductor trip due to localized storm gust`,loggedTime:`09:42`},{id:`pwr-ballymena-bt42`,region:`Ballymena Rural`,county:`Antrim`,affected:410,status:`Fault localized`,estRestoration:`14:15`,lat:54.864,lng:-6.278,postcodePrefix:`BT42`,faultRef:`#NIE-84918`,cause:`Distribution substation feeder breaker opened`,loggedTime:`08:15`},{id:`pwr-lisburn-bt27`,region:`Lisburn South`,county:`Down`,affected:210,status:`Repair in progress`,estRestoration:`12:45`,lat:54.509,lng:-6.042,postcodePrefix:`BT27`,faultRef:`#NIE-84915`,cause:`Underground cable joint fault under excavation repair`,loggedTime:`10:04`},{id:`pwr-omagh-bt78`,region:`Omagh North`,county:`Tyrone`,affected:300,status:`Overhead investigation`,estRestoration:`15:00`,lat:54.602,lng:-7.301,postcodePrefix:`BT78`,faultRef:`#NIE-84904`,cause:`Pole-mounted transformer inspection in progress`,loggedTime:`07:50`}]},VL=[{mode:`Rail`,status:`Normal Service`,details:`All NIR lines operating on schedule (Bangor, Larne, Derry, Enterprise)`,badgeColor:`emerald`,lineBreakdown:[{route:`Bangor to Portadown`,status:`On Time`,notice:`Good service across all stops`},{route:`Belfast to Derry~Londonderry`,status:`On Time`,notice:`Scenic rail running on timetable`},{route:`Larne Line`,status:`On Time`,notice:`Normal service`},{route:`Dublin Enterprise`,status:`On Time`,notice:`Cross-border flagship operating normally`}]},{mode:`Buses`,status:`Some Delays`,details:`Metro services 1, 2, 7 & 10 delayed 8-15 mins due to Westlink & City Centre congestion`,badgeColor:`amber`,lineBreakdown:[{route:`Metro 1 (Antrim Road)`,status:`Minor Delays (+8 mins)`,notice:`Congestion near Carlisle Circus`},{route:`Metro 2 (Shore Road)`,status:`On Time`,notice:`Good service`},{route:`Metro 7 (Castlereagh)`,status:`Minor Delays (+10 mins)`,notice:`Heavy peak hour queue`},{route:`Metro 10 (Falls Road)`,status:`Moderate Delays (+15 mins)`,notice:`Westlink slip road back up`}]},{mode:`Glider`,status:`Normal Service`,details:`G1 (West-East) & G2 (Titanic Quarter) running at 7-8 min frequency`,badgeColor:`emerald`,lineBreakdown:[{route:`Glider G1 (McKinstry Road ➔ Dundonald)`,status:`High Frequency`,notice:`Arriving every 7 mins`},{route:`Glider G2 (City Hall ➔ Titanic Quarter)`,status:`High Frequency`,notice:`Arriving every 8 mins`}]},{mode:`Ulsterbus`,status:`Normal Service`,details:`Express 212 (Derry) & 238 (Newry) running on timetable`,badgeColor:`emerald`,lineBreakdown:[{route:`Goldliner 212 (Belfast ➔ Derry)`,status:`On Time`,notice:`Via A6 Glenshane Expressway`},{route:`Goldliner 238 (Belfast ➔ Newry)`,status:`On Time`,notice:`Via A1 dual carriageway`},{route:`Ulsterbus 261 (Belfast ➔ Enniskillen)`,status:`On Time`,notice:`Operating via Dungannon`}]}],HL=[{id:`bch-portrush`,name:`Portrush (West & East Strand)`,county:`Antrim`,status:`Good`,waterTempC:12.2,surfCondition:`Clean 2-3ft gentle swell`,lifeguardStatus:`Active`,daeraAward:`Blue Flag`,lat:55.2045,lng:-6.657,tideAdvice:`Best swimming on rising mid-tide`},{id:`bch-portstewart`,name:`Portstewart Strand`,county:`Londonderry`,status:`Good`,waterTempC:12,surfCondition:`Good 3-4ft beach break`,lifeguardStatus:`Active`,daeraAward:`Blue Flag`,lat:55.182,lng:-6.721,tideAdvice:`Vehicle beach access open until sunset`},{id:`bch-castlerock`,name:`Castlerock`,county:`Londonderry`,status:`Good`,waterTempC:11.8,surfCondition:`2ft rolling waves`,lifeguardStatus:`Active`,daeraAward:`Blue Flag`,lat:55.168,lng:-6.748,tideAdvice:`Watch out for Mussenden Temple rip on ebb tide`},{id:`bch-ballycastle`,name:`Ballycastle`,county:`Antrim`,status:`Moderate`,waterTempC:12.4,surfCondition:`Choppy tidal swell`,lifeguardStatus:`Off-duty`,daeraAward:`Seaside Award`,lat:55.207,lng:-6.242,tideAdvice:`Rathlin ferry wake creates intermittent shore wash`},{id:`bch-newcastle`,name:`Newcastle (Mourne Coast)`,county:`Down`,status:`Good`,waterTempC:12.5,surfCondition:`Calm inshore waters`,lifeguardStatus:`Active`,daeraAward:`Blue Flag`,lat:54.214,lng:-5.889,tideAdvice:`Sheltered beneath Slieve Donard peak`},{id:`bch-helensbay`,name:`Helen's Bay (Belfast Lough)`,county:`Down`,status:`Good`,waterTempC:13,surfCondition:`Sheltered flat waters`,lifeguardStatus:`Off-duty`,daeraAward:`Seaside Award`,lat:54.673,lng:-5.735,tideAdvice:`Safe shallow shelf for paddleboarding`}],UL={daqiIndex:2,airQualityRating:`Good`,summary:`Good air quality across all 6 counties in Northern Ireland`,monitoringStation:`Belfast Centre & Derry Rosemount (Defra UK-AIR)`,pm25:7.2,no2:14.5,o3:42.1,pollenLevel:`Low`,pollenType:`Low levels today across grass and fungal spores`,stations:[{name:`Belfast Centre (Lombard St)`,daqi:2,pm25:6.8,no2:18.2,rating:`Good`},{name:`Derry Rosemount`,daqi:1,pm25:4.1,no2:9.4,rating:`Very Good`},{name:`Ballymena Ballykeel`,daqi:2,pm25:7,no2:12.1,rating:`Good`},{name:`Armagh Lonsdale Road`,daqi:2,pm25:8.1,no2:14,rating:`Good`}]},WL=[{id:`rw-1`,route:`A6 Randalstown`,location:`Between Randalstown (M22 J3) & Toome Bypass`,county:`Antrim`,type:`Closure`,description:`Road closed in both directions due to serious two-vehicle collision investigation and fuel spill cleanup`,dates:`Cleared expected 13:00`,severity:`STANDSTILL`,lat:54.7405,lng:-6.34445,closedStretchCoordinates:[[-6.30534,54.74134],[-6.31041,54.74259],[-6.31545,54.74661],[-6.3212,54.7425],[-6.32764,54.74202],[-6.33419,54.74132],[-6.33925,54.74087],[-6.34445,54.7405],[-6.35272,54.7399],[-6.35994,54.73939],[-6.36714,54.73886],[-6.3723,54.7385],[-6.37787,54.73846],[-6.38396,54.73907],[-6.38962,54.73963],[-6.39537,54.73975],[-6.40295,54.74049],[-6.40956,54.74105],[-6.41595,54.74096],[-6.422,54.74098],[-6.42757,54.7417],[-6.43352,54.7433],[-6.43868,54.7452],[-6.44441,54.74729],[-6.44987,54.75088],[-6.45273,54.7544]],diversionCoordinates:[[-6.31425,54.75001],[-6.31796,54.74921],[-6.32141,54.75033],[-6.32818,54.74937],[-6.33575,54.7489],[-6.34781,54.74954],[-6.35732,54.74936],[-6.36037,54.75063],[-6.3615,54.7526],[-6.36186,54.75335],[-6.36414,54.75263],[-6.37305,54.75407],[-6.38371,54.75752],[-6.39392,54.75828],[-6.40481,54.75624],[-6.41537,54.75071],[-6.42097,54.75142],[-6.42623,54.75051],[-6.42825,54.74545],[-6.44361,54.74827],[-6.44709,54.74988],[-6.44907,54.74966],[-6.45506,54.75773],[-6.45697,54.75965],[-6.45266,54.75429],[-6.45238,54.75391]],diversionAdvice:`Divert via Castle Road ➔ B18 Neillsbrook Road ➔ Staffordstown ➔ Moneynick ➔ rejoin Toome Bypass (+8 mins)`,delayMins:12},{id:`rw-2`,route:`M1 Junction 10–9`,location:`Lurgan to Moira westbound`,county:`Armagh`,type:`Lane Restriction`,description:`Overnight roadworks & dual lane closure for high-friction resurfacing`,dates:`Nightly 20:00–06:00`,severity:`MODERATE_DELAY`,lat:54.45815,lng:-6.32278,closedStretchCoordinates:[[-6.36634,54.47315],[-6.3562,54.4695],[-6.3481,54.4672],[-6.3395,54.4638],[-6.3312,54.4608],[-6.32278,54.45815],[-6.3145,54.4578],[-6.3051,54.4589],[-6.2952,54.4602],[-6.2845,54.4621],[-6.2738,54.4645],[-6.2642,54.4671],[-6.25635,54.46905]],diversionCoordinates:[[-6.36634,54.47315],[-6.353,54.463],[-6.335,54.455],[-6.305,54.46],[-6.275,54.469],[-6.25635,54.46905]],diversionAdvice:`Divert via A3 Lurgan Road ➔ Moira roundabout ➔ rejoin M1 J9 (+14 mins)`,delayMins:15},{id:`rw-3`,route:`A24 Ballymena`,location:`Grove Road junction`,county:`Antrim`,type:`Resurfacing`,description:`Carriageway resurfacing works, expect 10-15 min delays during morning and evening rush`,dates:`Active until 18 Oct`,severity:`MODERATE_DELAY`,lat:54.85829,lng:-6.26599,closedStretchCoordinates:[[-6.26212,54.84516],[-6.2635,54.8502],[-6.26599,54.85829],[-6.2695,54.8621],[-6.2741,54.8649],[-6.27722,54.86632]],diversionCoordinates:[[-6.26212,54.84516],[-6.275,54.849],[-6.286,54.858],[-6.282,54.865],[-6.27722,54.86632]],diversionAdvice:`Divert via Larne Road link ➔ Queen Street ➔ rejoin A26 Ballymena (+6 mins)`,delayMins:10},{id:`rw-4`,route:`A26 Antrim`,location:`Dunsilly roundabout to Lisnabilla`,county:`Antrim`,type:`Roadworks`,description:`Lane closures until 20 Oct for utility installation and high-voltage ducting`,dates:`Until 20 Oct`,severity:`MODERATE_DELAY`,lat:54.7484,lng:-6.23637,closedStretchCoordinates:[[-6.2302,54.73506],[-6.2325,54.741],[-6.23637,54.7484],[-6.241,54.7592],[-6.24521,54.77001]],diversionCoordinates:[[-6.2302,54.73506],[-6.218,54.742],[-6.225,54.755],[-6.24521,54.77001]],diversionAdvice:`Divert via Dunsilly Park & Ride link road (+5 mins)`,delayMins:8},{id:`rw-5`,route:`A5 Derry–Strabane`,location:`Victoria Bridge bypass section`,county:`Tyrone`,type:`Resurfacing`,description:`Ongoing roadworks with temporary 30mph speed limit and single-lane contraflow`,dates:`Ongoing`,severity:`MINOR`,lat:54.7563,lng:-7.41557,closedStretchCoordinates:[[-7.382,54.73109],[-7.394,54.741],[-7.405,54.749],[-7.41557,54.7563],[-7.41918,54.76982]],diversionCoordinates:[[-7.382,54.73109],[-7.371,54.745],[-7.388,54.758],[-7.41918,54.76982]],diversionAdvice:`Divert via Victoria Bridge old village loop (+6 mins)`,delayMins:8}],GL={auroraKp:4.2,auroraStatus:`Minor Storm Watch`,auroraVisibilityNI:`Sub-auroral glow possible on North Coast, Ballintoy, and Sperrins summits if skies remain clear after midnight`,issPassTime:`22:48 BST`,issPassDuration:`5 mins (SW to ESE)`,issMagnitude:`Mag -3.2 (Very Bright)`,moonPhase:`Waxing Gibbous`,moonIlluminationPct:78,stargazingConditions:`Fair between cloud breaks; best visibility in Sperrins Dark Sky Park and OM Dark Sky Park (Davagh Forest)`,darkSkySpot:`OM Dark Sky Observatory, Davagh Forest, Co. Tyrone`},KL=[{id:`ev-1`,title:`Major Arena Concert`,venue:`SSE Arena Belfast`,location:`Titanic Quarter, Belfast`,county:`Belfast`,category:`Concert`,dateStr:`Tonight • 19:30`,expectedAttendance:`10,500`,trafficImpact:`HEAVY`,recommendedTravel:`Use Glider G2 or Titanic Quarter Train Station`,lat:54.604,lng:-5.914},{id:`ev-2`,title:`Ulster Rugby vs Leinster`,venue:`Kingspan Stadium`,location:`Ravenhill, Belfast`,county:`Belfast`,category:`Sports`,dateStr:`Saturday • 17:15`,expectedAttendance:`18,196 (Sellout)`,trafficImpact:`HEAVY`,recommendedTravel:`Park & Ride from Pirrie Park & Montgomery Road`,lat:54.582,lng:-5.908},{id:`ev-3`,title:`Autumn Agri & Craft Expo`,venue:`Eikon Exhibition Centre`,location:`Balmoral Park, Lisburn`,county:`Down`,category:`Exhibition`,dateStr:`This Weekend`,expectedAttendance:`14,000`,trafficImpact:`MODERATE`,recommendedTravel:`Direct access via M1 J7 Sprucefield`,lat:54.492,lng:-6.072},{id:`ev-4`,title:`Derry Halloween Carnival Preparations`,venue:`Guildhall Square & City Walls`,location:`Derry~Londonderry`,county:`Londonderry`,category:`Festival`,dateStr:`Daily Displays`,expectedAttendance:`30,000+ Citywide`,trafficImpact:`MODERATE`,recommendedTravel:`Use Foyle Street Transport Hub and Peace Bridge walk`,lat:54.996,lng:-7.319}],qL=[{id:`tide-belfast`,name:`Belfast`,county:`Antrim / Down`,waterway:`Belfast Harbour & Lough`,currentPhase:`Flooding`,currentHeightM:3.2,tides:[{type:`Low`,time:`04:21`,heightM:1.2},{type:`High`,time:`10:37`,heightM:4.8},{type:`Low`,time:`16:55`,heightM:1.4},{type:`High`,time:`23:08`,heightM:4.6}],chartPoints:[{hour:`00:00`,height:2.8},{hour:`04:21`,height:1.2},{hour:`08:00`,height:3.6},{hour:`10:37`,height:4.8},{hour:`14:00`,height:2.9},{hour:`16:55`,height:1.4},{hour:`20:00`,height:3.4},{hour:`23:08`,height:4.6}]},{id:`tide-portrush`,name:`Portrush`,county:`Antrim`,waterway:`Atlantic Causeway Coast`,currentPhase:`Ebbing`,currentHeightM:1.9,tides:[{type:`Low`,time:`03:45`,heightM:.6},{type:`High`,time:`09:58`,heightM:2.4},{type:`Low`,time:`16:10`,heightM:.8},{type:`High`,time:`22:25`,heightM:2.3}],chartPoints:[{hour:`00:00`,height:1.5},{hour:`03:45`,height:.6},{hour:`07:00`,height:1.8},{hour:`09:58`,height:2.4},{hour:`13:00`,height:1.6},{hour:`16:10`,height:.8},{hour:`19:00`,height:1.7},{hour:`22:25`,height:2.3}]},{id:`tide-larne`,name:`Larne`,county:`Antrim`,waterway:`Port of Larne / North Channel`,currentPhase:`Flooding`,currentHeightM:2.8,tides:[{type:`Low`,time:`04:02`,heightM:1},{type:`High`,time:`10:18`,heightM:3.6},{type:`Low`,time:`16:32`,heightM:1.1},{type:`High`,time:`22:49`,heightM:3.5}],chartPoints:[{hour:`00:00`,height:2.2},{hour:`04:02`,height:1},{hour:`08:00`,height:2.7},{hour:`10:18`,height:3.6},{hour:`14:00`,height:2.3},{hour:`16:32`,height:1.1},{hour:`20:00`,height:2.6},{hour:`22:49`,height:3.5}]},{id:`tide-ards`,name:`Ards`,county:`Down`,waterway:`Strangford Lough Narrows`,currentPhase:`Flooding`,currentHeightM:3,tides:[{type:`Low`,time:`04:40`,heightM:1.3},{type:`High`,time:`11:02`,heightM:4.5},{type:`Low`,time:`17:15`,heightM:1.5},{type:`High`,time:`23:30`,heightM:4.4}],chartPoints:[{hour:`00:00`,height:2.7},{hour:`04:40`,height:1.3},{hour:`08:00`,height:3.3},{hour:`11:02`,height:4.5},{hour:`14:00`,height:2.8},{hour:`17:15`,height:1.5},{hour:`20:00`,height:3.2},{hour:`23:30`,height:4.4}]}];function JL(e=0){return new Date(Date.now()+e*60*1e3).toLocaleTimeString(`en-GB`,{timeZone:`Europe/London`,hour:`2-digit`,minute:`2-digit`,hour12:!1})}var YL=[{airline:`easyJet`,flightNumber:`U2458`,flightCallsign:`EZY482`,origin:`London LGW`,airport:`Belfast Intl (BFS)`,destinationAirportCode:`BFS`,offsetMinutes:7,status:`Approaching`,badgeClass:`bg-orange-500 text-white`,gate:`Gate 14`,aircraft:`Airbus A320-214`},{airline:`Ryanair`,flightNumber:`FR668`,flightCallsign:`RYR668`,origin:`Edinburgh`,airport:`Belfast Intl (BFS)`,destinationAirportCode:`BFS`,offsetMinutes:19,status:`On Time`,badgeClass:`bg-blue-600 text-white`,gate:`Gate 22`,aircraft:`Boeing 737-800`},{airline:`Ryanair`,flightNumber:`FR274`,flightCallsign:`RYR274`,origin:`Manchester`,airport:`Belfast Intl (BFS)`,destinationAirportCode:`BFS`,offsetMinutes:34,status:`Delayed`,badgeClass:`bg-blue-600 text-white`,gate:`Gate 19`,aircraft:`Boeing 737-800`},{airline:`DHL Air UK`,flightNumber:`BCS611`,flightCallsign:`BCS611`,origin:`East Midlands (EMA)`,airport:`Belfast Intl (BFS)`,destinationAirportCode:`BFS`,offsetMinutes:48,status:`On Time`,badgeClass:`bg-yellow-500 text-slate-950 font-black`,gate:`Cargo Apron 2`,aircraft:`Boeing 757-200SF`},{airline:`easyJet`,flightNumber:`U2466`,flightCallsign:`EZY466`,origin:`London Luton (LTN)`,airport:`Belfast Intl (BFS)`,destinationAirportCode:`BFS`,offsetMinutes:64,status:`On Time`,badgeClass:`bg-orange-500 text-white`,gate:`Gate 16`,aircraft:`Airbus A320`},{airline:`easyJet`,flightNumber:`U2826`,flightCallsign:`EZY826`,origin:`Alicante (ALC)`,airport:`Belfast Intl (BFS)`,destinationAirportCode:`BFS`,offsetMinutes:82,status:`On Time`,badgeClass:`bg-orange-500 text-white`,gate:`Gate 12`,aircraft:`Airbus A320neo`},{airline:`easyJet`,flightNumber:`U2674`,flightCallsign:`EZY674`,origin:`Liverpool (LPL)`,airport:`Belfast Intl (BFS)`,destinationAirportCode:`BFS`,offsetMinutes:-12,status:`Landed`,badgeClass:`bg-orange-500 text-white`,gate:`Gate 11`,aircraft:`Airbus A320`},{airline:`Ryanair`,flightNumber:`FR552`,flightCallsign:`RYR552`,origin:`London Stansted (STN)`,airport:`Belfast Intl (BFS)`,destinationAirportCode:`BFS`,offsetMinutes:98,status:`On Time`,badgeClass:`bg-blue-600 text-white`,gate:`Gate 20`,aircraft:`Boeing 737 MAX 8`}],XL=[{airline:`British Airways`,flightNumber:`BA1416`,flightCallsign:`BAW1416`,origin:`London LHR`,airport:`Belfast City (BHD)`,destinationAirportCode:`BHD`,offsetMinutes:13,status:`On Time`,badgeClass:`bg-blue-900 text-white`,gate:`Gate 4`,aircraft:`Airbus A320neo`},{airline:`Aer Lingus`,flightNumber:`EI3662`,flightCallsign:`EAI3662`,origin:`Dublin (DUB)`,airport:`Belfast City (BHD)`,destinationAirportCode:`BHD`,offsetMinutes:26,status:`On Time`,badgeClass:`bg-emerald-600 text-white`,gate:`Gate 6`,aircraft:`ATR 72-600`},{airline:`Aer Lingus`,flightNumber:`EI3684`,flightCallsign:`EAI3684`,origin:`Manchester (MAN)`,airport:`Belfast City (BHD)`,destinationAirportCode:`BHD`,offsetMinutes:41,status:`On Time`,badgeClass:`bg-emerald-600 text-white`,gate:`Gate 5`,aircraft:`ATR 72-600`},{airline:`KLM`,flightNumber:`KL949`,flightCallsign:`KLM949`,origin:`Amsterdam (AMS)`,airport:`Belfast City (BHD)`,destinationAirportCode:`BHD`,offsetMinutes:55,status:`On Time`,badgeClass:`bg-sky-600 text-white`,gate:`Gate 8`,aircraft:`Embraer E195-E2`},{airline:`British Airways`,flightNumber:`BA1426`,flightCallsign:`BAW1426`,origin:`London City (LCY)`,airport:`Belfast City (BHD)`,destinationAirportCode:`BHD`,offsetMinutes:72,status:`Delayed`,badgeClass:`bg-blue-900 text-white`,gate:`Gate 3`,aircraft:`Embraer E190`},{airline:`British Airways`,flightNumber:`BA1412`,flightCallsign:`BAW1412`,origin:`London LHR`,airport:`Belfast City (BHD)`,destinationAirportCode:`BHD`,offsetMinutes:-16,status:`Landed`,badgeClass:`bg-blue-900 text-white`,gate:`Gate 4`,aircraft:`Airbus A320`},{airline:`Loganair`,flightNumber:`LM341`,flightCallsign:`LOG341`,origin:`Aberdeen (ABZ)`,airport:`Belfast City (BHD)`,destinationAirportCode:`BHD`,offsetMinutes:91,status:`On Time`,badgeClass:`bg-red-700 text-white`,gate:`Gate 2`,aircraft:`ATR 42-600`}];function ZL(e=`ALL`){let t=[];return t=e===`BFS`?[...YL]:e===`BHD`?[...XL]:[YL[0],XL[0],YL[1],XL[1],YL[2],YL[3],XL[3]],t.map(e=>({airline:e.airline,flightNumber:e.flightNumber,flightCallsign:e.flightCallsign,origin:e.origin,airport:e.airport,destinationAirportCode:e.destinationAirportCode,scheduledTime:JL(e.offsetMinutes),estimatedTime:JL(e.offsetMinutes+(e.status===`Delayed`?15:0)),status:e.status,badgeClass:e.badgeClass,gate:e.gate,aircraft:e.aircraft}))}ZL(`ALL`);var QL=new class{getPowerOutages(e=`All`){if(e===`All`)return BL;let t=BL.breakdown.filter(t=>t.county.toLowerCase()===e.toLowerCase());return{currentOutages:t.length,propertiesAffected:t.reduce((e,t)=>e+t.affected,0),breakdown:t}}getTransitStatus(){return VL}getBeachConditions(e=`All`){return e===`All`?HL:HL.filter(t=>t.county.toLowerCase().includes(e.toLowerCase()))}getAirQualityAndPollen(){return UL}getRoadworks(e=`All`){let t=zL.getCachedIncidents(),n=t&&t.length>0?t:WL;return e===`All`?n:n.filter(t=>t.county.toLowerCase().includes(e.toLowerCase()))}async fetchLiveRoadworks(e=`All`){let t=await zL.refreshLiveIncidents(),n=t&&t.length>0?t:WL;return e===`All`?n:n.filter(t=>t.county.toLowerCase().includes(e.toLowerCase()))}getSpaceSkyWatch(){return GL}getLocalEvents(e=`All`){return e===`All`?KL:KL.filter(t=>t.county.toLowerCase().includes(e.toLowerCase()))}getTideLocations(){return qL}getInboundFlights(e=`ALL`){return ZL(e)}},Q=new class{ctx=null;isMuted=!1;initCtx(){if(!this.ctx){let e=window.AudioContext||window.webkitAudioContext;this.ctx=new e}this.ctx.state===`suspended`&&this.ctx.resume()}setMuted(e){this.isMuted=e}getMuted(){return this.isMuted}playClick(){if(!this.isMuted)try{if(this.initCtx(),!this.ctx)return;let e=this.ctx.createOscillator(),t=this.ctx.createGain();e.type=`sine`,e.frequency.setValueAtTime(1600,this.ctx.currentTime),e.frequency.exponentialRampToValueAtTime(800,this.ctx.currentTime+.04),t.gain.setValueAtTime(.08,this.ctx.currentTime),t.gain.exponentialRampToValueAtTime(.001,this.ctx.currentTime+.04),e.connect(t),t.connect(this.ctx.destination),e.start(),e.stop(this.ctx.currentTime+.04)}catch{}}playTargetLock(){if(!this.isMuted)try{if(this.initCtx(),!this.ctx)return;let e=this.ctx.currentTime;[0,.07].forEach(t=>{if(!this.ctx)return;let n=this.ctx.createOscillator(),r=this.ctx.createGain();n.type=`triangle`,n.frequency.setValueAtTime(2e3,e+t),n.frequency.setValueAtTime(2800,e+t+.04),r.gain.setValueAtTime(.12,e+t),r.gain.exponentialRampToValueAtTime(.001,e+t+.07),n.connect(r),r.connect(this.ctx.destination),n.start(e+t),n.stop(e+t+.07)})}catch{}}playRadarPing(){if(!this.isMuted)try{if(this.initCtx(),!this.ctx)return;let e=this.ctx.currentTime,t=this.ctx.createOscillator(),n=this.ctx.createGain();t.type=`sine`,t.frequency.setValueAtTime(1200,e),t.frequency.exponentialRampToValueAtTime(600,e+.35),n.gain.setValueAtTime(.06,e),n.gain.exponentialRampToValueAtTime(.001,e+.35),t.connect(n),n.connect(this.ctx.destination),t.start(e),t.stop(e+.35)}catch{}}playAlert(){if(!this.isMuted)try{if(this.initCtx(),!this.ctx)return;let e=this.ctx.currentTime,t=this.ctx.createOscillator(),n=this.ctx.createGain();t.type=`sawtooth`,t.frequency.setValueAtTime(880,e),t.frequency.setValueAtTime(440,e+.15),t.frequency.setValueAtTime(880,e+.3),n.gain.setValueAtTime(.1,e),n.gain.exponentialRampToValueAtTime(.001,e+.45),t.connect(n),n.connect(this.ctx.destination),t.start(e),t.stop(e+.45)}catch{}}playRadioSquelch(){if(!this.isMuted)try{if(this.initCtx(),!this.ctx)return;let e=this.ctx.sampleRate*.04,t=this.ctx.createBuffer(1,e,this.ctx.sampleRate),n=t.getChannelData(0);for(let t=0;t{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),$=o(((e,t)=>{t.exports=$L()}))(),eR=({flight:e,cameraMode:t,onChangeCameraMode:n,onExit:r})=>(0,$.jsxs)(`div`,{className:`absolute inset-0 pointer-events-none z-30 select-none font-mono`,children:[(0,$.jsx)(`div`,{className:`absolute inset-0 flex items-center justify-center`,children:(0,$.jsxs)(`div`,{className:`relative w-72 sm:w-96 flex flex-col items-center`,children:[(0,$.jsx)(`div`,{className:`w-24 h-0.5 bg-cyan-400/50 mb-4 border-l-2 border-r-2 border-cyan-400`}),(0,$.jsx)(`div`,{className:`w-16 h-0.5 bg-cyan-400/40 mb-3 border-l-2 border-r-2 border-cyan-400`}),(0,$.jsxs)(`div`,{className:`flex items-center w-full justify-between px-4`,children:[(0,$.jsx)(`div`,{className:`w-20 sm:w-28 h-0.5 bg-cyan-400 shadow-[0_0_8px_#06b6d4]`}),(0,$.jsxs)(`div`,{className:`w-8 h-8 rounded-full border-2 border-cyan-400 flex items-center justify-center relative shadow-[0_0_12px_#06b6d4]`,children:[(0,$.jsx)(`div`,{className:`w-1.5 h-1.5 bg-cyan-400 rounded-full animate-ping`}),(0,$.jsx)(`div`,{className:`w-full h-[1px] bg-cyan-400/60 absolute`}),(0,$.jsx)(`div`,{className:`h-full w-[1px] bg-cyan-400/60 absolute`})]}),(0,$.jsx)(`div`,{className:`w-20 sm:w-28 h-0.5 bg-cyan-400 shadow-[0_0_8px_#06b6d4]`})]}),(0,$.jsx)(`div`,{className:`w-16 h-0.5 bg-cyan-400/40 mt-3 border-l-2 border-r-2 border-cyan-400 border-dashed`}),(0,$.jsx)(`div`,{className:`w-24 h-0.5 bg-cyan-400/50 mt-4 border-l-2 border-r-2 border-cyan-400 border-dashed`}),(0,$.jsxs)(`div`,{className:`mt-2 text-[10px] text-cyan-300 font-bold tracking-widest bg-black/80 px-2.5 py-0.5 rounded border border-cyan-500/40 flex items-center gap-1.5 shadow-lg`,children:[(0,$.jsx)(tI,{className:`w-3 h-3 text-cyan-400 animate-spin`}),(0,$.jsxs)(`span`,{children:[`PILOT'S EYE // LOCK: `,e.callsign]})]})]})}),(0,$.jsx)(`div`,{style:{top:`calc(env(safe-area-inset-top, 0px) + 5rem)`},className:`absolute left-1/2 -translate-x-1/2 flex flex-col items-center`,children:(0,$.jsxs)(`div`,{className:`bg-black/90 border border-cyan-500/50 rounded-lg px-4 py-1.5 text-cyan-300 font-bold text-xs flex items-center gap-2 shadow-[0_0_15px_rgba(6,182,212,0.3)]`,children:[(0,$.jsx)(FI,{className:`w-3.5 h-3.5 text-cyan-400`,style:{transform:`rotate(${e.headingDeg}deg)`}}),(0,$.jsxs)(`span`,{children:[`HDG: `,String(e.headingDeg).padStart(3,`0`),`°`]}),(0,$.jsx)(`span`,{className:`text-slate-600`,children:`|`}),(0,$.jsx)(`span`,{className:`text-white`,children:e.route})]})}),(0,$.jsxs)(`div`,{className:`absolute left-6 top-1/2 -translate-y-1/2 bg-black/90 border border-cyan-500/50 rounded-lg p-2.5 flex flex-col items-center gap-1 text-cyan-300 shadow-[0_0_15px_rgba(6,182,212,0.3)]`,children:[(0,$.jsx)(`span`,{className:`text-[9px] text-cyan-400/80 font-bold`,children:`AIRSPEED`}),(0,$.jsx)(`div`,{className:`text-lg font-bold text-white`,children:e.velocityKts}),(0,$.jsx)(`span`,{className:`text-[10px] text-slate-400 font-bold`,children:`KNOTS`}),(0,$.jsx)(`div`,{className:`w-full h-[1px] bg-cyan-500/30 my-1`}),(0,$.jsxs)(`span`,{className:`text-[8px] text-slate-400`,children:[`MACH `,(e.velocityKts/661).toFixed(2)]})]}),(0,$.jsxs)(`div`,{className:`absolute right-6 top-1/2 -translate-y-1/2 bg-black/90 border border-cyan-500/50 rounded-lg p-2.5 flex flex-col items-center gap-1 text-cyan-300 shadow-[0_0_15px_rgba(6,182,212,0.3)]`,children:[(0,$.jsx)(`span`,{className:`text-[9px] text-cyan-400/80 font-bold`,children:`ALTITUDE`}),(0,$.jsx)(`div`,{className:`text-lg font-bold text-white`,children:e.altitudeFt.toLocaleString()}),(0,$.jsx)(`span`,{className:`text-[10px] text-slate-400 font-bold`,children:`FEET MSL`}),(0,$.jsx)(`div`,{className:`w-full h-[1px] bg-cyan-500/30 my-1`}),(0,$.jsxs)(`span`,{className:`text-[8px] text-slate-400`,children:[`VSI: `,e.verticalRateFpm>=0?`+`:``,e.verticalRateFpm,` FPM`]})]}),(0,$.jsxs)(`div`,{style:{bottom:`max(1.5rem, calc(env(safe-area-inset-bottom, 0px) + 1rem))`},className:`absolute left-1/2 -translate-x-1/2 pointer-events-auto bg-black/95 border border-cyan-500/60 shadow-[0_0_30px_rgba(6,182,212,0.4)] rounded-xl p-3 backdrop-blur-md flex flex-wrap items-center justify-between gap-4 max-w-2xl w-[92vw]`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,$.jsx)(`div`,{className:`w-10 h-10 rounded-lg bg-cyan-950 border border-cyan-400/60 flex items-center justify-center shrink-0`,children:(0,$.jsx)(LI,{className:`w-6 h-6 text-cyan-300`})}),(0,$.jsxs)(`div`,{children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(`span`,{className:`font-bold text-white text-sm`,children:e.callsign}),(0,$.jsx)(`span`,{className:`text-[10px] px-1.5 py-0.5 rounded bg-cyan-950/80 border border-cyan-500/50 text-cyan-300 font-bold`,children:e.airline})]}),(0,$.jsxs)(`div`,{className:`text-[11px] text-slate-300`,children:[e.aircraftType,` • LAT: `,e.lat.toFixed(3),`° LON: `,Math.abs(e.lng).toFixed(3),`°W`]})]})]}),(0,$.jsxs)(`div`,{className:`flex items-center gap-2 ml-auto`,children:[(0,$.jsxs)(`div`,{className:`flex bg-slate-900 border border-slate-700 rounded-lg p-0.5 text-xs`,children:[(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),n(`cockpit`)},className:`px-2.5 py-1 rounded transition-all cursor-pointer font-bold ${t===`cockpit`?`bg-cyan-950 border border-cyan-400 text-cyan-200 shadow-[0_0_8px_#06b6d4]`:`text-slate-400 hover:text-slate-200`}`,children:`PILOT'S EYE`}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),n(`chase`)},className:`px-2.5 py-1 rounded transition-all cursor-pointer font-bold ${t===`chase`?`bg-cyan-950 border border-cyan-400 text-cyan-200 shadow-[0_0_8px_#06b6d4]`:`text-slate-400 hover:text-slate-200`}`,children:`CHASE CAM`}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),n(`wing`)},className:`px-2.5 py-1 rounded transition-all cursor-pointer font-bold ${t===`wing`?`bg-cyan-950 border border-cyan-400 text-cyan-200 shadow-[0_0_8px_#06b6d4]`:`text-slate-400 hover:text-slate-200`}`,children:`WING CAM`})]}),(0,$.jsxs)(`button`,{onClick:()=>{Q.playClick(),r()},className:`px-3 py-1.5 rounded-lg bg-red-950/80 border border-red-500 hover:border-red-400 text-red-200 text-xs font-bold transition-all shadow-[0_0_10px_rgba(239,68,68,0.3)] hover:shadow-[0_0_15px_rgba(239,68,68,0.5)] cursor-pointer flex items-center gap-1.5`,children:[(0,$.jsx)(kL,{className:`w-3.5 h-3.5 text-red-400`}),(0,$.jsx)(`span`,{children:`EXIT PILOT VIEW`})]})]})]})]}),tR=[{id:`glenshane-pass`,name:`A6 Glenshane Pass Summit`,elevationM:302,lat:54.8821,lng:-6.7842,pitch:58,bearing:45,zoom:12},{id:`derry-foyle-bridge`,name:`Derry Foyle Bridge & Sea Channel`,elevationM:35,lat:55.0212,lng:-7.3021,pitch:52,bearing:20,zoom:12.8},{id:`a6-toome-bypass`,name:`A6 Toome Pass / Lough Neagh Basin`,elevationM:55,lat:54.755,lng:-6.495,pitch:50,bearing:-60,zoom:12.5},{id:`belfast-m2-bellevue`,name:`M2 Bellevue Hill Motorway Climb`,elevationM:145,lat:54.6742,lng:-5.9692,pitch:56,bearing:15,zoom:13},{id:`belfast-divis-westlink`,name:`Westlink Arterial & Belfast Horizon`,elevationM:45,lat:54.588,lng:-5.955,pitch:60,bearing:75,zoom:12.8},{id:`belfast-harbour-channel`,name:`Port of Belfast Container Hub`,elevationM:2,lat:54.622,lng:-5.895,pitch:54,bearing:35,zoom:13.2},{id:`mourne-spelga`,name:`Spelga Pass & Silent Valley Peaks`,elevationM:365,lat:54.1785,lng:-6.0592,pitch:62,bearing:-25,zoom:12}],nR=({sensorMode:e,onSelectCamera:t,onOpenGeofenceModal:n,isPro:r=!1,onOpenProModal:i,targetCoords:a,activeClosure:o,onClearActiveClosure:s,activeOutage:c,onClearActiveOutage:l,chaseFlightCallsign:u,onClearChaseFlight:d})=>{let f=(0,_.useRef)(null),p=(0,_.useRef)(null),m=(0,_.useRef)([]);(0,_.useRef)([]);let h=(0,_.useRef)(new Map),g=(0,_.useRef)([]),v=(0,_.useRef)([]),y=(0,_.useRef)([]),b=(0,_.useRef)([]),[x,S]=(0,_.useState)([]),[C,w]=(0,_.useState)(null),[T,E]=(0,_.useState)(null),[D,O]=(0,_.useState)(null),[k,A]=(0,_.useState)(null),[j,M]=(0,_.useState)(!1),[ee,te]=(0,_.useState)(`cockpit`),N=(0,_.useRef)(null),ne=(0,_.useRef)(0),[re,ie]=(0,_.useState)(!0),[ae,oe]=(0,_.useState)(!0),[se,ce]=(0,_.useState)(!0),[le,ue]=(0,_.useState)(!0),[de,fe]=(0,_.useState)(!0),[pe,me]=(0,_.useState)(!0),[he,ge]=(0,_.useState)(!0),[P,F]=(0,_.useState)(!1),[_e,ve]=(0,_.useState)(null),[ye,be]=(0,_.useState)(5),[xe,Se]=(0,_.useState)(!1),[Ce,we]=(0,_.useState)(0),Te=(0,_.useRef)(null),[Ee,De]=(0,_.useState)({lat:54.85,lng:-6.4,altKm:420,velocityKmh:27500}),Oe=_.useMemo(()=>{if(!_e)return{cams:[],flights:[],vessels:[]};let e=ye*1e3,t=(e,t,n,r)=>{let i=e*Math.PI/180,a=n*Math.PI/180,o=(n-e)*Math.PI/180,s=(r-t)*Math.PI/180,c=Math.sin(o/2)*Math.sin(o/2)+Math.cos(i)*Math.cos(a)*Math.sin(s/2)*Math.sin(s/2);return 6371e3*(2*Math.atan2(Math.sqrt(c),Math.sqrt(1-c)))};return{cams:ML.filter(n=>t(_e.lat,_e.lng,n.lat,n.lng)<=e),flights:x.filter(n=>t(_e.lat,_e.lng,n.lat,n.lng)<=e),vessels:NL.filter(n=>t(_e.lat,_e.lng,n.lat,n.lng)<=e)}},[_e,ye,x]),ke=(e,t=!1)=>{if(!p.current)return;let n=p.current,r=[e.lng,e.lat],i=window.innerWidth<768?[0,-60]:[110,0];t?n.flyTo({center:r,zoom:16.2,pitch:42,bearing:0,offset:i,duration:1600,essential:!0}):n.flyTo({center:r,zoom:15.2,pitch:38,bearing:0,offset:i,duration:1800,essential:!0})},Ae=e=>{if(!p.current)return;let t=p.current,n=[...e.closedStretchCoordinates,...e.diversionCoordinates],r=1/0,i=-1/0,a=1/0,o=-1/0;n.forEach(([e,t])=>{ei&&(i=e),to&&(o=t)});let s=window.innerWidth<768;t.fitBounds([[r,a],[i,o]],{padding:s?{top:60,bottom:220,left:25,right:25}:{top:90,bottom:120,left:380,right:90},pitch:32,bearing:0,maxZoom:14.8,duration:1800,essential:!0})};(0,_.useEffect)(()=>{if(o){let e=zL.validateClosure(o);A(e),O(null),w(null),E(null);let t=setTimeout(()=>{p.current&&(p.current.resize(),ke(e,!1))},60);return()=>clearTimeout(t)}},[o]),(0,_.useEffect)(()=>{c&&(O(c),A(null),w(null),E(null),p.current&&p.current.flyTo({center:[c.lng,c.lat],zoom:13.8,pitch:55,duration:1800,essential:!0}))},[c]),(0,_.useEffect)(()=>{a&&p.current&&(Q.playTargetLock(),p.current.flyTo({center:[a.lng,a.lat],zoom:14,pitch:55,duration:1600,essential:!0}))},[a]),(0,_.useEffect)(()=>{u&&(async()=>{let e=x;(!e||e.length===0)&&(e=await LL.getLiveFlights(),S([...e]));let t=u.toLowerCase().trim(),n=e.find(e=>e.callsign.toLowerCase()===t||e.flightNumber&&e.flightNumber.toLowerCase()===t||e.icao24.toLowerCase()===t||e.callsign.toLowerCase().includes(t)||e.flightNumber&&e.flightNumber.toLowerCase().includes(t)||t.includes(e.callsign.toLowerCase())||e.flightNumber&&t.includes(e.flightNumber.toLowerCase()))||e[0];n&&(Q.playTargetLock(),w({...n}),A(null),O(null),E(null),Se(!1),M(!0),d&&d())})()},[u]),(0,_.useEffect)(()=>{if(!f.current||p.current)return;let e=new iF({container:f.current,style:{version:8,sources:{"esri-satellite":{type:`raster`,tiles:[`https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}`],tileSize:256,maxzoom:19,attribution:`Esri Satellite // I Spy NI Recon`},"dark-base":{type:`raster`,tiles:[`https://server.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Dark_Gray_Base/MapServer/tile/{z}/{y}/{x}`],tileSize:256,maxzoom:19,attribution:`Esri Dark Ops // I Spy NI`},"esri-labels":{type:`raster`,tiles:[`https://services.arcgisonline.com/arcgis/rest/services/Reference/World_Boundaries_and_Places/MapServer/tile/{z}/{y}/{x}`],tileSize:256,maxzoom:19},"dark-labels":{type:`raster`,tiles:[`https://services.arcgisonline.com/arcgis/rest/services/Canvas/World_Dark_Gray_Reference/MapServer/tile/{z}/{y}/{x}`],tileSize:256,maxzoom:19},"terrain-dem":{type:`raster-dem`,tiles:[`https://s3.amazonaws.com/elevation-tiles-prod/terrarium/{z}/{x}/{y}.png`],tileSize:256,encoding:`terrarium`,maxzoom:15},"hillshade-dem":{type:`raster-dem`,tiles:[`https://s3.amazonaws.com/elevation-tiles-prod/terrarium/{z}/{x}/{y}.png`],tileSize:256,encoding:`terrarium`,maxzoom:15},"google-traffic":{type:`raster`,tiles:[`https://mt0.google.com/vt?lyrs=h,traffic&x={x}&y={y}&z={z}`,`https://mt1.google.com/vt?lyrs=h,traffic&x={x}&y={y}&z={z}`,`https://mt2.google.com/vt?lyrs=h,traffic&x={x}&y={y}&z={z}`,`https://mt3.google.com/vt?lyrs=h,traffic&x={x}&y={y}&z={z}`],tileSize:256,maxzoom:20,attribution:`Live Traffic Flow // NI Recon`}},terrain:{source:`terrain-dem`,exaggeration:1.45},layers:[{id:`basemap-sat`,type:`raster`,source:`esri-satellite`,layout:{visibility:`visible`},paint:{"raster-brightness-max":.98,"raster-contrast":.16,"raster-saturation":.14,"raster-resampling":`linear`}},{id:`basemap-dark`,type:`raster`,source:`dark-base`,layout:{visibility:`none`},paint:{"raster-contrast":.2}},{id:`terrain-hillshade`,type:`hillshade`,source:`hillshade-dem`,layout:{visibility:`visible`},paint:{"hillshade-exaggeration":.35,"hillshade-shadow-color":`#030712`,"hillshade-highlight-color":`#ffffff`,"hillshade-accent-color":`#38bdf8`}},{id:`traffic-flow-layer`,type:`raster`,source:`google-traffic`,layout:{visibility:`visible`},paint:{"raster-opacity":.88,"raster-fade-duration":150}},{id:`labels-sat`,type:`raster`,source:`esri-labels`,layout:{visibility:`visible`}},{id:`labels-dark`,type:`raster`,source:`dark-labels`,layout:{visibility:`none`}}]},center:[-6.75,54.65],zoom:8.6,pitch:52,bearing:15,maxPitch:75,minZoom:6,maxZoom:18,attributionControl:!1});return p.current=e,e.on(`load`,()=>{PL.forEach(t=>{let n=`corridor-src-${t.id}`,r=`corridor-layer-${t.id}`;if(!e.getSource(n)){e.addSource(n,{type:`geojson`,data:{type:`Feature`,properties:{id:t.id,name:t.name,status:t.status,speed:t.averageSpeedMph},geometry:{type:`LineString`,coordinates:t.coordinates}}});let i=t.status===`STANDSTILL`?`#ef4444`:t.status===`MODERATE_DELAY`?`#f59e0b`:`#10b981`;e.addLayer({id:r,type:`line`,source:n,layout:{"line-join":`round`,"line-cap":`round`},paint:{"line-color":i,"line-width":5,"line-opacity":.85}}),e.addLayer({id:`${r}-glow`,type:`line`,source:n,layout:{"line-join":`round`,"line-cap":`round`},paint:{"line-color":i,"line-width":10,"line-opacity":.25,"line-blur":4}})}})}),()=>{Te.current&&cancelAnimationFrame(Te.current),e.remove(),p.current=null}},[]),(0,_.useEffect)(()=>{let t=p.current;if(!t)return;let n=e===`optical`||e===`flir`||e===`night`,r=n?`visible`:`none`,i=n?`none`:`visible`;t.getLayer(`basemap-sat`)&&t.setLayoutProperty(`basemap-sat`,`visibility`,r),t.getLayer(`labels-sat`)&&t.setLayoutProperty(`labels-sat`,`visibility`,r),t.getLayer(`basemap-dark`)&&t.setLayoutProperty(`basemap-dark`,`visibility`,i),t.getLayer(`labels-dark`)&&t.setLayoutProperty(`labels-dark`,`visibility`,i)},[e]),(0,_.useEffect)(()=>{let e=p.current;e&&e.getLayer(`traffic-flow-layer`)&&e.setLayoutProperty(`traffic-flow-layer`,`visibility`,le?`visible`:`none`)},[le]),(0,_.useEffect)(()=>{p.current&&a&&p.current.flyTo({center:[a.lng,a.lat],zoom:13.5,pitch:58,duration:1800,essential:!0})},[a]),(0,_.useEffect)(()=>{let e=!0,t=async()=>{try{let t=await LL.getLiveFlights();e&&S(t)}catch{}};t();let n=setInterval(t,12e3);return()=>{e=!1,clearInterval(n)}},[]),(0,_.useEffect)(()=>{if(!ae)return;let e=setInterval(()=>{let e=LL.advanceFlightPositions(.8);S([...e]),w(t=>{if(!t)return null;let n=e.find(e=>e.icao24===t.icao24||e.callsign===t.callsign);return n?{...n}:t})},800);return()=>clearInterval(e)},[ae]),(0,_.useEffect)(()=>{let e=p.current;e&&(m.current.forEach(e=>e.remove()),m.current=[],re&&ML.forEach(n=>{let r=document.createElement(`div`);r.className=`group cursor-pointer relative`,r.innerHTML=`
${n.name.split(` / `)[0]}
`,r.addEventListener(`click`,e=>{e.stopPropagation(),Q.playTargetLock(),t(n)});let i=new gF({element:r}).setLngLat([n.lng,n.lat]).addTo(e);m.current.push(i)}))},[re,t]),(0,_.useEffect)(()=>{let e=p.current;if(!e)return;if(!ae){h.current.forEach(e=>e.marker.remove()),h.current.clear();return}let t=new Set(x.map(e=>e.callsign));h.current.forEach((e,n)=>{t.has(n)||(e.marker.remove(),h.current.delete(n))}),x.forEach(t=>{let n=C?.callsign===t.callsign,r=t.isCargo,i=t.isEmergency,a=h.current.get(t.callsign);if(a){a.marker.setLngLat([t.lng,t.lat]),a.rotEl.style.transform=`rotate(${t.headingDeg}deg)`,a.altEl.textContent=`${t.altitudeFt}ft`,n?(a.badgeEl.className=`mt-0.5 px-1.5 py-0.5 rounded bg-black/95 border border-emerald-400 text-emerald-300 text-[9px] font-mono whitespace-nowrap shadow-xl flex items-center gap-1 group-hover:border-white transition-colors`,a.svgEl.setAttribute(`class`,`w-6 h-6 text-emerald-400 drop-shadow-[0_0_12px_#34d399] scale-125`)):i?(a.badgeEl.className=`mt-0.5 px-1.5 py-0.5 rounded bg-black/95 border border-red-500 text-red-300 text-[9px] font-mono whitespace-nowrap shadow-xl flex items-center gap-1 group-hover:border-white transition-colors`,a.svgEl.setAttribute(`class`,`w-6 h-6 text-red-400 drop-shadow-[0_0_12px_#ef4444] animate-pulse`)):r?(a.badgeEl.className=`mt-0.5 px-1.5 py-0.5 rounded bg-black/95 border border-amber-500/60 text-amber-300 text-[9px] font-mono whitespace-nowrap shadow-xl flex items-center gap-1 group-hover:border-white transition-colors`,a.svgEl.setAttribute(`class`,`w-6 h-6 text-amber-400 drop-shadow-[0_0_10px_#f59e0b]`)):(a.badgeEl.className=`mt-0.5 px-1.5 py-0.5 rounded bg-black/95 border border-cyan-500/50 text-cyan-300 text-[9px] font-mono whitespace-nowrap shadow-xl flex items-center gap-1 group-hover:border-white transition-colors`,a.svgEl.setAttribute(`class`,`w-6 h-6 text-cyan-300 drop-shadow-[0_0_8px_#06b6d4]`));return}let o=document.createElement(`div`);o.className=`group cursor-pointer relative`;let s=document.createElement(`div`);s.style.transform=`rotate(${t.headingDeg}deg)`,s.className=`transition-transform duration-700`,s.innerHTML=` `;let c=document.createElement(`div`);c.className=`mt-0.5 px-1.5 py-0.5 rounded bg-black/95 border ${n?`border-emerald-400 text-emerald-300`:i?`border-red-500 text-red-300`:r?`border-amber-500/60 text-amber-300`:`border-cyan-500/50 text-cyan-300`} text-[9px] font-mono whitespace-nowrap shadow-xl flex items-center gap-1 group-hover:border-white transition-colors`,c.innerHTML=` ${t.callsign} ${t.altitudeFt}ft `,o.appendChild(s),o.appendChild(c),o.addEventListener(`click`,e=>{e.stopPropagation(),Q.playTargetLock(),w(t),E(null),O(null),A(null)});let l=new gF({element:o}).setLngLat([t.lng,t.lat]).addTo(e),u=s.querySelector(`svg`),d=c.querySelector(`.alt-text`);h.current.set(t.callsign,{marker:l,el:o,rotEl:s,altEl:d,badgeEl:c,svgEl:u})})},[x,ae,C]),(0,_.useEffect)(()=>{let e=p.current;e&&(g.current.forEach(e=>e.remove()),g.current=[],se&&NL.forEach(t=>{let n=T?.id===t.id,r=document.createElement(`div`);r.className=`group cursor-pointer relative`,r.innerHTML=`
${t.name} • ${t.speedVal} kts
`,r.addEventListener(`click`,e=>{e.stopPropagation(),Q.playTargetLock(),E(t),w(null),O(null),A(null)});let i=new gF({element:r}).setLngLat([t.lng,t.lat]).addTo(e);g.current.push(i)}))},[se,T]),(0,_.useEffect)(()=>{let e=p.current;e&&(v.current.forEach(e=>e.remove()),v.current=[],de&&FL.forEach(t=>{let n=document.createElement(`div`);n.className=`group cursor-pointer relative`;let r=t.status===`FLOOD_WARNING`||t.status===`ELEVATED`;n.innerHTML=`
${r?`🌊`:`💧`}
${t.riverName} • ${t.currentLevelM}m
`,n.addEventListener(`click`,n=>{n.stopPropagation(),Q.playClick(),e.flyTo({center:[t.lng,t.lat],zoom:12.5,pitch:45,duration:1200})});let i=new gF({element:n}).setLngLat([t.lng,t.lat]).addTo(e);v.current.push(i)}))},[de]),(0,_.useEffect)(()=>{let e=p.current;e&&(y.current.forEach(e=>e.remove()),y.current=[],pe&&BL.breakdown.forEach(t=>{let n=D?.id===t.id,r=document.createElement(`div`);r.className=`group cursor-pointer relative`,r.innerHTML=`
${t.region} ${t.affected} OUT
`,r.addEventListener(`click`,e=>{e.stopPropagation(),Q.playTargetLock(),O(t),w(null),E(null),A(null)});let i=new gF({element:r}).setLngLat([t.lng,t.lat]).addTo(e);y.current.push(i)}))},[pe,D]),(0,_.useEffect)(()=>{let e=p.current;if(!e)return;let t=`road-closed-source`,n=`road-closed-layer`,r=`road-closed-glow`,i=`diversion-route-source`,a=`diversion-route-layer`,o=`diversion-route-glow`;if(e.getLayer(n)&&e.removeLayer(n),e.getLayer(r)&&e.removeLayer(r),e.getSource(t)&&e.removeSource(t),e.getLayer(a)&&e.removeLayer(a),e.getLayer(o)&&e.removeLayer(o),e.getSource(i)&&e.removeSource(i),b.current.forEach(e=>e.remove()),b.current=[],!k)return;let s=`road-closed-hazard`;e.getLayer(s)&&e.removeLayer(s),e.addSource(t,{type:`geojson`,data:{type:`Feature`,properties:{},geometry:{type:`LineString`,coordinates:k.closedStretchCoordinates}}}),e.addLayer({id:r,type:`line`,source:t,paint:{"line-color":`#ef4444`,"line-width":18,"line-blur":8,"line-opacity":.8}}),e.addLayer({id:n,type:`line`,source:t,layout:{"line-join":`round`,"line-cap":`round`},paint:{"line-color":`#dc2626`,"line-width":7}}),e.addLayer({id:s,type:`line`,source:t,layout:{"line-join":`round`,"line-cap":`round`},paint:{"line-color":`#ffffff`,"line-width":2.5,"line-dasharray":[2,2],"line-opacity":.95}}),e.addSource(i,{type:`geojson`,data:{type:`Feature`,properties:{},geometry:{type:`LineString`,coordinates:k.diversionCoordinates}}}),e.addLayer({id:o,type:`line`,source:i,paint:{"line-color":`#0284c7`,"line-width":14,"line-blur":6,"line-opacity":.7}}),e.addLayer({id:a,type:`line`,source:i,layout:{"line-join":`round`,"line-cap":`round`},paint:{"line-color":`#0369a1`,"line-width":6}});let c=`diversion-route-dash`;e.getLayer(c)&&e.removeLayer(c),e.addLayer({id:c,type:`line`,source:i,layout:{"line-join":`round`,"line-cap":`round`},paint:{"line-color":`#38bdf8`,"line-width":4.5,"line-dasharray":[3,2]}});let l=k.closedStretchCoordinates[0],u=document.createElement(`div`);u.className=`group cursor-pointer`,u.innerHTML=`
⛔ CLOSED: ENTRY
`;let d=new gF({element:u}).setLngLat(l).addTo(e);b.current.push(d);let f=[k.lng,k.lat],m=document.createElement(`div`);m.className=`group cursor-pointer`,m.innerHTML=`
💥 INCIDENT SITE
`;let h=new gF({element:m}).setLngLat(f).addTo(e);b.current.push(h);let g=k.closedStretchCoordinates[k.closedStretchCoordinates.length-1];if(g&&(g[0]!==l[0]||g[1]!==l[1])){let t=document.createElement(`div`);t.className=`group cursor-pointer`,t.innerHTML=`
⛔ CLOSED: END
`;let n=new gF({element:t}).setLngLat(g).addTo(e);b.current.push(n)}let _=k.diversionCoordinates[0],v=document.createElement(`div`);v.className=`group cursor-pointer`,v.innerHTML=`
🔄 DIVERSION ROUTE
`;let y=new gF({element:v}).setLngLat(_).addTo(e);b.current.push(y)},[k]),(0,_.useEffect)(()=>{let e=setInterval(()=>{De(e=>{let t=e.lng+.005,n=e.lat-.003;return t>-5&&(t=-8.2),n<54&&(n=55.4),{...e,lng:Number(t.toFixed(4)),lat:Number(n.toFixed(4))}})},1e3);return()=>clearInterval(e)},[]),(0,_.useEffect)(()=>{let e=p.current;if(!e||!j||!C){N.current=null;return}let t=C,n=[e.getCenter().lng,e.getCenter().lat],r=e.getPitch(),i=e.getBearing(),a=e.getZoom();(!N.current||N.current.callsign!==t.callsign)&&(N.current={callsign:t.callsign,lng:t.lng,lat:t.lat,altitudeFt:t.altitudeFt,velocityKts:t.velocityKts,headingDeg:t.headingDeg,verticalRateFpm:t.verticalRateFpm,lastTimestamp:performance.now(),camPitch:r,camBearing:i,camZoom:a,isAligning:!0,alignStart:performance.now(),fromCenter:n,fromPitch:r,fromBearing:i,fromZoom:a});let o,s=()=>{if(!j||!p.current)return;let e=N.current;if(!e){o=requestAnimationFrame(s);return}let t=performance.now(),n=Math.min(.1,Math.max(.001,(t-e.lastTimestamp)/1e3));if(e.lastTimestamp=t,e.velocityKts>0){let t=e.velocityKts*1.852/3600*n,r=e.headingDeg*Math.PI/180,i=t*Math.cos(r)/111,a=t*Math.sin(r)/(111*Math.cos(e.lat*Math.PI/180));e.lat+=i,e.lng+=a,e.lat>55.6&&(e.lat=54),e.lat<53.8&&(e.lat=55.3),e.lng>-5&&(e.lng=-8.2),e.lng<-8.5&&(e.lng=-5.3)}let r=70,i=e.headingDeg,a=14.2;if(ee===`chase`?(r=62,a=13.5):ee===`wing`&&(r=56,i=(e.headingDeg+45)%360,a=13.8),e.isAligning){let n=(t-e.alignStart)/1e3,o=Math.min(1,n/1),s=o<.5?2*o*o:-1+(4-2*o)*o,c=e.fromCenter[0]+(e.lng-e.fromCenter[0])*s,l=e.fromCenter[1]+(e.lat-e.fromCenter[1])*s,u=e.fromPitch+(r-e.fromPitch)*s,d=e.fromZoom+(a-e.fromZoom)*s,f=(i-e.fromBearing+540)%360-180,m=(e.fromBearing+f*s+360)%360;e.camPitch=u,e.camBearing=m,e.camZoom=d,p.current.jumpTo({center:[c,l],pitch:u,bearing:m,zoom:d}),o>=1&&(e.isAligning=!1)}else{let t=Math.min(1,n*6);e.camPitch+=(r-e.camPitch)*t,e.camZoom+=(a-e.camZoom)*t;let o=(i-e.camBearing+540)%360-180;e.camBearing=(e.camBearing+o*t+360)%360,p.current.jumpTo({center:[e.lng,e.lat],pitch:e.camPitch,bearing:e.camBearing,zoom:e.camZoom})}let c=h.current.get(e.callsign);c&&(c.marker.setLngLat([e.lng,e.lat]),c.rotEl.style.transform=`rotate(${e.headingDeg}deg)`),t-ne.current>500&&(ne.current=t,w(t=>!t||t.callsign!==e.callsign?t:{...t,lat:Number(e.lat.toFixed(5)),lng:Number(e.lng.toFixed(5))})),o=requestAnimationFrame(s)};return o=requestAnimationFrame(s),()=>cancelAnimationFrame(o)},[j,C?.callsign,ee]),(0,_.useEffect)(()=>{let e=N.current;if(!e)return;let t=x.find(t=>t.callsign===e.callsign||t.icao24===C?.icao24);t&&(e.lat+=(t.lat-e.lat)*.15,e.lng+=(t.lng-e.lng)*.15,e.velocityKts=t.velocityKts,e.headingDeg=t.headingDeg,e.altitudeFt=t.altitudeFt,e.verticalRateFpm=t.verticalRateFpm)},[x,C?.icao24]),(0,_.useEffect)(()=>{j&&p.current&&T&&p.current.easeTo({center:[T.lng,T.lat],bearing:T.headingDeg,pitch:58,zoom:14,duration:1200})},[j,T]),(0,_.useEffect)(()=>{if(!xe||!p.current){Te.current&&cancelAnimationFrame(Te.current);return}let e=p.current,t=()=>{if(!xe)return;let n=e.getBearing();e.setBearing((n+.12)%360),Te.current=requestAnimationFrame(t)};return Te.current=requestAnimationFrame(t),()=>{Te.current&&cancelAnimationFrame(Te.current)}},[xe]);let je=()=>{if(!p.current)return;Q.playTargetLock();let e=(Ce+1)%tR.length;we(e);let t=tR[e];p.current.flyTo({center:[t.lng,t.lat],pitch:t.pitch,bearing:t.bearing,zoom:t.zoom,speed:.6,curve:1.4,essential:!0})},Me=()=>{if(!p.current)return;Q.playTargetLock();let e=(Ce-1+tR.length)%tR.length;we(e);let t=tR[e];p.current.flyTo({center:[t.lng,t.lat],pitch:t.pitch,bearing:t.bearing,zoom:t.zoom,speed:.6,curve:1.4,essential:!0})},Ne=()=>{p.current&&(Q.playClick(),p.current.easeTo({bearing:0,duration:600}))},Pe=e=>{p.current&&(Q.playClick(),p.current.easeTo({pitch:e,duration:800}))};return(0,_.useEffect)(()=>{if(!p.current)return;let e=p.current,t=e=>{P&&(Q.playRadarPing(),ve({lat:e.lngLat.lat,lng:e.lngLat.lng}))};return e.on(`click`,t),()=>{e.off(`click`,t)}},[P]),(0,$.jsxs)(`div`,{className:`relative w-full h-full overflow-hidden select-none`,children:[(0,$.jsx)(`div`,{ref:f,className:`w-full h-full ${e===`flir`?`flir-mode`:e===`night`?`night-recon-mode`:e===`sigint`?`sigint-mode`:e===`stealth`?`stealth-mode`:``}`}),(0,$.jsx)(`div`,{className:`absolute inset-0 tactical-vignette pointer-events-none`}),(0,$.jsx)(`div`,{className:`absolute inset-0 scanlines pointer-events-none opacity-40`}),he&&(0,$.jsx)(`div`,{className:`absolute top-3 left-4 z-20 pointer-events-auto`,children:(0,$.jsxs)(`div`,{className:`bg-slate-950/85 backdrop-blur-md border border-cyan-500/40 rounded-xl p-2.5 shadow-xl text-xs text-slate-200 flex items-center gap-3`,children:[(0,$.jsxs)(`div`,{className:`relative w-8 h-8 rounded-lg bg-cyan-950 border border-cyan-400 flex items-center justify-center text-cyan-400`,children:[(0,$.jsx)(VI,{className:`w-4 h-4 animate-pulse`}),(0,$.jsx)(`div`,{className:`absolute -top-1 -right-1 w-2.5 h-2.5 rounded-full bg-emerald-400 animate-ping`})]}),(0,$.jsxs)(`div`,{children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(`span`,{className:`font-bold text-cyan-300 font-mono text-[11px] uppercase tracking-wider`,children:`SENTINEL-ULSTER // SAT-1`}),(0,$.jsx)(`span`,{className:`text-[9px] bg-cyan-950 text-cyan-300 px-1.5 py-0.5 rounded border border-cyan-500/30`,children:`LOW EARTH ORBIT`})]}),(0,$.jsxs)(`div`,{className:`flex items-center gap-3 text-[10px] text-slate-400 font-mono mt-0.5`,children:[(0,$.jsxs)(`span`,{children:[`ALT: `,Ee.altKm,`km`]}),(0,$.jsxs)(`span`,{children:[`VEL: `,Ee.velocityKmh,`km/h`]}),(0,$.jsxs)(`span`,{children:[`LAT: `,Ee.lat,`°`]}),(0,$.jsxs)(`span`,{children:[`LNG: `,Ee.lng,`°`]})]})]})]})}),!j&&(C||T||D||k)&&(0,$.jsx)(`div`,{className:`absolute bottom-6 left-4 z-30 pointer-events-auto max-w-sm w-88`,children:(0,$.jsxs)(`div`,{className:`bg-slate-950/95 backdrop-blur-md border border-cyan-400/80 rounded-2xl p-4 shadow-2xl corner-bracket text-xs space-y-3`,children:[(0,$.jsxs)(`div`,{className:`flex items-start justify-between gap-2 border-b border-cyan-500/30 pb-2`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(`span`,{className:`text-cyan-400 font-mono text-[10px] uppercase font-bold tracking-widest`,children:k?`[ INCIDENT // CLOSURE & DIVERSION ]`:D?`[ GRID FAULT // NIE NETWORKS ]`:`[ TARGET ACQUIRED ]`}),(0,$.jsx)(`span`,{className:`w-2 h-2 rounded-full ${k?`bg-rose-500`:D?`bg-amber-400`:`bg-emerald-400`} animate-pulse`})]}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),w(null),E(null),O(null),A(null),M(!1),s&&s(),l&&l(),d&&d()},className:`text-slate-400 hover:text-white cursor-pointer`,children:(0,$.jsx)(kL,{className:`w-4 h-4`})})]}),k&&(0,$.jsxs)(`div`,{className:`space-y-2 font-mono`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,$.jsx)(`span`,{className:`text-base font-bold text-white`,children:k.route}),(0,$.jsx)(`span`,{className:`text-[10px] bg-rose-950 text-rose-300 px-2 py-0.5 rounded border border-rose-500/50 font-bold`,children:`⛔ CLOSED`})]}),(0,$.jsx)(`div`,{className:`text-[11px] text-slate-300 font-semibold`,children:k.location}),(0,$.jsx)(`p`,{className:`text-[10px] text-slate-400 leading-tight`,children:k.description}),(0,$.jsxs)(`div`,{className:`bg-sky-950/80 border border-sky-400/50 p-2.5 rounded-xl text-[11px] text-sky-200`,children:[(0,$.jsx)(`div`,{className:`text-[10px] font-bold text-sky-300 uppercase flex items-center gap-1 mb-1`,children:(0,$.jsx)(`span`,{children:`🔄 SUGGESTED DIVERSION (BLUE ROUTE)`})}),(0,$.jsx)(`div`,{children:k.diversionAdvice}),(0,$.jsxs)(`div`,{className:`text-[10px] text-amber-300 font-bold mt-1.5 flex items-center justify-between`,children:[(0,$.jsx)(`span`,{children:`ESTIMATED DELAY:`}),(0,$.jsxs)(`span`,{children:[`+`,k.delayMins,` MINS`]})]})]}),(0,$.jsxs)(`div`,{className:`flex items-center gap-2 pt-1`,children:[(0,$.jsx)(`button`,{onClick:()=>{Q.playTargetLock(),ke(k,!0)},className:`flex-1 py-1.5 bg-rose-950/90 hover:bg-rose-900 border border-rose-500/60 text-rose-200 font-bold text-[10px] rounded-lg cursor-pointer flex items-center justify-center gap-1 transition-all shadow-md active:scale-95`,title:`Zoom in tight to incident collision site (Zoom 15.6)`,children:(0,$.jsx)(`span`,{children:`🔍 CLOSE-UP`})}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),Ae(k)},className:`flex-1 py-1.5 bg-sky-950/90 hover:bg-sky-900 border border-sky-500/60 text-sky-200 font-bold text-[10px] rounded-lg cursor-pointer flex items-center justify-center gap-1 transition-all shadow-md active:scale-95`,title:`Fit both closed road and diversion route on screen`,children:(0,$.jsx)(`span`,{children:`🗺️ FULL ROUTE`})}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),A(null),s&&s()},className:`py-1.5 px-2.5 bg-slate-800 hover:bg-slate-700 text-slate-300 font-bold text-[10px] rounded-lg cursor-pointer transition-colors`,children:`CLEAR`})]})]}),D&&(0,$.jsxs)(`div`,{className:`space-y-2 font-mono`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,$.jsx)(`span`,{className:`text-base font-bold text-amber-300`,children:D.region}),(0,$.jsxs)(`span`,{className:`text-[10px] bg-amber-950 text-amber-300 px-2 py-0.5 rounded border border-amber-500/50 font-bold`,children:[`⚡ `,D.postcodePrefix]})]}),(0,$.jsxs)(`div`,{className:`grid grid-cols-2 gap-2 text-[11px]`,children:[(0,$.jsxs)(`div`,{className:`bg-slate-900/90 p-2 rounded border border-slate-800`,children:[(0,$.jsx)(`span`,{className:`text-[9px] text-slate-400 block`,children:`PROPERTIES OUT`}),(0,$.jsx)(`span`,{className:`text-base font-bold text-amber-400`,children:D.affected.toLocaleString()})]}),(0,$.jsxs)(`div`,{className:`bg-slate-900/90 p-2 rounded border border-slate-800`,children:[(0,$.jsx)(`span`,{className:`text-[9px] text-slate-400 block`,children:`EST. RESTORATION`}),(0,$.jsx)(`span`,{className:`text-base font-bold text-white`,children:D.estRestoration})]})]}),(0,$.jsxs)(`div`,{className:`bg-slate-900/90 p-2 rounded border border-slate-800 text-[10px]`,children:[(0,$.jsx)(`span`,{className:`text-slate-400 block font-bold mb-0.5`,children:`CAUSE:`}),(0,$.jsx)(`span`,{className:`text-slate-200 leading-tight`,children:D.cause})]}),(0,$.jsxs)(`div`,{className:`text-[10px] text-slate-400 flex items-center justify-between`,children:[(0,$.jsxs)(`span`,{children:[`FAULT REF: `,D.faultRef]}),(0,$.jsxs)(`span`,{className:`text-emerald-400 font-bold`,children:[`● `,D.status]})]})]}),C&&(0,$.jsxs)(`div`,{className:`space-y-1.5 font-mono`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,$.jsx)(`span`,{className:`text-base font-bold text-white`,children:C.callsign}),(0,$.jsx)(`span`,{className:`text-[10px] bg-cyan-950 text-cyan-300 px-2 py-0.5 rounded border border-cyan-500/40`,children:C.airline})]}),(0,$.jsx)(`div`,{className:`text-[11px] text-slate-300`,children:C.route}),(0,$.jsx)(`div`,{className:`text-[10px] text-slate-400`,children:C.aircraftType}),(0,$.jsxs)(`div`,{className:`grid grid-cols-3 gap-2 pt-2 border-t border-slate-800 text-center`,children:[(0,$.jsxs)(`div`,{className:`bg-slate-900/80 p-1.5 rounded`,children:[(0,$.jsx)(`span`,{className:`text-[9px] text-slate-400 block`,children:`ALTITUDE`}),(0,$.jsxs)(`span`,{className:`font-bold text-cyan-300`,children:[C.altitudeFt.toLocaleString(),` ft`]})]}),(0,$.jsxs)(`div`,{className:`bg-slate-900/80 p-1.5 rounded`,children:[(0,$.jsx)(`span`,{className:`text-[9px] text-slate-400 block`,children:`AIRSPEED`}),(0,$.jsxs)(`span`,{className:`font-bold text-emerald-300`,children:[C.velocityKts,` kts`]})]}),(0,$.jsxs)(`div`,{className:`bg-slate-900/80 p-1.5 rounded`,children:[(0,$.jsx)(`span`,{className:`text-[9px] text-slate-400 block`,children:`HEADING`}),(0,$.jsxs)(`span`,{className:`font-bold text-amber-300`,children:[C.headingDeg,`°`]})]})]}),(0,$.jsxs)(`button`,{onClick:()=>{Q.playTargetLock(),M(!0)},className:`w-full py-2.5 rounded-xl text-xs font-bold transition-all flex items-center justify-center gap-2 cursor-pointer mt-2 shadow-md bg-gradient-to-r from-cyan-500 to-emerald-500 hover:from-cyan-400 hover:to-emerald-400 text-slate-950 font-black active:scale-98`,children:[(0,$.jsx)(tI,{className:`w-4 h-4`}),(0,$.jsx)(`span`,{children:`HOP IN PILOT'S SEAT (CHASE VIEW)`})]})]}),T&&(0,$.jsxs)(`div`,{className:`space-y-1.5 font-mono`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,$.jsx)(`span`,{className:`text-base font-bold text-white`,children:T.name}),(0,$.jsx)(`span`,{className:`text-[10px] bg-cyan-950 text-cyan-300 px-2 py-0.5 rounded border border-cyan-500/40`,children:T.operator})]}),(0,$.jsxs)(`div`,{className:`text-[11px] text-slate-300`,children:[T.origin,` ➔ `,T.destination]}),(0,$.jsx)(`div`,{className:`text-[10px] text-cyan-200`,children:T.cargoDescription}),(0,$.jsxs)(`div`,{className:`grid grid-cols-2 gap-2 pt-2 border-t border-slate-800 text-center`,children:[(0,$.jsxs)(`div`,{className:`bg-slate-900/80 p-1.5 rounded`,children:[(0,$.jsx)(`span`,{className:`text-[9px] text-slate-400 block`,children:`SPEED`}),(0,$.jsxs)(`span`,{className:`font-bold text-cyan-300`,children:[T.speedVal,` kts`]})]}),(0,$.jsxs)(`div`,{className:`bg-slate-900/80 p-1.5 rounded`,children:[(0,$.jsx)(`span`,{className:`text-[9px] text-slate-400 block`,children:`GROSS TONNAGE`}),(0,$.jsxs)(`span`,{className:`font-bold text-emerald-300`,children:[T.grossTonnage?.toLocaleString()||`N/A`,` GT`]})]})]})]})]})}),j&&C&&(0,$.jsx)(eR,{flight:C,cameraMode:ee,onChangeCameraMode:te,onExit:()=>{Q.playClick(),M(!1),N.current=null,d&&d(),p.current&&p.current.easeTo({pitch:45,bearing:0,zoom:11.5,duration:1200})}}),!j&&(0,$.jsxs)($.Fragment,{children:[P&&(0,$.jsx)(`div`,{className:`absolute top-20 right-4 z-30 pointer-events-auto max-w-sm w-80`,children:(0,$.jsxs)(`div`,{className:`bg-slate-950/95 backdrop-blur-md border border-cyan-400/80 rounded-2xl p-4 shadow-2xl corner-bracket text-xs space-y-3`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between border-b border-cyan-500/30 pb-2`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-1.5 text-cyan-300 font-bold font-mono`,children:[(0,$.jsx)(tI,{className:`w-4 h-4`}),(0,$.jsx)(`span`,{children:`3D RADAR GEOFENCE TOOL`})]}),(0,$.jsx)(`button`,{onClick:()=>F(!1),className:`text-slate-400 hover:text-white`,children:(0,$.jsx)(kL,{className:`w-4 h-4`})})]}),(0,$.jsx)(`p`,{className:`text-[11px] text-slate-300`,children:_e?`Radar perimeter active. Adjust radius or save as custom surveillance ping.`:`Click anywhere on the 3D map to drop your surveillance radar center.`}),_e&&(0,$.jsxs)(`div`,{className:`space-y-3`,children:[(0,$.jsxs)(`div`,{className:`space-y-1`,children:[(0,$.jsxs)(`div`,{className:`flex justify-between text-[11px] text-slate-300`,children:[(0,$.jsx)(`span`,{children:`Surveillance Radius:`}),(0,$.jsxs)(`span`,{className:`font-bold text-cyan-300`,children:[ye,` km`]})]}),(0,$.jsx)(`input`,{type:`range`,min:`1`,max:`15`,step:`1`,value:ye,onChange:e=>be(parseInt(e.target.value,10)),className:`w-full accent-cyan-400`})]}),(0,$.jsxs)(`div`,{className:`bg-slate-900/90 p-2.5 rounded-xl border border-slate-800 space-y-1.5 font-mono text-[11px]`,children:[(0,$.jsx)(`div`,{className:`text-[10px] text-cyan-400 font-bold uppercase tracking-wider`,children:`ZONE TELEMETRY AUDIT`}),(0,$.jsxs)(`div`,{className:`flex justify-between text-slate-300`,children:[(0,$.jsx)(`span`,{children:`CCTV Cameras Inside:`}),(0,$.jsx)(`span`,{className:`font-bold text-white`,children:Oe.cams.length})]}),(0,$.jsxs)(`div`,{className:`flex justify-between text-slate-300`,children:[(0,$.jsx)(`span`,{children:`Aircraft Overhead:`}),(0,$.jsx)(`span`,{className:`font-bold text-white`,children:Oe.flights.length})]}),(0,$.jsxs)(`div`,{className:`flex justify-between text-slate-300`,children:[(0,$.jsx)(`span`,{children:`Vessels & Ferries:`}),(0,$.jsx)(`span`,{className:`font-bold text-white`,children:Oe.vessels.length})]})]}),(0,$.jsxs)(`button`,{onClick:()=>{Q.playClick(),!r&&i?i():n&&n({lat:_e.lat,lng:_e.lng,radiusKm:ye})},className:`w-full py-2.5 rounded-xl bg-gradient-to-r from-cyan-500 to-blue-600 hover:from-cyan-400 hover:to-blue-500 text-slate-950 font-bold text-xs flex items-center justify-center gap-2 cursor-pointer shadow-lg active:scale-95`,children:[(0,$.jsx)(ZI,{className:`w-3.5 h-3.5`}),(0,$.jsx)(`span`,{children:r?`SAVE AS CUSTOM PRO PING`:`UPGRADE TO PRO TO SAVE PING (£3)`})]})]})]})}),(0,$.jsxs)(`div`,{className:`absolute top-20 right-4 z-20 flex flex-col gap-1.5 font-mono text-xs pointer-events-auto`,children:[(0,$.jsx)(`button`,{onClick:Ne,className:`p-2 rounded-lg bg-slate-950/85 border border-cyan-500/40 hover:border-cyan-300 text-cyan-300 hover:text-white shadow-xl backdrop-blur-md transition-all cursor-pointer flex items-center justify-center group`,title:`Reset Compass Bearing North (0°)`,children:(0,$.jsx)($F,{className:`w-4 h-4 group-hover:rotate-45 transition-transform`})}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),ie(!re)},className:`p-2 rounded-lg border shadow-xl backdrop-blur-md transition-all cursor-pointer flex items-center justify-center ${re?`bg-emerald-950/90 border-emerald-400 text-emerald-300 shadow-emerald-500/20`:`bg-slate-950/80 border-slate-700 text-slate-400`}`,title:re?`Hide 38 Traffic Cameras`:`Show 38 Traffic Cameras`,children:(0,$.jsx)(yL,{className:`w-4 h-4`})}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),oe(!ae)},className:`p-2 rounded-lg border shadow-xl backdrop-blur-md transition-all cursor-pointer flex items-center justify-center ${ae?`bg-amber-950/90 border-amber-400 text-amber-300 shadow-amber-500/20`:`bg-slate-950/80 border-slate-700 text-slate-400`}`,title:ae?`Hide Airspace Flights`:`Show Airspace Flights`,children:(0,$.jsx)(LI,{className:`w-4 h-4`})}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),ce(!se)},className:`p-2 rounded-lg border shadow-xl backdrop-blur-md transition-all cursor-pointer flex items-center justify-center ${se?`bg-blue-950/90 border-blue-400 text-blue-300 shadow-blue-500/20`:`bg-slate-950/80 border-slate-700 text-slate-400`}`,title:se?`Hide Maritime Cargo`:`Show Maritime Cargo`,children:(0,$.jsx)($I,{className:`w-4 h-4`})}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),me(!pe)},className:`p-2 rounded-lg border shadow-xl backdrop-blur-md transition-all cursor-pointer flex items-center justify-center ${pe?`bg-amber-950/90 border-amber-400 text-amber-300 shadow-amber-500/20`:`bg-slate-950/80 border-slate-700 text-slate-400`}`,title:pe?`Hide Power Outages`:`Show Power Outages (NIE Networks)`,children:(0,$.jsx)(jL,{className:`w-4 h-4`})}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),ue(!le)},className:`p-2 rounded-lg border shadow-xl backdrop-blur-md transition-all cursor-pointer flex items-center justify-center ${le?`bg-cyan-950/90 border-cyan-400 text-cyan-300 shadow-cyan-500/20`:`bg-slate-950/80 border-slate-700 text-slate-400`}`,title:le?`Hide Live Traffic Flow`:`Show Live Traffic Flow`,children:(0,$.jsx)(yI,{className:`w-4 h-4`})}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),fe(!de)},className:`p-2 rounded-lg border shadow-xl backdrop-blur-md transition-all cursor-pointer flex items-center justify-center ${de?`bg-sky-950/90 border-sky-400 text-sky-300 shadow-sky-500/20`:`bg-slate-950/80 border-slate-700 text-slate-400`}`,title:de?`Hide Flood Gauges`:`Show Flood Gauges`,children:(0,$.jsx)(aI,{className:`w-4 h-4`})}),(0,$.jsxs)(`div`,{className:`flex flex-col bg-slate-950/85 border border-cyan-500/30 rounded-lg p-1 backdrop-blur-md gap-1`,children:[(0,$.jsx)(`button`,{onClick:()=>Pe(0),className:`px-1.5 py-1 text-[9px] font-bold rounded cursor-pointer transition-all text-slate-400 hover:text-white hover:bg-slate-800`,title:`Top-Down Nadir (0° pitch)`,children:`TOP`}),(0,$.jsx)(`button`,{onClick:()=>Pe(50),className:`px-1.5 py-1 text-[9px] font-bold rounded cursor-pointer transition-all text-cyan-300 hover:bg-slate-800`,title:`Tactical Recon (50° pitch)`,children:`50°`}),(0,$.jsx)(`button`,{onClick:()=>Pe(72),className:`px-1.5 py-1 text-[9px] font-bold rounded cursor-pointer transition-all text-slate-400 hover:text-white hover:bg-slate-800`,title:`Horizon Ridge (72° pitch)`,children:`72°`})]})]}),(0,$.jsxs)(`div`,{className:`absolute bottom-6 right-4 z-20 flex flex-col items-end gap-2.5 pointer-events-auto`,children:[(0,$.jsxs)(`button`,{onClick:()=>{if(Q.playClick(),F(!P),!_e&&p.current){let e=p.current.getCenter();ve({lat:e.lat,lng:e.lng})}},className:`px-3 py-2 rounded-xl backdrop-blur-md border text-xs font-mono font-bold flex items-center gap-2 shadow-lg transition-all cursor-pointer ${P?`bg-cyan-500 text-slate-950 border-cyan-400 shadow-cyan-500/20`:`bg-slate-950/80 text-cyan-300 border-cyan-500/40 hover:bg-slate-900`}`,title:`Draw custom 3D surveillance radar circle on Ulster map`,children:[(0,$.jsx)(tI,{className:`w-4 h-4`}),(0,$.jsx)(`span`,{children:`RADAR GEOFENCE`})]}),(0,$.jsxs)(`button`,{onClick:()=>{Q.playClick(),Se(!xe)},className:`px-3 py-2 rounded-xl backdrop-blur-md border text-xs font-mono font-bold flex items-center gap-2 shadow-lg transition-all cursor-pointer ${xe?`bg-emerald-500 text-slate-950 border-emerald-400 shadow-emerald-500/20`:`bg-slate-950/80 text-slate-300 border-slate-700 hover:bg-slate-900`}`,title:`Continuous 360 degree orbital rotation over Ulster`,children:[(0,$.jsx)(GI,{className:`w-4 h-4 ${xe?`animate-spin`:``}`}),(0,$.jsx)(`span`,{children:xe?`ORBITING (60 FPS)`:`360° SNOOP ORBIT`})]}),(0,$.jsxs)(`div`,{className:`bg-slate-950/90 backdrop-blur-md border border-slate-800 rounded-xl p-1.5 flex items-center gap-1.5 shadow-lg text-xs font-mono`,children:[(0,$.jsx)(`button`,{onClick:Me,className:`p-1.5 rounded-lg hover:bg-slate-800 text-slate-400 hover:text-white`,title:`Previous strategic pass`,children:(0,$.jsx)(UF,{className:`w-4 h-4`})}),(0,$.jsx)(`span`,{className:`text-[11px] text-cyan-300 px-2 font-bold truncate max-w-[150px]`,children:tR[Ce].name}),(0,$.jsx)(`button`,{onClick:je,className:`p-1.5 rounded-lg hover:bg-slate-800 text-slate-400 hover:text-white`,title:`Next strategic pass`,children:(0,$.jsx)(GF,{className:`w-4 h-4`})})]})]})]})]})},rR=[{title:`Glenshane Pass (A6 Summit)`,subtitle:`High Mountain Pass • Co. Londonderry • 302m Elev • Primary Trans-Ulster Route`,category:`PASS`,lat:54.8821,lng:-6.7842,elevationM:302,keywords:[`glenshane`,`pass`,`a6`,`carntogher`,`maghera`,`derry road`,`dungiven`]},{title:`Spelga Dam & Pass (Mournes)`,subtitle:`High Mountain Pass • Co. Down • 365m Elev • Silent Valley Approach`,category:`PASS`,lat:54.1785,lng:-6.0592,elevationM:365,keywords:[`spelga`,`dam`,`spelga pass`,`mournes`,`mourne`,`kilkeel`,`hilltown`]},{title:`Torr Road / Tor Head`,subtitle:`Steep Coastal Pass • Co. Antrim • 240m Elev • North Channel Lookout`,category:`PASS`,lat:55.195,lng:-6.072,elevationM:240,keywords:[`torr`,`tor head`,`torr road`,`ballycastle`,`cushendun`]},{title:`Carnlough Pass (Glencloy)`,subtitle:`Upland Mountain Corridor • Co. Antrim • 280m Elev`,category:`PASS`,lat:54.992,lng:-6.015,elevationM:280,keywords:[`carnlough`,`glencloy`,`ballymena road`,`antrim glens`]},{title:`Shannon's Hill (A5 Corrick)`,subtitle:`Arterial Transport Pass • Co. Tyrone • 195m Elev • Western Corridor`,category:`PASS`,lat:54.498,lng:-7.085,elevationM:195,keywords:[`shannons hill`,`shannon`,`a5`,`ballygawley`,`omagh`,`corrick`]},{title:`Divis & Black Mountain`,subtitle:`Belfast Mountain Ridge • Co. Antrim • 478m Elev • Radar & Transmitting Hub`,category:`SUMMIT`,lat:54.611,lng:-6.012,elevationM:478,keywords:[`divis`,`black mountain`,`belfast hills`,`transmitting station`]},{title:`Cavehill (Napoleon's Nose)`,subtitle:`Iconic Belfast Peak • Co. Antrim • 368m Elev`,category:`SUMMIT`,lat:54.654,lng:-5.952,elevationM:368,keywords:[`cavehill`,`cave hill`,`napoleons nose`,`belfast castle`]},{title:`Slieve Donard Summit`,subtitle:`Highest Peak in Northern Ireland • Co. Down • 850m Elev`,category:`SUMMIT`,lat:54.1802,lng:-5.9221,elevationM:850,keywords:[`slieve donard`,`donard`,`highest peak`,`mournes`,`newcastle`]},{title:`Cuilcagh Mountain (Stairway to Heaven)`,subtitle:`High Upland Ridge • Co. Fermanagh • 665m Elev`,category:`SUMMIT`,lat:54.202,lng:-7.812,elevationM:665,keywords:[`cuilcagh`,`stairway to heaven`,`boardwalk`,`fermanagh`,`marble arch`]},{title:`A12 Westlink (Broadway to M2)`,subtitle:`Central Belfast Highway • Carrying 80k Vehicles Daily`,category:`CORRIDOR`,lat:54.6014,lng:-5.9425,elevationM:45,keywords:[`westlink`,`a12`,`broadway`,`divis`,`grosvenor`,`clifton street`]},{title:`M2 Bellevue Hill Motorway Climb`,subtitle:`Northbound Motorway • J1 Fortwilliam to J4 Sandyknowes`,category:`CORRIDOR`,lat:54.6742,lng:-5.9692,elevationM:145,keywords:[`m2`,`bellevue`,`sandyknowes`,`greencastle`,`templepatrick`]},{title:`A1 Sprucefield to Newry Cross-Border Artery`,subtitle:`Belfast - Dublin Motorway Corridor • Dual Carriageway`,category:`CORRIDOR`,lat:54.345,lng:-6.275,elevationM:80,keywords:[`a1`,`sprucefield`,`banbridge`,`hillsborough`,`dromore`,`sheepbridge`,`newry`]},{title:`Belfast (City Centre / City Hall)`,subtitle:`Capital City • Co. Antrim & Down • 12m Elev`,category:`TOWN`,lat:54.5973,lng:-5.9301,elevationM:12,keywords:[`belfast`,`city centre`,`donegall square`,`city hall`,`bt1`,`bt2`]},{title:`Derry / Londonderry`,subtitle:`Walled City • Co. Londonderry • 25m Elev`,category:`TOWN`,lat:54.9966,lng:-7.3086,elevationM:25,keywords:[`derry`,`londonderry`,`foyle`,`cityside`,`waterside`,`bt48`,`bt47`]},{title:`Ballymena`,subtitle:`Borough Town • Co. Antrim • 64m Elev • Seven Towers`,category:`TOWN`,lat:54.8639,lng:-6.2764,elevationM:64,keywords:[`ballymena`,`broughshane`,`cullybackey`,`bt42`,`bt43`]},{title:`Bangor`,subtitle:`Coastal City • Co. Down • 18m Elev`,category:`TOWN`,lat:54.6601,lng:-5.6706,elevationM:18,keywords:[`bangor`,`marina`,`north down`,`bt19`,`bt20`]},{title:`Lisburn`,subtitle:`City • Co. Antrim / Down • 35m Elev`,category:`TOWN`,lat:54.5162,lng:-6.0435,elevationM:35,keywords:[`lisburn`,`lagan valley`,`bt27`,`bt28`]},{title:`Newry`,subtitle:`Gateway City • Co. Armagh & Down • 15m Elev`,category:`TOWN`,lat:54.1751,lng:-6.3402,elevationM:15,keywords:[`newry`,`clanrye`,`mourne gateway`,`bt34`,`bt35`]},{title:`Armagh`,subtitle:`Cathedral City • Co. Armagh • 60m Elev • Orchard County`,category:`TOWN`,lat:54.3503,lng:-6.6528,elevationM:60,keywords:[`armagh`,`cathedral city`,`the mall`,`bt60`,`bt61`]},{title:`Omagh`,subtitle:`County Town • Co. Tyrone • 68m Elev`,category:`TOWN`,lat:54.6,lng:-7.3,elevationM:68,keywords:[`omagh`,`strone`,`tyrone`,`bt78`,`bt79`]},{title:`Enniskillen`,subtitle:`Island Town • Co. Fermanagh • 50m Elev • Erne Lakes`,category:`TOWN`,lat:54.3444,lng:-7.6389,elevationM:50,keywords:[`enniskillen`,`lough erne`,`fermanagh`,`bt74`,`bt75`]},{title:`Coleraine`,subtitle:`University Town • Co. Londonderry • 18m Elev`,category:`TOWN`,lat:55.1328,lng:-6.6664,elevationM:18,keywords:[`coleraine`,`bann`,`causeway coast`,`bt51`,`bt52`]},{title:`Newtownards`,subtitle:`Ards Borough • Co. Down • 15m Elev • Scrabo Tower`,category:`TOWN`,lat:54.593,lng:-5.694,elevationM:15,keywords:[`newtownards`,`ards`,`scrabo`,`strangford`,`bt23`]},{title:`Carrickfergus`,subtitle:`Historic Coastal Town • Co. Antrim • 12m Elev`,category:`TOWN`,lat:54.713,lng:-5.807,elevationM:12,keywords:[`carrickfergus`,`carrick`,`castle`,`belfast lough`,`bt38`]},{title:`Larne`,subtitle:`Ferry Port Town • Co. Antrim • 20m Elev`,category:`TOWN`,lat:54.853,lng:-5.819,elevationM:20,keywords:[`larne`,`harbour`,`antrim coast`,`a8`,`bt40`]},{title:`Antrim`,subtitle:`Lough Neagh Town • Co. Antrim • 50m Elev`,category:`TOWN`,lat:54.717,lng:-6.217,elevationM:50,keywords:[`antrim`,`antrim castle`,`lough neagh`,`six mile water`,`bt41`]},{title:`Banbridge`,subtitle:`Market Town • Co. Down • 60m Elev • River Bann`,category:`TOWN`,lat:54.349,lng:-6.269,elevationM:60,keywords:[`banbridge`,`the cut`,`a1`,`bann`,`bt32`]},{title:`Portrush`,subtitle:`North Coast Resort • Co. Antrim • 15m Elev`,category:`TOWN`,lat:55.204,lng:-6.654,elevationM:15,keywords:[`portrush`,`ramore`,`west strand`,`east strand`,`bt56`]},{title:`Portstewart`,subtitle:`North Coast Town • Co. Londonderry • 20m Elev`,category:`TOWN`,lat:55.181,lng:-6.711,elevationM:20,keywords:[`portstewart`,`portstewart strand`,`promenade`,`bt55`]},{title:`Newcastle`,subtitle:`Seaside Resort • Co. Down • 10m Elev • Mournes Base`,category:`TOWN`,lat:54.214,lng:-5.892,elevationM:10,keywords:[`newcastle`,`mournes`,`slieve donard`,`dundrum bay`,`bt33`]},{title:`Strabane`,subtitle:`Border Town • Co. Tyrone • 30m Elev`,category:`TOWN`,lat:54.827,lng:-7.468,elevationM:30,keywords:[`strabane`,`mourne river`,`foyle`,`bt82`]},{title:`Limavady`,subtitle:`Roe Valley Town • Co. Londonderry • 25m Elev`,category:`TOWN`,lat:55.05,lng:-6.95,elevationM:25,keywords:[`limavady`,`roe valley`,`danny boy`,`bt49`]},{title:`Magherafelt`,subtitle:`Market Town • Co. Londonderry • 45m Elev`,category:`TOWN`,lat:54.755,lng:-6.608,elevationM:45,keywords:[`magherafelt`,`south derry`,`lough neagh`,`bt45`]},{title:`Maghera`,subtitle:`Sperrins Foothills Town • Co. Londonderry • 75m Elev`,category:`TOWN`,lat:54.845,lng:-6.673,elevationM:75,keywords:[`maghera`,`glenshane base`,`carntogher`,`bt46`]},{title:`Cookstown`,subtitle:`Market Town • Co. Tyrone • 70m Elev • Longest High Street`,category:`TOWN`,lat:54.643,lng:-6.745,elevationM:70,keywords:[`cookstown`,`mid ulster`,`ballinderry`,`bt80`]},{title:`Dungannon`,subtitle:`Hilltop Town • Co. Tyrone • 85m Elev`,category:`TOWN`,lat:54.504,lng:-6.769,elevationM:85,keywords:[`dungannon`,`oneill`,`ranfurly`,`bt70`,`bt71`]},{title:`Lurgan`,subtitle:`Craigavon Area • Co. Armagh • 45m Elev`,category:`TOWN`,lat:54.464,lng:-6.336,elevationM:45,keywords:[`lurgan`,`craigavon`,`lurgan park`,`bt66`,`bt67`]},{title:`Portadown`,subtitle:`River Bann Town • Co. Armagh • 25m Elev`,category:`TOWN`,lat:54.421,lng:-6.444,elevationM:25,keywords:[`portadown`,`craigavon`,`bann`,`bt62`,`bt63`]},{title:`Ballycastle`,subtitle:`Antrim Glens Resort • Co. Antrim • 15m Elev • Rathlin Gateway`,category:`TOWN`,lat:55.201,lng:-6.25,elevationM:15,keywords:[`ballycastle`,`rathlin island`,`fair head`,`bt54`]},{title:`Warrenpoint`,subtitle:`Carlingford Lough Port • Co. Down • 10m Elev`,category:`TOWN`,lat:54.102,lng:-6.253,elevationM:10,keywords:[`warrenpoint`,`carlingford lough`,`rostrevor`,`bt34`]},{title:`BT1 — Belfast City Centre`,subtitle:`Postcode Sector • Donegall Sq / High St / City Hall`,category:`POSTCODE`,lat:54.5973,lng:-5.9301,elevationM:12,keywords:[`bt1`,`belfast central`,`city hall`]},{title:`BT9 — South Belfast (Malone / Lisburn Rd)`,subtitle:`Postcode Sector • Malone / Stranmillis / Upper Lisburn Rd`,category:`POSTCODE`,lat:54.571,lng:-5.955,elevationM:30,keywords:[`bt9`,`malone`,`lisburn road`,`stranmillis`,`south belfast`]},{title:`BT36 — Newtownabbey & Glengormley`,subtitle:`Postcode Sector • Hightown / Carnmoney / Glengormley`,category:`POSTCODE`,lat:54.678,lng:-5.975,elevationM:120,keywords:[`bt36`,`newtownabbey`,`glengormley`,`hightown`,`sandyknowes`]},{title:`BT42 — Ballymena West & Upland Routes`,subtitle:`Postcode Sector • Ahoghill / Portglenone / Cullybackey`,category:`POSTCODE`,lat:54.863,lng:-6.28,elevationM:65,keywords:[`bt42`,`ballymena`,`ahoghill`,`cullybackey`]},{title:`BT48 — Derry Cityside & North`,subtitle:`Postcode Sector • Derry / Culmore / Shantallow`,category:`POSTCODE`,lat:55.01,lng:-7.32,elevationM:35,keywords:[`bt48`,`derry cityside`,`culmore`,`shantallow`]},{title:`BT34 — Mournes & Newry South`,subtitle:`Postcode Sector • Warrenpoint / Kilkeel / Spelga Approaches`,category:`POSTCODE`,lat:54.14,lng:-6.2,elevationM:90,keywords:[`bt34`,`mournes`,`warrenpoint`,`kilkeel`,`hilltown`]},{title:`BT78 — Omagh South & Tyrone Uplands`,subtitle:`Postcode Sector • Dromore / Fintona / Sixmilecross`,category:`POSTCODE`,lat:54.56,lng:-7.34,elevationM:110,keywords:[`bt78`,`omagh`,`fintona`,`dromore tyrone`]},{title:`Belfast International Airport (BFS Cargo Terminal)`,subtitle:`Primary Air Freight Hub • Aldergrove • Co. Antrim • DHL & Royal Mail Base`,category:`CARGO`,lat:54.6575,lng:-6.2158,elevationM:81,keywords:[`bfs`,`aldergrove`,`dhl`,`air cargo`,`freight`,`airport`,`bt29`]},{title:`Port of Belfast Container Terminal (VT4 / Duncrue)`,subtitle:`Major Maritime Container & Bulk Hub • Victoria Channel • Stena Line Berths`,category:`CARGO`,lat:54.622,lng:-5.895,elevationM:2,keywords:[`belfast harbour`,`port of belfast`,`stena`,`container`,`freight`,`vt4`]},{title:`Port of Larne Freight Hub (Curran Quay)`,subtitle:`Shortest Sea Crossing to Cairnryan • P&O RoRo Freight Terminal`,category:`CARGO`,lat:54.848,lng:-5.798,elevationM:3,keywords:[`larne port`,`curran quay`,`p&o`,`cairnryan`,`freight`,`bt40`]}],iR=new class{async searchLocation(e){if(!e||e.trim().length<1)return[];let t=e.trim().toLowerCase(),n=[],r=new Set;for(let e of rR){let i=e.title.toLowerCase(),a=e.subtitle.toLowerCase(),o=i.includes(t),s=a.includes(t),c=e.keywords.some(e=>e.includes(t)||t.includes(e));(o||s||c)&&(r.add(e.title.toLowerCase()),n.push({placeId:`local-${e.title.replace(/[^a-zA-Z0-9]/g,`-`).toLowerCase()}`,displayName:`${e.title}, Northern Ireland`,title:e.title,subtitle:e.subtitle,category:e.category,lat:e.lat,lng:e.lng,elevationM:e.elevationM,type:e.category.toLowerCase()}))}if(n.sort((e,n)=>(e.title.toLowerCase().startsWith(t)?-1:1)-(n.title.toLowerCase().startsWith(t)?-1:1)),t.length<3||n.length>=8)return n.slice(0,10);try{let t=`https://nominatim.openstreetmap.org/search?q=${encodeURIComponent(e.trim())}&countrycodes=gb,ie&viewbox=-8.25,55.35,-5.35,54.00&bounded=1&format=json&limit=6&addressdetails=1`,i=new AbortController,a=setTimeout(()=>i.abort(),2800),o=await fetch(t,{signal:i.signal,headers:{"Accept-Language":`en`,"User-Agent":`ISpyNI-OrbitalRecon/1.0`}});if(clearTimeout(a),o.ok){let e=await o.json();for(let t of e){let e=parseFloat(t.lat),i=parseFloat(t.lon);if(e<54||e>55.4||i<-8.3||i>-5.35)continue;let a=t.display_name.split(`,`)[0].trim();if(r.has(a.toLowerCase()))continue;r.add(a.toLowerCase());let o=t.display_name.split(`,`).map(e=>e.trim()),s=o.find(e=>/county|antrim|down|armagh|tyrone|fermanagh|derry|londonderry/i.test(e))||`Northern Ireland`,c=o[1]?o[1]:`Ulster Region`;n.push({placeId:t.place_id,displayName:t.display_name,title:a,subtitle:`${c} • ${s}`,category:t.type===`administrative`?`TOWN`:`ADDRESS`,lat:e,lng:i,type:t.type})}}}catch{}return n.slice(0,12)}},aR=({currentView:e,onSwitchView:t,sensorMode:n,onSelectSensorMode:r,onNavigateToCoords:i,onOpenMultiCamWall:a,onOpenCustomPings:o,onOpenProModal:s,onOpenAdManager:c,isPro:l=!1,isAudioMuted:u,onToggleAudio:d})=>{let[f,p]=(0,_.useState)(``),[m,h]=(0,_.useState)(``),[g,v]=(0,_.useState)([]),[y,b]=(0,_.useState)(!1),x=(0,_.useRef)(null);return(0,_.useEffect)(()=>{let e=()=>{p(new Date().toLocaleTimeString(`en-GB`,{timeZone:`Europe/London`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`,hour12:!1})+` BST`)};e();let t=setInterval(e,1e3);return()=>clearInterval(t)},[]),(0,_.useEffect)(()=>{let e=e=>{x.current&&!x.current.contains(e.target)&&b(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[]),(0,$.jsxs)(`header`,{className:`relative z-40 bg-slate-950/95 backdrop-blur-md border-b border-cyan-500/30 px-3 sm:px-6 py-2.5 flex items-center justify-between gap-3 text-white font-mono shrink-0 shadow-lg`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-3 shrink-0`,children:[(0,$.jsxs)(`div`,{onClick:()=>{Q.playClick(),t(`map`)},className:`flex items-center gap-2.5 cursor-pointer group`,children:[(0,$.jsx)(`img`,{src:`/logo-dark-header.png`,alt:`I SPY NI`,className:`h-8 sm:h-9 object-contain drop-shadow-[0_0_12px_rgba(6,182,212,0.35)] group-hover:scale-102 transition-transform`}),(0,$.jsx)(`span`,{className:`text-[9px] bg-cyan-950 text-cyan-300 border border-cyan-500/40 px-1.5 py-0.5 rounded font-bold tracking-wider hidden sm:inline-block`,children:`RECON`})]}),(0,$.jsxs)(`div`,{className:`hidden lg:flex items-center gap-1.5 text-xs text-slate-400 bg-slate-900 border border-slate-800 px-2.5 py-1 rounded-lg`,children:[(0,$.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full bg-emerald-400 animate-pulse`}),(0,$.jsx)(`span`,{children:f})]})]}),(0,$.jsxs)(`div`,{ref:x,className:`relative flex-1 max-w-xs sm:max-w-md hidden md:block`,children:[(0,$.jsxs)(`div`,{className:`relative flex items-center bg-slate-900 border border-slate-700 rounded-xl px-2.5 py-1.5 focus-within:border-cyan-400 focus-within:ring-1 focus-within:ring-cyan-500/30 transition-all`,children:[(0,$.jsx)(qI,{className:`w-4 h-4 text-cyan-400 mr-2 shrink-0`}),(0,$.jsx)(`input`,{type:`text`,value:m,onChange:async e=>{let t=e.target.value;if(h(t),t.trim().length>=1)try{let e=await iR.searchLocation(t);v(e),b(!0)}catch{v([])}else v([]),b(!1)},placeholder:`Search BT postcodes, corridors, flights, ships...`,className:`w-full bg-transparent text-xs text-white placeholder-slate-500 focus:outline-none`}),m&&(0,$.jsx)(`button`,{onClick:()=>{h(``),b(!1)},className:`text-slate-400 hover:text-white text-xs ml-1`,children:`✕`})]}),y&&g.length>0&&(0,$.jsx)(`div`,{className:`absolute top-full left-0 right-0 z-50 mt-1 bg-slate-950 border border-cyan-500/40 rounded-xl shadow-2xl overflow-hidden max-h-72 overflow-y-auto`,children:g.map(n=>(0,$.jsxs)(`div`,{onClick:()=>{Q.playClick(),i(n.lat,n.lng,n.title),b(!1),h(``),e!==`map`&&t(`map`)},className:`p-2.5 hover:bg-slate-900 border-b border-slate-900 flex items-center justify-between gap-2 cursor-pointer transition-colors`,children:[(0,$.jsxs)(`div`,{className:`min-w-0`,children:[(0,$.jsx)(`div`,{className:`text-xs font-bold text-white truncate`,children:n.title}),(0,$.jsx)(`div`,{className:`text-[10px] text-slate-400 truncate`,children:n.subtitle})]}),(0,$.jsx)(`span`,{className:`text-[9px] bg-slate-900 border border-slate-800 text-cyan-300 px-1.5 py-0.5 rounded uppercase shrink-0`,children:n.category})]},n.placeId))})]}),(0,$.jsxs)(`div`,{className:`flex items-center gap-1.5 sm:gap-2 shrink-0`,children:[(0,$.jsxs)(`div`,{className:`flex bg-slate-900 border border-slate-800 p-0.5 rounded-xl text-xs font-bold`,children:[(0,$.jsxs)(`button`,{onClick:()=>{Q.playClick(),t(`map`)},className:`px-2.5 py-1.5 rounded-lg transition-all cursor-pointer flex items-center gap-1 ${e===`map`?`bg-cyan-500 text-slate-950`:`text-slate-400 hover:text-white`}`,children:[(0,$.jsx)($F,{className:`w-3.5 h-3.5`}),(0,$.jsx)(`span`,{className:`hidden sm:inline`,children:`3D MAP`})]}),(0,$.jsxs)(`button`,{onClick:()=>{Q.playClick(),t(`intel`)},className:`px-2.5 py-1.5 rounded-lg transition-all cursor-pointer flex items-center gap-1 ${e===`map`?`text-slate-400 hover:text-white`:`bg-cyan-500 text-slate-950`}`,children:[(0,$.jsx)(VI,{className:`w-3.5 h-3.5`}),(0,$.jsx)(`span`,{className:`hidden sm:inline`,children:`INTEL WIRE`})]})]}),e===`map`&&(0,$.jsx)(`div`,{className:`hidden xl:flex items-center bg-slate-900 border border-slate-800 rounded-xl p-0.5 text-[11px] font-bold`,children:[`optical`,`flir`,`night`,`sigint`,`stealth`].map(e=>(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),r(e)},className:`px-2 py-1 rounded-lg uppercase transition-all cursor-pointer ${n===e?`bg-cyan-500 text-slate-950 font-bold`:`text-slate-400 hover:text-white`}`,children:e},e))}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),a()},className:`p-2 rounded-xl bg-slate-900 border border-slate-800 hover:border-cyan-400 text-slate-300 hover:text-white transition-all cursor-pointer`,title:`Open 4-Split Surveillance Camera Matrix`,children:(0,$.jsx)(yI,{className:`w-4 h-4 text-cyan-400`})}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),o()},className:`p-2 rounded-xl bg-slate-900 border border-slate-800 hover:border-cyan-400 text-slate-300 hover:text-white transition-all cursor-pointer`,title:`Configure Custom Surveillance Watchzones & Pings`,children:(0,$.jsx)(tI,{className:`w-4 h-4 text-amber-400`})}),c&&(0,$.jsxs)(`button`,{onClick:()=>{Q.playClick(),c()},className:`px-2.5 py-1.5 rounded-xl bg-amber-500/15 border border-amber-500/40 hover:bg-amber-500/25 text-amber-300 font-bold text-xs flex items-center gap-1.5 transition-all cursor-pointer shadow-sm`,title:`Manage Amazon Affiliate Campaigns & Ad Rotations (Tag: ispyni-21)`,children:[(0,$.jsx)(lL,{className:`w-3.5 h-3.5 text-amber-400`}),(0,$.jsx)(`span`,{className:`hidden xl:inline`,children:`AMAZON ADS`})]}),(0,$.jsxs)(`button`,{onClick:()=>{Q.playClick(),s()},className:`px-2.5 sm:px-3 py-1.5 rounded-xl font-bold text-xs flex items-center gap-1.5 transition-all cursor-pointer ${l?`bg-emerald-950 text-emerald-300 border border-emerald-500/50`:`bg-gradient-to-r from-amber-500 to-amber-600 hover:from-amber-400 hover:to-amber-500 text-slate-950 shadow-md`}`,children:[(0,$.jsx)(ZI,{className:`w-3.5 h-3.5`}),(0,$.jsx)(`span`,{children:l?`PRO ACTIVE`:`GET PRO (£3)`})]}),(0,$.jsx)(`button`,{onClick:()=>{d(),Q.setMuted(!u)},className:`p-2 rounded-xl bg-slate-900 border border-slate-800 text-slate-400 hover:text-white transition-colors cursor-pointer`,title:u?`Unmute tactical audio`:`Mute tactical audio`,children:u?(0,$.jsx)(CL,{className:`w-4 h-4`}):(0,$.jsx)(xL,{className:`w-4 h-4 text-cyan-400`})})]})]})},oR={buildShareUrl(e){let t=typeof window<`u`&&window.location.origin?window.location.origin:`https://ispyni.com`,n=new URL(t);return e?.articleId?(n.searchParams.set(`article`,e.articleId),n.searchParams.set(`view`,`article`)):e?.alertId&&n.searchParams.set(`alert`,e.alertId),e?.county&&n.searchParams.set(`county`,e.county),e?.view&&!e?.articleId&&n.searchParams.set(`view`,e.view),n.toString()},buildShareText(e){return`🛰️ I SPY NI // RECON DISPATCH\n${e.title}\n${e.detail}\n\nView live 3D orbital surveillance & cameras across Ulster:\n`},async shareContent(e){let t=this.buildShareUrl({articleId:e.articleId,alertId:e.id,county:e.county}),n=this.buildShareText(e);if(typeof navigator<`u`&&navigator.share)try{return await navigator.share({title:`I Spy NI: ${e.title}`,text:n,url:t}),`shared`}catch(e){if(e&&typeof e==`object`&&`name`in e&&e.name===`AbortError`)return`shared`}try{typeof navigator<`u`&&navigator.clipboard&&await navigator.clipboard.writeText(`${n}${t}`)}catch{}return this.openWhatsAppSharer(`${n}${t}`),`opened_wa`},openWhatsAppSharer(e){let t=`https://api.whatsapp.com/send?text=${encodeURIComponent(e)}`;typeof window<`u`&&window.open(t,`_blank`,`noopener,noreferrer`)},openFacebookSharer(e){let t=e||this.buildShareUrl(),n=`https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(t)}`;typeof window<`u`&&window.open(n,`_blank`,`width=620,height=580,noopener,noreferrer`)},openTwitterSharer(e,t){let n=t||this.buildShareUrl(),r=`https://twitter.com/intent/tweet?text=${encodeURIComponent(e)}&url=${encodeURIComponent(n)}`;typeof window<`u`&&window.open(r,`_blank`,`width=600,height=400,noopener,noreferrer`)},async copyLinkToClipboard(e){let t=e||this.buildShareUrl();try{if(typeof navigator<`u`&&navigator.clipboard)return await navigator.clipboard.writeText(t),!0}catch{}return!1}};function sR(e){if(`cameraInfo`in e&&e.cameraInfo)return{id:e.id,cctvId:e.cameraInfo.cctvId,name:e.cameraInfo.title||e.name,county:e.county,elevationM:e.elevationM,lat:e.lat,lng:e.lng,description:e.cameraInfo.description||e.description,route:e.roadRoute,operator:e.cameraInfo.operator||`Trafficwatch NI / DfI Roads`,isMountainPass:e.elevationM>=100};let t=e;return{id:t.id,cctvId:t.cctvId,name:t.name,county:t.county,elevationM:t.elevationM,lat:t.lat,lng:t.lng,description:t.description,route:t.route,operator:`Trafficwatch NI / DfI Roads`,isMountainPass:!!(t.isMountainPass||t.elevationM>=100)}}var cR=({location:e,onClose:t,onSwitchLocation:n})=>{let r=(0,_.useMemo)(()=>e?sR(e):null,[e]),[i,a]=(0,_.useState)(`live`),[o,s]=(0,_.useState)(`normal`),[c,l]=(0,_.useState)(``),[u,d]=(0,_.useState)(``),[f,p]=(0,_.useState)(`A`),[m,h]=(0,_.useState)(``),[g,v]=(0,_.useState)(!1),[y,b]=(0,_.useState)(1),[x,S]=(0,_.useState)(`LIVE`),[C,w]=(0,_.useState)(!1),[T,E]=(0,_.useState)(`ALL`),[D,O]=(0,_.useState)(!1),[k,A]=(0,_.useState)(12),[j,M]=(0,_.useState)(!1),ee=(0,_.useRef)(null),[te,N]=(0,_.useState)([]),[ne,re]=(0,_.useState)(0),[ie,ae]=(0,_.useState)(!0),[oe,se]=(0,_.useState)(1);return(0,_.useEffect)(()=>{if(!r)return;let e=`/api/cctv/${r.cctvId}?t=${Date.now()}`;l(e),d(e),p(`A`),b(1),A(12),h(new Date().toLocaleTimeString(`en-GB`)),S(`LIVE`)},[r?.cctvId]),(0,_.useEffect)(()=>{if(!r)return;let e=setTimeout(()=>{O(!0)},9e4),t=()=>{clearTimeout(e),O(!1),e=setTimeout(()=>{O(!0)},9e4)};return window.addEventListener(`mousemove`,t),window.addEventListener(`touchstart`,t),window.addEventListener(`keydown`,t),()=>{clearTimeout(e),window.removeEventListener(`mousemove`,t),window.removeEventListener(`touchstart`,t),window.removeEventListener(`keydown`,t)}},[r]),(0,_.useEffect)(()=>{if(!r||D||i!==`live`)return;let e=setInterval(()=>{A(e=>{if(e<=1){let e=`/api/cctv/${r.cctvId}?t=${Date.now()}`,t=new Image;return v(!0),t.onload=()=>{f===`A`?(d(e),p(`B`)):(l(e),p(`A`)),h(new Date().toLocaleTimeString(`en-GB`)),b(e=>e+1),S(`LIVE`),v(!1)},t.onerror=()=>{S(`RECONNECTING`),v(!1)},t.src=e,12}return e-1})},1e3);return()=>clearInterval(e)},[r,D,i,f]),(0,_.useEffect)(()=>{if(!r||i!==`timelapse`)return;let e=!0;return(async()=>{try{let t=await fetch(`/api/cctv/${r.cctvId}/timelapse`);if(!t.ok)return;let n=await t.json();e&&n.frames&&n.frames.length>0&&(N(n.frames),re(n.frames.length-1))}catch{}})(),()=>{e=!1}},[r,i]),r?(0,$.jsx)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center p-2 sm:p-4 bg-slate-950/85 backdrop-blur-md`,children:(0,$.jsxs)(`div`,{ref:ee,style:{paddingTop:`max(0.75rem, env(safe-area-inset-top, 0px))`,paddingBottom:`max(0.75rem, env(safe-area-inset-bottom, 0px))`,paddingLeft:`max(0.75rem, env(safe-area-inset-left, 0px))`,paddingRight:`max(0.75rem, env(safe-area-inset-right, 0px))`},className:`relative w-full ${C?`h-full max-w-none`:`max-w-4xl max-h-[92vh]`} bg-slate-900 border border-cyan-500/50 rounded-2xl shadow-2xl flex flex-col overflow-hidden corner-bracket`,children:[(0,$.jsxs)(`div`,{className:`px-4 py-3 bg-slate-950/90 border-b border-cyan-500/30 flex items-center justify-between gap-3 shrink-0`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2.5 min-w-0`,children:[(0,$.jsx)(`div`,{className:`w-8 h-8 rounded-lg bg-cyan-950 border border-cyan-400/80 flex items-center justify-center text-cyan-400 shrink-0`,children:(0,$.jsx)(yL,{className:`w-4 h-4`})}),(0,$.jsxs)(`div`,{className:`min-w-0`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(`h3`,{className:`text-sm sm:text-base font-black text-white truncate font-mono`,children:r.name}),(0,$.jsxs)(`span`,{className:`text-[10px] bg-cyan-950 text-cyan-300 px-1.5 py-0.5 rounded border border-cyan-500/40 uppercase font-mono font-bold shrink-0`,children:[`CAM-`,r.cctvId]})]}),(0,$.jsxs)(`div`,{className:`text-[11px] text-slate-400 font-mono truncate`,children:[r.county,` • `,r.elevationM,`m Elev • `,r.route||`Trans-Ulster Corridor`]})]})]}),(0,$.jsxs)(`div`,{className:`flex items-center gap-1.5 shrink-0`,children:[(0,$.jsx)(`button`,{onClick:async()=>{if(!r)return;Q.playClick();let e=oR.buildShareUrl({alertId:r.id});await oR.copyLinkToClipboard(e)&&(M(!0),setTimeout(()=>M(!1),2e3))},className:`p-1.5 rounded-lg bg-slate-800 hover:bg-slate-700 text-slate-300 hover:text-white transition-colors`,title:`Share live camera feed`,children:j?(0,$.jsx)(VF,{className:`w-4 h-4 text-emerald-400`}):(0,$.jsx)(YI,{className:`w-4 h-4`})}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),w(!C)},className:`p-1.5 rounded-lg bg-slate-800 hover:bg-slate-700 text-slate-300 hover:text-white transition-colors`,children:C?(0,$.jsx)(jI,{className:`w-4 h-4`}):(0,$.jsx)(kI,{className:`w-4 h-4`})}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),t()},className:`p-1.5 rounded-lg bg-red-950/80 hover:bg-red-900 border border-red-500/40 text-red-300 transition-colors`,children:(0,$.jsx)(kL,{className:`w-4 h-4`})})]})]}),(0,$.jsxs)(`div`,{className:`relative flex-1 bg-black overflow-hidden flex items-center justify-center min-h-[260px] sm:min-h-[420px]`,children:[(0,$.jsx)(`img`,{src:c,alt:`${r.name} Frame A`,className:`absolute inset-0 w-full h-full object-contain camera-hd-optical transition-opacity duration-350 ${f===`A`?`opacity-100 z-10`:`opacity-0 z-0`} ${o===`thermal`?`filter contrast-150 saturate-200 hue-rotate-180`:o===`nvg`?`filter brightness-90 contrast-125 sepia hue-rotate-90`:``}`}),(0,$.jsx)(`img`,{src:u,alt:`${r.name} Frame B`,className:`absolute inset-0 w-full h-full object-contain camera-hd-optical transition-opacity duration-350 ${f===`B`?`opacity-100 z-10`:`opacity-0 z-0`} ${o===`thermal`?`filter contrast-150 saturate-200 hue-rotate-180`:o===`nvg`?`filter brightness-90 contrast-125 sepia hue-rotate-90`:``}`}),D&&(0,$.jsxs)(`div`,{className:`absolute inset-0 z-30 bg-slate-950/85 backdrop-blur-sm flex flex-col items-center justify-center text-center p-6 space-y-3`,children:[(0,$.jsx)(`span`,{className:`text-amber-400 font-mono font-bold text-xs uppercase tracking-wider`,children:`STREAM PAUSED // SAVING BANDWIDTH`}),(0,$.jsx)(`p`,{className:`text-xs text-slate-300 max-w-sm`,children:`Stream paused after 90 seconds of inactivity to protect Ulster traffic servers during heavy concurrent spikes.`}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),O(!1)},className:`px-4 py-2 rounded-xl bg-cyan-500 hover:bg-cyan-400 text-slate-950 font-bold text-xs shadow-lg transition-all`,children:`RESUME SNOOPING →`})]}),(0,$.jsxs)(`div`,{className:`absolute top-3 right-3 z-20 flex items-center gap-1 bg-slate-950/80 backdrop-blur rounded-lg p-1 border border-slate-700/80`,children:[(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),s(`normal`)},className:`px-2 py-1 rounded text-[10px] font-mono font-bold transition-all ${o===`normal`?`bg-cyan-500 text-slate-950`:`text-slate-400 hover:text-white`}`,children:`OPTICAL HD`}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),s(`thermal`)},className:`px-2 py-1 rounded text-[10px] font-mono font-bold transition-all ${o===`thermal`?`bg-amber-500 text-slate-950`:`text-slate-400 hover:text-white`}`,children:`FLIR`}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),s(`nvg`)},className:`px-2 py-1 rounded text-[10px] font-mono font-bold transition-all ${o===`nvg`?`bg-emerald-500 text-slate-950`:`text-slate-400 hover:text-white`}`,children:`NVG`})]}),(0,$.jsxs)(`div`,{className:`absolute bottom-3 left-3 z-20 bg-slate-950/85 backdrop-blur px-3 py-1.5 rounded-lg border border-cyan-500/30 flex items-center gap-3 text-[10px] font-mono text-slate-300`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,$.jsx)(`span`,{className:`w-2 h-2 rounded-full ${x===`LIVE`?`bg-emerald-400 animate-pulse`:`bg-amber-400`}`}),(0,$.jsx)(`span`,{className:`font-bold text-white`,children:x})]}),(0,$.jsxs)(`span`,{children:[`SYNC: `,k,`s`]}),(0,$.jsxs)(`span`,{children:[`FRAME: #`,y]}),(0,$.jsxs)(`span`,{className:`text-slate-400 hidden sm:inline`,children:[m,` BST`]})]})]}),(0,$.jsxs)(`div`,{className:`px-3 py-2 bg-slate-950 border-t border-slate-800 flex items-center gap-2 overflow-x-auto no-scrollbar shrink-0`,children:[(0,$.jsx)(`span`,{className:`text-[10px] font-mono text-cyan-400 font-bold uppercase tracking-wider shrink-0 mr-1 hidden sm:inline`,children:`QUICK SWITCH:`}),ML.slice(0,10).map(e=>(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),n(e)},className:`px-2.5 py-1 rounded-lg text-[11px] font-mono font-bold whitespace-nowrap shrink-0 transition-colors ${e.cctvId===r.cctvId?`bg-cyan-500 text-slate-950`:`bg-slate-800/80 text-slate-300 hover:bg-slate-700 hover:text-white`}`,children:e.name.replace(/^(A\d+|M\d+)\s*/,``)},e.id))]})]})}):null},lR=({onClose:e,onSelectCamera:t,isPro:n=!1,onOpenProModal:r})=>{let[i,a]=(0,_.useState)([`cam-westlink-divis`,`cam-glenshane-summit`,`cam-foyle-bridge`,`cam-m2-bellevue`]),[o,s]=(0,_.useState)(Date.now());(0,_.useEffect)(()=>{let e=setInterval(()=>{s(Date.now())},15e3);return()=>clearInterval(e)},[]);let c=i.map(e=>ML.find(t=>t.id===e)||ML[0]);return(0,$.jsx)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center p-2 sm:p-4 bg-slate-950/90 backdrop-blur-md`,children:(0,$.jsxs)(`div`,{style:{paddingTop:`max(0.75rem, env(safe-area-inset-top, 0px))`,paddingBottom:`max(0.75rem, env(safe-area-inset-bottom, 0px))`,paddingLeft:`max(0.75rem, env(safe-area-inset-left, 0px))`,paddingRight:`max(0.75rem, env(safe-area-inset-right, 0px))`},className:`relative w-full max-w-6xl max-h-[95vh] bg-slate-900 border border-cyan-500/50 rounded-2xl shadow-2xl flex flex-col overflow-hidden corner-bracket`,children:[(0,$.jsxs)(`div`,{className:`px-4 py-3 bg-slate-950/95 border-b border-cyan-500/30 flex items-center justify-between gap-3 shrink-0`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2.5`,children:[(0,$.jsx)(`div`,{className:`w-8 h-8 rounded-lg bg-cyan-950 border border-cyan-400 flex items-center justify-center text-cyan-400`,children:(0,$.jsx)(yI,{className:`w-4 h-4`})}),(0,$.jsxs)(`div`,{children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(`h3`,{className:`text-sm sm:text-base font-black text-white font-mono`,children:`PRO SURVEILLANCE MATRIX // 4-SPLIT WALL`}),(0,$.jsx)(`span`,{className:`text-[10px] bg-amber-950 text-amber-300 px-2 py-0.5 rounded border border-amber-500/40 uppercase font-mono font-bold`,children:`PRO FEATURE`})]}),(0,$.jsx)(`div`,{className:`text-[11px] text-slate-400 font-mono`,children:`Simultaneous live optical pass monitoring across strategic Ulster corridors`})]})]}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),e()},className:`p-1.5 rounded-lg bg-red-950/80 hover:bg-red-900 border border-red-500/40 text-red-300 transition-colors`,children:(0,$.jsx)(kL,{className:`w-4 h-4`})})]}),(0,$.jsx)(`div`,{className:`p-3 sm:p-4 grid grid-cols-1 md:grid-cols-2 gap-3 flex-1 overflow-y-auto`,children:c.map((e,n)=>(0,$.jsxs)(`div`,{className:`relative bg-black rounded-xl overflow-hidden border border-slate-800 flex flex-col group`,children:[(0,$.jsxs)(`div`,{className:`absolute top-2 left-2 z-10 bg-slate-950/80 backdrop-blur px-2 py-1 rounded border border-cyan-500/30 text-[10px] font-mono text-cyan-300 font-bold flex items-center gap-1.5`,children:[(0,$.jsx)(`span`,{className:`w-2 h-2 rounded-full bg-emerald-400 animate-pulse`}),(0,$.jsxs)(`span`,{children:[`FEED 0`,n+1,`: `,e.name.replace(/^(A\d+|M\d+)\s*/,``)]})]}),(0,$.jsxs)(`div`,{className:`relative aspect-video w-full bg-slate-950 flex items-center justify-center overflow-hidden`,children:[(0,$.jsx)(`img`,{src:`/api/cctv/${e.cctvId}?t=${o}`,alt:e.name,className:`w-full h-full object-contain camera-hd-optical`}),(0,$.jsx)(`div`,{className:`absolute inset-0 bg-slate-950/40 opacity-0 group-hover:opacity-100 transition-opacity flex items-center justify-center gap-2`,children:(0,$.jsxs)(`button`,{onClick:()=>{Q.playClick(),t(e)},className:`px-3 py-1.5 rounded-lg bg-cyan-500 text-slate-950 font-bold text-xs shadow-lg flex items-center gap-1.5`,children:[(0,$.jsx)(kI,{className:`w-3.5 h-3.5`}),(0,$.jsx)(`span`,{children:`FOCUS FEED`})]})})]}),(0,$.jsxs)(`div`,{className:`p-2 bg-slate-950/90 border-t border-slate-800 text-[10px] font-mono text-slate-400 flex items-center justify-between`,children:[(0,$.jsxs)(`span`,{children:[e.county,` • Elev: `,e.elevationM,`m`]}),(0,$.jsxs)(`span`,{className:`text-cyan-400 font-bold`,children:[`CAM-`,e.cctvId]})]})]},`${e.id}-${n}`))}),!n&&(0,$.jsxs)(`div`,{className:`px-4 py-2.5 bg-amber-950/40 border-t border-amber-500/30 flex items-center justify-between text-xs font-mono text-amber-200`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(CI,{className:`w-4 h-4 text-amber-400`}),(0,$.jsx)(`span`,{children:`Multi-Cam Matrix is running in preview mode. Unlock unlimited custom 4-camera combinations with I Spy NI Pro.`})]}),r&&(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),r()},className:`px-3 py-1 rounded bg-amber-500 hover:bg-amber-400 text-slate-950 font-bold text-xs`,children:`UNLOCK PRO (£3)`})]})]})})};function uR(e){let t=(e+`=`.repeat((4-e.length%4)%4)).replace(/-/g,`+`).replace(/_/g,`/`),n=window.atob(t),r=new Uint8Array(n.length);for(let e=0;e{e.preventDefault(),this.deferredInstallPrompt=e,this.installListeners.forEach(e=>e(!0))}),window.addEventListener(`appinstalled`,()=>{this.isInstalled=!0,this.deferredInstallPrompt=null,this.installListeners.forEach(e=>e(!1))}),(window.matchMedia(`(display-mode: standalone)`).matches||window.navigator.standalone===!0)&&(this.isInstalled=!0))}onInstallPromptChange(e){return e(this.canPromptInstall()),this.installListeners.push(e),()=>{this.installListeners=this.installListeners.filter(t=>t!==e)}}isIOS(){if(typeof window>`u`)return!1;let e=window.navigator.userAgent.toLowerCase();return/iphone|ipad|ipod/.test(e)||navigator.platform===`MacIntel`&&navigator.maxTouchPoints>1}isStandalone(){return typeof window>`u`?!1:window.matchMedia(`(display-mode: standalone)`).matches||window.navigator.standalone===!0}isMobile(){return typeof window>`u`?!1:/android|iphone|ipad|ipod|mobile/i.test(navigator.userAgent)||window.innerWidth<768}canPromptInstall(){return!!this.deferredInstallPrompt}async promptInstall(){if(!this.deferredInstallPrompt)return!1;try{if(this.deferredInstallPrompt.prompt(),(await this.deferredInstallPrompt.userChoice).outcome===`accepted`)return this.isInstalled=!0,this.deferredInstallPrompt=null,this.installListeners.forEach(e=>e(!1)),!0}catch{}return!1}async registerServiceWorker(){if(!(`serviceWorker`in navigator))return null;try{let e=await navigator.serviceWorker.register(`/sw.js`,{scope:`/`});return await navigator.serviceWorker.ready,e}catch(e){return console.warn(`Service Worker registration failed:`,e),null}}async getStatus(){if(typeof window>`u`)return{isSupported:!1,permission:`default`,isSubscribed:!1,isPwaInstalled:!1};let e=`serviceWorker`in navigator&&`PushManager`in window&&`Notification`in window,t=`Notification`in window?Notification.permission:`default`,n=!1;if(e&&t===`granted`)try{let e=await navigator.serviceWorker.getRegistration();e&&(n=!!await e.pushManager.getSubscription())}catch{}return{isSupported:e,permission:t,isSubscribed:n,isPwaInstalled:this.isStandalone()}}async subscribeUser(e=`Belfast`,t,n){try{let r=await this.registerServiceWorker();if(!r)return{success:!1,error:`Service workers not supported on this device`};if(await Notification.requestPermission()!==`granted`)return{success:!1,error:`Notification permission was denied`};let i=await fetch(`/api/push/public-key`);if(!i.ok)throw Error(`Failed to retrieve server push key`);let{publicKey:a}=await i.json(),o=await r.pushManager.getSubscription();if(o||=await r.pushManager.subscribe({userVisibleOnly:!0,applicationServerKey:uR(a)}),!(await fetch(`/api/push/subscribe`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({subscription:o,town:e,email:t,scoutKey:n})})).ok)throw Error(`Failed to save push subscription on server`);return{success:!0}}catch(e){return{success:!1,error:e.message||`Push subscription failed`}}}},fR=({onClose:e,isPro:t=!1,onOpenProModal:n,initialCenter:r})=>{let[i,a]=(0,_.useState)(()=>{try{let e=localStorage.getItem(`ispyni_custom_pings`);if(e)return JSON.parse(e)}catch{}return[{id:`ping-default-1`,name:`Home & Commute Corridor`,locationQuery:`BT9 Belfast (Malone / Stranmillis)`,radiusKm:5,lat:54.571,lng:-5.955,triggers:{roadClosure:!0,heavyDelay:!0,emergencyAircraft:!0,floodWarning:!1},channel:`PUSH_LOCKSCREEN`,createdAt:Date.now()-864e5}]}),[o,s]=(0,_.useState)(`Belfast Westlink Watchzone`),[c,l]=(0,_.useState)(`A12 Westlink / Broadway`),[u,d]=(0,_.useState)(r?.radiusKm||5),[f,p]=(0,_.useState)({roadClosure:!0,heavyDelay:!0,emergencyAircraft:!0,floodWarning:!1}),[m,h]=(0,_.useState)(!1),[g,v]=(0,_.useState)(!1);(0,_.useEffect)(()=>{try{localStorage.setItem(`ispyni_custom_pings`,JSON.stringify(i))}catch{}},[i]);let y=()=>{if(Q.playClick(),!t&&i.length>=1){n&&n();return}let e={id:`ping-${Date.now()}`,name:o,locationQuery:c,radiusKm:u,lat:r?.lat||54.588,lng:r?.lng||-5.955,triggers:{...f},channel:`PUSH_LOCKSCREEN`,createdAt:Date.now()};a([e,...i]),s(``),l(``)},b=e=>{Q.playClick(),a(i.filter(t=>t.id!==e))};return(0,$.jsx)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center p-2 sm:p-4 bg-slate-950/85 backdrop-blur-md`,children:(0,$.jsxs)(`div`,{style:{paddingTop:`max(0.75rem, env(safe-area-inset-top, 0px))`,paddingBottom:`max(0.75rem, env(safe-area-inset-bottom, 0px))`,paddingLeft:`max(0.75rem, env(safe-area-inset-left, 0px))`,paddingRight:`max(0.75rem, env(safe-area-inset-right, 0px))`},className:`relative w-full max-w-2xl max-h-[92vh] bg-slate-900 border border-cyan-500/50 rounded-2xl shadow-2xl flex flex-col overflow-hidden corner-bracket text-xs text-slate-200`,children:[(0,$.jsxs)(`div`,{className:`px-4 py-3 bg-slate-950/95 border-b border-cyan-500/30 flex items-center justify-between gap-3 shrink-0`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2.5`,children:[(0,$.jsx)(`div`,{className:`w-8 h-8 rounded-lg bg-cyan-950 border border-cyan-400 flex items-center justify-center text-cyan-400`,children:(0,$.jsx)(VI,{className:`w-4 h-4 animate-pulse`})}),(0,$.jsxs)(`div`,{children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(`h3`,{className:`text-sm sm:text-base font-black text-white font-mono`,children:`CUSTOM SURVEILLANCE PINGS & WATCHZONES`}),(0,$.jsx)(`span`,{className:`text-[10px] bg-cyan-950 text-cyan-300 px-1.5 py-0.5 rounded border border-cyan-500/40 uppercase font-mono font-bold`,children:`PRO SUITE`})]}),(0,$.jsx)(`div`,{className:`text-[11px] text-slate-400 font-mono`,children:`Automated lock-screen alerts when incidents, standstills, or aircraft breach your radius`})]})]}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),e()},className:`p-1.5 rounded-lg bg-red-950/80 hover:bg-red-900 border border-red-500/40 text-red-300 transition-colors`,children:(0,$.jsx)(kL,{className:`w-4 h-4`})})]}),(0,$.jsxs)(`div`,{className:`p-4 sm:p-6 overflow-y-auto space-y-6`,children:[(0,$.jsxs)(`div`,{className:`space-y-3`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,$.jsxs)(`span`,{className:`font-bold text-cyan-300 font-mono text-[11px] uppercase tracking-wider`,children:[`ACTIVE SURVEILLANCE WATCHZONES (`,i.length,`/3)`]}),(0,$.jsxs)(`button`,{onClick:async()=>{Q.playClick(),v(!0);try{await dR.subscribeUser(`Belfast`);let e=await(await navigator.serviceWorker?.getRegistration())?.pushManager?.getSubscription();e&&(await fetch(`/api/push/send-test`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({subscription:e,town:`Westlink Corridor`})}),h(!0),setTimeout(()=>h(!1),3e3))}catch{h(!0),setTimeout(()=>h(!1),3e3)}finally{v(!1)}},disabled:g,className:`px-2.5 py-1 rounded bg-slate-800 hover:bg-slate-700 text-slate-300 hover:text-white font-mono text-[10px] flex items-center gap-1.5 transition-colors`,children:[m?(0,$.jsx)(VF,{className:`w-3.5 h-3.5 text-emerald-400`}):(0,$.jsx)(rL,{className:`w-3.5 h-3.5`}),(0,$.jsx)(`span`,{children:m?`TEST DELIVERED!`:`SEND TEST PING TO PHONE`})]})]}),i.map(e=>(0,$.jsxs)(`div`,{className:`p-3 bg-slate-950/90 border border-slate-800 rounded-xl space-y-2 relative group hover:border-cyan-500/40 transition-colors`,children:[(0,$.jsxs)(`div`,{className:`flex items-start justify-between`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`h4`,{className:`font-bold text-white font-mono`,children:e.name}),(0,$.jsxs)(`div`,{className:`text-[11px] text-slate-400 flex items-center gap-1.5 mt-0.5 font-mono`,children:[(0,$.jsx)(TI,{className:`w-3 h-3 text-cyan-400`}),(0,$.jsx)(`span`,{children:e.locationQuery}),(0,$.jsx)(`span`,{children:`•`}),(0,$.jsxs)(`span`,{className:`text-cyan-300 font-bold`,children:[e.radiusKm,` km radius`]})]})]}),(0,$.jsx)(`button`,{onClick:()=>b(e.id),className:`p-1 rounded text-slate-500 hover:text-red-400 transition-colors`,title:`Delete watchzone`,children:(0,$.jsx)(pL,{className:`w-3.5 h-3.5`})})]}),(0,$.jsxs)(`div`,{className:`flex flex-wrap gap-1.5 pt-1`,children:[e.triggers.roadClosure&&(0,$.jsx)(`span`,{className:`text-[10px] bg-red-950/80 text-red-300 border border-red-500/40 px-2 py-0.5 rounded font-mono`,children:`⛔ Road Closures`}),e.triggers.heavyDelay&&(0,$.jsx)(`span`,{className:`text-[10px] bg-amber-950/80 text-amber-300 border border-amber-500/40 px-2 py-0.5 rounded font-mono`,children:`⚠️ Delays > 15m`}),e.triggers.emergencyAircraft&&(0,$.jsx)(`span`,{className:`text-[10px] bg-cyan-950/80 text-cyan-300 border border-cyan-500/40 px-2 py-0.5 rounded font-mono`,children:`🚁 Emergency Air Scrambles`}),e.triggers.floodWarning&&(0,$.jsx)(`span`,{className:`text-[10px] bg-blue-950/80 text-blue-300 border border-blue-500/40 px-2 py-0.5 rounded font-mono`,children:`🌊 Flood Alerts`})]})]},e.id))]}),(0,$.jsxs)(`div`,{className:`p-4 bg-slate-950/90 border border-cyan-500/30 rounded-xl space-y-3`,children:[(0,$.jsx)(`span`,{className:`font-bold text-white font-mono text-[11px] uppercase tracking-wider block`,children:`+ CONFIGURE NEW SURVEILLANCE RADAR ZONE`}),(0,$.jsxs)(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 gap-3`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`label`,{className:`text-[10px] text-slate-400 font-mono block mb-1`,children:`ZONE NAME`}),(0,$.jsx)(`input`,{type:`text`,value:o,onChange:e=>s(e.target.value),placeholder:`e.g. My Commute Watch`,className:`w-full bg-slate-900 border border-slate-700 rounded-lg px-2.5 py-1.5 text-xs text-white focus:outline-none focus:border-cyan-400`})]}),(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`label`,{className:`text-[10px] text-slate-400 font-mono block mb-1`,children:`LOCATION OR BT POSTCODE`}),(0,$.jsx)(`input`,{type:`text`,value:c,onChange:e=>l(e.target.value),placeholder:`e.g. BT48, Derry or Glenshane Pass`,className:`w-full bg-slate-900 border border-slate-700 rounded-lg px-2.5 py-1.5 text-xs text-white focus:outline-none focus:border-cyan-400`})]})]}),(0,$.jsxs)(`div`,{children:[(0,$.jsxs)(`div`,{className:`flex justify-between text-[11px] text-slate-300 mb-1`,children:[(0,$.jsx)(`span`,{children:`Surveillance Perimeter Radius:`}),(0,$.jsxs)(`span`,{className:`font-bold text-cyan-300 font-mono`,children:[u,` km`]})]}),(0,$.jsx)(`input`,{type:`range`,min:`1`,max:`15`,step:`1`,value:u,onChange:e=>d(parseInt(e.target.value,10)),className:`w-full accent-cyan-400`})]}),(0,$.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,$.jsx)(`span`,{className:`text-[10px] text-slate-400 font-mono block`,children:`SELECT TRIGGER EVENTS:`}),(0,$.jsxs)(`div`,{className:`grid grid-cols-2 gap-2 text-[11px]`,children:[(0,$.jsxs)(`label`,{className:`flex items-center gap-2 cursor-pointer bg-slate-900 p-2 rounded-lg border border-slate-800`,children:[(0,$.jsx)(`input`,{type:`checkbox`,checked:f.roadClosure,onChange:e=>p({...f,roadClosure:e.target.checked}),className:`accent-cyan-400`}),(0,$.jsx)(`span`,{children:`Road Blocked / Closed`})]}),(0,$.jsxs)(`label`,{className:`flex items-center gap-2 cursor-pointer bg-slate-900 p-2 rounded-lg border border-slate-800`,children:[(0,$.jsx)(`input`,{type:`checkbox`,checked:f.heavyDelay,onChange:e=>p({...f,heavyDelay:e.target.checked}),className:`accent-cyan-400`}),(0,$.jsx)(`span`,{children:`Standstill > 15 mins`})]}),(0,$.jsxs)(`label`,{className:`flex items-center gap-2 cursor-pointer bg-slate-900 p-2 rounded-lg border border-slate-800`,children:[(0,$.jsx)(`input`,{type:`checkbox`,checked:f.emergencyAircraft,onChange:e=>p({...f,emergencyAircraft:e.target.checked}),className:`accent-cyan-400`}),(0,$.jsx)(`span`,{children:`Police/Air Ambulance`})]}),(0,$.jsxs)(`label`,{className:`flex items-center gap-2 cursor-pointer bg-slate-900 p-2 rounded-lg border border-slate-800`,children:[(0,$.jsx)(`input`,{type:`checkbox`,checked:f.floodWarning,onChange:e=>p({...f,floodWarning:e.target.checked}),className:`accent-cyan-400`}),(0,$.jsx)(`span`,{children:`River Flood Crest`})]})]})]}),(0,$.jsxs)(`button`,{onClick:y,className:`w-full py-2.5 rounded-xl bg-cyan-500 hover:bg-cyan-400 text-slate-950 font-bold text-xs font-mono flex items-center justify-center gap-2 shadow-lg transition-all cursor-pointer mt-2`,children:[(0,$.jsx)(zI,{className:`w-4 h-4`}),(0,$.jsx)(`span`,{children:t?`ACTIVATE WATCHZONE PING`:`UNLOCK UNLIMITED WATCHZONES WITH PRO (£3)`})]})]})]})]})})},pR=({onClose:e,isPro:t,onTogglePro:n,initialTab:r=`upgrade`})=>{let[i,a]=(0,_.useState)(t?`status`:r),[o,s]=(0,_.useState)(``),[c,l]=(0,_.useState)(null),[u,d]=(0,_.useState)(null),[f,p]=(0,_.useState)(!1);return(0,$.jsx)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center p-2 sm:p-4 bg-slate-950/85 backdrop-blur-md`,children:(0,$.jsxs)(`div`,{style:{paddingTop:`max(0.75rem, env(safe-area-inset-top, 0px))`,paddingBottom:`max(0.75rem, env(safe-area-inset-bottom, 0px))`,paddingLeft:`max(0.75rem, env(safe-area-inset-left, 0px))`,paddingRight:`max(0.75rem, env(safe-area-inset-right, 0px))`},className:`relative w-full max-w-lg bg-slate-900 border border-cyan-500/50 rounded-2xl shadow-2xl flex flex-col overflow-hidden corner-bracket text-xs text-slate-200`,children:[(0,$.jsxs)(`div`,{className:`px-4 py-3 bg-slate-950/95 border-b border-cyan-500/30 flex items-center justify-between gap-3 shrink-0`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2.5`,children:[(0,$.jsx)(`div`,{className:`w-8 h-8 rounded-lg bg-cyan-950 border border-cyan-400 flex items-center justify-center text-cyan-400`,children:(0,$.jsx)(ZI,{className:`w-4 h-4`})}),(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`div`,{className:`flex items-center gap-2`,children:(0,$.jsx)(`h3`,{className:`text-sm sm:text-base font-black text-white font-mono`,children:`I SPY NI PRO // TACTICAL SCOUT PASS`})}),(0,$.jsx)(`div`,{className:`text-[11px] text-slate-400 font-mono`,children:`Full-spectrum provincial reconnaissance and custom geofenced surveillance`})]})]}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),e()},className:`p-1.5 rounded-lg bg-red-950/80 hover:bg-red-900 border border-red-500/40 text-red-300 transition-colors`,children:(0,$.jsx)(kL,{className:`w-4 h-4`})})]}),(0,$.jsxs)(`div`,{className:`flex border-b border-slate-800 bg-slate-950/50 text-[11px] font-mono`,children:[(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),a(`upgrade`)},className:`flex-1 py-2.5 font-bold transition-colors ${i===`upgrade`?`text-cyan-400 border-b-2 border-cyan-400 bg-slate-900`:`text-slate-400 hover:text-white`}`,children:`⭐ PRO UPGRADE (£3)`}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),a(`login`)},className:`flex-1 py-2.5 font-bold transition-colors ${i===`login`?`text-cyan-400 border-b-2 border-cyan-400 bg-slate-900`:`text-slate-400 hover:text-white`}`,children:`🔑 SIGN IN (SCOUT KEY)`}),t&&(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),a(`status`)},className:`flex-1 py-2.5 font-bold transition-colors ${i===`status`?`text-cyan-400 border-b-2 border-cyan-400 bg-slate-900`:`text-slate-400 hover:text-white`}`,children:`STATUS`})]}),i===`upgrade`&&(0,$.jsxs)(`div`,{className:`p-4 sm:p-6 space-y-4 overflow-y-auto`,children:[(0,$.jsxs)(`div`,{className:`text-center space-y-1`,children:[(0,$.jsx)(`span`,{className:`text-[10px] bg-cyan-950 text-cyan-300 border border-cyan-500/40 px-2 py-0.5 rounded font-mono uppercase font-bold`,children:`1-YEAR SUPPORTER PASS`}),(0,$.jsxs)(`h2`,{className:`text-xl sm:text-2xl font-black text-white font-mono`,children:[`£3.00 `,(0,$.jsx)(`span`,{className:`text-xs text-slate-400 font-normal`,children:`/ Full Year Access`})]}),(0,$.jsx)(`p`,{className:`text-xs text-slate-300 max-w-sm mx-auto`,children:`Help keep Northern Ireland’s real-time 3D orbital surveillance engine, 38+ live webcams, and airspace radar online all year round.`})]}),(0,$.jsxs)(`div`,{className:`bg-slate-950/90 border border-slate-800 rounded-xl p-3.5 space-y-2.5 font-mono text-[11px]`,children:[(0,$.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,$.jsx)(VF,{className:`w-4 h-4 text-cyan-400 shrink-0 mt-0.5`}),(0,$.jsxs)(`span`,{children:[(0,$.jsx)(`strong`,{children:`Custom Surveillance Pings:`}),` Save 3 geofenced watchzones with lock-screen alerts for road closures & standstills.`]})]}),(0,$.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,$.jsx)(VF,{className:`w-4 h-4 text-cyan-400 shrink-0 mt-0.5`}),(0,$.jsxs)(`span`,{children:[(0,$.jsx)(`strong`,{children:`4-Split Multi-Cam Wall:`}),` Stream 4 Trafficwatch NI cameras simultaneously in an ops matrix.`]})]}),(0,$.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,$.jsx)(VF,{className:`w-4 h-4 text-cyan-400 shrink-0 mt-0.5`}),(0,$.jsxs)(`span`,{children:[(0,$.jsx)(`strong`,{children:`Full Cargo & Freight Tracking:`}),` Air cargo manifests and Stena/P&O freight shipping telemetry.`]})]}),(0,$.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,$.jsx)(VF,{className:`w-4 h-4 text-cyan-400 shrink-0 mt-0.5`}),(0,$.jsxs)(`span`,{children:[(0,$.jsx)(`strong`,{children:`Multi-Spectral Sensor Suite:`}),` Unrestricted FLIR Thermal, Phosphor NVG & Electronic SIGINT.`]})]}),(0,$.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,$.jsx)(VF,{className:`w-4 h-4 text-cyan-400 shrink-0 mt-0.5`}),(0,$.jsxs)(`span`,{children:[(0,$.jsx)(`strong`,{children:`Passwordless Scout Key:`}),` Instant cross-device entry on iPhone, iPad, and PC.`]})]})]}),(0,$.jsxs)(`button`,{onClick:async()=>{Q.playClick(),p(!0);try{let e=await fetch(`/api/stripe/create-checkout-session`,{method:`POST`}),t=await e.json();e.ok&&t.url?window.location.href=t.url:(n(!0),a(`status`))}catch{n(!0),a(`status`)}finally{p(!1)}},disabled:f,className:`w-full py-3 rounded-xl bg-gradient-to-r from-cyan-500 to-blue-600 hover:from-cyan-400 hover:to-blue-500 text-slate-950 font-bold font-mono text-sm flex items-center justify-center gap-2 shadow-lg cursor-pointer transition-all active:scale-95`,children:[(0,$.jsx)(aL,{className:`w-4 h-4`}),(0,$.jsx)(`span`,{children:f?`CONNECTING STRIPE...`:`ACTIVATE I SPY NI PRO (£3.00)`})]})]}),i===`login`&&(0,$.jsxs)(`form`,{onSubmit:async e=>{if(e.preventDefault(),Q.playClick(),!o.trim())l(`Please enter your email or Scout Key`);else{p(!0),l(null),d(null);try{let e=await fetch(`/api/pro/login`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({credential:o.trim()})}),t=await e.json();e.ok&&t.success?(Q.playTargetLock(),n(!0),d(`Welcome aboard! Scout Key ${t.subscriber?.scoutKey||``} active.`),a(`status`)):l(t.error||`No active I Spy NI Pro pass found for this key or email.`)}catch{o.toUpperCase().includes(`SPY-`)||o.includes(`@`)?(n(!0),a(`status`)):l(`Network error. Please check your internet connection.`)}finally{p(!1)}}},className:`p-4 sm:p-6 space-y-4`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`label`,{className:`text-[10px] text-slate-400 font-mono block mb-1`,children:`ENTER EMAIL OR SCOUT KEY (e.g. SPY-XXXX)`}),(0,$.jsx)(`input`,{type:`text`,value:o,onChange:e=>s(e.target.value),placeholder:`scout@ispyni.com or SPY-7X9K`,className:`w-full bg-slate-950 border border-slate-700 rounded-xl px-3 py-2.5 text-xs text-white focus:outline-none focus:border-cyan-400 font-mono`})]}),c&&(0,$.jsx)(`div`,{className:`p-2.5 bg-red-950/80 border border-red-500/40 rounded-lg text-red-200 text-xs font-mono`,children:c}),u&&(0,$.jsx)(`div`,{className:`p-2.5 bg-emerald-950/80 border border-emerald-500/40 rounded-lg text-emerald-200 text-xs font-mono`,children:u}),(0,$.jsxs)(`button`,{type:`submit`,disabled:f,className:`w-full py-3 rounded-xl bg-cyan-500 hover:bg-cyan-400 text-slate-950 font-bold font-mono text-xs flex items-center justify-center gap-2 shadow-lg cursor-pointer transition-all`,children:[(0,$.jsx)(_I,{className:`w-4 h-4`}),(0,$.jsx)(`span`,{children:f?`VALIDATING KEY...`:`SIGN IN WITH SCOUT KEY`})]}),(0,$.jsx)(`p`,{className:`text-center text-[10px] text-slate-400 font-mono`,children:`Forgot your Scout Key? Enter your registered email address and we will dispatch a recovery email immediately.`})]}),i===`status`&&(0,$.jsxs)(`div`,{className:`p-4 sm:p-6 space-y-4 text-center`,children:[(0,$.jsx)(`div`,{className:`w-12 h-12 rounded-full bg-emerald-500/20 border border-emerald-400 flex items-center justify-center text-emerald-400 mx-auto`,children:(0,$.jsx)(VF,{className:`w-6 h-6`})}),(0,$.jsxs)(`div`,{className:`space-y-1`,children:[(0,$.jsx)(`h3`,{className:`text-lg font-black text-white font-mono`,children:`PRO SCOUT PASS ACTIVE`}),(0,$.jsx)(`p`,{className:`text-xs text-slate-300`,children:`You have full unrestricted access to all 3D sensor modes, cargo logistics, multi-cam wall, and custom surveillance pings.`})]}),(0,$.jsxs)(`div`,{className:`bg-slate-950/90 border border-slate-800 rounded-xl p-3 text-xs font-mono text-left space-y-1`,children:[(0,$.jsxs)(`div`,{className:`flex justify-between`,children:[(0,$.jsx)(`span`,{className:`text-slate-400`,children:`Pass Status:`}),(0,$.jsx)(`span`,{className:`text-emerald-400 font-bold`,children:`Active Supporter (1 Year)`})]}),(0,$.jsxs)(`div`,{className:`flex justify-between`,children:[(0,$.jsx)(`span`,{className:`text-slate-400`,children:`Scout Key:`}),(0,$.jsx)(`span`,{className:`text-cyan-400 font-bold`,children:`SPY-ALPHA-RECON`})]}),(0,$.jsxs)(`div`,{className:`flex justify-between`,children:[(0,$.jsx)(`span`,{className:`text-slate-400`,children:`Ulster Region:`}),(0,$.jsx)(`span`,{className:`text-white`,children:`All 6 Counties Unlocked`})]})]}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),e()},className:`w-full py-2.5 rounded-xl bg-slate-800 hover:bg-slate-700 text-white font-mono font-bold text-xs`,children:`RETURN TO ORBITAL RECON →`})]})]})})},mR=[{id:`amz-prime-trial`,title:`Amazon Prime — 30-Day Free Trial`,tagline:`Free Fast Delivery Across Northern Ireland + Prime Video`,description:`Huge bargain for NI residents: Get unlimited fast delivery across all 6 counties, Prime Video streaming, Prime Music, and exclusive deals free for 30 days. Cancel anytime.`,ctaText:`START 30-DAY FREE TRIAL (£0.00) →`,badge:`FREE 30-DAY TRIAL`,category:`free_trials`,placements:[`leaderboard`,`in_article`,`sidebar`,`ticker`],offerPrice:`£0.00 (Usually £8.99/mo)`,ratingStars:4.8,amazonUrl:`https://www.amazon.co.uk/tryprimefree?tag=ispyni-21`,weight:10,enabled:!0,clicks:0},{id:`amz-audible-trial`,title:`Audible UK — 30-Day Free Trial`,tagline:`Listen to Bestselling Audiobooks on Your Daily Commute`,description:`Perfect for sitting in M1, M2 or Westlink traffic: Claim 1 free audiobook (2 for Prime members) to keep forever, plus unlimited access to thousands of podcasts and Audible Originals.`,ctaText:`CLAIM FREE AUDIOBOOK →`,badge:`100% FREE TRIAL`,category:`free_trials`,placements:[`leaderboard`,`in_article`,`sidebar`],offerPrice:`FREE Download`,ratingStars:4.7,amazonUrl:`https://www.amazon.co.uk/hz/audible/mlp/membership/premiumplus?tag=ispyni-21`,weight:9,enabled:!0,clicks:0},{id:`amz-music-unlimited`,title:`Amazon Music Unlimited — Free Trial`,tagline:`100 Million Songs in HD & Spatial Audio in Your Car`,description:`Stream all your favourite tunes commercial-free on your daily drive across Northern Ireland. Offline playback with zero data usage.`,ctaText:`TRY FREE FOR 30 DAYS →`,badge:`FREE TRIAL`,category:`free_trials`,placements:[`in_article`,`sidebar`],offerPrice:`£0.00 Trial`,ratingStars:4.6,amazonUrl:`https://www.amazon.co.uk/music/unlimited?tag=ispyni-21`,weight:7,enabled:!0,clicks:0},{id:`amz-kindle-unlimited`,title:`Kindle Unlimited — Unlimited Reading Free Trial`,tagline:`Over 2 Million Books & Magazines on Any Phone or Tablet`,description:`Enjoy unlimited reading on iOS, Android, PC or Kindle. Perfect for relaxing during winter evenings across Ulster.`,ctaText:`START FREE TRIAL →`,badge:`FREE TRIAL`,category:`free_trials`,placements:[`in_article`,`sidebar`],offerPrice:`£0.00 for 30 Days`,ratingStars:4.6,amazonUrl:`https://www.amazon.co.uk/kindle-dbs/hz/signup?tag=ispyni-21`,weight:6,enabled:!0,clicks:0},{id:`amz-dash-cam`,title:`Nextbase HD GPS Smart Dash Cam`,tagline:`Essential Insurance Protection on Northern Ireland Roads`,description:`Crisp 1080p/1440p HD night recording, wide 140° angle, and intelligent Emergency SOS. Save up to 25% on car insurance with verified road video evidence.`,ctaText:`VIEW DASH CAM DEALS ON AMAZON →`,badge:`TOP COMMUTER CHOICE`,category:`motoring_safety`,placements:[`leaderboard`,`in_article`,`sidebar`,`ticker`],offerPrice:`From £79.99 (Best Seller)`,ratingStars:4.7,amazonUrl:`https://www.amazon.co.uk/s?k=nextbase+dash+cam&tag=ispyni-21`,weight:10,enabled:!0,clicks:0},{id:`amz-jump-starter`,title:`NOCO Boost Plus GB40 1000A Car Jump Starter`,tagline:`Never Get Stranded with a Flat Battery in Cold Weather`,description:`Ultra-safe portable lithium battery jump starter pack. Starts flat car, van, and SUV engines in seconds up to 20 times per charge. Built-in LED torch and phone charger.`,ctaText:`CHECK AMAZON DEAL →`,badge:`WINTER ESSENTIAL`,category:`motoring_safety`,placements:[`leaderboard`,`in_article`,`sidebar`],offerPrice:`Prime Next-Day Delivery`,ratingStars:4.8,amazonUrl:`https://www.amazon.co.uk/s?k=noco+boost+gb40+jump+starter&tag=ispyni-21`,weight:9,enabled:!0,clicks:0},{id:`amz-tyre-inflator`,title:`Cordless Portable Digital Tyre Inflator`,tagline:`Instant Roadside Tyre Pressure Top-Ups in Minutes`,description:`Rechargeable electric tyre pump with auto shut-off, digital LCD pressure readout (PSI/BAR), and built-in torch. Compact glovebox essential before hitting the motorway.`,ctaText:`VIEW BARGAIN PRICE →`,badge:`LIMITED DEAL`,category:`motoring_safety`,placements:[`in_article`,`sidebar`],offerPrice:`Under £35`,ratingStars:4.6,amazonUrl:`https://www.amazon.co.uk/s?k=portable+car+tyre+inflator+electric&tag=ispyni-21`,weight:8,enabled:!0,clicks:0},{id:`amz-frost-shield`,title:`Heavy-Duty Magnetic Windscreen Frost & Ice Cover`,tagline:`Zero Scraping on Freezing Ulster Mornings`,description:`All-weather thermal windscreen protector keeps frost, snow, ice, and fallen leaves off your glass. Pack away in seconds and drive off without freezing your hands.`,ctaText:`GRAB WINTER BARGAIN →`,badge:`TOP WINTER SAVER`,category:`motoring_safety`,placements:[`leaderboard`,`in_article`,`sidebar`,`ticker`],offerPrice:`Bargain from £12.99`,ratingStars:4.5,amazonUrl:`https://www.amazon.co.uk/s?k=car+windscreen+frost+cover+magnetic&tag=ispyni-21`,weight:9,enabled:!0,clicks:0},{id:`amz-rain-jacket`,title:`Berghaus & Regatta Waterproof Breathable Storm Jackets`,tagline:`Stay 100% Dry in Heavy Ulster Downpours & Coastal Winds`,description:`Taped seams, windproof membranes, and breathable fabric designed for Mourne Mountains hikes, coastal strolls, or walking the dog in wet NI weather.`,ctaText:`SHOP WATERPROOF DEALS →`,badge:`ALL-WEATHER GEAR`,category:`weather_outdoors`,placements:[`in_article`,`sidebar`],offerPrice:`Up to 40% Off Deals`,ratingStars:4.7,amazonUrl:`https://www.amazon.co.uk/s?k=berghaus+waterproof+jacket+mens+womens&tag=ispyni-21`,weight:7,enabled:!0,clicks:0},{id:`amz-weather-station`,title:`Wireless Digital Home Weather Station & Barometer`,tagline:`Real-Time Temperature, Rain, Humidity & Forecast at Home`,description:`Color LCD indoor/outdoor weather console with remote wireless sensor. Track local micro-climates, freeze warnings, and atmospheric pressure changes accurately.`,ctaText:`VIEW WEATHER CONSOLES →`,badge:`POPULAR HARDWARE`,category:`weather_outdoors`,placements:[`in_article`,`sidebar`],offerPrice:`Great Bargains`,ratingStars:4.5,amazonUrl:`https://www.amazon.co.uk/s?k=wireless+weather+station+indoor+outdoor&tag=ispyni-21`,weight:6,enabled:!0,clicks:0},{id:`amz-ring-doorbell`,title:`Ring Video Doorbell HD (Latest Gen)`,tagline:`Live Video Surveillance of Your Driveway from Your Phone`,description:`Watch over your home from anywhere: 1080p HD video, two-way talk, night vision, and instant motion alerts. Effortless setup on any Ulster home or porch.`,ctaText:`VIEW RING SPECIAL DEALS →`,badge:`BEST SELLER #1`,category:`home_security`,placements:[`leaderboard`,`in_article`,`sidebar`],offerPrice:`Special Amazon Offers`,ratingStars:4.7,amazonUrl:`https://www.amazon.co.uk/s?k=ring+video+doorbell&tag=ispyni-21`,weight:8,enabled:!0,clicks:0},{id:`amz-blink-outdoor`,title:`Blink Outdoor Weatherproof Security Camera System`,tagline:`Wire-Free 2-Year Battery Life HD Surveillance`,description:`Withstands NI wind, rain, and snow. Motion detection alerts, infrared night vision, and cloud/local recording with no wiring required.`,ctaText:`CHECK BLINK BUNDLES →`,badge:`SECURITY UPGRADE`,category:`home_security`,placements:[`in_article`,`sidebar`],offerPrice:`Discounts Available`,ratingStars:4.6,amazonUrl:`https://www.amazon.co.uk/s?k=blink+outdoor+security+camera&tag=ispyni-21`,weight:7,enabled:!0,clicks:0}],hR=new class{affiliateId=`ispyni-21`;campaigns=[];lastServedIndices={};constructor(){this.init()}init(){try{let e=localStorage.getItem(`ispy_amazon_affiliate_id`);e&&e.trim()&&(this.affiliateId=e.trim());let t=localStorage.getItem(`ispy_amazon_campaigns`);if(t){let e=JSON.parse(t);if(Array.isArray(e)&&e.length>0){this.campaigns=e;return}}}catch{}this.campaigns=mR.map(e=>({...e,amazonUrl:this.ensureAffiliateTag(e.amazonUrl,this.affiliateId)}))}getAffiliateId(){return this.affiliateId}setAffiliateId(e){let t=(e||``).trim()||`ispyni-21`;this.affiliateId=t;try{localStorage.setItem(`ispy_amazon_affiliate_id`,t)}catch{}this.campaigns=this.campaigns.map(e=>({...e,amazonUrl:this.ensureAffiliateTag(e.amazonUrl,t)})),this.saveCampaigns()}getAllCampaigns(){return[...this.campaigns]}toggleCampaign(e){let t=this.campaigns.find(t=>t.id===e);t&&(t.enabled=!t.enabled,this.saveCampaigns())}addCustomCampaign(e){let t=`custom-${Date.now()}`,n=this.ensureAffiliateTag(e.amazonUrl,this.affiliateId);this.campaigns.unshift({...e,id:t,amazonUrl:n,clicks:0}),this.saveCampaigns()}removeCampaign(e){this.campaigns=this.campaigns.filter(t=>t.id!==e),this.saveCampaigns()}resetToDefaults(){this.campaigns=mR.map(e=>({...e,amazonUrl:this.ensureAffiliateTag(e.amazonUrl,this.affiliateId)})),this.saveCampaigns()}recordClick(e){let t=this.campaigns.find(t=>t.id===e);t&&(t.clicks=(t.clicks||0)+1,this.saveCampaigns())}getAdForPlacement(e,t){let n=this.campaigns.filter(t=>t.enabled&&t.placements.includes(e));if(n.length===0)return null;let r=n;if(t){let e=n.filter(e=>e.category===t);e.length>0&&(r=e)}let i=r.reduce((e,t)=>e+(t.weight||5),0),a=Math.random()*i;for(let e of r)if(a-=e.weight||5,a<=0)return e;return r[0]||null}ensureAffiliateTag(e,t){if(!e)return`https://www.amazon.co.uk/?tag=${encodeURIComponent(t)}`;try{let n=new URL(e);return n.searchParams.set(`tag`,t),n.toString()}catch{return`${e}${e.includes(`?`)?`&`:`?`}tag=${encodeURIComponent(t)}`}}saveCampaigns(){try{localStorage.setItem(`ispy_amazon_campaigns`,JSON.stringify(this.campaigns))}catch{}}},gR=({isOpen:e,onClose:t})=>{let[n,r]=(0,_.useState)(hR.getAffiliateId()),[i,a]=(0,_.useState)(!1),[o,s]=(0,_.useState)(hR.getAllCampaigns()),[c,l]=(0,_.useState)(`all`),[u,d]=(0,_.useState)(``),[f,p]=(0,_.useState)(``),[m,h]=(0,_.useState)(``),[g,v]=(0,_.useState)(`VIEW DEAL ON AMAZON →`),[y,b]=(0,_.useState)(`SPECIAL BARGAIN`),[x,S]=(0,_.useState)(`motoring_safety`),[C,w]=(0,_.useState)(`Limited Offer`),[T,E]=(0,_.useState)(``),[D,O]=(0,_.useState)([`leaderboard`,`in_article`,`sidebar`]);if((0,_.useEffect)(()=>{e&&(s(hR.getAllCampaigns()),r(hR.getAffiliateId()))},[e]),!e)return null;let k=()=>{Q.playTargetLock(),hR.setAffiliateId(n),s(hR.getAllCampaigns()),a(!0),setTimeout(()=>a(!1),3e3)},A=e=>{Q.playClick(),hR.toggleCampaign(e),s(hR.getAllCampaigns())},j=()=>{Q.playClick(),hR.resetToDefaults(),s(hR.getAllCampaigns())},M=e=>{Q.playClick(),hR.removeCampaign(e),s(hR.getAllCampaigns())},ee=e=>{e.preventDefault(),u.trim()&&T.trim()&&(Q.playTargetLock(),hR.addCustomCampaign({title:u.trim(),tagline:f.trim()||`Exclusive Deal for Northern Ireland`,description:m.trim()||`Grab this bargain with fast Amazon delivery across NI.`,ctaText:g.trim()||`VIEW DEAL ON AMAZON →`,badge:y.trim()||`LIMITED DEAL`,category:x,placements:D,offerPrice:C.trim(),ratingStars:4.8,amazonUrl:T.trim(),weight:10,enabled:!0}),s(hR.getAllCampaigns()),l(`all`),d(``),p(``),h(``),E(``))},te=o.filter(e=>c===`all`||c===`add_new`||e.category===c),N=o.reduce((e,t)=>e+(t.clicks||0),0),ne=o.filter(e=>e.enabled).length;return(0,$.jsx)(`div`,{className:`fixed inset-0 z-50 bg-black/85 backdrop-blur-md flex items-center justify-center p-3 sm:p-6 overflow-y-auto`,children:(0,$.jsxs)(`div`,{className:`relative w-full max-w-4xl bg-slate-900 border-2 border-amber-500/50 rounded-2xl shadow-2xl overflow-hidden flex flex-col max-h-[92vh] text-slate-100 font-mono`,children:[(0,$.jsxs)(`div`,{className:`px-5 py-3.5 bg-gradient-to-r from-slate-950 via-slate-900 to-amber-950 border-b border-amber-500/30 flex items-center justify-between shrink-0`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2.5`,children:[(0,$.jsx)(`div`,{className:`w-8 h-8 rounded-lg bg-amber-500 text-slate-950 flex items-center justify-center font-black shadow-md`,children:(0,$.jsx)(rI,{className:`w-5 h-5`})}),(0,$.jsxs)(`div`,{children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(`h3`,{className:`text-sm sm:text-base font-black text-white tracking-wide`,children:`AMAZON AFFILIATE & AD ROTATION ENGINE`}),(0,$.jsx)(`span`,{className:`text-[10px] bg-amber-500/20 text-amber-300 border border-amber-500/40 px-2 py-0.5 rounded-full font-bold`,children:`LIVE MONETIZATION`})]}),(0,$.jsx)(`p`,{className:`text-[11px] text-slate-400`,children:`Manage campaigns, test conversions, and rotate high-yield bargains for Northern Ireland users`})]})]}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),t()},className:`w-8 h-8 rounded-lg bg-slate-800 hover:bg-rose-950 hover:text-rose-400 border border-slate-700 flex items-center justify-center transition-colors cursor-pointer`,children:(0,$.jsx)(kL,{className:`w-4 h-4`})})]}),(0,$.jsxs)(`div`,{className:`px-5 py-3 bg-slate-950 border-b border-slate-800 flex flex-col sm:flex-row sm:items-center justify-between gap-3 shrink-0`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(lL,{className:`w-4 h-4 text-amber-400 shrink-0`}),(0,$.jsx)(`span`,{className:`text-xs text-slate-300 font-semibold`,children:`Active Amazon Associate Tag:`}),(0,$.jsx)(`input`,{type:`text`,value:n,onChange:e=>r(e.target.value.trim()),placeholder:`e.g. ispyni-21`,className:`bg-slate-900 border border-amber-500/50 rounded-lg px-2.5 py-1 text-xs text-amber-300 font-bold focus:outline-none focus:border-amber-400 w-32`}),(0,$.jsx)(`button`,{onClick:k,className:`px-3 py-1 bg-amber-500 hover:bg-amber-400 text-slate-950 text-xs font-bold rounded-lg transition-colors cursor-pointer`,children:`Update Tag`}),i&&(0,$.jsxs)(`span`,{className:`text-xs text-emerald-400 flex items-center gap-1 font-bold animate-pulse`,children:[(0,$.jsx)(qF,{className:`w-3.5 h-3.5`}),` Saved & Active!`]})]}),(0,$.jsxs)(`div`,{className:`flex items-center gap-4 text-xs text-slate-400`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`span`,{className:`text-white font-bold`,children:ne}),` / `,o.length,` Active`]}),(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`span`,{className:`text-amber-400 font-bold`,children:N}),` Clicks Recorded`]})]})]}),(0,$.jsxs)(`div`,{className:`px-5 py-2.5 bg-slate-900/90 border-b border-slate-800 flex items-center gap-2 overflow-x-auto shrink-0 text-xs`,children:[(0,$.jsxs)(`button`,{onClick:()=>{Q.playClick(),l(`all`)},className:`px-3 py-1.5 rounded-lg font-bold transition-colors whitespace-nowrap cursor-pointer ${c===`all`?`bg-amber-500 text-slate-950`:`bg-slate-800 text-slate-300 hover:bg-slate-700`}`,children:[`All Campaigns (`,o.length,`)`]}),(0,$.jsxs)(`button`,{onClick:()=>{Q.playClick(),l(`free_trials`)},className:`px-3 py-1.5 rounded-lg font-bold transition-colors whitespace-nowrap cursor-pointer flex items-center gap-1.5 ${c===`free_trials`?`bg-amber-500 text-slate-950`:`bg-slate-800 text-slate-300 hover:bg-slate-700`}`,children:[(0,$.jsx)(dI,{className:`w-3.5 h-3.5`}),`Free Trials (£0.00)`]}),(0,$.jsxs)(`button`,{onClick:()=>{Q.playClick(),l(`motoring_safety`)},className:`px-3 py-1.5 rounded-lg font-bold transition-colors whitespace-nowrap cursor-pointer flex items-center gap-1.5 ${c===`motoring_safety`?`bg-amber-500 text-slate-950`:`bg-slate-800 text-slate-300 hover:bg-slate-700`}`,children:[(0,$.jsx)(zF,{className:`w-3.5 h-3.5`}),`Motoring & Dash Cams`]}),(0,$.jsxs)(`button`,{onClick:()=>{Q.playClick(),l(`weather_outdoors`)},className:`px-3 py-1.5 rounded-lg font-bold transition-colors whitespace-nowrap cursor-pointer flex items-center gap-1.5 ${c===`weather_outdoors`?`bg-amber-500 text-slate-950`:`bg-slate-800 text-slate-300 hover:bg-slate-700`}`,children:[(0,$.jsx)(ZF,{className:`w-3.5 h-3.5`}),`Weather & Waterproof`]}),(0,$.jsxs)(`button`,{onClick:()=>{Q.playClick(),l(`home_security`)},className:`px-3 py-1.5 rounded-lg font-bold transition-colors whitespace-nowrap cursor-pointer flex items-center gap-1.5 ${c===`home_security`?`bg-amber-500 text-slate-950`:`bg-slate-800 text-slate-300 hover:bg-slate-700`}`,children:[(0,$.jsx)(pI,{className:`w-3.5 h-3.5`}),`Home & Property CCTV`]}),(0,$.jsxs)(`button`,{onClick:()=>{Q.playClick(),l(`add_new`)},className:`ml-auto px-3 py-1.5 rounded-lg font-bold transition-colors whitespace-nowrap cursor-pointer flex items-center gap-1.5 ${c===`add_new`?`bg-emerald-500 text-slate-950`:`bg-emerald-600/30 text-emerald-300 border border-emerald-500/40 hover:bg-emerald-600/40`}`,children:[(0,$.jsx)(zI,{className:`w-3.5 h-3.5`}),`+ Add Custom Product`]})]}),(0,$.jsx)(`div`,{className:`flex-1 overflow-y-auto p-4 sm:p-5 space-y-4`,children:c===`add_new`?(0,$.jsxs)(`form`,{onSubmit:ee,className:`bg-slate-950 border border-emerald-500/40 rounded-xl p-5 space-y-4`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between pb-3 border-b border-slate-800`,children:[(0,$.jsxs)(`h4`,{className:`text-sm font-bold text-white flex items-center gap-2`,children:[(0,$.jsx)(zI,{className:`w-4 h-4 text-emerald-400`}),`Add New Amazon Bargain or Affiliate Promotion`]}),(0,$.jsxs)(`span`,{className:`text-xs text-slate-400`,children:[`Tracking tag [tag=`,n,`] is automatically attached`]})]}),(0,$.jsxs)(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 gap-4 text-xs`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`label`,{className:`block text-slate-400 font-semibold mb-1`,children:`Product Title`}),(0,$.jsx)(`input`,{type:`text`,required:!0,value:u,onChange:e=>d(e.target.value),placeholder:`e.g. Michelin High-Power Digital Tyre Inflator`,className:`w-full bg-slate-900 border border-slate-700 rounded-lg p-2 text-white focus:border-amber-400 focus:outline-none`})]}),(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`label`,{className:`block text-slate-400 font-semibold mb-1`,children:`Tagline / Headline`}),(0,$.jsx)(`input`,{type:`text`,value:f,onChange:e=>p(e.target.value),placeholder:`e.g. Essential for Ulster Roads in Freezing Weather`,className:`w-full bg-slate-900 border border-slate-700 rounded-lg p-2 text-white focus:border-amber-400 focus:outline-none`})]})]}),(0,$.jsxs)(`div`,{className:`text-xs`,children:[(0,$.jsx)(`label`,{className:`block text-slate-400 font-semibold mb-1`,children:`Short Description / Pitch`}),(0,$.jsx)(`textarea`,{rows:2,value:m,onChange:e=>h(e.target.value),placeholder:`Explain why NI users will love this bargain...`,className:`w-full bg-slate-900 border border-slate-700 rounded-lg p-2 text-white focus:border-amber-400 focus:outline-none`})]}),(0,$.jsxs)(`div`,{className:`grid grid-cols-1 sm:grid-cols-3 gap-4 text-xs`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`label`,{className:`block text-slate-400 font-semibold mb-1`,children:`Badge Text`}),(0,$.jsx)(`input`,{type:`text`,value:y,onChange:e=>b(e.target.value),placeholder:`e.g. 30-DAY FREE TRIAL / SAVE 40%`,className:`w-full bg-slate-900 border border-slate-700 rounded-lg p-2 text-white focus:border-amber-400 focus:outline-none`})]}),(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`label`,{className:`block text-slate-400 font-semibold mb-1`,children:`Category`}),(0,$.jsxs)(`select`,{value:x,onChange:e=>S(e.target.value),className:`w-full bg-slate-900 border border-slate-700 rounded-lg p-2 text-white focus:border-amber-400 focus:outline-none cursor-pointer`,children:[(0,$.jsx)(`option`,{value:`free_trials`,children:`Free Trials & Bargains`}),(0,$.jsx)(`option`,{value:`motoring_safety`,children:`Motoring & Breakdown Safety`}),(0,$.jsx)(`option`,{value:`weather_outdoors`,children:`Weather & Waterproof Gear`}),(0,$.jsx)(`option`,{value:`home_security`,children:`Home & Property CCTV`}),(0,$.jsx)(`option`,{value:`custom`,children:`General Ulster Bargain`})]})]}),(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`label`,{className:`block text-slate-400 font-semibold mb-1`,children:`Offer Price / Callout`}),(0,$.jsx)(`input`,{type:`text`,value:C,onChange:e=>w(e.target.value),placeholder:`e.g. £0.00 Free Trial / £24.99`,className:`w-full bg-slate-900 border border-slate-700 rounded-lg p-2 text-white focus:border-amber-400 focus:outline-none`})]})]}),(0,$.jsxs)(`div`,{className:`text-xs`,children:[(0,$.jsx)(`label`,{className:`block text-slate-400 font-semibold mb-1`,children:`Amazon Product URL (Amazon UK)`}),(0,$.jsx)(`input`,{type:`url`,required:!0,value:T,onChange:e=>E(e.target.value),placeholder:`https://www.amazon.co.uk/dp/B0...`,className:`w-full bg-slate-900 border border-slate-700 rounded-lg p-2 text-white focus:border-amber-400 focus:outline-none`})]}),(0,$.jsxs)(`div`,{className:`flex items-center justify-end gap-3 pt-2`,children:[(0,$.jsx)(`button`,{type:`button`,onClick:()=>l(`all`),className:`px-4 py-2 bg-slate-800 hover:bg-slate-700 text-white rounded-lg cursor-pointer`,children:`Cancel`}),(0,$.jsx)(`button`,{type:`submit`,className:`px-5 py-2 bg-emerald-500 hover:bg-emerald-400 text-slate-950 font-bold rounded-lg transition-colors cursor-pointer shadow-lg`,children:`Save & Add to Live Ad Rotation`})]})]}):(0,$.jsx)(`div`,{className:`space-y-3`,children:te.map(e=>(0,$.jsx)(`div`,{className:`border rounded-xl p-4 transition-all ${e.enabled?`bg-slate-950/80 border-slate-800 hover:border-amber-500/40`:`bg-slate-950/40 border-slate-900 opacity-60`}`,children:(0,$.jsxs)(`div`,{className:`flex flex-col sm:flex-row sm:items-start justify-between gap-3`,children:[(0,$.jsxs)(`div`,{className:`space-y-1.5 max-w-2xl`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,$.jsx)(`span`,{className:`text-[10px] font-black bg-amber-500/20 text-amber-300 border border-amber-500/40 px-2 py-0.5 rounded`,children:e.badge}),e.offerPrice&&(0,$.jsx)(`span`,{className:`text-[10px] font-bold text-emerald-400 bg-emerald-950/80 border border-emerald-500/30 px-2 py-0.5 rounded`,children:e.offerPrice}),(0,$.jsx)(`span`,{className:`text-[10px] text-slate-500 uppercase`,children:e.category.replace(`_`,` `)}),(0,$.jsxs)(`span`,{className:`text-[10px] text-slate-400`,children:[`🎯 Placements: `,e.placements.join(`, `)]})]}),(0,$.jsx)(`h4`,{className:`text-sm font-bold text-white flex items-center gap-1.5`,children:e.title}),(0,$.jsx)(`div`,{className:`text-xs text-amber-300/90 font-semibold`,children:e.tagline}),(0,$.jsx)(`p`,{className:`text-[11px] text-slate-400 leading-relaxed`,children:e.description})]}),(0,$.jsxs)(`div`,{className:`flex sm:flex-col items-center sm:items-end justify-between sm:justify-start gap-2.5 shrink-0`,children:[(0,$.jsx)(`button`,{onClick:()=>A(e.id),className:`px-3 py-1 rounded-lg text-xs font-bold transition-colors cursor-pointer ${e.enabled?`bg-emerald-900/60 text-emerald-300 border border-emerald-500/50 hover:bg-emerald-900`:`bg-slate-800 text-slate-400 border border-slate-700 hover:bg-slate-700`}`,children:e.enabled?`ACTIVE (ON)`:`PAUSED (OFF)`}),(0,$.jsxs)(`a`,{href:e.amazonUrl,target:`_blank`,rel:`noopener sponsored`,onClick:()=>{hR.recordClick(e.id),s(hR.getAllCampaigns())},className:`px-3 py-1 bg-amber-500 hover:bg-amber-400 text-slate-950 font-bold text-xs rounded-lg flex items-center gap-1 transition-colors`,title:`Test direct link with tag=ispyni-21`,children:[(0,$.jsx)(`span`,{children:`Test Link`}),(0,$.jsx)(lI,{className:`w-3 h-3`})]}),(0,$.jsxs)(`div`,{className:`text-[10px] text-slate-400`,children:[`Clicks: `,(0,$.jsx)(`span`,{className:`text-white font-bold`,children:e.clicks||0})]}),e.id.startsWith(`custom-`)&&(0,$.jsxs)(`button`,{onClick:()=>M(e.id),className:`text-[10px] text-rose-400 hover:text-rose-300 cursor-pointer flex items-center gap-1`,children:[(0,$.jsx)(pL,{className:`w-3 h-3`}),` Delete`]})]})]})},e.id))})}),(0,$.jsxs)(`div`,{className:`px-5 py-3 bg-slate-950 border-t border-slate-800 flex items-center justify-between text-xs shrink-0`,children:[(0,$.jsxs)(`button`,{onClick:j,className:`text-slate-400 hover:text-slate-200 flex items-center gap-1.5 cursor-pointer transition-colors`,children:[(0,$.jsx)(UI,{className:`w-3.5 h-3.5`}),(0,$.jsx)(`span`,{children:`Reset to Recommended Ulster Deals`})]}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),t()},className:`px-5 py-2 bg-slate-800 hover:bg-slate-700 text-white font-bold rounded-lg cursor-pointer transition-colors`,children:`Done`})]})]})})},_R=[{id:`art-a6-randalstown-collision-closure`,slug:`a6-randalstown-dual-carriageway-closed-serious-collision-investigation`,title:`A6 Randalstown: Dual Carriageway Closed in Both Directions Following Serious Two-Vehicle Collision`,summary:`PSNI Road Policing and DfI Roads enforce full closure between M22 J3 Randalstown and Toome Bypass. Major fuel spill cleanup and collision investigation ongoing.`,bodyParagraphs:[`The A6 dual carriageway between Randalstown (M22 Junction 3) and Toome Bypass has been closed in both directions following a severe multi-vehicle road traffic collision during the morning rush.`,`Emergency rescue crews from the Northern Ireland Ambulance Service, NI Fire & Rescue Service (Antrim & Magherafelt stations), and PSNI Collision Investigation Branch remain actively deployed across the carriageway near the Staffordstown Overbridge.`,`DfI Roads contractors are deploying industrial absorbents across a substantial diesel slick stretching 300 meters along the westbound tarmac.`,`All traffic is being diverted via the B18 Neillsbrook Road through Randalstown town center, Staffordstown, and Moneynick, adding an estimated 12 to 15 minutes to trans-Ulster journey times between Belfast and Derry.`,`Motorists are strongly urged to monitor live tactical surveillance on I Spy NI and allow extra transit time or utilize the M2/A26 via Ballymena.`],county:`Antrim`,category:`ROAD_INCIDENT`,severity:`CRITICAL`,timestampStr:`8 minutes ago`,publishedDate:`13 Oct 2026`,author:`Ulster Trafficwatch Recon`,readTime:`3 min read`,locationName:`A6 Randalstown (M22 J3 to Toome Bypass)`,coordinates:{lat:54.7405,lng:-6.34445},nearestCameraId:`202`,nearestCameraName:`A6 Toome Bypass Sensor`,detourAdvice:`Divert via Castle Road ➔ B18 Neillsbrook Road ➔ Staffordstown ➔ Moneynick ➔ rejoin Toome Bypass (+12 mins)`,impactMetrics:{trafficDelayMins:15,affectedRoutes:[`A6 Dual Carriageway`,`M22 Junction 3`,`B18 Neillsbrook Road`],emergencyServicesOnScene:!0,statusBadge:`⛔ ROAD CLOSED // STANDSTILL`},tags:[`A6`,`Randalstown`,`Road Closure`,`Traffic Alert`,`Toome Bypass`],sponsor:{partnerName:`Ulster Roadside Assist & Recovery`,tagline:`Northern Ireland 24/7 Breakdown Specialist`,description:`Rapid-response commercial and private vehicle breakdown recovery across all 6 counties. Fast rescue when Ulster roads stand still.`,ctaText:`GET ULSTER COVER FROM £49/YR`,badge:`OFFICIAL INTEL SPONSOR`}},{id:`art-westlink-drainage-emergency`,slug:`westlink-broadway-underpass-submersible-pump-alert`,title:`A12 Westlink Broadway: Emergency High-Capacity Drainage Active Following Flash Deluge`,summary:`DfI Roads deploying high-capacity culvert pumps below Broadway underpass. Single-lane restriction causing 25-minute northbound tailbacks into M1.`,bodyParagraphs:[`Department for Infrastructure Roads engineers and Belfast emergency drainage crews have responded to a high-water advisory at the A12 Westlink Broadway underpass following torrential localized squalls.`,`The Broadway underpass, positioned 20 meters below sea level in the Blackstaff River basin, is Northern Ireland’s most sensitive transport bottleneck. Over 80,000 vehicles traverse this corridor daily connecting the M1 to the M2.`,`Two submersible high-volume drainage pumps are running at peak capacity. PSNI Road Policing units have closed the inner northbound lane between Grosvenor Road and Broadway to facilitate industrial suction tankers.`,`Translink Glider G1 services and Metro feeder buses report 15 to 20-minute knock-on delays through the Donegall Road junction.`,`Drivers are strongly encouraged to avoid the Westlink arterial spine until late evening and utilize the outer ring road via Saintfield Road, Shaws Bridge, and Knocknagoney.`],county:`Belfast`,category:`ROAD_INCIDENT`,severity:`HIGH`,timestampStr:`18 minutes ago`,publishedDate:`13 Oct 2026`,author:`I Spy NI Central Recon Desk`,readTime:`3 min read`,locationName:`A12 Westlink (Broadway Underpass)`,coordinates:{lat:54.588,lng:-5.955},nearestCameraId:`505`,nearestCameraName:`A12 Westlink / Divis Corridor Cam`,detourAdvice:`Divert via Knockbreda Outer Ring / Shaws Bridge or Sydenham Bypass.`,impactMetrics:{trafficDelayMins:25,affectedRoutes:[`A12 Westlink`,`M1 Motorway J1`,`Grosvenor Road`],emergencyServicesOnScene:!0,statusBadge:`⚠️ LANE RESTRICTION // SEVERE DELAYS`},tags:[`Westlink`,`Belfast`,`Flooding`,`Traffic Alert`,`M1 Merge`],sponsor:{partnerName:`Ulster Roadside Assist & Recovery`,tagline:`Northern Ireland 24/7 Breakdown Specialist`,description:`Rapid-response commercial and private vehicle breakdown recovery across all 6 counties. Fast rescue when Ulster roads stand still.`,ctaText:`GET ULSTER COVER FROM £49/YR`,badge:`OFFICIAL INTEL SPONSOR`}},{id:`art-belfast-harbour-freight-expansion`,slug:`belfast-harbour-90m-smart-port-automated-freight-berth`,title:`Port of Belfast Unveils £90M Green Maritime & Automated Container Freight Hub`,summary:`Northern Ireland primary maritime artery commences multi-million expansion of Victoria Channel container terminal to handle next-generation Stena hybrid superferries.`,bodyParagraphs:[`Belfast Harbour has announced the green light for a flagship £90 million automated logistics and container terminal upgrade at West Bank Quay.`,`Handling roughly 70% of Northern Ireland’s seaborne freight and 24 million tonnes of international trade each year, the Port of Belfast represents the economic lifeline connecting Ulster with Scottish and English distribution networks.`,`The expansion includes deep-water dredging of the Victoria Channel, high-voltage shore power electrification for docked Stena Line superferries, and autonomous container crane gantries.`,`The strategic freight corridor alongside Duncrue Street and the M2 motorway will incorporate intelligent gantry freight-routing sensors directly integrated into provincial telemetry feeds.`,`Harbour police note zero disruption to active RoRo ferry schedules across the Cairnryan and Birkenhead crossings during phase one civil works.`],county:`Belfast`,category:`INFRASTRUCTURE`,severity:`INFO`,timestampStr:`1 hour ago`,publishedDate:`13 Oct 2026`,author:`Maritime Recon Correspondent`,readTime:`4 min read`,locationName:`Belfast Harbour (Victoria Channel)`,coordinates:{lat:54.622,lng:-5.895},nearestCameraId:`15`,nearestCameraName:`M2 Duncrue Street / Belfast Port Cam`,impactMetrics:{affectedRoutes:[`M2 Duncrue Complex`,`Fortwilliam Interchange`],emergencyServicesOnScene:!1,statusBadge:`🟢 STRATEGIC EXPANSION // NORMAL FLOW`},tags:[`Belfast Harbour`,`Maritime`,`Freight`,`Stena Line`,`Economy`],sponsor:{partnerName:`All-Ulster Commercial Fleet Insurance`,tagline:`Leading Haulage & HGV Protection across NI & Ireland`,description:`Specialist cross-border insurance for hauliers, couriers, and freight carriers operating from Belfast and Larne.`,ctaText:`REQUEST FLEET QUOTE →`,badge:`MARITIME PARTNER`}},{id:`art-foyle-bridge-gale-warning`,slug:`foyle-bridge-derry-high-wind-gust-monitoring-protocol`,title:`Foyle Bridge Derry: High-Wind Crosswind Protocols Deployed as Lough Foyle Squalls Touch 55mph`,summary:`DfI Transport and Derry PSNI institute 30mph speed restrictions on Ireland’s longest bridge. High-sided lorries and caravans advised to divert through City Centre.`,bodyParagraphs:[`Electronic speed advisory signs on the A515 Foyle Bridge in Derry have been lowered to 30mph after coastal anemometers registered crosswind gusts exceeding 55mph funneling down Lough Foyle.`,`Standing at 35 meters above the River Foyle, the bridge deck is exceptionally exposed to Atlantic squalls. When crosswinds breach 65mph, full closure protocols are triggered automatically to prevent commercial HGV rollovers.`,`Department for Infrastructure operators confirm live optical pass cameras and acoustic strain sensors are running continuous diagnostic sweeps.`,`Hauliers driving empty box trailers and high-sided articulated vehicles are strongly advised to divert inland via the Craigavon Bridge and Peace Bridge approaches.`,`Trafficwatch NI camera 832-1 shows heavy river spray but free-flowing passenger car traffic along the carriageway.`],county:`Derry`,category:`ROAD_INCIDENT`,severity:`HIGH`,timestampStr:`32 minutes ago`,publishedDate:`13 Oct 2026`,author:`Northwest Recon Desk`,readTime:`2 min read`,locationName:`A515 Foyle Bridge (Derry)`,coordinates:{lat:55.0212,lng:-7.3021},nearestCameraId:`832-1`,nearestCameraName:`Derry Foyle Bridge Ice & Wind Sensor Cam`,detourAdvice:`High-sided vehicles divert via A2 / Craigavon Bridge city center.`,impactMetrics:{trafficDelayMins:10,affectedRoutes:[`A515 Foyle Bridge`,`A2 Buncrana Road`,`Culmore Road`],emergencyServicesOnScene:!1,statusBadge:`⚠️ HIGH WIND RESTRICTION (30 MPH)`},tags:[`Foyle Bridge`,`Derry`,`Londonderry`,`High Winds`,`A515`],sponsor:{partnerName:`Northwest Windscreen & Tyre Care`,tagline:`Derry & Strabane Mobile Fitting Service`,description:`Same-day mobile windscreen repairs and commercial tyre fitting across the Northwest and Sperrins.`,ctaText:`CALL NORTHWEST TYRES`,badge:`LOCAL SERVICE SPONSOR`}},{id:`art-a6-glenshane-smart-corridor`,slug:`a6-glenshane-pass-summit-radar-sensor-upgrade`,title:`A6 Glenshane Summit: Advanced Micro-Meteorological Radar Station Completed at 302m`,summary:`New environmental infrared road sensors installed at Carntogher summit to provide sub-second road surface temperature and black ice alerts to trans-Ulster hauliers.`,bodyParagraphs:[`The Department for Infrastructure has formally commissioned an advanced roadside micro-sensor station at the summit plateau of the A6 Glenshane Pass.`,`Positioned at an elevation of 302 meters, Glenshane Pass is Northern Ireland’s highest and most vital trans-provincial highway link, connecting Greater Belfast and Mid-Ulster to County Londonderry and Donegal.`,`Due to atmospheric lapse rates, the Glenshane summit consistently experiences temperatures 2°C to 4°C colder than sea-level Belfast, turning innocent drizzle into treacherous black ice within minutes.`,`The newly deployed optical sensor array measures tarmac friction, ice thickness, and salt salinity levels, feeding real-time telemetry straight into I Spy NI command systems.`,`The DfI Sperrins gritter depot at Magherafelt has calibrated automated dispatch triggers linked directly to these summit sensor arrays.`],county:`Derry`,category:`INFRASTRUCTURE`,severity:`INFO`,timestampStr:`3 hours ago`,publishedDate:`13 Oct 2026`,author:`Highways & Tech Bureau`,readTime:`3 min read`,locationName:`A6 Glenshane Pass Summit (Carntogher)`,coordinates:{lat:54.8821,lng:-6.7842},nearestCameraId:`821-1`,nearestCameraName:`A6 Glenshane Pass Summit Cam`,impactMetrics:{affectedRoutes:[`A6 Glenshane Road`,`Carntogher Incline`],emergencyServicesOnScene:!1,statusBadge:`🟢 SUMMIT CLEAR // FREE FLOW`},tags:[`Glenshane Pass`,`A6`,`Sperrins`,`Road Safety`,`Ulster Mountain`],sponsor:{partnerName:`Glenshane Commercial Haulage & Logistics`,tagline:`Trans-Ulster Daily Express Pallet Freight`,description:`Dependable daily freight distribution between Belfast Docks and Derry City. Keep your goods moving across the Sperrins.`,ctaText:`BOOK TRANSHIPMENT →`,badge:`FEATURED LOGISTICS`}},{id:`art-north-west-200-traffic-circuit`,slug:`north-west-200-triangle-circuit-traffic-diversion-blueprint`,title:`North West 200 Road Race: Emergency Transport & Triangle Circuit Lockdown Protocol Issued`,summary:`Comprehensive road closure and tactical routing released for the Portstewart-Coleraine-Portrush circuit. Over 120,000 international motorcycle fans expected.`,bodyParagraphs:[`Race organizers of the fabled North West 200, Ireland’s biggest outdoor sporting event, have published the definitive traffic management strategy and circuit lockdown coordinates.`,`The legendary 8.9-mile public road course linking Portrush, Portstewart, and Coleraine will see the A2, A29, and coastal arteries fully closed to non-emergency public traffic during practice and race sessions.`,`Police Service of Northern Ireland (PSNI) and Translink have coordinated special park-and-ride intercept hubs at Coleraine University and Bushmills Road to relieve coastal choke points.`,`Specialist air medical support helicopters and HM Coastguard will maintain an active orbital holding pattern over the Atlantic coast, tracked live on I Spy NI airspace radar.`,`Motorists traversing between Ballymoney and Limavady are instructed to bypass the coast entirely via the A37 Dunhill corridor.`],county:`Down`,category:`BIG_EVENT`,severity:`HIGH`,timestampStr:`4 hours ago`,publishedDate:`13 Oct 2026`,author:`Special Events Command`,readTime:`4 min read`,locationName:`Triangle Circuit (Portstewart - Portrush - Coleraine)`,coordinates:{lat:55.195,lng:-6.65},nearestCameraId:`202`,nearestCameraName:`A26 Frosses Road Dual Carriageway Cam`,detourAdvice:`Divert through A37 Dunhill towards Limavady / Derry.`,impactMetrics:{trafficDelayMins:45,affectedRoutes:[`A2 Coastal Road`,`A29 Coleraine Ring`,`B185 Station Road`],emergencyServicesOnScene:!0,statusBadge:`⛔ CIRCUIT CLOSED FOR RACE SESSIONS`},tags:[`NW200`,`North West 200`,`Road Closures`,`Big Event`,`Motorcycle Racing`],sponsor:{partnerName:`Causeway Coast Hospitality & Hotels`,tagline:`Premier North Coast Accommodations`,description:`Luxury stays and paddock view suites for the North West 200 and Causeway Coast explorer. Book direct for best rates.`,ctaText:`EXPLORE NORTH COAST HOTELS`,badge:`OFFICIAL HOSPITALITY`}},{id:`art-mourne-mountain-rescue-sar`,slug:`mournes-spelga-slieve-donard-mountain-rescue-operation`,title:`Mourne Mountains: PSNI & Rescue-999 Coordinate Search Operation at Silent Valley Ridge`,summary:`HM Coastguard Sikorsky S-92 helicopter and Mourne Mountain Rescue Team deploy following lost hiker alert near Ben Crom reservoir.`,bodyParagraphs:[`The Mourne Mountain Rescue Team (MMRT) alongside Coastguard Rescue Helicopter 999 from Prestwick launched a coordinated search over the high peaks above Newcastle and Silent Valley.`,`Low cloud ceiling and rapid temperature drop on the slopes of Slieve Binnian caught two hillwalkers without thermal equipment as dusk arrived.`,`I Spy NI airspace radar monitored Rescue-999 orbiting the Spelga Pass and Annalong Valley at 1,800 feet utilizing high-resolution FLIR thermal cameras to pinpoint the casualty location.`,`Both hikers were successfully located within 90 minutes and assisted down to the Silent Valley reservoir ranger station without major injury.`,`MMRT officials urge all outdoor enthusiasts to check hyperlocal mountain summit forecasts on I Spy NI before climbing Ulster summits.`],county:`Down`,category:`AIR_MARITIME`,severity:`MODERATE`,timestampStr:`6 hours ago`,publishedDate:`13 Oct 2026`,author:`Search & Rescue Bureau`,readTime:`3 min read`,locationName:`Mourne Mountains (Silent Valley / Spelga)`,coordinates:{lat:54.1785,lng:-6.0592},nearestCameraId:`3299`,nearestCameraName:`Newry & Mournes Gateway (A1 Camlough) Cam`,impactMetrics:{affectedRoutes:[`B27 Spelga Pass`,`Silent Valley Access Road`],emergencyServicesOnScene:!0,statusBadge:`🟢 RESCUE CONCLUDED // ALL SAFE`},tags:[`Mournes`,`Mountain Rescue`,`Helicopter SAR`,`Spelga Pass`,`Co Down`],sponsor:{partnerName:`Mourne Trail Outdoor & Survival Gear`,tagline:`High-Altitude Ulster Hiking Equipment`,description:`Garmin GPS communicators, waterproof mountain apparel, and emergency bivvy gear. Free express delivery across Northern Ireland.`,ctaText:`SHOP MOURNE ESSENTIALS →`,badge:`OUTDOOR PARTNER`}},{id:`art-a5-western-transport-corridor`,slug:`a5-western-transport-corridor-dual-carriageway-milestone`,title:`A5 Western Transport Artery: Ground Cleared for Critical Dungannon-Omagh Dual Carriageway`,summary:`Land vesting procedures progress on Northern Ireland’s key western trade backbone, connecting Dublin and Monaghan directly to Strabane and Derry.`,bodyParagraphs:[`Northern Ireland’s Department for Infrastructure has reached a decisive procedural milestone in the long-planned dualing of the A5 Western Transport Corridor.`,`Covering over 85 kilometers across County Tyrone, the existing single-carriageway A5 between Aughnacloy, Omagh, and Strabane has long been regarded as one of Ulster’s most congested freight corridors.`,`Over 14,000 vehicles, including heavy cross-border agri-food milk tankers and container lorries, navigate the route each day.`,`The modern dual carriageway design will eradicate dangerous pinch-points at Shannon’s Hill, Victoria Bridge, and Sion Mills.`,`Construction will proceed in phases with minimal lane disruptions expected on the current road until major overbridge structures commence next spring.`],county:`Tyrone`,category:`INFRASTRUCTURE`,severity:`INFO`,timestampStr:`7 hours ago`,publishedDate:`13 Oct 2026`,author:`Highways & Planning Desk`,readTime:`3 min read`,locationName:`A5 Omagh Bypass Corridor`,coordinates:{lat:54.585,lng:-7.285},nearestCameraId:`301`,nearestCameraName:`A5 Omagh Bypass / Doogary Cam`,impactMetrics:{affectedRoutes:[`A5 Omagh Bypass`,`A4 Ballygawley Roundabout`],emergencyServicesOnScene:!1,statusBadge:`🟢 PLANNING GREEN LIGHT // NORMAL TRAFFIC`},tags:[`A5`,`Tyrone`,`Omagh`,`Infrastructure`,`Strabane`],sponsor:{partnerName:`Mid-Ulster Commercial Plant & Hire`,tagline:`Civil Engineering & Heavy Machinery Rental`,description:`Supplying top-tier excavators, crushers, and haulage equipment across Tyrone, Fermanagh, and Armagh.`,ctaText:`HIRE PLANT MACHINERY`,badge:`INDUSTRY PARTNER`}},{id:`art-river-lagan-flood-defenses`,slug:`river-lagan-lisburn-stranmillis-flood-telemetry-alert`,title:`River Lagan & River Foyle: Live Flood Sensor Telemetry Triggers Precautionary Sluice Activation`,summary:`Rivers Agency NI activates tidal surge gates at Stranmillis Weir following continuous rain runoff from Slieve Croob and High Down hills.`,bodyParagraphs:[`Rivers Agency hydrological monitoring stations along the River Lagan and River Bann have recorded sudden crest spikes following sustained rainfall across elevated headwaters.`,`At Stranmillis Weir in South Belfast, automated hydraulic barrier gates were adjusted to regulate water flow heading towards the Lagan Weir and Belfast Harbour basin.`,`Key sensor telemetry at Shaw’s Bridge and Lisburn Island Centre indicates water heights remain 0.4 meters below yellow warning thresholds, but towpath cycling routes have experienced localized wash-over.`,`In County Tyrone, the Camowen and Drumragh rivers converging in Omagh have shown elevated levels but town flood defense walls are holding securely.`,`I Spy NI river monitoring nodes update every 5 minutes in coordination with the Met Office radar grid.`],county:`Armagh`,category:`ENVIRONMENT_FLOOD`,severity:`MODERATE`,timestampStr:`8 hours ago`,publishedDate:`13 Oct 2026`,author:`Environmental Hydrology Desk`,readTime:`3 min read`,locationName:`River Lagan (Stranmillis - Shaws Bridge)`,coordinates:{lat:54.568,lng:-5.932},nearestCameraId:`2`,nearestCameraName:`M1 Stockmans Lane / Musgrave Park Cam`,impactMetrics:{affectedRoutes:[`Stranmillis Embankment`,`Shaws Bridge Towpath`],emergencyServicesOnScene:!1,statusBadge:`⚠️ RISING WATER TELEMETRY // SLUICES ACTIVE`},tags:[`River Lagan`,`Flooding`,`Rivers Agency`,`Lisburn`,`Belfast`],sponsor:{partnerName:`Ulster Flood Barriers & Property Defense`,tagline:`Residential & Commercial Storm Protection`,description:`Certified flood barriers, non-return valves, and automated sump pumps for properties across Northern Ireland.`,ctaText:`FREE FLOOD SURVEY →`,badge:`COMMUNITY PROTECTION`}}];function vR(e){switch(e){case 0:return{condition:`Clear Skies`,isRain:!1,isSnow:!1};case 1:return{condition:`Mainly Clear`,isRain:!1,isSnow:!1};case 2:return{condition:`Partly Cloudy`,isRain:!1,isSnow:!1};case 3:return{condition:`Overcast`,isRain:!1,isSnow:!1};case 45:case 48:return{condition:`Fog & Mist`,isRain:!1,isSnow:!1};case 51:case 53:case 55:return{condition:`Light Drizzle`,isRain:!0,isSnow:!1};case 61:return{condition:`Light Rain`,isRain:!0,isSnow:!1};case 63:return{condition:`Moderate Rain`,isRain:!0,isSnow:!1};case 65:return{condition:`Heavy Rain`,isRain:!0,isSnow:!1};case 71:case 73:case 75:return{condition:`Snowfall`,isRain:!1,isSnow:!0};case 80:case 81:case 82:return{condition:`Passing Showers`,isRain:!0,isSnow:!1};case 95:case 96:case 99:return{condition:`Thunderstorm`,isRain:!0,isSnow:!1};default:return{condition:`Fair`,isRain:!1,isSnow:!1}}}function yR(e){return[`N`,`NNE`,`NE`,`ENE`,`E`,`ESE`,`SE`,`SSE`,`S`,`SSW`,`SW`,`WSW`,`W`,`WNW`,`NW`,`NNW`][Math.floor(e/22.5+.5)%16]}var bR=new class{cache=null;async getNIWeather(e=54.597,t=-5.93){let n=Date.now();if(this.cache&&n-this.cache.timestamp<18e4)return this.cache.data;try{let r=`https://api.open-meteo.com/v1/forecast?latitude=${e}&longitude=${t}¤t=temperature_2m,apparent_temperature,weather_code,wind_speed_10m,wind_direction_10m,relative_humidity_2m,precipitation&hourly=temperature_2m,weather_code&daily=temperature_2m_max,temperature_2m_min,weather_code&wind_speed_unit=mph&timezone=Europe/London`,i=await fetch(r);if(!i.ok)throw Error(`Open-Meteo HTTP error`);let a=await i.json(),o=a.current||{},s=a.hourly||{},c=a.daily||{},{condition:l}=vR(o.weather_code||0),u=new Date().getHours(),d=[],f=s.time||[],p=s.temperature_2m||[],m=s.weather_code||[];for(let e=0;e=u&&d.push({timeStr:`${String(t).padStart(2,`0`)}:00`,tempC:Math.round(p[e]??12),weatherCode:m[e]??61,condition:vR(m[e]??61).condition})}let h=[],g=c.time||[],_=c.temperature_2m_max||[],v=c.temperature_2m_min||[],y=c.weather_code||[];for(let e=0;e0?d:[{timeStr:`12:00`,tempC:12,weatherCode:61,condition:`Light rain`},{timeStr:`13:00`,tempC:12,weatherCode:61,condition:`Light rain`},{timeStr:`14:00`,tempC:11,weatherCode:2,condition:`Partly cloudy`},{timeStr:`15:00`,tempC:11,weatherCode:2,condition:`Partly cloudy`},{timeStr:`16:00`,tempC:10,weatherCode:61,condition:`Light rain`},{timeStr:`17:00`,tempC:9,weatherCode:3,condition:`Overcast`}],daily:h,hasWarning:!0,warningHeadline:`Yellow Weather Warning`,warningText:`Heavy rain and strong winds expected overnight across Northern Ireland.`,updatedAtStr:new Date().toLocaleTimeString(`en-GB`,{hour:`2-digit`,minute:`2-digit`})};return this.cache={data:C,timestamp:n},C}catch{return{temperatureC:12,apparentTempC:9,weatherCode:61,weatherDesc:`Light rain`,windSpeedMph:18,windDirectionStr:`SW`,windDirectionDeg:225,humidityPct:84,precipitationMm:1.2,hourly:[{timeStr:`12:00`,tempC:12,weatherCode:61,condition:`Light rain`},{timeStr:`13:00`,tempC:12,weatherCode:61,condition:`Light rain`},{timeStr:`14:00`,tempC:11,weatherCode:2,condition:`Partly cloudy`},{timeStr:`15:00`,tempC:11,weatherCode:2,condition:`Partly cloudy`},{timeStr:`16:00`,tempC:10,weatherCode:61,condition:`Light rain`},{timeStr:`17:00`,tempC:9,weatherCode:3,condition:`Overcast`}],daily:[{dayName:`Today`,tempMaxC:13,tempMinC:8,weatherCode:61,condition:`Light rain`},{dayName:`Mon`,tempMaxC:12,tempMinC:7,weatherCode:2,condition:`Partly cloudy`},{dayName:`Tue`,tempMaxC:14,tempMinC:9,weatherCode:80,condition:`Showers`}],hasWarning:!0,warningHeadline:`Yellow Weather Warning`,warningText:`Heavy rain and strong winds expected overnight across Northern Ireland.`,updatedAtStr:`11:24`}}}},xR=({type:e,preferredCategory:t,partnerName:n,tagline:r,description:i,ctaText:a,badge:o,targetUrl:s})=>{let[c,l]=(0,_.useState)(null),[u,d]=(0,_.useState)(!1);(0,_.useEffect)(()=>{if(n&&s)return;let r=hR.getAdForPlacement(e,t);l(r)},[e,t,n,s]);let f=c,p=n||f?.title||`Amazon Prime — 30-Day Free Trial`,m=r||f?.tagline||`Free Fast Delivery Across Northern Ireland`,h=i||f?.description||`Enjoy unlimited fast deliveries across NI, Prime Video, and exclusive member discounts free for 30 days.`,g=a||f?.ctaText||`CLAIM 30-DAY FREE TRIAL (£0.00) →`,v=o||f?.badge||`AMAZON FREE TRIAL`,y=s||f?.amazonUrl||`https://www.amazon.co.uk/tryprimefree?tag=${hR.getAffiliateId()}`,b=f?.offerPrice||`£0.00 Trial`,x=()=>{Q.playClick(),f?.id&&hR.recordClick(f.id)},S=e=>{e.preventDefault(),e.stopPropagation(),Q.playTargetLock(),d(!0)};return e===`leaderboard`?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`aside`,{"aria-label":`Sponsored Amazon Promotion`,className:`w-full bg-gradient-to-r from-slate-900 via-slate-950 to-slate-900 border border-amber-500/30 rounded-2xl p-3.5 sm:p-4 shadow-lg text-xs font-mono relative overflow-hidden group`,children:(0,$.jsxs)(`div`,{className:`flex flex-col sm:flex-row sm:items-center justify-between gap-3 relative z-10`,children:[(0,$.jsxs)(`div`,{className:`space-y-1`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(`span`,{className:`text-[9px] bg-amber-500/20 text-amber-300 border border-amber-500/40 px-2 py-0.5 rounded font-black uppercase tracking-wider`,children:v}),b&&(0,$.jsx)(`span`,{className:`text-[10px] text-emerald-400 font-bold bg-emerald-950/80 border border-emerald-500/30 px-2 py-0.5 rounded`,children:b}),(0,$.jsx)(`span`,{className:`text-[10px] text-slate-500 hidden sm:inline`,children:`AMAZON ASSOCIATES PROMOTION`})]}),(0,$.jsx)(`h4`,{className:`text-sm sm:text-base font-black text-white group-hover:text-amber-200 transition-colors`,children:p}),(0,$.jsx)(`p`,{className:`text-[11px] text-slate-300 max-w-2xl leading-relaxed`,children:h})]}),(0,$.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[(0,$.jsxs)(`a`,{href:y,target:`_blank`,rel:`noopener sponsored`,onClick:x,className:`px-4 py-2.5 rounded-xl bg-gradient-to-r from-amber-500 to-amber-600 hover:from-amber-400 hover:to-amber-500 text-slate-950 font-black font-mono text-xs flex items-center justify-center gap-1.5 shadow-md hover:shadow-amber-500/20 transition-all cursor-pointer active:scale-98`,children:[(0,$.jsx)(`span`,{children:g}),(0,$.jsx)(lI,{className:`w-3.5 h-3.5`})]}),(0,$.jsx)(`button`,{onClick:S,title:`Manage Amazon Ads & Tracking Tag`,className:`w-8 h-8 rounded-xl bg-slate-800/80 hover:bg-slate-700 text-slate-400 hover:text-amber-300 flex items-center justify-center transition-colors cursor-pointer`,children:(0,$.jsx)(tL,{className:`w-3.5 h-3.5`})})]})]})}),u&&(0,$.jsx)(gR,{isOpen:u,onClose:()=>d(!1)})]}):e===`sidebar`?(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`aside`,{"aria-label":`Sponsored Amazon Promotion`,className:`w-full bg-slate-950/90 border border-amber-500/30 rounded-2xl p-4 shadow-lg text-xs font-mono space-y-3 relative overflow-hidden group`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,$.jsx)(`span`,{className:`text-[9px] bg-amber-500/20 text-amber-300 border border-amber-500/40 px-2 py-0.5 rounded font-bold uppercase tracking-wider`,children:v}),(0,$.jsx)(`button`,{onClick:S,title:`Manage Amazon Ads & Tracking Tag`,className:`text-slate-500 hover:text-amber-400 cursor-pointer transition-colors`,children:(0,$.jsx)(tL,{className:`w-3.5 h-3.5`})})]}),(0,$.jsxs)(`div`,{className:`space-y-1`,children:[(0,$.jsx)(`h4`,{className:`text-sm font-bold text-white group-hover:text-amber-200 transition-colors`,children:p}),(0,$.jsx)(`div`,{className:`text-[11px] text-amber-300 font-semibold`,children:m}),(0,$.jsx)(`p`,{className:`text-[11px] text-slate-400 leading-relaxed`,children:h})]}),b&&(0,$.jsx)(`div`,{className:`inline-block text-[11px] font-bold text-emerald-400 bg-emerald-950/80 border border-emerald-500/30 px-2 py-0.5 rounded`,children:b}),(0,$.jsxs)(`a`,{href:y,target:`_blank`,rel:`noopener sponsored`,onClick:x,className:`w-full py-2.5 rounded-xl bg-gradient-to-r from-amber-500 to-amber-600 hover:from-amber-400 hover:to-amber-500 text-slate-950 font-bold font-mono text-xs flex items-center justify-center gap-1.5 shadow-md transition-all cursor-pointer active:scale-98`,children:[(0,$.jsx)(`span`,{children:g}),(0,$.jsx)(lI,{className:`w-3.5 h-3.5`})]})]}),u&&(0,$.jsx)(gR,{isOpen:u,onClose:()=>d(!1)})]}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`aside`,{"aria-label":`Sponsored Amazon Promotion`,className:`my-6 p-4 sm:p-5 bg-gradient-to-br from-slate-900 to-slate-950 border border-amber-500/40 rounded-2xl shadow-xl font-mono text-xs space-y-2.5 relative overflow-hidden group`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(`span`,{className:`text-[9px] bg-amber-500/20 text-amber-300 border border-amber-500/40 px-2 py-0.5 rounded font-bold uppercase tracking-wider`,children:v}),b&&(0,$.jsx)(`span`,{className:`text-[10px] text-emerald-400 font-bold bg-emerald-950/80 border border-emerald-500/30 px-2 py-0.5 rounded`,children:b})]}),(0,$.jsx)(`button`,{onClick:S,title:`Manage Amazon Ads & Tracking Tag`,className:`text-slate-500 hover:text-amber-400 cursor-pointer transition-colors`,children:(0,$.jsx)(tL,{className:`w-3.5 h-3.5`})})]}),(0,$.jsxs)(`div`,{className:`space-y-1`,children:[(0,$.jsx)(`h4`,{className:`text-sm sm:text-base font-black text-white group-hover:text-amber-200 transition-colors`,children:p}),(0,$.jsx)(`div`,{className:`text-[11px] text-amber-300 font-semibold`,children:m}),(0,$.jsx)(`p`,{className:`text-[11px] text-slate-300 leading-relaxed`,children:h})]}),(0,$.jsx)(`div`,{children:(0,$.jsxs)(`a`,{href:y,target:`_blank`,rel:`noopener sponsored`,onClick:x,className:`px-4 py-2 rounded-xl bg-gradient-to-r from-amber-500 to-amber-600 hover:from-amber-400 hover:to-amber-500 text-slate-950 font-bold font-mono text-xs inline-flex items-center gap-1.5 shadow-md transition-all cursor-pointer active:scale-98`,children:[(0,$.jsx)(`span`,{children:g}),(0,$.jsx)(lI,{className:`w-3.5 h-3.5`})]})})]}),u&&(0,$.jsx)(gR,{isOpen:u,onClose:()=>d(!1)})]})},SR=({onBackToMap:e,onNavigateToCoords:t,onSelectCamera:n,onSelectArticle:r,onOpenMultiCamWall:i,onSelectClosure:a,onSelectOutage:o,onSelectFlight:s})=>{let[c,l]=(0,_.useState)(`All NI`),[u,d]=(0,_.useState)(`All`),[f,p]=(0,_.useState)(`tide-belfast`),[m,h]=(0,_.useState)(``),[g,v]=(0,_.useState)([]),[y,b]=(0,_.useState)(!1),[x,S]=(0,_.useState)(!1),C=(0,_.useRef)(null),[w,T]=(0,_.useState)(null),[E,D]=(0,_.useState)(QL.getPowerOutages()),[O,k]=(0,_.useState)(QL.getTransitStatus()),[A,j]=(0,_.useState)(QL.getBeachConditions()),[M,ee]=(0,_.useState)(QL.getAirQualityAndPollen()),[te,N]=(0,_.useState)(QL.getRoadworks()),[ne,re]=(0,_.useState)(QL.getSpaceSkyWatch()),[ie,ae]=(0,_.useState)(QL.getLocalEvents()),[oe,se]=(0,_.useState)(QL.getTideLocations()),[ce,le]=(0,_.useState)(QL.getInboundFlights()),[ue,de]=(0,_.useState)(!1),[fe,pe]=(0,_.useState)(!1),[me,he]=(0,_.useState)(!1),[ge,P]=(0,_.useState)(!1),[F,_e]=(0,_.useState)(!1),[ve,ye]=(0,_.useState)(!1),[be,xe]=(0,_.useState)(!1),[Se,Ce]=(0,_.useState)(!1),[we,Te]=(0,_.useState)(!1),[Ee,De]=(0,_.useState)(!1),[Oe,ke]=(0,_.useState)(!1),[Ae,je]=(0,_.useState)(`BFS`),[Me,Ne]=(0,_.useState)(`all`),[Pe,Fe]=(0,_.useState)(!1),[Ie,Le]=(0,_.useState)(``),[Re,ze]=(0,_.useState)(``);(0,_.useEffect)(()=>{let e=()=>{let e=new Date;Le(e.toLocaleTimeString(`en-GB`,{hour:`2-digit`,minute:`2-digit`})),ze(e.toLocaleDateString(`en-GB`,{weekday:`short`,day:`numeric`,month:`short`,year:`numeric`}))};e();let t=setInterval(e,1e3);return()=>clearInterval(t)},[]),(0,_.useEffect)(()=>{let e=()=>{le(QL.getInboundFlights())};e();let t=setInterval(e,15e3);return()=>clearInterval(t)},[]),(0,_.useEffect)(()=>{let e=!0,t=async()=>{try{let t=await QL.fetchLiveRoadworks();e&&t&&t.length>0&&N(t)}catch{}};t();let n=setInterval(t,3e4);return()=>{e=!1,clearInterval(n)}},[]),(0,_.useEffect)(()=>{let e=!0,t=async()=>{try{let t=await bR.getNIWeather();e&&T(t)}catch{}};t();let n=setInterval(t,3e5);return()=>{e=!1,clearInterval(n)}},[]),(0,_.useEffect)(()=>{let e=c===`All NI`?`All`:c;D(QL.getPowerOutages(e)),j(QL.getBeachConditions(e)),N(QL.getRoadworks(e)),ae(QL.getLocalEvents(e))},[c]),(0,_.useEffect)(()=>{let e=e=>{C.current&&!C.current.contains(e.target)&&S(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[]);let Be=async e=>{let t=e.target.value;if(h(t),t.trim().length>=1){b(!0),S(!0);try{let e=await iR.searchLocation(t),n=t.toLowerCase(),r=te.filter(e=>e.route.toLowerCase().includes(n)||e.location.toLowerCase().includes(n)||e.description.toLowerCase().includes(n)||`traffic road closure roadworks collision crash`.includes(n)&&n.length>=3).map(e=>({placeId:`closure-${e.id}`,displayName:`${e.route} - ${e.location}`,title:`⛔ ${e.route} [CLOSED ROAD]`,subtitle:`${e.location} • ${e.description}`,category:`CORRIDOR`,lat:e.lat,lng:e.lng,metadata:{closure:e}}));v([...r,...e])}catch{v([])}finally{b(!1)}}else v([]),S(!1)},Ve=(0,_.useMemo)(()=>_R.filter(e=>{if(c!==`All NI`&&(c===`Londonderry`&&!e.county.toLowerCase().includes(`derry`)&&!e.county.toLowerCase().includes(`londonderry`)||c!==`Londonderry`&&!e.county.toLowerCase().includes(c.toLowerCase()))||u!==`All`&&(u===`News`&&e.category!==`BIG_EVENT`&&e.category!==`ROAD_INCIDENT`||u===`Travel`&&e.category!==`ROAD_INCIDENT`&&e.category!==`AIR_MARITIME`||u===`Weather`&&e.category!==`ENVIRONMENT_FLOOD`||u===`Community`&&e.category!==`BIG_EVENT`))return!1;if(m.trim()){let t=m.toLowerCase();return e.title.toLowerCase().includes(t)||e.summary.toLowerCase().includes(t)||e.locationName.toLowerCase().includes(t)}return!0}),[c,u,m]),He=(0,_.useMemo)(()=>{let e=ML.find(e=>e.cctvId===`13`)||ML[1],t=ML.find(e=>e.cctvId===`821-1`)||ML[0],n=ML.find(e=>e.cctvId===`6`)||ML[2],r=ML.find(e=>e.cctvId===`505`)||ML[3];return[{cam:e,label:`M2 – Templepatrick / Bellevue`},{cam:t,label:`A55 – North Down Corridor`},{cam:n,label:`M1 – Sprucefield Interchange`},{cam:r,label:`A12 – Westlink / Carrick Port`}]},[]),Ue=(0,_.useMemo)(()=>oe.find(e=>e.id===f)||oe[0],[f,oe]),We=(0,_.useMemo)(()=>te.find(e=>e.severity===`STANDSTILL`)||te[0],[te]),Ge=(0,_.useMemo)(()=>QL.getInboundFlights(Ae),[Ae,Ie]);return(0,$.jsxs)(`div`,{className:`min-h-screen bg-[#f3f6fa] text-slate-800 font-sans pb-16 selection:bg-sky-500 selection:text-white`,children:[(0,$.jsx)(`header`,{className:`sticky top-0 z-40 bg-white border-b border-slate-200/90 shadow-xs px-4 lg:px-8 py-2.5`,children:(0,$.jsxs)(`div`,{className:`max-w-[1480px] mx-auto flex flex-col md:flex-row items-center justify-between gap-3`,children:[(0,$.jsxs)(`div`,{onClick:()=>{Q.playClick(),e()},className:`flex items-center gap-2.5 shrink-0 cursor-pointer group`,children:[(0,$.jsx)(`img`,{src:`/logo-transparent.png`,alt:`I SPY NI`,className:`h-9 sm:h-10 object-contain group-hover:scale-102 transition-transform`}),(0,$.jsx)(`span`,{className:`text-[9px] bg-sky-100 text-sky-800 border border-sky-300 px-1.5 py-0.5 rounded font-black tracking-wider uppercase hidden sm:inline-block`,children:`INTEL HUB`})]}),(0,$.jsxs)(`div`,{ref:C,className:`relative w-full md:max-w-md lg:max-w-lg`,children:[(0,$.jsxs)(`div`,{className:`relative`,children:[(0,$.jsx)(qI,{className:`absolute left-3.5 top-1/2 -translate-y-1/2 w-4 h-4 text-slate-600`}),(0,$.jsx)(`input`,{type:`text`,value:m,onChange:Be,onFocus:()=>{g.length>0&&S(!0)},placeholder:`Search towns, places, flights, traffic, cameras...`,className:`w-full pl-10 pr-4 py-2 bg-slate-100 hover:bg-slate-100/80 focus:bg-white text-xs text-slate-800 placeholder-slate-600 rounded-full border border-slate-200 focus:border-sky-500 focus:outline-hidden transition-all shadow-inner`}),y&&(0,$.jsx)(`div`,{className:`absolute right-3.5 top-1/2 -translate-y-1/2 w-3.5 h-3.5 border-2 border-sky-500 border-t-transparent rounded-full animate-spin`})]}),x&&g.length>0&&(0,$.jsx)(`div`,{className:`absolute left-0 right-0 top-full mt-2 bg-white border border-slate-200 rounded-2xl shadow-2xl overflow-hidden z-50 max-h-72 overflow-y-auto`,children:g.map((e,n)=>(0,$.jsxs)(`button`,{onClick:()=>{Q.playTargetLock(),S(!1);let n=e.metadata?.closure;n&&a?a(n):t(e.lat,e.lng,e.title)},className:`w-full text-left px-4 py-2.5 hover:bg-sky-50 flex items-center justify-between text-xs border-b border-slate-100 last:border-0 cursor-pointer`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`div`,{className:`font-bold text-slate-900`,children:e.title}),(0,$.jsx)(`div`,{className:`text-[10px] text-slate-600`,children:e.subtitle})]}),(0,$.jsx)(`span`,{className:`text-[9px] font-bold text-sky-600 bg-sky-100 px-2 py-0.5 rounded-full`,children:e.category})]},n))})]}),(0,$.jsxs)(`div`,{className:`flex items-center gap-3 shrink-0`,children:[(0,$.jsxs)(`div`,{className:`hidden xl:flex items-center bg-slate-100 p-1 rounded-full text-xs font-semibold text-slate-600 border border-slate-200`,children:[(0,$.jsxs)(`button`,{onClick:()=>{Q.playClick(),e()},className:`px-3 py-1 rounded-full hover:text-slate-900 flex items-center gap-1.5 transition-colors cursor-pointer`,children:[(0,$.jsx)(DI,{className:`w-3.5 h-3.5`}),(0,$.jsx)(`span`,{children:`Map`})]}),(0,$.jsxs)(`button`,{className:`px-3 py-1 rounded-full bg-white text-sky-600 font-bold shadow-xs flex items-center gap-1.5`,children:[(0,$.jsx)(LF,{className:`w-3.5 h-3.5 text-sky-500`}),(0,$.jsx)(`span`,{children:`Intel`})]}),(0,$.jsxs)(`button`,{onClick:()=>he(!0),className:`px-3 py-1 rounded-full hover:text-slate-900 flex items-center gap-1.5 transition-colors cursor-pointer`,children:[(0,$.jsx)(ZF,{className:`w-3.5 h-3.5`}),(0,$.jsx)(`span`,{children:`Weather`})]}),(0,$.jsxs)(`button`,{onClick:()=>{document.getElementById(`section-traffic`)?.scrollIntoView({behavior:`smooth`})},className:`px-3 py-1 rounded-full hover:text-slate-900 flex items-center gap-1.5 transition-colors cursor-pointer`,children:[(0,$.jsx)(zF,{className:`w-3.5 h-3.5`}),(0,$.jsx)(`span`,{children:`Travel`})]}),(0,$.jsxs)(`button`,{onClick:()=>{document.getElementById(`section-cameras`)?.scrollIntoView({behavior:`smooth`})},className:`px-3 py-1 rounded-full hover:text-slate-900 flex items-center gap-1.5 transition-colors cursor-pointer`,children:[(0,$.jsx)(LF,{className:`w-3.5 h-3.5`}),(0,$.jsx)(`span`,{children:`Cameras`})]}),(0,$.jsxs)(`button`,{onClick:()=>{document.getElementById(`section-rivers`)?.scrollIntoView({behavior:`smooth`})},className:`px-3 py-1 rounded-full hover:text-slate-900 flex items-center gap-1.5 transition-colors cursor-pointer`,children:[(0,$.jsx)(aI,{className:`w-3.5 h-3.5`}),(0,$.jsx)(`span`,{children:`Rivers`})]}),(0,$.jsxs)(`button`,{onClick:()=>{document.getElementById(`section-tides`)?.scrollIntoView({behavior:`smooth`})},className:`px-3 py-1 rounded-full hover:text-slate-900 flex items-center gap-1.5 transition-colors cursor-pointer`,children:[(0,$.jsx)(TL,{className:`w-3.5 h-3.5`}),(0,$.jsx)(`span`,{children:`Tides`})]}),(0,$.jsxs)(`button`,{onClick:()=>pe(!0),className:`px-3 py-1 rounded-full hover:text-slate-900 flex items-center gap-1.5 transition-colors cursor-pointer`,children:[(0,$.jsx)(FF,{className:`w-3.5 h-3.5`}),(0,$.jsx)(`span`,{children:`Events`})]}),(0,$.jsx)(`button`,{onClick:()=>de(!0),className:`px-2 py-1 rounded-full hover:text-slate-900 transition-colors cursor-pointer`,title:`Space & Sky Watch`,children:(0,$.jsx)(sI,{className:`w-3.5 h-3.5`})})]}),(0,$.jsxs)(`div`,{className:`flex items-center gap-2 pl-2 border-l border-slate-200`,children:[(0,$.jsxs)(`div`,{className:`text-right font-mono`,children:[(0,$.jsx)(`div`,{className:`text-xs font-bold text-slate-800 leading-tight`,children:Ie||`11:24`}),(0,$.jsx)(`div`,{className:`text-[10px] text-slate-600 leading-tight`,children:Re||`Sun 12 Oct 2026`})]}),(0,$.jsxs)(`div`,{className:`px-2.5 py-1 rounded-full bg-emerald-500 text-white text-[10px] font-bold tracking-wider flex items-center gap-1.5 shadow-xs`,children:[(0,$.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full bg-white animate-ping`}),(0,$.jsx)(`span`,{children:`LIVE`})]})]})]})]})}),(0,$.jsx)(`section`,{className:`bg-white/80 backdrop-blur-md border-b border-slate-200/80 px-4 lg:px-8 py-2.5`,children:(0,$.jsxs)(`div`,{className:`max-w-[1480px] mx-auto flex flex-col lg:flex-row items-center justify-between gap-3`,children:[(0,$.jsx)(`div`,{className:`flex items-center gap-1.5 overflow-x-auto w-full lg:w-auto pb-1 lg:pb-0 scrollbar-none`,children:[`All NI`,`Antrim`,`Armagh`,`Down`,`Fermanagh`,`Londonderry`,`Tyrone`].map(e=>(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),l(e)},className:`px-3.5 py-1.5 rounded-xl text-xs font-semibold whitespace-nowrap transition-all cursor-pointer ${c===e?`bg-sky-600 text-white shadow-sm shadow-sky-600/30`:`bg-slate-100 text-slate-600 hover:bg-slate-200 hover:text-slate-900`}`,children:e},e))}),(0,$.jsxs)(`div`,{className:`flex items-center gap-2 overflow-x-auto w-full lg:w-auto text-xs font-bold font-mono`,children:[(0,$.jsxs)(`button`,{onClick:()=>{Q.playClick(),P(!0)},className:`flex items-center gap-1.5 px-2.5 py-1 rounded-full bg-rose-50 text-rose-700 border border-rose-200 shadow-2xs shrink-0 cursor-pointer hover:bg-rose-100 transition-colors`,title:`Click to view all active road closures & diversion routes`,children:[(0,$.jsx)(`span`,{className:`w-2 h-2 rounded-full bg-rose-500 animate-pulse`}),(0,$.jsxs)(`span`,{children:[te.filter(e=>e.severity===`STANDSTILL`).length||3,` Road Closures`]})]}),(0,$.jsxs)(`button`,{onClick:()=>{Q.playClick(),P(!0)},className:`flex items-center gap-1.5 px-2.5 py-1 rounded-full bg-amber-50 text-amber-700 border border-amber-200 shadow-2xs shrink-0 cursor-pointer hover:bg-amber-100 transition-colors`,title:`Click to view all traffic incidents`,children:[(0,$.jsx)(hL,{className:`w-3 h-3 text-amber-500`}),(0,$.jsxs)(`span`,{children:[te.length,` Incidents`]})]}),(0,$.jsxs)(`button`,{onClick:()=>{Q.playClick(),_e(!0)},className:`flex items-center gap-1.5 px-2.5 py-1 rounded-full bg-rose-50 text-rose-700 border border-rose-200 shadow-2xs shrink-0 cursor-pointer hover:bg-rose-100 transition-colors`,title:`Click to view NIE Networks power cuts`,children:[(0,$.jsx)(jL,{className:`w-3 h-3 text-rose-500`}),(0,$.jsxs)(`span`,{children:[E.currentOutages,` Power Outages`]})]}),(0,$.jsxs)(`button`,{onClick:()=>{Q.playClick(),ke(!0)},className:`flex items-center gap-1.5 px-2.5 py-1 rounded-full bg-sky-50 text-sky-700 border border-sky-200 shadow-2xs shrink-0 cursor-pointer hover:bg-sky-100 transition-colors`,title:`Click to view live flight arrivals board`,children:[(0,$.jsx)(LI,{className:`w-3 h-3 text-sky-500`}),(0,$.jsxs)(`span`,{children:[ce.length,` Inbound Flights`]})]}),(0,$.jsxs)(`button`,{onClick:()=>{Q.playClick(),ye(!0)},className:`flex items-center gap-1.5 px-2.5 py-1 rounded-full bg-amber-50 text-amber-700 border border-amber-200 shadow-2xs shrink-0 cursor-pointer hover:bg-amber-100 transition-colors`,title:`Click to view Rivers Agency flood alerts`,children:[(0,$.jsx)(aI,{className:`w-3 h-3 text-amber-500`}),(0,$.jsxs)(`span`,{children:[FL.filter(e=>e.status!==`NORMAL`).length||2,` Flood Alerts`]})]}),(0,$.jsxs)(`button`,{onClick:()=>{Q.playClick(),Fe(!0)},className:`flex items-center gap-1.5 px-2.5 py-1 rounded-full bg-amber-500/10 text-amber-800 border border-amber-500/30 shadow-2xs shrink-0 cursor-pointer hover:bg-amber-500/20 transition-colors`,title:`Manage Amazon Affiliate Deals & Rotations (tag: ispyni-21)`,children:[(0,$.jsx)(lL,{className:`w-3 h-3 text-amber-600`}),(0,$.jsx)(`span`,{children:`Amazon Bargains & Ads`})]})]})]})}),(0,$.jsxs)(`main`,{className:`max-w-[1480px] mx-auto px-4 lg:px-8 pt-5 space-y-5`,children:[We&&(0,$.jsxs)(`div`,{onClick:()=>{Q.playTargetLock(),a?a(We):t(We.lat,We.lng,We.route)},className:`bg-gradient-to-r from-rose-950 via-slate-900 to-rose-950 border-2 border-rose-500 rounded-2xl p-4 shadow-xl flex flex-col md:flex-row items-start md:items-center justify-between gap-4 relative overflow-hidden cursor-pointer hover:border-rose-400 transition-all group`,children:[(0,$.jsxs)(`div`,{className:`flex items-start gap-3.5 relative z-10`,children:[(0,$.jsx)(`div`,{className:`w-10 h-10 rounded-xl bg-rose-600 border border-white/50 text-white flex items-center justify-center shrink-0 shadow-lg animate-pulse`,children:(0,$.jsx)(hL,{className:`w-5 h-5`})}),(0,$.jsxs)(`div`,{children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(`span`,{className:`text-[10px] font-mono font-black uppercase tracking-wider bg-rose-500/30 text-rose-200 border border-rose-400/50 px-2 py-0.5 rounded-full`,children:`CRITICAL TRAFFIC ALERT // ROAD CLOSED`}),(0,$.jsx)(`span`,{className:`text-xs text-rose-300 font-mono hidden sm:inline`,children:`LIVE DfI ROADS INCIDENT`})]}),(0,$.jsxs)(`h2`,{className:`text-sm sm:text-base font-black text-white mt-1 group-hover:text-rose-200 transition-colors`,children:[We.route,`: `,We.location]}),(0,$.jsxs)(`p`,{className:`text-xs text-slate-300 mt-0.5 max-w-3xl leading-relaxed`,children:[We.description,` — `,(0,$.jsx)(`span`,{className:`text-sky-300 font-semibold`,children:We.diversionAdvice})]})]})]}),(0,$.jsx)(`div`,{className:`flex items-center gap-2.5 w-full md:w-auto shrink-0 relative z-10`,children:(0,$.jsxs)(`button`,{onClick:e=>{e.stopPropagation(),Q.playTargetLock(),a?a(We):t(We.lat,We.lng,We.route)},className:`w-full md:w-auto px-4 py-2.5 rounded-xl bg-rose-600 hover:bg-rose-500 text-white text-xs font-mono font-black flex items-center justify-center gap-2 shadow-lg hover:shadow-rose-500/30 transition-all cursor-pointer`,children:[(0,$.jsx)(`span`,{children:`🗺️ FLY TO EXACT ROAD ON 3D MAP`}),(0,$.jsx)(GF,{className:`w-4 h-4 group-hover:translate-x-0.5 transition-transform`})]})})]}),(0,$.jsx)(xR,{type:`leaderboard`}),(0,$.jsxs)(`div`,{className:`grid grid-cols-1 lg:grid-cols-12 gap-5`,children:[(0,$.jsx)(`div`,{className:`lg:col-span-3 bg-white rounded-2xl border border-slate-200 shadow-xs p-4 flex flex-col justify-between`,children:(0,$.jsxs)(`div`,{children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between pb-3 border-b border-slate-100`,children:[(0,$.jsx)(`h2`,{className:`text-sm font-black text-slate-900 tracking-tight uppercase`,children:`TOP HEADLINES`}),(0,$.jsx)(`button`,{onClick:()=>d(`All`),className:`text-xs font-semibold text-sky-600 hover:text-sky-700 cursor-pointer flex items-center gap-0.5`,children:`View All >`})]}),(0,$.jsx)(`div`,{className:`flex items-center gap-1 py-2.5 overflow-x-auto text-[11px] font-semibold border-b border-slate-100`,children:[`All`,`News`,`Travel`,`Weather`,`Community`].map(e=>(0,$.jsx)(`button`,{onClick:()=>d(e),className:`px-2.5 py-1 rounded-full transition-colors cursor-pointer ${u===e?`bg-sky-600 text-white`:`bg-slate-100 text-slate-600 hover:text-slate-900`}`,children:e},e))}),(0,$.jsx)(`div`,{className:`divide-y divide-slate-100 mt-1`,children:Ve.slice(0,5).map(e=>{let n=te.find(t=>e.title.toLowerCase().includes(t.route.toLowerCase())||e.impactMetrics?.affectedRoutes&&e.impactMetrics.affectedRoutes.some(e=>t.route.toLowerCase().includes(e.toLowerCase())||e.toLowerCase().includes(t.route.toLowerCase()))||e.category===`ROAD_INCIDENT`&&Math.hypot(e.coordinates.lat-t.lat,e.coordinates.lng-t.lng)<.05);return(0,$.jsxs)(`article`,{onClick:()=>{Q.playClick(),r(e)},className:`py-3 flex items-start gap-3 hover:bg-slate-50 rounded-xl px-1.5 transition-colors cursor-pointer group`,children:[(0,$.jsx)(`div`,{className:`w-14 h-14 rounded-lg bg-sky-950/20 border border-slate-200 overflow-hidden shrink-0 shadow-2xs group-hover:scale-105 transition-transform flex items-center justify-center`,children:(0,$.jsx)(`img`,{src:e.category===`ROAD_INCIDENT`?`https://images.unsplash.com/photo-1568605117036-5fe5e7bab0b7?auto=format&fit=crop&w=200&q=80`:e.category===`AIR_MARITIME`?`https://images.unsplash.com/photo-1540959733332-eab4deabeeaf?auto=format&fit=crop&w=200&q=80`:e.category===`ENVIRONMENT_FLOOD`?`https://images.unsplash.com/photo-1514924013411-cbf25faa35bb?auto=format&fit=crop&w=200&q=80`:`https://images.unsplash.com/photo-1506744038136-46273834b3fb?auto=format&fit=crop&w=200&q=80`,alt:e.title,className:`w-full h-full object-cover`})}),(0,$.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,$.jsx)(`h3`,{className:`text-xs font-bold text-slate-900 leading-snug line-clamp-2 group-hover:text-sky-600 transition-colors`,children:e.title}),(0,$.jsxs)(`div`,{className:`flex items-center justify-between gap-1 mt-1 text-[10px] text-slate-600`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,$.jsx)(`span`,{className:`font-semibold text-slate-700`,children:e.author.split(` // `)[0]||`Trafficwatch NI`}),(0,$.jsx)(`span`,{children:`•`}),(0,$.jsx)(`span`,{children:e.timestampStr})]}),n&&(0,$.jsx)(`button`,{onClick:e=>{e.stopPropagation(),Q.playTargetLock(),a?a(n):t(n.lat,n.lng,n.route)},className:`px-2 py-0.5 rounded-md bg-rose-600 hover:bg-rose-500 text-white font-mono font-bold text-[9px] flex items-center gap-0.5 shadow-xs transition-colors shrink-0 cursor-pointer`,title:`Fly directly to exact marked road on 3D map`,children:(0,$.jsx)(`span`,{children:`🗺️ 3D MAP`})})]})]})]},e.id)})})]})}),(0,$.jsxs)(`div`,{className:`lg:col-span-6 bg-white rounded-2xl border border-slate-200 shadow-xs overflow-hidden flex flex-col`,children:[(0,$.jsxs)(`div`,{className:`relative h-44 bg-gradient-to-r from-sky-900 via-indigo-950 to-slate-900 p-6 flex flex-col justify-between overflow-hidden`,children:[(0,$.jsx)(`div`,{className:`absolute inset-0 bg-cover bg-center opacity-30 mix-blend-luminosity`,style:{backgroundImage:`url('https://images.unsplash.com/photo-1548625361-125439b1a0e0?auto=format&fit=crop&w=1200&q=80')`}}),(0,$.jsx)(`div`,{className:`absolute inset-0 bg-gradient-to-t from-slate-950/90 via-slate-950/40 to-transparent`}),(0,$.jsxs)(`div`,{className:`relative z-10 flex items-start justify-between`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsxs)(`h1`,{className:`text-2xl font-black text-white tracking-tight leading-tight`,children:[`Northern Ireland`,(0,$.jsx)(`br`,{}),`at a glance`]}),(0,$.jsx)(`p`,{className:`text-xs text-sky-200 mt-1`,children:`Live travel, weather, cameras, flights, and more — all in one place.`})]}),(0,$.jsxs)(`div`,{className:`bg-white/10 backdrop-blur-md border border-white/20 px-3 py-1.5 rounded-xl text-right text-white`,children:[(0,$.jsx)(`div`,{className:`text-[10px] text-sky-200`,children:Re||`Sun 12 Oct 2026`}),(0,$.jsx)(`div`,{className:`text-sm font-black font-mono`,children:Ie||`11:24`}),(0,$.jsx)(`div`,{className:`text-[9px] text-emerald-300 font-bold`,children:`● Live updates`})]})]})]}),(0,$.jsx)(`div`,{className:`p-4 grid grid-cols-4 sm:grid-cols-4 md:grid-cols-8 gap-3 bg-white flex-1`,children:[{label:`Roads & Traffic`,icon:zF,color:`bg-rose-50 text-rose-600`,action:()=>P(!0)},{label:`Flights`,icon:LI,color:`bg-sky-50 text-sky-600`,action:()=>ke(!0)},{label:`Travel`,icon:NF,color:`bg-blue-50 text-blue-600`,action:()=>Ce(!0)},{label:`Weather`,icon:sL,color:`bg-amber-50 text-amber-600`,action:()=>he(!0)},{label:`Cameras`,icon:LF,color:`bg-emerald-50 text-emerald-600`,action:()=>{document.getElementById(`section-cameras`)?.scrollIntoView({behavior:`smooth`})}},{label:`Rivers & Flooding`,icon:aI,color:`bg-cyan-50 text-cyan-600`,action:()=>ye(!0)},{label:`Tides & Coast`,icon:TL,color:`bg-blue-50 text-blue-600`,action:()=>xe(!0)},{label:`Power Updates`,icon:jL,color:`bg-amber-50 text-amber-600`,action:()=>_e(!0)},{label:`Public Transport`,icon:dL,color:`bg-emerald-50 text-emerald-600`,action:()=>Ce(!0)},{label:`Beaches`,icon:_L,color:`bg-orange-50 text-orange-600`,action:()=>Te(!0)},{label:`Air Quality & Pollen`,icon:xI,color:`bg-green-50 text-green-600`,action:()=>De(!0)},{label:`Alerts`,icon:hL,color:`bg-rose-50 text-rose-600`,action:()=>he(!0)},{label:`Events`,icon:FF,color:`bg-purple-50 text-purple-600`,action:()=>pe(!0)},{label:`Space & Sky`,icon:NI,color:`bg-indigo-50 text-indigo-600`,action:()=>de(!0)},{label:`Local Info`,icon:hI,color:`bg-sky-50 text-sky-600`,action:()=>pe(!0)},{label:`More`,icon:sI,color:`bg-slate-100 text-slate-600`,action:()=>de(!0)}].map((e,t)=>(0,$.jsxs)(`button`,{onClick:()=>{Q.playClick(),e.action()},className:`flex flex-col items-center justify-center p-2.5 rounded-xl hover:bg-slate-50 border border-slate-100 transition-all cursor-pointer group text-center`,children:[(0,$.jsx)(`div`,{className:`w-9 h-9 rounded-xl ${e.color} flex items-center justify-center mb-1 group-hover:scale-110 transition-transform shadow-2xs`,children:(0,$.jsx)(e.icon,{className:`w-5 h-5`})}),(0,$.jsx)(`span`,{className:`text-[10px] font-bold text-slate-700 leading-tight`,children:e.label})]},t))})]}),(0,$.jsxs)(`div`,{className:`lg:col-span-3 space-y-4`,children:[(0,$.jsxs)(`div`,{className:`bg-white rounded-2xl border border-slate-200 shadow-xs p-4`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between pb-2 border-b border-slate-100`,children:[(0,$.jsx)(`h2`,{className:`text-xs font-black text-slate-900 tracking-wider uppercase`,children:`WEATHER`}),(0,$.jsx)(`span`,{className:`text-[10px] font-semibold text-slate-600`,children:`Met Office >`})]}),(0,$.jsxs)(`div`,{className:`pt-3 flex items-center justify-between`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsxs)(`div`,{className:`text-3xl font-black text-slate-900`,children:[w?.temperatureC??12,`°C`]}),(0,$.jsx)(`div`,{className:`text-xs font-semibold text-slate-600 mt-0.5`,children:w?.weatherDesc??`Light rain`}),(0,$.jsxs)(`div`,{className:`text-[11px] text-slate-600`,children:[`Feels like `,w?.apparentTempC??9,`°C`]})]}),(0,$.jsxs)(`div`,{className:`text-right`,children:[(0,$.jsx)(`div`,{className:`w-12 h-12 rounded-2xl bg-sky-50 text-sky-600 flex items-center justify-center mx-auto mb-1`,children:(0,$.jsx)(ZF,{className:`w-7 h-7`})}),(0,$.jsxs)(`div`,{className:`text-[11px] font-mono font-bold text-slate-700 flex items-center gap-1 justify-end`,children:[(0,$.jsx)(DL,{className:`w-3.5 h-3.5 text-slate-600`}),(0,$.jsxs)(`span`,{children:[w?.windSpeedMph??18,` mph `,w?.windDirectionStr??`SW`]})]})]})]}),(0,$.jsx)(`div`,{className:`grid grid-cols-6 gap-1 pt-4 border-t border-slate-100 mt-3 text-center`,children:(w?.hourly??[{timeStr:`12:00`,tempC:12},{timeStr:`13:00`,tempC:12},{timeStr:`14:00`,tempC:11},{timeStr:`15:00`,tempC:11},{timeStr:`16:00`,tempC:10},{timeStr:`17:00`,tempC:9}]).map((e,t)=>(0,$.jsxs)(`div`,{className:`bg-slate-50 py-1.5 rounded-lg border border-slate-100`,children:[(0,$.jsx)(`div`,{className:`text-[9px] text-slate-600`,children:e.timeStr}),(0,$.jsx)(`div`,{className:`my-1 flex justify-center`,children:(0,$.jsx)(ZF,{className:`w-3.5 h-3.5 text-sky-500`})}),(0,$.jsxs)(`div`,{className:`text-[10px] font-bold text-slate-800`,children:[e.tempC,`°`]})]},t))}),(0,$.jsxs)(`div`,{className:`flex items-center justify-between pt-3 text-xs font-bold text-sky-600`,children:[(0,$.jsx)(`button`,{onClick:()=>he(!0),className:`hover:underline cursor-pointer`,children:`3 Day Forecast →`}),(0,$.jsx)(`button`,{onClick:()=>he(!0),className:`hover:underline cursor-pointer`,children:`Detailed Forecast →`})]})]}),(0,$.jsxs)(`div`,{className:`bg-amber-50/80 rounded-2xl border border-amber-200 p-3.5 shadow-2xs`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between pb-2`,children:[(0,$.jsx)(`span`,{className:`text-xs font-black text-amber-900 uppercase`,children:`NI ALERTS & WARNINGS`}),(0,$.jsx)(`button`,{onClick:()=>he(!0),className:`text-[10px] font-bold text-amber-700 hover:underline cursor-pointer`,children:`View All >`})]}),(0,$.jsxs)(`div`,{onClick:()=>he(!0),className:`bg-white rounded-xl p-3 border border-amber-200/80 flex items-start gap-3 shadow-2xs cursor-pointer hover:bg-amber-50/50 transition-colors`,children:[(0,$.jsx)(`div`,{className:`w-8 h-8 rounded-lg bg-amber-400 text-amber-950 flex items-center justify-center shrink-0`,children:(0,$.jsx)(hL,{className:`w-5 h-5`})}),(0,$.jsxs)(`div`,{className:`min-w-0`,children:[(0,$.jsx)(`div`,{className:`text-xs font-black text-amber-950`,children:`Yellow Weather Warning`}),(0,$.jsx)(`div`,{className:`text-[11px] text-amber-800 leading-snug mt-0.5`,children:`Heavy rain and strong winds expected overnight across Northern Ireland.`})]})]})]})]})]}),(0,$.jsxs)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-5`,children:[(0,$.jsxs)(`div`,{id:`section-traffic`,className:`bg-white rounded-2xl border border-slate-200 shadow-xs p-4`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between pb-3 border-b border-slate-100`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,$.jsx)(zF,{className:`w-4 h-4 text-rose-500`}),(0,$.jsx)(`h3`,{className:`text-xs font-black text-slate-900 uppercase`,children:`LIVE TRAFFIC`})]}),(0,$.jsxs)(`div`,{className:`text-[10px] text-sky-600 font-semibold flex items-center gap-1`,children:[(0,$.jsx)(`span`,{children:`Traffic NI`}),(0,$.jsx)(`span`,{children:`•`}),(0,$.jsx)(`button`,{onClick:e,className:`hover:underline cursor-pointer`,children:`View Map >`})]})]}),(0,$.jsxs)(`div`,{className:`divide-y divide-slate-100 text-xs`,children:[(0,$.jsxs)(`div`,{onClick:()=>{Q.playClick(),t(54.595,-5.945,`A12 Westlink`)},className:`py-2.5 flex items-start gap-2.5 hover:bg-slate-50 rounded-lg cursor-pointer transition-colors`,title:`Fly to A12 Westlink Broadway on 3D Map`,children:[(0,$.jsx)(`div`,{className:`w-6 h-6 rounded-md bg-rose-100 text-rose-600 flex items-center justify-center shrink-0`,children:(0,$.jsx)(zF,{className:`w-3.5 h-3.5`})}),(0,$.jsxs)(`div`,{className:`min-w-0`,children:[(0,$.jsxs)(`div`,{className:`font-bold text-slate-900`,children:[`A12 Westlink – `,(0,$.jsx)(`span`,{className:`text-rose-600`,children:`Slow moving`})]}),(0,$.jsx)(`div`,{className:`text-[11px] text-slate-600`,children:`Belfast (eastbound at Broadway)`})]})]}),(0,$.jsxs)(`div`,{onClick:()=>{Q.playClick();let e=te.find(e=>e.route.toLowerCase().includes(`m1`))||te[1];a&&e?a(e):t(54.49,-6.18,`M1 Blaris`)},className:`py-2.5 flex items-start gap-2.5 hover:bg-slate-50 rounded-lg cursor-pointer transition-colors`,title:`View M1 roadwork diversion on 3D Map`,children:[(0,$.jsx)(`div`,{className:`w-6 h-6 rounded-md bg-amber-100 text-amber-600 flex items-center justify-center shrink-0`,children:(0,$.jsx)(zF,{className:`w-3.5 h-3.5`})}),(0,$.jsxs)(`div`,{className:`min-w-0`,children:[(0,$.jsxs)(`div`,{className:`font-bold text-slate-900`,children:[`M1 – `,(0,$.jsx)(`span`,{className:`text-amber-600`,children:`Delays`})]}),(0,$.jsx)(`div`,{className:`text-[11px] text-slate-600`,children:`Junction 8 to 6 Blaris to Lisburn`})]})]}),(0,$.jsxs)(`div`,{onClick:()=>{Q.playClick();let e=te.find(e=>e.route.toLowerCase().includes(`a6`))||te[0];a&&e?a(e):t(54.755,-6.32,`A6 Randalstown`)},className:`py-2.5 flex items-start gap-2.5 hover:bg-rose-50/60 rounded-lg cursor-pointer transition-colors border border-rose-100/50 bg-rose-50/20 px-1`,title:`Click to view closed stretch in RED and diversion in BLUE on 3D Map`,children:[(0,$.jsx)(`div`,{className:`w-6 h-6 rounded-md bg-rose-500 text-white flex items-center justify-center shrink-0 animate-pulse`,children:(0,$.jsx)(hL,{className:`w-3.5 h-3.5`})}),(0,$.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,$.jsxs)(`div`,{className:`font-bold text-slate-900 flex items-center justify-between`,children:[(0,$.jsxs)(`span`,{children:[`A6 – `,(0,$.jsx)(`span`,{className:`text-rose-600 font-black`,children:`Road closed`})]}),(0,$.jsx)(`span`,{className:`text-[9px] bg-rose-100 text-rose-700 px-1.5 py-0.5 rounded font-bold`,children:`3D MAP`})]}),(0,$.jsx)(`div`,{className:`text-[11px] text-slate-600`,children:`Randalstown (collision investigation)`})]})]}),(0,$.jsxs)(`div`,{onClick:()=>{Q.playClick(),t(54.67,-5.93,`M2 Bellevue`)},className:`py-2.5 flex items-start gap-2.5 hover:bg-slate-50 rounded-lg cursor-pointer transition-colors`,title:`Fly to M2 Bellevue on 3D Map`,children:[(0,$.jsx)(`div`,{className:`w-6 h-6 rounded-md bg-emerald-100 text-emerald-600 flex items-center justify-center shrink-0`,children:(0,$.jsx)(zF,{className:`w-3.5 h-3.5`})}),(0,$.jsxs)(`div`,{className:`min-w-0`,children:[(0,$.jsxs)(`div`,{className:`font-bold text-slate-900`,children:[`M2 – `,(0,$.jsx)(`span`,{className:`text-emerald-600`,children:`Normal flow`})]}),(0,$.jsx)(`div`,{className:`text-[11px] text-slate-600`,children:`Belfast to Carrickfergus`})]})]}),(0,$.jsxs)(`div`,{onClick:()=>{Q.playClick(),t(54.59,-5.87,`A55 Knock`)},className:`py-2.5 flex items-start gap-2.5 hover:bg-slate-50 rounded-lg cursor-pointer transition-colors`,title:`Fly to A55 Knock on 3D Map`,children:[(0,$.jsx)(`div`,{className:`w-6 h-6 rounded-md bg-amber-100 text-amber-600 flex items-center justify-center shrink-0`,children:(0,$.jsx)(zF,{className:`w-3.5 h-3.5`})}),(0,$.jsxs)(`div`,{className:`min-w-0`,children:[(0,$.jsxs)(`div`,{className:`font-bold text-slate-900`,children:[`A55 – `,(0,$.jsx)(`span`,{className:`text-amber-600`,children:`Heavy traffic`})]}),(0,$.jsx)(`div`,{className:`text-[11px] text-slate-600`,children:`North Down / Knock Corridor`})]})]})]})]}),(0,$.jsxs)(`div`,{className:`bg-white rounded-2xl border border-slate-200 shadow-xs p-4`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between pb-3 border-b border-slate-100`,children:[(0,$.jsx)(`h3`,{className:`text-xs font-black text-slate-900 uppercase`,children:`ROADWORKS & CLOSURES`}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),P(!0)},className:`text-[10px] text-sky-600 font-bold hover:underline cursor-pointer`,children:`View All >`})]}),(0,$.jsx)(`div`,{className:`divide-y divide-slate-100 text-xs`,children:te.slice(0,5).map(e=>(0,$.jsxs)(`div`,{onClick:()=>{Q.playTargetLock(),a?a(e):t(e.lat,e.lng,e.route)},className:`py-2.5 flex items-start gap-2.5 hover:bg-rose-50/60 px-1.5 rounded-lg cursor-pointer transition-colors group`,title:`Click to fly to exact marked road in red on 3D Map`,children:[(0,$.jsx)(`div`,{className:`w-6 h-6 rounded-md flex items-center justify-center shrink-0 ${e.severity===`STANDSTILL`?`bg-rose-100 text-rose-600`:e.severity===`MODERATE_DELAY`?`bg-amber-100 text-amber-600`:`bg-slate-100 text-slate-600`}`,children:(0,$.jsx)(hL,{className:`w-3.5 h-3.5`})}),(0,$.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,$.jsx)(`span`,{className:`font-bold text-slate-900 group-hover:text-rose-600 transition-colors`,children:e.route}),(0,$.jsx)(`span`,{className:`text-[9px] font-mono font-bold bg-rose-600 group-hover:bg-rose-500 text-white px-1.5 py-0.5 rounded flex items-center gap-0.5 shadow-2xs transition-colors shrink-0`,children:`🗺️ 3D MAP`})]}),(0,$.jsx)(`div`,{className:`text-[11px] text-slate-600 line-clamp-1`,children:e.description})]})]},e.id))})]}),(0,$.jsxs)(`div`,{id:`section-flights`,className:`bg-white rounded-2xl border border-slate-200 shadow-xs p-4 flex flex-col justify-between`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between pb-3 border-b border-slate-100`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,$.jsx)(LI,{className:`w-4 h-4 text-sky-600`}),(0,$.jsx)(`h3`,{className:`text-xs font-black text-slate-900 uppercase`,children:`LIVE FLIGHTS`})]}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),ke(!0)},className:`text-[10px] text-sky-600 font-bold hover:underline cursor-pointer`,children:`View All >`})]}),(0,$.jsxs)(`div`,{className:`text-[10px] text-slate-600 font-mono py-2 flex items-center justify-between border-b border-slate-100`,children:[(0,$.jsx)(`span`,{children:`AIRLINE • FLIGHT`}),(0,$.jsx)(`span`,{children:`FROM`}),(0,$.jsx)(`span`,{children:`ARRIVES • STATUS`})]}),(0,$.jsx)(`div`,{className:`divide-y divide-slate-100 text-xs`,children:ce.map((t,n)=>(0,$.jsxs)(`div`,{onClick:()=>{Q.playTargetLock(),s?s(t.flightCallsign||t.flightNumber):e()},className:`group py-2 flex items-center justify-between hover:bg-sky-50 px-1.5 rounded-lg cursor-pointer transition-colors`,title:`Click to engage 3D Pilot's Eye Chase on ${t.flightNumber} (${t.airline})`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(`span`,{className:`px-1.5 py-0.5 rounded text-[9px] font-black ${t.badgeClass}`,children:t.airline}),(0,$.jsx)(`span`,{className:`font-mono font-bold text-slate-800 text-[11px] group-hover:text-sky-600 transition-colors`,children:t.flightNumber})]}),(0,$.jsx)(`div`,{className:`text-[11px] text-slate-600 font-semibold`,children:t.origin}),(0,$.jsxs)(`div`,{className:`text-right flex items-center gap-2`,children:[(0,$.jsx)(`div`,{children:(0,$.jsxs)(`div`,{className:`text-[9px] font-bold ${t.status===`On Time`||t.status===`Approaching`?`text-emerald-600`:t.status===`Delayed`?`text-rose-600`:`text-slate-500`}`,children:[`● `,t.status]})}),(0,$.jsx)(`span`,{className:`text-[9px] bg-sky-600 hover:bg-sky-500 text-white font-bold px-1.5 py-0.5 rounded flex items-center gap-0.5 shadow-xs transition-colors`,children:`✈️ CHASE`})]})]},n))})]}),(0,$.jsxs)(`button`,{onClick:()=>{Q.playClick(),ke(!0)},className:`w-full mt-3 py-2 bg-sky-50 hover:bg-sky-100 text-sky-700 font-bold text-xs rounded-xl flex items-center justify-center gap-1 transition-colors cursor-pointer`,children:[(0,$.jsx)(LI,{className:`w-3.5 h-3.5`}),(0,$.jsx)(`span`,{children:`View All Arrivals & Departures >`})]})]}),(0,$.jsxs)(`div`,{id:`section-cameras`,className:`bg-white rounded-2xl border border-slate-200 shadow-xs p-4 flex flex-col justify-between`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between pb-3 border-b border-slate-100`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,$.jsx)(LF,{className:`w-4 h-4 text-emerald-600`}),(0,$.jsx)(`h3`,{className:`text-xs font-black text-slate-900 uppercase`,children:`TRAVEL CAMERAS`})]}),(0,$.jsx)(`button`,{onClick:()=>i&&i(),className:`text-[10px] text-sky-600 font-bold hover:underline cursor-pointer`,children:`View All >`})]}),(0,$.jsx)(`div`,{className:`grid grid-cols-2 gap-2.5 pt-3`,children:He.map(({cam:e,label:t},r)=>(0,$.jsxs)(`div`,{onClick:()=>{Q.playTargetLock(),n(e)},className:`relative group rounded-xl overflow-hidden border border-slate-200 bg-slate-950 aspect-video cursor-pointer shadow-2xs hover:shadow-md transition-all`,children:[(0,$.jsx)(`img`,{src:`/api/cctv/${e.cctvId}?t=${Date.now()}`,alt:e.name,onError:e=>{e.target.src=`https://images.unsplash.com/photo-1544620347-c4fd4a3d5957?auto=format&fit=crop&w=400&q=80`},className:`w-full h-full object-cover group-hover:scale-105 transition-transform opacity-90 group-hover:opacity-100`}),(0,$.jsxs)(`div`,{className:`absolute top-1.5 left-1.5 px-1.5 py-0.5 rounded bg-rose-600 text-white text-[8px] font-black uppercase tracking-wider flex items-center gap-1`,children:[(0,$.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full bg-white animate-ping`}),`LIVE`]}),(0,$.jsx)(`div`,{className:`absolute inset-0 bg-gradient-to-t from-slate-950/80 via-transparent to-transparent flex items-end p-1.5`,children:(0,$.jsx)(`span`,{className:`text-[9px] font-bold text-white truncate drop-shadow-md`,children:t})})]},r))})]}),(0,$.jsxs)(`button`,{onClick:()=>i&&i(),className:`w-full mt-3 py-2 bg-emerald-50 hover:bg-emerald-100 text-emerald-700 font-bold text-xs rounded-xl flex items-center justify-center gap-1.5 transition-colors cursor-pointer`,children:[(0,$.jsx)(kI,{className:`w-3.5 h-3.5`}),(0,$.jsx)(`span`,{children:`Launch Multi-Cam Matrix (Pro Wall)`})]})]})]}),(0,$.jsxs)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 lg:grid-cols-6 gap-4`,children:[(0,$.jsxs)(`div`,{id:`section-rivers`,className:`bg-white rounded-2xl border border-slate-200 shadow-xs p-4 flex flex-col justify-between`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between pb-2 border-b border-slate-100`,children:[(0,$.jsx)(`span`,{className:`text-[11px] font-black text-slate-900 uppercase`,children:`RIVERS & FLOOD RISK`}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),ye(!0)},className:`text-[10px] text-sky-600 font-semibold hover:underline cursor-pointer`,children:`NI Direct >`})]}),(0,$.jsx)(`div`,{className:`divide-y divide-slate-100 text-xs mt-1`,children:FL.slice(0,5).map(e=>(0,$.jsxs)(`div`,{onClick:()=>{Q.playClick(),t(e.lat,e.lng,e.name)},className:`py-1.5 flex items-center justify-between hover:bg-slate-50 px-1 rounded cursor-pointer transition-colors`,title:`Fly to ${e.name} flood telemetry gauge on 3D Map`,children:[(0,$.jsx)(`span`,{className:`text-slate-700 font-medium truncate`,children:e.riverName}),(0,$.jsxs)(`span`,{className:`flex items-center gap-1 text-[10px] font-bold ${e.status===`FLOOD_WARNING`?`text-rose-600`:e.status===`ELEVATED`?`text-amber-600`:`text-emerald-600`}`,children:[(0,$.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full ${e.status===`FLOOD_WARNING`?`bg-rose-500 animate-ping`:e.status===`ELEVATED`?`bg-amber-500`:`bg-emerald-500`}`}),e.status===`NORMAL`?`Normal`:e.status===`ELEVATED`?`Rising`:`Alert`]})]},e.id))})]}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),ye(!0)},className:`text-[10px] font-bold text-sky-600 hover:underline pt-2 text-center cursor-pointer`,children:`View All River Levels >`})]}),(0,$.jsxs)(`div`,{id:`section-tides`,className:`bg-white rounded-2xl border border-slate-200 shadow-xs p-4 flex flex-col justify-between`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between pb-2 border-b border-slate-100`,children:[(0,$.jsx)(`span`,{className:`text-[11px] font-black text-slate-900 uppercase`,children:`TIDE TIMES`}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),xe(!0)},className:`text-[10px] text-sky-600 font-semibold hover:underline cursor-pointer`,children:`UKHO >`})]}),(0,$.jsx)(`div`,{className:`flex items-center gap-1 py-1.5 text-[9px] font-bold`,children:oe.map(e=>(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),p(e.id)},className:`px-2 py-0.5 rounded-md cursor-pointer transition-colors ${f===e.id?`bg-sky-600 text-white`:`bg-slate-100 text-slate-600`}`,children:e.name},e.id))}),(0,$.jsx)(`div`,{className:`relative py-2 my-1`,children:(0,$.jsx)(`svg`,{viewBox:`0 0 100 25`,className:`w-full h-8 text-sky-500 stroke-current fill-none stroke-[2.5]`,children:(0,$.jsx)(`path`,{d:`M 0 12 Q 25 0, 50 12 T 100 12`})})}),(0,$.jsx)(`div`,{className:`grid grid-cols-4 gap-1 text-center font-mono text-[9px] text-slate-700`,children:Ue.tides.map((e,t)=>(0,$.jsxs)(`div`,{className:`bg-slate-50 p-1 rounded`,children:[(0,$.jsx)(`div`,{className:`font-bold text-slate-500`,children:e.type}),(0,$.jsx)(`div`,{className:`font-bold text-slate-900`,children:e.time}),(0,$.jsxs)(`div`,{className:`text-sky-600`,children:[e.heightM,`m`]})]},t))})]}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),xe(!0)},className:`text-[10px] font-bold text-sky-600 hover:underline pt-2 text-center cursor-pointer`,children:`View Full Tide Tables >`})]}),(0,$.jsxs)(`div`,{id:`section-transport`,className:`bg-white rounded-2xl border border-slate-200 shadow-xs p-4 flex flex-col justify-between`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between pb-2 border-b border-slate-100`,children:[(0,$.jsx)(`span`,{className:`text-[11px] font-black text-slate-900 uppercase`,children:`PUBLIC TRANSPORT`}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),Ce(!0)},className:`text-[10px] text-sky-600 font-semibold hover:underline cursor-pointer`,children:`Translink >`})]}),(0,$.jsx)(`div`,{className:`divide-y divide-slate-100 text-xs mt-1`,children:O.map((e,t)=>(0,$.jsxs)(`div`,{onClick:()=>{Q.playClick(),Ce(!0)},className:`py-1.5 flex items-center justify-between hover:bg-slate-50 px-1 rounded cursor-pointer transition-colors`,title:`Click to view Translink ${e.mode} line status`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[e.mode===`Rail`&&(0,$.jsx)(dL,{className:`w-3.5 h-3.5 text-emerald-600`}),e.mode===`Buses`&&(0,$.jsx)(NF,{className:`w-3.5 h-3.5 text-amber-600`}),e.mode===`Glider`&&(0,$.jsx)(NF,{className:`w-3.5 h-3.5 text-purple-600`}),e.mode===`Ulsterbus`&&(0,$.jsx)(NF,{className:`w-3.5 h-3.5 text-blue-600`}),(0,$.jsx)(`span`,{className:`text-slate-800 font-medium`,children:e.mode})]}),(0,$.jsx)(`span`,{className:`text-[10px] font-bold ${e.badgeColor===`emerald`?`text-emerald-600`:e.badgeColor===`amber`?`text-amber-600`:`text-rose-600`}`,children:e.status})]},t))})]}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),Ce(!0)},className:`text-[10px] font-bold text-sky-600 hover:underline pt-2 text-center cursor-pointer`,children:`View Live Updates >`})]}),(0,$.jsxs)(`div`,{id:`section-power`,className:`bg-white rounded-2xl border border-slate-200 shadow-xs p-4 flex flex-col justify-between`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between pb-2 border-b border-slate-100`,children:[(0,$.jsx)(`span`,{className:`text-[11px] font-black text-slate-900 uppercase`,children:`POWER OUTAGES`}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),_e(!0)},className:`text-[10px] text-sky-600 font-semibold hover:underline cursor-pointer`,children:`NI Electricity >`})]}),(0,$.jsxs)(`div`,{onClick:()=>{Q.playClick(),_e(!0)},className:`flex items-center gap-3 py-2 border-b border-slate-100 hover:bg-amber-50/50 rounded-lg px-1 cursor-pointer transition-colors`,title:`Click to view all NIE Networks power cuts`,children:[(0,$.jsx)(`div`,{className:`w-9 h-9 rounded-xl bg-amber-400 text-slate-950 flex items-center justify-center shrink-0`,children:(0,$.jsx)(jL,{className:`w-5 h-5`})}),(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`div`,{className:`text-base font-black text-slate-900 font-mono leading-none`,children:E.propertiesAffected.toLocaleString()}),(0,$.jsx)(`div`,{className:`text-[10px] text-slate-600 mt-0.5`,children:`Properties affected`})]})]}),(0,$.jsx)(`div`,{className:`divide-y divide-slate-100 text-xs mt-1`,children:E.breakdown.slice(0,3).map((e,t)=>(0,$.jsxs)(`div`,{onClick:()=>{Q.playClick();let t=BL.breakdown.find(t=>t.id===e.id)||e;o?o(t):_e(!0)},className:`py-1.5 flex items-center justify-between text-[11px] hover:bg-slate-50 px-1 rounded cursor-pointer transition-colors`,title:`Click to view ${e.region} power outage on 3D Map`,children:[(0,$.jsx)(`span`,{className:`text-slate-700 font-medium`,children:e.region}),(0,$.jsxs)(`span`,{className:`font-mono font-bold text-amber-700`,children:[e.affected,` affected`]})]},t))})]}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),_e(!0)},className:`text-[10px] font-bold text-sky-600 hover:underline pt-2 text-center cursor-pointer`,children:`View All Outages >`})]}),(0,$.jsxs)(`div`,{id:`section-beaches`,className:`bg-white rounded-2xl border border-slate-200 shadow-xs p-4 flex flex-col justify-between`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between pb-2 border-b border-slate-100`,children:[(0,$.jsx)(`span`,{className:`text-[11px] font-black text-slate-900 uppercase`,children:`BEACH CONDITIONS`}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),Te(!0)},className:`text-[10px] text-sky-600 font-semibold hover:underline cursor-pointer`,children:`Daera >`})]}),(0,$.jsx)(`div`,{className:`divide-y divide-slate-100 text-xs mt-1`,children:A.slice(0,5).map(e=>(0,$.jsxs)(`div`,{onClick:()=>{Q.playClick(),t(e.lat,e.lng,e.name)},className:`py-1.5 flex items-center justify-between hover:bg-slate-50 px-1 rounded cursor-pointer transition-colors`,title:`Fly to ${e.name} on 3D Map`,children:[(0,$.jsx)(`span`,{className:`text-slate-700 font-medium truncate`,children:e.name.split(` (`)[0]}),(0,$.jsxs)(`span`,{className:`flex items-center gap-1 text-[10px] font-bold ${e.status===`Good`?`text-emerald-600`:e.status===`Moderate`?`text-amber-600`:`text-rose-600`}`,children:[(0,$.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full ${e.status===`Good`?`bg-emerald-500`:e.status===`Moderate`?`bg-amber-500`:`bg-rose-500`}`}),e.status]})]},e.id))})]}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),Te(!0)},className:`text-[10px] font-bold text-sky-600 hover:underline pt-2 text-center cursor-pointer`,children:`View Beach Info >`})]}),(0,$.jsxs)(`div`,{id:`section-air`,className:`bg-white rounded-2xl border border-slate-200 shadow-xs p-4 flex flex-col justify-between`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between pb-2 border-b border-slate-100`,children:[(0,$.jsx)(`span`,{className:`text-[11px] font-black text-slate-900 uppercase`,children:`AIR QUALITY & POLLEN`}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),De(!0)},className:`text-[10px] text-sky-600 font-semibold hover:underline cursor-pointer`,children:`Defra >`})]}),(0,$.jsxs)(`div`,{onClick:()=>{Q.playClick(),De(!0)},className:`grid grid-cols-2 gap-2 py-2.5 text-center cursor-pointer hover:opacity-90 transition-opacity`,title:`Click to view full air quality telemetry`,children:[(0,$.jsxs)(`div`,{className:`bg-slate-50 p-2 rounded-xl border border-slate-100`,children:[(0,$.jsx)(`span`,{className:`text-[9px] text-slate-600 block`,children:`Air Quality`}),(0,$.jsx)(`div`,{className:`w-6 h-6 rounded-full bg-emerald-100 text-emerald-700 font-black text-xs mx-auto flex items-center justify-center my-1`,children:M.daqiIndex}),(0,$.jsx)(`span`,{className:`text-[10px] font-bold text-emerald-600`,children:M.airQualityRating})]}),(0,$.jsxs)(`div`,{className:`bg-slate-50 p-2 rounded-xl border border-slate-100`,children:[(0,$.jsx)(`span`,{className:`text-[9px] text-slate-600 block`,children:`Pollen`}),(0,$.jsx)(`div`,{className:`w-6 h-6 rounded-full bg-green-100 text-green-700 font-black text-xs mx-auto flex items-center justify-center my-1`,children:`✓`}),(0,$.jsx)(`span`,{className:`text-[10px] font-bold text-green-600`,children:M.pollenLevel})]})]}),(0,$.jsx)(`p`,{className:`text-[10px] text-slate-600 leading-tight`,children:M.summary})]}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),De(!0)},className:`text-[10px] font-bold text-sky-600 hover:underline pt-2 text-center cursor-pointer`,children:`View Detailed Information >`})]})]})]}),ue&&(0,$.jsx)(`div`,{className:`fixed inset-0 z-50 bg-slate-950/70 backdrop-blur-md flex items-center justify-center p-4`,children:(0,$.jsxs)(`div`,{className:`bg-white rounded-3xl max-w-lg w-full p-6 shadow-2xl border border-slate-200 space-y-4`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between pb-3 border-b border-slate-100`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(`div`,{className:`w-8 h-8 rounded-xl bg-indigo-100 text-indigo-700 flex items-center justify-center`,children:(0,$.jsx)(NI,{className:`w-4 h-4`})}),(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`h3`,{className:`text-base font-black text-slate-900`,children:`SPACE & SKY WATCH`}),(0,$.jsx)(`p`,{className:`text-xs text-slate-600`,children:`Aurora forecasts, ISS flyovers & astronomical telemetry`})]})]}),(0,$.jsx)(`button`,{onClick:()=>de(!1),className:`p-1 rounded-lg hover:bg-slate-100 text-slate-600`,children:(0,$.jsx)(kL,{className:`w-5 h-5`})})]}),(0,$.jsxs)(`div`,{className:`space-y-3 text-xs`,children:[(0,$.jsxs)(`div`,{className:`bg-indigo-50/80 p-3.5 rounded-2xl border border-indigo-100 flex items-start gap-3`,children:[(0,$.jsx)(aL,{className:`w-5 h-5 text-indigo-600 shrink-0`}),(0,$.jsxs)(`div`,{children:[(0,$.jsxs)(`div`,{className:`font-bold text-indigo-950`,children:[`Aurora Activity: Kp `,ne.auroraKp,` (`,ne.auroraStatus,`)`]}),(0,$.jsx)(`div`,{className:`text-[11px] text-indigo-800 mt-0.5`,children:ne.auroraVisibilityNI})]})]}),(0,$.jsxs)(`div`,{className:`grid grid-cols-2 gap-3 font-mono`,children:[(0,$.jsxs)(`div`,{className:`bg-slate-50 p-3 rounded-xl border border-slate-200`,children:[(0,$.jsx)(`span`,{className:`text-[10px] text-slate-600 block`,children:`ISS VISIBLE PASS`}),(0,$.jsx)(`span`,{className:`font-bold text-slate-900 text-sm`,children:ne.issPassTime}),(0,$.jsx)(`span`,{className:`text-[10px] text-slate-600 block mt-0.5`,children:ne.issPassDuration})]}),(0,$.jsxs)(`div`,{className:`bg-slate-50 p-3 rounded-xl border border-slate-200`,children:[(0,$.jsx)(`span`,{className:`text-[10px] text-slate-600 block`,children:`MOON ILLUMINATION`}),(0,$.jsxs)(`span`,{className:`font-bold text-slate-900 text-sm`,children:[ne.moonIlluminationPct,`%`]}),(0,$.jsx)(`span`,{className:`text-[10px] text-slate-600 block mt-0.5`,children:ne.moonPhase})]})]}),(0,$.jsxs)(`div`,{className:`bg-slate-50 p-3 rounded-xl border border-slate-200`,children:[(0,$.jsx)(`span`,{className:`text-[10px] text-slate-600 block font-bold`,children:`BEST STARGAZING LOCATION`}),(0,$.jsx)(`span`,{className:`font-bold text-slate-800`,children:ne.darkSkySpot}),(0,$.jsx)(`p`,{className:`text-[11px] text-slate-600 mt-1`,children:ne.stargazingConditions})]})]}),(0,$.jsx)(`button`,{onClick:()=>de(!1),className:`w-full py-2.5 bg-slate-900 hover:bg-slate-800 text-white font-bold text-xs rounded-xl cursor-pointer`,children:`Close`})]})}),fe&&(0,$.jsx)(`div`,{className:`fixed inset-0 z-50 bg-slate-950/70 backdrop-blur-md flex items-center justify-center p-4`,children:(0,$.jsxs)(`div`,{className:`bg-white rounded-3xl max-w-xl w-full p-6 shadow-2xl border border-slate-200 space-y-4`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between pb-3 border-b border-slate-100`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(`div`,{className:`w-8 h-8 rounded-xl bg-purple-100 text-purple-700 flex items-center justify-center`,children:(0,$.jsx)(FF,{className:`w-4 h-4`})}),(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`h3`,{className:`text-base font-black text-slate-900`,children:`MAJOR REGIONAL EVENTS`}),(0,$.jsx)(`p`,{className:`text-xs text-slate-600`,children:`Events with significant impact on regional traffic & crowd flows`})]})]}),(0,$.jsx)(`button`,{onClick:()=>pe(!1),className:`p-1 rounded-lg hover:bg-slate-100 text-slate-600`,children:(0,$.jsx)(kL,{className:`w-5 h-5`})})]}),(0,$.jsx)(`div`,{className:`divide-y divide-slate-100 max-h-96 overflow-y-auto`,children:ie.map(e=>(0,$.jsxs)(`div`,{className:`py-3 text-xs space-y-1`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,$.jsx)(`span`,{className:`font-bold text-slate-900 text-sm`,children:e.title}),(0,$.jsxs)(`span`,{className:`px-2 py-0.5 rounded-full text-[10px] font-bold ${e.trafficImpact===`HEAVY`?`bg-rose-100 text-rose-700`:`bg-amber-100 text-amber-700`}`,children:[e.trafficImpact,` TRAFFIC`]})]}),(0,$.jsxs)(`div`,{className:`text-slate-600`,children:[e.venue,` • `,e.location]}),(0,$.jsxs)(`div`,{className:`flex items-center gap-3 text-[11px] text-slate-600`,children:[(0,$.jsxs)(`span`,{children:[`📅 `,e.dateStr]}),(0,$.jsxs)(`span`,{children:[`👥 `,e.expectedAttendance,` attendees`]})]}),(0,$.jsxs)(`div`,{className:`text-[11px] text-sky-700 bg-sky-50 p-2 rounded-lg mt-1 font-medium`,children:[`💡 `,e.recommendedTravel]})]},e.id))}),(0,$.jsx)(`button`,{onClick:()=>pe(!1),className:`w-full py-2.5 bg-slate-900 hover:bg-slate-800 text-white font-bold text-xs rounded-xl cursor-pointer`,children:`Done`})]})}),me&&w&&(0,$.jsx)(`div`,{className:`fixed inset-0 z-50 bg-slate-950/70 backdrop-blur-md flex items-center justify-center p-4`,children:(0,$.jsxs)(`div`,{className:`bg-white rounded-3xl max-w-md w-full p-6 shadow-2xl border border-slate-200 space-y-4`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between pb-3 border-b border-slate-100`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(`div`,{className:`w-8 h-8 rounded-xl bg-sky-100 text-sky-700 flex items-center justify-center`,children:(0,$.jsx)(ZF,{className:`w-4 h-4`})}),(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`h3`,{className:`text-base font-black text-slate-900`,children:`MET OFFICE OUTLOOK`}),(0,$.jsx)(`p`,{className:`text-xs text-slate-600`,children:`Northern Ireland official atmospheric forecast`})]})]}),(0,$.jsx)(`button`,{onClick:()=>he(!1),className:`p-1 rounded-lg hover:bg-slate-100 text-slate-600`,children:(0,$.jsx)(kL,{className:`w-5 h-5`})})]}),w.hasWarning&&(0,$.jsxs)(`div`,{className:`bg-amber-50 p-3.5 rounded-2xl border border-amber-200 text-xs`,children:[(0,$.jsxs)(`div`,{className:`font-bold text-amber-950 flex items-center gap-1.5`,children:[(0,$.jsx)(hL,{className:`w-4 h-4 text-amber-600`}),(0,$.jsx)(`span`,{children:w.warningHeadline})]}),(0,$.jsx)(`p`,{className:`text-[11px] text-amber-800 mt-1`,children:w.warningText})]}),(0,$.jsxs)(`div`,{className:`space-y-2 text-xs`,children:[(0,$.jsx)(`div`,{className:`font-bold text-slate-800 uppercase tracking-wider text-[10px]`,children:`3-DAY OUTLOOK`}),(0,$.jsx)(`div`,{className:`divide-y divide-slate-100`,children:w.daily.map((e,t)=>(0,$.jsxs)(`div`,{className:`py-2.5 flex items-center justify-between`,children:[(0,$.jsx)(`span`,{className:`font-bold text-slate-900 w-16`,children:e.dayName}),(0,$.jsx)(`span`,{className:`text-slate-600 text-[11px] flex-1 text-center`,children:e.condition}),(0,$.jsxs)(`span`,{className:`font-mono font-bold text-slate-900`,children:[e.tempMaxC,`° `,(0,$.jsxs)(`span`,{className:`text-slate-600 font-normal`,children:[`/ `,e.tempMinC,`°`]})]})]},t))})]}),(0,$.jsx)(`button`,{onClick:()=>he(!1),className:`w-full py-2.5 bg-slate-900 hover:bg-slate-800 text-white font-bold text-xs rounded-xl cursor-pointer`,children:`Close`})]})}),ge&&(0,$.jsx)(`div`,{className:`fixed inset-0 z-50 bg-slate-950/70 backdrop-blur-md flex items-center justify-center p-4 overflow-y-auto`,children:(0,$.jsxs)(`div`,{className:`bg-white rounded-3xl max-w-2xl w-full p-6 shadow-2xl border border-slate-200 space-y-4 my-8`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between pb-3 border-b border-slate-100`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2.5`,children:[(0,$.jsx)(`div`,{className:`w-10 h-10 rounded-2xl bg-rose-100 text-rose-600 flex items-center justify-center`,children:(0,$.jsx)(zF,{className:`w-5 h-5`})}),(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`h3`,{className:`text-base font-black text-slate-900 tracking-tight`,children:`ACTIVE ROAD CLOSURES & DIVERSIONS`}),(0,$.jsx)(`p`,{className:`text-xs text-slate-500`,children:`DfI Roads Northern Ireland live tactical road status`})]})]}),(0,$.jsx)(`button`,{onClick:()=>P(!1),className:`p-1 rounded-xl hover:bg-slate-100 text-slate-400 hover:text-slate-700 transition-colors cursor-pointer`,children:(0,$.jsx)(kL,{className:`w-5 h-5`})})]}),(0,$.jsxs)(`div`,{className:`bg-rose-50 border border-rose-200 rounded-2xl p-3.5 flex items-start gap-3 text-xs text-rose-900`,children:[(0,$.jsx)(hL,{className:`w-5 h-5 text-rose-600 shrink-0 mt-0.5`}),(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`span`,{className:`font-bold`,children:`DfI Roads Incident Advisory: `}),`Clicking any closure will fly the 3D map camera to the incident and project the`,(0,$.jsx)(`span`,{className:`font-bold text-rose-600`,children:` closed stretch in glowing RED`}),` and the`,(0,$.jsx)(`span`,{className:`font-bold text-sky-600`,children:` suggested diversion route in glowing dashed BLUE`}),`.`]})]}),(0,$.jsx)(`div`,{className:`divide-y divide-slate-100 max-h-[55vh] overflow-y-auto space-y-3 pr-1`,children:te.map(e=>(0,$.jsxs)(`div`,{className:`pt-3 first:pt-0 space-y-2 text-xs`,children:[(0,$.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(`span`,{className:`text-sm font-black text-slate-900`,children:e.route}),(0,$.jsx)(`span`,{className:`px-2 py-0.5 rounded-full text-[10px] font-bold ${e.severity===`STANDSTILL`?`bg-rose-100 text-rose-700 border border-rose-300`:e.severity===`MODERATE_DELAY`?`bg-amber-100 text-amber-700 border border-amber-300`:`bg-slate-100 text-slate-700`}`,children:e.severity===`STANDSTILL`?`⛔ CLOSED`:e.severity})]}),(0,$.jsxs)(`div`,{className:`text-[11px] text-slate-500 mt-0.5`,children:[e.location,` • `,e.county]})]}),(0,$.jsx)(`span`,{className:`text-[10px] text-slate-400 font-mono shrink-0`,children:e.dates})]}),(0,$.jsx)(`p`,{className:`text-[11px] text-slate-700 leading-relaxed bg-slate-50 p-2.5 rounded-xl border border-slate-100`,children:e.description}),(0,$.jsxs)(`div`,{className:`bg-sky-50 border border-sky-200/90 rounded-xl p-2.5 text-xs text-sky-950 space-y-1`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between text-[10px] font-bold text-sky-700 uppercase tracking-wider`,children:[(0,$.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,$.jsx)(FI,{className:`w-3.5 h-3.5`}),`Official Diversion Route`]}),(0,$.jsxs)(`span`,{className:`text-amber-700 font-mono`,children:[`+`,e.delayMins,` MINS DELAY`]})]}),(0,$.jsx)(`p`,{className:`text-[11px] text-sky-900 font-medium`,children:e.diversionAdvice})]}),(0,$.jsx)(`button`,{onClick:()=>{Q.playTargetLock(),P(!1),a?a(e):t(e.lat,e.lng,e.route)},className:`w-full py-2.5 bg-rose-600 hover:bg-rose-500 text-white font-mono font-bold text-xs rounded-xl flex items-center justify-center gap-2 shadow-md transition-all cursor-pointer active:scale-98`,children:(0,$.jsx)(`span`,{children:`🗺️ FLY TO EXACT ROAD ON 3D MAP (RED CLOSURE + BLUE DIVERSION)`})})]},e.id))}),(0,$.jsx)(`button`,{onClick:()=>P(!1),className:`w-full py-2.5 bg-slate-900 hover:bg-slate-800 text-white font-bold text-xs rounded-xl cursor-pointer`,children:`Done`})]})}),F&&(0,$.jsx)(`div`,{className:`fixed inset-0 z-50 bg-slate-950/70 backdrop-blur-md flex items-center justify-center p-4 overflow-y-auto`,children:(0,$.jsxs)(`div`,{className:`bg-white rounded-3xl max-w-2xl w-full p-6 shadow-2xl border border-slate-200 space-y-4 my-8`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between pb-3 border-b border-slate-100`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2.5`,children:[(0,$.jsx)(`div`,{className:`w-10 h-10 rounded-2xl bg-amber-100 text-amber-700 flex items-center justify-center`,children:(0,$.jsx)(jL,{className:`w-5 h-5`})}),(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`h3`,{className:`text-base font-black text-slate-900 tracking-tight`,children:`NORTHERN IRELAND ELECTRICITY (NIE NETWORKS)`}),(0,$.jsx)(`p`,{className:`text-xs text-slate-500`,children:`Live grid incidents, fault references & repair crews`})]})]}),(0,$.jsx)(`button`,{onClick:()=>_e(!1),className:`p-1 rounded-xl hover:bg-slate-100 text-slate-400 hover:text-slate-700 transition-colors cursor-pointer`,children:(0,$.jsx)(kL,{className:`w-5 h-5`})})]}),(0,$.jsxs)(`div`,{className:`grid grid-cols-3 gap-3 text-center`,children:[(0,$.jsxs)(`div`,{className:`bg-amber-50 border border-amber-200 p-3 rounded-2xl`,children:[(0,$.jsx)(`span`,{className:`text-[10px] font-bold text-amber-700 uppercase block`,children:`PROPERTIES OUT`}),(0,$.jsx)(`span`,{className:`text-xl font-black text-amber-950 font-mono`,children:E.propertiesAffected.toLocaleString()})]}),(0,$.jsxs)(`div`,{className:`bg-slate-50 border border-slate-200 p-3 rounded-2xl`,children:[(0,$.jsx)(`span`,{className:`text-[10px] font-bold text-slate-500 uppercase block`,children:`ACTIVE FAULTS`}),(0,$.jsx)(`span`,{className:`text-xl font-black text-slate-900 font-mono`,children:E.currentOutages})]}),(0,$.jsxs)(`div`,{className:`bg-emerald-50 border border-emerald-200 p-3 rounded-2xl`,children:[(0,$.jsx)(`span`,{className:`text-[10px] font-bold text-emerald-700 uppercase block`,children:`RESTORED TODAY`}),(0,$.jsx)(`span`,{className:`text-xl font-black text-emerald-950 font-mono`,children:`3,840`})]})]}),(0,$.jsx)(`div`,{className:`divide-y divide-slate-100 max-h-[50vh] overflow-y-auto space-y-3 pr-1`,children:E.breakdown.map(e=>(0,$.jsxs)(`div`,{className:`pt-3 first:pt-0 space-y-2 text-xs`,children:[(0,$.jsxs)(`div`,{className:`flex items-start justify-between`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(`span`,{className:`text-sm font-black text-slate-900`,children:e.region}),(0,$.jsxs)(`span`,{className:`px-2 py-0.5 rounded bg-amber-100 text-amber-800 font-mono font-bold text-[10px]`,children:[`⚡ `,e.postcodePrefix]})]}),(0,$.jsxs)(`div`,{className:`text-[11px] text-slate-500 mt-0.5 font-mono`,children:[`Fault Ref: `,e.faultRef,` • Logged: `,e.loggedTime||`09:15`]})]}),(0,$.jsxs)(`span`,{className:`px-2 py-1 rounded-lg bg-emerald-50 text-emerald-700 border border-emerald-200 text-[10px] font-bold`,children:[`● `,e.status]})]}),(0,$.jsxs)(`div`,{className:`grid grid-cols-2 gap-2 text-[11px]`,children:[(0,$.jsxs)(`div`,{className:`bg-slate-50 p-2 rounded-xl border border-slate-100`,children:[(0,$.jsx)(`span`,{className:`text-slate-400 block text-[9px] uppercase font-bold`,children:`CUSTOMERS AFFECTED`}),(0,$.jsx)(`span`,{className:`font-bold text-slate-900 text-sm font-mono`,children:e.affected.toLocaleString()})]}),(0,$.jsxs)(`div`,{className:`bg-slate-50 p-2 rounded-xl border border-slate-100`,children:[(0,$.jsx)(`span`,{className:`text-slate-400 block text-[9px] uppercase font-bold`,children:`ESTIMATED RESTORATION`}),(0,$.jsx)(`span`,{className:`font-bold text-slate-900 text-sm font-mono`,children:e.estRestoration})]})]}),(0,$.jsxs)(`p`,{className:`text-[11px] text-slate-600 bg-slate-50 p-2 rounded-xl border border-slate-100`,children:[(0,$.jsx)(`span`,{className:`font-bold text-slate-700`,children:`Cause: `}),e.cause]}),(0,$.jsxs)(`button`,{onClick:()=>{Q.playTargetLock(),_e(!1);let n=BL.breakdown.find(t=>t.id===e.id)||e;o?o(n):t(e.lat,e.lng,e.region)},className:`w-full py-2 bg-amber-500 hover:bg-amber-400 text-slate-950 font-bold text-xs rounded-xl flex items-center justify-center gap-1.5 shadow-sm transition-all cursor-pointer`,children:[(0,$.jsx)(jL,{className:`w-3.5 h-3.5`}),(0,$.jsx)(`span`,{children:`View Outage Location & Pulsing Ring on 3D Map`})]})]},e.id))}),(0,$.jsx)(`button`,{onClick:()=>_e(!1),className:`w-full py-2.5 bg-slate-900 hover:bg-slate-800 text-white font-bold text-xs rounded-xl cursor-pointer`,children:`Done`})]})}),ve&&(0,$.jsx)(`div`,{className:`fixed inset-0 z-50 bg-slate-950/70 backdrop-blur-md flex items-center justify-center p-4 overflow-y-auto`,children:(0,$.jsxs)(`div`,{className:`bg-white rounded-3xl max-w-2xl w-full p-6 shadow-2xl border border-slate-200 space-y-4 my-8`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between pb-3 border-b border-slate-100`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2.5`,children:[(0,$.jsx)(`div`,{className:`w-10 h-10 rounded-2xl bg-cyan-100 text-cyan-700 flex items-center justify-center`,children:(0,$.jsx)(aI,{className:`w-5 h-5`})}),(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`h3`,{className:`text-base font-black text-slate-900 tracking-tight`,children:`DfI RIVERS AGENCY // FLOOD TELEMETRY`}),(0,$.jsx)(`p`,{className:`text-xs text-slate-500`,children:`Real-time watercourse level sensors across Northern Ireland`})]})]}),(0,$.jsx)(`button`,{onClick:()=>ye(!1),className:`p-1 rounded-xl hover:bg-slate-100 text-slate-400 hover:text-slate-700 transition-colors cursor-pointer`,children:(0,$.jsx)(kL,{className:`w-5 h-5`})})]}),(0,$.jsx)(`div`,{className:`divide-y divide-slate-100 max-h-[55vh] overflow-y-auto space-y-2 pr-1`,children:FL.map(e=>(0,$.jsxs)(`div`,{className:`pt-2.5 first:pt-0 space-y-1.5 text-xs`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`span`,{className:`font-bold text-slate-900 text-sm`,children:e.riverName}),(0,$.jsxs)(`span`,{className:`text-slate-500 text-[11px] block`,children:[e.name,` • `,e.county]})]}),(0,$.jsx)(`span`,{className:`px-2 py-0.5 rounded-full text-[10px] font-bold ${e.status===`FLOOD_WARNING`?`bg-rose-100 text-rose-700 border border-rose-300`:e.status===`ELEVATED`?`bg-amber-100 text-amber-700 border border-amber-300`:`bg-emerald-100 text-emerald-700`}`,children:e.status===`NORMAL`?`Normal Level`:e.status===`ELEVATED`?`Elevated / Rising`:`Flood Warning`})]}),(0,$.jsxs)(`div`,{className:`grid grid-cols-3 gap-2 bg-slate-50 p-2.5 rounded-xl border border-slate-100 font-mono text-center`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`span`,{className:`text-[9px] text-slate-400 uppercase block`,children:`CURRENT LEVEL`}),(0,$.jsxs)(`span`,{className:`font-bold text-slate-900 text-sm`,children:[e.currentLevelM,` m`]})]}),(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`span`,{className:`text-[9px] text-slate-400 uppercase block`,children:`NORMAL LEVEL`}),(0,$.jsxs)(`span`,{className:`font-medium text-slate-600 text-xs`,children:[e.normalLevelM,` m (`,e.trend,`)`]})]}),(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`span`,{className:`text-[9px] text-slate-400 uppercase block`,children:`FLOOD THRESHOLD`}),(0,$.jsxs)(`span`,{className:`font-bold text-rose-600 text-sm`,children:[e.floodThresholdM,` m`]})]})]}),(0,$.jsxs)(`button`,{onClick:()=>{Q.playTargetLock(),ye(!1),t(e.lat,e.lng,e.name)},className:`w-full py-1.5 bg-cyan-50 hover:bg-cyan-100 text-cyan-800 font-bold text-xs rounded-xl flex items-center justify-center gap-1.5 transition-colors cursor-pointer`,children:[(0,$.jsx)($F,{className:`w-3.5 h-3.5`}),(0,$.jsxs)(`span`,{children:[`Fly to `,e.riverName,` Telemetry Station on 3D Map`]})]})]},e.id))}),(0,$.jsx)(`button`,{onClick:()=>ye(!1),className:`w-full py-2.5 bg-slate-900 hover:bg-slate-800 text-white font-bold text-xs rounded-xl cursor-pointer`,children:`Done`})]})}),be&&(0,$.jsx)(`div`,{className:`fixed inset-0 z-50 bg-slate-950/70 backdrop-blur-md flex items-center justify-center p-4 overflow-y-auto`,children:(0,$.jsxs)(`div`,{className:`bg-white rounded-3xl max-w-2xl w-full p-6 shadow-2xl border border-slate-200 space-y-4 my-8`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between pb-3 border-b border-slate-100`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2.5`,children:[(0,$.jsx)(`div`,{className:`w-10 h-10 rounded-2xl bg-blue-100 text-blue-700 flex items-center justify-center`,children:(0,$.jsx)(TL,{className:`w-5 h-5`})}),(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`h3`,{className:`text-base font-black text-slate-900 tracking-tight`,children:`UKHO HARMONIC TIDE TABLES`}),(0,$.jsx)(`p`,{className:`text-xs text-slate-500`,children:`Admiralty 7-day tidal heights, tidal curves & nautical milestones`})]})]}),(0,$.jsx)(`button`,{onClick:()=>xe(!1),className:`p-1 rounded-xl hover:bg-slate-100 text-slate-400 hover:text-slate-700 transition-colors cursor-pointer`,children:(0,$.jsx)(kL,{className:`w-5 h-5`})})]}),(0,$.jsx)(`div`,{className:`flex items-center gap-1.5 overflow-x-auto pb-1 scrollbar-none text-xs font-bold`,children:oe.map(e=>(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),p(e.id)},className:`px-3 py-1.5 rounded-xl whitespace-nowrap transition-all cursor-pointer ${f===e.id?`bg-sky-600 text-white shadow-sm`:`bg-slate-100 text-slate-600 hover:bg-slate-200`}`,children:e.name},e.id))}),(0,$.jsxs)(`div`,{className:`bg-gradient-to-r from-sky-900 to-indigo-950 rounded-2xl p-4 text-white space-y-2`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`h4`,{className:`text-lg font-black`,children:Ue.name}),(0,$.jsxs)(`p`,{className:`text-xs text-sky-200`,children:[Ue.waterway,` • `,Ue.county]})]}),(0,$.jsxs)(`div`,{className:`text-right`,children:[(0,$.jsx)(`span`,{className:`text-[10px] text-sky-300 uppercase block font-mono`,children:`CURRENT TIDE LEVEL`}),(0,$.jsxs)(`span`,{className:`text-2xl font-black font-mono`,children:[Ue.currentHeightM,`m`]}),(0,$.jsx)(`span`,{className:`text-[10px] text-emerald-300 font-bold block`,children:Ue.currentPhase})]})]}),(0,$.jsx)(`div`,{className:`pt-2`,children:(0,$.jsx)(`svg`,{viewBox:`0 0 100 20`,className:`w-full h-8 text-sky-400 stroke-current fill-none stroke-[2]`,children:(0,$.jsx)(`path`,{d:`M 0 10 Q 25 0, 50 10 T 100 10`})})})]}),(0,$.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,$.jsx)(`span`,{className:`text-[10px] font-bold text-slate-500 uppercase tracking-wider block`,children:`NEXT 4 TIDAL MILESTONES`}),(0,$.jsx)(`div`,{className:`grid grid-cols-4 gap-2 text-center text-xs font-mono`,children:Ue.tides.map((e,t)=>(0,$.jsxs)(`div`,{className:`bg-slate-50 p-2.5 rounded-xl border border-slate-100`,children:[(0,$.jsxs)(`span`,{className:`text-[10px] text-slate-400 font-bold block`,children:[e.type.toUpperCase(),` TIDE`]}),(0,$.jsx)(`span`,{className:`text-sm font-black text-slate-900 block my-0.5`,children:e.time}),(0,$.jsxs)(`span`,{className:`text-sky-600 font-bold`,children:[e.heightM,` m`]})]},t))})]}),(0,$.jsx)(`button`,{onClick:()=>xe(!1),className:`w-full py-2.5 bg-slate-900 hover:bg-slate-800 text-white font-bold text-xs rounded-xl cursor-pointer`,children:`Done`})]})}),Se&&(0,$.jsx)(`div`,{className:`fixed inset-0 z-50 bg-slate-950/70 backdrop-blur-md flex items-center justify-center p-4 overflow-y-auto`,children:(0,$.jsxs)(`div`,{className:`bg-white rounded-3xl max-w-2xl w-full p-6 shadow-2xl border border-slate-200 space-y-4 my-8`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between pb-3 border-b border-slate-100`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2.5`,children:[(0,$.jsx)(`div`,{className:`w-10 h-10 rounded-2xl bg-emerald-100 text-emerald-700 flex items-center justify-center`,children:(0,$.jsx)(dL,{className:`w-5 h-5`})}),(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`h3`,{className:`text-base font-black text-slate-900 tracking-tight`,children:`TRANSLINK NORTHERN IRELAND`}),(0,$.jsx)(`p`,{className:`text-xs text-slate-500`,children:`NIR Trains, Metro Belfast, Glider Rapid Transit & Ulsterbus`})]})]}),(0,$.jsx)(`button`,{onClick:()=>Ce(!1),className:`p-1 rounded-xl hover:bg-slate-100 text-slate-400 hover:text-slate-700 transition-colors cursor-pointer`,children:(0,$.jsx)(kL,{className:`w-5 h-5`})})]}),(0,$.jsx)(`div`,{className:`flex items-center gap-1.5 text-xs font-bold`,children:[`all`,`Rail`,`Buses`,`Glider`,`Ulsterbus`].map(e=>(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),Ne(e)},className:`px-3 py-1.5 rounded-xl cursor-pointer transition-all ${Me===e?`bg-slate-900 text-white`:`bg-slate-100 text-slate-600 hover:bg-slate-200`}`,children:e===`all`?`All Modes`:e},e))}),(0,$.jsx)(`div`,{className:`divide-y divide-slate-100 max-h-[55vh] overflow-y-auto space-y-3 pr-1`,children:O.filter(e=>Me===`all`||e.mode===Me).map((e,t)=>(0,$.jsxs)(`div`,{className:`pt-3 first:pt-0 space-y-2 text-xs`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[e.mode===`Rail`&&(0,$.jsx)(dL,{className:`w-4 h-4 text-emerald-600`}),e.mode===`Buses`&&(0,$.jsx)(NF,{className:`w-4 h-4 text-amber-600`}),e.mode===`Glider`&&(0,$.jsx)(NF,{className:`w-4 h-4 text-purple-600`}),e.mode===`Ulsterbus`&&(0,$.jsx)(NF,{className:`w-4 h-4 text-blue-600`}),(0,$.jsx)(`span`,{className:`font-black text-slate-900 text-sm`,children:e.mode})]}),(0,$.jsx)(`span`,{className:`px-2 py-0.5 rounded-full text-[10px] font-bold ${e.badgeColor===`emerald`?`bg-emerald-100 text-emerald-700`:e.badgeColor===`amber`?`bg-amber-100 text-amber-700`:`bg-rose-100 text-rose-700`}`,children:e.status})]}),(0,$.jsx)(`p`,{className:`text-[11px] text-slate-600 bg-slate-50 p-2.5 rounded-xl border border-slate-100`,children:e.details}),e.lineBreakdown&&(0,$.jsx)(`div`,{className:`space-y-1 pl-2 border-l-2 border-slate-200`,children:e.lineBreakdown.map((e,t)=>(0,$.jsxs)(`div`,{className:`flex items-center justify-between text-[11px] py-0.5`,children:[(0,$.jsx)(`span`,{className:`font-medium text-slate-800`,children:e.route}),(0,$.jsx)(`span`,{className:`font-mono text-[10px] font-bold ${e.status.includes(`On Time`)||e.status.includes(`Frequency`)?`text-emerald-600`:`text-amber-600`}`,children:e.status})]},t))})]},t))}),(0,$.jsx)(`button`,{onClick:()=>Ce(!1),className:`w-full py-2.5 bg-slate-900 hover:bg-slate-800 text-white font-bold text-xs rounded-xl cursor-pointer`,children:`Done`})]})}),we&&(0,$.jsx)(`div`,{className:`fixed inset-0 z-50 bg-slate-950/70 backdrop-blur-md flex items-center justify-center p-4 overflow-y-auto`,children:(0,$.jsxs)(`div`,{className:`bg-white rounded-3xl max-w-2xl w-full p-6 shadow-2xl border border-slate-200 space-y-4 my-8`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between pb-3 border-b border-slate-100`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2.5`,children:[(0,$.jsx)(`div`,{className:`w-10 h-10 rounded-2xl bg-orange-100 text-orange-700 flex items-center justify-center`,children:(0,$.jsx)(_L,{className:`w-5 h-5`})}),(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`h3`,{className:`text-base font-black text-slate-900 tracking-tight`,children:`DAERA BLUE FLAG WATER QUALITY & SURF`}),(0,$.jsx)(`p`,{className:`text-xs text-slate-500`,children:`Coastal bathing water reports, surf swells & RNLI lifeguard patrols`})]})]}),(0,$.jsx)(`button`,{onClick:()=>Te(!1),className:`p-1 rounded-xl hover:bg-slate-100 text-slate-400 hover:text-slate-700 transition-colors cursor-pointer`,children:(0,$.jsx)(kL,{className:`w-5 h-5`})})]}),(0,$.jsx)(`div`,{className:`divide-y divide-slate-100 max-h-[55vh] overflow-y-auto space-y-3 pr-1`,children:HL.map(e=>(0,$.jsxs)(`div`,{className:`pt-3 first:pt-0 space-y-2 text-xs`,children:[(0,$.jsxs)(`div`,{className:`flex items-start justify-between`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(`span`,{className:`font-black text-slate-900 text-sm`,children:e.name}),e.daeraAward&&(0,$.jsxs)(`span`,{className:`px-2 py-0.5 rounded bg-sky-100 text-sky-800 font-bold text-[9px]`,children:[`🏆 `,e.daeraAward]})]}),(0,$.jsxs)(`div`,{className:`text-[11px] text-slate-500 mt-0.5`,children:[e.county,` Coast`]})]}),(0,$.jsxs)(`span`,{className:`px-2 py-0.5 rounded-full text-[10px] font-bold ${e.status===`Good`?`bg-emerald-100 text-emerald-700`:`bg-amber-100 text-amber-700`}`,children:[`Water Quality: `,e.status]})]}),(0,$.jsxs)(`div`,{className:`grid grid-cols-3 gap-2 bg-slate-50 p-2.5 rounded-xl border border-slate-100 font-mono text-center`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`span`,{className:`text-[9px] text-slate-400 uppercase block`,children:`WATER TEMP`}),(0,$.jsxs)(`span`,{className:`font-bold text-slate-900 text-sm`,children:[e.waterTempC,`°C`]})]}),(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`span`,{className:`text-[9px] text-slate-400 uppercase block`,children:`SURF SWELL`}),(0,$.jsxs)(`span`,{className:`font-bold text-sky-600 text-xs truncate block`,children:[e.surfCondition.split(` `)[0],` `,e.surfCondition.split(` `)[1]]})]}),(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`span`,{className:`text-[9px] text-slate-400 uppercase block`,children:`LIFEGUARDS`}),(0,$.jsx)(`span`,{className:`font-bold text-xs ${e.lifeguardStatus===`Active`?`text-emerald-600`:`text-slate-500`}`,children:e.lifeguardStatus})]})]}),(0,$.jsxs)(`p`,{className:`text-[11px] text-slate-600`,children:[`💡 `,(0,$.jsx)(`span`,{className:`font-medium text-slate-700`,children:`Tidal Advisory: `}),e.tideAdvice]}),(0,$.jsxs)(`button`,{onClick:()=>{Q.playTargetLock(),Te(!1),t(e.lat,e.lng,e.name)},className:`w-full py-1.5 bg-orange-50 hover:bg-orange-100 text-orange-800 font-bold text-xs rounded-xl flex items-center justify-center gap-1.5 transition-colors cursor-pointer`,children:[(0,$.jsx)($F,{className:`w-3.5 h-3.5`}),(0,$.jsxs)(`span`,{children:[`Fly to `,e.name.split(` (`)[0],` on 3D Map`]})]})]},e.id))}),(0,$.jsx)(`button`,{onClick:()=>Te(!1),className:`w-full py-2.5 bg-slate-900 hover:bg-slate-800 text-white font-bold text-xs rounded-xl cursor-pointer`,children:`Done`})]})}),Ee&&(0,$.jsx)(`div`,{className:`fixed inset-0 z-50 bg-slate-950/70 backdrop-blur-md flex items-center justify-center p-4 overflow-y-auto`,children:(0,$.jsxs)(`div`,{className:`bg-white rounded-3xl max-w-xl w-full p-6 shadow-2xl border border-slate-200 space-y-4 my-8`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between pb-3 border-b border-slate-100`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2.5`,children:[(0,$.jsx)(`div`,{className:`w-10 h-10 rounded-2xl bg-green-100 text-green-700 flex items-center justify-center`,children:(0,$.jsx)(xI,{className:`w-5 h-5`})}),(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`h3`,{className:`text-base font-black text-slate-900 tracking-tight`,children:`DEFRA UK-AIR & MET OFFICE POLLEN`}),(0,$.jsx)(`p`,{className:`text-xs text-slate-500`,children:`Atmospheric particulates, ozone, and seasonal allergen forecast`})]})]}),(0,$.jsx)(`button`,{onClick:()=>De(!1),className:`p-1 rounded-xl hover:bg-slate-100 text-slate-400 hover:text-slate-700 transition-colors cursor-pointer`,children:(0,$.jsx)(kL,{className:`w-5 h-5`})})]}),(0,$.jsxs)(`div`,{className:`grid grid-cols-2 gap-3 text-center`,children:[(0,$.jsxs)(`div`,{className:`bg-emerald-50 border border-emerald-200 p-3.5 rounded-2xl`,children:[(0,$.jsx)(`span`,{className:`text-[10px] font-bold text-emerald-800 uppercase block`,children:`DAQI AIR QUALITY INDEX`}),(0,$.jsxs)(`div`,{className:`text-2xl font-black text-emerald-950 font-mono my-0.5`,children:[M.daqiIndex,` / 10`]}),(0,$.jsxs)(`span`,{className:`text-xs font-bold text-emerald-700`,children:[M.airQualityRating,` – Low Pollution`]})]}),(0,$.jsxs)(`div`,{className:`bg-green-50 border border-green-200 p-3.5 rounded-2xl`,children:[(0,$.jsx)(`span`,{className:`text-[10px] font-bold text-green-800 uppercase block`,children:`MET OFFICE POLLEN COUNT`}),(0,$.jsx)(`div`,{className:`text-2xl font-black text-green-950 font-mono my-0.5`,children:`LOW`}),(0,$.jsx)(`span`,{className:`text-xs font-bold text-green-700`,children:`Allergen Risk: Minimal`})]})]}),(0,$.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,$.jsx)(`span`,{className:`text-[10px] font-bold text-slate-500 uppercase tracking-wider block`,children:`POLLUTANT TELEMETRY (µg/m³)`}),(0,$.jsxs)(`div`,{className:`grid grid-cols-3 gap-2 text-center text-xs font-mono`,children:[(0,$.jsxs)(`div`,{className:`bg-slate-50 p-2.5 rounded-xl border border-slate-100`,children:[(0,$.jsx)(`span`,{className:`text-[9px] text-slate-400 uppercase block`,children:`PM2.5 FINE PARTICLES`}),(0,$.jsx)(`span`,{className:`text-base font-bold text-slate-900`,children:M.pm25})]}),(0,$.jsxs)(`div`,{className:`bg-slate-50 p-2.5 rounded-xl border border-slate-100`,children:[(0,$.jsx)(`span`,{className:`text-[9px] text-slate-400 uppercase block`,children:`NO2 NITROGEN DIOXIDE`}),(0,$.jsx)(`span`,{className:`text-base font-bold text-slate-900`,children:M.no2})]}),(0,$.jsxs)(`div`,{className:`bg-slate-50 p-2.5 rounded-xl border border-slate-100`,children:[(0,$.jsx)(`span`,{className:`text-[9px] text-slate-400 uppercase block`,children:`O3 GROUND OZONE`}),(0,$.jsx)(`span`,{className:`text-base font-bold text-slate-900`,children:M.o3})]})]})]}),M.stations&&(0,$.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,$.jsx)(`span`,{className:`text-[10px] font-bold text-slate-500 uppercase tracking-wider block`,children:`OFFICIAL MONITORING STATIONS`}),(0,$.jsx)(`div`,{className:`divide-y divide-slate-100 bg-slate-50 p-3 rounded-2xl border border-slate-100 text-xs`,children:M.stations.map((e,t)=>(0,$.jsxs)(`div`,{className:`py-1.5 first:pt-0 last:pb-0 flex items-center justify-between`,children:[(0,$.jsx)(`span`,{className:`font-semibold text-slate-800`,children:e.name}),(0,$.jsxs)(`span`,{className:`font-mono text-emerald-700 font-bold`,children:[`DAQI `,e.daqi,` • `,e.rating]})]},t))})]}),(0,$.jsx)(`button`,{onClick:()=>De(!1),className:`w-full py-2.5 bg-slate-900 hover:bg-slate-800 text-white font-bold text-xs rounded-xl cursor-pointer`,children:`Done`})]})}),Oe&&(0,$.jsx)(`div`,{className:`fixed inset-0 z-50 bg-slate-950/70 backdrop-blur-md flex items-center justify-center p-4 overflow-y-auto`,children:(0,$.jsxs)(`div`,{className:`bg-white rounded-3xl max-w-2xl w-full p-6 shadow-2xl border border-slate-200 space-y-4 my-8`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between pb-3 border-b border-slate-100`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2.5`,children:[(0,$.jsx)(`div`,{className:`w-10 h-10 rounded-2xl bg-sky-100 text-sky-700 flex items-center justify-center`,children:(0,$.jsx)(LI,{className:`w-5 h-5`})}),(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`h3`,{className:`text-base font-black text-slate-900 tracking-tight`,children:`ULSTER AIRSPACE & AIRPORT FLIGHT BOARDS`}),(0,$.jsx)(`p`,{className:`text-xs text-slate-500`,children:`Live arrivals, gates, callsigns & 3D radar tracking`})]})]}),(0,$.jsx)(`button`,{onClick:()=>ke(!1),className:`p-1 rounded-xl hover:bg-slate-100 text-slate-400 hover:text-slate-700 transition-colors cursor-pointer`,children:(0,$.jsx)(kL,{className:`w-5 h-5`})})]}),(0,$.jsxs)(`div`,{className:`flex items-center gap-2 text-xs font-bold`,children:[(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),je(`BFS`)},className:`px-3.5 py-1.5 rounded-xl cursor-pointer transition-all ${Ae===`BFS`?`bg-sky-600 text-white shadow-sm`:`bg-slate-100 text-slate-600 hover:bg-slate-200`}`,children:`Belfast International (BFS / EGAA)`}),(0,$.jsx)(`button`,{onClick:()=>{Q.playClick(),je(`BHD`)},className:`px-3.5 py-1.5 rounded-xl cursor-pointer transition-all ${Ae===`BHD`?`bg-sky-600 text-white shadow-sm`:`bg-slate-100 text-slate-600 hover:bg-slate-200`}`,children:`George Best Belfast City (BHD / EGAC)`})]}),(0,$.jsxs)(`div`,{className:`text-[11px] text-slate-600 flex items-center justify-between bg-slate-50 p-2.5 rounded-xl border border-slate-100`,children:[(0,$.jsx)(`span`,{className:`font-medium`,children:Ae===`BFS`?`Aldergrove Operations • Runway 25/07 • 24/7 ILS Cat IIIb`:`Sydenham Terminal • Runway 22/04 • City Approach`}),(0,$.jsxs)(`span`,{className:`text-emerald-600 font-bold font-mono text-[10px] flex items-center gap-1`,children:[(0,$.jsx)(`span`,{className:`w-2 h-2 rounded-full bg-emerald-500 animate-pulse`}),`LIVE RADAR ACTIVE`]})]}),(0,$.jsx)(`div`,{className:`divide-y divide-slate-100 max-h-[50vh] overflow-y-auto space-y-2 pr-1`,children:Ge.map((t,n)=>(0,$.jsxs)(`div`,{onClick:()=>{Q.playTargetLock(),ke(!1),s?s(t.flightCallsign||t.flightNumber):e()},className:`pt-2.5 first:pt-0 flex items-center justify-between text-xs hover:bg-sky-50/80 p-1.5 rounded-lg cursor-pointer transition-colors group`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2.5`,children:[(0,$.jsx)(`span`,{className:`px-2 py-0.5 rounded text-[10px] font-black ${t.badgeClass}`,children:t.airline}),(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`div`,{className:`font-mono font-black text-slate-900 text-sm group-hover:text-sky-600 transition-colors`,children:t.flightNumber}),(0,$.jsxs)(`div`,{className:`text-[11px] text-slate-500`,children:[t.origin,` ➔ `,t.destinationAirportCode===`BFS`?`Belfast Intl (BFS)`:`Belfast City (BHD)`,` • `,t.gate?`${t.gate} • `:``,t.aircraft||`Commercial Jet`]})]})]}),(0,$.jsxs)(`div`,{className:`text-right flex items-center gap-2.5`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`div`,{className:`font-mono font-bold text-slate-900 text-xs`,children:t.scheduledTime}),(0,$.jsxs)(`div`,{className:`text-[10px] font-bold ${t.status===`On Time`||t.status===`Approaching`?`text-emerald-600`:t.status===`Delayed`?`text-rose-600`:`text-slate-500`}`,children:[`● `,t.status]})]}),(0,$.jsxs)(`button`,{onClick:n=>{n.stopPropagation(),Q.playTargetLock(),ke(!1),s?s(t.flightCallsign||t.flightNumber):e()},className:`px-2.5 py-1 bg-sky-600 hover:bg-sky-500 text-white font-bold text-[10px] rounded-lg shadow-xs transition-colors flex items-center gap-1 cursor-pointer`,children:[(0,$.jsx)(LI,{className:`w-3 h-3`}),(0,$.jsx)(`span`,{children:`PILOT'S EYE`})]})]})]},n))}),(0,$.jsxs)(`button`,{onClick:()=>{Q.playTargetLock(),ke(!1),e()},className:`w-full py-2.5 bg-gradient-to-r from-sky-600 to-blue-600 hover:from-sky-500 hover:to-blue-500 text-white font-bold text-xs rounded-xl flex items-center justify-center gap-1.5 shadow-sm transition-all cursor-pointer`,children:[(0,$.jsx)(LI,{className:`w-3.5 h-3.5`}),(0,$.jsx)(`span`,{children:`Track All Airspace Contacts on 3D Map Radar`})]})]})}),Pe&&(0,$.jsx)(gR,{isOpen:Pe,onClose:()=>Fe(!1)})]})},CR=({article:e,onBackToIntel:t,onNavigateToCoords:n,onSelectCamera:r,onSelectArticle:i,onSelectClosure:a})=>{let[o,s]=(0,_.useState)(!1),c=e.nearestCameraId?ML.find(t=>t.cctvId===e.nearestCameraId):null,l=_R.filter(t=>t.id!==e.id).slice(0,3),u=QL.getRoadworks().find(t=>e.title.toLowerCase().includes(t.route.toLowerCase())||e.impactMetrics?.affectedRoutes&&e.impactMetrics.affectedRoutes.some(e=>t.route.toLowerCase().includes(e.toLowerCase())||e.toLowerCase().includes(t.route.toLowerCase()))||e.category===`ROAD_INCIDENT`&&Math.hypot(e.coordinates.lat-t.lat,e.coordinates.lng-t.lng)<.05);return(0,$.jsxs)(`article`,{"aria-labelledby":`article-title`,className:`min-h-screen bg-slate-950 text-slate-100 font-sans selection:bg-cyan-500/30 antialiased pb-24`,children:[(0,$.jsx)(`nav`,{"aria-label":`Breadcrumbs`,className:`sticky top-0 z-30 bg-slate-950/95 backdrop-blur-md border-b border-slate-800 py-2.5 px-4 sm:px-6`,children:(0,$.jsxs)(`div`,{className:`max-w-5xl mx-auto flex items-center justify-between gap-3`,children:[(0,$.jsxs)(`button`,{onClick:()=>{Q.playClick(),t()},className:`flex items-center gap-1.5 text-xs font-mono font-bold text-slate-300 hover:text-cyan-400 transition-colors cursor-pointer`,children:[(0,$.jsx)(jF,{className:`w-4 h-4`}),(0,$.jsx)(`span`,{children:`BACK TO INTEL WIRE`})]}),(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsxs)(`button`,{onClick:async()=>{Q.playClick(),await oR.shareContent({articleId:e.id,title:e.title,detail:e.summary,county:e.county})===`copied`&&(s(!0),setTimeout(()=>s(!1),2e3))},className:`px-3 py-1.5 rounded-xl bg-slate-900 border border-slate-700 hover:border-cyan-400 text-xs font-mono font-bold text-slate-200 flex items-center gap-1.5 transition-all cursor-pointer`,children:[o?(0,$.jsx)(VF,{className:`w-3.5 h-3.5 text-emerald-400`}):(0,$.jsx)(YI,{className:`w-3.5 h-3.5`}),(0,$.jsx)(`span`,{children:o?`LINK COPIED`:`SHARE DOSSIER`})]}),(0,$.jsxs)(`button`,{onClick:()=>{Q.playTargetLock(),u&&a?a(u):n(e.coordinates.lat,e.coordinates.lng,e.locationName)},className:`px-3 py-1.5 rounded-xl bg-cyan-500 hover:bg-cyan-400 text-slate-950 text-xs font-mono font-bold flex items-center gap-1.5 transition-all cursor-pointer shadow-md`,children:[(0,$.jsx)($F,{className:`w-3.5 h-3.5`}),(0,$.jsx)(`span`,{className:`hidden sm:inline`,children:`VIEW IN 3D MAP`})]})]})]})}),(0,$.jsxs)(`div`,{className:`max-w-5xl mx-auto px-4 sm:px-6 pt-6 sm:pt-8 space-y-6`,children:[(0,$.jsxs)(`div`,{className:`space-y-3 border-b border-slate-800 pb-5`,children:[(0,$.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 text-xs font-mono`,children:[(0,$.jsxs)(`span`,{className:`bg-cyan-950 text-cyan-300 border border-cyan-500/40 px-2 py-0.5 rounded font-bold uppercase`,children:[`CO. `,e.county]}),(0,$.jsx)(`span`,{className:`text-slate-500`,children:`•`}),(0,$.jsxs)(`span`,{className:`text-slate-400 flex items-center gap-1`,children:[(0,$.jsx)(YF,{className:`w-3.5 h-3.5`}),e.timestampStr,` (`,e.publishedDate,`)`]}),(0,$.jsx)(`span`,{className:`text-slate-500`,children:`•`}),(0,$.jsx)(`span`,{className:`text-slate-400`,children:e.readTime}),(0,$.jsx)(`span`,{className:`text-slate-500`,children:`•`}),(0,$.jsx)(`span`,{className:`text-emerald-400 font-bold`,children:e.author})]}),(0,$.jsx)(`h1`,{id:`article-title`,className:`text-2xl sm:text-3xl md:text-4xl font-black text-white font-mono tracking-tight leading-tight`,children:e.title}),(0,$.jsx)(`p`,{className:`text-sm sm:text-base text-slate-300 font-medium leading-relaxed`,children:e.summary})]}),(0,$.jsx)(xR,{type:`leaderboard`,preferredCategory:`free_trials`}),(0,$.jsxs)(`div`,{className:`grid grid-cols-1 lg:grid-cols-3 gap-8 pt-2`,children:[(0,$.jsxs)(`div`,{className:`lg:col-span-2 space-y-5 text-sm sm:text-base text-slate-300 leading-relaxed font-normal`,children:[e.bodyParagraphs.map((e,t)=>(0,$.jsxs)(_.Fragment,{children:[(0,$.jsx)(`p`,{className:`leading-relaxed`,children:e}),t===1&&(0,$.jsx)(xR,{type:`in_article`,preferredCategory:`motoring_safety`})]},t)),e.detourAdvice&&(0,$.jsxs)(`div`,{className:`p-4 bg-amber-950/40 border border-amber-500/40 rounded-2xl space-y-3 font-mono text-xs text-amber-200 mt-6`,children:[(0,$.jsxs)(`div`,{className:`flex flex-col sm:flex-row sm:items-center justify-between gap-2`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2 font-bold text-amber-300`,children:[(0,$.jsx)(hL,{className:`w-4 h-4 text-rose-500`}),(0,$.jsx)(`span`,{children:`COMMUTER DETOUR & ROUTE ADVICE:`})]}),u&&(0,$.jsx)(`button`,{onClick:()=>{Q.playTargetLock(),a&&a(u)},className:`px-3 py-1.5 rounded-xl bg-rose-600 hover:bg-rose-500 text-white font-bold text-xs flex items-center justify-center gap-1 shadow-md transition-all cursor-pointer shrink-0`,children:(0,$.jsx)(`span`,{children:`⛔ VIEW CLOSED ROAD & DIVERSION ON MAP`})})]}),(0,$.jsx)(`p`,{className:`text-slate-200 leading-normal`,children:e.detourAdvice})]}),(0,$.jsxs)(`div`,{className:`pt-6 border-t border-slate-800 flex flex-wrap items-center gap-2`,children:[(0,$.jsx)(`span`,{className:`text-xs text-slate-500 font-mono`,children:`TAGS:`}),e.tags.map((e,t)=>(0,$.jsxs)(`span`,{className:`px-2.5 py-1 rounded-lg bg-slate-900 border border-slate-800 text-xs font-mono text-slate-300`,children:[`#`,e]},t))]})]}),(0,$.jsxs)(`div`,{className:`space-y-5`,children:[c&&(0,$.jsxs)(`div`,{className:`bg-slate-900 border border-slate-800 rounded-2xl p-4 space-y-3 font-mono`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between border-b border-slate-800 pb-2`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs text-cyan-300 font-bold`,children:[(0,$.jsx)(yL,{className:`w-3.5 h-3.5`}),(0,$.jsx)(`span`,{children:`NEAREST LIVE CCTV`})]}),(0,$.jsx)(`span`,{className:`text-[10px] text-emerald-400 font-bold`,children:`LIVE OPTICAL`})]}),(0,$.jsxs)(`div`,{className:`relative aspect-video rounded-xl overflow-hidden bg-black border border-slate-800`,children:[(0,$.jsx)(`img`,{src:`/api/cctv/${c.cctvId}?t=${Date.now()}`,alt:c.name,className:`w-full h-full object-contain camera-hd-optical`}),(0,$.jsxs)(`div`,{className:`absolute bottom-2 left-2 bg-slate-950/80 px-2 py-0.5 rounded text-[9px] text-cyan-300`,children:[`CAM-`,c.cctvId]})]}),(0,$.jsxs)(`div`,{className:`space-y-1 text-xs`,children:[(0,$.jsx)(`h4`,{className:`font-bold text-white text-[12px]`,children:c.name}),(0,$.jsx)(`p`,{className:`text-[11px] text-slate-400`,children:c.description})]}),(0,$.jsxs)(`button`,{onClick:()=>{Q.playClick(),r(c)},className:`w-full py-2 rounded-xl bg-cyan-500 hover:bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center gap-1.5 shadow transition-all cursor-pointer`,children:[(0,$.jsx)(yL,{className:`w-3.5 h-3.5`}),(0,$.jsx)(`span`,{children:`STREAM FULL HD FEED`})]})]}),(0,$.jsxs)(`div`,{className:`bg-slate-900 border border-slate-800 rounded-2xl p-4 space-y-3 font-mono text-xs`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-1.5 text-cyan-300 font-bold border-b border-slate-800 pb-2`,children:[(0,$.jsx)(VI,{className:`w-3.5 h-3.5`}),(0,$.jsx)(`span`,{children:`INCIDENT TELEMETRY`})]}),(0,$.jsxs)(`div`,{className:`space-y-2 text-[11px]`,children:[(0,$.jsxs)(`div`,{className:`flex justify-between`,children:[(0,$.jsx)(`span`,{className:`text-slate-400`,children:`Status:`}),(0,$.jsx)(`span`,{className:`text-white font-bold`,children:e.impactMetrics.statusBadge})]}),e.impactMetrics.trafficDelayMins&&(0,$.jsxs)(`div`,{className:`flex justify-between`,children:[(0,$.jsx)(`span`,{className:`text-slate-400`,children:`Delay Factor:`}),(0,$.jsxs)(`span`,{className:`text-amber-400 font-bold`,children:[`+`,e.impactMetrics.trafficDelayMins,` mins`]})]}),(0,$.jsxs)(`div`,{className:`flex justify-between`,children:[(0,$.jsx)(`span`,{className:`text-slate-400`,children:`Emergency Units:`}),(0,$.jsx)(`span`,{className:e.impactMetrics.emergencyServicesOnScene?`text-red-400 font-bold`:`text-slate-400`,children:e.impactMetrics.emergencyServicesOnScene?`Active On Scene`:`Standby`})]}),(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`span`,{className:`text-slate-400 block mb-1`,children:`Affected Routes:`}),(0,$.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:e.impactMetrics.affectedRoutes.map((e,t)=>(0,$.jsx)(`span`,{className:`px-1.5 py-0.5 rounded bg-slate-950 text-cyan-300 border border-slate-800 text-[10px]`,children:e},t))})]})]})]}),(0,$.jsx)(xR,{type:`sidebar`,preferredCategory:`weather_outdoors`})]})]}),(0,$.jsxs)(`section`,{"aria-labelledby":`related-headlines-heading`,className:`pt-8 border-t border-slate-800 space-y-4`,children:[(0,$.jsx)(`h3`,{id:`related-headlines-heading`,className:`text-lg font-black text-white font-mono`,children:`RELATED NORTHERN IRELAND HEADLINES`}),(0,$.jsx)(`div`,{className:`grid grid-cols-1 md:grid-cols-3 gap-4`,children:l.map(e=>(0,$.jsxs)(`div`,{onClick:()=>{Q.playClick(),i(e),window.scrollTo({top:0,behavior:`smooth`})},className:`p-4 bg-slate-900 border border-slate-800 rounded-xl space-y-2 hover:border-cyan-500/50 transition-all cursor-pointer group`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between text-[10px] font-mono text-cyan-400`,children:[(0,$.jsxs)(`span`,{className:`uppercase font-bold`,children:[`CO. `,e.county]}),(0,$.jsx)(`span`,{className:`text-slate-500`,children:e.timestampStr})]}),(0,$.jsx)(`h4`,{className:`text-xs font-bold text-white group-hover:text-cyan-300 transition-colors line-clamp-2`,children:e.title}),(0,$.jsx)(`p`,{className:`text-[11px] text-slate-400 line-clamp-2`,children:e.summary})]},e.id))})]})]})]})};v.createRoot(document.getElementById(`root`)).render((0,$.jsx)(_.StrictMode,{children:(0,$.jsx)(()=>{let[e,t]=(0,_.useState)(`map`),[n,r]=(0,_.useState)(null),[i,a]=(0,_.useState)(null),[o,s]=(0,_.useState)(null),[c,l]=(0,_.useState)(null),[u,d]=(0,_.useState)(null),[f,p]=(0,_.useState)(null),[m,h]=(0,_.useState)(`optical`),[g,v]=(0,_.useState)(!1),[y,b]=(0,_.useState)(!1),[x,S]=(0,_.useState)(!1),[C,w]=(0,_.useState)(!1),[T,E]=(0,_.useState)(!1),[D,O]=(0,_.useState)(null),[k,A]=(0,_.useState)(()=>{try{return localStorage.getItem(`ispyni_pro_active`)===`true`}catch{return!1}}),j=e=>{A(e);try{localStorage.setItem(`ispyni_pro_active`,e?`true`:`false`)}catch{}};(0,_.useEffect)(()=>{let e=()=>{try{let e=new URLSearchParams(window.location.search),n=e.get(`article`),i=e.get(`view`),o=e.get(`cam`);if(n){let e=_R.find(e=>e.id===n||e.slug===n);if(e){r(e),t(`article`);return}}if(t(i===`intel`?`intel`:`map`),o){let e=ML.find(e=>e.cctvId===o||e.id===o);e&&a(e)}}catch{}};return e(),window.addEventListener(`popstate`,e),()=>window.removeEventListener(`popstate`,e)},[]);let M=e=>{t(e);try{let t=new URL(window.location.href);e===`intel`?t.searchParams.set(`view`,`intel`):t.searchParams.delete(`view`),t.searchParams.delete(`article`),window.history.pushState({},``,t.toString())}catch{}},ee=e=>{r(e),t(`article`);try{let t=new URL(window.location.href);t.searchParams.set(`article`,e.id),t.searchParams.set(`view`,`article`),window.history.pushState({},``,t.toString())}catch{}},te=(e,t,n)=>{s({lat:e,lng:t,label:n}),M(`map`)};return(0,$.jsxs)(`div`,{className:`relative w-screen h-screen overflow-hidden bg-[#040810] text-slate-100 flex flex-col font-mono select-none`,children:[e===`map`&&(0,$.jsx)(aR,{currentView:e,onSwitchView:M,sensorMode:m,onSelectSensorMode:h,onNavigateToCoords:te,onOpenMultiCamWall:()=>b(!0),onOpenCustomPings:()=>S(!0),onOpenProModal:()=>w(!0),onOpenAdManager:()=>E(!0),isPro:k,isAudioMuted:g,onToggleAudio:()=>v(!g)}),(0,$.jsxs)(`div`,{className:`relative flex-1 w-full h-full overflow-hidden`,children:[(0,$.jsx)(`div`,{className:`w-full h-full ${e===`map`?`block`:`hidden pointer-events-none`}`,children:(0,$.jsx)(nR,{sensorMode:m,onSelectCamera:e=>{Q.playClick(),a(e)},onOpenGeofenceModal:e=>{O(e),S(!0)},isPro:k,onOpenProModal:()=>w(!0),targetCoords:o,activeClosure:c,onClearActiveClosure:()=>l(null),activeOutage:u,onClearActiveOutage:()=>d(null),chaseFlightCallsign:f,onClearChaseFlight:()=>p(null)})}),e===`intel`&&(0,$.jsx)(`div`,{className:`w-full h-full overflow-y-auto`,children:(0,$.jsx)(SR,{onBackToMap:()=>M(`map`),onNavigateToCoords:te,onSelectCamera:e=>a(e),onSelectArticle:ee,onOpenMultiCamWall:()=>b(!0),onSelectClosure:e=>{l(e),d(null),p(null),M(`map`)},onSelectOutage:e=>{d(e),l(null),p(null),M(`map`)},onSelectFlight:e=>{p(e),l(null),d(null),M(`map`)}})}),e===`article`&&n&&(0,$.jsx)(`div`,{className:`w-full h-full overflow-y-auto`,children:(0,$.jsx)(CR,{article:n,onBackToIntel:()=>M(`intel`),onNavigateToCoords:te,onSelectCamera:e=>a(e),onSelectArticle:ee,onSelectClosure:e=>{l(e),d(null),p(null),M(`map`)}})})]}),i&&(0,$.jsx)(cR,{location:i,onClose:()=>a(null),onSwitchLocation:e=>a(e)}),y&&(0,$.jsx)(lR,{onClose:()=>b(!1),onSelectCamera:e=>{b(!1),a(e)},isPro:k,onOpenProModal:()=>{b(!1),w(!0)}}),x&&(0,$.jsx)(fR,{onClose:()=>S(!1),isPro:k,onOpenProModal:()=>{S(!1),w(!0)},initialCenter:D}),C&&(0,$.jsx)(pR,{onClose:()=>w(!1),isPro:k,onTogglePro:j}),T&&(0,$.jsx)(gR,{isOpen:T,onClose:()=>E(!1)})]})},{})}));