Add adjustable probe area for OpenSky test connection
Let the OpenSky health probe run over a chosen bounding box without touching the saved default, so its credit cost (which scales with area) can be checked cheaply. - Backend: the plugin health endpoint (panel Check) and the OpenSky health endpoint (Web App Test connection) accept an optional ?bbox=, validated with validBBox and applied to a transient probe instance; both BFF and API forward it. Saved config is untouched. - API panel: a "Probe area" picker beside each bbox-capable plugin's Check button — saved default, all countries (grouped by continent), or Custom. Adds a compact pv-input-sm style. - Web App: a "Test area" picker beside Test connection, using the full country list (new countryGroups() helper) plus Custom. This is where the probe is authenticated and the credit cost is shown. Builds pass across both Go modules and both frontends. Panel picker verified live (186 options, defaults to saved default). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
1 parent
763cc67081
commit
15bff7f517
17 files changed
+233
-53
No files matched your search
@@ -0,0 +1 @@
|
||||
@import"https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Space+Mono:wght@400;700&display=swap";/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:root,:host{--font-sans:"Space Grotesk", ui-sans-serif, system-ui, "Segoe UI", sans-serif;--font-mono:"Space Mono", ui-monospace, "SFMono-Regular", Menlo, monospace;--spacing:.25rem;--container-sm:24rem;--container-5xl:64rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wider:.05em;--leading-tight:1.25;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:"Space Grotesk", ui-sans-serif, system-ui, "Segoe UI", sans-serif;--default-mono-font-family:"Space Mono", ui-monospace, "SFMono-Regular", Menlo, monospace;--font-display:"Space Grotesk", ui-sans-serif, system-ui, "Segoe UI", sans-serif;--radius-sm:6px;--radius-md:10px}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-fielLine truncated
|
||||
@@ -1,17 +0,0 @@
|
||||
(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))s(o);new MutationObserver(o=>{for(const i of o)if(i.type==="childList")for(const l of i.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&s(l)}).observe(document,{childList:!0,subtree:!0});function n(o){const i={};return o.integrity&&(i.integrity=o.integrity),o.referrerPolicy&&(i.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?i.credentials="include":o.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function s(o){if(o.ep)return;o.ep=!0;const i=n(o);fetch(o.href,i)}})();/**
|
||||
* @vue/shared v3.5.39
|
||||
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
||||
* @license MIT
|
||||
**/function Ps(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const se={},jt=[],tt=()=>{},Fo=()=>!1,zn=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Gn=e=>e.startsWith("onUpdate:"),Ae=Object.assign,Os=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Qi=Object.prototype.hasOwnProperty,Q=(e,t)=>Qi.call(e,t),j=Array.isArray,$t=e=>mn(e)==="[object Map]",Gt=e=>mn(e)==="[object Set]",eo=e=>mn(e)==="[object Date]",H=e=>typeof e=="function",ce=e=>typeof e=="string",nt=e=>typeof e=="symbol",te=e=>e!==null&&typeof e=="object",No=e=>(te(e)||H(e))&&H(e.then)&&H(e.catch),Lo=Object.prototype.toString,mn=e=>Lo.call(e),el=e=>mn(e).slice(8,-1),Do=e=>mn(e)==="[object Object]",Us=e=>ce(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,nn=Ps(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Wn=e=>{const t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},tl=/-\w/g,He=Wn(e=>e.replace(tl,t=>t.slice(1).toUpperCase())),nl=/\B([A-Z])/g,yt=Wn(e=>e.replace(nl,"-$1").toLowerCase()),jo=Wn(e=>e.charAt(0).toUpperCase()+e.slice(1)),is=Wn(e=>e?`on${jo(e)}`:""),et=(e,t)=>!Object.is(e,t),Rn=(e,...t)=>{for(let n=0;n<e.length;n++)e[n](...t)},$o=(e,t,n,s=!1)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},Jn=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let to;const qn=()=>to||(to=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Ms(e){if(j(e)){const t={};for(let n=0;n<e.length;n++){const s=e[n],o=ce(s)?ll(s):Ms(s);if(o)for(const i in o)t[i]=o[i]}return t}else if(ce(e)||te(e))return e}const sl=/;(?![^(]*\))/g,ol=/:([^]+)/,il=/\/\*[^]*?\*\//g;function ll(e){const t={};return e.replace(il,"").split(sl).forEach(n=>{if(n){const s=n.split(ol);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function Ie(e){let t="";if(ce(e))t=e;else if(j(e))for(let n=0;n<e.length;n++){const s=Ie(e[n]);s&&(t+=s+" ")}else if(te(e))for(const n in e)e[n]&&(t+=n+" ");return t.trim()}const rl="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",al=Ps(rl);function Bo(e){return!!e||e===""}function cl(e,t){if(e.length!==t.length)return!1;let n=!0;for(let s=0;n&&s<e.length;s++)n=gt(e[s],t[s]);return n}function gt(e,t){if(e===t)return!0;let n=eo(e),s=eo(t);if(n||s)return n&&s?e.getTime()===t.getTime():!1;if(n=nt(e),s=nt(t),n||s)return e===t;if(n=j(e),s=j(t),n||s)return n&&s?cl(e,t):!1;if(n=te(e),s=te(t),n||s){if(!n||!s)return!1;const o=Object.keys(e).length,i=Object.keys(t).length;if(o!==i)return!1;for(const l in e){const r=e.hasOwnProperty(l),c=t.hasOwnProperty(l);if(r&&!c||!r&&c||!gt(e[l],t[l]))return!1}}return String(e)===String(t)}function Rs(e,t){return e.findIndex(n=>gt(n,t))}const Vo=e=>!!(e&&e.__v_isRef===!0),O=e=>ce(e)?e:e==null?"":j(e)||te(e)&&(e.toString===Lo||!H(e.toString))?Vo(e)?O(e.value):JSON.stringify(e,Ho,2):String(e),Ho=(e,t)=>Vo(t)?Ho(e,t.value):$t(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,o],i)=>(n[ls(s,i)+" =>"]=o,n),{})}:Gt(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>ls(n))}:nt(t)?ls(t):te(t)&&!j(t)&&!Do(t)?String(t):t,ls=(e,t="")=>{var n;return nt(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/**
|
||||
* @vue/reactivity v3.5.39
|
||||
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
||||
* @license MIT
|
||||
**/let ge;class ul{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!t&&ge&&(ge.active?(this.parent=ge,this.index=(ge.scopes||(ge.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t<n;t++)this.scopes[t].pause();for(t=0,n=this.effects.length;t<n;t++)this.effects[t].pause()}}resume(){if(this._active&&this._isPaused){this._isPaused=!1;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t<n;t++)this.scopes[t].resume();for(t=0,n=this.effects.length;t<n;t++)this.effects[t].resume()}}run(t){if(this._active){const n=ge;try{return ge=this,t()}finally{ge=n}}}on(){++this._on===1&&(this.prevScope=ge,ge=this)}off(){if(this._on>0&&--this._on===0){if(ge===this)ge=this.prevScope;else{let t=ge;for(;t;){if(t.prevScope===this){t.prevScope=this.prevScope;break}t=t.prevScope}}this.prevScope=void 0}}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n<s;n++)this.effects[n].stop();for(this.effects.length=0,n=0,s=this.cleanups.length;n<s;n++)this.cleanups[n]();if(this.cleanups.length=0,this.scopes){for(n=0,s=this.scopes.length;n<s;n++)this.scopes[n].stop(!0);this.scopes.length=0}if(!this.detached&&this.parent&&!t){const o=this.parent.scopes.pop();o&&o!==this&&(this.parent.scopes[this.index]=o,o.index=this.index)}this.parent=void 0}}}function dl(){return ge}let re;const rs=new WeakSet;class Ko{constructor(t){this.fn=t,this.deps=void 0,this.depsTail=void 0,this.flags=5,this.next=void 0,this.cleanup=void 0,this.scheduler=void 0,ge&&(ge.active?ge.effects.push(this):this.flags&=-2)}pause(){this.flags|=64}resume(){this.flags&64&&(this.flags&=-65,rs.has(this)&&(rs.delete(this),this.trigger()))}notify(){this.flags&2&&!(this.flags&32)||this.flags&8||Go(this)}run(){if(!(this.flags&1))return this.fn();this.flags|=2,no(this),Wo(this);const t=re,n=Ke;re=this,Ke=!0;try{return this.fn()}finally{Jo(this),re=t,Ke=n,this.flags&=-3}}stop(){if(this.flags&1){for(let t=this.deps;t;t=t.nextDep)Ns(t);this.deps=this.depsTail=void 0,no(this),this.onStop&&this.onStop(),this.flags&=-2}}trigger(){this.flags&64?rs.add(this):this.scheduler?this.scheduler():this.runIfDirty()}runIfDirty(){gs(this)&&this.run()}get dirty(){return gs(this)}}let zo=0,sn,on;function Go(e,t=!1){if(e.flags|=8,t){e.next=on,on=e;return}e.next=sn,sn=e}function Is(){zo++}function Fs(){if(--zo>0)return;if(on){let t=on;for(on=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;sn;){let t=sn;for(sn=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function Wo(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Jo(e){let t,n=e.depsTail,s=n;for(;s;){const o=s.prevDep;s.version===-1?(s===n&&(n=o),Ns(s),fl(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=o}e.deps=t,e.depsTail=n}function gs(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(qo(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function qo(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===un)||(e.globalVersion=un,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!gs(e))))return;e.flags|=2;const t=e.dep,n=re,s=Ke;re=e,Ke=!0;try{Wo(e);const o=e.fn(e._value);(t.version===0||et(o,e._value))&&(e.flags|=128,e._value=o,t.version++)}catch(o){throw t.version++,o}finally{re=n,Ke=s,Jo(e),e.flags&=-3}}function Ns(e,t=!1){const{dep:n,prevSub:s,nextSub:o}=e;if(s&&(s.nextSub=o,e.prevSub=void 0),o&&(o.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)Ns(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function fl(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let Ke=!0;const Yo=[];function st(){Yo.push(Ke),Ke=!1}function ot(){const e=Yo.pop();Ke=e===void 0?!0:e}function no(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=re;re=void 0;try{t()}finally{re=n}}}let un=0;class pl{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Ls{constructor(t){this.computed=t,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(t){if(!re||!Ke||re===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==re)n=this.activeLink=new pl(re,this),re.deps?(n.prevDep=re.depsTail,re.depsTail.nextDep=n,re.depsTail=n):re.deps=re.depsTail=n,Zo(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=re.depsTail,n.nextDep=void 0,re.depsTail.nextDep=n,re.depsTail=n,re.deps===n&&(re.deps=s)}return n}trigger(t){this.versiLine truncated
|
||||
* @vue/runtime-core v3.5.39
|
||||
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
||||
* @license MIT
|
||||
**/function gn(e,t,n,s){try{return s?e(...s):e()}catch(o){Zn(o,t,n)}}function Ge(e,t,n,s){if(H(e)){const o=gn(e,t,n,s);return o&&No(o)&&o.catch(i=>{Zn(i,t,n)}),o}if(j(e)){const o=[];for(let i=0;i<e.length;i++)o.push(Ge(e[i],t,n,s));return o}}function Zn(e,t,n,s=!0){const o=t?t.vnode:null,{errorHandler:i,throwUnhandledErrorInProduction:l}=t&&t.appContext.config||se;if(t){let r=t.parent;const c=t.proxy,m=`https://vuejs.org/error-reference/#runtime-${n}`;for(;r;){const h=r.ec;if(h){for(let x=0;x<h.length;x++)if(h[x](e,c,m)===!1)return}r=r.parent}if(i){st(),gn(i,null,10,[e,c,m]),ot();return}}Dl(e,n,o,s,l)}function Dl(e,t,n,s=!0,o=!1){if(o)throw e;console.error(e)}const Te=[];let Ze=-1;const Bt=[];let mt=null,Lt=0;const ii=Promise.resolve();let Dn=null;function li(e){const t=Dn||ii;return e?t.then(this?e.bind(this):e):t}function jl(e){let t=Ze+1,n=Te.length;for(;t<n;){const s=t+n>>>1,o=Te[s],i=fn(o);i<e||i===e&&o.flags&2?t=s+1:n=s}return t}function Vs(e){if(!(e.flags&1)){const t=fn(e),n=Te[Te.length-1];!n||!(e.flags&2)&&t>=fn(n)?Te.push(e):Te.splice(jl(t),0,e),e.flags|=1,ri()}}function ri(){Dn||(Dn=ii.then(ci))}function $l(e){j(e)?Bt.push(...e):mt&&e.id===-1?mt.splice(Lt+1,0,e):e.flags&1||(Bt.push(e),e.flags|=1),ri()}function oo(e,t,n=Ze+1){for(;n<Te.length;n++){const s=Te[n];if(s&&s.flags&2){if(e&&s.id!==e.uid)continue;Te.splice(n,1),n--,s.flags&4&&(s.flags&=-2),s(),s.flags&4||(s.flags&=-2)}}}function ai(e){if(Bt.length){const t=[...new Set(Bt)].sort((n,s)=>fn(n)-fn(s));if(Bt.length=0,mt){mt.push(...t);return}for(mt=t,Lt=0;Lt<mt.length;Lt++){const n=mt[Lt];n.flags&4&&(n.flags&=-2),n.flags&8||n(),n.flags&=-2}mt=null,Lt=0}}const fn=e=>e.id==null?e.flags&2?-1:1/0:e.id;function ci(e){try{for(Ze=0;Ze<Te.length;Ze++){const t=Te[Ze];t&&!(t.flags&8)&&(t.flags&4&&(t.flags&=-2),gn(t,t.i,t.i?15:14),t.flags&4||(t.flags&=-2))}}finally{for(;Ze<Te.length;Ze++){const t=Te[Ze];t&&(t.flags&=-2)}Ze=-1,Te.length=0,ai(),Dn=null,(Te.length||Bt.length)&&ci()}}let $e=null,ui=null;function jn(e){const t=$e;return $e=e,ui=e&&e.type.__scopeId||null,t}function Bl(e,t=$e,n){if(!t||e._n)return e;const s=(...o)=>{s._d&&mo(-1);const i=jn(t);let l;try{l=e(...o)}finally{jn(i),s._d&&mo(1)}return l};return s._n=!0,s._c=!0,s._d=!0,s}function le(e,t){if($e===null)return e;const n=ts($e),s=e.dirs||(e.dirs=[]);for(let o=0;o<t.length;o++){let[i,l,r,c=se]=t[o];i&&(H(i)&&(i={mounted:i,updated:i}),i.deep&&dt(l),s.push({dir:i,instance:n,value:l,oldValue:void 0,arg:r,modifiers:c}))}return e}function At(e,t,n,s){const o=e.dirs,i=t&&t.dirs;for(let l=0;l<o.length;l++){const r=o[l];i&&(r.oldValue=i[l].value);let c=r.dir[s];c&&(st(),Ge(c,n,8,[e.el,r,e,t]),ot())}}function Vl(e,t){if(Pe){let n=Pe.provides;const s=Pe.parent&&Pe.parent.provides;s===n&&(n=Pe.provides=Object.create(s)),n[e]=t}}function In(e,t,n=!1){const s=Br();if(s||Vt){let o=Vt?Vt._context.provides:s?s.parent==null||s.ce?s.vnode.appContext&&s.vnode.appContext.provides:s.parent.provides:void 0;if(o&&e in o)return o[e];if(arguments.length>1)return n&&H(t)?t.call(s&&s.proxy):t}}const Hl=Symbol.for("v-scx"),Kl=()=>In(Hl);function us(e,t,n){return di(e,t,n)}function di(e,t,n=se){const{immediate:s,deep:o,flush:i,once:l}=n,r=Ae({},n),c=t&&s||!t&&i!=="post";let m;if(hn){if(i==="sync"){const R=Kl();m=R.__watcherHandles||(R.__watcherHandles=[])}else if(!c){const R=()=>{};return R.stop=tt,R.resume=tt,R.pause=tt,R}}const h=Pe;r.call=(R,J,I)=>Ge(R,h,J,I);let x=!1;i==="post"?r.scheduler=R=>{Ue(R,h&&h.suspense)}:i!=="sync"&&(x=!0,r.scheduler=(R,J)=>{J?R():Vs(R)}),r.augmentJob=R=>{t&&(R.flags|=4),x&&(R.flags|=2,h&&(R.id=h.uid,R.i=h))};const U=Ll(e,t,r);return hn&&(m?m.push(U):c&&U()),U}function zl(e,t,n){const s=this.proxy,o=ce(e)?e.includes(".")?fi(s,e):()=>s[e]:e.bind(s,s);let i;H(t)?i=t:(i=t.handler,n=t);const l=vn(this),r=di(o,i.bind(s),n);return l(),r}function fi(e,t){const n=t.split(".");return()=>{let s=e;for(let o=0;o<n.length&&s;o++)s=s[n[o]];return s}}const Gl=Symbol("_vte"),Wl=e=>e.__isTeleport,ds=Symbol("_leaveCb");function Hs(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Hs(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function pi(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function io(e,t){let n;return!!((n=Object.getOwnPropertyDescriptor(e,t))&&!n.configurable)}const $n=new WeakMap;function ln(e,t,n,s,o=!1){if(j(e)){e.forEach((I,G)=>ln(I,t&&(j(t)?t[G]:t),n,s,o));return}if(rn(s)&&!o){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&ln(e,t,n,s.component.subTree);return}const i=s.shapeFlag&4?ts(s.component):s.el,l=o?null:i,{i:r,r:c}=e,m=t&&t.r,h=r.refs===se?r.refs={}:r.refs,x=r.setupState,U=X(x),R=x===se?Fo:I=>io(h,I)?!1:Q(U,I),J=(I,G)=>!(G&&io(h,G));if(m!=null&&m!==c){if(lo(t),ce(m))h[m]=null,R(m)&&(x[m]=null);else if(Se(m)){const I=t;J(m,I.k)&&(m.value=null),I.k&&(h[I.k]=null)}}if(H(c)){st();try{gn(c,r,12,[l,h])}finally{ot()}}else{const I=ce(c),G=Se(c);if(I||G){const Y=()=>{if(e.f
Line truncated
|
||||
* @vue/runtime-dom v3.5.39
|
||||
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
||||
* @license MIT
|
||||
**/let Ts;const xo=typeof window<"u"&&window.trustedTypes;if(xo)try{Ts=xo.createPolicy("vue",{createHTML:e=>e})}catch{}const ji=Ts?e=>Ts.createHTML(e):e=>e,Jr="http://www.w3.org/2000/svg",qr="http://www.w3.org/1998/Math/MathML",at=typeof document<"u"?document:null,yo=at&&at.createElement("template"),Yr={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const o=t==="svg"?at.createElementNS(Jr,e):t==="mathml"?at.createElementNS(qr,e):n?at.createElement(e,{is:n}):at.createElement(e);return e==="select"&&s&&s.multiple!=null&&o.setAttribute("multiple",s.multiple),o},createText:e=>at.createTextNode(e),createComment:e=>at.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>at.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,o,i){const l=n?n.previousSibling:t.lastChild;if(o&&(o===i||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),!(o===i||!(o=o.nextSibling)););else{yo.innerHTML=ji(s==="svg"?`<svg>${e}</svg>`:s==="mathml"?`<math>${e}</math>`:e);const r=yo.content;if(s==="svg"||s==="mathml"){const c=r.firstChild;for(;c.firstChild;)r.appendChild(c.firstChild);r.removeChild(c)}t.insertBefore(r,n)}return[l?l.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Zr=Symbol("_vtc");function Xr(e,t,n){const s=e[Zr];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Kn=Symbol("_vod"),$i=Symbol("_vsh"),Zt={name:"show",beforeMount(e,{value:t},{transition:n}){e[Kn]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):Xt(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:s}){!t!=!n&&(s?t?(s.beforeEnter(e),Xt(e,!0),s.enter(e)):s.leave(e,()=>{Xt(e,!1)}):Xt(e,t))},beforeUnmount(e,{value:t}){Xt(e,t)}};function Xt(e,t){e.style.display=t?e[Kn]:"none",e[$i]=!t}const Qr=Symbol(""),ea=/(?:^|;)\s*display\s*:/;function ta(e,t,n){const s=e.style,o=ce(n);let i=!1;if(n&&!o){if(t)if(ce(t))for(const l of t.split(";")){const r=l.slice(0,l.indexOf(":")).trim();n[r]==null&&tn(s,r,"")}else for(const l in t)n[l]==null&&tn(s,l,"");for(const l in n){l==="display"&&(i=!0);const r=n[l];r!=null?sa(e,l,!ce(t)&&t?t[l]:void 0,r)||tn(s,l,r):tn(s,l,"")}}else if(o){if(t!==n){const l=s[Qr];l&&(n+=";"+l),s.cssText=n,i=ea.test(n)}}else t&&e.removeAttribute("style");Kn in e&&(e[Kn]=i?s.display:"",e[$i]&&(s.display="none"))}const _o=/\s*!important$/;function tn(e,t,n){if(j(n))n.forEach(s=>tn(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=na(e,t);_o.test(n)?e.setProperty(yt(s),n.replace(_o,""),"important"):e[s]=n}}const wo=["Webkit","Moz","ms"],hs={};function na(e,t){const n=hs[t];if(n)return n;let s=He(t);if(s!=="filter"&&s in e)return hs[t]=s;s=jo(s);for(let o=0;o<wo.length;o++){const i=wo[o]+s;if(i in e)return hs[t]=i}return t}function sa(e,t,n,s){return e.tagName==="TEXTAREA"&&(t==="width"||t==="height")&&ce(s)&&n===s}const So="http://www.w3.org/1999/xlink";function Ao(e,t,n,s,o,i=al(t)){s&&t.startsWith("xlink:")?n==null?e.removeAttributeNS(So,t.slice(6,t.length)):e.setAttributeNS(So,t,n):n==null||i&&!Bo(n)?e.removeAttribute(t):e.setAttribute(t,i?"":nt(n)?String(n):n)}function Co(e,t,n,s,o){if(t==="innerHTML"||t==="textContent"){n!=null&&(e[t]=t==="innerHTML"?ji(n):n);return}const i=e.tagName;if(t==="value"&&i!=="PROGRESS"&&!i.includes("-")){const r=i==="OPTION"?e.getAttribute("value")||"":e.value,c=n==null?e.type==="checkbox"?"on":"":String(n);(r!==c||!("_value"in e))&&(e.value=c),n==null&&e.removeAttribute(t),e._value=n;return}let l=!1;if(n===""||n==null){const r=typeof e[t];r==="boolean"?n=Bo(n):n==null&&r==="string"?(n="",l=!0):r==="number"&&(n=0,l=!0)}try{e[t]=n}catch{}l&&e.removeAttribute(o||t)}function ft(e,t,n,s){e.addEventListener(t,n,s)}function oa(e,t,n,s){e.removeEventListener(t,n,s)}const Eo=Symbol("_vei");function ia(e,t,n,s,o=null){const i=e[Eo]||(e[Eo]={}),l=i[t];if(s&&l)l.value=s;else{const[r,c]=aa(t);if(s){const m=i[t]=da(s,o);ft(e,r,m,c)}else l&&(oa(e,r,l,c),i[t]=void 0)}}const la=/(Once|Passive|Capture)$/,ra=/^on:?(?:Once|Passive|Capture)$/;function aa(e){let t,n;for(;(n=e.match(la))&&!ra.test(e);)t||(t={}),e=e.slice(0,e.length-n[1].length),t[n[1].toLowerCase()]=!0;return[e[2]===":"?e.slice(3):yt(e.slice(2)),t]}let bs=0;const ca=Promise.resolve(),ua=()=>bs||(ca.then(()=>bs=0),bs=Date.now());function da(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;const o=n.value;if(j(o)){const i=s.stopImmediatePropagation;s.stopImmediatePropagation=()=>{i.call(s),s._stopped=!0};const l=o.slice(),r=[s];for(let c=0;c<l.length&&!s._stopped;c++){const m=l[c];m&&Ge(m,t,5,r)}}else Ge(o,t,5,[s])};return n.value=e,n.attached=ua(),n}const ko=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,fa=(e,t,n,s,o
Line truncated
|
||||
@@ -1 +0,0 @@
|
||||
@import"https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Space+Mono:wght@400;700&display=swap";/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:root,:host{--font-sans:"Space Grotesk", ui-sans-serif, system-ui, "Segoe UI", sans-serif;--font-mono:"Space Mono", ui-monospace, "SFMono-Regular", Menlo, monospace;--spacing:.25rem;--container-sm:24rem;--container-5xl:64rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wider:.05em;--leading-tight:1.25;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:"Space Grotesk", ui-sans-serif, system-ui, "Segoe UI", sans-serif;--default-mono-font-family:"Space Mono", ui-monospace, "SFMono-Regular", Menlo, monospace;--font-display:"Space Grotesk", ui-sans-serif, system-ui, "Segoe UI", sans-serif;--radius-sm:6px;--radius-md:10px}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-fielLine truncated
|
||||
@@ -0,0 +1,17 @@
|
||||
(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))s(o);new MutationObserver(o=>{for(const i of o)if(i.type==="childList")for(const l of i.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&s(l)}).observe(document,{childList:!0,subtree:!0});function n(o){const i={};return o.integrity&&(i.integrity=o.integrity),o.referrerPolicy&&(i.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?i.credentials="include":o.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function s(o){if(o.ep)return;o.ep=!0;const i=n(o);fetch(o.href,i)}})();/**
|
||||
* @vue/shared v3.5.39
|
||||
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
||||
* @license MIT
|
||||
**/function Is(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const oe={},Gt=[],rt=()=>{},Bo=()=>!1,Yn=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Zn=e=>e.startsWith("onUpdate:"),Se=Object.assign,Rs=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},il=Object.prototype.hasOwnProperty,ee=(e,t)=>il.call(e,t),B=Array.isArray,Wt=e=>_n(e)==="[object Map]",Qt=e=>_n(e)==="[object Set]",oo=e=>_n(e)==="[object Date]",V=e=>typeof e=="function",ae=e=>typeof e=="string",at=e=>typeof e=="symbol",se=e=>e!==null&&typeof e=="object",$o=e=>(se(e)||V(e))&&V(e.then)&&V(e.catch),jo=Object.prototype.toString,_n=e=>jo.call(e),ll=e=>_n(e).slice(8,-1),Vo=e=>_n(e)==="[object Object]",Fs=e=>ae(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,an=Is(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Xn=e=>{const t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},rl=/-\w/g,Je=Xn(e=>e.replace(rl,t=>t.slice(1).toUpperCase())),al=/\B([A-Z])/g,At=Xn(e=>e.replace(al,"-$1").toLowerCase()),Ho=Xn(e=>e.charAt(0).toUpperCase()+e.slice(1)),cs=Xn(e=>e?`on${Ho(e)}`:""),lt=(e,t)=>!Object.is(e,t),Dn=(e,...t)=>{for(let n=0;n<e.length;n++)e[n](...t)},Ko=(e,t,n,s=!1)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},Qn=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let io;const es=()=>io||(io=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Ns(e){if(B(e)){const t={};for(let n=0;n<e.length;n++){const s=e[n],o=ae(s)?fl(s):Ns(s);if(o)for(const i in o)t[i]=o[i]}return t}else if(ae(e)||se(e))return e}const cl=/;(?![^(]*\))/g,ul=/:([^]+)/,dl=/\/\*[^]*?\*\//g;function fl(e){const t={};return e.replace(dl,"").split(cl).forEach(n=>{if(n){const s=n.split(ul);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function Fe(e){let t="";if(ae(e))t=e;else if(B(e))for(let n=0;n<e.length;n++){const s=Fe(e[n]);s&&(t+=s+" ")}else if(se(e))for(const n in e)e[n]&&(t+=n+" ");return t.trim()}const pl="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",hl=Is(pl);function zo(e){return!!e||e===""}function bl(e,t){if(e.length!==t.length)return!1;let n=!0;for(let s=0;n&&s<e.length;s++)n=_t(e[s],t[s]);return n}function _t(e,t){if(e===t)return!0;let n=oo(e),s=oo(t);if(n||s)return n&&s?e.getTime()===t.getTime():!1;if(n=at(e),s=at(t),n||s)return e===t;if(n=B(e),s=B(t),n||s)return n&&s?bl(e,t):!1;if(n=se(e),s=se(t),n||s){if(!n||!s)return!1;const o=Object.keys(e).length,i=Object.keys(t).length;if(o!==i)return!1;for(const l in e){const r=e.hasOwnProperty(l),u=t.hasOwnProperty(l);if(r&&!u||!r&&u||!_t(e[l],t[l]))return!1}}return String(e)===String(t)}function Ls(e,t){return e.findIndex(n=>_t(n,t))}const Go=e=>!!(e&&e.__v_isRef===!0),O=e=>ae(e)?e:e==null?"":B(e)||se(e)&&(e.toString===jo||!V(e.toString))?Go(e)?O(e.value):JSON.stringify(e,Wo,2):String(e),Wo=(e,t)=>Go(t)?Wo(e,t.value):Wt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,o],i)=>(n[us(s,i)+" =>"]=o,n),{})}:Qt(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>us(n))}:at(t)?us(t):se(t)&&!B(t)&&!Vo(t)?String(t):t,us=(e,t="")=>{var n;return at(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/**
|
||||
* @vue/reactivity v3.5.39
|
||||
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
||||
* @license MIT
|
||||
**/let ge;class ml{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!t&&ge&&(ge.active?(this.parent=ge,this.index=(ge.scopes||(ge.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t<n;t++)this.scopes[t].pause();for(t=0,n=this.effects.length;t<n;t++)this.effects[t].pause()}}resume(){if(this._active&&this._isPaused){this._isPaused=!1;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t<n;t++)this.scopes[t].resume();for(t=0,n=this.effects.length;t<n;t++)this.effects[t].resume()}}run(t){if(this._active){const n=ge;try{return ge=this,t()}finally{ge=n}}}on(){++this._on===1&&(this.prevScope=ge,ge=this)}off(){if(this._on>0&&--this._on===0){if(ge===this)ge=this.prevScope;else{let t=ge;for(;t;){if(t.prevScope===this){t.prevScope=this.prevScope;break}t=t.prevScope}}this.prevScope=void 0}}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n<s;n++)this.effects[n].stop();for(this.effects.length=0,n=0,s=this.cleanups.length;n<s;n++)this.cleanups[n]();if(this.cleanups.length=0,this.scopes){for(n=0,s=this.scopes.length;n<s;n++)this.scopes[n].stop(!0);this.scopes.length=0}if(!this.detached&&this.parent&&!t){const o=this.parent.scopes.pop();o&&o!==this&&(this.parent.scopes[this.index]=o,o.index=this.index)}this.parent=void 0}}}function gl(){return ge}let le;const ds=new WeakSet;class Jo{constructor(t){this.fn=t,this.deps=void 0,this.depsTail=void 0,this.flags=5,this.next=void 0,this.cleanup=void 0,this.scheduler=void 0,ge&&(ge.active?ge.effects.push(this):this.flags&=-2)}pause(){this.flags|=64}resume(){this.flags&64&&(this.flags&=-65,ds.has(this)&&(ds.delete(this),this.trigger()))}notify(){this.flags&2&&!(this.flags&32)||this.flags&8||Yo(this)}run(){if(!(this.flags&1))return this.fn();this.flags|=2,lo(this),Zo(this);const t=le,n=qe;le=this,qe=!0;try{return this.fn()}finally{Xo(this),le=t,qe=n,this.flags&=-3}}stop(){if(this.flags&1){for(let t=this.deps;t;t=t.nextDep)$s(t);this.deps=this.depsTail=void 0,lo(this),this.onStop&&this.onStop(),this.flags&=-2}}trigger(){this.flags&64?ds.add(this):this.scheduler?this.scheduler():this.runIfDirty()}runIfDirty(){_s(this)&&this.run()}get dirty(){return _s(this)}}let qo=0,cn,un;function Yo(e,t=!1){if(e.flags|=8,t){e.next=un,un=e;return}e.next=cn,cn=e}function Ds(){qo++}function Bs(){if(--qo>0)return;if(un){let t=un;for(un=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;cn;){let t=cn;for(cn=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function Zo(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Xo(e){let t,n=e.depsTail,s=n;for(;s;){const o=s.prevDep;s.version===-1?(s===n&&(n=o),$s(s),vl(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=o}e.deps=t,e.depsTail=n}function _s(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Qo(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Qo(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===bn)||(e.globalVersion=bn,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!_s(e))))return;e.flags|=2;const t=e.dep,n=le,s=qe;le=e,qe=!0;try{Zo(e);const o=e.fn(e._value);(t.version===0||lt(o,e._value))&&(e.flags|=128,e._value=o,t.version++)}catch(o){throw t.version++,o}finally{le=n,qe=s,Xo(e),e.flags&=-3}}function $s(e,t=!1){const{dep:n,prevSub:s,nextSub:o}=e;if(s&&(s.nextSub=o,e.prevSub=void 0),o&&(o.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)$s(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function vl(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let qe=!0;const ei=[];function ct(){ei.push(qe),qe=!1}function ut(){const e=ei.pop();qe=e===void 0?!0:e}function lo(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=le;le=void 0;try{t()}finally{le=n}}}let bn=0;class xl{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class js{constructor(t){this.computed=t,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(t){if(!le||!qe||le===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==le)n=this.activeLink=new xl(le,this),le.deps?(n.prevDep=le.depsTail,le.depsTail.nextDep=n,le.depsTail=n):le.deps=le.depsTail=n,ti(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=le.depsTail,n.nextDep=void 0,le.depsTail.nextDep=n,le.depsTail=n,le.deps===n&&(le.deps=s)}return n}trigger(t){this.versiLine truncated
|
||||
* @vue/runtime-core v3.5.39
|
||||
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
||||
* @license MIT
|
||||
**/function wn(e,t,n,s){try{return s?e(...s):e()}catch(o){ns(o,t,n)}}function Ze(e,t,n,s){if(V(e)){const o=wn(e,t,n,s);return o&&$o(o)&&o.catch(i=>{ns(i,t,n)}),o}if(B(e)){const o=[];for(let i=0;i<e.length;i++)o.push(Ze(e[i],t,n,s));return o}}function ns(e,t,n,s=!0){const o=t?t.vnode:null,{errorHandler:i,throwUnhandledErrorInProduction:l}=t&&t.appContext.config||oe;if(t){let r=t.parent;const u=t.proxy,m=`https://vuejs.org/error-reference/#runtime-${n}`;for(;r;){const h=r.ec;if(h){for(let y=0;y<h.length;y++)if(h[y](e,u,m)===!1)return}r=r.parent}if(i){ct(),wn(i,null,10,[e,u,m]),ut();return}}Kl(e,n,o,s,l)}function Kl(e,t,n,s=!0,o=!1){if(o)throw e;console.error(e)}const ke=[];let st=-1;const Jt=[];let yt=null,Kt=0;const ci=Promise.resolve();let Hn=null;function ui(e){const t=Hn||ci;return e?t.then(this?e.bind(this):e):t}function zl(e){let t=st+1,n=ke.length;for(;t<n;){const s=t+n>>>1,o=ke[s],i=gn(o);i<e||i===e&&o.flags&2?t=s+1:n=s}return t}function Gs(e){if(!(e.flags&1)){const t=gn(e),n=ke[ke.length-1];!n||!(e.flags&2)&&t>=gn(n)?ke.push(e):ke.splice(zl(t),0,e),e.flags|=1,di()}}function di(){Hn||(Hn=ci.then(pi))}function Gl(e){B(e)?Jt.push(...e):yt&&e.id===-1?yt.splice(Kt+1,0,e):e.flags&1||(Jt.push(e),e.flags|=1),di()}function ao(e,t,n=st+1){for(;n<ke.length;n++){const s=ke[n];if(s&&s.flags&2){if(e&&s.id!==e.uid)continue;ke.splice(n,1),n--,s.flags&4&&(s.flags&=-2),s(),s.flags&4||(s.flags&=-2)}}}function fi(e){if(Jt.length){const t=[...new Set(Jt)].sort((n,s)=>gn(n)-gn(s));if(Jt.length=0,yt){yt.push(...t);return}for(yt=t,Kt=0;Kt<yt.length;Kt++){const n=yt[Kt];n.flags&4&&(n.flags&=-2),n.flags&8||n(),n.flags&=-2}yt=null,Kt=0}}const gn=e=>e.id==null?e.flags&2?-1:1/0:e.id;function pi(e){try{for(st=0;st<ke.length;st++){const t=ke[st];t&&!(t.flags&8)&&(t.flags&4&&(t.flags&=-2),wn(t,t.i,t.i?15:14),t.flags&4||(t.flags&=-2))}}finally{for(;st<ke.length;st++){const t=ke[st];t&&(t.flags&=-2)}st=-1,ke.length=0,fi(),Hn=null,(ke.length||Jt.length)&&pi()}}let Ke=null,hi=null;function Kn(e){const t=Ke;return Ke=e,hi=e&&e.type.__scopeId||null,t}function Wl(e,t=Ke,n){if(!t||e._n)return e;const s=(...o)=>{s._d&&yo(-1);const i=Kn(t);let l;try{l=e(...o)}finally{Kn(i),s._d&&yo(1)}return l};return s._n=!0,s._c=!0,s._d=!0,s}function ie(e,t){if(Ke===null)return e;const n=ls(Ke),s=e.dirs||(e.dirs=[]);for(let o=0;o<t.length;o++){let[i,l,r,u=oe]=t[o];i&&(V(i)&&(i={mounted:i,updated:i}),i.deep&&mt(l),s.push({dir:i,instance:n,value:l,oldValue:void 0,arg:r,modifiers:u}))}return e}function Ot(e,t,n,s){const o=e.dirs,i=t&&t.dirs;for(let l=0;l<o.length;l++){const r=o[l];i&&(r.oldValue=i[l].value);let u=r.dir[s];u&&(ct(),Ze(u,n,8,[e.el,r,e,t]),ut())}}function Jl(e,t){if(Te){let n=Te.provides;const s=Te.parent&&Te.parent.provides;s===n&&(n=Te.provides=Object.create(s)),n[e]=t}}function Bn(e,t,n=!1){const s=Wr();if(s||qt){let o=qt?qt._context.provides:s?s.parent==null||s.ce?s.vnode.appContext&&s.vnode.appContext.provides:s.parent.provides:void 0;if(o&&e in o)return o[e];if(arguments.length>1)return n&&V(t)?t.call(s&&s.proxy):t}}const ql=Symbol.for("v-scx"),Yl=()=>Bn(ql);function hs(e,t,n){return bi(e,t,n)}function bi(e,t,n=oe){const{immediate:s,deep:o,flush:i,once:l}=n,r=Se({},n),u=t&&s||!t&&i!=="post";let m;if(xn){if(i==="sync"){const M=Yl();m=M.__watcherHandles||(M.__watcherHandles=[])}else if(!u){const M=()=>{};return M.stop=rt,M.resume=rt,M.pause=rt,M}}const h=Te;r.call=(M,J,I)=>Ze(M,h,J,I);let y=!1;i==="post"?r.scheduler=M=>{Oe(M,h&&h.suspense)}:i!=="sync"&&(y=!0,r.scheduler=(M,J)=>{J?M():Gs(M)}),r.augmentJob=M=>{t&&(M.flags|=4),y&&(M.flags|=2,h&&(M.id=h.uid,M.i=h))};const U=Hl(e,t,r);return xn&&(m?m.push(U):u&&U()),U}function Zl(e,t,n){const s=this.proxy,o=ae(e)?e.includes(".")?mi(s,e):()=>s[e]:e.bind(s,s);let i;V(t)?i=t:(i=t.handler,n=t);const l=Sn(this),r=bi(o,i.bind(s),n);return l(),r}function mi(e,t){const n=t.split(".");return()=>{let s=e;for(let o=0;o<n.length&&s;o++)s=s[n[o]];return s}}const Xl=Symbol("_vte"),Ql=e=>e.__isTeleport,bs=Symbol("_leaveCb");function Ws(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Ws(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function gi(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function co(e,t){let n;return!!((n=Object.getOwnPropertyDescriptor(e,t))&&!n.configurable)}const zn=new WeakMap;function dn(e,t,n,s,o=!1){if(B(e)){e.forEach((I,z)=>dn(I,t&&(B(t)?t[z]:t),n,s,o));return}if(fn(s)&&!o){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&dn(e,t,n,s.component.subTree);return}const i=s.shapeFlag&4?ls(s.component):s.el,l=o?null:i,{i:r,r:u}=e,m=t&&t.r,h=r.refs===oe?r.refs={}:r.refs,y=r.setupState,U=Q(y),M=y===oe?Bo:I=>co(h,I)?!1:ee(U,I),J=(I,z)=>!(z&&co(h,z));if(m!=null&&m!==u){if(uo(t),ae(m))h[m]=null,M(m)&&(y[m]=null);else if(we(m)){const I=t;J(m,I.k)&&(m.value=null),I.k&&(h[I.k]=null)}}if(V(u)){ct();try{wn(u,r,12,[l,h])}finally{ut()}}else{const I=ae(u),z=we(u);if(I||z){const Y=()=>{if(e.
Line truncated
|
||||
* @vue/runtime-dom v3.5.39
|
||||
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
||||
* @license MIT
|
||||
**/let Ms;const So=typeof window<"u"&&window.trustedTypes;if(So)try{Ms=So.createPolicy("vue",{createHTML:e=>e})}catch{}const Hi=Ms?e=>Ms.createHTML(e):e=>e,ea="http://www.w3.org/2000/svg",ta="http://www.w3.org/1998/Math/MathML",pt=typeof document<"u"?document:null,Ao=pt&&pt.createElement("template"),na={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const o=t==="svg"?pt.createElementNS(ea,e):t==="mathml"?pt.createElementNS(ta,e):n?pt.createElement(e,{is:n}):pt.createElement(e);return e==="select"&&s&&s.multiple!=null&&o.setAttribute("multiple",s.multiple),o},createText:e=>pt.createTextNode(e),createComment:e=>pt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>pt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,o,i){const l=n?n.previousSibling:t.lastChild;if(o&&(o===i||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),!(o===i||!(o=o.nextSibling)););else{Ao.innerHTML=Hi(s==="svg"?`<svg>${e}</svg>`:s==="mathml"?`<math>${e}</math>`:e);const r=Ao.content;if(s==="svg"||s==="mathml"){const u=r.firstChild;for(;u.firstChild;)r.appendChild(u.firstChild);r.removeChild(u)}t.insertBefore(r,n)}return[l?l.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},sa=Symbol("_vtc");function oa(e,t,n){const s=e[sa];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const qn=Symbol("_vod"),Ki=Symbol("_vsh"),nn={name:"show",beforeMount(e,{value:t},{transition:n}){e[qn]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):sn(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:s}){!t!=!n&&(s?t?(s.beforeEnter(e),sn(e,!0),s.enter(e)):s.leave(e,()=>{sn(e,!1)}):sn(e,t))},beforeUnmount(e,{value:t}){sn(e,t)}};function sn(e,t){e.style.display=t?e[qn]:"none",e[Ki]=!t}const ia=Symbol(""),la=/(?:^|;)\s*display\s*:/;function ra(e,t,n){const s=e.style,o=ae(n);let i=!1;if(n&&!o){if(t)if(ae(t))for(const l of t.split(";")){const r=l.slice(0,l.indexOf(":")).trim();n[r]==null&&rn(s,r,"")}else for(const l in t)n[l]==null&&rn(s,l,"");for(const l in n){l==="display"&&(i=!0);const r=n[l];r!=null?ca(e,l,!ae(t)&&t?t[l]:void 0,r)||rn(s,l,r):rn(s,l,"")}}else if(o){if(t!==n){const l=s[ia];l&&(n+=";"+l),s.cssText=n,i=la.test(n)}}else t&&e.removeAttribute("style");qn in e&&(e[qn]=i?s.display:"",e[Ki]&&(s.display="none"))}const Co=/\s*!important$/;function rn(e,t,n){if(B(n))n.forEach(s=>rn(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=aa(e,t);Co.test(n)?e.setProperty(At(s),n.replace(Co,""),"important"):e[s]=n}}const Eo=["Webkit","Moz","ms"],vs={};function aa(e,t){const n=vs[t];if(n)return n;let s=Je(t);if(s!=="filter"&&s in e)return vs[t]=s;s=Ho(s);for(let o=0;o<Eo.length;o++){const i=Eo[o]+s;if(i in e)return vs[t]=i}return t}function ca(e,t,n,s){return e.tagName==="TEXTAREA"&&(t==="width"||t==="height")&&ae(s)&&n===s}const ko="http://www.w3.org/1999/xlink";function To(e,t,n,s,o,i=hl(t)){s&&t.startsWith("xlink:")?n==null?e.removeAttributeNS(ko,t.slice(6,t.length)):e.setAttributeNS(ko,t,n):n==null||i&&!zo(n)?e.removeAttribute(t):e.setAttribute(t,i?"":at(n)?String(n):n)}function Po(e,t,n,s,o){if(t==="innerHTML"||t==="textContent"){n!=null&&(e[t]=t==="innerHTML"?Hi(n):n);return}const i=e.tagName;if(t==="value"&&i!=="PROGRESS"&&!i.includes("-")){const r=i==="OPTION"?e.getAttribute("value")||"":e.value,u=n==null?e.type==="checkbox"?"on":"":String(n);(r!==u||!("_value"in e))&&(e.value=u),n==null&&e.removeAttribute(t),e._value=n;return}let l=!1;if(n===""||n==null){const r=typeof e[t];r==="boolean"?n=zo(n):n==null&&r==="string"?(n="",l=!0):r==="number"&&(n=0,l=!0)}try{e[t]=n}catch{}l&&e.removeAttribute(o||t)}function gt(e,t,n,s){e.addEventListener(t,n,s)}function ua(e,t,n,s){e.removeEventListener(t,n,s)}const Oo=Symbol("_vei");function da(e,t,n,s,o=null){const i=e[Oo]||(e[Oo]={}),l=i[t];if(s&&l)l.value=s;else{const[r,u]=ha(t);if(s){const m=i[t]=ga(s,o);gt(e,r,m,u)}else l&&(ua(e,r,l,u),i[t]=void 0)}}const fa=/(Once|Passive|Capture)$/,pa=/^on:?(?:Once|Passive|Capture)$/;function ha(e){let t,n;for(;(n=e.match(fa))&&!pa.test(e);)t||(t={}),e=e.slice(0,e.length-n[1].length),t[n[1].toLowerCase()]=!0;return[e[2]===":"?e.slice(3):At(e.slice(2)),t]}let xs=0;const ba=Promise.resolve(),ma=()=>xs||(ba.then(()=>xs=0),xs=Date.now());function ga(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;const o=n.value;if(B(o)){const i=s.stopImmediatePropagation;s.stopImmediatePropagation=()=>{i.call(s),s._stopped=!0};const l=o.slice(),r=[s];for(let u=0;u<l.length&&!s._stopped;u++){const m=l[u];m&&Ze(m,t,5,r)}}else Ze(o,t,5,[s])};return n.value=e,n.attached=ma(),n}const Uo=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,va=(e,t,n,s,o
Line truncated
|
||||
+2
-2
@@ -6,8 +6,8 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<meta name="theme-color" content="#0F1E3D" />
|
||||
<title>PilotVault · API Server</title>
|
||||
<script type="module" crossorigin src="/assets/index-B8Dqe_UO.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-CVh8EDzq.css">
|
||||
<script type="module" crossorigin src="/assets/index-Dh-j3HLZ.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-4CKxSIBg.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
|
||||
@@ -536,11 +536,17 @@ func (s *Server) handleOpenSkyHealth(w http.ResponseWriter, r *http.Request) {
|
||||
"status": "down", "detail": "OpenSky is disabled for your organization"}})
|
||||
return
|
||||
}
|
||||
// A ?bbox= override lets the Settings "Test connection" probe a specific area
|
||||
// (to check its credit cost) without changing the saved default.
|
||||
bbox := res.eff.Bbox
|
||||
if q := strings.TrimSpace(r.URL.Query().Get("bbox")); q != "" && validBBox(q) {
|
||||
bbox = q
|
||||
}
|
||||
cfg := map[string]string{
|
||||
"clientId": res.eff.ClientID,
|
||||
"clientSecret": res.eff.ClientSecret,
|
||||
"plan": res.eff.Plan,
|
||||
"bbox": res.eff.Bbox,
|
||||
"bbox": bbox,
|
||||
"allowAnonymous": boolStr(res.allowAnon),
|
||||
}
|
||||
h, err := s.plugins.HealthCheckWith(r.Context(), openSkyPlugin, cfg)
|
||||
|
||||
@@ -93,9 +93,41 @@ func (s *Server) handleDeletePlugin(w http.ResponseWriter, r *http.Request) {
|
||||
writeJSON(w, http.StatusOK, map[string]any{"ok": true})
|
||||
}
|
||||
|
||||
// POST /api/admin/plugins/{name}/health — run a health check now.
|
||||
// POST /api/admin/plugins/{name}/health — run a health check now. An optional
|
||||
// ?bbox= overrides the plugin's stored bounding box for this probe only (used by
|
||||
// the panel to test-probe OpenSky over a smaller, cheaper area without changing
|
||||
// the saved default). Ignored by plugins that don't use a bbox.
|
||||
func (s *Server) handlePluginHealth(w http.ResponseWriter, r *http.Request) {
|
||||
h, err := s.plugins.HealthCheck(r.Context(), r.PathValue("name"))
|
||||
name := r.PathValue("name")
|
||||
|
||||
if bbox := strings.TrimSpace(r.URL.Query().Get("bbox")); bbox != "" {
|
||||
if !validBBox(bbox) {
|
||||
writeError(w, http.StatusBadRequest, "invalid bbox")
|
||||
return
|
||||
}
|
||||
cfg, _, ok := s.plugins.RawConfig(name)
|
||||
if !ok {
|
||||
writeError(w, http.StatusNotFound, "unknown plugin")
|
||||
return
|
||||
}
|
||||
if cfg == nil {
|
||||
cfg = map[string]string{}
|
||||
}
|
||||
cfg["bbox"] = bbox
|
||||
h, err := s.plugins.HealthCheckWith(r.Context(), name, cfg)
|
||||
if err != nil {
|
||||
if plugins.IsUnknown(err) {
|
||||
writeError(w, http.StatusNotFound, "unknown plugin")
|
||||
return
|
||||
}
|
||||
writeJSON(w, http.StatusBadGateway, map[string]any{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
writeJSON(w, http.StatusOK, map[string]any{"health": h})
|
||||
return
|
||||
}
|
||||
|
||||
h, err := s.plugins.HealthCheck(r.Context(), name)
|
||||
if err != nil {
|
||||
if plugins.IsUnknown(err) {
|
||||
writeError(w, http.StatusNotFound, "unknown plugin")
|
||||
|
||||
@@ -217,6 +217,41 @@ function setBboxSelect(key, v) {
|
||||
bboxCustom.value = { ...bboxCustom.value, [key]: false };
|
||||
editConfig.value[key] = v;
|
||||
}
|
||||
|
||||
// ---- Probe bounding box (Check-only override) ----------------------------
|
||||
// A plugin can be test-probed over a specific area without touching its saved
|
||||
// config, so OpenSky's credit cost (which scales with box size) can be checked
|
||||
// cheaply. State is per plugin name; empty value = "saved default" (no override).
|
||||
const probeBbox = ref({}); // name -> bbox string ("" = saved default)
|
||||
const probeBboxCustom = ref({}); // name -> in "Custom…" mode
|
||||
function pluginHasBbox(p) {
|
||||
return !!(p.configFields && p.configFields.some((f) => f.type === "bbox"));
|
||||
}
|
||||
function probeBboxSelectValue(name) {
|
||||
if (probeBboxCustom.value[name]) return "__custom__";
|
||||
const v = probeBbox.value[name];
|
||||
if (!v) return "__default__";
|
||||
const norm = normBbox(v);
|
||||
const match = norm && BBOX_FLAT.find((o) => normBbox(o.value) === norm);
|
||||
return match ? match.value : "__custom__";
|
||||
}
|
||||
function setProbeBbox(name, v) {
|
||||
if (v === "__default__") {
|
||||
probeBboxCustom.value = { ...probeBboxCustom.value, [name]: false };
|
||||
probeBbox.value = { ...probeBbox.value, [name]: "" };
|
||||
return;
|
||||
}
|
||||
if (v === "__custom__") {
|
||||
probeBboxCustom.value = { ...probeBboxCustom.value, [name]: true };
|
||||
return;
|
||||
}
|
||||
probeBboxCustom.value = { ...probeBboxCustom.value, [name]: false };
|
||||
probeBbox.value = { ...probeBbox.value, [name]: v };
|
||||
}
|
||||
function setProbeBboxCustom(name, v) {
|
||||
probeBbox.value = { ...probeBbox.value, [name]: v };
|
||||
}
|
||||
|
||||
const newExt = ref({ name: "", baseURL: "", provider: "" });
|
||||
const newExtErr = ref("");
|
||||
const newExtBusy = ref(false);
|
||||
@@ -348,7 +383,10 @@ async function checkPlugin(p) {
|
||||
busyPlugin.value = p.name;
|
||||
pluginsMsg.value = "";
|
||||
try {
|
||||
const r = await fetch(`/api/admin/plugins/${encodeURIComponent(p.name)}/health`, {
|
||||
// A probe area (if chosen) overrides the saved bbox for this check only.
|
||||
const area = (probeBbox.value[p.name] || "").trim();
|
||||
const qs = area ? `?bbox=${encodeURIComponent(area)}` : "";
|
||||
const r = await fetch(`/api/admin/plugins/${encodeURIComponent(p.name)}/health${qs}`, {
|
||||
method: "POST",
|
||||
headers: authHeaders(),
|
||||
});
|
||||
@@ -1303,6 +1341,27 @@ const deviceApi = [
|
||||
{{ p.enabled ? "Enabled" : "Disabled" }}
|
||||
</button>
|
||||
<button v-if="p.configFields && p.configFields.length" class="pv-btn-sec pv-btn-sm" @click="startPluginEdit(p)">Configure</button>
|
||||
<template v-if="pluginHasBbox(p)">
|
||||
<select
|
||||
:value="probeBboxSelectValue(p.name)"
|
||||
class="pv-input pv-input-sm max-w-[11rem]"
|
||||
title="Bounding box used for this Check — smaller areas cost fewer OpenSky credits"
|
||||
@change="setProbeBbox(p.name, $event.target.value)"
|
||||
>
|
||||
<option value="__default__">Probe: saved default</option>
|
||||
<optgroup v-for="g in BBOX_GROUPS" :key="g.label" :label="g.label">
|
||||
<option v-for="o in g.options" :key="o.value" :value="o.value">{{ o.label }}</option>
|
||||
</optgroup>
|
||||
<option value="__custom__">Custom…</option>
|
||||
</select>
|
||||
<input
|
||||
v-if="probeBboxSelectValue(p.name) === '__custom__'"
|
||||
:value="probeBbox[p.name] || ''"
|
||||
class="pv-input pv-input-sm w-40 font-mono"
|
||||
placeholder="lamin,lomin,lamax,lomax"
|
||||
@input="setProbeBboxCustom(p.name, $event.target.value)"
|
||||
/>
|
||||
</template>
|
||||
<button class="pv-btn-sec pv-btn-sm" :disabled="busyPlugin === p.name" @click="checkPlugin(p)">Check</button>
|
||||
<button v-if="p.kind === 'external'" class="pv-btn-sec pv-btn-sm !text-danger" :disabled="busyPlugin === p.name" @click="removePlugin(p)">Remove</button>
|
||||
</div>
|
||||
|
||||
@@ -210,6 +210,15 @@ h1, h2, h3 {
|
||||
border-radius: var(--radius-sm);
|
||||
}
|
||||
|
||||
/* Compact input to sit inline with pv-btn-sm (auto width, not full-width) */
|
||||
@utility pv-input-sm {
|
||||
width: auto;
|
||||
height: 32px;
|
||||
padding: 0 8px;
|
||||
font-size: 0.75rem;
|
||||
border-radius: var(--radius-sm);
|
||||
}
|
||||
|
||||
/* Primary button */
|
||||
@utility pv-btn {
|
||||
display: inline-flex;
|
||||
|
||||
@@ -229,7 +229,12 @@ func (a *App) handlePutOpenSky(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
// POST /bff/integrations/opensky/health → API Server /api/integrations/opensky/health
|
||||
func (a *App) handleOpenSkyHealth(w http.ResponseWriter, r *http.Request) {
|
||||
req, _ := http.NewRequest(http.MethodPost, a.apiBaseFor(r)+"/api/integrations/opensky/health", nil)
|
||||
target := a.apiBaseFor(r) + "/api/integrations/opensky/health"
|
||||
// Forward the optional ?bbox= probe-area override from Test connection.
|
||||
if r.URL.RawQuery != "" {
|
||||
target += "?" + r.URL.RawQuery
|
||||
}
|
||||
req, _ := http.NewRequest(http.MethodPost, target, nil)
|
||||
req.Header.Set("Authorization", tokenOf(r))
|
||||
a.doRelay(w, req)
|
||||
}
|
||||
|
||||
-20
@@ -1,20 +0,0 @@
|
||||
(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
|
||||
+20
@@ -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 _t={},Io=[],Jn=()=>{},yu=()=>!1,Ma=t=>t.charCodeAt(0)===111&&t.charCodeAt(1)===110&&(t.charCodeAt(2)>122||t.charCodeAt(2)<97),Ea=t=>t.startsWith("onUpdate:"),Nt=Object.assign,zr=(t,i)=>{const s=t.indexOf(i);s>-1&&t.splice(s,1)},fd=Object.prototype.hasOwnProperty,ht=(t,i)=>fd.call(t,i),De=Array.isArray,$o=t=>Fs(t)==="[object Map]",Zo=t=>Fs(t)==="[object Set]",_l=t=>Fs(t)==="[object Date]",Je=t=>typeof t=="function",Tt=t=>typeof t=="string",Un=t=>typeof t=="symbol",pt=t=>t!==null&&typeof t=="object",xu=t=>(pt(t)||Je(t))&&Je(t.then)&&Je(t.catch),wu=Object.prototype.toString,Fs=t=>wu.call(t),hd=t=>Fs(t).slice(8,-1),ku=t=>Fs(t)==="[object Object]",Ir=t=>Tt(t)&&t!=="NaN"&&t[0]!=="-"&&""+parseInt(t,10)===t,ks=Or(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Oa=t=>{const i=Object.create(null);return(s=>i[s]||(i[s]=t(s)))},pd=/-\w/g,Rn=Oa(t=>t.replace(pd,i=>i.slice(1).toUpperCase())),md=/\B([A-Z])/g,Bi=Oa(t=>t.replace(md,"-$1").toLowerCase()),Su=Oa(t=>t.charAt(0).toUpperCase()+t.slice(1)),tr=Oa(t=>t?`on${Su(t)}`:""),Yn=(t,i)=>!Object.is(t,i),ga=(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})},za=t=>{const i=parseFloat(t);return isNaN(i)?t:i},gd=t=>{const i=Tt(t)?Number(t):NaN;return isNaN(i)?t:i};let bl;const Ia=()=>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=Tt(l)?yd(l):Bo(l);if(u)for(const d in u)i[d]=u[d]}return i}else if(Tt(t)||pt(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(Tt(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(pt(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=Di(t[l],i[l]);return s}function Di(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=Un(t),l=Un(i),s||l)return t===i;if(s=De(t),l=De(i),s||l)return s&&l?kd(t,i):!1;if(s=pt(t),l=pt(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||!Di(t[h],i[h]))return!1}}return String(t)===String(i)}function $r(t,i){return t.findIndex(s=>Di(s,i))}const Cu=t=>!!(t&&t.__v_isRef===!0),S=t=>Tt(t)?t:t==null?"":De(t)||pt(t)&&(t.toString===wu||!Je(t.toString))?Cu(t)?S(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))}:Un(i)?nr(i):pt(i)&&!De(i)&&!ku(i)?String(i):i,nr=(t,i="")=>{var s;return Un(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 Rt;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&&Rt&&(Rt.active?(this.parent=Rt,this.index=(Rt.scopes||(Rt.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=Rt;try{return Rt=this,i()}finally{Rt=s}}}on(){++this._on===1&&(this.prevScope=Rt,Rt=this)}off(){if(this._on>0&&--this._on===0){if(Rt===this)Rt=this.prevScope;else{let i=Rt;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 Rt}let xt;const ir=new WeakSet;class Au{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,Rt&&(Rt.active?Rt.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=xt,s=Bn;xt=this,Bn=!0;try{return this.fn()}finally{zu(this),xt=i,Bn=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 Mu=0,Ss,Ts;function Eu(t,i=!1){if(t.flags|=8,i){t.next=Ts,Ts=t;return}t.next=Ss,Ss=t}function Nr(){Mu++}function Dr(){if(--Mu>0)return;if(Ts){let i=Ts;for(Ts=void 0;i;){const s=i.next;i.next=void 0,i.flags&=-9,i=s}}let t;for(;Ss;){let i=Ss;for(Ss=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=xt,l=Bn;xt=t,Bn=!0;try{Ou(t);const u=t.fn(t._value);(i.version===0||Yn(u,t._value))&&(t.flags|=128,t._value=u,i.version++)}catch(u){throw i.version++,u}finally{xt=s,Bn=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 Bn=!0;const $u=[];function Xn(){$u.push(Bn),Bn=!1}function Qn(){const t=$u.pop();Bn=t===void 0?!0:t}function yl(t){const{cleanup:i}=t;if(t.cleanup=void 0,i){const s=xt;xt=void 0;try{i()}finally{xt=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(!xt||!Bn||xt===this.computed)return;let s=this.activeLink;if(s===void 0||s.sub!==xt)s=this.activeLink=new Cd(xt,this),xt.deps?(s.prevDep=xt.depsTail,xt.depsTail.nextDep=s,xt.depsTail=s):xt.deps=xt.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=xt.depsTail,s.nextDep=void 0,xt.depsTail.nextDep=s,xt.depsTail=s,xt.deps===s&&(xt.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 Rs(t,i,s,l){try{return l?t(...l):t()}catch(u){Na(u,i,s)}}function An(t,i,s,l){if(Je(t)){const u=Rs(t,i,s,l);return u&&xu(u)&&u.catch(d=>{Na(d,i,s)}),u}if(De(t)){const u=[];for(let d=0;d<t.length;d++)u.push(An(t[d],i,s,l));return u}}function Na(t,i,s,l=!0){const u=i?i.vnode:null,{errorHandler:d,throwUnhandledErrorInProduction:h}=i&&i.appContext.config||_t;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 A=0;A<T.length;A++)if(T[A](t,b,C)===!1)return}v=v.parent}if(d){Xn(),Rs(d,null,10,[t,b,C]),Qn();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 Kn=-1;const No=[];let Ni=null,zo=0;const Hu=Promise.resolve();let ba=null;function ju(t){const i=ba||Hu;return t?i.then(this?t.bind(this):t):i}function Qd(t){let i=Kn+1,s=Xt.length;for(;i<s;){const l=i+s>>>1,u=Xt[l],d=Os(u);d<t||d===t&&u.flags&2?i=l+1:s=l}return i}function Zr(t){if(!(t.flags&1)){const i=Os(t),s=Xt[Xt.length-1];!s||!(t.flags&2)&&i>=Os(s)?Xt.push(t):Xt.splice(Qd(i),0,t),t.flags|=1,Wu()}}function Wu(){ba||(ba=Hu.then(Gu))}function ef(t){De(t)?No.push(...t):Ni&&t.id===-1?Ni.splice(zo+1,0,t):t.flags&1||(No.push(t),t.flags|=1),Wu()}function wl(t,i,s=Kn+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)=>Os(s)-Os(l));if(No.length=0,Ni){Ni.push(...i);return}for(Ni=i,zo=0;zo<Ni.length;zo++){const s=Ni[zo];s.flags&4&&(s.flags&=-2),s.flags&8||s(),s.flags&=-2}Ni=null,zo=0}}const Os=t=>t.id==null?t.flags&2?-1:1/0:t.id;function Gu(t){try{for(Kn=0;Kn<Xt.length;Kn++){const i=Xt[Kn];i&&!(i.flags&8)&&(i.flags&4&&(i.flags&=-2),Rs(i,i.i,i.i?15:14),i.flags&4||(i.flags&=-2))}}finally{for(;Kn<Xt.length;Kn++){const i=Xt[Kn];i&&(i.flags&=-2)}Kn=-1,Xt.length=0,Ku(),ba=null,(Xt.length||No.length)&&Gu()}}let Zt=null,qu=null;function ya(t){const i=Zt;return Zt=t,qu=t&&t.type.__scopeId||null,i}function Le(t,i=Zt,s){if(!i||t._n)return t;const l=(...u)=>{l._d&&ka(-1);const d=ya(i);let h;try{h=t(...u)}finally{ya(d),l._d&&ka(1)}return h};return l._n=!0,l._c=!0,l._d=!0,l}function ne(t,i){if(Zt===null)return t;const s=Ua(Zt),l=t.dirs||(t.dirs=[]);for(let u=0;u<i.length;u++){let[d,h,v,b=_t]=i[u];d&&(Je(d)&&(d={mounted:d,updated:d}),d.deep&&mi(h),l.push({dir:d,instance:s,value:h,oldValue:void 0,arg:v,modifiers:b}))}return t}function qi(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&&(Xn(),An(b,s,8,[t.el,v,t,i]),Qn())}}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 Ps(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&&Je(i)?i.call(l&&l.proxy):i}}const tf=Symbol.for("v-scx"),nf=()=>Ps(tf);function $t(t,i,s){return Ju(t,i,s)}function Ju(t,i,s=_t){const{immediate:l,deep:u,flush:d,once:h}=s,v=Nt({},s),b=i&&l||!i&&d!=="post";let C;if(Ns){if(d==="sync"){const B=nf();C=B.__watcherHandles||(B.__watcherHandles=[])}else if(!b){const B=()=>{};return B.stop=Jn,B.resume=Jn,B.pause=Jn,B}}const T=Qt;v.call=(B,Z,F)=>An(B,T,Z,F);let A=!1;d==="post"?v.scheduler=B=>{Jt(B,T&&T.suspense)}:d!=="sync"&&(A=!0,v.scheduler=(B,Z)=>{Z?B():Zr(B)}),v.augmentJob=B=>{i&&(B.flags|=4),A&&(B.flags|=2,T&&(B.id=T.uid,B.i=T))};const R=Jd(t,i,v);return Ns&&(C?C.push(R):b&&R()),R}function of(t,i,s){const l=this.proxy,u=Tt(t)?t.includes(".")?Xu(l,t):()=>l[t]:t.bind(l,l);let d;Je(i)?d=i:(d=i.handler,s=i);const h=Bs(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 $i=new WeakMap,Qu=Symbol("_vte"),ec=t=>t.__isTeleport,eo=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 Tt(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:A,pbc:R,o:{insert:B,querySelector:Z,createText:F,createComment:he,parentNode:pe}}=C,q=eo(i.props);let{dynamicChildren:Ce}=i;const fe=(Ie,Ge,be)=>{Ie.shapeFlag&16&&T(Ie.children,Ge,be,u,d,h,v,b)},Be=(Ie=i)=>{const Ge=eo(Ie.props),be=Ie.target=yr(Ie.props,Z),we=xr(be,Ie,F,B);be&&(h!=="svg"&&kl(be)?h="svg":h!=="mathml"&&Sl(be)&&(h="mathml"),u&&u.isCE&&(u.ce._teleportTargets||(u.ce._teleportTargets=new Set)).add(be),Ge||(fe(Ie,be,we),bs(Ie,!1)))},$e=Ie=>{const Ge=()=>{if($i.get(Ie)===Ge){if($i.delete(Ie),eo(Ie.props)){const be=pe(Ie.el)||s;fe(Ie,be,Ie.anchor),bs(Ie,!0)}Be(Ie)}};$i.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",fi=typeof document<"u"?document:null,Rl=fi&&fi.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"?fi.createElementNS(ch,t):i==="mathml"?fi.createElementNS(dh,t):s?fi.createElement(t,{is:s}):fi.createElement(t);return t==="select"&&l&&l.multiple!=null&&u.setAttribute("multiple",l.multiple),u},createText:t=>fi.createTextNode(t),createComment:t=>fi.createComment(t),setText:(t,i)=>{t.nodeValue=i},setElementText:(t,i)=>{t.textContent=i},parentNode:t=>t.parentNode,nextSibling:t=>t.nextSibling,querySelector:t=>fi.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]}},zi="transition",vs="animation",Ds=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=Nt({},tc,Oc),ph=t=>(t.displayName="Transition",t.props=hh,t),mh=ph((t,{slots:i})=>lh(df,gh(t),i)),Ji=(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 ie in t)ie in Oc||(i[ie]=t[ie]);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:A=`${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:Ce,onLeave:fe,onLeaveCancelled:Be,onBeforeAppear:$e=pe,onAppear:Ie=q,onAppearCancelled:Ge=Ce}=i,be=(ie,He,oe,je)=>{ie._enterCancelled=je,Xi(ie,He?T:v),Xi(ie,He?C:h),oe&&oe()},we=(ie,He)=>{ie._isLeaving=!1,Xi(ie,A),Xi(ie,B),Xi(ie,R),He&&He()},ze=ie=>(He,oe)=>{const je=ie?Ie:q,le=()=>be(He,ie,oe);Ji(je,[He,le]),Ul(()=>{Xi(He,ie?b:d),di(He,ie?T:v),Bl(je)||Vl(He,l,F,le)})};return Nt(i,{onBeforeEnter(ie){Ji(pe,[ie]),di(ie,d),di(ie,h)},onBeforeAppear(ie){Ji($e,[ie]),di(ie,b),di(ie,C)},onEnter:ze(!1),onAppear:ze(!0),onLeave(ie,He){ie._isLeaving=!0;const oe=()=>we(ie,He);di(ie,A),ie._enterCancelled?(di(ie,R),jl(ie)):(jl(ie),di(ie,R)),Ul(()=>{ie._isLeaving&&(Xi(ie,A),di(ie,B),Bl(fe)||Vl(ie,l,he,oe))}),Ji(fe,[ie,oe])},onEnterCancelled(ie){be(ie,!1,void 0,!0),Ji(Ce,[ie])},onAppearCancelled(ie){be(ie,!0,void 0,!0),Ji(Ge,[ie])},onLeaveCancelled(ie){we(ie),Ji(Be,[ie])}})}function vh(t){if(t==null)return null;if(pt(t))return[cr(t.enter),cr(t.leave)];{const i=cr(t);return[i,i]}}function cr(t){return gd(t)}function di(t,i){i.split(/\s+/).forEach(s=>s&&t.classList.add(s)),(t[Ds]||(t[Ds]=new Set)).add(i)}function Xi(t,i){i.split(/\s+/).forEach(l=>l&&t.classList.remove(l));const s=t[Ds];s&&(s.delete(i),s.size||(t[Ds]=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 A=()=>{t.removeEventListener(C,R),d()},R=B=>{B.target===t&&++T>=b&&A()};setTimeout(()=>{T<b&&A()},v+1),t.addEventListener(C,R)}function bh(t,i){const s=window.getComputedStyle(t),l=Z=>(s[Z]||"").split(", "),u=l(`${zi}Delay`),d=l(`${zi}Duration`),h=Zl(u,d),v=l(`${vs}Delay`),b=l(`${vs}Duration`),C=Zl(v,b);let T=null,A=0,R=0;i===zi?h>0&&(T=zi,A=h,R=d.length):i===vs?C>0&&(T=vs,A=C,R=b.length):(A=Math.max(h,C),T=A>0?h>C?zi:vs:null,R=T?T===zi?d.length:b.length:0);const B=T===zi&&/\b(?:transform|all)(?:,|$)/.test(l(`${zi}Property`).toString());return{type:T,timeout:A,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[Ds];l&&(i=(i?[i,...l]:[...l]).join(" ")),i==null?t.removeAttribute("class"):s?t.setAttribute("class",i):t.className=i}const Pa=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=ws.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 A(){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 Ce=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 Be="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 be=window.requestAnimationFrame||$e("RequestAnimationFrame")||Ge,we=window.cancelAnimationFrame||$e("CancelAnimationFrame")||$e("CancelRequestAnimationFrame")||function(e){window.clearTimeout(e)};function ze(e,n,o){if(o&&be===Ge)e.call(n);else return be.call(window,h(e,n))}function ie(e){e&&we.call(window,e)}var He={__proto__:null,extend:u,create:d,bind:h,get lastId(){return v},stamp:b,throttle:C,wrapNum:T,falseFn:A,formatNum:R,trim:B,splitWords:Z,setOptions:F,getParamString:he,template:q,isArray:Ce,indexOf:fe,emptyImageUrl:Be,requestFn:be,cancelFn:we,requestAnimFrame:ze,cancelAnimFrame:ie};function oe(){}oe.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&&(je(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},oe.include=function(e){var n=this.prototype.options;return u(this.prototype,e),e.options&&(this.prototype.options=n,this.mergeOptions(e.options)),this},oe.mergeOptions=function(e){return u(this.prototype.options,e),this},oe.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 je(e){if(!(typeof L>"u"||!L||!L.Mixin)){e=Ce(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=A;delete this._events[e];return}if(typeof n!="function"){console.warn("wrong listener type:Line truncated
|
||||
Vendored
+1
-1
@@ -1 +1 @@
|
||||
:root,[data-theme=light]{--navy-950: #0B1730;--navy-900: #0F1E3D;--navy-800: #1B2E52;--navy-700: #26406E;--blue-50: #EAF1FE;--blue-100: #D6E3FD;--blue-200: #B4CDFA;--blue-300: #8FB4F6;--blue-400: #5B93F5;--blue-500: #3D7BF0;--blue-600: #2B62CC;--blue-700: #1F4CA0;--slate-0: #FFFFFF;--slate-50: #F6F7F9;--slate-100: #EEF0F3;--slate-150: #E6E9EE;--slate-200: #DCE0E7;--slate-300: #C5CCD7;--slate-400: #97A1B0;--slate-500: #6B7688;--slate-600: #4C5566;--slate-700: #333B4A;--slate-800: #1E2635;--slate-900: #131A28;--slate-950: #0B111C;--steel: #5A6B85;--green-500: #1F8A5B;--green-100: #DCF1E7;--green-600:#177049;--amber-500: #D9852B;--amber-100: #FBEBD5;--amber-600:#B86C1B;--red-500: #D64545;--red-100: #FBE0E0;--red-600: #B83232;--bg-app: var(--slate-100);--bg-subtle: var(--slate-50);--surface: var(--slate-0);--surface-2: var(--slate-50);--surface-inset: var(--slate-100);--border: var(--slate-200);--border-strong: var(--slate-300);--border-subtle: var(--slate-150);--text-primary: var(--navy-900);--text-secondary:var(--steel);--text-tertiary: var(--slate-400);--text-inverse: var(--slate-0);--text-on-accent:#FFFFFF;--accent: var(--blue-500);--accent-hover: var(--blue-600);--accent-active: var(--blue-700);--accent-soft: var(--blue-50);--accent-soft-fg:var(--blue-700);--focus-ring: color-mix(in srgb, var(--blue-500) 45%, transparent);--success: var(--green-500);--success-soft: var(--green-100);--success-fg: var(--green-600);--warning: var(--amber-500);--warning-soft: var(--amber-100);--warning-fg: var(--amber-600);--danger: var(--red-500);--danger-soft: var(--red-100);--danger-fg: var(--red-600);--overlay: color-mix(in srgb, var(--navy-950) 55%, transparent);--font-sans: "Space Grotesk", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;--font-mono: "Space Mono", ui-monospace, "SF Mono", "JetBrains Mono", monospace;--radius-xs: 4px;--radius-sm: 6px;--radius-md: 10px;--radius-lg: 14px;--radius-xl: 20px;--radius-pill: 999px;--shadow-xs: 0 1px 2px rgba(15,30,61,.06);--shadow-sm: 0 1px 2px rgba(15,30,61,.06), 0 1px 3px rgba(15,30,61,.04);--shadow-md: 0 2px 4px rgba(15,30,61,.06), 0 6px 16px rgba(15,30,61,.08);--shadow-lg: 0 8px 24px rgba(15,30,61,.1), 0 2px 6px rgba(15,30,61,.06);--ease-standard: cubic-bezier(.4, 0, .2, 1);--ease-out: cubic-bezier(.16, 1, .3, 1);--dur-fast: .12s;--dur-base: .2s;color-scheme:light}[data-theme=dark]{--bg-app: var(--navy-950);--bg-subtle: var(--slate-950);--surface: #10203F;--surface-2: #142748;--surface-inset: var(--navy-950);--border: color-mix(in srgb, #FFFFFF 10%, transparent);--border-strong: color-mix(in srgb, #FFFFFF 18%, transparent);--border-subtle: color-mix(in srgb, #FFFFFF 6%, transparent);--text-primary: #F4F7FC;--text-secondary:#8FA0BE;--text-tertiary: #5E6E8C;--text-inverse: var(--navy-900);--text-on-accent:#FFFFFF;--accent: var(--blue-400);--accent-hover: var(--blue-300);--accent-active: var(--blue-200);--accent-soft: color-mix(in srgb, var(--blue-500) 18%, transparent);--accent-soft-fg:var(--blue-300);--focus-ring: color-mix(in srgb, var(--blue-400) 55%, transparent);--success:var(--green-500);--success-soft: color-mix(in srgb, var(--green-500) 22%, transparent);--success-fg:#5FD3A0;--warning:var(--amber-500);--warning-soft: color-mix(in srgb, var(--amber-500) 22%, transparent);--warning-fg:#F0B26A;--danger: var(--red-500);--danger-soft: color-mix(in srgb, var(--red-500) 22%, transparent);--danger-fg: #F08A8A;--overlay: color-mix(in srgb, #000000 62%, transparent);--shadow-xs: 0 1px 2px rgba(0,0,0,.35);--shadow-sm: 0 1px 3px rgba(0,0,0,.4);--shadow-md: 0 4px 12px rgba(0,0,0,.45);--shadow-lg: 0 12px 32px rgba(0,0,0,.5);color-scheme:dark}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-Line truncated
|
||||
:root,[data-theme=light]{--navy-950: #0B1730;--navy-900: #0F1E3D;--navy-800: #1B2E52;--navy-700: #26406E;--blue-50: #EAF1FE;--blue-100: #D6E3FD;--blue-200: #B4CDFA;--blue-300: #8FB4F6;--blue-400: #5B93F5;--blue-500: #3D7BF0;--blue-600: #2B62CC;--blue-700: #1F4CA0;--slate-0: #FFFFFF;--slate-50: #F6F7F9;--slate-100: #EEF0F3;--slate-150: #E6E9EE;--slate-200: #DCE0E7;--slate-300: #C5CCD7;--slate-400: #97A1B0;--slate-500: #6B7688;--slate-600: #4C5566;--slate-700: #333B4A;--slate-800: #1E2635;--slate-900: #131A28;--slate-950: #0B111C;--steel: #5A6B85;--green-500: #1F8A5B;--green-100: #DCF1E7;--green-600:#177049;--amber-500: #D9852B;--amber-100: #FBEBD5;--amber-600:#B86C1B;--red-500: #D64545;--red-100: #FBE0E0;--red-600: #B83232;--bg-app: var(--slate-100);--bg-subtle: var(--slate-50);--surface: var(--slate-0);--surface-2: var(--slate-50);--surface-inset: var(--slate-100);--border: var(--slate-200);--border-strong: var(--slate-300);--border-subtle: var(--slate-150);--text-primary: var(--navy-900);--text-secondary:var(--steel);--text-tertiary: var(--slate-400);--text-inverse: var(--slate-0);--text-on-accent:#FFFFFF;--accent: var(--blue-500);--accent-hover: var(--blue-600);--accent-active: var(--blue-700);--accent-soft: var(--blue-50);--accent-soft-fg:var(--blue-700);--focus-ring: color-mix(in srgb, var(--blue-500) 45%, transparent);--success: var(--green-500);--success-soft: var(--green-100);--success-fg: var(--green-600);--warning: var(--amber-500);--warning-soft: var(--amber-100);--warning-fg: var(--amber-600);--danger: var(--red-500);--danger-soft: var(--red-100);--danger-fg: var(--red-600);--overlay: color-mix(in srgb, var(--navy-950) 55%, transparent);--font-sans: "Space Grotesk", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;--font-mono: "Space Mono", ui-monospace, "SF Mono", "JetBrains Mono", monospace;--radius-xs: 4px;--radius-sm: 6px;--radius-md: 10px;--radius-lg: 14px;--radius-xl: 20px;--radius-pill: 999px;--shadow-xs: 0 1px 2px rgba(15,30,61,.06);--shadow-sm: 0 1px 2px rgba(15,30,61,.06), 0 1px 3px rgba(15,30,61,.04);--shadow-md: 0 2px 4px rgba(15,30,61,.06), 0 6px 16px rgba(15,30,61,.08);--shadow-lg: 0 8px 24px rgba(15,30,61,.1), 0 2px 6px rgba(15,30,61,.06);--ease-standard: cubic-bezier(.4, 0, .2, 1);--ease-out: cubic-bezier(.16, 1, .3, 1);--dur-fast: .12s;--dur-base: .2s;color-scheme:light}[data-theme=dark]{--bg-app: var(--navy-950);--bg-subtle: var(--slate-950);--surface: #10203F;--surface-2: #142748;--surface-inset: var(--navy-950);--border: color-mix(in srgb, #FFFFFF 10%, transparent);--border-strong: color-mix(in srgb, #FFFFFF 18%, transparent);--border-subtle: color-mix(in srgb, #FFFFFF 6%, transparent);--text-primary: #F4F7FC;--text-secondary:#8FA0BE;--text-tertiary: #5E6E8C;--text-inverse: var(--navy-900);--text-on-accent:#FFFFFF;--accent: var(--blue-400);--accent-hover: var(--blue-300);--accent-active: var(--blue-200);--accent-soft: color-mix(in srgb, var(--blue-500) 18%, transparent);--accent-soft-fg:var(--blue-300);--focus-ring: color-mix(in srgb, var(--blue-400) 55%, transparent);--success:var(--green-500);--success-soft: color-mix(in srgb, var(--green-500) 22%, transparent);--success-fg:#5FD3A0;--warning:var(--amber-500);--warning-soft: color-mix(in srgb, var(--amber-500) 22%, transparent);--warning-fg:#F0B26A;--danger: var(--red-500);--danger-soft: color-mix(in srgb, var(--red-500) 22%, transparent);--danger-fg: #F08A8A;--overlay: color-mix(in srgb, #000000 62%, transparent);--shadow-xs: 0 1px 2px rgba(0,0,0,.35);--shadow-sm: 0 1px 3px rgba(0,0,0,.4);--shadow-md: 0 4px 12px rgba(0,0,0,.45);--shadow-lg: 0 12px 32px rgba(0,0,0,.5);color-scheme:dark}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-Line truncated
|
||||
Vendored
+2
-2
@@ -35,8 +35,8 @@
|
||||
})()
|
||||
</script>
|
||||
<title>PilotVault — Control Panel</title>
|
||||
<script type="module" crossorigin src="./assets/index-BSx6Lf8i.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="./assets/index-FLz21UuE.css">
|
||||
<script type="module" crossorigin src="./assets/index-BfiNicZk.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="./assets/index-CcgvhCJr.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
|
||||
@@ -160,9 +160,12 @@ export async function saveOpenSky(payload) {
|
||||
return { ok: r.ok, status: r.status, body: await r.json().catch(() => ({})) }
|
||||
}
|
||||
|
||||
// Run a live health probe against the caller's resolved config.
|
||||
export async function testOpenSky() {
|
||||
const r = await fetch('/bff/integrations/opensky/health', { method: 'POST' })
|
||||
// Run a live health probe against the caller's resolved config. An optional
|
||||
// `bbox` ("lamin,lomin,lamax,lomax") overrides the probe area for this test only
|
||||
// (to check an area's credit cost without changing the saved default).
|
||||
export async function testOpenSky(bbox) {
|
||||
const qs = bbox ? `?bbox=${encodeURIComponent(bbox)}` : ''
|
||||
const r = await fetch(`/bff/integrations/opensky/health${qs}`, { method: 'POST' })
|
||||
return { ok: r.ok, status: r.status, body: await r.json().catch(() => ({})) }
|
||||
}
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ import Segmented from './settings/Segmented.vue'
|
||||
import Row from './settings/Row.vue'
|
||||
import { themeMode, setThemeMode } from '../theme.js'
|
||||
import { prefs, formatDateTime, importPrefs, applyFontSize, applyReduceMotion } from '../prefs.js'
|
||||
import { europeanCountries, regionOptions } from '../countries.js'
|
||||
import { europeanCountries, regionOptions, countryGroups } from '../countries.js'
|
||||
import {
|
||||
getUsers, createUser, updateUser, deleteUser,
|
||||
getOrgs, createOrg, updateOrg, deleteOrg,
|
||||
@@ -371,10 +371,45 @@ async function saveOpenSkySettings() {
|
||||
flash(osEditingOrg.value ? 'Organization OpenSky settings saved.' : 'OpenSky settings saved.')
|
||||
}
|
||||
|
||||
// Test-connection "probe area": an optional bounding box used only for the
|
||||
// Test connection probe (to check an area's credit cost) without touching the
|
||||
// saved default. Full country list (World / Continents / all countries) + Custom.
|
||||
const OS_PROBE_GROUPS = [
|
||||
{ label: 'World', options: [{ value: '-90,-180,90,180', label: 'World' }] },
|
||||
{ label: 'Continents', options: [
|
||||
{ value: '34,-25,72,45', label: 'Europe' },
|
||||
{ value: '-35,-18,38,52', label: 'Africa' },
|
||||
{ value: '5,25,82,180', label: 'Asia' },
|
||||
{ value: '7,-168,72,-52', label: 'North America' },
|
||||
{ value: '-56,-82,13,-34', label: 'South America' },
|
||||
{ value: '-48,110,-10,180', label: 'Oceania' },
|
||||
] },
|
||||
...countryGroups(),
|
||||
]
|
||||
const OS_PROBE_FLAT = OS_PROBE_GROUPS.flatMap((g) => g.options)
|
||||
const osProbeBbox = ref('') // '' = use the saved default bounding box
|
||||
const osProbeCustom = ref(false)
|
||||
const osProbeSelect = computed({
|
||||
get() {
|
||||
if (osProbeCustom.value) return '__custom__'
|
||||
if (!osProbeBbox.value) return '__default__'
|
||||
const norm = osNormBbox(osProbeBbox.value)
|
||||
const m = norm && OS_PROBE_FLAT.find((o) => osNormBbox(o.value) === norm)
|
||||
return m ? m.value : '__custom__'
|
||||
},
|
||||
set(v) {
|
||||
if (v === '__default__') { osProbeCustom.value = false; osProbeBbox.value = ''; return }
|
||||
if (v === '__custom__') { osProbeCustom.value = true; return }
|
||||
osProbeCustom.value = false
|
||||
osProbeBbox.value = v
|
||||
},
|
||||
})
|
||||
const osProbeManual = computed(() => osProbeSelect.value === '__custom__')
|
||||
|
||||
async function testOpenSkyConnection() {
|
||||
osTesting.value = true
|
||||
osHealth.value = null
|
||||
const { ok, body } = await testOpenSky()
|
||||
const { ok, body } = await testOpenSky((osProbeBbox.value || '').trim() || undefined)
|
||||
osTesting.value = false
|
||||
osHealth.value = ok && body.health ? body.health : { status: 'down', detail: body.error || 'Probe failed.' }
|
||||
osHealthTs.value = Date.now()
|
||||
@@ -1562,6 +1597,17 @@ onBeforeUnmount(() => {
|
||||
<button v-if="!osReadOnly" class="btn-accent" :disabled="osSaving || !os.available" @click="saveOpenSkySettings">
|
||||
{{ osSaving ? 'Saving…' : osEditingOrg ? 'Save organization settings' : 'Save settings' }}
|
||||
</button>
|
||||
<div v-if="!osEditingOrg" class="flex items-center gap-2" title="Bounding box used for Test connection — smaller areas cost fewer OpenSky credits">
|
||||
<label class="text-xs text-ink-muted">Test area</label>
|
||||
<select v-model="osProbeSelect" class="field w-44">
|
||||
<option value="__default__">Default bounding box</option>
|
||||
<optgroup v-for="g in OS_PROBE_GROUPS" :key="g.label" :label="g.label">
|
||||
<option v-for="o in g.options" :key="o.value" :value="o.value">{{ o.label }}</option>
|
||||
</optgroup>
|
||||
<option value="__custom__">Custom…</option>
|
||||
</select>
|
||||
<input v-if="osProbeManual" v-model="osProbeBbox" class="field w-44 font-mono" placeholder="lamin,lomin,lamax,lomax" />
|
||||
</div>
|
||||
<button v-if="!osEditingOrg" class="btn-ghost" :disabled="osTesting || !os.available" @click="testOpenSkyConnection">
|
||||
{{ osTesting ? 'Testing…' : 'Test connection' }}
|
||||
</button>
|
||||
|
||||
@@ -255,3 +255,23 @@ export function regionOptions() {
|
||||
.sort((a, b) => a.name.localeCompare(b.name))
|
||||
.map((c) => [c.code, c.name])
|
||||
}
|
||||
|
||||
// Per-continent picker groups ({ label, options:[{value:bbox, label:name}] }),
|
||||
// countries A→Z within each. Used by the "Test area" probe picker.
|
||||
const CONTINENT_LABELS = [
|
||||
['EU', 'European countries'],
|
||||
['AS', 'Asian countries'],
|
||||
['AF', 'African countries'],
|
||||
['NA', 'North American countries'],
|
||||
['SA', 'South American countries'],
|
||||
['OC', 'Oceanian countries'],
|
||||
]
|
||||
export function countryGroups() {
|
||||
return CONTINENT_LABELS.map(([code, label]) => ({
|
||||
label,
|
||||
options: COUNTRIES.filter((c) => c.continent === code)
|
||||
.slice()
|
||||
.sort((a, b) => a.name.localeCompare(b.name))
|
||||
.map((c) => ({ value: c.bbox, label: c.name })),
|
||||
}))
|
||||
}
|
||||
Reference in new issue
Block a user