Add location-aware automatic default bounding box

The OpenSky "Default bounding box" now follows where flying happens.
A new "Automatic" picker mode (the default) resolves the live-map area
from a location cascade — drone telemetry → phone GPS → browser
geolocation → the user's Region country → Europe — instead of a fixed
box. Manual presets and Custom coordinates still work.

- Web App: new shared countries.js dataset (all countries + bbox,
  offline point→country); the bbox picker gains all European countries
  and an Automatic option (client pref prefs.autoBbox); the Region
  setting expands from 6 locale entries to all countries; the live map
  resolves the cascade each poll and sends it as ?bbox=.
- API Server: the states endpoint accepts and validates a ?bbox=
  override (validBBox); the Web App BFF forwards the query; the hub
  relays new phoneLatitude/phoneLongitude telemetry to the Web App.
- Fly App: reports the phone's own GPS (geolocator) alongside
  telemetry, used as the "your location" fallback.
- API panel: the OpenSky bbox picker lists all European countries.

Builds verified across web, panel, both Go modules and the Fly App
APK. Region list, Automatic default and the cascade ?bbox= override
verified in the browser.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
tajniak81andClaude Opus 4.8 committed 2026-07-14 00:07:12 +02:00
1 parent 150758b0bf
commit 94f6876024
20 files changed
+637 -71

No files matched your search

+20
View File
@@ -0,0 +1,20 @@
(function(){const i=document.createElement("link").relList;if(i&&i.supports&&i.supports("modulepreload"))return;for(const u of document.querySelectorAll('link[rel="modulepreload"]'))l(u);new MutationObserver(u=>{for(const d of u)if(d.type==="childList")for(const h of d.addedNodes)h.tagName==="LINK"&&h.rel==="modulepreload"&&l(h)}).observe(document,{childList:!0,subtree:!0});function s(u){const d={};return u.integrity&&(d.integrity=u.integrity),u.referrerPolicy&&(d.referrerPolicy=u.referrerPolicy),u.crossOrigin==="use-credentials"?d.credentials="include":u.crossOrigin==="anonymous"?d.credentials="omit":d.credentials="same-origin",d}function l(u){if(u.ep)return;u.ep=!0;const d=s(u);fetch(u.href,d)}})();/**
* @vue/shared v3.5.39
* (c) 2018-present Yuxi (Evan) You and Vue contributors
* @license MIT
**/function Or(t){const i=Object.create(null);for(const s of t.split(","))i[s]=1;return s=>s in i}const vt={},Io=[],Wn=()=>{},yu=()=>!1,Ca=t=>t.charCodeAt(0)===111&&t.charCodeAt(1)===110&&(t.charCodeAt(2)>122||t.charCodeAt(2)<97),La=t=>t.startsWith("onUpdate:"),$t=Object.assign,zr=(t,i)=>{const s=t.indexOf(i);s>-1&&t.splice(s,1)},fd=Object.prototype.hasOwnProperty,ft=(t,i)=>fd.call(t,i),De=Array.isArray,$o=t=>Ds(t)==="[object Map]",Zo=t=>Ds(t)==="[object Set]",_l=t=>Ds(t)==="[object Date]",Ye=t=>typeof t=="function",St=t=>typeof t=="string",Nn=t=>typeof t=="symbol",ht=t=>t!==null&&typeof t=="object",xu=t=>(ht(t)||Ye(t))&&Ye(t.then)&&Ye(t.catch),wu=Object.prototype.toString,Ds=t=>wu.call(t),hd=t=>Ds(t).slice(8,-1),ku=t=>Ds(t)==="[object Object]",Ir=t=>St(t)&&t!=="NaN"&&t[0]!=="-"&&""+parseInt(t,10)===t,ws=Or(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Ma=t=>{const i=Object.create(null);return(s=>i[s]||(i[s]=t(s)))},pd=/-\w/g,In=Ma(t=>t.replace(pd,i=>i.slice(1).toUpperCase())),md=/\B([A-Z])/g,Ni=Ma(t=>t.replace(md,"-$1").toLowerCase()),Su=Ma(t=>t.charAt(0).toUpperCase()+t.slice(1)),tr=Ma(t=>t?`on${Su(t)}`:""),jn=(t,i)=>!Object.is(t,i),ha=(t,...i)=>{for(let s=0;s<t.length;s++)t[s](...i)},Tu=(t,i,s,l=!1)=>{Object.defineProperty(t,i,{configurable:!0,enumerable:!1,writable:l,value:s})},Aa=t=>{const i=parseFloat(t);return isNaN(i)?t:i},gd=t=>{const i=St(t)?Number(t):NaN;return isNaN(i)?t:i};let bl;const Ea=()=>bl||(bl=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Bo(t){if(De(t)){const i={};for(let s=0;s<t.length;s++){const l=t[s],u=St(l)?yd(l):Bo(l);if(u)for(const d in u)i[d]=u[d]}return i}else if(St(t)||ht(t))return t}const vd=/;(?![^(]*\))/g,_d=/:([^]+)/,bd=/\/\*[^]*?\*\//g;function yd(t){const i={};return t.replace(bd,"").split(vd).forEach(s=>{if(s){const l=s.split(_d);l.length>1&&(i[l[0].trim()]=l[1].trim())}}),i}function Ee(t){let i="";if(St(t))i=t;else if(De(t))for(let s=0;s<t.length;s++){const l=Ee(t[s]);l&&(i+=l+" ")}else if(ht(t))for(const s in t)t[s]&&(i+=s+" ");return i.trim()}const xd="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",wd=Or(xd);function Pu(t){return!!t||t===""}function kd(t,i){if(t.length!==i.length)return!1;let s=!0;for(let l=0;s&&l<t.length;l++)s=zi(t[l],i[l]);return s}function zi(t,i){if(t===i)return!0;let s=_l(t),l=_l(i);if(s||l)return s&&l?t.getTime()===i.getTime():!1;if(s=Nn(t),l=Nn(i),s||l)return t===i;if(s=De(t),l=De(i),s||l)return s&&l?kd(t,i):!1;if(s=ht(t),l=ht(i),s||l){if(!s||!l)return!1;const u=Object.keys(t).length,d=Object.keys(i).length;if(u!==d)return!1;for(const h in t){const v=t.hasOwnProperty(h),b=i.hasOwnProperty(h);if(v&&!b||!v&&b||!zi(t[h],i[h]))return!1}}return String(t)===String(i)}function $r(t,i){return t.findIndex(s=>zi(s,i))}const Cu=t=>!!(t&&t.__v_isRef===!0),k=t=>St(t)?t:t==null?"":De(t)||ht(t)&&(t.toString===wu||!Ye(t.toString))?Cu(t)?k(t.value):JSON.stringify(t,Lu,2):String(t),Lu=(t,i)=>Cu(i)?Lu(t,i.value):$o(i)?{[`Map(${i.size})`]:[...i.entries()].reduce((s,[l,u],d)=>(s[nr(l,d)+" =>"]=u,s),{})}:Zo(i)?{[`Set(${i.size})`]:[...i.values()].map(s=>nr(s))}:Nn(i)?nr(i):ht(i)&&!De(i)&&!ku(i)?String(i):i,nr=(t,i="")=>{var s;return Nn(t)?`Symbol(${(s=t.description)!=null?s:i})`:t};/**
* @vue/reactivity v3.5.39
* (c) 2018-present Yuxi (Evan) You and Vue contributors
* @license MIT
**/let Ut;class Sd{constructor(i=!1){this.detached=i,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!i&&Ut&&(Ut.active?(this.parent=Ut,this.index=(Ut.scopes||(Ut.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let i,s;if(this.scopes)for(i=0,s=this.scopes.length;i<s;i++)this.scopes[i].pause();for(i=0,s=this.effects.length;i<s;i++)this.effects[i].pause()}}resume(){if(this._active&&this._isPaused){this._isPaused=!1;let i,s;if(this.scopes)for(i=0,s=this.scopes.length;i<s;i++)this.scopes[i].resume();for(i=0,s=this.effects.length;i<s;i++)this.effects[i].resume()}}run(i){if(this._active){const s=Ut;try{return Ut=this,i()}finally{Ut=s}}}on(){++this._on===1&&(this.prevScope=Ut,Ut=this)}off(){if(this._on>0&&--this._on===0){if(Ut===this)Ut=this.prevScope;else{let i=Ut;for(;i;){if(i.prevScope===this){i.prevScope=this.prevScope;break}i=i.prevScope}}this.prevScope=void 0}}stop(i){if(this._active){this._active=!1;let s,l;for(s=0,l=this.effects.length;s<l;s++)this.effects[s].stop();for(this.effects.length=0,s=0,l=this.cleanups.length;s<l;s++)this.cleanups[s]();if(this.cleanups.length=0,this.scopes){for(s=0,l=this.scopes.length;s<l;s++)this.scopes[s].stop(!0);this.scopes.length=0}if(!this.detached&&this.parent&&!i){const u=this.parent.scopes.pop();u&&u!==this&&(this.parent.scopes[this.index]=u,u.index=this.index)}this.parent=void 0}}}function Td(){return Ut}let bt;const ir=new WeakSet;class Mu{constructor(i){this.fn=i,this.deps=void 0,this.depsTail=void 0,this.flags=5,this.next=void 0,this.cleanup=void 0,this.scheduler=void 0,Ut&&(Ut.active?Ut.effects.push(this):this.flags&=-2)}pause(){this.flags|=64}resume(){this.flags&64&&(this.flags&=-65,ir.has(this)&&(ir.delete(this),this.trigger()))}notify(){this.flags&2&&!(this.flags&32)||this.flags&8||Eu(this)}run(){if(!(this.flags&1))return this.fn();this.flags|=2,yl(this),Ou(this);const i=bt,s=$n;bt=this,$n=!0;try{return this.fn()}finally{zu(this),bt=i,$n=s,this.flags&=-3}}stop(){if(this.flags&1){for(let i=this.deps;i;i=i.nextDep)Fr(i);this.deps=this.depsTail=void 0,yl(this),this.onStop&&this.onStop(),this.flags&=-2}}trigger(){this.flags&64?ir.add(this):this.scheduler?this.scheduler():this.runIfDirty()}runIfDirty(){mr(this)&&this.run()}get dirty(){return mr(this)}}let Au=0,ks,Ss;function Eu(t,i=!1){if(t.flags|=8,i){t.next=Ss,Ss=t;return}t.next=ks,ks=t}function Nr(){Au++}function Dr(){if(--Au>0)return;if(Ss){let i=Ss;for(Ss=void 0;i;){const s=i.next;i.next=void 0,i.flags&=-9,i=s}}let t;for(;ks;){let i=ks;for(ks=void 0;i;){const s=i.next;if(i.next=void 0,i.flags&=-9,i.flags&1)try{i.trigger()}catch(l){t||(t=l)}i=s}}if(t)throw t}function Ou(t){for(let i=t.deps;i;i=i.nextDep)i.version=-1,i.prevActiveLink=i.dep.activeLink,i.dep.activeLink=i}function zu(t){let i,s=t.depsTail,l=s;for(;l;){const u=l.prevDep;l.version===-1?(l===s&&(s=u),Fr(l),Pd(l)):i=l,l.dep.activeLink=l.prevActiveLink,l.prevActiveLink=void 0,l=u}t.deps=i,t.depsTail=s}function mr(t){for(let i=t.deps;i;i=i.nextDep)if(i.dep.version!==i.version||i.dep.computed&&(Iu(i.dep.computed)||i.dep.version!==i.version))return!0;return!!t._dirty}function Iu(t){if(t.flags&4&&!(t.flags&16)||(t.flags&=-17,t.globalVersion===Ms)||(t.globalVersion=Ms,!t.isSSR&&t.flags&128&&(!t.deps&&!t._dirty||!mr(t))))return;t.flags|=2;const i=t.dep,s=bt,l=$n;bt=t,$n=!0;try{Ou(t);const u=t.fn(t._value);(i.version===0||jn(u,t._value))&&(t.flags|=128,t._value=u,i.version++)}catch(u){throw i.version++,u}finally{bt=s,$n=l,zu(t),t.flags&=-3}}function Fr(t,i=!1){const{dep:s,prevSub:l,nextSub:u}=t;if(l&&(l.nextSub=u,t.prevSub=void 0),u&&(u.prevSub=l,t.nextSub=void 0),s.subs===t&&(s.subs=l,!l&&s.computed)){s.computed.flags&=-5;for(let d=s.computed.deps;d;d=d.nextDep)Fr(d,!0)}!i&&!--s.sc&&s.map&&s.map.delete(s.key)}function Pd(t){const{prevDep:i,nextDep:s}=t;i&&(i.nextDep=s,t.prevDep=void 0),s&&(s.prevDep=i,t.nextDep=void 0)}let $n=!0;const $u=[];function Kn(){$u.push($n),$n=!1}function Gn(){const t=$u.pop();$n=t===void 0?!0:t}function yl(t){const{cleanup:i}=t;if(t.cleanup=void 0,i){const s=bt;bt=void 0;try{i()}finally{bt=s}}}let Ms=0;class Cd{constructor(i,s){this.sub=i,this.dep=s,this.version=s.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Rr{constructor(i){this.computed=i,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(i){if(!bt||!$n||bt===this.computed)return;let s=this.activeLink;if(s===void 0||s.sub!==bt)s=this.activeLink=new Cd(bt,this),bt.deps?(s.prevDep=bt.depsTail,bt.depsTail.nextDep=s,bt.depsTail=s):bt.deps=bt.depsTail=s,Nu(s);else if(s.version===-1&&(s.version=this.version,s.nextDep)){const l=s.nextDep;l.prevDep=s.prevDep,s.prevDep&&(s.prevDep.nextDep=l),s.prevDep=bt.depsTail,s.nextDep=void 0,bt.depsTail.nextDep=s,bt.depsTail=s,bt.deps===s&&(bt.deps=l)}return s}trigger(i){this.versiLine truncated
* @vue/runtime-core v3.5.39
* (c) 2018-present Yuxi (Evan) You and Vue contributors
* @license MIT
**/function Fs(t,i,s,l){try{return l?t(...l):t()}catch(u){za(u,i,s)}}function Mn(t,i,s,l){if(Ye(t)){const u=Fs(t,i,s,l);return u&&xu(u)&&u.catch(d=>{za(d,i,s)}),u}if(De(t)){const u=[];for(let d=0;d<t.length;d++)u.push(Mn(t[d],i,s,l));return u}}function za(t,i,s,l=!0){const u=i?i.vnode:null,{errorHandler:d,throwUnhandledErrorInProduction:h}=i&&i.appContext.config||vt;if(i){let v=i.parent;const b=i.proxy,C=`https://vuejs.org/error-reference/#runtime-${s}`;for(;v;){const T=v.ec;if(T){for(let M=0;M<T.length;M++)if(T[M](t,b,C)===!1)return}v=v.parent}if(d){Kn(),Fs(d,null,10,[t,b,C]),Gn();return}}Xd(t,s,u,l,h)}function Xd(t,i,s,l=!0,u=!1){if(u)throw t;console.error(t)}const Xt=[];let Vn=-1;const No=[];let Oi=null,zo=0;const Hu=Promise.resolve();let ga=null;function ju(t){const i=ga||Hu;return t?i.then(this?t.bind(this):t):i}function Qd(t){let i=Vn+1,s=Xt.length;for(;i<s;){const l=i+s>>>1,u=Xt[l],d=Es(u);d<t||d===t&&u.flags&2?i=l+1:s=l}return i}function Zr(t){if(!(t.flags&1)){const i=Es(t),s=Xt[Xt.length-1];!s||!(t.flags&2)&&i>=Es(s)?Xt.push(t):Xt.splice(Qd(i),0,t),t.flags|=1,Wu()}}function Wu(){ga||(ga=Hu.then(Gu))}function ef(t){De(t)?No.push(...t):Oi&&t.id===-1?Oi.splice(zo+1,0,t):t.flags&1||(No.push(t),t.flags|=1),Wu()}function wl(t,i,s=Vn+1){for(;s<Xt.length;s++){const l=Xt[s];if(l&&l.flags&2){if(t&&l.id!==t.uid)continue;Xt.splice(s,1),s--,l.flags&4&&(l.flags&=-2),l(),l.flags&4||(l.flags&=-2)}}}function Ku(t){if(No.length){const i=[...new Set(No)].sort((s,l)=>Es(s)-Es(l));if(No.length=0,Oi){Oi.push(...i);return}for(Oi=i,zo=0;zo<Oi.length;zo++){const s=Oi[zo];s.flags&4&&(s.flags&=-2),s.flags&8||s(),s.flags&=-2}Oi=null,zo=0}}const Es=t=>t.id==null?t.flags&2?-1:1/0:t.id;function Gu(t){try{for(Vn=0;Vn<Xt.length;Vn++){const i=Xt[Vn];i&&!(i.flags&8)&&(i.flags&4&&(i.flags&=-2),Fs(i,i.i,i.i?15:14),i.flags&4||(i.flags&=-2))}}finally{for(;Vn<Xt.length;Vn++){const i=Xt[Vn];i&&(i.flags&=-2)}Vn=-1,Xt.length=0,Ku(),ga=null,(Xt.length||No.length)&&Gu()}}let Kt=null,qu=null;function va(t){const i=Kt;return Kt=t,qu=t&&t.type.__scopeId||null,i}function Pe(t,i=Kt,s){if(!i||t._n)return t;const l=(...u)=>{l._d&&ya(-1);const d=va(i);let h;try{h=t(...u)}finally{va(d),l._d&&ya(1)}return h};return l._n=!0,l._c=!0,l._d=!0,l}function re(t,i){if(Kt===null)return t;const s=Fa(Kt),l=t.dirs||(t.dirs=[]);for(let u=0;u<i.length;u++){let[d,h,v,b=vt]=i[u];d&&(Ye(d)&&(d={mounted:d,updated:d}),d.deep&&ci(h),l.push({dir:d,instance:s,value:h,oldValue:void 0,arg:v,modifiers:b}))}return t}function to(t,i,s,l){const u=t.dirs,d=i&&i.dirs;for(let h=0;h<u.length;h++){const v=u[h];d&&(v.oldValue=d[h].value);let b=v.dir[l];b&&(Kn(),Mn(b,s,8,[t.el,v,t,i]),Gn())}}function Yu(t,i){if(Qt){let s=Qt.provides;const l=Qt.parent&&Qt.parent.provides;l===s&&(s=Qt.provides=Object.create(l)),s[t]=i}}function Ts(t,i,s=!1){const l=Lc();if(l||Fo){let u=Fo?Fo._context.provides:l?l.parent==null||l.ce?l.vnode.appContext&&l.vnode.appContext.provides:l.parent.provides:void 0;if(u&&t in u)return u[t];if(arguments.length>1)return s&&Ye(i)?i.call(l&&l.proxy):i}}const tf=Symbol.for("v-scx"),nf=()=>Ts(tf);function It(t,i,s){return Ju(t,i,s)}function Ju(t,i,s=vt){const{immediate:l,deep:u,flush:d,once:h}=s,v=$t({},s),b=i&&l||!i&&d!=="post";let C;if($s){if(d==="sync"){const B=nf();C=B.__watcherHandles||(B.__watcherHandles=[])}else if(!b){const B=()=>{};return B.stop=Wn,B.resume=Wn,B.pause=Wn,B}}const T=Qt;v.call=(B,Z,F)=>Mn(B,T,Z,F);let M=!1;d==="post"?v.scheduler=B=>{Jt(B,T&&T.suspense)}:d!=="sync"&&(M=!0,v.scheduler=(B,Z)=>{Z?B():Zr(B)}),v.augmentJob=B=>{i&&(B.flags|=4),M&&(B.flags|=2,T&&(B.id=T.uid,B.i=T))};const R=Jd(t,i,v);return $s&&(C?C.push(R):b&&R()),R}function of(t,i,s){const l=this.proxy,u=St(t)?t.includes(".")?Xu(l,t):()=>l[t]:t.bind(l,l);let d;Ye(i)?d=i:(d=i.handler,s=i);const h=Rs(this),v=Ju(u,d.bind(l),s);return h(),v}function Xu(t,i){const s=i.split(".");return()=>{let l=t;for(let u=0;u<s.length&&l;u++)l=l[s[u]];return l}}const Ei=new WeakMap,Qu=Symbol("_vte"),ec=t=>t.__isTeleport,ao=t=>t&&(t.disabled||t.disabled===""),sf=t=>t&&(t.defer||t.defer===""),kl=t=>typeof SVGElement<"u"&&t instanceof SVGElement,Sl=t=>typeof MathMLElement=="function"&&t instanceof MathMLElement,yr=(t,i)=>{const s=t&&t.to;return St(s)?i?i(s):null:s},af={name:"Teleport",__isTeleport:!0,process(t,i,s,l,u,d,h,v,b,C){const{mc:T,pc:M,pbc:R,o:{insert:B,querySelector:Z,createText:F,createComment:he,parentNode:pe}}=C,q=ao(i.props);let{dynamicChildren:Te}=i;const fe=(Ie,Ge,_e)=>{Ie.shapeFlag&16&&T(Ie.children,Ge,_e,u,d,h,v,b)},Ue=(Ie=i)=>{const Ge=ao(Ie.props),_e=Ie.target=yr(Ie.props,Z),ye=xr(_e,Ie,F,B);_e&&(h!=="svg"&&kl(_e)?h="svg":h!=="mathml"&&Sl(_e)&&(h="mathml"),u&&u.isCE&&(u.ce._teleportTargets||(u.ce._teleportTargets=new Set)).add(_e),Ge||(fe(Ie,_e,ye),_s(Ie,!1)))},$e=Ie=>{const Ge=()=>{if(Ei.get(Ie)===Ge){if(Ei.delete(Ie),ao(Ie.props)){const _e=pe(Ie.el)||s;fe(Ie,_e,Ie.anchor),_s(Ie,!0)}Ue(Ie)}};Ei.set(Ie,Ge),Jt(Ge,d)};if(t==null){const Ie=i.el=F(""),Ge=i.anchor=F("");if(B(Ie,s,l),B(Ge,s,l),sf Line truncated
* @vue/runtime-dom v3.5.39
* (c) 2018-present Yuxi (Evan) You and Vue contributors
* @license MIT
**/let Lr;const Fl=typeof window<"u"&&window.trustedTypes;if(Fl)try{Lr=Fl.createPolicy("vue",{createHTML:t=>t})}catch{}const Ec=Lr?t=>Lr.createHTML(t):t=>t,ch="http://www.w3.org/2000/svg",dh="http://www.w3.org/1998/Math/MathML",ri=typeof document<"u"?document:null,Rl=ri&&ri.createElement("template"),fh={insert:(t,i,s)=>{i.insertBefore(t,s||null)},remove:t=>{const i=t.parentNode;i&&i.removeChild(t)},createElement:(t,i,s,l)=>{const u=i==="svg"?ri.createElementNS(ch,t):i==="mathml"?ri.createElementNS(dh,t):s?ri.createElement(t,{is:s}):ri.createElement(t);return t==="select"&&l&&l.multiple!=null&&u.setAttribute("multiple",l.multiple),u},createText:t=>ri.createTextNode(t),createComment:t=>ri.createComment(t),setText:(t,i)=>{t.nodeValue=i},setElementText:(t,i)=>{t.textContent=i},parentNode:t=>t.parentNode,nextSibling:t=>t.nextSibling,querySelector:t=>ri.querySelector(t),setScopeId(t,i){t.setAttribute(i,"")},insertStaticContent(t,i,s,l,u,d){const h=s?s.previousSibling:i.lastChild;if(u&&(u===d||u.nextSibling))for(;i.insertBefore(u.cloneNode(!0),s),!(u===d||!(u=u.nextSibling)););else{Rl.innerHTML=Ec(l==="svg"?`<svg>${t}</svg>`:l==="mathml"?`<math>${t}</math>`:t);const v=Rl.content;if(l==="svg"||l==="mathml"){const b=v.firstChild;for(;b.firstChild;)v.appendChild(b.firstChild);v.removeChild(b)}i.insertBefore(v,s)}return[h?h.nextSibling:i.firstChild,s?s.previousSibling:i.lastChild]}},Mi="transition",gs="animation",Ns=Symbol("_vtc"),Oc={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},hh=$t({},tc,Oc),ph=t=>(t.displayName="Transition",t.props=hh,t),mh=ph((t,{slots:i})=>lh(df,gh(t),i)),io=(t,i=[])=>{De(t)?t.forEach(s=>s(...i)):t&&t(...i)},Bl=t=>t?De(t)?t.some(i=>i.length>1):t.length>1:!1;function gh(t){const i={};for(const ne in t)ne in Oc||(i[ne]=t[ne]);if(t.css===!1)return i;const{name:s="v",type:l,duration:u,enterFromClass:d=`${s}-enter-from`,enterActiveClass:h=`${s}-enter-active`,enterToClass:v=`${s}-enter-to`,appearFromClass:b=d,appearActiveClass:C=h,appearToClass:T=v,leaveFromClass:M=`${s}-leave-from`,leaveActiveClass:R=`${s}-leave-active`,leaveToClass:B=`${s}-leave-to`}=t,Z=vh(u),F=Z&&Z[0],he=Z&&Z[1],{onBeforeEnter:pe,onEnter:q,onEnterCancelled:Te,onLeave:fe,onLeaveCancelled:Ue,onBeforeAppear:$e=pe,onAppear:Ie=q,onAppearCancelled:Ge=Te}=i,_e=(ne,je,ie,We)=>{ne._enterCancelled=We,oo(ne,je?T:v),oo(ne,je?C:h),ie&&ie()},ye=(ne,je)=>{ne._isLeaving=!1,oo(ne,M),oo(ne,B),oo(ne,R),je&&je()},ze=ne=>(je,ie)=>{const We=ne?Ie:q,le=()=>_e(je,ne,ie);io(We,[je,le]),Ul(()=>{oo(je,ne?b:d),ai(je,ne?T:v),Bl(We)||Vl(je,l,F,le)})};return $t(i,{onBeforeEnter(ne){io(pe,[ne]),ai(ne,d),ai(ne,h)},onBeforeAppear(ne){io($e,[ne]),ai(ne,b),ai(ne,C)},onEnter:ze(!1),onAppear:ze(!0),onLeave(ne,je){ne._isLeaving=!0;const ie=()=>ye(ne,je);ai(ne,M),ne._enterCancelled?(ai(ne,R),jl(ne)):(jl(ne),ai(ne,R)),Ul(()=>{ne._isLeaving&&(oo(ne,M),ai(ne,B),Bl(fe)||Vl(ne,l,he,ie))}),io(fe,[ne,ie])},onEnterCancelled(ne){_e(ne,!1,void 0,!0),io(Te,[ne])},onAppearCancelled(ne){_e(ne,!0,void 0,!0),io(Ge,[ne])},onLeaveCancelled(ne){ye(ne),io(Ue,[ne])}})}function vh(t){if(t==null)return null;if(ht(t))return[cr(t.enter),cr(t.leave)];{const i=cr(t);return[i,i]}}function cr(t){return gd(t)}function ai(t,i){i.split(/\s+/).forEach(s=>s&&t.classList.add(s)),(t[Ns]||(t[Ns]=new Set)).add(i)}function oo(t,i){i.split(/\s+/).forEach(l=>l&&t.classList.remove(l));const s=t[Ns];s&&(s.delete(i),s.size||(t[Ns]=void 0))}function Ul(t){requestAnimationFrame(()=>{requestAnimationFrame(t)})}let _h=0;function Vl(t,i,s,l){const u=t._endId=++_h,d=()=>{u===t._endId&&l()};if(s!=null)return setTimeout(d,s);const{type:h,timeout:v,propCount:b}=bh(t,i);if(!h)return l();const C=h+"end";let T=0;const M=()=>{t.removeEventListener(C,R),d()},R=B=>{B.target===t&&++T>=b&&M()};setTimeout(()=>{T<b&&M()},v+1),t.addEventListener(C,R)}function bh(t,i){const s=window.getComputedStyle(t),l=Z=>(s[Z]||"").split(", "),u=l(`${Mi}Delay`),d=l(`${Mi}Duration`),h=Zl(u,d),v=l(`${gs}Delay`),b=l(`${gs}Duration`),C=Zl(v,b);let T=null,M=0,R=0;i===Mi?h>0&&(T=Mi,M=h,R=d.length):i===gs?C>0&&(T=gs,M=C,R=b.length):(M=Math.max(h,C),T=M>0?h>C?Mi:gs:null,R=T?T===Mi?d.length:b.length:0);const B=T===Mi&&/\b(?:transform|all)(?:,|$)/.test(l(`${Mi}Property`).toString());return{type:T,timeout:M,propCount:R,hasTransform:B}}function Zl(t,i){for(;t.length<i.length;)t=t.concat(t);return Math.max(...i.map((s,l)=>Hl(s)+Hl(t[l])))}function Hl(t){return t==="auto"?0:Number(t.slice(0,-1).replace(",","."))*1e3}function jl(t){return(t?t.ownerDocument:document).body.offsetHeight}function yh(t,i,s){const l=t[Ns];l&&(i=(i?[i,...l]:[...l]).join(" ")),i==null?t.removeAttribute("class"):s?t.setAttribute("class",i):t.className=i}const ka=Symbol("_vod"),zc=Symbol("_vsh"),xh={name:"show",beforeMount(t,{value:i},{transition:s Line truncated
* Leaflet 1.9.4, a JS library for interactive maps. https://leafletjs.com
* (c) 2010-2023 Vladimir Agafonkin, (c) 2010-2011 CloudMade
*/var im=xs.exports,pu;function om(){return pu||(pu=1,(function(t,i){(function(s,l){l(i)})(im,(function(s){var l="1.9.4";function u(e){var n,o,a,c;for(o=1,a=arguments.length;o<a;o++){c=arguments[o];for(n in c)e[n]=c[n]}return e}var d=Object.create||(function(){function e(){}return function(n){return e.prototype=n,new e}})();function h(e,n){var o=Array.prototype.slice;if(e.bind)return e.bind.apply(e,o.call(arguments,1));var a=o.call(arguments,2);return function(){return e.apply(n,a.length?a.concat(o.call(arguments)):arguments)}}var v=0;function b(e){return"_leaflet_id"in e||(e._leaflet_id=++v),e._leaflet_id}function C(e,n,o){var a,c,m,P;return P=function(){a=!1,c&&(m.apply(o,c),c=!1)},m=function(){a?c=arguments:(e.apply(o,arguments),setTimeout(P,n),a=!0)},m}function T(e,n,o){var a=n[1],c=n[0],m=a-c;return e===a&&o?e:((e-c)%m+m)%m+c}function M(){return!1}function R(e,n){if(n===!1)return e;var o=Math.pow(10,n===void 0?6:n);return Math.round(e*o)/o}function B(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}function Z(e){return B(e).split(/\s+/)}function F(e,n){Object.prototype.hasOwnProperty.call(e,"options")||(e.options=e.options?d(e.options):{});for(var o in n)e.options[o]=n[o];return e.options}function he(e,n,o){var a=[];for(var c in e)a.push(encodeURIComponent(o?c.toUpperCase():c)+"="+encodeURIComponent(e[c]));return(!n||n.indexOf("?")===-1?"?":"&")+a.join("&")}var pe=/\{ *([\w_ -]+) *\}/g;function q(e,n){return e.replace(pe,function(o,a){var c=n[a];if(c===void 0)throw new Error("No value provided for variable "+o);return typeof c=="function"&&(c=c(n)),c})}var Te=Array.isArray||function(e){return Object.prototype.toString.call(e)==="[object Array]"};function fe(e,n){for(var o=0;o<e.length;o++)if(e[o]===n)return o;return-1}var Ue="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=";function $e(e){return window["webkit"+e]||window["moz"+e]||window["ms"+e]}var Ie=0;function Ge(e){var n=+new Date,o=Math.max(0,16-(n-Ie));return Ie=n+o,window.setTimeout(e,o)}var _e=window.requestAnimationFrame||$e("RequestAnimationFrame")||Ge,ye=window.cancelAnimationFrame||$e("CancelAnimationFrame")||$e("CancelRequestAnimationFrame")||function(e){window.clearTimeout(e)};function ze(e,n,o){if(o&&_e===Ge)e.call(n);else return _e.call(window,h(e,n))}function ne(e){e&&ye.call(window,e)}var je={__proto__:null,extend:u,create:d,bind:h,get lastId(){return v},stamp:b,throttle:C,wrapNum:T,falseFn:M,formatNum:R,trim:B,splitWords:Z,setOptions:F,getParamString:he,template:q,isArray:Te,indexOf:fe,emptyImageUrl:Ue,requestFn:_e,cancelFn:ye,requestAnimFrame:ze,cancelAnimFrame:ne};function ie(){}ie.extend=function(e){var n=function(){F(this),this.initialize&&this.initialize.apply(this,arguments),this.callInitHooks()},o=n.__super__=this.prototype,a=d(o);a.constructor=n,n.prototype=a;for(var c in this)Object.prototype.hasOwnProperty.call(this,c)&&c!=="prototype"&&c!=="__super__"&&(n[c]=this[c]);return e.statics&&u(n,e.statics),e.includes&&(We(e.includes),u.apply(null,[a].concat(e.includes))),u(a,e),delete a.statics,delete a.includes,a.options&&(a.options=o.options?d(o.options):{},u(a.options,e.options)),a._initHooks=[],a.callInitHooks=function(){if(!this._initHooksCalled){o.callInitHooks&&o.callInitHooks.call(this),this._initHooksCalled=!0;for(var m=0,P=a._initHooks.length;m<P;m++)a._initHooks[m].call(this)}},n},ie.include=function(e){var n=this.prototype.options;return u(this.prototype,e),e.options&&(this.prototype.options=n,this.mergeOptions(e.options)),this},ie.mergeOptions=function(e){return u(this.prototype.options,e),this},ie.addInitHook=function(e){var n=Array.prototype.slice.call(arguments,1),o=typeof e=="function"?e:function(){this[e].apply(this,n)};return this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(o),this};function We(e){if(!(typeof L>"u"||!L||!L.Mixin)){e=Te(e)?e:[e];for(var n=0;n<e.length;n++)e[n]===L.Mixin.Events&&console.warn("Deprecated include of L.Mixin.Events: this property will be removed in future releases, please inherit from L.Evented instead.",new Error().stack)}}var le={on:function(e,n,o){if(typeof e=="object")for(var a in e)this._on(a,e[a],n);else{e=Z(e);for(var c=0,m=e.length;c<m;c++)this._on(e[c],n,o)}return this},off:function(e,n,o){if(!arguments.length)delete this._events;else if(typeof e=="object")for(var a in e)this._off(a,e[a],n);else{e=Z(e);for(var c=arguments.length===1,m=0,P=e.length;m<P;m++)c?this._off(e[m]):this._off(e[m],n,o)}return this},_on:function(e,n,o,a){if(typeof n!="function"){console.warn("wrong listener type: "+typeof n);return}if(this._listens(e,n,o)===!1){o===this&&(o=void 0);var c={fn:n,ctx:o};a&&(c.once=!0),this._events=this._events||{},this._events[e]=this._events[e]||[],this._events[e].push(c)}},_off:function(e,n,o){var a,c,m;if(this._events&&(a=this._events[e],!!a)){if(arguments.length===1){if(this._firingCount)for(c=0,m=a.length;c<m;c++)a[c].fn=M;delete this._events[e];return}if(typeof n!="function"){console.warn("wrong listener type:Line truncated