diff --git a/web-ui/src/components/PacketDetail.vue b/web-ui/src/components/PacketDetail.vue
new file mode 100644
index 0000000..2185dd6
--- /dev/null
+++ b/web-ui/src/components/PacketDetail.vue
@@ -0,0 +1,171 @@
+
+
+
+
+
{{ info }}
+
+
Packet
+
+
+ {{ r.k }}
+ {{ r.time ? fmtDateTime(r.v) : r.v }}
+
+
+
+
+ Payload
+
+
+ {{ k }}
+ {{ fmtVal(k, v) }}
+
+
+
+
+
+ Attributes
+
+
+ {{ k }}
+ {{ fmtVal(k, v) }}
+
+
+
+
+
+
+
diff --git a/web-ui/src/views/Packets.vue b/web-ui/src/views/Packets.vue
index 87ccb5b..e49d1cf 100644
--- a/web-ui/src/views/Packets.vue
+++ b/web-ui/src/views/Packets.vue
@@ -4,6 +4,7 @@ import { api, wsUrl } from '../api.js'
import { fmtTime } from '../time.js'
import HexDump from '../components/HexDump.vue'
import FieldBreakout from '../components/FieldBreakout.vue'
+import PacketDetail from '../components/PacketDetail.vue'
const packets = ref([])
const listEl = ref(null) // scroll container for the packet list
@@ -14,7 +15,8 @@ const listEl = ref(null) // scroll container for the packet list
const excluded = ref(new Set())
const knownTypes = ref(new Set())
const selected = ref(null) // full packet row
-const decoded = ref(null) // decode response
+const decoded = ref(null) // decode response (raw packets)
+const detail = ref(null) // full row + payload/attributes (non-raw packets)
const activeIndex = ref(-1) // hovered field index
const error = ref('')
let ws = null
@@ -114,13 +116,19 @@ function onKey(e) {
async function select(p) {
selected.value = p
decoded.value = null
+ detail.value = null
activeIndex.value = -1
- if (!p.has_raw) return
try {
- decoded.value = await api('/packets/decode', {
- method: 'POST',
- json: { packet_id: p.id },
- })
+ if (p.has_raw) {
+ decoded.value = await api('/packets/decode', {
+ method: 'POST',
+ json: { packet_id: p.id },
+ })
+ } else {
+ // non-raw packet: pull the full row (payload_json/attributes_json are
+ // omitted from the list view) so the inspector can show its details.
+ detail.value = await api(`/packets/${p.id}`)
+ }
} catch (e) {
error.value = e.message
}
@@ -213,10 +221,8 @@ onUnmounted(() => {
select a packet
-
- no raw bytes for this packet
- (only RX_LOG_DATA packets carry on-air bytes)
-
+
+ loading…
h3{margin:0;padding:8px 12px;font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);border-bottom:1px solid var(--border)}.pane>.body{flex:1;min-height:0;overflow:auto}.side-col{flex:0 0 240px;display:flex;flex-direction:column;gap:10px;min-height:0}button{background:var(--accent-dim);color:#fff;border:1px solid var(--border);border-radius:6px;padding:6px 12px;cursor:pointer;font:inherit}button:hover{border-color:var(--accent)}button:disabled{opacity:.5;cursor:not-allowed}input,select,textarea{background:var(--panel2);color:var(--text);border:1px solid var(--border);border-radius:6px;padding:6px 9px;font:inherit}input:focus,select:focus,textarea:focus{outline:1px solid var(--accent)}table{width:100%;border-collapse:collapse;font-size:13px}th,td{text-align:left;padding:5px 9px;border-bottom:1px solid var(--border);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:320px}th{color:var(--muted);position:sticky;top:0;background:var(--panel)}th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}th.sortable:hover{color:var(--text)}tr.clickable{cursor:pointer}tr.clickable:hover td{background:var(--panel2)}tr.selected td{background:var(--accent-dim)}.mono{font-family:var(--mono)}.muted{color:var(--muted)}.tag{display:inline-block;padding:1px 7px;border-radius:10px;background:var(--panel2);border:1px solid var(--border);font-size:11px;margin:0 3px 3px 0}td.chips{white-space:normal;overflow:visible;max-width:none}.toolbar{display:flex;gap:8px;align-items:center;padding:8px 12px;border-bottom:1px solid var(--border);flex-wrap:wrap}.toolbar label.chk{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:var(--muted);cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap}.toolbar label.chk input{margin:0}.err{color:var(--err)}.empty{padding:20px;color:var(--muted);text-align:center}.login-wrap{display:flex;align-items:center;justify-content:center;flex:1}.login-card{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:26px;width:320px;display:flex;flex-direction:column;gap:12px}.login-card h2{margin:0 0 6px}.login-card label{font-size:12px;color:var(--muted)}.login-card input{width:100%}.msg{padding:6px 12px;border-bottom:1px solid var(--border)}.msg .meta{font-size:11px;color:var(--muted)}.msg.out{background:#13241b}.msg .who{color:var(--accent);font-weight:600}.msg .mention{color:var(--accent);font-weight:600;background:var(--accent-dim);padding:0 4px;border-radius:4px}.msg a{word-break:break-all}.hexdump{font-family:var(--mono);font-size:13px;padding:10px;line-height:1.7}.hexbyte{padding:1px 2px;border-radius:3px;cursor:default}.hexbyte.active{background:var(--accent);color:#00121f}.field-row{padding:6px 12px;border-bottom:1px solid var(--border);cursor:default}.field-row.active{background:var(--accent-dim)}.field-row .fname{font-weight:600}.field-row .fmeta{font-size:11px;color:var(--muted)}.field-row .fval{font-family:var(--mono);font-size:12px;word-break:break-all}.decoded{padding:10px 12px}.decoded pre{white-space:pre-wrap;word-break:break-all;margin:0}.kv{display:grid;grid-template-columns:max-content 1fr;gap:2px 12px}.kv .k{color:var(--muted)}
diff --git a/webapi/static/assets/index-CPwELwn7.js b/webapi/static/assets/index-CPwELwn7.js
deleted file mode 100644
index 36d626d..0000000
--- a/webapi/static/assets/index-CPwELwn7.js
+++ /dev/null
@@ -1,37 +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 l of o)if(l.type==="childList")for(const r of l.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&s(r)}).observe(document,{childList:!0,subtree:!0});function n(o){const l={};return o.integrity&&(l.integrity=o.integrity),o.referrerPolicy&&(l.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?l.credentials="include":o.crossOrigin==="anonymous"?l.credentials="omit":l.credentials="same-origin",l}function s(o){if(o.ep)return;o.ep=!0;const l=n(o);fetch(o.href,l)}})();/**
-* @vue/shared v3.5.35
-* (c) 2018-present Yuxi (Evan) You and Vue contributors
-* @license MIT
-**/function co(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const ke={},ln=[],xt=()=>{},Il=()=>!1,us=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),fs=e=>e.startsWith("onUpdate:"),Ve=Object.assign,uo=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},hi=Object.prototype.hasOwnProperty,ye=(e,t)=>hi.call(e,t),Z=Array.isArray,rn=e=>Vn(e)==="[object Map]",mn=e=>Vn(e)==="[object Set]",Io=e=>Vn(e)==="[object Date]",le=e=>typeof e=="function",Pe=e=>typeof e=="string",ft=e=>typeof e=="symbol",be=e=>e!==null&&typeof e=="object",Nl=e=>(be(e)||le(e))&&le(e.then)&&le(e.catch),$l=Object.prototype.toString,Vn=e=>$l.call(e),pi=e=>Vn(e).slice(8,-1),Ml=e=>Vn(e)==="[object Object]",ds=e=>Pe(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,kn=co(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),hs=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},mi=/-\w/g,Ye=hs(e=>e.replace(mi,t=>t.slice(1).toUpperCase())),vi=/\B([A-Z])/g,Gt=hs(e=>e.replace(vi,"-$1").toLowerCase()),ps=hs(e=>e.charAt(0).toUpperCase()+e.slice(1)),Ps=hs(e=>e?`on${ps(e)}`:""),wt=(e,t)=>!Object.is(e,t),Qn=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},ms=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let No;const vs=()=>No||(No=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function fo(e){if(Z(e)){const t={};for(let n=0;n{if(n){const s=n.split(_i);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function Je(e){let t="";if(Pe(e))t=e;else if(Z(e))for(let n=0;nHt(n,t))}const jl=e=>!!(e&&e.__v_isRef===!0),T=e=>Pe(e)?e:e==null?"":Z(e)||be(e)&&(e.toString===$l||!le(e.toString))?jl(e)?T(e.value):JSON.stringify(e,Vl,2):String(e),Vl=(e,t)=>jl(t)?Vl(e,t.value):rn(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,o],l)=>(n[Is(s,l)+" =>"]=o,n),{})}:mn(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Is(n))}:ft(t)?Is(t):be(t)&&!Z(t)&&!Ml(t)?String(t):t,Is=(e,t="")=>{var n;return ft(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/**
-* @vue/reactivity v3.5.35
-* (c) 2018-present Yuxi (Evan) You and Vue contributors
-* @license MIT
-**/let Le;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&&Le&&(Le.active?(this.parent=Le,this.index=(Le.scopes||(Le.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;t0&&--this._on===0){if(Le===this)Le=this.prevScope;else{let t=Le;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;n0)return;if(Sn){let t=Sn;for(Sn=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 Wl(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function ql(e){let t,n=e.depsTail,s=n;for(;s;){const o=s.prevDep;s.version===-1?(s===n&&(n=o),vo(s),Si(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=o}e.deps=t,e.depsTail=n}function qs(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(zl(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function zl(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Nn)||(e.globalVersion=Nn,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!qs(e))))return;e.flags|=2;const t=e.dep,n=Ce,s=ht;Ce=e,ht=!0;try{Wl(e);const o=e.fn(e._value);(t.version===0||wt(o,e._value))&&(e.flags|=128,e._value=o,t.version++)}catch(o){throw t.version++,o}finally{Ce=n,ht=s,ql(e),e.flags&=-3}}function vo(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 l=n.computed.deps;l;l=l.nextDep)vo(l,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function Si(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let ht=!0;const Jl=[];function It(){Jl.push(ht),ht=!1}function Nt(){const e=Jl.pop();ht=e===void 0?!0:e}function $o(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=Ce;Ce=void 0;try{t()}finally{Ce=n}}}let Nn=0;class Ei{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 go{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(!Ce||!ht||Ce===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==Ce)n=this.activeLink=new Ei(Ce,this),Ce.deps?(n.prevDep=Ce.depsTail,Ce.depsTail.nextDep=n,Ce.depsTail=n):Ce.deps=Ce.depsTail=n,Yl(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=Ce.depsTail,n.nextDep=void 0,Ce.depsTail.nextDep=n,Ce.depsTail=n,Ce.deps===n&&(Ce.deps=s)}return n}trigger(t){this.version++,Nn++,this.notify(t)}notify(t){po();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{mo()}}}function Yl(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)Yl(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const ts=new WeakMap,Qt=Symbol(""),zs=Symbol(""),$n=Symbol("");function Fe(e,t,n){if(ht&&Ce){let s=ts.get(e);s||ts.set(e,s=new Map);let o=s.get(n);o||(s.set(n,o=new go),o.map=s,o.key=n),o.track()}}function Rt(e,t,n,s,o,l){const r=ts.get(e);if(!r){Nn++;return}const i=a=>{a&&a.trigger()};if(po(),t==="clear")r.forEach(i);else{const a=Z(e),f=a&&ds(n);if(a&&n==="length"){const u=Number(s);r.forEach((h,g)=>{(g==="length"||g===$n||!ft(g)&&g>=u)&&i(h)})}else switch((n!==void 0||r.has(void 0))&&i(r.get(n)),f&&i(r.get($n)),t){case"add":a?f&&i(r.get("length")):(i(r.get(Qt)),rn(e)&&i(r.get(zs)));break;case"delete":a||(i(r.get(Qt)),rn(e)&&i(r.get(zs)));break;case"set":rn(e)&&i(r.get(Qt));break}}mo()}function Ai(e,t){const n=ts.get(e);return n&&n.get(t)}function en(e){const t=me(e);return t===e?t:(Fe(t,"iterate",$n),st(e)?t:t.map(pt))}function gs(e){return Fe(e=me(e),"iterate",$n),e}function yt(e,t){return $t(e)?un(Pt(e)?pt(t):t):pt(t)}const Ri={__proto__:null,[Symbol.iterator](){return $s(this,Symbol.iterator,e=>yt(this,e))},concat(...e){return en(this).concat(...e.map(t=>Z(t)?en(t):t))},entries(){return $s(this,"entries",e=>(e[1]=yt(this,e[1]),e))},every(e,t){return Ct(this,"every",e,t,void 0,arguments)},filter(e,t){return Ct(this,"filter",e,t,n=>n.map(s=>yt(this,s)),arguments)},find(e,t){return Ct(this,"find",e,t,n=>yt(this,n),arguments)},findIndex(e,t){return Ct(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Ct(this,"findLast",e,t,n=>yt(this,n),arguments)},findLastIndex(e,t){return Ct(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Ct(this,"forEach",e,t,void 0,arguments)},includes(...e){return Ms(this,"includes",e)},indexOf(...e){return Ms(this,"indexOf",e)},join(e){return en(this).join(e)},lastIndexOf(...e){return Ms(this,"lastIndexOf",e)},map(e,t){return Ct(this,"map",e,t,void 0,arguments)},pop(){return _n(this,"pop")},push(...e){return _n(this,"push",e)},reduce(e,...t){return Mo(this,"reduce",e,t)},reduceRight(e,...t){return Mo(this,"reduceRight",e,t)},shift(){return _n(this,"shift")},some(e,t){return Ct(this,"some",e,t,void 0,arguments)},splice(...e){return _n(this,"splice",e)},toReversed(){return en(this).toReversed()},toSorted(e){return en(this).toSorted(e)},toSpliced(...e){return en(this).toSpliced(...e)},unshift(...e){return _n(this,"unshift",e)},values(){return $s(this,"values",e=>yt(this,e))}};function $s(e,t,n){const s=gs(e),o=s[t]();return s!==e&&!st(e)&&(o._next=o.next,o.next=()=>{const l=o._next();return l.done||(l.value=n(l.value)),l}),o}const Oi=Array.prototype;function Ct(e,t,n,s,o,l){const r=gs(e),i=r!==e&&!st(e),a=r[t];if(a!==Oi[t]){const h=a.apply(e,l);return i?pt(h):h}let f=n;r!==e&&(i?f=function(h,g){return n.call(this,yt(e,h),g,e)}:n.length>2&&(f=function(h,g){return n.call(this,h,g,e)}));const u=a.call(r,f,s);return i&&o?o(u):u}function Mo(e,t,n,s){const o=gs(e),l=o!==e&&!st(e);let r=n,i=!1;o!==e&&(l?(i=s.length===0,r=function(f,u,h){return i&&(i=!1,f=yt(e,f)),n.call(this,f,yt(e,u),h,e)}):n.length>3&&(r=function(f,u,h){return n.call(this,f,u,h,e)}));const a=o[t](r,...s);return i?yt(e,a):a}function Ms(e,t,n){const s=me(e);Fe(s,"iterate",$n);const o=s[t](...n);return(o===-1||o===!1)&&_s(n[0])?(n[0]=me(n[0]),s[t](...n)):o}function _n(e,t,n=[]){It(),po();const s=me(e)[t].apply(e,n);return mo(),Nt(),s}const Ti=co("__proto__,__v_isRef,__isVue"),Ql=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(ft));function Pi(e){ft(e)||(e=String(e));const t=me(this);return Fe(t,"has",e),t.hasOwnProperty(e)}class Xl{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const o=this._isReadonly,l=this._isShallow;if(n==="__v_isReactive")return!o;if(n==="__v_isReadonly")return o;if(n==="__v_isShallow")return l;if(n==="__v_raw")return s===(o?l?Fi:nr:l?tr:er).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const r=Z(t);if(!o){let a;if(r&&(a=Ri[n]))return a;if(n==="hasOwnProperty")return Pi}const i=Reflect.get(t,n,Ie(t)?t:s);if((ft(n)?Ql.has(n):Ti(n))||(o||Fe(t,"get",n),l))return i;if(Ie(i)){const a=r&&ds(n)?i:i.value;return o&&be(a)?Ys(a):a}return be(i)?o?Ys(i):Un(i):i}}class Zl extends Xl{constructor(t=!1){super(!1,t)}set(t,n,s,o){let l=t[n];const r=Z(t)&&ds(n);if(!this._isShallow){const f=$t(l);if(!st(s)&&!$t(s)&&(l=me(l),s=me(s)),!r&&Ie(l)&&!Ie(s))return f||(l.value=s),!0}const i=r?Number(n)e,qn=e=>Reflect.getPrototypeOf(e);function Di(e,t,n){return function(...s){const o=this.__v_raw,l=me(o),r=rn(l),i=e==="entries"||e===Symbol.iterator&&r,a=e==="keys"&&r,f=o[e](...s),u=n?Js:t?un:pt;return!t&&Fe(l,"iterate",a?zs:Qt),Ve(Object.create(f),{next(){const{value:h,done:g}=f.next();return g?{value:h,done:g}:{value:i?[u(h[0]),u(h[1])]:u(h),done:g}}})}}function zn(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Li(e,t){const n={get(o){const l=this.__v_raw,r=me(l),i=me(o);e||(wt(o,i)&&Fe(r,"get",o),Fe(r,"get",i));const{has:a}=qn(r),f=t?Js:e?un:pt;if(a.call(r,o))return f(l.get(o));if(a.call(r,i))return f(l.get(i));l!==r&&l.get(o)},get size(){const o=this.__v_raw;return!e&&Fe(me(o),"iterate",Qt),o.size},has(o){const l=this.__v_raw,r=me(l),i=me(o);return e||(wt(o,i)&&Fe(r,"has",o),Fe(r,"has",i)),o===i?l.has(o):l.has(o)||l.has(i)},forEach(o,l){const r=this,i=r.__v_raw,a=me(i),f=t?Js:e?un:pt;return!e&&Fe(a,"iterate",Qt),i.forEach((u,h)=>o.call(l,f(u),f(h),r))}};return Ve(n,e?{add:zn("add"),set:zn("set"),delete:zn("delete"),clear:zn("clear")}:{add(o){const l=me(this),r=qn(l),i=me(o),a=!t&&!st(o)&&!$t(o)?i:o;return r.has.call(l,a)||wt(o,a)&&r.has.call(l,o)||wt(i,a)&&r.has.call(l,i)||(l.add(a),Rt(l,"add",a,a)),this},set(o,l){!t&&!st(l)&&!$t(l)&&(l=me(l));const r=me(this),{has:i,get:a}=qn(r);let f=i.call(r,o);f||(o=me(o),f=i.call(r,o));const u=a.call(r,o);return r.set(o,l),f?wt(l,u)&&Rt(r,"set",o,l):Rt(r,"add",o,l),this},delete(o){const l=me(this),{has:r,get:i}=qn(l);let a=r.call(l,o);a||(o=me(o),a=r.call(l,o)),i&&i.call(l,o);const f=l.delete(o);return a&&Rt(l,"delete",o,void 0),f},clear(){const o=me(this),l=o.size!==0,r=o.clear();return l&&Rt(o,"clear",void 0,void 0),r}}),["keys","values","entries",Symbol.iterator].forEach(o=>{n[o]=Di(o,e,t)}),n}function _o(e,t){const n=Li(e,t);return(s,o,l)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_raw"?s:Reflect.get(ye(n,o)&&o in s?n:s,o,l)}const ji={get:_o(!1,!1)},Vi={get:_o(!1,!0)},Ui={get:_o(!0,!1)};const er=new WeakMap,tr=new WeakMap,nr=new WeakMap,Fi=new WeakMap;function Hi(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Un(e){return $t(e)?e:yo(e,!1,Ni,ji,er)}function sr(e){return yo(e,!1,Mi,Vi,tr)}function Ys(e){return yo(e,!0,$i,Ui,nr)}function yo(e,t,n,s,o){if(!be(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;const l=o.get(e);if(l)return l;const r=Hi(pi(e));if(r===0)return e;const i=new Proxy(e,r===2?s:n);return o.set(e,i),i}function Pt(e){return $t(e)?Pt(e.__v_raw):!!(e&&e.__v_isReactive)}function $t(e){return!!(e&&e.__v_isReadonly)}function st(e){return!!(e&&e.__v_isShallow)}function _s(e){return e?!!e.__v_raw:!1}function me(e){const t=e&&e.__v_raw;return t?me(t):e}function bo(e){return!ye(e,"__v_skip")&&Object.isExtensible(e)&&Dl(e,"__v_skip",!0),e}const pt=e=>be(e)?Un(e):e,un=e=>be(e)?Ys(e):e;function Ie(e){return e?e.__v_isRef===!0:!1}function ee(e){return or(e,!1)}function Bi(e){return or(e,!0)}function or(e,t){return Ie(e)?e:new Ki(e,t)}class Ki{constructor(t,n){this.dep=new go,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:me(t),this._value=n?t:pt(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||st(t)||$t(t);t=s?t:me(t),wt(t,n)&&(this._rawValue=t,this._value=s?t:pt(t),this.dep.trigger())}}function kt(e){return Ie(e)?e.value:e}const Gi={get:(e,t,n)=>t==="__v_raw"?e:kt(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const o=e[t];return Ie(o)&&!Ie(n)?(o.value=n,!0):Reflect.set(e,t,n,s)}};function lr(e){return Pt(e)?e:new Proxy(e,Gi)}function Wi(e){const t=Z(e)?new Array(e.length):{};for(const n in e)t[n]=zi(e,n);return t}class qi{constructor(t,n,s){this._object=t,this._defaultValue=s,this.__v_isRef=!0,this._value=void 0,this._key=ft(n)?n:String(n),this._raw=me(t);let o=!0,l=t;if(!Z(t)||ft(this._key)||!ds(this._key))do o=!_s(l)||st(l);while(o&&(l=l.__v_raw));this._shallow=o}get value(){let t=this._object[this._key];return this._shallow&&(t=kt(t)),this._value=t===void 0?this._defaultValue:t}set value(t){if(this._shallow&&Ie(this._raw[this._key])){const n=this._object[this._key];if(Ie(n)){n.value=t;return}}this._object[this._key]=t}get dep(){return Ai(this._raw,this._key)}}function zi(e,t,n){return new qi(e,t,n)}class Ji{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new go(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Nn-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&Ce!==this)return Gl(this,!0),!0}get value(){const t=this.dep.track();return zl(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Yi(e,t,n=!1){let s,o;return le(e)?s=e:(s=e.get,o=e.set),new Ji(s,o,n)}const Jn={},ns=new WeakMap;let Jt;function Qi(e,t=!1,n=Jt){if(n){let s=ns.get(n);s||ns.set(n,s=[]),s.push(e)}}function Xi(e,t,n=ke){const{immediate:s,deep:o,once:l,scheduler:r,augmentJob:i,call:a}=n,f=H=>o?H:st(H)||o===!1||o===0?Ot(H,1):Ot(H);let u,h,g,b,$=!1,I=!1;if(Ie(e)?(h=()=>e.value,$=st(e)):Pt(e)?(h=()=>f(e),$=!0):Z(e)?(I=!0,$=e.some(H=>Pt(H)||st(H)),h=()=>e.map(H=>{if(Ie(H))return H.value;if(Pt(H))return f(H);if(le(H))return a?a(H,2):H()})):le(e)?t?h=a?()=>a(e,2):e:h=()=>{if(g){It();try{g()}finally{Nt()}}const H=Jt;Jt=u;try{return a?a(e,3,[b]):e(b)}finally{Jt=H}}:h=xt,t&&o){const H=h,oe=o===!0?1/0:o;h=()=>Ot(H(),oe)}const F=Hl(),J=()=>{u.stop(),F&&F.active&&uo(F.effects,u)};if(l&&t){const H=t;t=(...oe)=>{H(...oe),J()}}let M=I?new Array(e.length).fill(Jn):Jn;const K=H=>{if(!(!(u.flags&1)||!u.dirty&&!H))if(t){const oe=u.run();if(o||$||(I?oe.some((Ee,ue)=>wt(Ee,M[ue])):wt(oe,M))){g&&g();const Ee=Jt;Jt=u;try{const ue=[oe,M===Jn?void 0:I&&M[0]===Jn?[]:M,b];M=oe,a?a(t,3,ue):t(...ue)}finally{Jt=Ee}}}else u.run()};return i&&i(K),u=new Bl(h),u.scheduler=r?()=>r(K,!1):K,b=H=>Qi(H,!1,u),g=u.onStop=()=>{const H=ns.get(u);if(H){if(a)a(H,4);else for(const oe of H)oe();ns.delete(u)}},t?s?K(!0):M=u.run():r?r(K.bind(null,!0),!0):u.run(),J.pause=u.pause.bind(u),J.resume=u.resume.bind(u),J.stop=J,J}function Ot(e,t=1/0,n){if(t<=0||!be(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,Ie(e))Ot(e.value,t,n);else if(Z(e))for(let s=0;s{Ot(s,t,n)});else if(Ml(e)){for(const s in e)Ot(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&Ot(e[s],t,n)}return e}/**
-* @vue/runtime-core v3.5.35
-* (c) 2018-present Yuxi (Evan) You and Vue contributors
-* @license MIT
-**/function Fn(e,t,n,s){try{return s?e(...s):e()}catch(o){ys(o,t,n)}}function mt(e,t,n,s){if(le(e)){const o=Fn(e,t,n,s);return o&&Nl(o)&&o.catch(l=>{ys(l,t,n)}),o}if(Z(e)){const o=[];for(let l=0;l>>1,o=ze[s],l=Mn(o);l=Mn(n)?ze.push(e):ze.splice(ea(t),0,e),e.flags|=1,ir()}}function ir(){ss||(ss=rr.then(cr))}function ta(e){Z(e)?an.push(...e):jt&&e.id===-1?jt.splice(nn+1,0,e):e.flags&1||(an.push(e),e.flags|=1),ir()}function Do(e,t,n=_t+1){for(;nMn(n)-Mn(s));if(an.length=0,jt){jt.push(...t);return}for(jt=t,nn=0;nne.id==null?e.flags&2?-1:1/0:e.id;function cr(e){try{for(_t=0;_t{s._d&&is(-1);const l=os(t);let r;try{r=e(...o)}finally{os(l),s._d&&is(1)}return r};return s._n=!0,s._c=!0,s._d=!0,s}function je(e,t){if(tt===null)return e;const n=Ss(tt),s=e.dirs||(e.dirs=[]);for(let o=0;o1)return n&&le(t)?t.call(s&&s.proxy):t}}function na(){return!!(Dr()||Xt)}const sa=Symbol.for("v-scx"),oa=()=>ct(sa);function En(e,t,n){return fr(e,t,n)}function fr(e,t,n=ke){const{immediate:s,deep:o,flush:l,once:r}=n,i=Ve({},n),a=t&&s||!t&&l!=="post";let f;if(Ln){if(l==="sync"){const b=oa();f=b.__watcherHandles||(b.__watcherHandles=[])}else if(!a){const b=()=>{};return b.stop=xt,b.resume=xt,b.pause=xt,b}}const u=He;i.call=(b,$,I)=>mt(b,u,$,I);let h=!1;l==="post"?i.scheduler=b=>{Qe(b,u&&u.suspense)}:l!=="sync"&&(h=!0,i.scheduler=(b,$)=>{$?b():wo(b)}),i.augmentJob=b=>{t&&(b.flags|=4),h&&(b.flags|=2,u&&(b.id=u.uid,b.i=u))};const g=Xi(e,t,i);return Ln&&(f?f.push(g):a&&g()),g}function la(e,t,n){const s=this.proxy,o=Pe(e)?e.includes(".")?dr(s,e):()=>s[e]:e.bind(s,s);let l;le(t)?l=t:(l=t.handler,n=t);const r=Hn(this),i=fr(o,l.bind(s),n);return r(),i}function dr(e,t){const n=t.split(".");return()=>{let s=e;for(let o=0;oe.__isTeleport,Ds=Symbol("_leaveCb");function xo(e,t){e.shapeFlag&6&&e.component?(e.transition=t,xo(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 hr(e,t){return le(e)?Ve({name:e.name},t,{setup:e}):e}function pr(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function Lo(e,t){let n;return!!((n=Object.getOwnPropertyDescriptor(e,t))&&!n.configurable)}const ls=new WeakMap;function An(e,t,n,s,o=!1){if(Z(e)){e.forEach((I,F)=>An(I,t&&(Z(t)?t[F]:t),n,s,o));return}if(Rn(s)&&!o){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&An(e,t,n,s.component.subTree);return}const l=s.shapeFlag&4?Ss(s.component):s.el,r=o?null:l,{i,r:a}=e,f=t&&t.r,u=i.refs===ke?i.refs={}:i.refs,h=i.setupState,g=me(h),b=h===ke?Il:I=>Lo(u,I)?!1:ye(g,I),$=(I,F)=>!(F&&Lo(u,F));if(f!=null&&f!==a){if(jo(t),Pe(f))u[f]=null,b(f)&&(h[f]=null);else if(Ie(f)){const I=t;$(f,I.k)&&(f.value=null),I.k&&(u[I.k]=null)}}if(le(a))Fn(a,i,12,[r,u]);else{const I=Pe(a),F=Ie(a);if(I||F){const J=()=>{if(e.f){const M=I?b(a)?h[a]:u[a]:$()||!e.k?a.value:u[e.k];if(o)Z(M)&&uo(M,l);else if(Z(M))M.includes(l)||M.push(l);else if(I)u[a]=[l],b(a)&&(h[a]=u[a]);else{const K=[l];$(a,e.k)&&(a.value=K),e.k&&(u[e.k]=K)}}else I?(u[a]=r,b(a)&&(h[a]=r)):F&&($(a,e.k)&&(a.value=r),e.k&&(u[e.k]=r))};if(r){const M=()=>{J(),ls.delete(e)};M.id=-1,ls.set(e,M),Qe(M,n)}else jo(e),J()}}}function jo(e){const t=ls.get(e);t&&(t.flags|=8,ls.delete(e))}vs().requestIdleCallback;vs().cancelIdleCallback;const Rn=e=>!!e.type.__asyncLoader,mr=e=>e.type.__isKeepAlive;function aa(e,t){vr(e,"a",t)}function ca(e,t){vr(e,"da",t)}function vr(e,t,n=He){const s=e.__wdc||(e.__wdc=()=>{let o=n;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(bs(t,s,n),n){let o=n.parent;for(;o&&o.parent;)mr(o.parent.vnode)&&ua(s,t,n,o),o=o.parent}}function ua(e,t,n,s){const o=bs(t,e,s,!0);xs(()=>{uo(s[t],o)},n)}function bs(e,t,n=He,s=!1){if(n){const o=n[e]||(n[e]=[]),l=t.__weh||(t.__weh=(...r)=>{It();const i=Hn(n),a=mt(t,n,e,r);return i(),Nt(),a});return s?o.unshift(l):o.push(l),l}}const Mt=e=>(t,n=He)=>{(!Ln||e==="sp")&&bs(e,(...s)=>t(...s),n)},fa=Mt("bm"),ws=Mt("m"),da=Mt("bu"),ha=Mt("u"),pa=Mt("bum"),xs=Mt("um"),ma=Mt("sp"),va=Mt("rtg"),ga=Mt("rtc");function _a(e,t=He){bs("ec",e,t)}const ya="components";function Vo(e,t){return wa(ya,e,!0,t)||e}const ba=Symbol.for("v-ndc");function wa(e,t,n=!0,s=!1){const o=tt||He;if(o){const l=o.type;{const i=rc(l,!1);if(i&&(i===t||i===Ye(t)||i===ps(Ye(t))))return l}const r=Uo(o[e]||l[e],t)||Uo(o.appContext[e],t);return!r&&s?l:r}}function Uo(e,t){return e&&(e[t]||e[Ye(t)]||e[ps(Ye(t))])}function pe(e,t,n,s){let o;const l=n,r=Z(e);if(r||Pe(e)){const i=r&&Pt(e);let a=!1,f=!1;i&&(a=!st(e),f=$t(e),e=gs(e)),o=new Array(e.length);for(let u=0,h=e.length;ut(i,a,void 0,l));else{const i=Object.keys(e);o=new Array(i.length);for(let a=0,f=i.length;ae?Lr(e)?Ss(e):Qs(e.parent):null,On=Ve(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Qs(e.parent),$root:e=>Qs(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>_r(e),$forceUpdate:e=>e.f||(e.f=()=>{wo(e.update)}),$nextTick:e=>e.n||(e.n=Ft.bind(e.proxy)),$watch:e=>la.bind(e)}),Ls=(e,t)=>e!==ke&&!e.__isScriptSetup&&ye(e,t),xa={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:o,props:l,accessCache:r,type:i,appContext:a}=e;if(t[0]!=="$"){const g=r[t];if(g!==void 0)switch(g){case 1:return s[t];case 2:return o[t];case 4:return n[t];case 3:return l[t]}else{if(Ls(s,t))return r[t]=1,s[t];if(o!==ke&&ye(o,t))return r[t]=2,o[t];if(ye(l,t))return r[t]=3,l[t];if(n!==ke&&ye(n,t))return r[t]=4,n[t];Xs&&(r[t]=0)}}const f=On[t];let u,h;if(f)return t==="$attrs"&&Fe(e.attrs,"get",""),f(e);if((u=i.__cssModules)&&(u=u[t]))return u;if(n!==ke&&ye(n,t))return r[t]=4,n[t];if(h=a.config.globalProperties,ye(h,t))return h[t]},set({_:e},t,n){const{data:s,setupState:o,ctx:l}=e;return Ls(o,t)?(o[t]=n,!0):s!==ke&&ye(s,t)?(s[t]=n,!0):ye(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(l[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:o,props:l,type:r}},i){let a;return!!(n[i]||e!==ke&&i[0]!=="$"&&ye(e,i)||Ls(t,i)||ye(l,i)||ye(s,i)||ye(On,i)||ye(o.config.globalProperties,i)||(a=r.__cssModules)&&a[i])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:ye(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Fo(e){return Z(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Xs=!0;function ka(e){const t=_r(e),n=e.proxy,s=e.ctx;Xs=!1,t.beforeCreate&&Ho(t.beforeCreate,e,"bc");const{data:o,computed:l,methods:r,watch:i,provide:a,inject:f,created:u,beforeMount:h,mounted:g,beforeUpdate:b,updated:$,activated:I,deactivated:F,beforeDestroy:J,beforeUnmount:M,destroyed:K,unmounted:H,render:oe,renderTracked:Ee,renderTriggered:ue,errorCaptured:ne,serverPrefetch:re,expose:S,inheritAttrs:O,components:D,directives:W,filters:we}=t;if(f&&Ca(f,s,null),r)for(const te in r){const fe=r[te];le(fe)&&(s[te]=fe.bind(n))}if(o){const te=o.call(n,n);be(te)&&(e.data=Un(te))}if(Xs=!0,l)for(const te in l){const fe=l[te],dt=le(fe)?fe.bind(n,n):le(fe.get)?fe.get.bind(n,n):xt,Xe=!le(fe)&&le(fe.set)?fe.set.bind(n):xt,Ze=ge({get:dt,set:Xe});Object.defineProperty(s,te,{enumerable:!0,configurable:!0,get:()=>Ze.value,set:Ue=>Ze.value=Ue})}if(i)for(const te in i)gr(i[te],s,n,te);if(a){const te=le(a)?a.call(n):a;Reflect.ownKeys(te).forEach(fe=>{Zn(fe,te[fe])})}u&&Ho(u,e,"c");function xe(te,fe){Z(fe)?fe.forEach(dt=>te(dt.bind(n))):fe&&te(fe.bind(n))}if(xe(fa,h),xe(ws,g),xe(da,b),xe(ha,$),xe(aa,I),xe(ca,F),xe(_a,ne),xe(ga,Ee),xe(va,ue),xe(pa,M),xe(xs,H),xe(ma,re),Z(S))if(S.length){const te=e.exposed||(e.exposed={});S.forEach(fe=>{Object.defineProperty(te,fe,{get:()=>n[fe],set:dt=>n[fe]=dt,enumerable:!0})})}else e.exposed||(e.exposed={});oe&&e.render===xt&&(e.render=oe),O!=null&&(e.inheritAttrs=O),D&&(e.components=D),W&&(e.directives=W),re&&pr(e)}function Ca(e,t,n=xt){Z(e)&&(e=Zs(e));for(const s in e){const o=e[s];let l;be(o)?"default"in o?l=ct(o.from||s,o.default,!0):l=ct(o.from||s):l=ct(o),Ie(l)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>l.value,set:r=>l.value=r}):t[s]=l}}function Ho(e,t,n){mt(Z(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function gr(e,t,n,s){let o=s.includes(".")?dr(n,s):()=>n[s];if(Pe(e)){const l=t[e];le(l)&&En(o,l)}else if(le(e))En(o,e.bind(n));else if(be(e))if(Z(e))e.forEach(l=>gr(l,t,n,s));else{const l=le(e.handler)?e.handler.bind(n):t[e.handler];le(l)&&En(o,l,e)}}function _r(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:o,optionsCache:l,config:{optionMergeStrategies:r}}=e.appContext,i=l.get(t);let a;return i?a=i:!o.length&&!n&&!s?a=t:(a={},o.length&&o.forEach(f=>rs(a,f,r,!0)),rs(a,t,r)),be(t)&&l.set(t,a),a}function rs(e,t,n,s=!1){const{mixins:o,extends:l}=t;l&&rs(e,l,n,!0),o&&o.forEach(r=>rs(e,r,n,!0));for(const r in t)if(!(s&&r==="expose")){const i=Sa[r]||n&&n[r];e[r]=i?i(e[r],t[r]):t[r]}return e}const Sa={data:Bo,props:Ko,emits:Ko,methods:wn,computed:wn,beforeCreate:We,created:We,beforeMount:We,mounted:We,beforeUpdate:We,updated:We,beforeDestroy:We,beforeUnmount:We,destroyed:We,unmounted:We,activated:We,deactivated:We,errorCaptured:We,serverPrefetch:We,components:wn,directives:wn,watch:Aa,provide:Bo,inject:Ea};function Bo(e,t){return t?e?function(){return Ve(le(e)?e.call(this,this):e,le(t)?t.call(this,this):t)}:t:e}function Ea(e,t){return wn(Zs(e),Zs(t))}function Zs(e){if(Z(e)){const t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ye(t)}Modifiers`]||e[`${Gt(t)}Modifiers`];function Pa(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||ke;let o=n;const l=t.startsWith("update:"),r=l&&Ta(s,t.slice(7));r&&(r.trim&&(o=n.map(u=>Pe(u)?u.trim():u)),r.number&&(o=n.map(ms)));let i,a=s[i=Ps(t)]||s[i=Ps(Ye(t))];!a&&l&&(a=s[i=Ps(Gt(t))]),a&&mt(a,e,6,o);const f=s[i+"Once"];if(f){if(!e.emitted)e.emitted={};else if(e.emitted[i])return;e.emitted[i]=!0,mt(f,e,6,o)}}const Ia=new WeakMap;function br(e,t,n=!1){const s=n?Ia:t.emitsCache,o=s.get(e);if(o!==void 0)return o;const l=e.emits;let r={},i=!1;if(!le(e)){const a=f=>{const u=br(f,t,!0);u&&(i=!0,Ve(r,u))};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}return!l&&!i?(be(e)&&s.set(e,null),null):(Z(l)?l.forEach(a=>r[a]=null):Ve(r,l),be(e)&&s.set(e,r),r)}function ks(e,t){return!e||!us(t)?!1:(t=t.slice(2).replace(/Once$/,""),ye(e,t[0].toLowerCase()+t.slice(1))||ye(e,Gt(t))||ye(e,t))}function Go(e){const{type:t,vnode:n,proxy:s,withProxy:o,propsOptions:[l],slots:r,attrs:i,emit:a,render:f,renderCache:u,props:h,data:g,setupState:b,ctx:$,inheritAttrs:I}=e,F=os(e);let J,M;try{if(n.shapeFlag&4){const H=o||s,oe=H;J=bt(f.call(oe,H,u,h,b,g,$)),M=i}else{const H=t;J=bt(H.length>1?H(h,{attrs:i,slots:r,emit:a}):H(h,null)),M=t.props?i:Na(i)}}catch(H){Tn.length=0,ys(H,e,1),J=Re(Bt)}let K=J;if(M&&I!==!1){const H=Object.keys(M),{shapeFlag:oe}=K;H.length&&oe&7&&(l&&H.some(fs)&&(M=$a(M,l)),K=fn(K,M,!1,!0))}return n.dirs&&(K=fn(K,null,!1,!0),K.dirs=K.dirs?K.dirs.concat(n.dirs):n.dirs),n.transition&&xo(K,n.transition),J=K,os(F),J}const Na=e=>{let t;for(const n in e)(n==="class"||n==="style"||us(n))&&((t||(t={}))[n]=e[n]);return t},$a=(e,t)=>{const n={};for(const s in e)(!fs(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function Ma(e,t,n){const{props:s,children:o,component:l}=e,{props:r,children:i,patchFlag:a}=t,f=l.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&a>=0){if(a&1024)return!0;if(a&16)return s?Wo(s,r,f):!!r;if(a&8){const u=t.dynamicProps;for(let h=0;hObject.create(xr),Cr=e=>Object.getPrototypeOf(e)===xr;function La(e,t,n,s=!1){const o={},l=kr();e.propsDefaults=Object.create(null),Sr(e,t,o,l);for(const r in e.propsOptions[0])r in o||(o[r]=void 0);n?e.props=s?o:sr(o):e.type.props?e.props=o:e.props=l,e.attrs=l}function ja(e,t,n,s){const{props:o,attrs:l,vnode:{patchFlag:r}}=e,i=me(o),[a]=e.propsOptions;let f=!1;if((s||r>0)&&!(r&16)){if(r&8){const u=e.vnode.dynamicProps;for(let h=0;h{a=!0;const[g,b]=Er(h,t,!0);Ve(r,g),b&&i.push(...b)};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}if(!l&&!a)return be(e)&&s.set(e,ln),ln;if(Z(l))for(let u=0;ue==="_"||e==="_ctx"||e==="$stable",Co=e=>Z(e)?e.map(bt):[bt(e)],Ua=(e,t,n)=>{if(t._n)return t;const s=Xn((...o)=>Co(t(...o)),n);return s._c=!1,s},Ar=(e,t,n)=>{const s=e._ctx;for(const o in e){if(ko(o))continue;const l=e[o];if(le(l))t[o]=Ua(o,l,s);else if(l!=null){const r=Co(l);t[o]=()=>r}}},Rr=(e,t)=>{const n=Co(t);e.slots.default=()=>n},Or=(e,t,n)=>{for(const s in t)(n||!ko(s))&&(e[s]=t[s])},Fa=(e,t,n)=>{const s=e.slots=kr();if(e.vnode.shapeFlag&32){const o=t._;o?(Or(s,t,n),n&&Dl(s,"_",o,!0)):Ar(t,s)}else t&&Rr(e,t)},Ha=(e,t,n)=>{const{vnode:s,slots:o}=e;let l=!0,r=ke;if(s.shapeFlag&32){const i=t._;i?n&&i===1?l=!1:Or(o,t,n):(l=!t.$stable,Ar(t,o)),r=t}else t&&(Rr(e,t),r={default:1});if(l)for(const i in o)!ko(i)&&r[i]==null&&delete o[i]},Qe=qa;function Ba(e){return Ka(e)}function Ka(e,t){const n=vs();n.__VUE__=!0;const{insert:s,remove:o,patchProp:l,createElement:r,createText:i,createComment:a,setText:f,setElementText:u,parentNode:h,nextSibling:g,setScopeId:b=xt,insertStaticContent:$}=e,I=(d,p,_,x=null,A=null,w=null,L=void 0,P=null,N=!!p.dynamicChildren)=>{if(d===p)return;d&&!yn(d,p)&&(x=E(d),Ue(d,A,w,!0),d=null),p.patchFlag===-2&&(N=!1,p.dynamicChildren=null);const{type:R,ref:Y,shapeFlag:U}=p;switch(R){case Cs:F(d,p,_,x);break;case Bt:J(d,p,_,x);break;case Vs:d==null&&M(p,_,x,L);break;case X:D(d,p,_,x,A,w,L,P,N);break;default:U&1?oe(d,p,_,x,A,w,L,P,N):U&6?W(d,p,_,x,A,w,L,P,N):(U&64||U&128)&&R.process(d,p,_,x,A,w,L,P,N,z)}Y!=null&&A?An(Y,d&&d.ref,w,p||d,!p):Y==null&&d&&d.ref!=null&&An(d.ref,null,w,d,!0)},F=(d,p,_,x)=>{if(d==null)s(p.el=i(p.children),_,x);else{const A=p.el=d.el;p.children!==d.children&&f(A,p.children)}},J=(d,p,_,x)=>{d==null?s(p.el=a(p.children||""),_,x):p.el=d.el},M=(d,p,_,x)=>{[d.el,d.anchor]=$(d.children,p,_,x,d.el,d.anchor)},K=({el:d,anchor:p},_,x)=>{let A;for(;d&&d!==p;)A=g(d),s(d,_,x),d=A;s(p,_,x)},H=({el:d,anchor:p})=>{let _;for(;d&&d!==p;)_=g(d),o(d),d=_;o(p)},oe=(d,p,_,x,A,w,L,P,N)=>{if(p.type==="svg"?L="svg":p.type==="math"&&(L="mathml"),d==null)Ee(p,_,x,A,w,L,P,N);else{const R=d.el&&d.el._isVueCE?d.el:null;try{R&&R._beginPatch(),re(d,p,A,w,L,P,N)}finally{R&&R._endPatch()}}},Ee=(d,p,_,x,A,w,L,P)=>{let N,R;const{props:Y,shapeFlag:U,transition:q,dirs:Q}=d;if(N=d.el=r(d.type,w,Y&&Y.is,Y),U&8?u(N,d.children):U&16&&ne(d.children,N,null,x,A,js(d,w),L,P),Q&&qt(d,null,x,"created"),ue(N,d,d.scopeId,L,x),Y){for(const se in Y)se!=="value"&&!kn(se)&&l(N,se,null,Y[se],w,x);"value"in Y&&l(N,"value",null,Y.value,w),(R=Y.onVnodeBeforeMount)&>(R,x,d)}Q&&qt(d,null,x,"beforeMount");const ie=Ga(A,q);ie&&q.beforeEnter(N),s(N,p,_),((R=Y&&Y.onVnodeMounted)||ie||Q)&&Qe(()=>{try{R&>(R,x,d),ie&&q.enter(N),Q&&qt(d,null,x,"mounted")}finally{}},A)},ue=(d,p,_,x,A)=>{if(_&&b(d,_),x)for(let w=0;w{for(let R=N;R{const P=p.el=d.el;let{patchFlag:N,dynamicChildren:R,dirs:Y}=p;N|=d.patchFlag&16;const U=d.props||ke,q=p.props||ke;let Q;if(_&&zt(_,!1),(Q=q.onVnodeBeforeUpdate)&>(Q,_,p,d),Y&&qt(p,d,_,"beforeUpdate"),_&&zt(_,!0),(U.innerHTML&&q.innerHTML==null||U.textContent&&q.textContent==null)&&u(P,""),R?S(d.dynamicChildren,R,P,_,x,js(p,A),w):L||fe(d,p,P,null,_,x,js(p,A),w,!1),N>0){if(N&16)O(P,U,q,_,A);else if(N&2&&U.class!==q.class&&l(P,"class",null,q.class,A),N&4&&l(P,"style",U.style,q.style,A),N&8){const ie=p.dynamicProps;for(let se=0;se{Q&>(Q,_,p,d),Y&&qt(p,d,_,"updated")},x)},S=(d,p,_,x,A,w,L)=>{for(let P=0;P{if(p!==_){if(p!==ke)for(const w in p)!kn(w)&&!(w in _)&&l(d,w,p[w],null,A,x);for(const w in _){if(kn(w))continue;const L=_[w],P=p[w];L!==P&&w!=="value"&&l(d,w,P,L,A,x)}"value"in _&&l(d,"value",p.value,_.value,A)}},D=(d,p,_,x,A,w,L,P,N)=>{const R=p.el=d?d.el:i(""),Y=p.anchor=d?d.anchor:i("");let{patchFlag:U,dynamicChildren:q,slotScopeIds:Q}=p;Q&&(P=P?P.concat(Q):Q),d==null?(s(R,_,x),s(Y,_,x),ne(p.children||[],_,Y,A,w,L,P,N)):U>0&&U&64&&q&&d.dynamicChildren&&d.dynamicChildren.length===q.length?(S(d.dynamicChildren,q,_,A,w,L,P),(p.key!=null||A&&p===A.subTree)&&Tr(d,p,!0)):fe(d,p,_,Y,A,w,L,P,N)},W=(d,p,_,x,A,w,L,P,N)=>{p.slotScopeIds=P,d==null?p.shapeFlag&512?A.ctx.activate(p,_,x,L,N):we(p,_,x,A,w,L,N):Ne(d,p,N)},we=(d,p,_,x,A,w,L)=>{const P=d.component=tc(d,x,A);if(mr(d)&&(P.ctx.renderer=z),nc(P,!1,L),P.asyncDep){if(A&&A.registerDep(P,xe,L),!d.el){const N=P.subTree=Re(Bt);J(null,N,p,_),d.placeholder=N.el}}else xe(P,d,p,_,A,w,L)},Ne=(d,p,_)=>{const x=p.component=d.component;if(Ma(d,p,_))if(x.asyncDep&&!x.asyncResolved){te(x,p,_);return}else x.next=p,x.update();else p.el=d.el,x.vnode=p},xe=(d,p,_,x,A,w,L)=>{const P=()=>{if(d.isMounted){let{next:U,bu:q,u:Q,parent:ie,vnode:se}=d;{const rt=Pr(d);if(rt){U&&(U.el=se.el,te(d,U,L)),rt.asyncDep.then(()=>{Qe(()=>{d.isUnmounted||R()},A)});return}}let he=U,Ae;zt(d,!1),U?(U.el=se.el,te(d,U,L)):U=se,q&&Qn(q),(Ae=U.props&&U.props.onVnodeBeforeUpdate)&>(Ae,ie,U,se),zt(d,!0);const Oe=Go(d),lt=d.subTree;d.subTree=Oe,I(lt,Oe,h(lt.el),E(lt),d,A,w),U.el=Oe.el,he===null&&Da(d,Oe.el),Q&&Qe(Q,A),(Ae=U.props&&U.props.onVnodeUpdated)&&Qe(()=>gt(Ae,ie,U,se),A)}else{let U;const{el:q,props:Q}=p,{bm:ie,m:se,parent:he,root:Ae,type:Oe}=d,lt=Rn(p);zt(d,!1),ie&&Qn(ie),!lt&&(U=Q&&Q.onVnodeBeforeMount)&>(U,he,p),zt(d,!0);{Ae.ce&&Ae.ce._hasShadowRoot()&&Ae.ce._injectChildStyle(Oe,d.parent?d.parent.type:void 0);const rt=d.subTree=Go(d);I(null,rt,_,x,d,A,w),p.el=rt.el}if(se&&Qe(se,A),!lt&&(U=Q&&Q.onVnodeMounted)){const rt=p;Qe(()=>gt(U,he,rt),A)}(p.shapeFlag&256||he&&Rn(he.vnode)&&he.vnode.shapeFlag&256)&&d.a&&Qe(d.a,A),d.isMounted=!0,p=_=x=null}};d.scope.on();const N=d.effect=new Bl(P);d.scope.off();const R=d.update=N.run.bind(N),Y=d.job=N.runIfDirty.bind(N);Y.i=d,Y.id=d.uid,N.scheduler=()=>wo(Y),zt(d,!0),R()},te=(d,p,_)=>{p.component=d;const x=d.vnode.props;d.vnode=p,d.next=null,ja(d,p.props,x,_),Ha(d,p.children,_),It(),Do(d),Nt()},fe=(d,p,_,x,A,w,L,P,N=!1)=>{const R=d&&d.children,Y=d?d.shapeFlag:0,U=p.children,{patchFlag:q,shapeFlag:Q}=p;if(q>0){if(q&128){Xe(R,U,_,x,A,w,L,P,N);return}else if(q&256){dt(R,U,_,x,A,w,L,P,N);return}}Q&8?(Y&16&&$e(R,A,w),U!==R&&u(_,U)):Y&16?Q&16?Xe(R,U,_,x,A,w,L,P,N):$e(R,A,w,!0):(Y&8&&u(_,""),Q&16&&ne(U,_,x,A,w,L,P,N))},dt=(d,p,_,x,A,w,L,P,N)=>{d=d||ln,p=p||ln;const R=d.length,Y=p.length,U=Math.min(R,Y);let q;for(q=0;qY?$e(d,A,w,!0,!1,U):ne(p,_,x,A,w,L,P,N,U)},Xe=(d,p,_,x,A,w,L,P,N)=>{let R=0;const Y=p.length;let U=d.length-1,q=Y-1;for(;R<=U&&R<=q;){const Q=d[R],ie=p[R]=N?At(p[R]):bt(p[R]);if(yn(Q,ie))I(Q,ie,_,null,A,w,L,P,N);else break;R++}for(;R<=U&&R<=q;){const Q=d[U],ie=p[q]=N?At(p[q]):bt(p[q]);if(yn(Q,ie))I(Q,ie,_,null,A,w,L,P,N);else break;U--,q--}if(R>U){if(R<=q){const Q=q+1,ie=Qq)for(;R<=U;)Ue(d[R],A,w,!0),R++;else{const Q=R,ie=R,se=new Map;for(R=ie;R<=q;R++){const Ge=p[R]=N?At(p[R]):bt(p[R]);Ge.key!=null&&se.set(Ge.key,R)}let he,Ae=0;const Oe=q-ie+1;let lt=!1,rt=0;const Wt=new Array(Oe);for(R=0;R=Oe){Ue(Ge,A,w,!0);continue}let it;if(Ge.key!=null)it=se.get(Ge.key);else for(he=ie;he<=q;he++)if(Wt[he-ie]===0&&yn(Ge,p[he])){it=he;break}it===void 0?Ue(Ge,A,w,!0):(Wt[it-ie]=R+1,it>=rt?rt=it:lt=!0,I(Ge,p[it],_,null,A,w,L,P,N),Ae++)}const Kn=lt?Wa(Wt):ln;for(he=Kn.length-1,R=Oe-1;R>=0;R--){const Ge=ie+R,it=p[Ge],Gn=p[Ge+1],Wn=Ge+1{const{el:w,type:L,transition:P,children:N,shapeFlag:R}=d;if(R&6){Ze(d.component.subTree,p,_,x);return}if(R&128){d.suspense.move(p,_,x);return}if(R&64){L.move(d,p,_,z);return}if(L===X){s(w,p,_);for(let U=0;UP.enter(w),A));else{const{leave:U,delayLeave:q,afterLeave:Q}=P,ie=()=>{d.ctx.isUnmounted?o(w):s(w,p,_)},se=()=>{const he=w._isLeaving||!!w[Ds];w._isLeaving&&w[Ds](!0),P.persisted&&!he?ie():U(w,()=>{ie(),Q&&Q()})};q?q(w,ie,se):se()}else s(w,p,_)},Ue=(d,p,_,x=!1,A=!1)=>{const{type:w,props:L,ref:P,children:N,dynamicChildren:R,shapeFlag:Y,patchFlag:U,dirs:q,cacheIndex:Q,memo:ie}=d;if(U===-2&&(A=!1),P!=null&&(It(),An(P,null,_,d,!0),Nt()),Q!=null&&(p.renderCache[Q]=void 0),Y&256){p.ctx.deactivate(d);return}const se=Y&1&&q,he=!Rn(d);let Ae;if(he&&(Ae=L&&L.onVnodeBeforeUnmount)&>(Ae,p,d),Y&6)Ke(d.component,_,x);else{if(Y&128){d.suspense.unmount(_,x);return}se&&qt(d,null,p,"beforeUnmount"),Y&64?d.type.remove(d,p,_,z,x):R&&!R.hasOnce&&(w!==X||U>0&&U&64)?$e(R,p,_,!1,!0):(w===X&&U&384||!A&&Y&16)&&$e(N,p,_),x&&Be(d)}const Oe=ie!=null&&Q==null;(he&&(Ae=L&&L.onVnodeUnmounted)||se||Oe)&&Qe(()=>{Ae&>(Ae,p,d),se&&qt(d,null,p,"unmounted"),Oe&&(d.el=null)},_)},Be=d=>{const{type:p,el:_,anchor:x,transition:A}=d;if(p===X){ot(_,x);return}if(p===Vs){H(d);return}const w=()=>{o(_),A&&!A.persisted&&A.afterLeave&&A.afterLeave()};if(d.shapeFlag&1&&A&&!A.persisted){const{leave:L,delayLeave:P}=A,N=()=>L(_,w);P?P(d.el,w,N):N()}else w()},ot=(d,p)=>{let _;for(;d!==p;)_=g(d),o(d),d=_;o(p)},Ke=(d,p,_)=>{const{bum:x,scope:A,job:w,subTree:L,um:P,m:N,a:R}=d;zo(N),zo(R),x&&Qn(x),A.stop(),w&&(w.flags|=8,Ue(L,d,p,_)),P&&Qe(P,p),Qe(()=>{d.isUnmounted=!0},p)},$e=(d,p,_,x=!1,A=!1,w=0)=>{for(let L=w;L{if(d.shapeFlag&6)return E(d.component.subTree);if(d.shapeFlag&128)return d.suspense.next();const p=g(d.anchor||d.el),_=p&&p[ra];return _?g(_):p};let B=!1;const V=(d,p,_)=>{let x;d==null?p._vnode&&(Ue(p._vnode,null,null,!0),x=p._vnode.component):I(p._vnode||null,d,p,null,null,null,_),p._vnode=d,B||(B=!0,Do(x),ar(),B=!1)},z={p:I,um:Ue,m:Ze,r:Be,mt:we,mc:ne,pc:fe,pbc:S,n:E,o:e};return{render:V,hydrate:void 0,createApp:Oa(V)}}function js({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function zt({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Ga(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Tr(e,t,n=!1){const s=e.children,o=t.children;if(Z(s)&&Z(o))for(let l=0;l>1,e[n[i]]0&&(t[s]=n[l-1]),n[l]=s)}}for(l=n.length,r=n[l-1];l-- >0;)n[l]=r,r=t[r];return n}function Pr(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Pr(t)}function zo(e){if(e)for(let t=0;te.__isSuspense;function qa(e,t){t&&t.pendingBranch?Z(e)?t.effects.push(...e):t.effects.push(e):ta(e)}const X=Symbol.for("v-fgt"),Cs=Symbol.for("v-txt"),Bt=Symbol.for("v-cmt"),Vs=Symbol.for("v-stc"),Tn=[];let nt=null;function k(e=!1){Tn.push(nt=e?null:[])}function za(){Tn.pop(),nt=Tn[Tn.length-1]||null}let Dn=1;function is(e,t=!1){Dn+=e,e<0&&nt&&t&&(nt.hasOnce=!0)}function $r(e){return e.dynamicChildren=Dn>0?nt||ln:null,za(),Dn>0&&nt&&nt.push(e),e}function C(e,t,n,s,o,l){return $r(c(e,t,n,s,o,l,!0))}function Ja(e,t,n,s,o){return $r(Re(e,t,n,s,o,!0))}function as(e){return e?e.__v_isVNode===!0:!1}function yn(e,t){return e.type===t.type&&e.key===t.key}const Mr=({key:e})=>e??null,es=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?Pe(e)||Ie(e)||le(e)?{i:tt,r:e,k:t,f:!!n}:e:null);function c(e,t=null,n=null,s=0,o=null,l=e===X?0:1,r=!1,i=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Mr(t),ref:t&&es(t),scopeId:ur,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:l,patchFlag:s,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:tt};return i?(So(a,n),l&128&&e.normalize(a)):n&&(a.shapeFlag|=Pe(n)?8:16),Dn>0&&!r&&nt&&(a.patchFlag>0||l&6)&&a.patchFlag!==32&&nt.push(a),a}const Re=Ya;function Ya(e,t=null,n=null,s=0,o=null,l=!1){if((!e||e===ba)&&(e=Bt),as(e)){const i=fn(e,t,!0);return n&&So(i,n),Dn>0&&!l&&nt&&(i.shapeFlag&6?nt[nt.indexOf(e)]=i:nt.push(i)),i.patchFlag=-2,i}if(ic(e)&&(e=e.__vccOpts),t){t=Qa(t);let{class:i,style:a}=t;i&&!Pe(i)&&(t.class=Je(i)),be(a)&&(_s(a)&&!Z(a)&&(a=Ve({},a)),t.style=fo(a))}const r=Pe(e)?1:Nr(e)?128:ia(e)?64:be(e)?4:le(e)?2:0;return c(e,t,n,s,o,r,l,!0)}function Qa(e){return e?_s(e)||Cr(e)?Ve({},e):e:null}function fn(e,t,n=!1,s=!1){const{props:o,ref:l,patchFlag:r,children:i,transition:a}=e,f=t?Xa(o||{},t):o,u={__v_isVNode:!0,__v_skip:!0,type:e.type,props:f,key:f&&Mr(f),ref:t&&t.ref?n&&l?Z(l)?l.concat(es(t)):[l,es(t)]:es(t):l,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:i,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==X?r===-1?16:r|16:r,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:a,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&fn(e.ssContent),ssFallback:e.ssFallback&&fn(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return a&&s&&xo(u,a.clone(u)),u}function ve(e=" ",t=0){return Re(Cs,null,e,t)}function Se(e="",t=!1){return t?(k(),Ja(Bt,null,e)):Re(Bt,null,e)}function bt(e){return e==null||typeof e=="boolean"?Re(Bt):Z(e)?Re(X,null,e.slice()):as(e)?At(e):Re(Cs,null,String(e))}function At(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:fn(e)}function So(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(Z(t))n=16;else if(typeof t=="object")if(s&65){const o=t.default;o&&(o._c&&(o._d=!1),So(e,o()),o._c&&(o._d=!0));return}else{n=32;const o=t._;!o&&!Cr(t)?t._ctx=tt:o===3&&tt&&(tt.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else le(t)?(t={default:t,_ctx:tt},n=32):(t=String(t),s&64?(n=16,t=[ve(t)]):n=8);e.children=t,e.shapeFlag|=n}function Xa(...e){const t={};for(let n=0;nHe||tt;let cs,to;{const e=vs(),t=(n,s)=>{let o;return(o=e[n])||(o=e[n]=[]),o.push(s),l=>{o.length>1?o.forEach(r=>r(l)):o[0](l)}};cs=t("__VUE_INSTANCE_SETTERS__",n=>He=n),to=t("__VUE_SSR_SETTERS__",n=>Ln=n)}const Hn=e=>{const t=He;return cs(e),e.scope.on(),()=>{e.scope.off(),cs(t)}},Jo=()=>{He&&He.scope.off(),cs(null)};function Lr(e){return e.vnode.shapeFlag&4}let Ln=!1;function nc(e,t=!1,n=!1){t&&to(t);const{props:s,children:o}=e.vnode,l=Lr(e);La(e,s,l,t),Fa(e,o,n||t);const r=l?sc(e,t):void 0;return t&&to(!1),r}function sc(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,xa);const{setup:s}=n;if(s){It();const o=e.setupContext=s.length>1?lc(e):null,l=Hn(e),r=Fn(s,e,0,[e.props,o]),i=Nl(r);if(Nt(),l(),(i||e.sp)&&!Rn(e)&&pr(e),i){if(r.then(Jo,Jo),t)return r.then(a=>{Yo(e,a)}).catch(a=>{ys(a,e,0)});e.asyncDep=r}else Yo(e,r)}else jr(e)}function Yo(e,t,n){le(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:be(t)&&(e.setupState=lr(t)),jr(e)}function jr(e,t,n){const s=e.type;e.render||(e.render=s.render||xt);{const o=Hn(e);It();try{ka(e)}finally{Nt(),o()}}}const oc={get(e,t){return Fe(e,"get",""),e[t]}};function lc(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,oc),slots:e.slots,emit:e.emit,expose:t}}function Ss(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(lr(bo(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in On)return On[n](e)},has(t,n){return n in t||n in On}})):e.proxy}function rc(e,t=!0){return le(e)?e.displayName||e.name:e.name||t&&e.__name}function ic(e){return le(e)&&"__vccOpts"in e}const ge=(e,t)=>Yi(e,t,Ln);function Vr(e,t,n){try{is(-1);const s=arguments.length;return s===2?be(t)&&!Z(t)?as(t)?Re(e,null,[t]):Re(e,t):Re(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&as(n)&&(n=[n]),Re(e,t,n))}finally{is(1)}}const ac="3.5.35";/**
-* @vue/runtime-dom v3.5.35
-* (c) 2018-present Yuxi (Evan) You and Vue contributors
-* @license MIT
-**/let no;const Qo=typeof window<"u"&&window.trustedTypes;if(Qo)try{no=Qo.createPolicy("vue",{createHTML:e=>e})}catch{}const Ur=no?e=>no.createHTML(e):e=>e,cc="http://www.w3.org/2000/svg",uc="http://www.w3.org/1998/Math/MathML",Et=typeof document<"u"?document:null,Xo=Et&&Et.createElement("template"),fc={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"?Et.createElementNS(cc,e):t==="mathml"?Et.createElementNS(uc,e):n?Et.createElement(e,{is:n}):Et.createElement(e);return e==="select"&&s&&s.multiple!=null&&o.setAttribute("multiple",s.multiple),o},createText:e=>Et.createTextNode(e),createComment:e=>Et.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Et.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,o,l){const r=n?n.previousSibling:t.lastChild;if(o&&(o===l||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),!(o===l||!(o=o.nextSibling)););else{Xo.innerHTML=Ur(s==="svg"?``:s==="mathml"?``:e);const i=Xo.content;if(s==="svg"||s==="mathml"){const a=i.firstChild;for(;a.firstChild;)i.appendChild(a.firstChild);i.removeChild(a)}t.insertBefore(i,n)}return[r?r.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},dc=Symbol("_vtc");function hc(e,t,n){const s=e[dc];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Zo=Symbol("_vod"),pc=Symbol("_vsh"),mc=Symbol(""),vc=/(?:^|;)\s*display\s*:/;function gc(e,t,n){const s=e.style,o=Pe(n);let l=!1;if(n&&!o){if(t)if(Pe(t))for(const r of t.split(";")){const i=r.slice(0,r.indexOf(":")).trim();n[i]==null&&xn(s,i,"")}else for(const r in t)n[r]==null&&xn(s,r,"");for(const r in n){r==="display"&&(l=!0);const i=n[r];i!=null?yc(e,r,!Pe(t)&&t?t[r]:void 0,i)||xn(s,r,i):xn(s,r,"")}}else if(o){if(t!==n){const r=s[mc];r&&(n+=";"+r),s.cssText=n,l=vc.test(n)}}else t&&e.removeAttribute("style");Zo in e&&(e[Zo]=l?s.display:"",e[pc]&&(s.display="none"))}const el=/\s*!important$/;function xn(e,t,n){if(Z(n))n.forEach(s=>xn(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=_c(e,t);el.test(n)?e.setProperty(Gt(s),n.replace(el,""),"important"):e[s]=n}}const tl=["Webkit","Moz","ms"],Us={};function _c(e,t){const n=Us[t];if(n)return n;let s=Ye(t);if(s!=="filter"&&s in e)return Us[t]=s;s=ps(s);for(let o=0;oFs||(kc.then(()=>Fs=0),Fs=Date.now());function Sc(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;const o=n.value;if(Z(o)){const l=s.stopImmediatePropagation;s.stopImmediatePropagation=()=>{l.call(s),s._stopped=!0};const r=o.slice(),i=[s];for(let a=0;ae.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Ec=(e,t,n,s,o,l)=>{const r=o==="svg";t==="class"?hc(e,s,r):t==="style"?gc(e,n,s):us(t)?fs(t)||wc(e,t,n,s,l):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Ac(e,t,s,r))?(ol(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&sl(e,t,s,r,l,t!=="value")):e._isVueCE&&(Rc(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!Pe(s)))?ol(e,Ye(t),s,l,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),sl(e,t,s,r))};function Ac(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&il(t)&&le(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const o=e.tagName;if(o==="IMG"||o==="VIDEO"||o==="CANVAS"||o==="SOURCE")return!1}return il(t)&&Pe(n)?!1:t in e}function Rc(e,t){const n=e._def.props;if(!n)return!1;const s=Ye(t);return Array.isArray(n)?n.some(o=>Ye(o)===s):Object.keys(n).some(o=>Ye(o)===s)}const Kt=e=>{const t=e.props["onUpdate:modelValue"]||!1;return Z(t)?n=>Qn(t,n):t};function Oc(e){e.target.composing=!0}function al(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const ut=Symbol("_assign");function cl(e,t,n){return t&&(e=e.trim()),n&&(e=ms(e)),e}const et={created(e,{modifiers:{lazy:t,trim:n,number:s}},o){e[ut]=Kt(o);const l=s||o.props&&o.props.type==="number";Tt(e,t?"change":"input",r=>{r.target.composing||e[ut](cl(e.value,n,l))}),(n||l)&&Tt(e,"change",()=>{e.value=cl(e.value,n,l)}),t||(Tt(e,"compositionstart",Oc),Tt(e,"compositionend",al),Tt(e,"change",al))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:o,number:l}},r){if(e[ut]=Kt(r),e.composing)return;const i=(l||e.type==="number")&&!/^0\d/.test(e.value)?ms(e.value):e.value,a=t??"";if(i===a)return;const f=e.getRootNode();(f instanceof Document||f instanceof ShadowRoot)&&f.activeElement===e&&e.type!=="range"&&(s&&t===n||o&&e.value.trim()===a)||(e.value=a)}},Tc={deep:!0,created(e,t,n){e[ut]=Kt(n),Tt(e,"change",()=>{const s=e._modelValue,o=dn(e),l=e.checked,r=e[ut];if(Z(s)){const i=ho(s,o),a=i!==-1;if(l&&!a)r(s.concat(o));else if(!l&&a){const f=[...s];f.splice(i,1),r(f)}}else if(mn(s)){const i=new Set(s);l?i.add(o):i.delete(o),r(i)}else r(Fr(e,l))})},mounted:ul,beforeUpdate(e,t,n){e[ut]=Kt(n),ul(e,t,n)}};function ul(e,{value:t,oldValue:n},s){e._modelValue=t;let o;if(Z(t))o=ho(t,s.props.value)>-1;else if(mn(t))o=t.has(s.props.value);else{if(t===n)return;o=Ht(t,Fr(e,!0))}e.checked!==o&&(e.checked=o)}const fl={created(e,{value:t},n){e.checked=Ht(t,n.props.value),e[ut]=Kt(n),Tt(e,"change",()=>{e[ut](dn(e))})},beforeUpdate(e,{value:t,oldValue:n},s){e[ut]=Kt(s),t!==n&&(e.checked=Ht(t,s.props.value))}},Pc={deep:!0,created(e,{value:t,modifiers:{number:n}},s){const o=mn(t);Tt(e,"change",()=>{const l=Array.prototype.filter.call(e.options,r=>r.selected).map(r=>n?ms(dn(r)):dn(r));e[ut](e.multiple?o?new Set(l):l:l[0]),e._assigning=!0,Ft(()=>{e._assigning=!1})}),e[ut]=Kt(s)},mounted(e,{value:t}){dl(e,t)},beforeUpdate(e,t,n){e[ut]=Kt(n)},updated(e,{value:t}){e._assigning||dl(e,t)}};function dl(e,t){const n=e.multiple,s=Z(t);if(!(n&&!s&&!mn(t))){for(let o=0,l=e.options.length;oString(f)===String(i)):r.selected=ho(t,i)>-1}else r.selected=t.has(i);else if(Ht(dn(r),t)){e.selectedIndex!==o&&(e.selectedIndex=o);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function dn(e){return"_value"in e?e._value:e.value}function Fr(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const Ic=["ctrl","shift","alt","meta"],Nc={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Ic.some(n=>e[`${n}Key`]&&!t.includes(n))},on=(e,t)=>{if(!e)return e;const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(o,...l)=>{for(let r=0;r{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=o=>{if(!("key"in o))return;const l=Gt(o.key);if(t.some(r=>r===l||$c[r]===l))return e(o)})},Mc=Ve({patchProp:Ec},fc);let hl;function Dc(){return hl||(hl=Ba(Mc))}const Lc=(...e)=>{const t=Dc().createApp(...e),{mount:n}=t;return t.mount=s=>{const o=Vc(s);if(!o)return;const l=t._component;!le(l)&&!l.render&&!l.template&&(l.template=o.innerHTML),o.nodeType===1&&(o.textContent="");const r=n(o,!1,jc(o));return o instanceof Element&&(o.removeAttribute("v-cloak"),o.setAttribute("data-v-app","")),r},t};function jc(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Vc(e){return Pe(e)?document.querySelector(e):e}/*!
- * pinia v2.3.1
- * (c) 2025 Eduardo San Martin Morote
- * @license MIT
- */let Hr;const Es=e=>Hr=e,Br=Symbol();function so(e){return e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"&&typeof e.toJSON!="function"}var Pn;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(Pn||(Pn={}));function Uc(){const e=Fl(!0),t=e.run(()=>ee({}));let n=[],s=[];const o=bo({install(l){Es(o),o._a=l,l.provide(Br,o),l.config.globalProperties.$pinia=o,s.forEach(r=>n.push(r)),s=[]},use(l){return this._a?n.push(l):s.push(l),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return o}const Kr=()=>{};function pl(e,t,n,s=Kr){e.push(t);const o=()=>{const l=e.indexOf(t);l>-1&&(e.splice(l,1),s())};return!n&&Hl()&&Ci(o),o}function tn(e,...t){e.slice().forEach(n=>{n(...t)})}const Fc=e=>e(),ml=Symbol(),Hs=Symbol();function oo(e,t){e instanceof Map&&t instanceof Map?t.forEach((n,s)=>e.set(s,n)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const n in t){if(!t.hasOwnProperty(n))continue;const s=t[n],o=e[n];so(o)&&so(s)&&e.hasOwnProperty(n)&&!Ie(s)&&!Pt(s)?e[n]=oo(o,s):e[n]=s}return e}const Hc=Symbol();function Bc(e){return!so(e)||!e.hasOwnProperty(Hc)}const{assign:Lt}=Object;function Kc(e){return!!(Ie(e)&&e.effect)}function Gc(e,t,n,s){const{state:o,actions:l,getters:r}=t,i=n.state.value[e];let a;function f(){i||(n.state.value[e]=o?o():{});const u=Wi(n.state.value[e]);return Lt(u,l,Object.keys(r||{}).reduce((h,g)=>(h[g]=bo(ge(()=>{Es(n);const b=n._s.get(e);return r[g].call(b,b)})),h),{}))}return a=Gr(e,f,t,n,s,!0),a}function Gr(e,t,n={},s,o,l){let r;const i=Lt({actions:{}},n),a={deep:!0};let f,u,h=[],g=[],b;const $=s.state.value[e];!l&&!$&&(s.state.value[e]={});let I;function F(ne){let re;f=u=!1,typeof ne=="function"?(ne(s.state.value[e]),re={type:Pn.patchFunction,storeId:e,events:b}):(oo(s.state.value[e],ne),re={type:Pn.patchObject,payload:ne,storeId:e,events:b});const S=I=Symbol();Ft().then(()=>{I===S&&(f=!0)}),u=!0,tn(h,re,s.state.value[e])}const J=l?function(){const{state:re}=n,S=re?re():{};this.$patch(O=>{Lt(O,S)})}:Kr;function M(){r.stop(),h=[],g=[],s._s.delete(e)}const K=(ne,re="")=>{if(ml in ne)return ne[Hs]=re,ne;const S=function(){Es(s);const O=Array.from(arguments),D=[],W=[];function we(te){D.push(te)}function Ne(te){W.push(te)}tn(g,{args:O,name:S[Hs],store:oe,after:we,onError:Ne});let xe;try{xe=ne.apply(this&&this.$id===e?this:oe,O)}catch(te){throw tn(W,te),te}return xe instanceof Promise?xe.then(te=>(tn(D,te),te)).catch(te=>(tn(W,te),Promise.reject(te))):(tn(D,xe),xe)};return S[ml]=!0,S[Hs]=re,S},H={_p:s,$id:e,$onAction:pl.bind(null,g),$patch:F,$reset:J,$subscribe(ne,re={}){const S=pl(h,ne,re.detached,()=>O()),O=r.run(()=>En(()=>s.state.value[e],D=>{(re.flush==="sync"?u:f)&&ne({storeId:e,type:Pn.direct,events:b},D)},Lt({},a,re)));return S},$dispose:M},oe=Un(H);s._s.set(e,oe);const ue=(s._a&&s._a.runWithContext||Fc)(()=>s._e.run(()=>(r=Fl()).run(()=>t({action:K}))));for(const ne in ue){const re=ue[ne];if(Ie(re)&&!Kc(re)||Pt(re))l||($&&Bc(re)&&(Ie(re)?re.value=$[ne]:oo(re,$[ne])),s.state.value[e][ne]=re);else if(typeof re=="function"){const S=K(re,ne);ue[ne]=S,i.actions[ne]=re}}return Lt(oe,ue),Lt(me(oe),ue),Object.defineProperty(oe,"$state",{get:()=>s.state.value[e],set:ne=>{F(re=>{Lt(re,ne)})}}),s._p.forEach(ne=>{Lt(oe,r.run(()=>ne({store:oe,app:s._a,pinia:s,options:i})))}),$&&l&&n.hydrate&&n.hydrate(oe.$state,$),f=!0,u=!0,oe}/*! #__NO_SIDE_EFFECTS__ */function Wc(e,t,n){let s,o;const l=typeof t=="function";s=e,o=l?n:t;function r(i,a){const f=na();return i=i||(f?ct(Br,null):null),i&&Es(i),i=Hr,i._s.has(s)||(l?Gr(s,t,o,i):Gc(s,o,i)),i._s.get(s)}return r.$id=s,r}/*!
- * vue-router v4.6.4
- * (c) 2025 Eduardo San Martin Morote
- * @license MIT
- */const sn=typeof document<"u";function Wr(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function qc(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&Wr(e.default)}const _e=Object.assign;function Bs(e,t){const n={};for(const s in t){const o=t[s];n[s]=vt(o)?o.map(e):e(o)}return n}const In=()=>{},vt=Array.isArray;function vl(e,t){const n={};for(const s in e)n[s]=s in t?t[s]:e[s];return n}const qr=/#/g,zc=/&/g,Jc=/\//g,Yc=/=/g,Qc=/\?/g,zr=/\+/g,Xc=/%5B/g,Zc=/%5D/g,Jr=/%5E/g,eu=/%60/g,Yr=/%7B/g,tu=/%7C/g,Qr=/%7D/g,nu=/%20/g;function Eo(e){return e==null?"":encodeURI(""+e).replace(tu,"|").replace(Xc,"[").replace(Zc,"]")}function su(e){return Eo(e).replace(Yr,"{").replace(Qr,"}").replace(Jr,"^")}function lo(e){return Eo(e).replace(zr,"%2B").replace(nu,"+").replace(qr,"%23").replace(zc,"%26").replace(eu,"`").replace(Yr,"{").replace(Qr,"}").replace(Jr,"^")}function ou(e){return lo(e).replace(Yc,"%3D")}function lu(e){return Eo(e).replace(qr,"%23").replace(Qc,"%3F")}function ru(e){return lu(e).replace(Jc,"%2F")}function jn(e){if(e==null)return null;try{return decodeURIComponent(""+e)}catch{}return""+e}const iu=/\/$/,au=e=>e.replace(iu,"");function Ks(e,t,n="/"){let s,o={},l="",r="";const i=t.indexOf("#");let a=t.indexOf("?");return a=i>=0&&a>i?-1:a,a>=0&&(s=t.slice(0,a),l=t.slice(a,i>0?i:t.length),o=e(l.slice(1))),i>=0&&(s=s||t.slice(0,i),r=t.slice(i,t.length)),s=du(s??t,n),{fullPath:s+l+r,path:s,query:o,hash:jn(r)}}function cu(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function gl(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function uu(e,t,n){const s=t.matched.length-1,o=n.matched.length-1;return s>-1&&s===o&&hn(t.matched[s],n.matched[o])&&Xr(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function hn(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Xr(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!fu(e[n],t[n]))return!1;return!0}function fu(e,t){return vt(e)?_l(e,t):vt(t)?_l(t,e):(e==null?void 0:e.valueOf())===(t==null?void 0:t.valueOf())}function _l(e,t){return vt(t)?e.length===t.length&&e.every((n,s)=>n===t[s]):e.length===1&&e[0]===t}function du(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),s=e.split("/"),o=s[s.length-1];(o===".."||o===".")&&s.push("");let l=n.length-1,r,i;for(r=0;r1&&l--;else break;return n.slice(0,l).join("/")+"/"+s.slice(r).join("/")}const Dt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};let ro=function(e){return e.pop="pop",e.push="push",e}({}),Gs=function(e){return e.back="back",e.forward="forward",e.unknown="",e}({});function hu(e){if(!e)if(sn){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),au(e)}const pu=/^[^#]+#/;function mu(e,t){return e.replace(pu,"#")+t}function vu(e,t){const n=document.documentElement.getBoundingClientRect(),s=e.getBoundingClientRect();return{behavior:t.behavior,left:s.left-n.left-(t.left||0),top:s.top-n.top-(t.top||0)}}const As=()=>({left:window.scrollX,top:window.scrollY});function gu(e){let t;if("el"in e){const n=e.el,s=typeof n=="string"&&n.startsWith("#"),o=typeof n=="string"?s?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!o)return;t=vu(o,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function yl(e,t){return(history.state?history.state.position-t:-1)+e}const io=new Map;function _u(e,t){io.set(e,t)}function yu(e){const t=io.get(e);return io.delete(e),t}function bu(e){return typeof e=="string"||e&&typeof e=="object"}function Zr(e){return typeof e=="string"||typeof e=="symbol"}let Te=function(e){return e[e.MATCHER_NOT_FOUND=1]="MATCHER_NOT_FOUND",e[e.NAVIGATION_GUARD_REDIRECT=2]="NAVIGATION_GUARD_REDIRECT",e[e.NAVIGATION_ABORTED=4]="NAVIGATION_ABORTED",e[e.NAVIGATION_CANCELLED=8]="NAVIGATION_CANCELLED",e[e.NAVIGATION_DUPLICATED=16]="NAVIGATION_DUPLICATED",e}({});const ei=Symbol("");Te.MATCHER_NOT_FOUND+"",Te.NAVIGATION_GUARD_REDIRECT+"",Te.NAVIGATION_ABORTED+"",Te.NAVIGATION_CANCELLED+"",Te.NAVIGATION_DUPLICATED+"";function pn(e,t){return _e(new Error,{type:e,[ei]:!0},t)}function St(e,t){return e instanceof Error&&ei in e&&(t==null||!!(e.type&t))}const wu=["params","query","hash"];function xu(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;const t={};for(const n of wu)n in e&&(t[n]=e[n]);return JSON.stringify(t,null,2)}function ku(e){const t={};if(e===""||e==="?")return t;const n=(e[0]==="?"?e.slice(1):e).split("&");for(let s=0;so&&lo(o)):[s&&lo(s)]).forEach(o=>{o!==void 0&&(t+=(t.length?"&":"")+n,o!=null&&(t+="="+o))})}return t}function Cu(e){const t={};for(const n in e){const s=e[n];s!==void 0&&(t[n]=vt(s)?s.map(o=>o==null?null:""+o):s==null?s:""+s)}return t}const Su=Symbol(""),wl=Symbol(""),Rs=Symbol(""),Ao=Symbol(""),ao=Symbol("");function bn(){let e=[];function t(s){return e.push(s),()=>{const o=e.indexOf(s);o>-1&&e.splice(o,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function Vt(e,t,n,s,o,l=r=>r()){const r=s&&(s.enterCallbacks[o]=s.enterCallbacks[o]||[]);return()=>new Promise((i,a)=>{const f=g=>{g===!1?a(pn(Te.NAVIGATION_ABORTED,{from:n,to:t})):g instanceof Error?a(g):bu(g)?a(pn(Te.NAVIGATION_GUARD_REDIRECT,{from:t,to:g})):(r&&s.enterCallbacks[o]===r&&typeof g=="function"&&r.push(g),i())},u=l(()=>e.call(s&&s.instances[o],t,n,f));let h=Promise.resolve(u);e.length<3&&(h=h.then(f)),h.catch(g=>a(g))})}function Ws(e,t,n,s,o=l=>l()){const l=[];for(const r of e)for(const i in r.components){let a=r.components[i];if(!(t!=="beforeRouteEnter"&&!r.instances[i]))if(Wr(a)){const f=(a.__vccOpts||a)[t];f&&l.push(Vt(f,n,s,r,i,o))}else{let f=a();l.push(()=>f.then(u=>{if(!u)throw new Error(`Couldn't resolve component "${i}" at "${r.path}"`);const h=qc(u)?u.default:u;r.mods[i]=u,r.components[i]=h;const g=(h.__vccOpts||h)[t];return g&&Vt(g,n,s,r,i,o)()}))}}return l}function Eu(e,t){const n=[],s=[],o=[],l=Math.max(t.matched.length,e.matched.length);for(let r=0;rhn(f,i))?s.push(i):n.push(i));const a=e.matched[r];a&&(t.matched.find(f=>hn(f,a))||o.push(a))}return[n,s,o]}/*!
- * vue-router v4.6.4
- * (c) 2025 Eduardo San Martin Morote
- * @license MIT
- */let Au=()=>location.protocol+"//"+location.host;function ti(e,t){const{pathname:n,search:s,hash:o}=t,l=e.indexOf("#");if(l>-1){let r=o.includes(e.slice(l))?e.slice(l).length:1,i=o.slice(r);return i[0]!=="/"&&(i="/"+i),gl(i,"")}return gl(n,e)+s+o}function Ru(e,t,n,s){let o=[],l=[],r=null;const i=({state:g})=>{const b=ti(e,location),$=n.value,I=t.value;let F=0;if(g){if(n.value=b,t.value=g,r&&r===$){r=null;return}F=I?g.position-I.position:0}else s(b);o.forEach(J=>{J(n.value,$,{delta:F,type:ro.pop,direction:F?F>0?Gs.forward:Gs.back:Gs.unknown})})};function a(){r=n.value}function f(g){o.push(g);const b=()=>{const $=o.indexOf(g);$>-1&&o.splice($,1)};return l.push(b),b}function u(){if(document.visibilityState==="hidden"){const{history:g}=window;if(!g.state)return;g.replaceState(_e({},g.state,{scroll:As()}),"")}}function h(){for(const g of l)g();l=[],window.removeEventListener("popstate",i),window.removeEventListener("pagehide",u),document.removeEventListener("visibilitychange",u)}return window.addEventListener("popstate",i),window.addEventListener("pagehide",u),document.addEventListener("visibilitychange",u),{pauseListeners:a,listen:f,destroy:h}}function xl(e,t,n,s=!1,o=!1){return{back:e,current:t,forward:n,replaced:s,position:window.history.length,scroll:o?As():null}}function Ou(e){const{history:t,location:n}=window,s={value:ti(e,n)},o={value:t.state};o.value||l(s.value,{back:null,current:s.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function l(a,f,u){const h=e.indexOf("#"),g=h>-1?(n.host&&document.querySelector("base")?e:e.slice(h))+a:Au()+e+a;try{t[u?"replaceState":"pushState"](f,"",g),o.value=f}catch(b){console.error(b),n[u?"replace":"assign"](g)}}function r(a,f){l(a,_e({},t.state,xl(o.value.back,a,o.value.forward,!0),f,{position:o.value.position}),!0),s.value=a}function i(a,f){const u=_e({},o.value,t.state,{forward:a,scroll:As()});l(u.current,u,!0),l(a,_e({},xl(s.value,a,null),{position:u.position+1},f),!1),s.value=a}return{location:s,state:o,push:i,replace:r}}function Tu(e){e=hu(e);const t=Ou(e),n=Ru(e,t.state,t.location,t.replace);function s(l,r=!0){r||n.pauseListeners(),history.go(l)}const o=_e({location:"",base:e,go:s,createHref:mu.bind(null,e)},t,n);return Object.defineProperty(o,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(o,"state",{enumerable:!0,get:()=>t.state.value}),o}function Pu(e){return e=location.host?e||location.pathname+location.search:"",e.includes("#")||(e+="#"),Tu(e)}let Yt=function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e}({});var De=function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e}(De||{});const Iu={type:Yt.Static,value:""},Nu=/[a-zA-Z0-9_]/;function $u(e){if(!e)return[[]];if(e==="/")return[[Iu]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(b){throw new Error(`ERR (${n})/"${f}": ${b}`)}let n=De.Static,s=n;const o=[];let l;function r(){l&&o.push(l),l=[]}let i=0,a,f="",u="";function h(){f&&(n===De.Static?l.push({type:Yt.Static,value:f}):n===De.Param||n===De.ParamRegExp||n===De.ParamRegExpEnd?(l.length>1&&(a==="*"||a==="+")&&t(`A repeatable param (${f}) must be alone in its segment. eg: '/:ids+.`),l.push({type:Yt.Param,value:f,regexp:u,repeatable:a==="*"||a==="+",optional:a==="*"||a==="?"})):t("Invalid state to consume buffer"),f="")}function g(){f+=a}for(;it.length?t.length===1&&t[0]===qe.Static+qe.Segment?1:-1:0}function ni(e,t){let n=0;const s=e.score,o=t.score;for(;n0&&t[t.length-1]<0}const Vu={strict:!1,end:!0,sensitive:!1};function Uu(e,t,n){const s=Lu($u(e.path),n),o=_e(s,{record:e,parent:t,children:[],alias:[]});return t&&!o.record.aliasOf==!t.record.aliasOf&&t.children.push(o),o}function Fu(e,t){const n=[],s=new Map;t=vl(Vu,t);function o(h){return s.get(h)}function l(h,g,b){const $=!b,I=El(h);I.aliasOf=b&&b.record;const F=vl(t,h),J=[I];if("alias"in h){const H=typeof h.alias=="string"?[h.alias]:h.alias;for(const oe of H)J.push(El(_e({},I,{components:b?b.record.components:I.components,path:oe,aliasOf:b?b.record:I})))}let M,K;for(const H of J){const{path:oe}=H;if(g&&oe[0]!=="/"){const Ee=g.record.path,ue=Ee[Ee.length-1]==="/"?"":"/";H.path=g.record.path+(oe&&ue+oe)}if(M=Uu(H,g,F),b?b.alias.push(M):(K=K||M,K!==M&&K.alias.push(M),$&&h.name&&!Al(M)&&r(h.name)),si(M)&&a(M),I.children){const Ee=I.children;for(let ue=0;ue{r(K)}:In}function r(h){if(Zr(h)){const g=s.get(h);g&&(s.delete(h),n.splice(n.indexOf(g),1),g.children.forEach(r),g.alias.forEach(r))}else{const g=n.indexOf(h);g>-1&&(n.splice(g,1),h.record.name&&s.delete(h.record.name),h.children.forEach(r),h.alias.forEach(r))}}function i(){return n}function a(h){const g=Ku(h,n);n.splice(g,0,h),h.record.name&&!Al(h)&&s.set(h.record.name,h)}function f(h,g){let b,$={},I,F;if("name"in h&&h.name){if(b=s.get(h.name),!b)throw pn(Te.MATCHER_NOT_FOUND,{location:h});F=b.record.name,$=_e(Sl(g.params,b.keys.filter(K=>!K.optional).concat(b.parent?b.parent.keys.filter(K=>K.optional):[]).map(K=>K.name)),h.params&&Sl(h.params,b.keys.map(K=>K.name))),I=b.stringify($)}else if(h.path!=null)I=h.path,b=n.find(K=>K.re.test(I)),b&&($=b.parse(I),F=b.record.name);else{if(b=g.name?s.get(g.name):n.find(K=>K.re.test(g.path)),!b)throw pn(Te.MATCHER_NOT_FOUND,{location:h,currentLocation:g});F=b.record.name,$=_e({},g.params,h.params),I=b.stringify($)}const J=[];let M=b;for(;M;)J.unshift(M.record),M=M.parent;return{name:F,path:I,params:$,matched:J,meta:Bu(J)}}e.forEach(h=>l(h));function u(){n.length=0,s.clear()}return{addRoute:l,resolve:f,removeRoute:r,clearRoutes:u,getRoutes:i,getRecordMatcher:o}}function Sl(e,t){const n={};for(const s of t)s in e&&(n[s]=e[s]);return n}function El(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:Hu(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function Hu(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const s in e.components)t[s]=typeof n=="object"?n[s]:n;return t}function Al(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Bu(e){return e.reduce((t,n)=>_e(t,n.meta),{})}function Ku(e,t){let n=0,s=t.length;for(;n!==s;){const l=n+s>>1;ni(e,t[l])<0?s=l:n=l+1}const o=Gu(e);return o&&(s=t.lastIndexOf(o,s-1)),s}function Gu(e){let t=e;for(;t=t.parent;)if(si(t)&&ni(e,t)===0)return t}function si({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function Rl(e){const t=ct(Rs),n=ct(Ao),s=ge(()=>{const a=kt(e.to);return t.resolve(a)}),o=ge(()=>{const{matched:a}=s.value,{length:f}=a,u=a[f-1],h=n.matched;if(!u||!h.length)return-1;const g=h.findIndex(hn.bind(null,u));if(g>-1)return g;const b=Ol(a[f-2]);return f>1&&Ol(u)===b&&h[h.length-1].path!==b?h.findIndex(hn.bind(null,a[f-2])):g}),l=ge(()=>o.value>-1&&Yu(n.params,s.value.params)),r=ge(()=>o.value>-1&&o.value===n.matched.length-1&&Xr(n.params,s.value.params));function i(a={}){if(Ju(a)){const f=t[kt(e.replace)?"replace":"push"](kt(e.to)).catch(In);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>f),f}return Promise.resolve()}return{route:s,href:ge(()=>s.value.href),isActive:l,isExactActive:r,navigate:i}}function Wu(e){return e.length===1?e[0]:e}const qu=hr({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:Rl,setup(e,{slots:t}){const n=Un(Rl(e)),{options:s}=ct(Rs),o=ge(()=>({[Tl(e.activeClass,s.linkActiveClass,"router-link-active")]:n.isActive,[Tl(e.exactActiveClass,s.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const l=t.default&&Wu(t.default(n));return e.custom?l:Vr("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:o.value},l)}}}),zu=qu;function Ju(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function Yu(e,t){for(const n in t){const s=t[n],o=e[n];if(typeof s=="string"){if(s!==o)return!1}else if(!vt(o)||o.length!==s.length||s.some((l,r)=>l.valueOf()!==o[r].valueOf()))return!1}return!0}function Ol(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Tl=(e,t,n)=>e??t??n,Qu=hr({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const s=ct(ao),o=ge(()=>e.route||s.value),l=ct(wl,0),r=ge(()=>{let f=kt(l);const{matched:u}=o.value;let h;for(;(h=u[f])&&!h.components;)f++;return f}),i=ge(()=>o.value.matched[r.value]);Zn(wl,ge(()=>r.value+1)),Zn(Su,i),Zn(ao,o);const a=ee();return En(()=>[a.value,i.value,e.name],([f,u,h],[g,b,$])=>{u&&(u.instances[h]=f,b&&b!==u&&f&&f===g&&(u.leaveGuards.size||(u.leaveGuards=b.leaveGuards),u.updateGuards.size||(u.updateGuards=b.updateGuards))),f&&u&&(!b||!hn(u,b)||!g)&&(u.enterCallbacks[h]||[]).forEach(I=>I(f))},{flush:"post"}),()=>{const f=o.value,u=e.name,h=i.value,g=h&&h.components[u];if(!g)return Pl(n.default,{Component:g,route:f});const b=h.props[u],$=b?b===!0?f.params:typeof b=="function"?b(f):b:null,F=Vr(g,_e({},$,t,{onVnodeUnmounted:J=>{J.component.isUnmounted&&(h.instances[u]=null)},ref:a}));return Pl(n.default,{Component:F,route:f})||F}}});function Pl(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const Xu=Qu;function Zu(e){const t=Fu(e.routes,e),n=e.parseQuery||ku,s=e.stringifyQuery||bl,o=e.history,l=bn(),r=bn(),i=bn(),a=Bi(Dt);let f=Dt;sn&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=Bs.bind(null,E=>""+E),h=Bs.bind(null,ru),g=Bs.bind(null,jn);function b(E,B){let V,z;return Zr(E)?(V=t.getRecordMatcher(E),z=B):z=E,t.addRoute(z,V)}function $(E){const B=t.getRecordMatcher(E);B&&t.removeRoute(B)}function I(){return t.getRoutes().map(E=>E.record)}function F(E){return!!t.getRecordMatcher(E)}function J(E,B){if(B=_e({},B||a.value),typeof E=="string"){const _=Ks(n,E,B.path),x=t.resolve({path:_.path},B),A=o.createHref(_.fullPath);return _e(_,x,{params:g(x.params),hash:jn(_.hash),redirectedFrom:void 0,href:A})}let V;if(E.path!=null)V=_e({},E,{path:Ks(n,E.path,B.path).path});else{const _=_e({},E.params);for(const x in _)_[x]==null&&delete _[x];V=_e({},E,{params:h(_)}),B.params=h(B.params)}const z=t.resolve(V,B),de=E.hash||"";z.params=u(g(z.params));const d=cu(s,_e({},E,{hash:su(de),path:z.path})),p=o.createHref(d);return _e({fullPath:d,hash:de,query:s===bl?Cu(E.query):E.query||{}},z,{redirectedFrom:void 0,href:p})}function M(E){return typeof E=="string"?Ks(n,E,a.value.path):_e({},E)}function K(E,B){if(f!==E)return pn(Te.NAVIGATION_CANCELLED,{from:B,to:E})}function H(E){return ue(E)}function oe(E){return H(_e(M(E),{replace:!0}))}function Ee(E,B){const V=E.matched[E.matched.length-1];if(V&&V.redirect){const{redirect:z}=V;let de=typeof z=="function"?z(E,B):z;return typeof de=="string"&&(de=de.includes("?")||de.includes("#")?de=M(de):{path:de},de.params={}),_e({query:E.query,hash:E.hash,params:de.path!=null?{}:E.params},de)}}function ue(E,B){const V=f=J(E),z=a.value,de=E.state,d=E.force,p=E.replace===!0,_=Ee(V,z);if(_)return ue(_e(M(_),{state:typeof _=="object"?_e({},de,_.state):de,force:d,replace:p}),B||V);const x=V;x.redirectedFrom=B;let A;return!d&&uu(s,z,V)&&(A=pn(Te.NAVIGATION_DUPLICATED,{to:x,from:z}),Ze(z,z,!0,!1)),(A?Promise.resolve(A):S(x,z)).catch(w=>St(w)?St(w,Te.NAVIGATION_GUARD_REDIRECT)?w:Xe(w):fe(w,x,z)).then(w=>{if(w){if(St(w,Te.NAVIGATION_GUARD_REDIRECT))return ue(_e({replace:p},M(w.to),{state:typeof w.to=="object"?_e({},de,w.to.state):de,force:d}),B||x)}else w=D(x,z,!0,p,de);return O(x,z,w),w})}function ne(E,B){const V=K(E,B);return V?Promise.reject(V):Promise.resolve()}function re(E){const B=ot.values().next().value;return B&&typeof B.runWithContext=="function"?B.runWithContext(E):E()}function S(E,B){let V;const[z,de,d]=Eu(E,B);V=Ws(z.reverse(),"beforeRouteLeave",E,B);for(const _ of z)_.leaveGuards.forEach(x=>{V.push(Vt(x,E,B))});const p=ne.bind(null,E,B);return V.push(p),$e(V).then(()=>{V=[];for(const _ of l.list())V.push(Vt(_,E,B));return V.push(p),$e(V)}).then(()=>{V=Ws(de,"beforeRouteUpdate",E,B);for(const _ of de)_.updateGuards.forEach(x=>{V.push(Vt(x,E,B))});return V.push(p),$e(V)}).then(()=>{V=[];for(const _ of d)if(_.beforeEnter)if(vt(_.beforeEnter))for(const x of _.beforeEnter)V.push(Vt(x,E,B));else V.push(Vt(_.beforeEnter,E,B));return V.push(p),$e(V)}).then(()=>(E.matched.forEach(_=>_.enterCallbacks={}),V=Ws(d,"beforeRouteEnter",E,B,re),V.push(p),$e(V))).then(()=>{V=[];for(const _ of r.list())V.push(Vt(_,E,B));return V.push(p),$e(V)}).catch(_=>St(_,Te.NAVIGATION_CANCELLED)?_:Promise.reject(_))}function O(E,B,V){i.list().forEach(z=>re(()=>z(E,B,V)))}function D(E,B,V,z,de){const d=K(E,B);if(d)return d;const p=B===Dt,_=sn?history.state:{};V&&(z||p?o.replace(E.fullPath,_e({scroll:p&&_&&_.scroll},de)):o.push(E.fullPath,de)),a.value=E,Ze(E,B,V,p),Xe()}let W;function we(){W||(W=o.listen((E,B,V)=>{if(!Ke.listening)return;const z=J(E),de=Ee(z,Ke.currentRoute.value);if(de){ue(_e(de,{replace:!0,force:!0}),z).catch(In);return}f=z;const d=a.value;sn&&_u(yl(d.fullPath,V.delta),As()),S(z,d).catch(p=>St(p,Te.NAVIGATION_ABORTED|Te.NAVIGATION_CANCELLED)?p:St(p,Te.NAVIGATION_GUARD_REDIRECT)?(ue(_e(M(p.to),{force:!0}),z).then(_=>{St(_,Te.NAVIGATION_ABORTED|Te.NAVIGATION_DUPLICATED)&&!V.delta&&V.type===ro.pop&&o.go(-1,!1)}).catch(In),Promise.reject()):(V.delta&&o.go(-V.delta,!1),fe(p,z,d))).then(p=>{p=p||D(z,d,!1),p&&(V.delta&&!St(p,Te.NAVIGATION_CANCELLED)?o.go(-V.delta,!1):V.type===ro.pop&&St(p,Te.NAVIGATION_ABORTED|Te.NAVIGATION_DUPLICATED)&&o.go(-1,!1)),O(z,d,p)}).catch(In)}))}let Ne=bn(),xe=bn(),te;function fe(E,B,V){Xe(E);const z=xe.list();return z.length?z.forEach(de=>de(E,B,V)):console.error(E),Promise.reject(E)}function dt(){return te&&a.value!==Dt?Promise.resolve():new Promise((E,B)=>{Ne.add([E,B])})}function Xe(E){return te||(te=!E,we(),Ne.list().forEach(([B,V])=>E?V(E):B()),Ne.reset()),E}function Ze(E,B,V,z){const{scrollBehavior:de}=e;if(!sn||!de)return Promise.resolve();const d=!V&&yu(yl(E.fullPath,0))||(z||!V)&&history.state&&history.state.scroll||null;return Ft().then(()=>de(E,B,d)).then(p=>p&&gu(p)).catch(p=>fe(p,E,B))}const Ue=E=>o.go(E);let Be;const ot=new Set,Ke={currentRoute:a,listening:!0,addRoute:b,removeRoute:$,clearRoutes:t.clearRoutes,hasRoute:F,getRoutes:I,resolve:J,options:e,push:H,replace:oe,go:Ue,back:()=>Ue(-1),forward:()=>Ue(1),beforeEach:l.add,beforeResolve:r.add,afterEach:i.add,onError:xe.add,isReady:dt,install(E){E.component("RouterLink",zu),E.component("RouterView",Xu),E.config.globalProperties.$router=Ke,Object.defineProperty(E.config.globalProperties,"$route",{enumerable:!0,get:()=>kt(a)}),sn&&!Be&&a.value===Dt&&(Be=!0,H(o.location).catch(z=>{}));const B={};for(const z in Dt)Object.defineProperty(B,z,{get:()=>a.value[z],enumerable:!0});E.provide(Rs,Ke),E.provide(Ao,sr(B)),E.provide(ao,a);const V=E.unmount;ot.add(E),E.unmount=function(){ot.delete(E),ot.size<1&&(f=Dt,W&&W(),W=null,a.value=Dt,Be=!1,te=!1),V()}}};function $e(E){return E.reduce((B,V)=>B.then(()=>re(V)),Promise.resolve())}return Ke}function oi(){return ct(Rs)}function ef(e){return ct(Ao)}const Bn=Wc("auth",{state:()=>({token:localStorage.getItem("mcbot_token")||"",identity:localStorage.getItem("mcbot_identity")||""}),actions:{set(e,t){this.token=e,this.identity=t||"",localStorage.setItem("mcbot_token",e),localStorage.setItem("mcbot_identity",this.identity)},clear(){this.token="",this.identity="",localStorage.removeItem("mcbot_token"),localStorage.removeItem("mcbot_identity")}}}),tf={key:0,class:"nav"},nf={class:"who"},sf={__name:"App",setup(e){const t=Bn(),n=ef(),s=oi(),o=ge(()=>n.path!=="/login");function l(){t.clear(),s.push("/login")}return(r,i)=>{const a=Vo("router-link"),f=Vo("router-view");return k(),C(X,null,[o.value?(k(),C("nav",tf,[i[3]||(i[3]=c("span",{class:"brand"},"mcbot",-1)),Re(a,{to:"/messages"},{default:Xn(()=>[...i[0]||(i[0]=[ve("Messages",-1)])]),_:1}),Re(a,{to:"/packets"},{default:Xn(()=>[...i[1]||(i[1]=[ve("Packets",-1)])]),_:1}),Re(a,{to:"/manage"},{default:Xn(()=>[...i[2]||(i[2]=[ve("Manage",-1)])]),_:1}),i[4]||(i[4]=c("span",{class:"spacer"},null,-1)),c("span",nf,T(kt(t).identity||"authenticated"),1),c("button",{onClick:l},"Log out")])):Se("",!0),Re(f)],64)}}};async function ae(e,t={}){const n=Bn(),s={...t.headers||{}};n.token&&(s.Authorization=`Bearer ${n.token}`),t.json!==void 0&&(s["Content-Type"]="application/json",t={...t,body:JSON.stringify(t.json)},delete t.json);const o=await fetch(`/api${e}`,{...t,headers:s});if(o.status===401)throw n.clear(),location.hash.startsWith("#/login")||(location.hash="#/login"),new Error("unauthorized");if(!o.ok){let l=o.statusText;try{l=(await o.json()).detail||l}catch{}throw new Error(l)}return o.json()}function li(e){const t=Bn();return`${location.protocol==="https:"?"wss":"ws"}://${location.host}/api${e}?token=${encodeURIComponent(t.token)}`}const of={class:"login-wrap"},lf={class:"login-card"},rf={key:0,class:"err"},af=["disabled"],cf={__name:"Login",setup(e){const t=Bn(),n=oi(),s=ee(""),o=ee(""),l=ee(""),r=ee(""),i=ee(!1);async function a(){r.value="",i.value=!0;try{const u=await ae("/login",{method:"POST",json:{username:s.value,password:o.value}});t.set(u.token,u.user?`user:${u.user}`:""),n.push("/")}catch(u){r.value=u.message||"login failed"}finally{i.value=!1}}async function f(){if(r.value="",!!l.value.trim()){t.set(l.value.trim(),"");try{const u=await ae("/me");t.set(l.value.trim(),u.identity),n.push("/")}catch{t.clear(),r.value="invalid token"}}}return(u,h)=>(k(),C("div",of,[c("div",lf,[h[3]||(h[3]=c("h2",null,"mcbot admin",-1)),r.value?(k(),C("div",rf,T(r.value),1)):Se("",!0),h[4]||(h[4]=c("label",null,"Username",-1)),je(c("input",{"onUpdate:modelValue":h[0]||(h[0]=g=>s.value=g),onKeyup:cn(a,["enter"]),autofocus:""},null,544),[[et,s.value]]),h[5]||(h[5]=c("label",null,"Password",-1)),je(c("input",{"onUpdate:modelValue":h[1]||(h[1]=g=>o.value=g),type:"password",onKeyup:cn(a,["enter"])},null,544),[[et,o.value]]),c("button",{disabled:i.value,onClick:a},"Log in",8,af),h[6]||(h[6]=c("label",{style:{"margin-top":"10px"}},"…or paste an API token",-1)),je(c("input",{"onUpdate:modelValue":h[2]||(h[2]=g=>l.value=g),placeholder:"bearer token",onKeyup:cn(f,["enter"])},null,544),[[et,l.value]]),c("button",{onClick:f},"Use token")])]))}};function Ut(e){return String(e).padStart(2,"0")}function ri(e){if(!e)return"";const t=new Date(e*1e3);return`${Ut(t.getHours())}:${Ut(t.getMinutes())}:${Ut(t.getSeconds())}`}function ii(e){if(!e)return"";const t=new Date(e*1e3);return`${t.getFullYear()}-${Ut(t.getMonth()+1)}-${Ut(t.getDate())} ${Ut(t.getHours())}:${Ut(t.getMinutes())}:${Ut(t.getSeconds())}`}const ai=(e,t)=>{const n=e.__vccOpts||e;for(const[s,o]of t)n[s]=o;return n},uf=["aria-label"],ff={class:"bubble"},df={__name:"InfoTip",props:{text:{type:String,default:""}},setup(e){const t=ee(!1);return(n,s)=>(k(),C("span",{class:Je(["infotip",{pinned:t.value}]),tabindex:"0",role:"button","aria-label":e.text,onClick:s[0]||(s[0]=o=>t.value=!t.value),onKeydown:[s[1]||(s[1]=cn(on(o=>t.value=!t.value,["prevent"]),["enter"])),s[2]||(s[2]=cn(on(o=>t.value=!t.value,["prevent"]),["space"]))],onBlur:s[3]||(s[3]=o=>t.value=!1)},[s[4]||(s[4]=c("span",{class:"dot","aria-hidden":"true"},"i",-1)),c("span",ff,T(e.text),1)],42,uf))}},Yn=ai(df,[["__scopeId","data-v-48ca1073"]]),hf={class:"panes"},pf={class:"pane",style:{flex:"0 0 170px"}},mf={class:"body"},vf=["onClick"],gf={class:"pane",style:{flex:"1"}},_f={key:0,class:"toolbar"},yf={key:0,class:"err"},bf={key:1,class:"muted"},wf={class:"body"},xf={key:0,class:"decoded"},kf={class:"kv"},Cf={class:"mono"},Sf={class:"kv"},Ef={class:"k"},Af={key:1},Rf={class:"toolbar"},Of={class:"chk"},Tf={class:"chk"},Pf=["disabled"],If={class:"toolbar"},Nf={class:"chk"},$f={style:{"border-top":"1px solid var(--border, #333)"}},Mf={class:"toolbar"},Df=["disabled"],Lf={key:0,class:"decoded"},jf={class:"kv"},Vf={class:"muted"},Uf={class:"mono"},Ff={class:"toolbar"},Hf={class:"chk"},Bf={class:"chk"},Kf=["disabled"],Gf={class:"decoded"},Wf={style:{margin:"12px 0 4px"}},qf={class:"kv"},zf={class:"k"},Jf={class:"kv"},Yf={class:"k mono"},Qf={key:2},Xf={class:"toolbar"},Zf={class:"mono muted"},ed=["onClick"],td={key:3},nd={class:"toolbar"},sd={id:"newUserContacts"},od=["value"],ld=["value"],rd=["disabled"],id={class:"mono muted"},ad=["onChange"],cd=["value"],ud={class:"chips"},fd=["onClick"],dd={style:{"white-space":"normal"}},hd=["onClick"],pd=["onClick"],md=["onClick"],vd={key:4},gd={class:"toolbar"},_d={key:0,class:"muted"},yd={key:0,class:"muted"},bd=["checked","disabled","onChange"],wd=["onChange"],xd=["value"],kd={class:"chips"},Cd=["onClick"],Sd=["disabled","onClick"],Ed={key:5},Ad=["checked","onChange"],Rd=["checked","onChange"],Od=["checked","onChange"],Td=["value","onChange"],Pd=["onChange"],Id=["value"],Nd={class:"chips"},$d={key:0,class:"muted"},Md=["onClick"],Dd={key:6,class:"contacts-split"},Ld={class:"pane",style:{flex:"1.6","min-width":"0"}},jd={class:"toolbar"},Vd={class:"chk"},Ud=["checked"],Fd=["checked","onChange"],Hd=["disabled"],Bd={class:"muted"},Kd={class:"body"},Gd={key:0},Wd={key:0},qd={key:0},zd={key:0},Jd={key:0},Yd={key:0},Qd=["onClick"],Xd=["checked","onChange"],Zd=["title"],eh={class:"pane contact-detail"},th={class:"body"},nh={key:0,class:"empty"},sh={key:1,class:"decoded"},oh={class:"kv"},lh={class:"k"},rh={key:7},ih=["title"],ah={key:8,class:"empty"},ch={__name:"Manage",setup(e){const t=[{key:"stats",label:"Overview"},{key:"radio",label:"Radio"},{key:"contacts",label:"Contacts"},{key:"channels",label:"Channels"},{key:"users",label:"Users"},{key:"groups",label:"Groups"},{key:"command-config",label:"Commands"},{key:"audit",label:"Audit log"}],n=ee("stats"),s=ee({}),o=ee([]),l=ee([]),r=ee([]),i=ee(""),a=ee(""),f=ee({name:"",key:""}),u=ee({name:"",commands:""}),h=ee({sel:"",group:""}),g={stats:"/stats",radio:"/device-info",contacts:"/contacts?limit=500",channels:"/channels",users:"/users",groups:"/groups","command-config":"/command-config",audit:"/audit?limit=200"};function b(v,m){const G=m.items||m;if(v==="command-config"&&Array.isArray(G))for(const ce of G){let y=[];try{y=ce.allowed_channels?JSON.parse(ce.allowed_channels):[]}catch{y=[]}ce._chans=y}return G}async function $(v,m=!1){if(n.value=v,i.value="",a.value="",!(s.value[v]&&!m))try{const G=await ae(g[v]);if(s.value[v]=b(v,G),v==="contacts"&&Wn(s.value[v]),v==="radio"&&await Ze(),(v==="users"||v==="groups"||v==="contacts")&&!o.value.length){const ce=await ae("/groups");o.value=ce.items.map(y=>y.name)}if(v==="users"&&!s.value.contacts){const ce=await ae(g.contacts);s.value.contacts=b("contacts",ce)}if(v==="groups"&&!l.value.length){const ce=await ae("/command-config");l.value=ce.items.map(y=>y.command).sort()}if(v==="command-config"&&!r.value.length){const ce=await ae("/channels");r.value=ce.items.map(y=>y.name)}}catch(G){i.value=G.message}}const I=v=>$(v,!0);async function F(v,m,G=[]){i.value="",a.value="";try{await v,m&&(a.value=m)}catch(ce){i.value=ce.message}for(const ce of G)await I(ce)}function J(v){const m=s.value["command-config"];if(!m)return;const G=m.findIndex(y=>y.command===v.command);if(G===-1)return;let ce=[];try{ce=v.allowed_channels?JSON.parse(v.allowed_channels):[]}catch{ce=[]}m[G]={...m[G],...v,_chans:ce}}async function M(v,m){i.value="",a.value="";try{const G=await ae(`/command-config/${encodeURIComponent(v)}`,{method:"PATCH",json:m});J(G),a.value=`${v}: saved`}catch(G){i.value=G.message,await I("command-config")}}function K(v,m){!m||v._chans.includes(m)||M(v.command,{allowed_channels:[...v._chans,m]})}function H(v,m){M(v.command,{allowed_channels:v._chans.filter(G=>G!==m)})}async function oe(){const v={name:f.value.name.trim()};f.value.key.trim()&&(v.key=f.value.key.trim()),v.name&&(await F(ae("/channels",{method:"POST",json:v}),`added ${v.name}`,["channels"]),i.value||(f.value={name:"",key:""}))}function Ee(v){confirm(`Remove channel ${v}? This clears its radio slot.`)&&F(ae(`/channels/${encodeURIComponent(v)}`,{method:"DELETE"}),`removed ${v}`,["channels"])}function ue(v,m){m&&F(ae(`/users/${v}/groups`,{method:"POST",json:{group:m}}),"group added",["users"])}function ne(v,m){F(ae(`/users/${v}/groups/${encodeURIComponent(m)}`,{method:"DELETE"}),"group removed",["users"])}function re(v,m){const G=prompt("New alias:",m||"");G!==null&&F(ae(`/users/${v}`,{method:"PATCH",json:{name:G}}),"renamed",["users"])}function S(v,m){confirm(`Delete user ${m||v.slice(0,12)} from the bot?`)&&F(ae(`/users/${v}`,{method:"DELETE"}),"deleted",["users"])}function O(v){const m=(v.groups||[]).includes("blocked"),G=m?ae(`/users/${v.pubkey}/block`,{method:"DELETE"}):ae(`/users/${v.pubkey}/block`,{method:"POST"});F(G,m?"unblocked":"blocked",["users"])}async function D(){const v=u.value.name.trim();if(!v)return;const m=u.value.commands.split(",").map(G=>G.trim()).filter(Boolean);await F(ae("/groups",{method:"POST",json:{name:v,commands:m}}),`group ${v} created`,["groups"]),i.value||(u.value={name:"",commands:""})}function W(v){confirm(`Delete group ${v}?`)&&F(ae(`/groups/${encodeURIComponent(v)}`,{method:"DELETE"}),"deleted",["groups"])}function we(v,m){m&&F(ae(`/groups/${encodeURIComponent(v)}/commands`,{method:"POST",json:{command:m}}),`granted ${m} to ${v}`,["groups"])}function Ne(v,m){m&&F(ae(`/groups/${encodeURIComponent(v)}/commands/${encodeURIComponent(m)}`,{method:"DELETE"}),`revoked ${m} from ${v}`,["groups"])}function xe(v,m){F(ae(`/groups/${encodeURIComponent(v)}/all-users`,{method:m?"POST":"DELETE"}),m?`${v}: now includes all users`:`${v}: explicit members only`,["groups"])}const te=ee("zero"),fe=ee(!1);async function dt(){fe.value||(fe.value=!0,await F(ae("/radio/advert",{method:"POST",json:{flood:te.value==="flood"}}),`${te.value==="flood"?"flood":"zero-hop"} advert sent`),fe.value=!1)}const Xe=ee(0);async function Ze(){try{const v=await ae("/radio/advert-interval");Xe.value=v.interval_hours}catch(v){i.value=v.message}}async function Ue(){const v=Number(Xe.value);await F(ae("/radio/advert-interval",{method:"POST",json:{interval_hours:v}}),v>0?`Flood advert every ${v}h`:"Periodic flood advert disabled"),await Ze()}const Be=ee(null),ot=ee(!1),Ke=ee(!1),$e=ee({enabled:!0,headroom:8});async function E(){if(!ot.value){ot.value=!0,i.value="";try{const v=await ae("/radio/contacts-status");Be.value=v,$e.value={enabled:v.policy.enabled,headroom:v.policy.headroom}}catch(v){i.value=v.message}ot.value=!1}}async function B(){await F(ae("/radio/contacts-policy",{method:"POST",json:{enabled:$e.value.enabled,headroom:Number($e.value.headroom)}}),"Eviction policy updated (runtime only — set radio_evict_* in mcbot.conf to persist)"),await E()}async function V(){if(!Ke.value){Ke.value=!0,i.value="",a.value="";try{const v=await ae("/radio/evict-contacts",{method:"POST",json:{dry_run:!0}}),m=v.evicted||[];if(!m.length){a.value=`Nothing to evict (used ${v.used}/${v.max??"?"}).`,Ke.value=!1;return}const G=m.map(Me=>Me.name||Me.pubkey.slice(0,12)),ce=G.slice(0,20).join(`
-`),y=G.length>20?`
-…and ${G.length-20} more`:"";if(!confirm(`Evict ${m.length} stale contact(s) from the radio?
-
-${ce}${y}`)){Ke.value=!1;return}const j=await ae("/radio/evict-contacts",{method:"POST",json:{}});a.value=`Evicted ${j.evicted.length} contact(s)`+(j.failed?`, ${j.failed} failed`:"")+(j.shortfall?`, ${j.shortfall} short (protected)`:"")}catch(v){i.value=v.message}Ke.value=!1,await E()}}const z=[{title:"Identity",keys:[["self_info.name","Name"],["self_info.public_key","Public key",{mono:!0}],["device_info.model","Model"],["device_info.ver","Firmware version"],["device_info.fw ver","Firmware code"],["device_info.fw_build","Firmware build"]]},{title:"Radio",keys:[["self_info.radio_freq","Frequency",{unit:"MHz"}],["self_info.radio_bw","Bandwidth",{unit:"kHz"}],["self_info.radio_sf","Spreading factor"],["self_info.radio_cr","Coding rate"],["self_info.tx_power","TX power",{unit:"dBm"}],["self_info.max_tx_power","Max TX power",{unit:"dBm"}],["device_info.path_hash_mode","Out path-hash mode",{fmt:v=>`${Number(v)+1} byte(s)/hop`}]]},{title:"Advertising",keys:[["self_info.adv_type","Advertised type"],["self_info.adv_lat","Latitude"],["self_info.adv_lon","Longitude"],["self_info.adv_loc_policy","Location-share policy"]]},{title:"Capacity",keys:[["device_info.max_channels","Max channels"],["device_info.max_contacts","Max contacts"]]},{title:"Battery / memory",keys:[["battery.level","Battery",{unit:"mV"}],["battery.total_kb","Total memory",{unit:"kB"}],["battery.used_kb","Used memory",{unit:"kB"}]]},{title:"Other",keys:[["device_info.ble_pin","BLE PIN"],["device_info.repeat","Repeater mode"],["self_info.manual_add_contacts","Manual contact add"],["self_info.multi_acks","Multi-acks"],["self_info.telemetry_mode_base","Telemetry: base"],["self_info.telemetry_mode_env","Telemetry: env"],["self_info.telemetry_mode_loc","Telemetry: location"]]}],de=new Set(z.flatMap(v=>v.keys.map(m=>m[0])));function d(v){if(v==null)return null;try{return JSON.parse(v)}catch{return v}}function p(v,m){const G=d(v.value);if(G==null||G==="")return"";if(m!=null&&m.fmt)return m.fmt(G);let ce=typeof G=="object"?JSON.stringify(G):String(G);return m!=null&&m.unit&&(ce=`${ce} ${m.unit}`),ce}const _=ge(()=>{const v=new Map;for(const m of s.value.radio||[])v.set(m.key,m);return v}),x=ge(()=>[...s.value.radio||[]].filter(v=>!de.has(v.key)).sort((v,m)=>v.key.localeCompare(m.key))),A={1:"Comp",2:"Rptr",3:"Room",4:"Sens"};function w(v){return v==null?"?":A[v]||String(v)}function L(v){return v&&v.length>14?`${v.slice(0,6)}...${v.slice(-6)}`:v||""}function P(v){if(!v)return"";const m=new Date(v*1e3),G=ce=>String(ce).padStart(2,"0");return`${m.getFullYear()}-${G(m.getMonth()+1)}-${G(m.getDate())} ${G(m.getHours())}:${G(m.getMinutes())}`}const N=ge(()=>o.value.filter(v=>v!=="public"&&v!=="blocked"));function R(v){return`${v.adv_name||"(unnamed)"} — ${v.public_key}`}function Y(){const v=h.value.sel.trim();if(!v)return"";const m=(s.value.contacts||[]).find(G=>R(G)===v);return m?m.public_key:/^[0-9a-fA-F]{64}$/.test(v)?v.toLowerCase():""}async function U(){const v=Y();if(!v){alert("Pick a contact from the list (or paste a 64-hex pubkey).");return}if(!h.value.group){alert("Choose an initial group.");return}i.value="",a.value="";try{await ae("/users",{method:"POST",json:{pubkey:v,group:h.value.group}}),a.value=`bot user created and added to ${h.value.group}`,h.value={sel:"",group:""},await I("users")}catch(m){alert(m.message)}}const q=ee(""),Q=ee(new Set),ie=ee(new Set),se=ee({col:"adv_name",dir:"asc"}),he=ee(new Set),Ae=ee(null),Oe=ge(()=>(s.value.contacts||[]).find(v=>v.public_key===Ae.value)||null);function lt(v){Ae.value=v.public_key}const rt=ge(()=>{const v=Oe.value;if(!v)return[];let m;v.out_path_len===-1?m="flood (no path)":v.out_path_len===0?m="direct (0 hops)":v.out_path?m=`${v.out_path} (${v.out_path_len} hop${v.out_path_len===1?"":"s"})`:m=`${v.out_path_len??"?"} hop(s)`;const G=v.adv_lat!=null&&v.adv_lon!=null?`${v.adv_lat}, ${v.adv_lon}`:"—";return[["name",v.adv_name||"—",!1],["type",w(v.type),!1],["public key",v.public_key,!0],["flags",v.flags??"—",!1],["out path",m,!0],["path hash mode",v.out_path_hash_mode??"—",!1],["location (lat, lon)",G,!1],["last advert",P(v.last_advert)||"—",!1],["last modified",P(v.lastmod)||"—",!1],["first seen",P(v.first_seen_at)||"—",!1],["last synced",P(v.last_synced_at)||"—",!1]]}),Wt=ge(()=>[...ie.value].sort()),Kn=ge(()=>Q.value.size===0),Ge=v=>!Q.value.has(v);function it(v){Q.value=v?new Set:new Set(ie.value)}function Gn(v,m){const G=new Set(Q.value);m?G.delete(v):G.add(v),Q.value=G}function Wn(v){let m=null;for(const G of v){const ce=w(G.type);ie.value.has(ce)||(m=m||new Set(ie.value),m.add(ce))}m&&(ie.value=m)}function Zt(v){se.value.col===v?se.value={col:v,dir:se.value.dir==="asc"?"desc":"asc"}:se.value={col:v,dir:"asc"}}function ui(v){const m=new Set(he.value);m.has(v)?m.delete(v):m.add(v),he.value=m}const Os=ge(()=>(s.value.contacts||[]).filter(v=>he.value.has(v.public_key))),Ro=ge(()=>Os.value.length>0);async function fi(){const v=Os.value;if(!v.length)return;const m=v.map(at=>at.adv_name||at.public_key.slice(0,12)),G=m.slice(0,20).join(`
-`),ce=m.length>20?`
-…and ${m.length-20} more`:"";if(!confirm(`Delete ${v.length} contact(s)?
-
-${G}${ce}`))return;i.value="",a.value="";let y=0,j=0,Me="";for(const at of v)try{await ae(`/contacts/${encodeURIComponent(at.public_key)}`,{method:"DELETE"}),y++}catch(Ts){j++,Me=`${Ts.message} (${at.adv_name||at.public_key.slice(0,12)})`}he.value=new Set,await I("contacts"),a.value=j?`Deleted ${y}, ${j} failed`:`Deleted ${y} contact(s)`,Me&&(i.value=Me)}const Oo=ge(()=>{const v=s.value.contacts||[],m=q.value.toLowerCase().trim(),G=Q.value,ce=v.filter(at=>G.size&&G.has(w(at.type))?!1:m?(at.public_key||"").toLowerCase().includes(m)||(at.adv_name||"").toLowerCase().includes(m):!0),{col:y,dir:j}=se.value,Me=j==="asc"?1:-1;return ce.sort((at,Ts)=>{const vn=at[y],gn=Ts[y];return vn==null&&gn==null?0:vn==null?1:gn==null?-1:typeof vn=="number"&&typeof gn=="number"?(vn-gn)*Me:String(vn).localeCompare(String(gn))*Me}),ce});function To(v){return v&&v.length?Object.keys(v[0]).filter(m=>!m.startsWith("_")):[]}function di(v){return v==null?"":Array.isArray(v)?v.join(", "):typeof v=="object"?JSON.stringify(v):String(v)}function Po(v,m){return m==="ts"&&v[m]?ii(v[m]):di(v[m])}return ws(()=>$("stats")),(v,m)=>{var G,ce;return k(),C("div",hf,[c("div",pf,[m[20]||(m[20]=c("h3",null,"Manage",-1)),c("div",mf,[c("table",null,[c("tbody",null,[(k(),C(X,null,pe(t,y=>c("tr",{key:y.key,class:Je(["clickable",{selected:n.value===y.key}]),onClick:j=>$(y.key)},[c("td",null,T(y.label),1)],10,vf)),64))])])])]),c("div",gf,[c("h3",null,T((G=t.find(y=>y.key===n.value))==null?void 0:G.label),1),i.value||a.value?(k(),C("div",_f,[i.value?(k(),C("span",yf,T(i.value),1)):Se("",!0),a.value?(k(),C("span",bf,T(a.value),1)):Se("",!0)])):Se("",!0),c("div",wf,[n.value==="stats"&&s.value.stats?(k(),C("div",xf,[c("div",kf,[m[21]||(m[21]=c("div",{class:"k"},"identity",-1)),c("div",Cf,T(((ce=s.value.stats.identity)==null?void 0:ce.pubkey)||"—"),1),m[22]||(m[22]=c("div",{class:"k"},"events seen",-1)),c("div",null,T(s.value.stats.event_count),1),m[23]||(m[23]=c("div",{class:"k"},"commands loaded",-1)),c("div",null,T(s.value.stats.commands_loaded),1)]),m[24]||(m[24]=c("h4",null,"Counts",-1)),c("div",Sf,[(k(!0),C(X,null,pe(s.value.stats.counts,(y,j)=>(k(),C(X,{key:j},[c("div",Ef,T(j),1),c("div",null,T(y),1)],64))),128))])])):n.value==="radio"?(k(),C("div",Af,[c("div",Rf,[c("label",Of,[je(c("input",{type:"radio",value:"zero","onUpdate:modelValue":m[0]||(m[0]=y=>te.value=y)},null,512),[[fl,te.value]]),m[25]||(m[25]=ve(" Zero hop ",-1))]),c("label",Tf,[je(c("input",{type:"radio",value:"flood","onUpdate:modelValue":m[1]||(m[1]=y=>te.value=y)},null,512),[[fl,te.value]]),m[26]||(m[26]=ve(" Flood ",-1))]),c("button",{disabled:fe.value,onClick:dt},T(fe.value?"Sending…":"Advert"),9,Pf),Re(Yn,{text:"Zero-hop reaches direct neighbors only; flood propagates through the mesh."})]),c("div",If,[c("label",Nf,[m[27]||(m[27]=ve(" Flood advert interval (hours) ",-1)),je(c("input",{type:"number",min:"0","onUpdate:modelValue":m[2]||(m[2]=y=>Xe.value=y),style:{width:"5em"}},null,512),[[et,Xe.value,void 0,{number:!0}]])]),c("button",{onClick:Ue},"Apply"),Re(Yn,{text:"0 = disabled. Bot sends a flood advert every N hours; persists in the database (mcbot.conf only seeds the first-run default)."})]),c("div",$f,[c("div",Mf,[m[28]||(m[28]=c("strong",null,"Contact table",-1)),c("button",{disabled:ot.value,onClick:E},T(ot.value?"Checking…":"Check contact table"),9,Df),Re(Yn,{text:"Reads the radio's contact list (takes a few seconds)."})]),Be.value?(k(),C("div",Lf,[c("div",jf,[m[29]||(m[29]=c("div",{class:"k"},"Used / max",-1)),c("div",null,[ve(T(Be.value.used)+" / "+T(Be.value.max??"?")+" ",1),c("span",Vf,"("+T(Be.value.free??"?")+" free)",1)]),m[30]||(m[30]=c("div",{class:"k"},"Protected / evictable",-1)),c("div",null,T(Be.value.protected)+" protected, "+T(Be.value.eligible)+" evictable",1),m[31]||(m[31]=c("div",{class:"k"},"Firmware autoadd byte",-1)),c("div",Uf,T(Be.value.autoadd_raw??"n/a"),1)]),c("div",Ff,[c("label",Hf,[je(c("input",{type:"checkbox","onUpdate:modelValue":m[3]||(m[3]=y=>$e.value.enabled=y)},null,512),[[Tc,$e.value.enabled]]),m[32]||(m[32]=ve(" Auto-evict (startup + when full) ",-1))]),c("label",Bf,[m[33]||(m[33]=ve(" Headroom ",-1)),je(c("input",{type:"number",min:"1",max:"100","onUpdate:modelValue":m[4]||(m[4]=y=>$e.value.headroom=y),style:{width:"4em"}},null,512),[[et,$e.value.headroom,void 0,{number:!0}]])]),c("button",{onClick:B},"Apply"),c("button",{disabled:Ke.value,onClick:V},T(Ke.value?"Evicting…":"Evict to headroom now"),9,Kf),Re(Yn,{text:"Evicts the stalest contacts from the radio (bot users, owners, and recent DM peers are protected; the bot's database keeps the full archive). Policy changes here are runtime only — set radio_evict_* in mcbot.conf to persist across restarts."})])])):Se("",!0)]),c("div",Gf,[(k(),C(X,null,pe(z,y=>(k(),C(X,{key:y.title},[c("h4",Wf,T(y.title),1),c("div",qf,[(k(!0),C(X,null,pe(y.keys,j=>{var Me;return k(),C(X,{key:j[0]},[c("div",zf,T(j[1]),1),c("div",{class:Je({mono:(Me=j[2])==null?void 0:Me.mono})},T(p(_.value.get(j[0])||{},j[2])||"—"),3)],64)}),128))])],64))),64)),x.value.length?(k(),C(X,{key:0},[m[34]||(m[34]=c("h4",{style:{margin:"12px 0 4px"}},"Unrecognized",-1)),c("div",Jf,[(k(!0),C(X,null,pe(x.value,y=>(k(),C(X,{key:y.key},[c("div",Yf,T(y.key),1),c("div",null,T(p(y)||"—"),1)],64))),128))])],64)):Se("",!0)])])):n.value==="channels"?(k(),C("div",Qf,[c("div",Xf,[je(c("input",{"onUpdate:modelValue":m[5]||(m[5]=y=>f.value.name=y),placeholder:"name (e.g. #bot or MyChan)",style:{flex:"1"}},null,512),[[et,f.value.name]]),je(c("input",{"onUpdate:modelValue":m[6]||(m[6]=y=>f.value.key=y),placeholder:"hex key (non-# only)",style:{flex:"1"}},null,512),[[et,f.value.key]]),c("button",{onClick:oe},"Add channel")]),c("table",null,[m[35]||(m[35]=c("thead",null,[c("tr",null,[c("th",null,"idx"),c("th",null,"name"),c("th",null,"secret"),c("th")])],-1)),c("tbody",null,[(k(!0),C(X,null,pe(s.value.channels,y=>(k(),C("tr",{key:y.channel_idx},[c("td",null,T(y.channel_idx),1),c("td",null,T(y.name),1),c("td",Zf,T((y.secret_hex||"").slice(0,12))+"…",1),c("td",null,[c("button",{onClick:j=>Ee(y.name)},"remove",8,ed)])]))),128))])])])):n.value==="users"?(k(),C("div",td,[c("div",nd,[je(c("input",{"onUpdate:modelValue":m[7]||(m[7]=y=>h.value.sel=y),list:"newUserContacts",placeholder:"add bot user: search a contact…",style:{flex:"0 0 320px"}},null,512),[[et,h.value.sel]]),c("datalist",sd,[(k(!0),C(X,null,pe(s.value.contacts||[],y=>(k(),C("option",{key:y.public_key,value:R(y)},null,8,od))),128))]),je(c("select",{"onUpdate:modelValue":m[8]||(m[8]=y=>h.value.group=y)},[m[36]||(m[36]=c("option",{value:""},"initial group…",-1)),(k(!0),C(X,null,pe(N.value,y=>(k(),C("option",{key:y,value:y},T(y),9,ld))),128))],512),[[Pc,h.value.group]]),c("button",{disabled:!Y()||!h.value.group,onClick:U}," Add bot user ",8,rd)]),c("table",null,[m[38]||(m[38]=c("thead",null,[c("tr",null,[c("th",null,"name"),c("th",null,"pubkey"),c("th",{style:{width:"130px"}},"add group"),c("th",null,"groups"),c("th",null,"actions")])],-1)),c("tbody",null,[(k(!0),C(X,null,pe(s.value.users,y=>(k(),C("tr",{key:y.pubkey},[c("td",null,T(y.name||"?"),1),c("td",id,T(y.pubkey.slice(0,12)),1),c("td",null,[c("select",{onChange:j=>{ue(y.pubkey,j.target.value),j.target.value=""}},[m[37]||(m[37]=c("option",{value:""},"+ group…",-1)),(k(!0),C(X,null,pe(o.value,j=>(k(),C("option",{key:j,value:j},T(j),9,cd))),128))],40,ad)]),c("td",ud,[(k(!0),C(X,null,pe(y.groups,j=>(k(),C("span",{key:j,class:"tag"},[ve(T(j)+" ",1),c("a",{href:"#",onClick:on(Me=>ne(y.pubkey,j),["prevent"]),title:"remove"},"×",8,fd)]))),128))]),c("td",dd,[c("button",{onClick:j=>re(y.pubkey,y.name)},"rename",8,hd),c("button",{onClick:j=>O(y)},T((y.groups||[]).includes("blocked")?"unblock":"block"),9,pd),c("button",{onClick:j=>S(y.pubkey,y.name)},"delete",8,md)])]))),128))])])])):n.value==="groups"?(k(),C("div",vd,[c("div",gd,[je(c("input",{"onUpdate:modelValue":m[9]||(m[9]=y=>u.value.name=y),placeholder:"new group name"},null,512),[[et,u.value.name]]),je(c("input",{"onUpdate:modelValue":m[10]||(m[10]=y=>u.value.commands=y),placeholder:"commands (comma list, optional)",style:{flex:"1"}},null,512),[[et,u.value.commands]]),c("button",{onClick:D},"Create group")]),c("table",null,[m[41]||(m[41]=c("thead",null,[c("tr",null,[c("th",null,"name"),c("th",null,"users"),c("th",{title:"Every user is a member (the * membership)"},"all users"),c("th",{style:{width:"150px"}},"grant command"),c("th",null,"commands"),c("th")])],-1)),c("tbody",null,[(k(!0),C(X,null,pe(s.value.groups,y=>(k(),C("tr",{key:y.name},[c("td",null,[ve(T(y.name),1),y.is_system?(k(),C("span",_d," [sys]")):Se("",!0)]),c("td",null,[ve(T(y.nusers),1),y.all_users?(k(),C("span",yd," +*")):Se("",!0)]),c("td",null,[c("input",{type:"checkbox",checked:y.all_users,disabled:y.name==="blocked",title:"Include all users (*) in this group",onChange:j=>xe(y.name,j.target.checked)},null,40,bd)]),c("td",null,[c("select",{onChange:j=>{we(y.name,j.target.value),j.target.value=""}},[m[39]||(m[39]=c("option",{value:""},"+ command…",-1)),m[40]||(m[40]=c("option",{value:"*"},"* (all commands)",-1)),(k(!0),C(X,null,pe(l.value,j=>(k(),C("option",{key:j,value:j},T(j),9,xd))),128))],40,wd)]),c("td",kd,[(k(!0),C(X,null,pe(y.commands,j=>(k(),C("span",{key:j,class:"tag"},[ve(T(j)+" ",1),c("a",{href:"#",onClick:on(Me=>Ne(y.name,j),["prevent"]),title:"revoke"},"×",8,Cd)]))),128))]),c("td",null,[c("button",{disabled:y.is_system,onClick:j=>W(y.name)},"delete",8,Sd)])]))),128))])])])):n.value==="command-config"?(k(),C("div",Ed,[c("table",null,[m[43]||(m[43]=c("thead",null,[c("tr",null,[c("th",null,"command"),c("th",null,"enabled"),c("th",null,"allow_dm"),c("th",null,"dm_only"),c("th",null,"cooldown"),c("th",{style:{width:"140px"}},"allow channel"),c("th",null,"allowed channels")])],-1)),c("tbody",null,[(k(!0),C(X,null,pe(s.value["command-config"],y=>(k(),C("tr",{key:y.command},[c("td",null,T(y.command),1),c("td",null,[c("input",{type:"checkbox",checked:!!y.enabled,onChange:j=>M(y.command,{enabled:j.target.checked})},null,40,Ad)]),c("td",null,[c("input",{type:"checkbox",checked:!!y.allow_dm,onChange:j=>M(y.command,{allow_dm:j.target.checked})},null,40,Rd)]),c("td",null,[c("input",{type:"checkbox",checked:!!y.dm_only,onChange:j=>M(y.command,{dm_only:j.target.checked})},null,40,Od)]),c("td",null,[c("input",{type:"number",value:y.cooldown_seconds,style:{width:"64px"},onChange:j=>M(y.command,{cooldown_seconds:Number(j.target.value)})},null,40,Td)]),c("td",null,[c("select",{onChange:j=>{K(y,j.target.value),j.target.value=""}},[m[42]||(m[42]=c("option",{value:""},"+ channel…",-1)),(k(!0),C(X,null,pe(r.value,j=>(k(),C("option",{key:j,value:j},T(j),9,Id))),128))],40,Pd)]),c("td",Nd,[y._chans.length?Se("",!0):(k(),C("span",$d,"(any)")),(k(!0),C(X,null,pe(y._chans,j=>(k(),C("span",{key:j,class:"tag"},[ve(T(j)+" ",1),c("a",{href:"#",onClick:on(Me=>H(y,j),["prevent"]),title:"remove"},"×",8,Md)]))),128))])]))),128))])])])):n.value==="contacts"?(k(),C("div",Dd,[c("div",Ld,[c("div",jd,[je(c("input",{"onUpdate:modelValue":m[11]||(m[11]=y=>q.value=y),placeholder:"search name or pubkey…",style:{flex:"0 0 260px"}},null,512),[[et,q.value]]),c("label",Vd,[c("input",{type:"checkbox",checked:Kn.value,onChange:m[12]||(m[12]=y=>it(y.target.checked))},null,40,Ud),m[44]||(m[44]=ve(" All ",-1))]),(k(!0),C(X,null,pe(Wt.value,y=>(k(),C("label",{key:y,class:"chk"},[c("input",{type:"checkbox",checked:Ge(y),onChange:j=>Gn(y,j.target.checked)},null,40,Fd),ve(" "+T(y),1)]))),128)),c("button",{disabled:!Ro.value,onClick:fi}," Delete"+T(Ro.value?` (${Os.value.length})`:""),9,Hd),c("span",Bd,T(Oo.value.length)+" shown",1)]),c("div",Kd,[c("table",null,[c("thead",null,[c("tr",null,[m[51]||(m[51]=c("th",{style:{width:"24px"}},null,-1)),c("th",{class:"sortable",onClick:m[13]||(m[13]=y=>Zt("public_key"))},[m[45]||(m[45]=ve(" pubkey",-1)),se.value.col==="public_key"?(k(),C("span",Gd,T(se.value.dir==="asc"?"▲":"▼"),1)):Se("",!0)]),c("th",{class:"sortable",onClick:m[14]||(m[14]=y=>Zt("adv_name"))},[m[46]||(m[46]=ve(" name",-1)),se.value.col==="adv_name"?(k(),C("span",Wd,T(se.value.dir==="asc"?"▲":"▼"),1)):Se("",!0)]),c("th",{class:"sortable",onClick:m[15]||(m[15]=y=>Zt("type"))},[m[47]||(m[47]=ve(" type",-1)),se.value.col==="type"?(k(),C("span",qd,T(se.value.dir==="asc"?"▲":"▼"),1)):Se("",!0)]),c("th",{class:"sortable",onClick:m[16]||(m[16]=y=>Zt("adv_lat"))},[m[48]||(m[48]=ve(" lat",-1)),se.value.col==="adv_lat"?(k(),C("span",zd,T(se.value.dir==="asc"?"▲":"▼"),1)):Se("",!0)]),c("th",{class:"sortable",onClick:m[17]||(m[17]=y=>Zt("adv_lon"))},[m[49]||(m[49]=ve(" lon",-1)),se.value.col==="adv_lon"?(k(),C("span",Jd,T(se.value.dir==="asc"?"▲":"▼"),1)):Se("",!0)]),c("th",{class:"sortable",onClick:m[18]||(m[18]=y=>Zt("last_synced_at"))},[m[50]||(m[50]=ve(" last synced",-1)),se.value.col==="last_synced_at"?(k(),C("span",Yd,T(se.value.dir==="asc"?"▲":"▼"),1)):Se("",!0)])])]),c("tbody",null,[(k(!0),C(X,null,pe(Oo.value,y=>(k(),C("tr",{key:y.public_key,class:Je(["clickable",{selected:Oe.value&&Oe.value.public_key===y.public_key}]),onClick:j=>lt(y)},[c("td",null,[c("input",{type:"checkbox",checked:he.value.has(y.public_key),onChange:j=>ui(y.public_key),onClick:m[19]||(m[19]=on(()=>{},["stop"]))},null,40,Xd)]),c("td",{class:"mono",title:y.public_key},T(L(y.public_key)),9,Zd),c("td",null,T(y.adv_name||""),1),c("td",null,T(w(y.type)),1),c("td",null,T(y.adv_lat??""),1),c("td",null,T(y.adv_lon??""),1),c("td",null,T(P(y.last_synced_at)),1)],10,Qd))),128))])])])]),c("div",eh,[m[52]||(m[52]=c("h3",null,"Contact",-1)),c("div",th,[Oe.value?(k(),C("div",sh,[c("div",oh,[(k(!0),C(X,null,pe(rt.value,y=>(k(),C(X,{key:y[0]},[c("div",lh,T(y[0]),1),c("div",{class:Je({mono:y[2]}),style:{"word-break":"break-all"}},T(y[1]),3)],64))),128))])])):(k(),C("div",nh,"select a contact"))])])])):Array.isArray(s.value[n.value])?(k(),C("table",rh,[c("thead",null,[c("tr",null,[(k(!0),C(X,null,pe(To(s.value[n.value]),y=>(k(),C("th",{key:y},T(y),1))),128))])]),c("tbody",null,[(k(!0),C(X,null,pe(s.value[n.value],(y,j)=>(k(),C("tr",{key:j},[(k(!0),C(X,null,pe(To(s.value[n.value]),Me=>(k(),C("td",{key:Me,title:Po(y,Me)},T(Po(y,Me)),9,ih))),128))]))),128))])])):(k(),C("div",ah,"loading…"))])])])}}},uh=ai(ch,[["__scopeId","data-v-c5dac4d3"]]),fh={class:"panes"},dh={class:"side-col"},hh={class:"pane",style:{flex:"1 1 0","min-height":"160px"}},ph={class:"body"},mh=["onClick"],vh={class:"muted"},gh={class:"pane",style:{flex:"1 1 0","min-height":"200px"}},_h={class:"toolbar"},yh={class:"body"},bh=["onClick"],wh={class:"muted mono"},xh={class:"pane",style:{flex:"1"}},kh={key:0,class:"err",style:{padding:"10px"}},Ch={key:1,class:"empty"},Sh={class:"meta"},Eh={class:"who"},Ah={key:0},Rh=["href"],Oh={key:1,class:"mention"},Th={class:"toolbar"},Ph=["placeholder","disabled"],Ih=["disabled"],Nh={key:0,class:"err",style:{padding:"0 12px 8px"}},$h={__name:"Messages",setup(e){const t=ee([]),n=ee(null),s=ee(null),o=ee([]),l=ee(null),r=ee([]),i=ee(""),a=ee(""),f=ee(""),u=ee(!1),h=ee("");let g=null;const b=ge(()=>{const S=i.value.toLowerCase();return S?r.value.filter(O=>(O.adv_name||"").toLowerCase().includes(S)||(O.public_key||"").toLowerCase().includes(S)):r.value}),$=ge(()=>{if(typeof n.value=="number"){const S=t.value.find(O=>O.channel_idx===n.value);return{kind:"channel",idx:n.value,label:(S==null?void 0:S.name)||`#${n.value}`}}return n.value==="dm"&&s.value?{kind:"dm",pubkey:s.value.public_key,label:s.value.adv_name||s.value.public_key.slice(0,12)}:null}),I=ge(()=>$.value?`Message ${$.value.label}…`:"Pick a channel or a contact to send to…");async function F(){t.value=(await ae("/channels")).items,n.value===null&&t.value.length&&K(t.value[0].channel_idx)}async function J(){r.value=(await ae("/contacts?limit=500")).items}async function M(){await Ft();const S=l.value;S&&(S.scrollTop=S.scrollHeight)}async function K(S){n.value=S,s.value=null;const O=await ae(`/channel-messages?channel_idx=${S}&limit=100`);o.value=O.items.slice().reverse(),await M()}async function H(){n.value="dm",s.value=null;const S=await ae("/direct-messages?limit=100");o.value=S.items.slice().reverse(),await M()}async function oe(S){n.value="dm",s.value=S;const O=await ae(`/direct-messages?pubkey=${encodeURIComponent(S.public_key)}&limit=100`);o.value=O.items.slice().reverse(),await M()}async function Ee(){const S=f.value.trim();if(!(!S||!$.value||u.value)){u.value=!0,h.value="";try{$.value.kind==="channel"?await ae("/send/channel",{method:"POST",json:{channel_idx:$.value.idx,text:S}}):await ae("/send/dm",{method:"POST",json:{pubkey:$.value.pubkey,text:S}}),f.value=""}catch(O){h.value=O.message}finally{u.value=!1}}}function ue(S,O){if(!S||!O)return S||"";const D=`${O}: `;return S.startsWith(D)?S.slice(D.length):S}const ne=/(https?:\/\/[^\s<>]+)|@\[([^\]]+)\]/g;function re(S){const O=ue(S.text,S.sender_name),D=[];let W=0,we;for(ne.lastIndex=0;(we=ne.exec(O))!==null;){if(we.index>W&&D.push({type:"text",value:O.slice(W,we.index)}),we[1]){const Ne=we[1].match(/^(.*?)([.,;:!?)]+)$/);Ne?(D.push({type:"link",value:Ne[1]}),D.push({type:"text",value:Ne[2]})):D.push({type:"link",value:we[1]})}else D.push({type:"mention",value:we[2]});W=ne.lastIndex}return W{try{await F(),await J()}catch(S){a.value=S.message}g=new WebSocket(li("/ws/messages")),g.onmessage=S=>{const O=JSON.parse(S.data),D=l.value,W=D?D.scrollHeight-D.scrollTop-D.clientHeight<60:!0;let we=!1;n.value==="dm"&&O.kind==="dm"?(!s.value||O.sender_pubkey===s.value.public_key)&&(o.value.push(O),we=!0):O.kind==="channel"&&O.channel_idx===n.value&&(o.value.push(O),we=!0),o.value.length>300&&o.value.shift(),we&&W&&M()}}),xs(()=>g&&g.close()),(S,O)=>{var D;return k(),C("div",fh,[c("div",dh,[c("div",hh,[O[3]||(O[3]=c("h3",null,"Channels",-1)),c("div",ph,[c("table",null,[c("tbody",null,[(k(!0),C(X,null,pe(t.value,W=>(k(),C("tr",{key:W.channel_idx,class:Je(["clickable",{selected:n.value===W.channel_idx}]),onClick:we=>K(W.channel_idx)},[c("td",null,[ve(T(W.name)+" ",1),c("span",vh,"#"+T(W.channel_idx),1)])],10,mh))),128)),c("tr",{class:Je(["clickable",{selected:n.value==="dm"&&!s.value}]),onClick:H},[...O[2]||(O[2]=[c("td",null,"✉ Direct messages",-1)])],2)])])])]),c("div",gh,[c("h3",null,"Contacts ("+T(r.value.length)+")",1),c("div",_h,[je(c("input",{"onUpdate:modelValue":O[0]||(O[0]=W=>i.value=W),placeholder:"search",style:{flex:"1"}},null,512),[[et,i.value]])]),c("div",yh,[c("table",null,[c("tbody",null,[(k(!0),C(X,null,pe(b.value,W=>(k(),C("tr",{key:W.public_key,class:Je(["clickable",{selected:s.value&&s.value.public_key===W.public_key}]),onClick:we=>oe(W),title:"Open a DM conversation with this contact"},[c("td",null,[ve(T(W.adv_name||"(unnamed)"),1),O[4]||(O[4]=c("br",null,null,-1)),c("span",wh,T(W.public_key.slice(0,12)),1)])],10,bh))),128))])])])])]),c("div",xh,[c("h3",null,T(n.value==="dm"?s.value?`DM · ${s.value.adv_name||s.value.public_key.slice(0,12)}`:"Direct messages":((D=t.value.find(W=>W.channel_idx===n.value))==null?void 0:D.name)||"Messages"),1),c("div",{class:"body",ref_key:"msgBody",ref:l},[a.value?(k(),C("div",kh,T(a.value),1)):Se("",!0),o.value.length?Se("",!0):(k(),C("div",Ch,"no messages")),(k(!0),C(X,null,pe(o.value,W=>{var we;return k(),C("div",{key:W.id,class:Je(["msg",{out:W.is_outgoing}])},[c("div",Sh,[c("span",Eh,T(W.is_outgoing?"→ me":W.sender_name||((we=W.sender_pubkey)==null?void 0:we.slice(0,12))||"?"),1),ve(" · "+T(kt(ri)(W.received_at))+" ",1),W.snr!=null?(k(),C("span",Ah,"· snr "+T(W.snr),1)):Se("",!0)]),c("div",null,[(k(!0),C(X,null,pe(re(W),(Ne,xe)=>(k(),C(X,{key:xe},[Ne.type==="link"?(k(),C("a",{key:0,href:Ne.value,target:"_blank",rel:"noopener noreferrer"},T(Ne.value),9,Rh)):Ne.type==="mention"?(k(),C("span",Oh,"@["+T(Ne.value)+"]",1)):(k(),C(X,{key:2},[ve(T(Ne.value),1)],64))],64))),128))])],2)}),128))],512),c("div",Th,[je(c("input",{style:{flex:"1"},placeholder:I.value,"onUpdate:modelValue":O[1]||(O[1]=W=>f.value=W),disabled:!$.value||u.value,onKeyup:cn(Ee,["enter"])},null,40,Ph),[[et,f.value]]),c("button",{disabled:!$.value||u.value||!f.value.trim(),onClick:Ee},T(u.value?"Sending…":"Send"),9,Ih)]),h.value?(k(),C("div",Nh,T(h.value),1)):Se("",!0)])])}}},Mh={class:"hexdump"},Dh=["onMouseenter"],Lh={key:0},jh={key:1},Vh={key:0,class:"empty"},Uh={__name:"HexDump",props:{hex:{type:String,default:""},activeRange:{type:Object,default:null}},emits:["hover-offset"],setup(e,{emit:t}){const n=e,s=t,o=ge(()=>{const r=(n.hex||"").replace(/\s+/g,""),i=[];for(let a=0;a+2<=r.length;a+=2)i.push(r.slice(a,a+2));return i});function l(r){const i=n.activeRange;return i&&r>=i.offset&&r(k(),C("div",Mh,[(k(!0),C(X,null,pe(o.value,(a,f)=>(k(),C("span",{key:f,class:Je(["hexbyte",{active:l(f)}]),onMouseenter:u=>s("hover-offset",f),onMouseleave:i[0]||(i[0]=u=>s("hover-offset",null))},[ve(T(a),1),(f+1)%16===0?(k(),C("span",Lh,[...i[1]||(i[1]=[c("br",null,null,-1)])])):(k(),C("span",jh))],42,Dh))),128)),o.value.length?Se("",!0):(k(),C("div",Vh,"no raw bytes"))]))}},Fh=["onMouseenter"],Hh={class:"fname"},Bh={class:"fmeta"},Kh={class:"fval"},Gh={key:0,class:"fval muted"},Wh={key:1,class:"fmeta"},qh={key:0,class:"decoded"},zh={class:"kv"},Jh={class:"k"},Yh={class:"mono"},Qh={__name:"FieldBreakout",props:{fields:{type:Array,default:()=>[]},decoded:{type:Object,default:null},activeIndex:{type:Number,default:-1}},emits:["hover-field"],setup(e,{emit:t}){const n=t;function s(r){return r==="timestamp"||r.endsWith("_timestamp")||r.endsWith("_at")}function o(r,i){return s(r)?ii(i):l(i)}function l(r){return r==null?"":typeof r=="object"?JSON.stringify(r):String(r)}return(r,i)=>(k(),C("div",null,[(k(!0),C(X,null,pe(e.fields,(a,f)=>(k(),C("div",{key:f,class:Je(["field-row",{active:f===e.activeIndex}]),onMouseenter:u=>n("hover-field",f),onMouseleave:i[0]||(i[0]=u=>n("hover-field",-1))},[c("div",Hh,T(a.name),1),c("div",Bh,"offset "+T(a.offset)+" · "+T(a.length)+" byte(s)",1),c("div",Kh,T(a.hex),1),a.value!==null&&a.value!==void 0?(k(),C("div",Gh,T(l(a.value)),1)):Se("",!0),a.description?(k(),C("div",Wh,T(a.description),1)):Se("",!0)],42,Fh))),128)),e.decoded?(k(),C("div",qh,[i[1]||(i[1]=c("h4",{style:{margin:"6px 0"}},"Decoded payload",-1)),c("div",zh,[(k(!0),C(X,null,pe(e.decoded,(a,f)=>(k(),C(X,{key:f},[c("div",Jh,T(f),1),c("div",Yh,T(o(f,a)),1)],64))),128))])])):Se("",!0)]))}},Xh={class:"panes"},Zh={class:"pane",style:{flex:"1.3"}},ep={class:"toolbar"},tp={class:"chk"},np=["checked"],sp=["checked","onChange"],op={class:"muted"},lp={key:0,class:"err"},rp=["data-pid","onClick"],ip={class:"pane",style:{flex:"1"}},ap={class:"body"},cp={key:0,class:"empty"},up={key:1,class:"empty"},fp={key:0,class:"err",style:{padding:"0 12px"}},dp={key:3,class:"empty"},hp={__name:"Packets",setup(e){const t=ee([]),n=ee(null),s=ee(new Set),o=ee(new Set),l=ee(null),r=ee(null),i=ee(-1),a=ee("");let f=null;const u=ge(()=>[...o.value].sort()),h=ge(()=>s.value.size===0),g=S=>!s.value.has(S),b=ge(()=>s.value.size===0?t.value:t.value.filter(S=>!s.value.has(S.packet_type)));function $(S){let O=null;for(const D of S)D.packet_type&&!o.value.has(D.packet_type)&&(O=O||new Set(o.value),O.add(D.packet_type));O&&(o.value=O)}function I(S){s.value=S?new Set:new Set(o.value)}function F(S,O){const D=new Set(s.value);O?D.delete(S):D.add(S),s.value=D}const J=ge(()=>{if(!r.value||i.value<0)return null;const S=r.value.fields[i.value];return S?{offset:S.offset,length:S.length}:null});async function M(){try{const S=await ae("/packets?limit=200");t.value=S.items.slice().reverse(),$(S.items),await Ft(),H()}catch(S){a.value=S.message}}function K(){const S=n.value;return S?S.scrollHeight-S.scrollTop-S.clientHeight<40:!0}function H(){const S=n.value;S&&(S.scrollTop=S.scrollHeight)}function oe(S){var O,D;(D=(O=n.value)==null?void 0:O.querySelector(`[data-pid="${S}"]`))==null||D.scrollIntoView({block:"nearest"})}function Ee(S){const O=b.value;if(!O.length)return;let D=l.value?O.findIndex(we=>we.id===l.value.id):-1;D===-1?D=O.length-1:D=Math.max(0,Math.min(O.length-1,D+S));const W=O[D];ne(W),Ft(()=>oe(W.id))}function ue(S){if(S.key!=="ArrowUp"&&S.key!=="ArrowDown")return;const O=S.target;O&&(O.tagName==="INPUT"||O.tagName==="TEXTAREA"||O.tagName==="SELECT"||O.isContentEditable)||S.metaKey||S.ctrlKey||S.altKey||(S.preventDefault(),Ee(S.key==="ArrowUp"?-1:1))}async function ne(S){if(l.value=S,r.value=null,i.value=-1,!!S.has_raw)try{r.value=await ae("/packets/decode",{method:"POST",json:{packet_id:S.id}})}catch(O){a.value=O.message}}function re(S){if(S===null||!r.value){i.value=-1;return}const O=r.value.fields.findIndex(D=>S>=D.offset&&S{M(),f=new WebSocket(li("/ws/packets")),f.onmessage=S=>{const O=JSON.parse(S.data),D=K();t.value.push(O),t.value.length>500&&t.value.shift(),$([O]),D&&Ft(H)},window.addEventListener("keydown",ue)}),xs(()=>{f&&f.close(),window.removeEventListener("keydown",ue)}),(S,O)=>(k(),C("div",Xh,[c("div",Zh,[O[4]||(O[4]=c("h3",null,"Packets (live)",-1)),c("div",ep,[c("label",tp,[c("input",{type:"checkbox",checked:h.value,onChange:O[0]||(O[0]=D=>I(D.target.checked))},null,40,np),O[2]||(O[2]=ve(" All ",-1))]),(k(!0),C(X,null,pe(u.value,D=>(k(),C("label",{key:D,class:"chk"},[c("input",{type:"checkbox",checked:g(D),onChange:W=>F(D,W.target.checked)},null,40,sp),ve(" "+T(D),1)]))),128)),c("span",op,T(b.value.length)+" shown",1),a.value?(k(),C("span",lp,T(a.value),1)):Se("",!0)]),c("div",{class:"body",ref_key:"listEl",ref:n},[c("table",null,[O[3]||(O[3]=c("thead",null,[c("tr",null,[c("th",null,"time"),c("th",null,"type"),c("th",null,"from"),c("th",null,"ch"),c("th",null,"text"),c("th",null,"raw")])],-1)),c("tbody",null,[(k(!0),C(X,null,pe(b.value,D=>(k(),C("tr",{key:D.id,"data-pid":D.id,class:Je(["clickable",{selected:l.value&&l.value.id===D.id}]),onClick:W=>ne(D)},[c("td",null,T(kt(ri)(D.received_at)),1),c("td",null,T(D.packet_type),1),c("td",null,T(D.sender_name||D.sender_pubkey_prefix||""),1),c("td",null,T(D.channel_idx??""),1),c("td",null,T(D.text||""),1),c("td",null,T(D.has_raw?"●":""),1)],10,rp))),128))])])],512)]),c("div",ip,[O[6]||(O[6]=c("h3",null,"Inspector",-1)),c("div",ap,[l.value?l.value.has_raw?r.value?(k(),C(X,{key:2},[Re(Uh,{hex:r.value.raw_hex,"active-range":J.value,onHoverOffset:re},null,8,["hex","active-range"]),r.value.error?(k(),C("div",fp,T(r.value.error),1)):Se("",!0),Re(Qh,{fields:r.value.fields,decoded:r.value.decoded,"active-index":i.value,onHoverField:O[1]||(O[1]=D=>i.value=D)},null,8,["fields","decoded","active-index"])],64)):(k(),C("div",dp,"decoding…")):(k(),C("div",up,[...O[5]||(O[5]=[ve(" no raw bytes for this packet",-1),c("br",null,null,-1),c("span",{class:"muted"},"(only RX_LOG_DATA packets carry on-air bytes)",-1)])])):(k(),C("div",cp,"select a packet"))])])]))}},pp=[{path:"/login",component:cf,meta:{public:!0}},{path:"/",redirect:"/messages"},{path:"/manage",component:uh},{path:"/messages",component:$h},{path:"/packets",component:hp}],ci=Zu({history:Pu(),routes:pp});ci.beforeEach(e=>{const t=Bn();if(!e.meta.public&&!t.token)return"/login";if(e.path==="/login"&&t.token)return"/"});Lc(sf).use(Uc()).use(ci).mount("#app");
diff --git a/webapi/static/assets/index-DD0revwt.css b/webapi/static/assets/index-DD0revwt.css
new file mode 100644
index 0000000..55919fd
--- /dev/null
+++ b/webapi/static/assets/index-DD0revwt.css
@@ -0,0 +1 @@
+.infotip[data-v-48ca1073]{position:relative;display:inline-flex;vertical-align:middle;cursor:pointer;outline:none}.dot[data-v-48ca1073]{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;border:1px solid var(--muted);color:var(--muted);font:italic 700 11px/1 Georgia,Times New Roman,serif;-webkit-user-select:none;user-select:none}.infotip:hover .dot[data-v-48ca1073],.infotip:focus .dot[data-v-48ca1073],.infotip.pinned .dot[data-v-48ca1073]{border-color:var(--accent);color:var(--accent)}.bubble[data-v-48ca1073]{display:none;position:absolute;left:calc(100% + 8px);top:50%;transform:translateY(-50%);z-index:30;width:max-content;max-width:300px;padding:6px 9px;background:var(--panel2);color:var(--text);border:1px solid var(--border);border-radius:6px;box-shadow:0 4px 14px #0006;font-size:12px;line-height:1.35;white-space:normal;text-align:left}.infotip:hover .bubble[data-v-48ca1073],.infotip:focus .bubble[data-v-48ca1073],.infotip.pinned .bubble[data-v-48ca1073]{display:block}.contacts-split[data-v-c5dac4d3]{display:flex;gap:10px;height:100%;min-height:0;padding:10px;box-sizing:border-box}.contact-detail[data-v-c5dac4d3]{flex:1;min-width:240px;max-width:440px}.pdetail[data-v-f9017f2b]{padding:12px}.pdesc[data-v-f9017f2b]{margin:0 0 12px;color:var(--muted);line-height:1.5}.pdetail h4[data-v-f9017f2b]{margin:14px 0 6px}.pdetail h4[data-v-f9017f2b]:first-of-type{margin-top:0}.pdetail .kv[data-v-f9017f2b]{word-break:break-all}:root{--bg: #0f1419;--panel: #161c24;--panel2: #1c242e;--border: #2a3340;--text: #cdd6e0;--muted: #7d8a99;--accent: #4aa3ff;--accent-dim: #1f3a55;--ok: #4ec98a;--warn: #e0b341;--err: #e06b6b;--mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace}*{box-sizing:border-box}html,body,#app{height:100%;margin:0}body{background:var(--bg);color:var(--text);font:14px/1.45 system-ui,-apple-system,Segoe UI,Roboto,sans-serif}a{color:var(--accent);text-decoration:none}#app{display:flex;flex-direction:column}.nav{display:flex;align-items:center;gap:4px;padding:8px 14px;background:var(--panel);border-bottom:1px solid var(--border)}.nav .brand{font-weight:700;margin-right:16px;color:#fff}.nav a{padding:6px 12px;border-radius:6px;color:var(--muted)}.nav a.router-link-active{background:var(--accent-dim);color:#fff}.nav .spacer{flex:1}.nav .who{color:var(--muted);font-size:12px;margin-right:10px}.page{flex:1;min-height:0;padding:14px;overflow:auto}.panes{flex:1;min-height:0;display:flex;gap:10px;padding:10px}.pane{background:var(--panel);border:1px solid var(--border);border-radius:8px;display:flex;flex-direction:column;min-height:0;overflow:hidden}.pane>h3{margin:0;padding:8px 12px;font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);border-bottom:1px solid var(--border)}.pane>.body{flex:1;min-height:0;overflow:auto}.side-col{flex:0 0 240px;display:flex;flex-direction:column;gap:10px;min-height:0}button{background:var(--accent-dim);color:#fff;border:1px solid var(--border);border-radius:6px;padding:6px 12px;cursor:pointer;font:inherit}button:hover{border-color:var(--accent)}button:disabled{opacity:.5;cursor:not-allowed}input,select,textarea{background:var(--panel2);color:var(--text);border:1px solid var(--border);border-radius:6px;padding:6px 9px;font:inherit}input:focus,select:focus,textarea:focus{outline:1px solid var(--accent)}table{width:100%;border-collapse:collapse;font-size:13px}th,td{text-align:left;padding:5px 9px;border-bottom:1px solid var(--border);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:320px}th{color:var(--muted);position:sticky;top:0;background:var(--panel)}th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}th.sortable:hover{color:var(--text)}tr.clickable{cursor:pointer}tr.clickable:hover td{background:var(--panel2)}tr.selected td{background:var(--accent-dim)}.mono{font-family:var(--mono)}.muted{color:var(--muted)}.tag{display:inline-block;padding:1px 7px;border-radius:10px;background:var(--panel2);border:1px solid var(--border);font-size:11px;margin:0 3px 3px 0}td.chips{white-space:normal;overflow:visible;max-width:none}.toolbar{display:flex;gap:8px;align-items:center;padding:8px 12px;border-bottom:1px solid var(--border);flex-wrap:wrap}.toolbar label.chk{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:var(--muted);cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap}.toolbar label.chk input{margin:0}.err{color:var(--err)}.empty{padding:20px;color:var(--muted);text-align:center}.login-wrap{display:flex;align-items:center;justify-content:center;flex:1}.login-card{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:26px;width:320px;display:flex;flex-direction:column;gap:12px}.login-card h2{margin:0 0 6px}.login-card label{font-size:12px;color:var(--muted)}.login-card input{width:100%}.msg{padding:6px 12px;border-bottom:1px solid var(--border)}.msg .meta{font-size:11px;color:var(--muted)}.msg.out{background:#13241b}.msg .who{color:var(--accent);font-weight:600}.msg .mention{color:var(--accent);font-weight:600;background:var(--accent-dim);padding:0 4px;border-radius:4px}.msg a{word-break:break-all}.hexdump{font-family:var(--mono);font-size:13px;padding:10px;line-height:1.7}.hexbyte{padding:1px 2px;border-radius:3px;cursor:default}.hexbyte.active{background:var(--accent);color:#00121f}.field-row{padding:6px 12px;border-bottom:1px solid var(--border);cursor:default}.field-row.active{background:var(--accent-dim)}.field-row .fname{font-weight:600}.field-row .fmeta{font-size:11px;color:var(--muted)}.field-row .fval{font-family:var(--mono);font-size:12px;word-break:break-all}.decoded{padding:10px 12px}.decoded pre{white-space:pre-wrap;word-break:break-all;margin:0}.kv{display:grid;grid-template-columns:max-content 1fr;gap:2px 12px}.kv .k{color:var(--muted)}
diff --git a/webapi/static/assets/index-X7XLuZwo.js b/webapi/static/assets/index-X7XLuZwo.js
new file mode 100644
index 0000000..ce17e0e
--- /dev/null
+++ b/webapi/static/assets/index-X7XLuZwo.js
@@ -0,0 +1,37 @@
+(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 l of o)if(l.type==="childList")for(const r of l.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&s(r)}).observe(document,{childList:!0,subtree:!0});function n(o){const l={};return o.integrity&&(l.integrity=o.integrity),o.referrerPolicy&&(l.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?l.credentials="include":o.crossOrigin==="anonymous"?l.credentials="omit":l.credentials="same-origin",l}function s(o){if(o.ep)return;o.ep=!0;const l=n(o);fetch(o.href,l)}})();/**
+* @vue/shared v3.5.35
+* (c) 2018-present Yuxi (Evan) You and Vue contributors
+* @license MIT
+**/function uo(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const Ce={},ln=[],xt=()=>{},$l=()=>!1,fs=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),ds=e=>e.startsWith("onUpdate:"),Fe=Object.assign,fo=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},pi=Object.prototype.hasOwnProperty,be=(e,t)=>pi.call(e,t),ee=Array.isArray,rn=e=>Fn(e)==="[object Map]",mn=e=>Fn(e)==="[object Set]",$o=e=>Fn(e)==="[object Date]",re=e=>typeof e=="function",Ie=e=>typeof e=="string",ft=e=>typeof e=="symbol",ke=e=>e!==null&&typeof e=="object",Ml=e=>(ke(e)||re(e))&&re(e.then)&&re(e.catch),Dl=Object.prototype.toString,Fn=e=>Dl.call(e),mi=e=>Fn(e).slice(8,-1),Ll=e=>Fn(e)==="[object Object]",hs=e=>Ie(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,xn=uo(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),ps=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},vi=/-\w/g,Ye=ps(e=>e.replace(vi,t=>t.slice(1).toUpperCase())),gi=/\B([A-Z])/g,Gt=ps(e=>e.replace(gi,"-$1").toLowerCase()),ms=ps(e=>e.charAt(0).toUpperCase()+e.slice(1)),Is=ps(e=>e?`on${ms(e)}`:""),kt=(e,t)=>!Object.is(e,t),Qn=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},vs=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let Mo;const gs=()=>Mo||(Mo=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function ho(e){if(ee(e)){const t={};for(let n=0;n{if(n){const s=n.split(yi);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function Be(e){let t="";if(Ie(e))t=e;else if(ee(e))for(let n=0;nHt(n,t))}const Vl=e=>!!(e&&e.__v_isRef===!0),R=e=>Ie(e)?e:e==null?"":ee(e)||ke(e)&&(e.toString===Dl||!re(e.toString))?Vl(e)?R(e.value):JSON.stringify(e,Ul,2):String(e),Ul=(e,t)=>Vl(t)?Ul(e,t.value):rn(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,o],l)=>(n[Ns(s,l)+" =>"]=o,n),{})}:mn(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Ns(n))}:ft(t)?Ns(t):ke(t)&&!ee(t)&&!Ll(t)?String(t):t,Ns=(e,t="")=>{var n;return ft(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/**
+* @vue/reactivity v3.5.35
+* (c) 2018-present Yuxi (Evan) You and Vue contributors
+* @license MIT
+**/let Le;class Hl{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&&Le&&(Le.active?(this.parent=Le,this.index=(Le.scopes||(Le.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;t0&&--this._on===0){if(Le===this)Le=this.prevScope;else{let t=Le;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;n0)return;if(En){let t=En;for(En=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 Jl(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function zl(e){let t,n=e.depsTail,s=n;for(;s;){const o=s.prevDep;s.version===-1?(s===n&&(n=o),go(s),Si(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=o}e.deps=t,e.depsTail=n}function Js(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Yl(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Yl(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Nn)||(e.globalVersion=Nn,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Js(e))))return;e.flags|=2;const t=e.dep,n=Ee,s=ht;Ee=e,ht=!0;try{Jl(e);const o=e.fn(e._value);(t.version===0||kt(o,e._value))&&(e.flags|=128,e._value=o,t.version++)}catch(o){throw t.version++,o}finally{Ee=n,ht=s,zl(e),e.flags&=-3}}function go(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 l=n.computed.deps;l;l=l.nextDep)go(l,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function Si(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let ht=!0;const Ql=[];function It(){Ql.push(ht),ht=!1}function Nt(){const e=Ql.pop();ht=e===void 0?!0:e}function Do(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=Ee;Ee=void 0;try{t()}finally{Ee=n}}}let Nn=0;class Ai{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 _o{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(!Ee||!ht||Ee===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==Ee)n=this.activeLink=new Ai(Ee,this),Ee.deps?(n.prevDep=Ee.depsTail,Ee.depsTail.nextDep=n,Ee.depsTail=n):Ee.deps=Ee.depsTail=n,Xl(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=Ee.depsTail,n.nextDep=void 0,Ee.depsTail.nextDep=n,Ee.depsTail=n,Ee.deps===n&&(Ee.deps=s)}return n}trigger(t){this.version++,Nn++,this.notify(t)}notify(t){mo();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{vo()}}}function Xl(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)Xl(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const ts=new WeakMap,Qt=Symbol(""),zs=Symbol(""),$n=Symbol("");function Ue(e,t,n){if(ht&&Ee){let s=ts.get(e);s||ts.set(e,s=new Map);let o=s.get(n);o||(s.set(n,o=new _o),o.map=s,o.key=n),o.track()}}function Rt(e,t,n,s,o,l){const r=ts.get(e);if(!r){Nn++;return}const i=a=>{a&&a.trigger()};if(mo(),t==="clear")r.forEach(i);else{const a=ee(e),d=a&&hs(n);if(a&&n==="length"){const f=Number(s);r.forEach((u,g)=>{(g==="length"||g===$n||!ft(g)&&g>=f)&&i(u)})}else switch((n!==void 0||r.has(void 0))&&i(r.get(n)),d&&i(r.get($n)),t){case"add":a?d&&i(r.get("length")):(i(r.get(Qt)),rn(e)&&i(r.get(zs)));break;case"delete":a||(i(r.get(Qt)),rn(e)&&i(r.get(zs)));break;case"set":rn(e)&&i(r.get(Qt));break}}vo()}function Ri(e,t){const n=ts.get(e);return n&&n.get(t)}function en(e){const t=ge(e);return t===e?t:(Ue(t,"iterate",$n),st(e)?t:t.map(mt))}function _s(e){return Ue(e=ge(e),"iterate",$n),e}function bt(e,t){return $t(e)?un(Pt(e)?mt(t):t):mt(t)}const Ti={__proto__:null,[Symbol.iterator](){return Ms(this,Symbol.iterator,e=>bt(this,e))},concat(...e){return en(this).concat(...e.map(t=>ee(t)?en(t):t))},entries(){return Ms(this,"entries",e=>(e[1]=bt(this,e[1]),e))},every(e,t){return Ct(this,"every",e,t,void 0,arguments)},filter(e,t){return Ct(this,"filter",e,t,n=>n.map(s=>bt(this,s)),arguments)},find(e,t){return Ct(this,"find",e,t,n=>bt(this,n),arguments)},findIndex(e,t){return Ct(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Ct(this,"findLast",e,t,n=>bt(this,n),arguments)},findLastIndex(e,t){return Ct(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Ct(this,"forEach",e,t,void 0,arguments)},includes(...e){return Ds(this,"includes",e)},indexOf(...e){return Ds(this,"indexOf",e)},join(e){return en(this).join(e)},lastIndexOf(...e){return Ds(this,"lastIndexOf",e)},map(e,t){return Ct(this,"map",e,t,void 0,arguments)},pop(){return _n(this,"pop")},push(...e){return _n(this,"push",e)},reduce(e,...t){return Lo(this,"reduce",e,t)},reduceRight(e,...t){return Lo(this,"reduceRight",e,t)},shift(){return _n(this,"shift")},some(e,t){return Ct(this,"some",e,t,void 0,arguments)},splice(...e){return _n(this,"splice",e)},toReversed(){return en(this).toReversed()},toSorted(e){return en(this).toSorted(e)},toSpliced(...e){return en(this).toSpliced(...e)},unshift(...e){return _n(this,"unshift",e)},values(){return Ms(this,"values",e=>bt(this,e))}};function Ms(e,t,n){const s=_s(e),o=s[t]();return s!==e&&!st(e)&&(o._next=o.next,o.next=()=>{const l=o._next();return l.done||(l.value=n(l.value)),l}),o}const Oi=Array.prototype;function Ct(e,t,n,s,o,l){const r=_s(e),i=r!==e&&!st(e),a=r[t];if(a!==Oi[t]){const u=a.apply(e,l);return i?mt(u):u}let d=n;r!==e&&(i?d=function(u,g){return n.call(this,bt(e,u),g,e)}:n.length>2&&(d=function(u,g){return n.call(this,u,g,e)}));const f=a.call(r,d,s);return i&&o?o(f):f}function Lo(e,t,n,s){const o=_s(e),l=o!==e&&!st(e);let r=n,i=!1;o!==e&&(l?(i=s.length===0,r=function(d,f,u){return i&&(i=!1,d=bt(e,d)),n.call(this,d,bt(e,f),u,e)}):n.length>3&&(r=function(d,f,u){return n.call(this,d,f,u,e)}));const a=o[t](r,...s);return i?bt(e,a):a}function Ds(e,t,n){const s=ge(e);Ue(s,"iterate",$n);const o=s[t](...n);return(o===-1||o===!1)&&ys(n[0])?(n[0]=ge(n[0]),s[t](...n)):o}function _n(e,t,n=[]){It(),mo();const s=ge(e)[t].apply(e,n);return vo(),Nt(),s}const Pi=uo("__proto__,__v_isRef,__isVue"),Zl=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(ft));function Ii(e){ft(e)||(e=String(e));const t=ge(this);return Ue(t,"has",e),t.hasOwnProperty(e)}class er{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const o=this._isReadonly,l=this._isShallow;if(n==="__v_isReactive")return!o;if(n==="__v_isReadonly")return o;if(n==="__v_isShallow")return l;if(n==="__v_raw")return s===(o?l?Hi:or:l?sr:nr).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const r=ee(t);if(!o){let a;if(r&&(a=Ti[n]))return a;if(n==="hasOwnProperty")return Ii}const i=Reflect.get(t,n,Ne(t)?t:s);if((ft(n)?Zl.has(n):Pi(n))||(o||Ue(t,"get",n),l))return i;if(Ne(i)){const a=r&&hs(n)?i:i.value;return o&&ke(a)?Qs(a):a}return ke(i)?o?Qs(i):Vn(i):i}}class tr extends er{constructor(t=!1){super(!1,t)}set(t,n,s,o){let l=t[n];const r=ee(t)&&hs(n);if(!this._isShallow){const d=$t(l);if(!st(s)&&!$t(s)&&(l=ge(l),s=ge(s)),!r&&Ne(l)&&!Ne(s))return d||(l.value=s),!0}const i=r?Number(n)e,qn=e=>Reflect.getPrototypeOf(e);function Li(e,t,n){return function(...s){const o=this.__v_raw,l=ge(o),r=rn(l),i=e==="entries"||e===Symbol.iterator&&r,a=e==="keys"&&r,d=o[e](...s),f=n?Ys:t?un:mt;return!t&&Ue(l,"iterate",a?zs:Qt),Fe(Object.create(d),{next(){const{value:u,done:g}=d.next();return g?{value:u,done:g}:{value:i?[f(u[0]),f(u[1])]:f(u),done:g}}})}}function Jn(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function ji(e,t){const n={get(o){const l=this.__v_raw,r=ge(l),i=ge(o);e||(kt(o,i)&&Ue(r,"get",o),Ue(r,"get",i));const{has:a}=qn(r),d=t?Ys:e?un:mt;if(a.call(r,o))return d(l.get(o));if(a.call(r,i))return d(l.get(i));l!==r&&l.get(o)},get size(){const o=this.__v_raw;return!e&&Ue(ge(o),"iterate",Qt),o.size},has(o){const l=this.__v_raw,r=ge(l),i=ge(o);return e||(kt(o,i)&&Ue(r,"has",o),Ue(r,"has",i)),o===i?l.has(o):l.has(o)||l.has(i)},forEach(o,l){const r=this,i=r.__v_raw,a=ge(i),d=t?Ys:e?un:mt;return!e&&Ue(a,"iterate",Qt),i.forEach((f,u)=>o.call(l,d(f),d(u),r))}};return Fe(n,e?{add:Jn("add"),set:Jn("set"),delete:Jn("delete"),clear:Jn("clear")}:{add(o){const l=ge(this),r=qn(l),i=ge(o),a=!t&&!st(o)&&!$t(o)?i:o;return r.has.call(l,a)||kt(o,a)&&r.has.call(l,o)||kt(i,a)&&r.has.call(l,i)||(l.add(a),Rt(l,"add",a,a)),this},set(o,l){!t&&!st(l)&&!$t(l)&&(l=ge(l));const r=ge(this),{has:i,get:a}=qn(r);let d=i.call(r,o);d||(o=ge(o),d=i.call(r,o));const f=a.call(r,o);return r.set(o,l),d?kt(l,f)&&Rt(r,"set",o,l):Rt(r,"add",o,l),this},delete(o){const l=ge(this),{has:r,get:i}=qn(l);let a=r.call(l,o);a||(o=ge(o),a=r.call(l,o)),i&&i.call(l,o);const d=l.delete(o);return a&&Rt(l,"delete",o,void 0),d},clear(){const o=ge(this),l=o.size!==0,r=o.clear();return l&&Rt(o,"clear",void 0,void 0),r}}),["keys","values","entries",Symbol.iterator].forEach(o=>{n[o]=Li(o,e,t)}),n}function yo(e,t){const n=ji(e,t);return(s,o,l)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_raw"?s:Reflect.get(be(n,o)&&o in s?n:s,o,l)}const Fi={get:yo(!1,!1)},Vi={get:yo(!1,!0)},Ui={get:yo(!0,!1)};const nr=new WeakMap,sr=new WeakMap,or=new WeakMap,Hi=new WeakMap;function Bi(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Vn(e){return $t(e)?e:bo(e,!1,$i,Fi,nr)}function lr(e){return bo(e,!1,Di,Vi,sr)}function Qs(e){return bo(e,!0,Mi,Ui,or)}function bo(e,t,n,s,o){if(!ke(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;const l=o.get(e);if(l)return l;const r=Bi(mi(e));if(r===0)return e;const i=new Proxy(e,r===2?s:n);return o.set(e,i),i}function Pt(e){return $t(e)?Pt(e.__v_raw):!!(e&&e.__v_isReactive)}function $t(e){return!!(e&&e.__v_isReadonly)}function st(e){return!!(e&&e.__v_isShallow)}function ys(e){return e?!!e.__v_raw:!1}function ge(e){const t=e&&e.__v_raw;return t?ge(t):e}function wo(e){return!be(e,"__v_skip")&&Object.isExtensible(e)&&jl(e,"__v_skip",!0),e}const mt=e=>ke(e)?Vn(e):e,un=e=>ke(e)?Qs(e):e;function Ne(e){return e?e.__v_isRef===!0:!1}function Z(e){return rr(e,!1)}function Ki(e){return rr(e,!0)}function rr(e,t){return Ne(e)?e:new Gi(e,t)}class Gi{constructor(t,n){this.dep=new _o,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:ge(t),this._value=n?t:mt(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||st(t)||$t(t);t=s?t:ge(t),kt(t,n)&&(this._rawValue=t,this._value=s?t:mt(t),this.dep.trigger())}}function pt(e){return Ne(e)?e.value:e}const Wi={get:(e,t,n)=>t==="__v_raw"?e:pt(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const o=e[t];return Ne(o)&&!Ne(n)?(o.value=n,!0):Reflect.set(e,t,n,s)}};function ir(e){return Pt(e)?e:new Proxy(e,Wi)}function qi(e){const t=ee(e)?new Array(e.length):{};for(const n in e)t[n]=zi(e,n);return t}class Ji{constructor(t,n,s){this._object=t,this._defaultValue=s,this.__v_isRef=!0,this._value=void 0,this._key=ft(n)?n:String(n),this._raw=ge(t);let o=!0,l=t;if(!ee(t)||ft(this._key)||!hs(this._key))do o=!ys(l)||st(l);while(o&&(l=l.__v_raw));this._shallow=o}get value(){let t=this._object[this._key];return this._shallow&&(t=pt(t)),this._value=t===void 0?this._defaultValue:t}set value(t){if(this._shallow&&Ne(this._raw[this._key])){const n=this._object[this._key];if(Ne(n)){n.value=t;return}}this._object[this._key]=t}get dep(){return Ri(this._raw,this._key)}}function zi(e,t,n){return new Ji(e,t,n)}class Yi{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new _o(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Nn-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&Ee!==this)return ql(this,!0),!0}get value(){const t=this.dep.track();return Yl(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Qi(e,t,n=!1){let s,o;return re(e)?s=e:(s=e.get,o=e.set),new Yi(s,o,n)}const zn={},ns=new WeakMap;let zt;function Xi(e,t=!1,n=zt){if(n){let s=ns.get(n);s||ns.set(n,s=[]),s.push(e)}}function Zi(e,t,n=Ce){const{immediate:s,deep:o,once:l,scheduler:r,augmentJob:i,call:a}=n,d=B=>o?B:st(B)||o===!1||o===0?Tt(B,1):Tt(B);let f,u,g,_,P=!1,I=!1;if(Ne(e)?(u=()=>e.value,P=st(e)):Pt(e)?(u=()=>d(e),P=!0):ee(e)?(I=!0,P=e.some(B=>Pt(B)||st(B)),u=()=>e.map(B=>{if(Ne(B))return B.value;if(Pt(B))return d(B);if(re(B))return a?a(B,2):B()})):re(e)?t?u=a?()=>a(e,2):e:u=()=>{if(g){It();try{g()}finally{Nt()}}const B=zt;zt=f;try{return a?a(e,3,[_]):e(_)}finally{zt=B}}:u=xt,t&&o){const B=u,ne=o===!0?1/0:o;u=()=>Tt(B(),ne)}const U=Kl(),Y=()=>{f.stop(),U&&U.active&&fo(U.effects,f)};if(l&&t){const B=t;t=(...ne)=>{B(...ne),Y()}}let M=I?new Array(e.length).fill(zn):zn;const G=B=>{if(!(!(f.flags&1)||!f.dirty&&!B))if(t){const ne=f.run();if(o||P||(I?ne.some((Se,de)=>kt(Se,M[de])):kt(ne,M))){g&&g();const Se=zt;zt=f;try{const de=[ne,M===zn?void 0:I&&M[0]===zn?[]:M,_];M=ne,a?a(t,3,de):t(...de)}finally{zt=Se}}}else f.run()};return i&&i(G),f=new Gl(u),f.scheduler=r?()=>r(G,!1):G,_=B=>Xi(B,!1,f),g=f.onStop=()=>{const B=ns.get(f);if(B){if(a)a(B,4);else for(const ne of B)ne();ns.delete(f)}},t?s?G(!0):M=f.run():r?r(G.bind(null,!0),!0):f.run(),Y.pause=f.pause.bind(f),Y.resume=f.resume.bind(f),Y.stop=Y,Y}function Tt(e,t=1/0,n){if(t<=0||!ke(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,Ne(e))Tt(e.value,t,n);else if(ee(e))for(let s=0;s{Tt(s,t,n)});else if(Ll(e)){for(const s in e)Tt(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&Tt(e[s],t,n)}return e}/**
+* @vue/runtime-core v3.5.35
+* (c) 2018-present Yuxi (Evan) You and Vue contributors
+* @license MIT
+**/function Un(e,t,n,s){try{return s?e(...s):e()}catch(o){bs(o,t,n)}}function vt(e,t,n,s){if(re(e)){const o=Un(e,t,n,s);return o&&Ml(o)&&o.catch(l=>{bs(l,t,n)}),o}if(ee(e)){const o=[];for(let l=0;l>>1,o=ze[s],l=Mn(o);l=Mn(n)?ze.push(e):ze.splice(ta(t),0,e),e.flags|=1,cr()}}function cr(){ss||(ss=ar.then(fr))}function na(e){ee(e)?an.push(...e):jt&&e.id===-1?jt.splice(nn+1,0,e):e.flags&1||(an.push(e),e.flags|=1),cr()}function jo(e,t,n=yt+1){for(;nMn(n)-Mn(s));if(an.length=0,jt){jt.push(...t);return}for(jt=t,nn=0;nne.id==null?e.flags&2?-1:1/0:e.id;function fr(e){try{for(yt=0;yt{s._d&&is(-1);const l=os(t);let r;try{r=e(...o)}finally{os(l),s._d&&is(1)}return r};return s._n=!0,s._c=!0,s._d=!0,s}function je(e,t){if(tt===null)return e;const n=Ss(tt),s=e.dirs||(e.dirs=[]);for(let o=0;o1)return n&&re(t)?t.call(s&&s.proxy):t}}function sa(){return!!(Fr()||Xt)}const oa=Symbol.for("v-scx"),la=()=>ct(oa);function Sn(e,t,n){return hr(e,t,n)}function hr(e,t,n=Ce){const{immediate:s,deep:o,flush:l,once:r}=n,i=Fe({},n),a=t&&s||!t&&l!=="post";let d;if(Ln){if(l==="sync"){const _=la();d=_.__watcherHandles||(_.__watcherHandles=[])}else if(!a){const _=()=>{};return _.stop=xt,_.resume=xt,_.pause=xt,_}}const f=He;i.call=(_,P,I)=>vt(_,f,P,I);let u=!1;l==="post"?i.scheduler=_=>{Qe(_,f&&f.suspense)}:l!=="sync"&&(u=!0,i.scheduler=(_,P)=>{P?_():ko(_)}),i.augmentJob=_=>{t&&(_.flags|=4),u&&(_.flags|=2,f&&(_.id=f.uid,_.i=f))};const g=Zi(e,t,i);return Ln&&(d?d.push(g):a&&g()),g}function ra(e,t,n){const s=this.proxy,o=Ie(e)?e.includes(".")?pr(s,e):()=>s[e]:e.bind(s,s);let l;re(t)?l=t:(l=t.handler,n=t);const r=Hn(this),i=hr(o,l.bind(s),n);return r(),i}function pr(e,t){const n=t.split(".");return()=>{let s=e;for(let o=0;oe.__isTeleport,Ls=Symbol("_leaveCb");function xo(e,t){e.shapeFlag&6&&e.component?(e.transition=t,xo(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 mr(e,t){return re(e)?Fe({name:e.name},t,{setup:e}):e}function vr(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function Fo(e,t){let n;return!!((n=Object.getOwnPropertyDescriptor(e,t))&&!n.configurable)}const ls=new WeakMap;function An(e,t,n,s,o=!1){if(ee(e)){e.forEach((I,U)=>An(I,t&&(ee(t)?t[U]:t),n,s,o));return}if(Rn(s)&&!o){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&An(e,t,n,s.component.subTree);return}const l=s.shapeFlag&4?Ss(s.component):s.el,r=o?null:l,{i,r:a}=e,d=t&&t.r,f=i.refs===Ce?i.refs={}:i.refs,u=i.setupState,g=ge(u),_=u===Ce?$l:I=>Fo(f,I)?!1:be(g,I),P=(I,U)=>!(U&&Fo(f,U));if(d!=null&&d!==a){if(Vo(t),Ie(d))f[d]=null,_(d)&&(u[d]=null);else if(Ne(d)){const I=t;P(d,I.k)&&(d.value=null),I.k&&(f[I.k]=null)}}if(re(a))Un(a,i,12,[r,f]);else{const I=Ie(a),U=Ne(a);if(I||U){const Y=()=>{if(e.f){const M=I?_(a)?u[a]:f[a]:P()||!e.k?a.value:f[e.k];if(o)ee(M)&&fo(M,l);else if(ee(M))M.includes(l)||M.push(l);else if(I)f[a]=[l],_(a)&&(u[a]=f[a]);else{const G=[l];P(a,e.k)&&(a.value=G),e.k&&(f[e.k]=G)}}else I?(f[a]=r,_(a)&&(u[a]=r)):U&&(P(a,e.k)&&(a.value=r),e.k&&(f[e.k]=r))};if(r){const M=()=>{Y(),ls.delete(e)};M.id=-1,ls.set(e,M),Qe(M,n)}else Vo(e),Y()}}}function Vo(e){const t=ls.get(e);t&&(t.flags|=8,ls.delete(e))}gs().requestIdleCallback;gs().cancelIdleCallback;const Rn=e=>!!e.type.__asyncLoader,gr=e=>e.type.__isKeepAlive;function ca(e,t){_r(e,"a",t)}function ua(e,t){_r(e,"da",t)}function _r(e,t,n=He){const s=e.__wdc||(e.__wdc=()=>{let o=n;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(ws(t,s,n),n){let o=n.parent;for(;o&&o.parent;)gr(o.parent.vnode)&&fa(s,t,n,o),o=o.parent}}function fa(e,t,n,s){const o=ws(t,e,s,!0);xs(()=>{fo(s[t],o)},n)}function ws(e,t,n=He,s=!1){if(n){const o=n[e]||(n[e]=[]),l=t.__weh||(t.__weh=(...r)=>{It();const i=Hn(n),a=vt(t,n,e,r);return i(),Nt(),a});return s?o.unshift(l):o.push(l),l}}const Mt=e=>(t,n=He)=>{(!Ln||e==="sp")&&ws(e,(...s)=>t(...s),n)},da=Mt("bm"),ks=Mt("m"),ha=Mt("bu"),pa=Mt("u"),ma=Mt("bum"),xs=Mt("um"),va=Mt("sp"),ga=Mt("rtg"),_a=Mt("rtc");function ya(e,t=He){ws("ec",e,t)}const ba="components";function Uo(e,t){return ka(ba,e,!0,t)||e}const wa=Symbol.for("v-ndc");function ka(e,t,n=!0,s=!1){const o=tt||He;if(o){const l=o.type;{const i=rc(l,!1);if(i&&(i===t||i===Ye(t)||i===ms(Ye(t))))return l}const r=Ho(o[e]||l[e],t)||Ho(o.appContext[e],t);return!r&&s?l:r}}function Ho(e,t){return e&&(e[t]||e[Ye(t)]||e[ms(Ye(t))])}function he(e,t,n,s){let o;const l=n,r=ee(e);if(r||Ie(e)){const i=r&&Pt(e);let a=!1,d=!1;i&&(a=!st(e),d=$t(e),e=_s(e)),o=new Array(e.length);for(let f=0,u=e.length;ft(i,a,void 0,l));else{const i=Object.keys(e);o=new Array(i.length);for(let a=0,d=i.length;ae?Vr(e)?Ss(e):Xs(e.parent):null,Tn=Fe(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Xs(e.parent),$root:e=>Xs(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>br(e),$forceUpdate:e=>e.f||(e.f=()=>{ko(e.update)}),$nextTick:e=>e.n||(e.n=Ut.bind(e.proxy)),$watch:e=>ra.bind(e)}),js=(e,t)=>e!==Ce&&!e.__isScriptSetup&&be(e,t),xa={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:o,props:l,accessCache:r,type:i,appContext:a}=e;if(t[0]!=="$"){const g=r[t];if(g!==void 0)switch(g){case 1:return s[t];case 2:return o[t];case 4:return n[t];case 3:return l[t]}else{if(js(s,t))return r[t]=1,s[t];if(o!==Ce&&be(o,t))return r[t]=2,o[t];if(be(l,t))return r[t]=3,l[t];if(n!==Ce&&be(n,t))return r[t]=4,n[t];Zs&&(r[t]=0)}}const d=Tn[t];let f,u;if(d)return t==="$attrs"&&Ue(e.attrs,"get",""),d(e);if((f=i.__cssModules)&&(f=f[t]))return f;if(n!==Ce&&be(n,t))return r[t]=4,n[t];if(u=a.config.globalProperties,be(u,t))return u[t]},set({_:e},t,n){const{data:s,setupState:o,ctx:l}=e;return js(o,t)?(o[t]=n,!0):s!==Ce&&be(s,t)?(s[t]=n,!0):be(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(l[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:o,props:l,type:r}},i){let a;return!!(n[i]||e!==Ce&&i[0]!=="$"&&be(e,i)||js(t,i)||be(l,i)||be(s,i)||be(Tn,i)||be(o.config.globalProperties,i)||(a=r.__cssModules)&&a[i])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:be(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Bo(e){return ee(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Zs=!0;function Ca(e){const t=br(e),n=e.proxy,s=e.ctx;Zs=!1,t.beforeCreate&&Ko(t.beforeCreate,e,"bc");const{data:o,computed:l,methods:r,watch:i,provide:a,inject:d,created:f,beforeMount:u,mounted:g,beforeUpdate:_,updated:P,activated:I,deactivated:U,beforeDestroy:Y,beforeUnmount:M,destroyed:G,unmounted:B,render:ne,renderTracked:Se,renderTriggered:de,errorCaptured:se,serverPrefetch:le,expose:K,inheritAttrs:S,components:D,directives:O,filters:ve}=t;if(d&&Ea(d,s,null),r)for(const te in r){const ue=r[te];re(ue)&&(s[te]=ue.bind(n))}if(o){const te=o.call(n,n);ke(te)&&(e.data=Vn(te))}if(Zs=!0,l)for(const te in l){const ue=l[te],dt=re(ue)?ue.bind(n,n):re(ue.get)?ue.get.bind(n,n):xt,Xe=!re(ue)&&re(ue.set)?ue.set.bind(n):xt,Ze=pe({get:dt,set:Xe});Object.defineProperty(s,te,{enumerable:!0,configurable:!0,get:()=>Ze.value,set:Ve=>Ze.value=Ve})}if(i)for(const te in i)yr(i[te],s,n,te);if(a){const te=re(a)?a.call(n):a;Reflect.ownKeys(te).forEach(ue=>{Zn(ue,te[ue])})}f&&Ko(f,e,"c");function xe(te,ue){ee(ue)?ue.forEach(dt=>te(dt.bind(n))):ue&&te(ue.bind(n))}if(xe(da,u),xe(ks,g),xe(ha,_),xe(pa,P),xe(ca,I),xe(ua,U),xe(ya,se),xe(_a,Se),xe(ga,de),xe(ma,M),xe(xs,B),xe(va,le),ee(K))if(K.length){const te=e.exposed||(e.exposed={});K.forEach(ue=>{Object.defineProperty(te,ue,{get:()=>n[ue],set:dt=>n[ue]=dt,enumerable:!0})})}else e.exposed||(e.exposed={});ne&&e.render===xt&&(e.render=ne),S!=null&&(e.inheritAttrs=S),D&&(e.components=D),O&&(e.directives=O),le&&vr(e)}function Ea(e,t,n=xt){ee(e)&&(e=eo(e));for(const s in e){const o=e[s];let l;ke(o)?"default"in o?l=ct(o.from||s,o.default,!0):l=ct(o.from||s):l=ct(o),Ne(l)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>l.value,set:r=>l.value=r}):t[s]=l}}function Ko(e,t,n){vt(ee(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function yr(e,t,n,s){let o=s.includes(".")?pr(n,s):()=>n[s];if(Ie(e)){const l=t[e];re(l)&&Sn(o,l)}else if(re(e))Sn(o,e.bind(n));else if(ke(e))if(ee(e))e.forEach(l=>yr(l,t,n,s));else{const l=re(e.handler)?e.handler.bind(n):t[e.handler];re(l)&&Sn(o,l,e)}}function br(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:o,optionsCache:l,config:{optionMergeStrategies:r}}=e.appContext,i=l.get(t);let a;return i?a=i:!o.length&&!n&&!s?a=t:(a={},o.length&&o.forEach(d=>rs(a,d,r,!0)),rs(a,t,r)),ke(t)&&l.set(t,a),a}function rs(e,t,n,s=!1){const{mixins:o,extends:l}=t;l&&rs(e,l,n,!0),o&&o.forEach(r=>rs(e,r,n,!0));for(const r in t)if(!(s&&r==="expose")){const i=Sa[r]||n&&n[r];e[r]=i?i(e[r],t[r]):t[r]}return e}const Sa={data:Go,props:Wo,emits:Wo,methods:wn,computed:wn,beforeCreate:qe,created:qe,beforeMount:qe,mounted:qe,beforeUpdate:qe,updated:qe,beforeDestroy:qe,beforeUnmount:qe,destroyed:qe,unmounted:qe,activated:qe,deactivated:qe,errorCaptured:qe,serverPrefetch:qe,components:wn,directives:wn,watch:Ra,provide:Go,inject:Aa};function Go(e,t){return t?e?function(){return Fe(re(e)?e.call(this,this):e,re(t)?t.call(this,this):t)}:t:e}function Aa(e,t){return wn(eo(e),eo(t))}function eo(e){if(ee(e)){const t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ye(t)}Modifiers`]||e[`${Gt(t)}Modifiers`];function Ia(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||Ce;let o=n;const l=t.startsWith("update:"),r=l&&Pa(s,t.slice(7));r&&(r.trim&&(o=n.map(f=>Ie(f)?f.trim():f)),r.number&&(o=n.map(vs)));let i,a=s[i=Is(t)]||s[i=Is(Ye(t))];!a&&l&&(a=s[i=Is(Gt(t))]),a&&vt(a,e,6,o);const d=s[i+"Once"];if(d){if(!e.emitted)e.emitted={};else if(e.emitted[i])return;e.emitted[i]=!0,vt(d,e,6,o)}}const Na=new WeakMap;function kr(e,t,n=!1){const s=n?Na:t.emitsCache,o=s.get(e);if(o!==void 0)return o;const l=e.emits;let r={},i=!1;if(!re(e)){const a=d=>{const f=kr(d,t,!0);f&&(i=!0,Fe(r,f))};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}return!l&&!i?(ke(e)&&s.set(e,null),null):(ee(l)?l.forEach(a=>r[a]=null):Fe(r,l),ke(e)&&s.set(e,r),r)}function Cs(e,t){return!e||!fs(t)?!1:(t=t.slice(2).replace(/Once$/,""),be(e,t[0].toLowerCase()+t.slice(1))||be(e,Gt(t))||be(e,t))}function qo(e){const{type:t,vnode:n,proxy:s,withProxy:o,propsOptions:[l],slots:r,attrs:i,emit:a,render:d,renderCache:f,props:u,data:g,setupState:_,ctx:P,inheritAttrs:I}=e,U=os(e);let Y,M;try{if(n.shapeFlag&4){const B=o||s,ne=B;Y=wt(d.call(ne,B,f,u,_,g,P)),M=i}else{const B=t;Y=wt(B.length>1?B(u,{attrs:i,slots:r,emit:a}):B(u,null)),M=t.props?i:$a(i)}}catch(B){On.length=0,bs(B,e,1),Y=Te(Bt)}let G=Y;if(M&&I!==!1){const B=Object.keys(M),{shapeFlag:ne}=G;B.length&&ne&7&&(l&&B.some(ds)&&(M=Ma(M,l)),G=fn(G,M,!1,!0))}return n.dirs&&(G=fn(G,null,!1,!0),G.dirs=G.dirs?G.dirs.concat(n.dirs):n.dirs),n.transition&&xo(G,n.transition),Y=G,os(U),Y}const $a=e=>{let t;for(const n in e)(n==="class"||n==="style"||fs(n))&&((t||(t={}))[n]=e[n]);return t},Ma=(e,t)=>{const n={};for(const s in e)(!ds(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function Da(e,t,n){const{props:s,children:o,component:l}=e,{props:r,children:i,patchFlag:a}=t,d=l.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&a>=0){if(a&1024)return!0;if(a&16)return s?Jo(s,r,d):!!r;if(a&8){const f=t.dynamicProps;for(let u=0;uObject.create(Cr),Sr=e=>Object.getPrototypeOf(e)===Cr;function ja(e,t,n,s=!1){const o={},l=Er();e.propsDefaults=Object.create(null),Ar(e,t,o,l);for(const r in e.propsOptions[0])r in o||(o[r]=void 0);n?e.props=s?o:lr(o):e.type.props?e.props=o:e.props=l,e.attrs=l}function Fa(e,t,n,s){const{props:o,attrs:l,vnode:{patchFlag:r}}=e,i=ge(o),[a]=e.propsOptions;let d=!1;if((s||r>0)&&!(r&16)){if(r&8){const f=e.vnode.dynamicProps;for(let u=0;u{a=!0;const[g,_]=Rr(u,t,!0);Fe(r,g),_&&i.push(..._)};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}if(!l&&!a)return ke(e)&&s.set(e,ln),ln;if(ee(l))for(let f=0;fe==="_"||e==="_ctx"||e==="$stable",Eo=e=>ee(e)?e.map(wt):[wt(e)],Ua=(e,t,n)=>{if(t._n)return t;const s=Xn((...o)=>Eo(t(...o)),n);return s._c=!1,s},Tr=(e,t,n)=>{const s=e._ctx;for(const o in e){if(Co(o))continue;const l=e[o];if(re(l))t[o]=Ua(o,l,s);else if(l!=null){const r=Eo(l);t[o]=()=>r}}},Or=(e,t)=>{const n=Eo(t);e.slots.default=()=>n},Pr=(e,t,n)=>{for(const s in t)(n||!Co(s))&&(e[s]=t[s])},Ha=(e,t,n)=>{const s=e.slots=Er();if(e.vnode.shapeFlag&32){const o=t._;o?(Pr(s,t,n),n&&jl(s,"_",o,!0)):Tr(t,s)}else t&&Or(e,t)},Ba=(e,t,n)=>{const{vnode:s,slots:o}=e;let l=!0,r=Ce;if(s.shapeFlag&32){const i=t._;i?n&&i===1?l=!1:Pr(o,t,n):(l=!t.$stable,Tr(t,o)),r=t}else t&&(Or(e,t),r={default:1});if(l)for(const i in o)!Co(i)&&r[i]==null&&delete o[i]},Qe=Ja;function Ka(e){return Ga(e)}function Ga(e,t){const n=gs();n.__VUE__=!0;const{insert:s,remove:o,patchProp:l,createElement:r,createText:i,createComment:a,setText:d,setElementText:f,parentNode:u,nextSibling:g,setScopeId:_=xt,insertStaticContent:P}=e,I=(h,p,y,C=null,A=null,x=null,L=void 0,N=null,$=!!p.dynamicChildren)=>{if(h===p)return;h&&!yn(h,p)&&(C=E(h),Ve(h,A,x,!0),h=null),p.patchFlag===-2&&($=!1,p.dynamicChildren=null);const{type:T,ref:Q,shapeFlag:V}=p;switch(T){case Es:U(h,p,y,C);break;case Bt:Y(h,p,y,C);break;case Vs:h==null&&M(p,y,C,L);break;case W:D(h,p,y,C,A,x,L,N,$);break;default:V&1?ne(h,p,y,C,A,x,L,N,$):V&6?O(h,p,y,C,A,x,L,N,$):(V&64||V&128)&&T.process(h,p,y,C,A,x,L,N,$,z)}Q!=null&&A?An(Q,h&&h.ref,x,p||h,!p):Q==null&&h&&h.ref!=null&&An(h.ref,null,x,h,!0)},U=(h,p,y,C)=>{if(h==null)s(p.el=i(p.children),y,C);else{const A=p.el=h.el;p.children!==h.children&&d(A,p.children)}},Y=(h,p,y,C)=>{h==null?s(p.el=a(p.children||""),y,C):p.el=h.el},M=(h,p,y,C)=>{[h.el,h.anchor]=P(h.children,p,y,C,h.el,h.anchor)},G=({el:h,anchor:p},y,C)=>{let A;for(;h&&h!==p;)A=g(h),s(h,y,C),h=A;s(p,y,C)},B=({el:h,anchor:p})=>{let y;for(;h&&h!==p;)y=g(h),o(h),h=y;o(p)},ne=(h,p,y,C,A,x,L,N,$)=>{if(p.type==="svg"?L="svg":p.type==="math"&&(L="mathml"),h==null)Se(p,y,C,A,x,L,N,$);else{const T=h.el&&h.el._isVueCE?h.el:null;try{T&&T._beginPatch(),le(h,p,A,x,L,N,$)}finally{T&&T._endPatch()}}},Se=(h,p,y,C,A,x,L,N)=>{let $,T;const{props:Q,shapeFlag:V,transition:J,dirs:X}=h;if($=h.el=r(h.type,x,Q&&Q.is,Q),V&8?f($,h.children):V&16&&se(h.children,$,null,C,A,Fs(h,x),L,N),X&&qt(h,null,C,"created"),de($,h,h.scopeId,L,C),Q){for(const oe in Q)oe!=="value"&&!xn(oe)&&l($,oe,null,Q[oe],x,C);"value"in Q&&l($,"value",null,Q.value,x),(T=Q.onVnodeBeforeMount)&&_t(T,C,h)}X&&qt(h,null,C,"beforeMount");const ae=Wa(A,J);ae&&J.beforeEnter($),s($,p,y),((T=Q&&Q.onVnodeMounted)||ae||X)&&Qe(()=>{try{T&&_t(T,C,h),ae&&J.enter($),X&&qt(h,null,C,"mounted")}finally{}},A)},de=(h,p,y,C,A)=>{if(y&&_(h,y),C)for(let x=0;x{for(let T=$;T{const N=p.el=h.el;let{patchFlag:$,dynamicChildren:T,dirs:Q}=p;$|=h.patchFlag&16;const V=h.props||Ce,J=p.props||Ce;let X;if(y&&Jt(y,!1),(X=J.onVnodeBeforeUpdate)&&_t(X,y,p,h),Q&&qt(p,h,y,"beforeUpdate"),y&&Jt(y,!0),(V.innerHTML&&J.innerHTML==null||V.textContent&&J.textContent==null)&&f(N,""),T?K(h.dynamicChildren,T,N,y,C,Fs(p,A),x):L||ue(h,p,N,null,y,C,Fs(p,A),x,!1),$>0){if($&16)S(N,V,J,y,A);else if($&2&&V.class!==J.class&&l(N,"class",null,J.class,A),$&4&&l(N,"style",V.style,J.style,A),$&8){const ae=p.dynamicProps;for(let oe=0;oe{X&&_t(X,y,p,h),Q&&qt(p,h,y,"updated")},C)},K=(h,p,y,C,A,x,L)=>{for(let N=0;N{if(p!==y){if(p!==Ce)for(const x in p)!xn(x)&&!(x in y)&&l(h,x,p[x],null,A,C);for(const x in y){if(xn(x))continue;const L=y[x],N=p[x];L!==N&&x!=="value"&&l(h,x,N,L,A,C)}"value"in y&&l(h,"value",p.value,y.value,A)}},D=(h,p,y,C,A,x,L,N,$)=>{const T=p.el=h?h.el:i(""),Q=p.anchor=h?h.anchor:i("");let{patchFlag:V,dynamicChildren:J,slotScopeIds:X}=p;X&&(N=N?N.concat(X):X),h==null?(s(T,y,C),s(Q,y,C),se(p.children||[],y,Q,A,x,L,N,$)):V>0&&V&64&&J&&h.dynamicChildren&&h.dynamicChildren.length===J.length?(K(h.dynamicChildren,J,y,A,x,L,N),(p.key!=null||A&&p===A.subTree)&&Ir(h,p,!0)):ue(h,p,y,Q,A,x,L,N,$)},O=(h,p,y,C,A,x,L,N,$)=>{p.slotScopeIds=N,h==null?p.shapeFlag&512?A.ctx.activate(p,y,C,L,$):ve(p,y,C,A,x,L,$):Ae(h,p,$)},ve=(h,p,y,C,A,x,L)=>{const N=h.component=tc(h,C,A);if(gr(h)&&(N.ctx.renderer=z),nc(N,!1,L),N.asyncDep){if(A&&A.registerDep(N,xe,L),!h.el){const $=N.subTree=Te(Bt);Y(null,$,p,y),h.placeholder=$.el}}else xe(N,h,p,y,A,x,L)},Ae=(h,p,y)=>{const C=p.component=h.component;if(Da(h,p,y))if(C.asyncDep&&!C.asyncResolved){te(C,p,y);return}else C.next=p,C.update();else p.el=h.el,C.vnode=p},xe=(h,p,y,C,A,x,L)=>{const N=()=>{if(h.isMounted){let{next:V,bu:J,u:X,parent:ae,vnode:oe}=h;{const rt=Nr(h);if(rt){V&&(V.el=oe.el,te(h,V,L)),rt.asyncDep.then(()=>{Qe(()=>{h.isUnmounted||T()},A)});return}}let me=V,Re;Jt(h,!1),V?(V.el=oe.el,te(h,V,L)):V=oe,J&&Qn(J),(Re=V.props&&V.props.onVnodeBeforeUpdate)&&_t(Re,ae,V,oe),Jt(h,!0);const Oe=qo(h),lt=h.subTree;h.subTree=Oe,I(lt,Oe,u(lt.el),E(lt),h,A,x),V.el=Oe.el,me===null&&La(h,Oe.el),X&&Qe(X,A),(Re=V.props&&V.props.onVnodeUpdated)&&Qe(()=>_t(Re,ae,V,oe),A)}else{let V;const{el:J,props:X}=p,{bm:ae,m:oe,parent:me,root:Re,type:Oe}=h,lt=Rn(p);Jt(h,!1),ae&&Qn(ae),!lt&&(V=X&&X.onVnodeBeforeMount)&&_t(V,me,p),Jt(h,!0);{Re.ce&&Re.ce._hasShadowRoot()&&Re.ce._injectChildStyle(Oe,h.parent?h.parent.type:void 0);const rt=h.subTree=qo(h);I(null,rt,y,C,h,A,x),p.el=rt.el}if(oe&&Qe(oe,A),!lt&&(V=X&&X.onVnodeMounted)){const rt=p;Qe(()=>_t(V,me,rt),A)}(p.shapeFlag&256||me&&Rn(me.vnode)&&me.vnode.shapeFlag&256)&&h.a&&Qe(h.a,A),h.isMounted=!0,p=y=C=null}};h.scope.on();const $=h.effect=new Gl(N);h.scope.off();const T=h.update=$.run.bind($),Q=h.job=$.runIfDirty.bind($);Q.i=h,Q.id=h.uid,$.scheduler=()=>ko(Q),Jt(h,!0),T()},te=(h,p,y)=>{p.component=h;const C=h.vnode.props;h.vnode=p,h.next=null,Fa(h,p.props,C,y),Ba(h,p.children,y),It(),jo(h),Nt()},ue=(h,p,y,C,A,x,L,N,$=!1)=>{const T=h&&h.children,Q=h?h.shapeFlag:0,V=p.children,{patchFlag:J,shapeFlag:X}=p;if(J>0){if(J&128){Xe(T,V,y,C,A,x,L,N,$);return}else if(J&256){dt(T,V,y,C,A,x,L,N,$);return}}X&8?(Q&16&&$e(T,A,x),V!==T&&f(y,V)):Q&16?X&16?Xe(T,V,y,C,A,x,L,N,$):$e(T,A,x,!0):(Q&8&&f(y,""),X&16&&se(V,y,C,A,x,L,N,$))},dt=(h,p,y,C,A,x,L,N,$)=>{h=h||ln,p=p||ln;const T=h.length,Q=p.length,V=Math.min(T,Q);let J;for(J=0;JQ?$e(h,A,x,!0,!1,V):se(p,y,C,A,x,L,N,$,V)},Xe=(h,p,y,C,A,x,L,N,$)=>{let T=0;const Q=p.length;let V=h.length-1,J=Q-1;for(;T<=V&&T<=J;){const X=h[T],ae=p[T]=$?At(p[T]):wt(p[T]);if(yn(X,ae))I(X,ae,y,null,A,x,L,N,$);else break;T++}for(;T<=V&&T<=J;){const X=h[V],ae=p[J]=$?At(p[J]):wt(p[J]);if(yn(X,ae))I(X,ae,y,null,A,x,L,N,$);else break;V--,J--}if(T>V){if(T<=J){const X=J+1,ae=XJ)for(;T<=V;)Ve(h[T],A,x,!0),T++;else{const X=T,ae=T,oe=new Map;for(T=ae;T<=J;T++){const We=p[T]=$?At(p[T]):wt(p[T]);We.key!=null&&oe.set(We.key,T)}let me,Re=0;const Oe=J-ae+1;let lt=!1,rt=0;const Wt=new Array(Oe);for(T=0;T=Oe){Ve(We,A,x,!0);continue}let it;if(We.key!=null)it=oe.get(We.key);else for(me=ae;me<=J;me++)if(Wt[me-ae]===0&&yn(We,p[me])){it=me;break}it===void 0?Ve(We,A,x,!0):(Wt[it-ae]=T+1,it>=rt?rt=it:lt=!0,I(We,p[it],y,null,A,x,L,N,$),Re++)}const Kn=lt?qa(Wt):ln;for(me=Kn.length-1,T=Oe-1;T>=0;T--){const We=ae+T,it=p[We],Gn=p[We+1],Wn=We+1{const{el:x,type:L,transition:N,children:$,shapeFlag:T}=h;if(T&6){Ze(h.component.subTree,p,y,C);return}if(T&128){h.suspense.move(p,y,C);return}if(T&64){L.move(h,p,y,z);return}if(L===W){s(x,p,y);for(let V=0;V<$.length;V++)Ze($[V],p,y,C);s(h.anchor,p,y);return}if(L===Vs){G(h,p,y);return}if(C!==2&&T&1&&N)if(C===0)N.persisted&&!x[Ls]?s(x,p,y):(N.beforeEnter(x),s(x,p,y),Qe(()=>N.enter(x),A));else{const{leave:V,delayLeave:J,afterLeave:X}=N,ae=()=>{h.ctx.isUnmounted?o(x):s(x,p,y)},oe=()=>{const me=x._isLeaving||!!x[Ls];x._isLeaving&&x[Ls](!0),N.persisted&&!me?ae():V(x,()=>{ae(),X&&X()})};J?J(x,ae,oe):oe()}else s(x,p,y)},Ve=(h,p,y,C=!1,A=!1)=>{const{type:x,props:L,ref:N,children:$,dynamicChildren:T,shapeFlag:Q,patchFlag:V,dirs:J,cacheIndex:X,memo:ae}=h;if(V===-2&&(A=!1),N!=null&&(It(),An(N,null,y,h,!0),Nt()),X!=null&&(p.renderCache[X]=void 0),Q&256){p.ctx.deactivate(h);return}const oe=Q&1&&J,me=!Rn(h);let Re;if(me&&(Re=L&&L.onVnodeBeforeUnmount)&&_t(Re,p,h),Q&6)Ge(h.component,y,C);else{if(Q&128){h.suspense.unmount(y,C);return}oe&&qt(h,null,p,"beforeUnmount"),Q&64?h.type.remove(h,p,y,z,C):T&&!T.hasOnce&&(x!==W||V>0&&V&64)?$e(T,p,y,!1,!0):(x===W&&V&384||!A&&Q&16)&&$e($,p,y),C&&Ke(h)}const Oe=ae!=null&&X==null;(me&&(Re=L&&L.onVnodeUnmounted)||oe||Oe)&&Qe(()=>{Re&&_t(Re,p,h),oe&&qt(h,null,p,"unmounted"),Oe&&(h.el=null)},y)},Ke=h=>{const{type:p,el:y,anchor:C,transition:A}=h;if(p===W){ot(y,C);return}if(p===Vs){B(h);return}const x=()=>{o(y),A&&!A.persisted&&A.afterLeave&&A.afterLeave()};if(h.shapeFlag&1&&A&&!A.persisted){const{leave:L,delayLeave:N}=A,$=()=>L(y,x);N?N(h.el,x,$):$()}else x()},ot=(h,p)=>{let y;for(;h!==p;)y=g(h),o(h),h=y;o(p)},Ge=(h,p,y)=>{const{bum:C,scope:A,job:x,subTree:L,um:N,m:$,a:T}=h;Yo($),Yo(T),C&&Qn(C),A.stop(),x&&(x.flags|=8,Ve(L,h,p,y)),N&&Qe(N,p),Qe(()=>{h.isUnmounted=!0},p)},$e=(h,p,y,C=!1,A=!1,x=0)=>{for(let L=x;L{if(h.shapeFlag&6)return E(h.component.subTree);if(h.shapeFlag&128)return h.suspense.next();const p=g(h.anchor||h.el),y=p&&p[ia];return y?g(y):p};let H=!1;const F=(h,p,y)=>{let C;h==null?p._vnode&&(Ve(p._vnode,null,null,!0),C=p._vnode.component):I(p._vnode||null,h,p,null,null,null,y),p._vnode=h,H||(H=!0,jo(C),ur(),H=!1)},z={p:I,um:Ve,m:Ze,r:Ke,mt:ve,mc:se,pc:ue,pbc:K,n:E,o:e};return{render:F,hydrate:void 0,createApp:Oa(F)}}function Fs({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function Jt({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Wa(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Ir(e,t,n=!1){const s=e.children,o=t.children;if(ee(s)&&ee(o))for(let l=0;l>1,e[n[i]]0&&(t[s]=n[l-1]),n[l]=s)}}for(l=n.length,r=n[l-1];l-- >0;)n[l]=r,r=t[r];return n}function Nr(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Nr(t)}function Yo(e){if(e)for(let t=0;te.__isSuspense;function Ja(e,t){t&&t.pendingBranch?ee(e)?t.effects.push(...e):t.effects.push(e):na(e)}const W=Symbol.for("v-fgt"),Es=Symbol.for("v-txt"),Bt=Symbol.for("v-cmt"),Vs=Symbol.for("v-stc"),On=[];let nt=null;function w(e=!1){On.push(nt=e?null:[])}function za(){On.pop(),nt=On[On.length-1]||null}let Dn=1;function is(e,t=!1){Dn+=e,e<0&&nt&&t&&(nt.hasOnce=!0)}function Dr(e){return e.dynamicChildren=Dn>0?nt||ln:null,za(),Dn>0&&nt&&nt.push(e),e}function k(e,t,n,s,o,l){return Dr(c(e,t,n,s,o,l,!0))}function Lr(e,t,n,s,o){return Dr(Te(e,t,n,s,o,!0))}function as(e){return e?e.__v_isVNode===!0:!1}function yn(e,t){return e.type===t.type&&e.key===t.key}const jr=({key:e})=>e??null,es=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?Ie(e)||Ne(e)||re(e)?{i:tt,r:e,k:t,f:!!n}:e:null);function c(e,t=null,n=null,s=0,o=null,l=e===W?0:1,r=!1,i=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&jr(t),ref:t&&es(t),scopeId:dr,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:l,patchFlag:s,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:tt};return i?(So(a,n),l&128&&e.normalize(a)):n&&(a.shapeFlag|=Ie(n)?8:16),Dn>0&&!r&&nt&&(a.patchFlag>0||l&6)&&a.patchFlag!==32&&nt.push(a),a}const Te=Ya;function Ya(e,t=null,n=null,s=0,o=null,l=!1){if((!e||e===wa)&&(e=Bt),as(e)){const i=fn(e,t,!0);return n&&So(i,n),Dn>0&&!l&&nt&&(i.shapeFlag&6?nt[nt.indexOf(e)]=i:nt.push(i)),i.patchFlag=-2,i}if(ic(e)&&(e=e.__vccOpts),t){t=Qa(t);let{class:i,style:a}=t;i&&!Ie(i)&&(t.class=Be(i)),ke(a)&&(ys(a)&&!ee(a)&&(a=Fe({},a)),t.style=ho(a))}const r=Ie(e)?1:Mr(e)?128:aa(e)?64:ke(e)?4:re(e)?2:0;return c(e,t,n,s,o,r,l,!0)}function Qa(e){return e?ys(e)||Sr(e)?Fe({},e):e:null}function fn(e,t,n=!1,s=!1){const{props:o,ref:l,patchFlag:r,children:i,transition:a}=e,d=t?Xa(o||{},t):o,f={__v_isVNode:!0,__v_skip:!0,type:e.type,props:d,key:d&&jr(d),ref:t&&t.ref?n&&l?ee(l)?l.concat(es(t)):[l,es(t)]:es(t):l,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:i,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==W?r===-1?16:r|16:r,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:a,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&fn(e.ssContent),ssFallback:e.ssFallback&&fn(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return a&&s&&xo(f,a.clone(f)),f}function _e(e=" ",t=0){return Te(Es,null,e,t)}function we(e="",t=!1){return t?(w(),Lr(Bt,null,e)):Te(Bt,null,e)}function wt(e){return e==null||typeof e=="boolean"?Te(Bt):ee(e)?Te(W,null,e.slice()):as(e)?At(e):Te(Es,null,String(e))}function At(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:fn(e)}function So(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(ee(t))n=16;else if(typeof t=="object")if(s&65){const o=t.default;o&&(o._c&&(o._d=!1),So(e,o()),o._c&&(o._d=!0));return}else{n=32;const o=t._;!o&&!Sr(t)?t._ctx=tt:o===3&&tt&&(tt.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else re(t)?(t={default:t,_ctx:tt},n=32):(t=String(t),s&64?(n=16,t=[_e(t)]):n=8);e.children=t,e.shapeFlag|=n}function Xa(...e){const t={};for(let n=0;nHe||tt;let cs,no;{const e=gs(),t=(n,s)=>{let o;return(o=e[n])||(o=e[n]=[]),o.push(s),l=>{o.length>1?o.forEach(r=>r(l)):o[0](l)}};cs=t("__VUE_INSTANCE_SETTERS__",n=>He=n),no=t("__VUE_SSR_SETTERS__",n=>Ln=n)}const Hn=e=>{const t=He;return cs(e),e.scope.on(),()=>{e.scope.off(),cs(t)}},Qo=()=>{He&&He.scope.off(),cs(null)};function Vr(e){return e.vnode.shapeFlag&4}let Ln=!1;function nc(e,t=!1,n=!1){t&&no(t);const{props:s,children:o}=e.vnode,l=Vr(e);ja(e,s,l,t),Ha(e,o,n||t);const r=l?sc(e,t):void 0;return t&&no(!1),r}function sc(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,xa);const{setup:s}=n;if(s){It();const o=e.setupContext=s.length>1?lc(e):null,l=Hn(e),r=Un(s,e,0,[e.props,o]),i=Ml(r);if(Nt(),l(),(i||e.sp)&&!Rn(e)&&vr(e),i){if(r.then(Qo,Qo),t)return r.then(a=>{Xo(e,a)}).catch(a=>{bs(a,e,0)});e.asyncDep=r}else Xo(e,r)}else Ur(e)}function Xo(e,t,n){re(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ke(t)&&(e.setupState=ir(t)),Ur(e)}function Ur(e,t,n){const s=e.type;e.render||(e.render=s.render||xt);{const o=Hn(e);It();try{Ca(e)}finally{Nt(),o()}}}const oc={get(e,t){return Ue(e,"get",""),e[t]}};function lc(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,oc),slots:e.slots,emit:e.emit,expose:t}}function Ss(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(ir(wo(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Tn)return Tn[n](e)},has(t,n){return n in t||n in Tn}})):e.proxy}function rc(e,t=!0){return re(e)?e.displayName||e.name:e.name||t&&e.__name}function ic(e){return re(e)&&"__vccOpts"in e}const pe=(e,t)=>Qi(e,t,Ln);function Hr(e,t,n){try{is(-1);const s=arguments.length;return s===2?ke(t)&&!ee(t)?as(t)?Te(e,null,[t]):Te(e,t):Te(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&as(n)&&(n=[n]),Te(e,t,n))}finally{is(1)}}const ac="3.5.35";/**
+* @vue/runtime-dom v3.5.35
+* (c) 2018-present Yuxi (Evan) You and Vue contributors
+* @license MIT
+**/let so;const Zo=typeof window<"u"&&window.trustedTypes;if(Zo)try{so=Zo.createPolicy("vue",{createHTML:e=>e})}catch{}const Br=so?e=>so.createHTML(e):e=>e,cc="http://www.w3.org/2000/svg",uc="http://www.w3.org/1998/Math/MathML",St=typeof document<"u"?document:null,el=St&&St.createElement("template"),fc={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"?St.createElementNS(cc,e):t==="mathml"?St.createElementNS(uc,e):n?St.createElement(e,{is:n}):St.createElement(e);return e==="select"&&s&&s.multiple!=null&&o.setAttribute("multiple",s.multiple),o},createText:e=>St.createTextNode(e),createComment:e=>St.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>St.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,o,l){const r=n?n.previousSibling:t.lastChild;if(o&&(o===l||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),!(o===l||!(o=o.nextSibling)););else{el.innerHTML=Br(s==="svg"?``:s==="mathml"?``:e);const i=el.content;if(s==="svg"||s==="mathml"){const a=i.firstChild;for(;a.firstChild;)i.appendChild(a.firstChild);i.removeChild(a)}t.insertBefore(i,n)}return[r?r.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},dc=Symbol("_vtc");function hc(e,t,n){const s=e[dc];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const tl=Symbol("_vod"),pc=Symbol("_vsh"),mc=Symbol(""),vc=/(?:^|;)\s*display\s*:/;function gc(e,t,n){const s=e.style,o=Ie(n);let l=!1;if(n&&!o){if(t)if(Ie(t))for(const r of t.split(";")){const i=r.slice(0,r.indexOf(":")).trim();n[i]==null&&kn(s,i,"")}else for(const r in t)n[r]==null&&kn(s,r,"");for(const r in n){r==="display"&&(l=!0);const i=n[r];i!=null?yc(e,r,!Ie(t)&&t?t[r]:void 0,i)||kn(s,r,i):kn(s,r,"")}}else if(o){if(t!==n){const r=s[mc];r&&(n+=";"+r),s.cssText=n,l=vc.test(n)}}else t&&e.removeAttribute("style");tl in e&&(e[tl]=l?s.display:"",e[pc]&&(s.display="none"))}const nl=/\s*!important$/;function kn(e,t,n){if(ee(n))n.forEach(s=>kn(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=_c(e,t);nl.test(n)?e.setProperty(Gt(s),n.replace(nl,""),"important"):e[s]=n}}const sl=["Webkit","Moz","ms"],Us={};function _c(e,t){const n=Us[t];if(n)return n;let s=Ye(t);if(s!=="filter"&&s in e)return Us[t]=s;s=ms(s);for(let o=0;oHs||(xc.then(()=>Hs=0),Hs=Date.now());function Ec(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;const o=n.value;if(ee(o)){const l=s.stopImmediatePropagation;s.stopImmediatePropagation=()=>{l.call(s),s._stopped=!0};const r=o.slice(),i=[s];for(let a=0;ae.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Sc=(e,t,n,s,o,l)=>{const r=o==="svg";t==="class"?hc(e,s,r):t==="style"?gc(e,n,s):fs(t)?ds(t)||wc(e,t,n,s,l):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Ac(e,t,s,r))?(rl(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&ll(e,t,s,r,l,t!=="value")):e._isVueCE&&(Rc(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!Ie(s)))?rl(e,Ye(t),s,l,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),ll(e,t,s,r))};function Ac(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&cl(t)&&re(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const o=e.tagName;if(o==="IMG"||o==="VIDEO"||o==="CANVAS"||o==="SOURCE")return!1}return cl(t)&&Ie(n)?!1:t in e}function Rc(e,t){const n=e._def.props;if(!n)return!1;const s=Ye(t);return Array.isArray(n)?n.some(o=>Ye(o)===s):Object.keys(n).some(o=>Ye(o)===s)}const Kt=e=>{const t=e.props["onUpdate:modelValue"]||!1;return ee(t)?n=>Qn(t,n):t};function Tc(e){e.target.composing=!0}function ul(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const ut=Symbol("_assign");function fl(e,t,n){return t&&(e=e.trim()),n&&(e=vs(e)),e}const et={created(e,{modifiers:{lazy:t,trim:n,number:s}},o){e[ut]=Kt(o);const l=s||o.props&&o.props.type==="number";Ot(e,t?"change":"input",r=>{r.target.composing||e[ut](fl(e.value,n,l))}),(n||l)&&Ot(e,"change",()=>{e.value=fl(e.value,n,l)}),t||(Ot(e,"compositionstart",Tc),Ot(e,"compositionend",ul),Ot(e,"change",ul))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:o,number:l}},r){if(e[ut]=Kt(r),e.composing)return;const i=(l||e.type==="number")&&!/^0\d/.test(e.value)?vs(e.value):e.value,a=t??"";if(i===a)return;const d=e.getRootNode();(d instanceof Document||d instanceof ShadowRoot)&&d.activeElement===e&&e.type!=="range"&&(s&&t===n||o&&e.value.trim()===a)||(e.value=a)}},Oc={deep:!0,created(e,t,n){e[ut]=Kt(n),Ot(e,"change",()=>{const s=e._modelValue,o=dn(e),l=e.checked,r=e[ut];if(ee(s)){const i=po(s,o),a=i!==-1;if(l&&!a)r(s.concat(o));else if(!l&&a){const d=[...s];d.splice(i,1),r(d)}}else if(mn(s)){const i=new Set(s);l?i.add(o):i.delete(o),r(i)}else r(Kr(e,l))})},mounted:dl,beforeUpdate(e,t,n){e[ut]=Kt(n),dl(e,t,n)}};function dl(e,{value:t,oldValue:n},s){e._modelValue=t;let o;if(ee(t))o=po(t,s.props.value)>-1;else if(mn(t))o=t.has(s.props.value);else{if(t===n)return;o=Ht(t,Kr(e,!0))}e.checked!==o&&(e.checked=o)}const hl={created(e,{value:t},n){e.checked=Ht(t,n.props.value),e[ut]=Kt(n),Ot(e,"change",()=>{e[ut](dn(e))})},beforeUpdate(e,{value:t,oldValue:n},s){e[ut]=Kt(s),t!==n&&(e.checked=Ht(t,s.props.value))}},Pc={deep:!0,created(e,{value:t,modifiers:{number:n}},s){const o=mn(t);Ot(e,"change",()=>{const l=Array.prototype.filter.call(e.options,r=>r.selected).map(r=>n?vs(dn(r)):dn(r));e[ut](e.multiple?o?new Set(l):l:l[0]),e._assigning=!0,Ut(()=>{e._assigning=!1})}),e[ut]=Kt(s)},mounted(e,{value:t}){pl(e,t)},beforeUpdate(e,t,n){e[ut]=Kt(n)},updated(e,{value:t}){e._assigning||pl(e,t)}};function pl(e,t){const n=e.multiple,s=ee(t);if(!(n&&!s&&!mn(t))){for(let o=0,l=e.options.length;oString(d)===String(i)):r.selected=po(t,i)>-1}else r.selected=t.has(i);else if(Ht(dn(r),t)){e.selectedIndex!==o&&(e.selectedIndex=o);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function dn(e){return"_value"in e?e._value:e.value}function Kr(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const Ic=["ctrl","shift","alt","meta"],Nc={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Ic.some(n=>e[`${n}Key`]&&!t.includes(n))},on=(e,t)=>{if(!e)return e;const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(o,...l)=>{for(let r=0;r{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=o=>{if(!("key"in o))return;const l=Gt(o.key);if(t.some(r=>r===l||$c[r]===l))return e(o)})},Mc=Fe({patchProp:Sc},fc);let ml;function Dc(){return ml||(ml=Ka(Mc))}const Lc=(...e)=>{const t=Dc().createApp(...e),{mount:n}=t;return t.mount=s=>{const o=Fc(s);if(!o)return;const l=t._component;!re(l)&&!l.render&&!l.template&&(l.template=o.innerHTML),o.nodeType===1&&(o.textContent="");const r=n(o,!1,jc(o));return o instanceof Element&&(o.removeAttribute("v-cloak"),o.setAttribute("data-v-app","")),r},t};function jc(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Fc(e){return Ie(e)?document.querySelector(e):e}/*!
+ * pinia v2.3.1
+ * (c) 2025 Eduardo San Martin Morote
+ * @license MIT
+ */let Gr;const As=e=>Gr=e,Wr=Symbol();function oo(e){return e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"&&typeof e.toJSON!="function"}var Pn;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(Pn||(Pn={}));function Vc(){const e=Bl(!0),t=e.run(()=>Z({}));let n=[],s=[];const o=wo({install(l){As(o),o._a=l,l.provide(Wr,o),l.config.globalProperties.$pinia=o,s.forEach(r=>n.push(r)),s=[]},use(l){return this._a?n.push(l):s.push(l),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return o}const qr=()=>{};function vl(e,t,n,s=qr){e.push(t);const o=()=>{const l=e.indexOf(t);l>-1&&(e.splice(l,1),s())};return!n&&Kl()&&Ei(o),o}function tn(e,...t){e.slice().forEach(n=>{n(...t)})}const Uc=e=>e(),gl=Symbol(),Bs=Symbol();function lo(e,t){e instanceof Map&&t instanceof Map?t.forEach((n,s)=>e.set(s,n)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const n in t){if(!t.hasOwnProperty(n))continue;const s=t[n],o=e[n];oo(o)&&oo(s)&&e.hasOwnProperty(n)&&!Ne(s)&&!Pt(s)?e[n]=lo(o,s):e[n]=s}return e}const Hc=Symbol();function Bc(e){return!oo(e)||!e.hasOwnProperty(Hc)}const{assign:Lt}=Object;function Kc(e){return!!(Ne(e)&&e.effect)}function Gc(e,t,n,s){const{state:o,actions:l,getters:r}=t,i=n.state.value[e];let a;function d(){i||(n.state.value[e]=o?o():{});const f=qi(n.state.value[e]);return Lt(f,l,Object.keys(r||{}).reduce((u,g)=>(u[g]=wo(pe(()=>{As(n);const _=n._s.get(e);return r[g].call(_,_)})),u),{}))}return a=Jr(e,d,t,n,s,!0),a}function Jr(e,t,n={},s,o,l){let r;const i=Lt({actions:{}},n),a={deep:!0};let d,f,u=[],g=[],_;const P=s.state.value[e];!l&&!P&&(s.state.value[e]={});let I;function U(se){let le;d=f=!1,typeof se=="function"?(se(s.state.value[e]),le={type:Pn.patchFunction,storeId:e,events:_}):(lo(s.state.value[e],se),le={type:Pn.patchObject,payload:se,storeId:e,events:_});const K=I=Symbol();Ut().then(()=>{I===K&&(d=!0)}),f=!0,tn(u,le,s.state.value[e])}const Y=l?function(){const{state:le}=n,K=le?le():{};this.$patch(S=>{Lt(S,K)})}:qr;function M(){r.stop(),u=[],g=[],s._s.delete(e)}const G=(se,le="")=>{if(gl in se)return se[Bs]=le,se;const K=function(){As(s);const S=Array.from(arguments),D=[],O=[];function ve(te){D.push(te)}function Ae(te){O.push(te)}tn(g,{args:S,name:K[Bs],store:ne,after:ve,onError:Ae});let xe;try{xe=se.apply(this&&this.$id===e?this:ne,S)}catch(te){throw tn(O,te),te}return xe instanceof Promise?xe.then(te=>(tn(D,te),te)).catch(te=>(tn(O,te),Promise.reject(te))):(tn(D,xe),xe)};return K[gl]=!0,K[Bs]=le,K},B={_p:s,$id:e,$onAction:vl.bind(null,g),$patch:U,$reset:Y,$subscribe(se,le={}){const K=vl(u,se,le.detached,()=>S()),S=r.run(()=>Sn(()=>s.state.value[e],D=>{(le.flush==="sync"?f:d)&&se({storeId:e,type:Pn.direct,events:_},D)},Lt({},a,le)));return K},$dispose:M},ne=Vn(B);s._s.set(e,ne);const de=(s._a&&s._a.runWithContext||Uc)(()=>s._e.run(()=>(r=Bl()).run(()=>t({action:G}))));for(const se in de){const le=de[se];if(Ne(le)&&!Kc(le)||Pt(le))l||(P&&Bc(le)&&(Ne(le)?le.value=P[se]:lo(le,P[se])),s.state.value[e][se]=le);else if(typeof le=="function"){const K=G(le,se);de[se]=K,i.actions[se]=le}}return Lt(ne,de),Lt(ge(ne),de),Object.defineProperty(ne,"$state",{get:()=>s.state.value[e],set:se=>{U(le=>{Lt(le,se)})}}),s._p.forEach(se=>{Lt(ne,r.run(()=>se({store:ne,app:s._a,pinia:s,options:i})))}),P&&l&&n.hydrate&&n.hydrate(ne.$state,P),d=!0,f=!0,ne}/*! #__NO_SIDE_EFFECTS__ */function Wc(e,t,n){let s,o;const l=typeof t=="function";s=e,o=l?n:t;function r(i,a){const d=sa();return i=i||(d?ct(Wr,null):null),i&&As(i),i=Gr,i._s.has(s)||(l?Jr(s,t,o,i):Gc(s,o,i)),i._s.get(s)}return r.$id=s,r}/*!
+ * vue-router v4.6.4
+ * (c) 2025 Eduardo San Martin Morote
+ * @license MIT
+ */const sn=typeof document<"u";function zr(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function qc(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&zr(e.default)}const ye=Object.assign;function Ks(e,t){const n={};for(const s in t){const o=t[s];n[s]=gt(o)?o.map(e):e(o)}return n}const In=()=>{},gt=Array.isArray;function _l(e,t){const n={};for(const s in e)n[s]=s in t?t[s]:e[s];return n}const Yr=/#/g,Jc=/&/g,zc=/\//g,Yc=/=/g,Qc=/\?/g,Qr=/\+/g,Xc=/%5B/g,Zc=/%5D/g,Xr=/%5E/g,eu=/%60/g,Zr=/%7B/g,tu=/%7C/g,ei=/%7D/g,nu=/%20/g;function Ao(e){return e==null?"":encodeURI(""+e).replace(tu,"|").replace(Xc,"[").replace(Zc,"]")}function su(e){return Ao(e).replace(Zr,"{").replace(ei,"}").replace(Xr,"^")}function ro(e){return Ao(e).replace(Qr,"%2B").replace(nu,"+").replace(Yr,"%23").replace(Jc,"%26").replace(eu,"`").replace(Zr,"{").replace(ei,"}").replace(Xr,"^")}function ou(e){return ro(e).replace(Yc,"%3D")}function lu(e){return Ao(e).replace(Yr,"%23").replace(Qc,"%3F")}function ru(e){return lu(e).replace(zc,"%2F")}function jn(e){if(e==null)return null;try{return decodeURIComponent(""+e)}catch{}return""+e}const iu=/\/$/,au=e=>e.replace(iu,"");function Gs(e,t,n="/"){let s,o={},l="",r="";const i=t.indexOf("#");let a=t.indexOf("?");return a=i>=0&&a>i?-1:a,a>=0&&(s=t.slice(0,a),l=t.slice(a,i>0?i:t.length),o=e(l.slice(1))),i>=0&&(s=s||t.slice(0,i),r=t.slice(i,t.length)),s=du(s??t,n),{fullPath:s+l+r,path:s,query:o,hash:jn(r)}}function cu(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function yl(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function uu(e,t,n){const s=t.matched.length-1,o=n.matched.length-1;return s>-1&&s===o&&hn(t.matched[s],n.matched[o])&&ti(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function hn(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function ti(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!fu(e[n],t[n]))return!1;return!0}function fu(e,t){return gt(e)?bl(e,t):gt(t)?bl(t,e):(e==null?void 0:e.valueOf())===(t==null?void 0:t.valueOf())}function bl(e,t){return gt(t)?e.length===t.length&&e.every((n,s)=>n===t[s]):e.length===1&&e[0]===t}function du(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),s=e.split("/"),o=s[s.length-1];(o===".."||o===".")&&s.push("");let l=n.length-1,r,i;for(r=0;r1&&l--;else break;return n.slice(0,l).join("/")+"/"+s.slice(r).join("/")}const Dt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};let io=function(e){return e.pop="pop",e.push="push",e}({}),Ws=function(e){return e.back="back",e.forward="forward",e.unknown="",e}({});function hu(e){if(!e)if(sn){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),au(e)}const pu=/^[^#]+#/;function mu(e,t){return e.replace(pu,"#")+t}function vu(e,t){const n=document.documentElement.getBoundingClientRect(),s=e.getBoundingClientRect();return{behavior:t.behavior,left:s.left-n.left-(t.left||0),top:s.top-n.top-(t.top||0)}}const Rs=()=>({left:window.scrollX,top:window.scrollY});function gu(e){let t;if("el"in e){const n=e.el,s=typeof n=="string"&&n.startsWith("#"),o=typeof n=="string"?s?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!o)return;t=vu(o,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function wl(e,t){return(history.state?history.state.position-t:-1)+e}const ao=new Map;function _u(e,t){ao.set(e,t)}function yu(e){const t=ao.get(e);return ao.delete(e),t}function bu(e){return typeof e=="string"||e&&typeof e=="object"}function ni(e){return typeof e=="string"||typeof e=="symbol"}let Pe=function(e){return e[e.MATCHER_NOT_FOUND=1]="MATCHER_NOT_FOUND",e[e.NAVIGATION_GUARD_REDIRECT=2]="NAVIGATION_GUARD_REDIRECT",e[e.NAVIGATION_ABORTED=4]="NAVIGATION_ABORTED",e[e.NAVIGATION_CANCELLED=8]="NAVIGATION_CANCELLED",e[e.NAVIGATION_DUPLICATED=16]="NAVIGATION_DUPLICATED",e}({});const si=Symbol("");Pe.MATCHER_NOT_FOUND+"",Pe.NAVIGATION_GUARD_REDIRECT+"",Pe.NAVIGATION_ABORTED+"",Pe.NAVIGATION_CANCELLED+"",Pe.NAVIGATION_DUPLICATED+"";function pn(e,t){return ye(new Error,{type:e,[si]:!0},t)}function Et(e,t){return e instanceof Error&&si in e&&(t==null||!!(e.type&t))}const wu=["params","query","hash"];function ku(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;const t={};for(const n of wu)n in e&&(t[n]=e[n]);return JSON.stringify(t,null,2)}function xu(e){const t={};if(e===""||e==="?")return t;const n=(e[0]==="?"?e.slice(1):e).split("&");for(let s=0;so&&ro(o)):[s&&ro(s)]).forEach(o=>{o!==void 0&&(t+=(t.length?"&":"")+n,o!=null&&(t+="="+o))})}return t}function Cu(e){const t={};for(const n in e){const s=e[n];s!==void 0&&(t[n]=gt(s)?s.map(o=>o==null?null:""+o):s==null?s:""+s)}return t}const Eu=Symbol(""),xl=Symbol(""),Ts=Symbol(""),Ro=Symbol(""),co=Symbol("");function bn(){let e=[];function t(s){return e.push(s),()=>{const o=e.indexOf(s);o>-1&&e.splice(o,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function Ft(e,t,n,s,o,l=r=>r()){const r=s&&(s.enterCallbacks[o]=s.enterCallbacks[o]||[]);return()=>new Promise((i,a)=>{const d=g=>{g===!1?a(pn(Pe.NAVIGATION_ABORTED,{from:n,to:t})):g instanceof Error?a(g):bu(g)?a(pn(Pe.NAVIGATION_GUARD_REDIRECT,{from:t,to:g})):(r&&s.enterCallbacks[o]===r&&typeof g=="function"&&r.push(g),i())},f=l(()=>e.call(s&&s.instances[o],t,n,d));let u=Promise.resolve(f);e.length<3&&(u=u.then(d)),u.catch(g=>a(g))})}function qs(e,t,n,s,o=l=>l()){const l=[];for(const r of e)for(const i in r.components){let a=r.components[i];if(!(t!=="beforeRouteEnter"&&!r.instances[i]))if(zr(a)){const d=(a.__vccOpts||a)[t];d&&l.push(Ft(d,n,s,r,i,o))}else{let d=a();l.push(()=>d.then(f=>{if(!f)throw new Error(`Couldn't resolve component "${i}" at "${r.path}"`);const u=qc(f)?f.default:f;r.mods[i]=f,r.components[i]=u;const g=(u.__vccOpts||u)[t];return g&&Ft(g,n,s,r,i,o)()}))}}return l}function Su(e,t){const n=[],s=[],o=[],l=Math.max(t.matched.length,e.matched.length);for(let r=0;rhn(d,i))?s.push(i):n.push(i));const a=e.matched[r];a&&(t.matched.find(d=>hn(d,a))||o.push(a))}return[n,s,o]}/*!
+ * vue-router v4.6.4
+ * (c) 2025 Eduardo San Martin Morote
+ * @license MIT
+ */let Au=()=>location.protocol+"//"+location.host;function oi(e,t){const{pathname:n,search:s,hash:o}=t,l=e.indexOf("#");if(l>-1){let r=o.includes(e.slice(l))?e.slice(l).length:1,i=o.slice(r);return i[0]!=="/"&&(i="/"+i),yl(i,"")}return yl(n,e)+s+o}function Ru(e,t,n,s){let o=[],l=[],r=null;const i=({state:g})=>{const _=oi(e,location),P=n.value,I=t.value;let U=0;if(g){if(n.value=_,t.value=g,r&&r===P){r=null;return}U=I?g.position-I.position:0}else s(_);o.forEach(Y=>{Y(n.value,P,{delta:U,type:io.pop,direction:U?U>0?Ws.forward:Ws.back:Ws.unknown})})};function a(){r=n.value}function d(g){o.push(g);const _=()=>{const P=o.indexOf(g);P>-1&&o.splice(P,1)};return l.push(_),_}function f(){if(document.visibilityState==="hidden"){const{history:g}=window;if(!g.state)return;g.replaceState(ye({},g.state,{scroll:Rs()}),"")}}function u(){for(const g of l)g();l=[],window.removeEventListener("popstate",i),window.removeEventListener("pagehide",f),document.removeEventListener("visibilitychange",f)}return window.addEventListener("popstate",i),window.addEventListener("pagehide",f),document.addEventListener("visibilitychange",f),{pauseListeners:a,listen:d,destroy:u}}function Cl(e,t,n,s=!1,o=!1){return{back:e,current:t,forward:n,replaced:s,position:window.history.length,scroll:o?Rs():null}}function Tu(e){const{history:t,location:n}=window,s={value:oi(e,n)},o={value:t.state};o.value||l(s.value,{back:null,current:s.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function l(a,d,f){const u=e.indexOf("#"),g=u>-1?(n.host&&document.querySelector("base")?e:e.slice(u))+a:Au()+e+a;try{t[f?"replaceState":"pushState"](d,"",g),o.value=d}catch(_){console.error(_),n[f?"replace":"assign"](g)}}function r(a,d){l(a,ye({},t.state,Cl(o.value.back,a,o.value.forward,!0),d,{position:o.value.position}),!0),s.value=a}function i(a,d){const f=ye({},o.value,t.state,{forward:a,scroll:Rs()});l(f.current,f,!0),l(a,ye({},Cl(s.value,a,null),{position:f.position+1},d),!1),s.value=a}return{location:s,state:o,push:i,replace:r}}function Ou(e){e=hu(e);const t=Tu(e),n=Ru(e,t.state,t.location,t.replace);function s(l,r=!0){r||n.pauseListeners(),history.go(l)}const o=ye({location:"",base:e,go:s,createHref:mu.bind(null,e)},t,n);return Object.defineProperty(o,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(o,"state",{enumerable:!0,get:()=>t.state.value}),o}function Pu(e){return e=location.host?e||location.pathname+location.search:"",e.includes("#")||(e+="#"),Ou(e)}let Yt=function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e}({});var De=function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e}(De||{});const Iu={type:Yt.Static,value:""},Nu=/[a-zA-Z0-9_]/;function $u(e){if(!e)return[[]];if(e==="/")return[[Iu]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(_){throw new Error(`ERR (${n})/"${d}": ${_}`)}let n=De.Static,s=n;const o=[];let l;function r(){l&&o.push(l),l=[]}let i=0,a,d="",f="";function u(){d&&(n===De.Static?l.push({type:Yt.Static,value:d}):n===De.Param||n===De.ParamRegExp||n===De.ParamRegExpEnd?(l.length>1&&(a==="*"||a==="+")&&t(`A repeatable param (${d}) must be alone in its segment. eg: '/:ids+.`),l.push({type:Yt.Param,value:d,regexp:f,repeatable:a==="*"||a==="+",optional:a==="*"||a==="?"})):t("Invalid state to consume buffer"),d="")}function g(){d+=a}for(;it.length?t.length===1&&t[0]===Je.Static+Je.Segment?1:-1:0}function li(e,t){let n=0;const s=e.score,o=t.score;for(;n0&&t[t.length-1]<0}const Fu={strict:!1,end:!0,sensitive:!1};function Vu(e,t,n){const s=Lu($u(e.path),n),o=ye(s,{record:e,parent:t,children:[],alias:[]});return t&&!o.record.aliasOf==!t.record.aliasOf&&t.children.push(o),o}function Uu(e,t){const n=[],s=new Map;t=_l(Fu,t);function o(u){return s.get(u)}function l(u,g,_){const P=!_,I=Rl(u);I.aliasOf=_&&_.record;const U=_l(t,u),Y=[I];if("alias"in u){const B=typeof u.alias=="string"?[u.alias]:u.alias;for(const ne of B)Y.push(Rl(ye({},I,{components:_?_.record.components:I.components,path:ne,aliasOf:_?_.record:I})))}let M,G;for(const B of Y){const{path:ne}=B;if(g&&ne[0]!=="/"){const Se=g.record.path,de=Se[Se.length-1]==="/"?"":"/";B.path=g.record.path+(ne&&de+ne)}if(M=Vu(B,g,U),_?_.alias.push(M):(G=G||M,G!==M&&G.alias.push(M),P&&u.name&&!Tl(M)&&r(u.name)),ri(M)&&a(M),I.children){const Se=I.children;for(let de=0;de{r(G)}:In}function r(u){if(ni(u)){const g=s.get(u);g&&(s.delete(u),n.splice(n.indexOf(g),1),g.children.forEach(r),g.alias.forEach(r))}else{const g=n.indexOf(u);g>-1&&(n.splice(g,1),u.record.name&&s.delete(u.record.name),u.children.forEach(r),u.alias.forEach(r))}}function i(){return n}function a(u){const g=Ku(u,n);n.splice(g,0,u),u.record.name&&!Tl(u)&&s.set(u.record.name,u)}function d(u,g){let _,P={},I,U;if("name"in u&&u.name){if(_=s.get(u.name),!_)throw pn(Pe.MATCHER_NOT_FOUND,{location:u});U=_.record.name,P=ye(Al(g.params,_.keys.filter(G=>!G.optional).concat(_.parent?_.parent.keys.filter(G=>G.optional):[]).map(G=>G.name)),u.params&&Al(u.params,_.keys.map(G=>G.name))),I=_.stringify(P)}else if(u.path!=null)I=u.path,_=n.find(G=>G.re.test(I)),_&&(P=_.parse(I),U=_.record.name);else{if(_=g.name?s.get(g.name):n.find(G=>G.re.test(g.path)),!_)throw pn(Pe.MATCHER_NOT_FOUND,{location:u,currentLocation:g});U=_.record.name,P=ye({},g.params,u.params),I=_.stringify(P)}const Y=[];let M=_;for(;M;)Y.unshift(M.record),M=M.parent;return{name:U,path:I,params:P,matched:Y,meta:Bu(Y)}}e.forEach(u=>l(u));function f(){n.length=0,s.clear()}return{addRoute:l,resolve:d,removeRoute:r,clearRoutes:f,getRoutes:i,getRecordMatcher:o}}function Al(e,t){const n={};for(const s of t)s in e&&(n[s]=e[s]);return n}function Rl(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:Hu(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function Hu(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const s in e.components)t[s]=typeof n=="object"?n[s]:n;return t}function Tl(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Bu(e){return e.reduce((t,n)=>ye(t,n.meta),{})}function Ku(e,t){let n=0,s=t.length;for(;n!==s;){const l=n+s>>1;li(e,t[l])<0?s=l:n=l+1}const o=Gu(e);return o&&(s=t.lastIndexOf(o,s-1)),s}function Gu(e){let t=e;for(;t=t.parent;)if(ri(t)&&li(e,t)===0)return t}function ri({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function Ol(e){const t=ct(Ts),n=ct(Ro),s=pe(()=>{const a=pt(e.to);return t.resolve(a)}),o=pe(()=>{const{matched:a}=s.value,{length:d}=a,f=a[d-1],u=n.matched;if(!f||!u.length)return-1;const g=u.findIndex(hn.bind(null,f));if(g>-1)return g;const _=Pl(a[d-2]);return d>1&&Pl(f)===_&&u[u.length-1].path!==_?u.findIndex(hn.bind(null,a[d-2])):g}),l=pe(()=>o.value>-1&&Yu(n.params,s.value.params)),r=pe(()=>o.value>-1&&o.value===n.matched.length-1&&ti(n.params,s.value.params));function i(a={}){if(zu(a)){const d=t[pt(e.replace)?"replace":"push"](pt(e.to)).catch(In);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>d),d}return Promise.resolve()}return{route:s,href:pe(()=>s.value.href),isActive:l,isExactActive:r,navigate:i}}function Wu(e){return e.length===1?e[0]:e}const qu=mr({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:Ol,setup(e,{slots:t}){const n=Vn(Ol(e)),{options:s}=ct(Ts),o=pe(()=>({[Il(e.activeClass,s.linkActiveClass,"router-link-active")]:n.isActive,[Il(e.exactActiveClass,s.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const l=t.default&&Wu(t.default(n));return e.custom?l:Hr("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:o.value},l)}}}),Ju=qu;function zu(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function Yu(e,t){for(const n in t){const s=t[n],o=e[n];if(typeof s=="string"){if(s!==o)return!1}else if(!gt(o)||o.length!==s.length||s.some((l,r)=>l.valueOf()!==o[r].valueOf()))return!1}return!0}function Pl(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Il=(e,t,n)=>e??t??n,Qu=mr({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const s=ct(co),o=pe(()=>e.route||s.value),l=ct(xl,0),r=pe(()=>{let d=pt(l);const{matched:f}=o.value;let u;for(;(u=f[d])&&!u.components;)d++;return d}),i=pe(()=>o.value.matched[r.value]);Zn(xl,pe(()=>r.value+1)),Zn(Eu,i),Zn(co,o);const a=Z();return Sn(()=>[a.value,i.value,e.name],([d,f,u],[g,_,P])=>{f&&(f.instances[u]=d,_&&_!==f&&d&&d===g&&(f.leaveGuards.size||(f.leaveGuards=_.leaveGuards),f.updateGuards.size||(f.updateGuards=_.updateGuards))),d&&f&&(!_||!hn(f,_)||!g)&&(f.enterCallbacks[u]||[]).forEach(I=>I(d))},{flush:"post"}),()=>{const d=o.value,f=e.name,u=i.value,g=u&&u.components[f];if(!g)return Nl(n.default,{Component:g,route:d});const _=u.props[f],P=_?_===!0?d.params:typeof _=="function"?_(d):_:null,U=Hr(g,ye({},P,t,{onVnodeUnmounted:Y=>{Y.component.isUnmounted&&(u.instances[f]=null)},ref:a}));return Nl(n.default,{Component:U,route:d})||U}}});function Nl(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const Xu=Qu;function Zu(e){const t=Uu(e.routes,e),n=e.parseQuery||xu,s=e.stringifyQuery||kl,o=e.history,l=bn(),r=bn(),i=bn(),a=Ki(Dt);let d=Dt;sn&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const f=Ks.bind(null,E=>""+E),u=Ks.bind(null,ru),g=Ks.bind(null,jn);function _(E,H){let F,z;return ni(E)?(F=t.getRecordMatcher(E),z=H):z=E,t.addRoute(z,F)}function P(E){const H=t.getRecordMatcher(E);H&&t.removeRoute(H)}function I(){return t.getRoutes().map(E=>E.record)}function U(E){return!!t.getRecordMatcher(E)}function Y(E,H){if(H=ye({},H||a.value),typeof E=="string"){const y=Gs(n,E,H.path),C=t.resolve({path:y.path},H),A=o.createHref(y.fullPath);return ye(y,C,{params:g(C.params),hash:jn(y.hash),redirectedFrom:void 0,href:A})}let F;if(E.path!=null)F=ye({},E,{path:Gs(n,E.path,H.path).path});else{const y=ye({},E.params);for(const C in y)y[C]==null&&delete y[C];F=ye({},E,{params:u(y)}),H.params=u(H.params)}const z=t.resolve(F,H),fe=E.hash||"";z.params=f(g(z.params));const h=cu(s,ye({},E,{hash:su(fe),path:z.path})),p=o.createHref(h);return ye({fullPath:h,hash:fe,query:s===kl?Cu(E.query):E.query||{}},z,{redirectedFrom:void 0,href:p})}function M(E){return typeof E=="string"?Gs(n,E,a.value.path):ye({},E)}function G(E,H){if(d!==E)return pn(Pe.NAVIGATION_CANCELLED,{from:H,to:E})}function B(E){return de(E)}function ne(E){return B(ye(M(E),{replace:!0}))}function Se(E,H){const F=E.matched[E.matched.length-1];if(F&&F.redirect){const{redirect:z}=F;let fe=typeof z=="function"?z(E,H):z;return typeof fe=="string"&&(fe=fe.includes("?")||fe.includes("#")?fe=M(fe):{path:fe},fe.params={}),ye({query:E.query,hash:E.hash,params:fe.path!=null?{}:E.params},fe)}}function de(E,H){const F=d=Y(E),z=a.value,fe=E.state,h=E.force,p=E.replace===!0,y=Se(F,z);if(y)return de(ye(M(y),{state:typeof y=="object"?ye({},fe,y.state):fe,force:h,replace:p}),H||F);const C=F;C.redirectedFrom=H;let A;return!h&&uu(s,z,F)&&(A=pn(Pe.NAVIGATION_DUPLICATED,{to:C,from:z}),Ze(z,z,!0,!1)),(A?Promise.resolve(A):K(C,z)).catch(x=>Et(x)?Et(x,Pe.NAVIGATION_GUARD_REDIRECT)?x:Xe(x):ue(x,C,z)).then(x=>{if(x){if(Et(x,Pe.NAVIGATION_GUARD_REDIRECT))return de(ye({replace:p},M(x.to),{state:typeof x.to=="object"?ye({},fe,x.to.state):fe,force:h}),H||C)}else x=D(C,z,!0,p,fe);return S(C,z,x),x})}function se(E,H){const F=G(E,H);return F?Promise.reject(F):Promise.resolve()}function le(E){const H=ot.values().next().value;return H&&typeof H.runWithContext=="function"?H.runWithContext(E):E()}function K(E,H){let F;const[z,fe,h]=Su(E,H);F=qs(z.reverse(),"beforeRouteLeave",E,H);for(const y of z)y.leaveGuards.forEach(C=>{F.push(Ft(C,E,H))});const p=se.bind(null,E,H);return F.push(p),$e(F).then(()=>{F=[];for(const y of l.list())F.push(Ft(y,E,H));return F.push(p),$e(F)}).then(()=>{F=qs(fe,"beforeRouteUpdate",E,H);for(const y of fe)y.updateGuards.forEach(C=>{F.push(Ft(C,E,H))});return F.push(p),$e(F)}).then(()=>{F=[];for(const y of h)if(y.beforeEnter)if(gt(y.beforeEnter))for(const C of y.beforeEnter)F.push(Ft(C,E,H));else F.push(Ft(y.beforeEnter,E,H));return F.push(p),$e(F)}).then(()=>(E.matched.forEach(y=>y.enterCallbacks={}),F=qs(h,"beforeRouteEnter",E,H,le),F.push(p),$e(F))).then(()=>{F=[];for(const y of r.list())F.push(Ft(y,E,H));return F.push(p),$e(F)}).catch(y=>Et(y,Pe.NAVIGATION_CANCELLED)?y:Promise.reject(y))}function S(E,H,F){i.list().forEach(z=>le(()=>z(E,H,F)))}function D(E,H,F,z,fe){const h=G(E,H);if(h)return h;const p=H===Dt,y=sn?history.state:{};F&&(z||p?o.replace(E.fullPath,ye({scroll:p&&y&&y.scroll},fe)):o.push(E.fullPath,fe)),a.value=E,Ze(E,H,F,p),Xe()}let O;function ve(){O||(O=o.listen((E,H,F)=>{if(!Ge.listening)return;const z=Y(E),fe=Se(z,Ge.currentRoute.value);if(fe){de(ye(fe,{replace:!0,force:!0}),z).catch(In);return}d=z;const h=a.value;sn&&_u(wl(h.fullPath,F.delta),Rs()),K(z,h).catch(p=>Et(p,Pe.NAVIGATION_ABORTED|Pe.NAVIGATION_CANCELLED)?p:Et(p,Pe.NAVIGATION_GUARD_REDIRECT)?(de(ye(M(p.to),{force:!0}),z).then(y=>{Et(y,Pe.NAVIGATION_ABORTED|Pe.NAVIGATION_DUPLICATED)&&!F.delta&&F.type===io.pop&&o.go(-1,!1)}).catch(In),Promise.reject()):(F.delta&&o.go(-F.delta,!1),ue(p,z,h))).then(p=>{p=p||D(z,h,!1),p&&(F.delta&&!Et(p,Pe.NAVIGATION_CANCELLED)?o.go(-F.delta,!1):F.type===io.pop&&Et(p,Pe.NAVIGATION_ABORTED|Pe.NAVIGATION_DUPLICATED)&&o.go(-1,!1)),S(z,h,p)}).catch(In)}))}let Ae=bn(),xe=bn(),te;function ue(E,H,F){Xe(E);const z=xe.list();return z.length?z.forEach(fe=>fe(E,H,F)):console.error(E),Promise.reject(E)}function dt(){return te&&a.value!==Dt?Promise.resolve():new Promise((E,H)=>{Ae.add([E,H])})}function Xe(E){return te||(te=!E,ve(),Ae.list().forEach(([H,F])=>E?F(E):H()),Ae.reset()),E}function Ze(E,H,F,z){const{scrollBehavior:fe}=e;if(!sn||!fe)return Promise.resolve();const h=!F&&yu(wl(E.fullPath,0))||(z||!F)&&history.state&&history.state.scroll||null;return Ut().then(()=>fe(E,H,h)).then(p=>p&&gu(p)).catch(p=>ue(p,E,H))}const Ve=E=>o.go(E);let Ke;const ot=new Set,Ge={currentRoute:a,listening:!0,addRoute:_,removeRoute:P,clearRoutes:t.clearRoutes,hasRoute:U,getRoutes:I,resolve:Y,options:e,push:B,replace:ne,go:Ve,back:()=>Ve(-1),forward:()=>Ve(1),beforeEach:l.add,beforeResolve:r.add,afterEach:i.add,onError:xe.add,isReady:dt,install(E){E.component("RouterLink",Ju),E.component("RouterView",Xu),E.config.globalProperties.$router=Ge,Object.defineProperty(E.config.globalProperties,"$route",{enumerable:!0,get:()=>pt(a)}),sn&&!Ke&&a.value===Dt&&(Ke=!0,B(o.location).catch(z=>{}));const H={};for(const z in Dt)Object.defineProperty(H,z,{get:()=>a.value[z],enumerable:!0});E.provide(Ts,Ge),E.provide(Ro,lr(H)),E.provide(co,a);const F=E.unmount;ot.add(E),E.unmount=function(){ot.delete(E),ot.size<1&&(d=Dt,O&&O(),O=null,a.value=Dt,Ke=!1,te=!1),F()}}};function $e(E){return E.reduce((H,F)=>H.then(()=>le(F)),Promise.resolve())}return Ge}function ii(){return ct(Ts)}function ef(e){return ct(Ro)}const Bn=Wc("auth",{state:()=>({token:localStorage.getItem("mcbot_token")||"",identity:localStorage.getItem("mcbot_identity")||""}),actions:{set(e,t){this.token=e,this.identity=t||"",localStorage.setItem("mcbot_token",e),localStorage.setItem("mcbot_identity",this.identity)},clear(){this.token="",this.identity="",localStorage.removeItem("mcbot_token"),localStorage.removeItem("mcbot_identity")}}}),tf={key:0,class:"nav"},nf={class:"who"},sf={__name:"App",setup(e){const t=Bn(),n=ef(),s=ii(),o=pe(()=>n.path!=="/login");function l(){t.clear(),s.push("/login")}return(r,i)=>{const a=Uo("router-link"),d=Uo("router-view");return w(),k(W,null,[o.value?(w(),k("nav",tf,[i[3]||(i[3]=c("span",{class:"brand"},"mcbot",-1)),Te(a,{to:"/messages"},{default:Xn(()=>[...i[0]||(i[0]=[_e("Messages",-1)])]),_:1}),Te(a,{to:"/packets"},{default:Xn(()=>[...i[1]||(i[1]=[_e("Packets",-1)])]),_:1}),Te(a,{to:"/manage"},{default:Xn(()=>[...i[2]||(i[2]=[_e("Manage",-1)])]),_:1}),i[4]||(i[4]=c("span",{class:"spacer"},null,-1)),c("span",nf,R(pt(t).identity||"authenticated"),1),c("button",{onClick:l},"Log out")])):we("",!0),Te(d)],64)}}};async function ie(e,t={}){const n=Bn(),s={...t.headers||{}};n.token&&(s.Authorization=`Bearer ${n.token}`),t.json!==void 0&&(s["Content-Type"]="application/json",t={...t,body:JSON.stringify(t.json)},delete t.json);const o=await fetch(`/api${e}`,{...t,headers:s});if(o.status===401)throw n.clear(),location.hash.startsWith("#/login")||(location.hash="#/login"),new Error("unauthorized");if(!o.ok){let l=o.statusText;try{l=(await o.json()).detail||l}catch{}throw new Error(l)}return o.json()}function ai(e){const t=Bn();return`${location.protocol==="https:"?"wss":"ws"}://${location.host}/api${e}?token=${encodeURIComponent(t.token)}`}const of={class:"login-wrap"},lf={class:"login-card"},rf={key:0,class:"err"},af=["disabled"],cf={__name:"Login",setup(e){const t=Bn(),n=ii(),s=Z(""),o=Z(""),l=Z(""),r=Z(""),i=Z(!1);async function a(){r.value="",i.value=!0;try{const f=await ie("/login",{method:"POST",json:{username:s.value,password:o.value}});t.set(f.token,f.user?`user:${f.user}`:""),n.push("/")}catch(f){r.value=f.message||"login failed"}finally{i.value=!1}}async function d(){if(r.value="",!!l.value.trim()){t.set(l.value.trim(),"");try{const f=await ie("/me");t.set(l.value.trim(),f.identity),n.push("/")}catch{t.clear(),r.value="invalid token"}}}return(f,u)=>(w(),k("div",of,[c("div",lf,[u[3]||(u[3]=c("h2",null,"mcbot admin",-1)),r.value?(w(),k("div",rf,R(r.value),1)):we("",!0),u[4]||(u[4]=c("label",null,"Username",-1)),je(c("input",{"onUpdate:modelValue":u[0]||(u[0]=g=>s.value=g),onKeyup:cn(a,["enter"]),autofocus:""},null,544),[[et,s.value]]),u[5]||(u[5]=c("label",null,"Password",-1)),je(c("input",{"onUpdate:modelValue":u[1]||(u[1]=g=>o.value=g),type:"password",onKeyup:cn(a,["enter"])},null,544),[[et,o.value]]),c("button",{disabled:i.value,onClick:a},"Log in",8,af),u[6]||(u[6]=c("label",{style:{"margin-top":"10px"}},"…or paste an API token",-1)),je(c("input",{"onUpdate:modelValue":u[2]||(u[2]=g=>l.value=g),placeholder:"bearer token",onKeyup:cn(d,["enter"])},null,544),[[et,l.value]]),c("button",{onClick:d},"Use token")])]))}};function Vt(e){return String(e).padStart(2,"0")}function ci(e){if(!e)return"";const t=new Date(e*1e3);return`${Vt(t.getHours())}:${Vt(t.getMinutes())}:${Vt(t.getSeconds())}`}function us(e){if(!e)return"";const t=new Date(e*1e3);return`${t.getFullYear()}-${Vt(t.getMonth()+1)}-${Vt(t.getDate())} ${Vt(t.getHours())}:${Vt(t.getMinutes())}:${Vt(t.getSeconds())}`}const To=(e,t)=>{const n=e.__vccOpts||e;for(const[s,o]of t)n[s]=o;return n},uf=["aria-label"],ff={class:"bubble"},df={__name:"InfoTip",props:{text:{type:String,default:""}},setup(e){const t=Z(!1);return(n,s)=>(w(),k("span",{class:Be(["infotip",{pinned:t.value}]),tabindex:"0",role:"button","aria-label":e.text,onClick:s[0]||(s[0]=o=>t.value=!t.value),onKeydown:[s[1]||(s[1]=cn(on(o=>t.value=!t.value,["prevent"]),["enter"])),s[2]||(s[2]=cn(on(o=>t.value=!t.value,["prevent"]),["space"]))],onBlur:s[3]||(s[3]=o=>t.value=!1)},[s[4]||(s[4]=c("span",{class:"dot","aria-hidden":"true"},"i",-1)),c("span",ff,R(e.text),1)],42,uf))}},Yn=To(df,[["__scopeId","data-v-48ca1073"]]),hf={class:"panes"},pf={class:"pane",style:{flex:"0 0 170px"}},mf={class:"body"},vf=["onClick"],gf={class:"pane",style:{flex:"1"}},_f={key:0,class:"toolbar"},yf={key:0,class:"err"},bf={key:1,class:"muted"},wf={class:"body"},kf={key:0,class:"decoded"},xf={class:"kv"},Cf={class:"mono"},Ef={class:"kv"},Sf={class:"k"},Af={key:1},Rf={class:"toolbar"},Tf={class:"chk"},Of={class:"chk"},Pf=["disabled"],If={class:"toolbar"},Nf={class:"chk"},$f={style:{"border-top":"1px solid var(--border, #333)"}},Mf={class:"toolbar"},Df=["disabled"],Lf={key:0,class:"decoded"},jf={class:"kv"},Ff={class:"muted"},Vf={class:"mono"},Uf={class:"toolbar"},Hf={class:"chk"},Bf={class:"chk"},Kf=["disabled"],Gf={class:"decoded"},Wf={style:{margin:"12px 0 4px"}},qf={class:"kv"},Jf={class:"k"},zf={class:"kv"},Yf={class:"k mono"},Qf={key:2},Xf={class:"toolbar"},Zf={class:"mono muted"},ed=["onClick"],td={key:3},nd={class:"toolbar"},sd={id:"newUserContacts"},od=["value"],ld=["value"],rd=["disabled"],id={class:"mono muted"},ad=["onChange"],cd=["value"],ud={class:"chips"},fd=["onClick"],dd={style:{"white-space":"normal"}},hd=["onClick"],pd=["onClick"],md=["onClick"],vd={key:4},gd={class:"toolbar"},_d={key:0,class:"muted"},yd={key:0,class:"muted"},bd=["checked","disabled","onChange"],wd=["onChange"],kd=["value"],xd={class:"chips"},Cd=["onClick"],Ed=["disabled","onClick"],Sd={key:5},Ad=["checked","onChange"],Rd=["checked","onChange"],Td=["checked","onChange"],Od=["value","onChange"],Pd=["onChange"],Id=["value"],Nd={class:"chips"},$d={key:0,class:"muted"},Md=["onClick"],Dd={key:6,class:"contacts-split"},Ld={class:"pane",style:{flex:"1.6","min-width":"0"}},jd={class:"toolbar"},Fd={class:"chk"},Vd=["checked"],Ud=["checked","onChange"],Hd=["disabled"],Bd={class:"muted"},Kd={class:"body"},Gd={key:0},Wd={key:0},qd={key:0},Jd={key:0},zd={key:0},Yd={key:0},Qd=["onClick"],Xd=["checked","onChange"],Zd=["title"],eh={class:"pane contact-detail"},th={class:"body"},nh={key:0,class:"empty"},sh={key:1,class:"decoded"},oh={class:"kv"},lh={class:"k"},rh={key:7},ih=["title"],ah={key:8,class:"empty"},ch={__name:"Manage",setup(e){const t=[{key:"stats",label:"Overview"},{key:"radio",label:"Radio"},{key:"contacts",label:"Contacts"},{key:"channels",label:"Channels"},{key:"users",label:"Users"},{key:"groups",label:"Groups"},{key:"command-config",label:"Commands"},{key:"audit",label:"Audit log"}],n=Z("stats"),s=Z({}),o=Z([]),l=Z([]),r=Z([]),i=Z(""),a=Z(""),d=Z({name:"",key:""}),f=Z({name:"",commands:""}),u=Z({sel:"",group:""}),g={stats:"/stats",radio:"/device-info",contacts:"/contacts?limit=500",channels:"/channels",users:"/users",groups:"/groups","command-config":"/command-config",audit:"/audit?limit=200"};function _(v,m){const q=m.items||m;if(v==="command-config"&&Array.isArray(q))for(const ce of q){let b=[];try{b=ce.allowed_channels?JSON.parse(ce.allowed_channels):[]}catch{b=[]}ce._chans=b}return q}async function P(v,m=!1){if(n.value=v,i.value="",a.value="",!(s.value[v]&&!m))try{const q=await ie(g[v]);if(s.value[v]=_(v,q),v==="contacts"&&Wn(s.value[v]),v==="radio"&&await Ze(),(v==="users"||v==="groups"||v==="contacts")&&!o.value.length){const ce=await ie("/groups");o.value=ce.items.map(b=>b.name)}if(v==="users"&&!s.value.contacts){const ce=await ie(g.contacts);s.value.contacts=_("contacts",ce)}if(v==="groups"&&!l.value.length){const ce=await ie("/command-config");l.value=ce.items.map(b=>b.command).sort()}if(v==="command-config"&&!r.value.length){const ce=await ie("/channels");r.value=ce.items.map(b=>b.name)}}catch(q){i.value=q.message}}const I=v=>P(v,!0);async function U(v,m,q=[]){i.value="",a.value="";try{await v,m&&(a.value=m)}catch(ce){i.value=ce.message}for(const ce of q)await I(ce)}function Y(v){const m=s.value["command-config"];if(!m)return;const q=m.findIndex(b=>b.command===v.command);if(q===-1)return;let ce=[];try{ce=v.allowed_channels?JSON.parse(v.allowed_channels):[]}catch{ce=[]}m[q]={...m[q],...v,_chans:ce}}async function M(v,m){i.value="",a.value="";try{const q=await ie(`/command-config/${encodeURIComponent(v)}`,{method:"PATCH",json:m});Y(q),a.value=`${v}: saved`}catch(q){i.value=q.message,await I("command-config")}}function G(v,m){!m||v._chans.includes(m)||M(v.command,{allowed_channels:[...v._chans,m]})}function B(v,m){M(v.command,{allowed_channels:v._chans.filter(q=>q!==m)})}async function ne(){const v={name:d.value.name.trim()};d.value.key.trim()&&(v.key=d.value.key.trim()),v.name&&(await U(ie("/channels",{method:"POST",json:v}),`added ${v.name}`,["channels"]),i.value||(d.value={name:"",key:""}))}function Se(v){confirm(`Remove channel ${v}? This clears its radio slot.`)&&U(ie(`/channels/${encodeURIComponent(v)}`,{method:"DELETE"}),`removed ${v}`,["channels"])}function de(v,m){m&&U(ie(`/users/${v}/groups`,{method:"POST",json:{group:m}}),"group added",["users"])}function se(v,m){U(ie(`/users/${v}/groups/${encodeURIComponent(m)}`,{method:"DELETE"}),"group removed",["users"])}function le(v,m){const q=prompt("New alias:",m||"");q!==null&&U(ie(`/users/${v}`,{method:"PATCH",json:{name:q}}),"renamed",["users"])}function K(v,m){confirm(`Delete user ${m||v.slice(0,12)} from the bot?`)&&U(ie(`/users/${v}`,{method:"DELETE"}),"deleted",["users"])}function S(v){const m=(v.groups||[]).includes("blocked"),q=m?ie(`/users/${v.pubkey}/block`,{method:"DELETE"}):ie(`/users/${v.pubkey}/block`,{method:"POST"});U(q,m?"unblocked":"blocked",["users"])}async function D(){const v=f.value.name.trim();if(!v)return;const m=f.value.commands.split(",").map(q=>q.trim()).filter(Boolean);await U(ie("/groups",{method:"POST",json:{name:v,commands:m}}),`group ${v} created`,["groups"]),i.value||(f.value={name:"",commands:""})}function O(v){confirm(`Delete group ${v}?`)&&U(ie(`/groups/${encodeURIComponent(v)}`,{method:"DELETE"}),"deleted",["groups"])}function ve(v,m){m&&U(ie(`/groups/${encodeURIComponent(v)}/commands`,{method:"POST",json:{command:m}}),`granted ${m} to ${v}`,["groups"])}function Ae(v,m){m&&U(ie(`/groups/${encodeURIComponent(v)}/commands/${encodeURIComponent(m)}`,{method:"DELETE"}),`revoked ${m} from ${v}`,["groups"])}function xe(v,m){U(ie(`/groups/${encodeURIComponent(v)}/all-users`,{method:m?"POST":"DELETE"}),m?`${v}: now includes all users`:`${v}: explicit members only`,["groups"])}const te=Z("zero"),ue=Z(!1);async function dt(){ue.value||(ue.value=!0,await U(ie("/radio/advert",{method:"POST",json:{flood:te.value==="flood"}}),`${te.value==="flood"?"flood":"zero-hop"} advert sent`),ue.value=!1)}const Xe=Z(0);async function Ze(){try{const v=await ie("/radio/advert-interval");Xe.value=v.interval_hours}catch(v){i.value=v.message}}async function Ve(){const v=Number(Xe.value);await U(ie("/radio/advert-interval",{method:"POST",json:{interval_hours:v}}),v>0?`Flood advert every ${v}h`:"Periodic flood advert disabled"),await Ze()}const Ke=Z(null),ot=Z(!1),Ge=Z(!1),$e=Z({enabled:!0,headroom:8});async function E(){if(!ot.value){ot.value=!0,i.value="";try{const v=await ie("/radio/contacts-status");Ke.value=v,$e.value={enabled:v.policy.enabled,headroom:v.policy.headroom}}catch(v){i.value=v.message}ot.value=!1}}async function H(){await U(ie("/radio/contacts-policy",{method:"POST",json:{enabled:$e.value.enabled,headroom:Number($e.value.headroom)}}),"Eviction policy updated (runtime only — set radio_evict_* in mcbot.conf to persist)"),await E()}async function F(){if(!Ge.value){Ge.value=!0,i.value="",a.value="";try{const v=await ie("/radio/evict-contacts",{method:"POST",json:{dry_run:!0}}),m=v.evicted||[];if(!m.length){a.value=`Nothing to evict (used ${v.used}/${v.max??"?"}).`,Ge.value=!1;return}const q=m.map(Me=>Me.name||Me.pubkey.slice(0,12)),ce=q.slice(0,20).join(`
+`),b=q.length>20?`
+…and ${q.length-20} more`:"";if(!confirm(`Evict ${m.length} stale contact(s) from the radio?
+
+${ce}${b}`)){Ge.value=!1;return}const j=await ie("/radio/evict-contacts",{method:"POST",json:{}});a.value=`Evicted ${j.evicted.length} contact(s)`+(j.failed?`, ${j.failed} failed`:"")+(j.shortfall?`, ${j.shortfall} short (protected)`:"")}catch(v){i.value=v.message}Ge.value=!1,await E()}}const z=[{title:"Identity",keys:[["self_info.name","Name"],["self_info.public_key","Public key",{mono:!0}],["device_info.model","Model"],["device_info.ver","Firmware version"],["device_info.fw ver","Firmware code"],["device_info.fw_build","Firmware build"]]},{title:"Radio",keys:[["self_info.radio_freq","Frequency",{unit:"MHz"}],["self_info.radio_bw","Bandwidth",{unit:"kHz"}],["self_info.radio_sf","Spreading factor"],["self_info.radio_cr","Coding rate"],["self_info.tx_power","TX power",{unit:"dBm"}],["self_info.max_tx_power","Max TX power",{unit:"dBm"}],["device_info.path_hash_mode","Out path-hash mode",{fmt:v=>`${Number(v)+1} byte(s)/hop`}]]},{title:"Advertising",keys:[["self_info.adv_type","Advertised type"],["self_info.adv_lat","Latitude"],["self_info.adv_lon","Longitude"],["self_info.adv_loc_policy","Location-share policy"]]},{title:"Capacity",keys:[["device_info.max_channels","Max channels"],["device_info.max_contacts","Max contacts"]]},{title:"Battery / memory",keys:[["battery.level","Battery",{unit:"mV"}],["battery.total_kb","Total memory",{unit:"kB"}],["battery.used_kb","Used memory",{unit:"kB"}]]},{title:"Other",keys:[["device_info.ble_pin","BLE PIN"],["device_info.repeat","Repeater mode"],["self_info.manual_add_contacts","Manual contact add"],["self_info.multi_acks","Multi-acks"],["self_info.telemetry_mode_base","Telemetry: base"],["self_info.telemetry_mode_env","Telemetry: env"],["self_info.telemetry_mode_loc","Telemetry: location"]]}],fe=new Set(z.flatMap(v=>v.keys.map(m=>m[0])));function h(v){if(v==null)return null;try{return JSON.parse(v)}catch{return v}}function p(v,m){const q=h(v.value);if(q==null||q==="")return"";if(m!=null&&m.fmt)return m.fmt(q);let ce=typeof q=="object"?JSON.stringify(q):String(q);return m!=null&&m.unit&&(ce=`${ce} ${m.unit}`),ce}const y=pe(()=>{const v=new Map;for(const m of s.value.radio||[])v.set(m.key,m);return v}),C=pe(()=>[...s.value.radio||[]].filter(v=>!fe.has(v.key)).sort((v,m)=>v.key.localeCompare(m.key))),A={1:"Comp",2:"Rptr",3:"Room",4:"Sens"};function x(v){return v==null?"?":A[v]||String(v)}function L(v){return v&&v.length>14?`${v.slice(0,6)}...${v.slice(-6)}`:v||""}function N(v){if(!v)return"";const m=new Date(v*1e3),q=ce=>String(ce).padStart(2,"0");return`${m.getFullYear()}-${q(m.getMonth()+1)}-${q(m.getDate())} ${q(m.getHours())}:${q(m.getMinutes())}`}const $=pe(()=>o.value.filter(v=>v!=="public"&&v!=="blocked"));function T(v){return`${v.adv_name||"(unnamed)"} — ${v.public_key}`}function Q(){const v=u.value.sel.trim();if(!v)return"";const m=(s.value.contacts||[]).find(q=>T(q)===v);return m?m.public_key:/^[0-9a-fA-F]{64}$/.test(v)?v.toLowerCase():""}async function V(){const v=Q();if(!v){alert("Pick a contact from the list (or paste a 64-hex pubkey).");return}if(!u.value.group){alert("Choose an initial group.");return}i.value="",a.value="";try{await ie("/users",{method:"POST",json:{pubkey:v,group:u.value.group}}),a.value=`bot user created and added to ${u.value.group}`,u.value={sel:"",group:""},await I("users")}catch(m){alert(m.message)}}const J=Z(""),X=Z(new Set),ae=Z(new Set),oe=Z({col:"adv_name",dir:"asc"}),me=Z(new Set),Re=Z(null),Oe=pe(()=>(s.value.contacts||[]).find(v=>v.public_key===Re.value)||null);function lt(v){Re.value=v.public_key}const rt=pe(()=>{const v=Oe.value;if(!v)return[];let m;v.out_path_len===-1?m="flood (no path)":v.out_path_len===0?m="direct (0 hops)":v.out_path?m=`${v.out_path} (${v.out_path_len} hop${v.out_path_len===1?"":"s"})`:m=`${v.out_path_len??"?"} hop(s)`;const q=v.adv_lat!=null&&v.adv_lon!=null?`${v.adv_lat}, ${v.adv_lon}`:"—";return[["name",v.adv_name||"—",!1],["type",x(v.type),!1],["public key",v.public_key,!0],["flags",v.flags??"—",!1],["out path",m,!0],["path hash mode",v.out_path_hash_mode??"—",!1],["location (lat, lon)",q,!1],["last advert",N(v.last_advert)||"—",!1],["last modified",N(v.lastmod)||"—",!1],["first seen",N(v.first_seen_at)||"—",!1],["last synced",N(v.last_synced_at)||"—",!1]]}),Wt=pe(()=>[...ae.value].sort()),Kn=pe(()=>X.value.size===0),We=v=>!X.value.has(v);function it(v){X.value=v?new Set:new Set(ae.value)}function Gn(v,m){const q=new Set(X.value);m?q.delete(v):q.add(v),X.value=q}function Wn(v){let m=null;for(const q of v){const ce=x(q.type);ae.value.has(ce)||(m=m||new Set(ae.value),m.add(ce))}m&&(ae.value=m)}function Zt(v){oe.value.col===v?oe.value={col:v,dir:oe.value.dir==="asc"?"desc":"asc"}:oe.value={col:v,dir:"asc"}}function fi(v){const m=new Set(me.value);m.has(v)?m.delete(v):m.add(v),me.value=m}const Os=pe(()=>(s.value.contacts||[]).filter(v=>me.value.has(v.public_key))),Oo=pe(()=>Os.value.length>0);async function di(){const v=Os.value;if(!v.length)return;const m=v.map(at=>at.adv_name||at.public_key.slice(0,12)),q=m.slice(0,20).join(`
+`),ce=m.length>20?`
+…and ${m.length-20} more`:"";if(!confirm(`Delete ${v.length} contact(s)?
+
+${q}${ce}`))return;i.value="",a.value="";let b=0,j=0,Me="";for(const at of v)try{await ie(`/contacts/${encodeURIComponent(at.public_key)}`,{method:"DELETE"}),b++}catch(Ps){j++,Me=`${Ps.message} (${at.adv_name||at.public_key.slice(0,12)})`}me.value=new Set,await I("contacts"),a.value=j?`Deleted ${b}, ${j} failed`:`Deleted ${b} contact(s)`,Me&&(i.value=Me)}const Po=pe(()=>{const v=s.value.contacts||[],m=J.value.toLowerCase().trim(),q=X.value,ce=v.filter(at=>q.size&&q.has(x(at.type))?!1:m?(at.public_key||"").toLowerCase().includes(m)||(at.adv_name||"").toLowerCase().includes(m):!0),{col:b,dir:j}=oe.value,Me=j==="asc"?1:-1;return ce.sort((at,Ps)=>{const vn=at[b],gn=Ps[b];return vn==null&&gn==null?0:vn==null?1:gn==null?-1:typeof vn=="number"&&typeof gn=="number"?(vn-gn)*Me:String(vn).localeCompare(String(gn))*Me}),ce});function Io(v){return v&&v.length?Object.keys(v[0]).filter(m=>!m.startsWith("_")):[]}function hi(v){return v==null?"":Array.isArray(v)?v.join(", "):typeof v=="object"?JSON.stringify(v):String(v)}function No(v,m){return m==="ts"&&v[m]?us(v[m]):hi(v[m])}return ks(()=>P("stats")),(v,m)=>{var q,ce;return w(),k("div",hf,[c("div",pf,[m[20]||(m[20]=c("h3",null,"Manage",-1)),c("div",mf,[c("table",null,[c("tbody",null,[(w(),k(W,null,he(t,b=>c("tr",{key:b.key,class:Be(["clickable",{selected:n.value===b.key}]),onClick:j=>P(b.key)},[c("td",null,R(b.label),1)],10,vf)),64))])])])]),c("div",gf,[c("h3",null,R((q=t.find(b=>b.key===n.value))==null?void 0:q.label),1),i.value||a.value?(w(),k("div",_f,[i.value?(w(),k("span",yf,R(i.value),1)):we("",!0),a.value?(w(),k("span",bf,R(a.value),1)):we("",!0)])):we("",!0),c("div",wf,[n.value==="stats"&&s.value.stats?(w(),k("div",kf,[c("div",xf,[m[21]||(m[21]=c("div",{class:"k"},"identity",-1)),c("div",Cf,R(((ce=s.value.stats.identity)==null?void 0:ce.pubkey)||"—"),1),m[22]||(m[22]=c("div",{class:"k"},"events seen",-1)),c("div",null,R(s.value.stats.event_count),1),m[23]||(m[23]=c("div",{class:"k"},"commands loaded",-1)),c("div",null,R(s.value.stats.commands_loaded),1)]),m[24]||(m[24]=c("h4",null,"Counts",-1)),c("div",Ef,[(w(!0),k(W,null,he(s.value.stats.counts,(b,j)=>(w(),k(W,{key:j},[c("div",Sf,R(j),1),c("div",null,R(b),1)],64))),128))])])):n.value==="radio"?(w(),k("div",Af,[c("div",Rf,[c("label",Tf,[je(c("input",{type:"radio",value:"zero","onUpdate:modelValue":m[0]||(m[0]=b=>te.value=b)},null,512),[[hl,te.value]]),m[25]||(m[25]=_e(" Zero hop ",-1))]),c("label",Of,[je(c("input",{type:"radio",value:"flood","onUpdate:modelValue":m[1]||(m[1]=b=>te.value=b)},null,512),[[hl,te.value]]),m[26]||(m[26]=_e(" Flood ",-1))]),c("button",{disabled:ue.value,onClick:dt},R(ue.value?"Sending…":"Advert"),9,Pf),Te(Yn,{text:"Zero-hop reaches direct neighbors only; flood propagates through the mesh."})]),c("div",If,[c("label",Nf,[m[27]||(m[27]=_e(" Flood advert interval (hours) ",-1)),je(c("input",{type:"number",min:"0","onUpdate:modelValue":m[2]||(m[2]=b=>Xe.value=b),style:{width:"5em"}},null,512),[[et,Xe.value,void 0,{number:!0}]])]),c("button",{onClick:Ve},"Apply"),Te(Yn,{text:"0 = disabled. Bot sends a flood advert every N hours; persists in the database (mcbot.conf only seeds the first-run default)."})]),c("div",$f,[c("div",Mf,[m[28]||(m[28]=c("strong",null,"Contact table",-1)),c("button",{disabled:ot.value,onClick:E},R(ot.value?"Checking…":"Check contact table"),9,Df),Te(Yn,{text:"Reads the radio's contact list (takes a few seconds)."})]),Ke.value?(w(),k("div",Lf,[c("div",jf,[m[29]||(m[29]=c("div",{class:"k"},"Used / max",-1)),c("div",null,[_e(R(Ke.value.used)+" / "+R(Ke.value.max??"?")+" ",1),c("span",Ff,"("+R(Ke.value.free??"?")+" free)",1)]),m[30]||(m[30]=c("div",{class:"k"},"Protected / evictable",-1)),c("div",null,R(Ke.value.protected)+" protected, "+R(Ke.value.eligible)+" evictable",1),m[31]||(m[31]=c("div",{class:"k"},"Firmware autoadd byte",-1)),c("div",Vf,R(Ke.value.autoadd_raw??"n/a"),1)]),c("div",Uf,[c("label",Hf,[je(c("input",{type:"checkbox","onUpdate:modelValue":m[3]||(m[3]=b=>$e.value.enabled=b)},null,512),[[Oc,$e.value.enabled]]),m[32]||(m[32]=_e(" Auto-evict (startup + when full) ",-1))]),c("label",Bf,[m[33]||(m[33]=_e(" Headroom ",-1)),je(c("input",{type:"number",min:"1",max:"100","onUpdate:modelValue":m[4]||(m[4]=b=>$e.value.headroom=b),style:{width:"4em"}},null,512),[[et,$e.value.headroom,void 0,{number:!0}]])]),c("button",{onClick:H},"Apply"),c("button",{disabled:Ge.value,onClick:F},R(Ge.value?"Evicting…":"Evict to headroom now"),9,Kf),Te(Yn,{text:"Evicts the stalest contacts from the radio (bot users, owners, and recent DM peers are protected; the bot's database keeps the full archive). Policy changes here are runtime only — set radio_evict_* in mcbot.conf to persist across restarts."})])])):we("",!0)]),c("div",Gf,[(w(),k(W,null,he(z,b=>(w(),k(W,{key:b.title},[c("h4",Wf,R(b.title),1),c("div",qf,[(w(!0),k(W,null,he(b.keys,j=>{var Me;return w(),k(W,{key:j[0]},[c("div",Jf,R(j[1]),1),c("div",{class:Be({mono:(Me=j[2])==null?void 0:Me.mono})},R(p(y.value.get(j[0])||{},j[2])||"—"),3)],64)}),128))])],64))),64)),C.value.length?(w(),k(W,{key:0},[m[34]||(m[34]=c("h4",{style:{margin:"12px 0 4px"}},"Unrecognized",-1)),c("div",zf,[(w(!0),k(W,null,he(C.value,b=>(w(),k(W,{key:b.key},[c("div",Yf,R(b.key),1),c("div",null,R(p(b)||"—"),1)],64))),128))])],64)):we("",!0)])])):n.value==="channels"?(w(),k("div",Qf,[c("div",Xf,[je(c("input",{"onUpdate:modelValue":m[5]||(m[5]=b=>d.value.name=b),placeholder:"name (e.g. #bot or MyChan)",style:{flex:"1"}},null,512),[[et,d.value.name]]),je(c("input",{"onUpdate:modelValue":m[6]||(m[6]=b=>d.value.key=b),placeholder:"hex key (non-# only)",style:{flex:"1"}},null,512),[[et,d.value.key]]),c("button",{onClick:ne},"Add channel")]),c("table",null,[m[35]||(m[35]=c("thead",null,[c("tr",null,[c("th",null,"idx"),c("th",null,"name"),c("th",null,"secret"),c("th")])],-1)),c("tbody",null,[(w(!0),k(W,null,he(s.value.channels,b=>(w(),k("tr",{key:b.channel_idx},[c("td",null,R(b.channel_idx),1),c("td",null,R(b.name),1),c("td",Zf,R((b.secret_hex||"").slice(0,12))+"…",1),c("td",null,[c("button",{onClick:j=>Se(b.name)},"remove",8,ed)])]))),128))])])])):n.value==="users"?(w(),k("div",td,[c("div",nd,[je(c("input",{"onUpdate:modelValue":m[7]||(m[7]=b=>u.value.sel=b),list:"newUserContacts",placeholder:"add bot user: search a contact…",style:{flex:"0 0 320px"}},null,512),[[et,u.value.sel]]),c("datalist",sd,[(w(!0),k(W,null,he(s.value.contacts||[],b=>(w(),k("option",{key:b.public_key,value:T(b)},null,8,od))),128))]),je(c("select",{"onUpdate:modelValue":m[8]||(m[8]=b=>u.value.group=b)},[m[36]||(m[36]=c("option",{value:""},"initial group…",-1)),(w(!0),k(W,null,he($.value,b=>(w(),k("option",{key:b,value:b},R(b),9,ld))),128))],512),[[Pc,u.value.group]]),c("button",{disabled:!Q()||!u.value.group,onClick:V}," Add bot user ",8,rd)]),c("table",null,[m[38]||(m[38]=c("thead",null,[c("tr",null,[c("th",null,"name"),c("th",null,"pubkey"),c("th",{style:{width:"130px"}},"add group"),c("th",null,"groups"),c("th",null,"actions")])],-1)),c("tbody",null,[(w(!0),k(W,null,he(s.value.users,b=>(w(),k("tr",{key:b.pubkey},[c("td",null,R(b.name||"?"),1),c("td",id,R(b.pubkey.slice(0,12)),1),c("td",null,[c("select",{onChange:j=>{de(b.pubkey,j.target.value),j.target.value=""}},[m[37]||(m[37]=c("option",{value:""},"+ group…",-1)),(w(!0),k(W,null,he(o.value,j=>(w(),k("option",{key:j,value:j},R(j),9,cd))),128))],40,ad)]),c("td",ud,[(w(!0),k(W,null,he(b.groups,j=>(w(),k("span",{key:j,class:"tag"},[_e(R(j)+" ",1),c("a",{href:"#",onClick:on(Me=>se(b.pubkey,j),["prevent"]),title:"remove"},"×",8,fd)]))),128))]),c("td",dd,[c("button",{onClick:j=>le(b.pubkey,b.name)},"rename",8,hd),c("button",{onClick:j=>S(b)},R((b.groups||[]).includes("blocked")?"unblock":"block"),9,pd),c("button",{onClick:j=>K(b.pubkey,b.name)},"delete",8,md)])]))),128))])])])):n.value==="groups"?(w(),k("div",vd,[c("div",gd,[je(c("input",{"onUpdate:modelValue":m[9]||(m[9]=b=>f.value.name=b),placeholder:"new group name"},null,512),[[et,f.value.name]]),je(c("input",{"onUpdate:modelValue":m[10]||(m[10]=b=>f.value.commands=b),placeholder:"commands (comma list, optional)",style:{flex:"1"}},null,512),[[et,f.value.commands]]),c("button",{onClick:D},"Create group")]),c("table",null,[m[41]||(m[41]=c("thead",null,[c("tr",null,[c("th",null,"name"),c("th",null,"users"),c("th",{title:"Every user is a member (the * membership)"},"all users"),c("th",{style:{width:"150px"}},"grant command"),c("th",null,"commands"),c("th")])],-1)),c("tbody",null,[(w(!0),k(W,null,he(s.value.groups,b=>(w(),k("tr",{key:b.name},[c("td",null,[_e(R(b.name),1),b.is_system?(w(),k("span",_d," [sys]")):we("",!0)]),c("td",null,[_e(R(b.nusers),1),b.all_users?(w(),k("span",yd," +*")):we("",!0)]),c("td",null,[c("input",{type:"checkbox",checked:b.all_users,disabled:b.name==="blocked",title:"Include all users (*) in this group",onChange:j=>xe(b.name,j.target.checked)},null,40,bd)]),c("td",null,[c("select",{onChange:j=>{ve(b.name,j.target.value),j.target.value=""}},[m[39]||(m[39]=c("option",{value:""},"+ command…",-1)),m[40]||(m[40]=c("option",{value:"*"},"* (all commands)",-1)),(w(!0),k(W,null,he(l.value,j=>(w(),k("option",{key:j,value:j},R(j),9,kd))),128))],40,wd)]),c("td",xd,[(w(!0),k(W,null,he(b.commands,j=>(w(),k("span",{key:j,class:"tag"},[_e(R(j)+" ",1),c("a",{href:"#",onClick:on(Me=>Ae(b.name,j),["prevent"]),title:"revoke"},"×",8,Cd)]))),128))]),c("td",null,[c("button",{disabled:b.is_system,onClick:j=>O(b.name)},"delete",8,Ed)])]))),128))])])])):n.value==="command-config"?(w(),k("div",Sd,[c("table",null,[m[43]||(m[43]=c("thead",null,[c("tr",null,[c("th",null,"command"),c("th",null,"enabled"),c("th",null,"allow_dm"),c("th",null,"dm_only"),c("th",null,"cooldown"),c("th",{style:{width:"140px"}},"allow channel"),c("th",null,"allowed channels")])],-1)),c("tbody",null,[(w(!0),k(W,null,he(s.value["command-config"],b=>(w(),k("tr",{key:b.command},[c("td",null,R(b.command),1),c("td",null,[c("input",{type:"checkbox",checked:!!b.enabled,onChange:j=>M(b.command,{enabled:j.target.checked})},null,40,Ad)]),c("td",null,[c("input",{type:"checkbox",checked:!!b.allow_dm,onChange:j=>M(b.command,{allow_dm:j.target.checked})},null,40,Rd)]),c("td",null,[c("input",{type:"checkbox",checked:!!b.dm_only,onChange:j=>M(b.command,{dm_only:j.target.checked})},null,40,Td)]),c("td",null,[c("input",{type:"number",value:b.cooldown_seconds,style:{width:"64px"},onChange:j=>M(b.command,{cooldown_seconds:Number(j.target.value)})},null,40,Od)]),c("td",null,[c("select",{onChange:j=>{G(b,j.target.value),j.target.value=""}},[m[42]||(m[42]=c("option",{value:""},"+ channel…",-1)),(w(!0),k(W,null,he(r.value,j=>(w(),k("option",{key:j,value:j},R(j),9,Id))),128))],40,Pd)]),c("td",Nd,[b._chans.length?we("",!0):(w(),k("span",$d,"(any)")),(w(!0),k(W,null,he(b._chans,j=>(w(),k("span",{key:j,class:"tag"},[_e(R(j)+" ",1),c("a",{href:"#",onClick:on(Me=>B(b,j),["prevent"]),title:"remove"},"×",8,Md)]))),128))])]))),128))])])])):n.value==="contacts"?(w(),k("div",Dd,[c("div",Ld,[c("div",jd,[je(c("input",{"onUpdate:modelValue":m[11]||(m[11]=b=>J.value=b),placeholder:"search name or pubkey…",style:{flex:"0 0 260px"}},null,512),[[et,J.value]]),c("label",Fd,[c("input",{type:"checkbox",checked:Kn.value,onChange:m[12]||(m[12]=b=>it(b.target.checked))},null,40,Vd),m[44]||(m[44]=_e(" All ",-1))]),(w(!0),k(W,null,he(Wt.value,b=>(w(),k("label",{key:b,class:"chk"},[c("input",{type:"checkbox",checked:We(b),onChange:j=>Gn(b,j.target.checked)},null,40,Ud),_e(" "+R(b),1)]))),128)),c("button",{disabled:!Oo.value,onClick:di}," Delete"+R(Oo.value?` (${Os.value.length})`:""),9,Hd),c("span",Bd,R(Po.value.length)+" shown",1)]),c("div",Kd,[c("table",null,[c("thead",null,[c("tr",null,[m[51]||(m[51]=c("th",{style:{width:"24px"}},null,-1)),c("th",{class:"sortable",onClick:m[13]||(m[13]=b=>Zt("public_key"))},[m[45]||(m[45]=_e(" pubkey",-1)),oe.value.col==="public_key"?(w(),k("span",Gd,R(oe.value.dir==="asc"?"▲":"▼"),1)):we("",!0)]),c("th",{class:"sortable",onClick:m[14]||(m[14]=b=>Zt("adv_name"))},[m[46]||(m[46]=_e(" name",-1)),oe.value.col==="adv_name"?(w(),k("span",Wd,R(oe.value.dir==="asc"?"▲":"▼"),1)):we("",!0)]),c("th",{class:"sortable",onClick:m[15]||(m[15]=b=>Zt("type"))},[m[47]||(m[47]=_e(" type",-1)),oe.value.col==="type"?(w(),k("span",qd,R(oe.value.dir==="asc"?"▲":"▼"),1)):we("",!0)]),c("th",{class:"sortable",onClick:m[16]||(m[16]=b=>Zt("adv_lat"))},[m[48]||(m[48]=_e(" lat",-1)),oe.value.col==="adv_lat"?(w(),k("span",Jd,R(oe.value.dir==="asc"?"▲":"▼"),1)):we("",!0)]),c("th",{class:"sortable",onClick:m[17]||(m[17]=b=>Zt("adv_lon"))},[m[49]||(m[49]=_e(" lon",-1)),oe.value.col==="adv_lon"?(w(),k("span",zd,R(oe.value.dir==="asc"?"▲":"▼"),1)):we("",!0)]),c("th",{class:"sortable",onClick:m[18]||(m[18]=b=>Zt("last_synced_at"))},[m[50]||(m[50]=_e(" last synced",-1)),oe.value.col==="last_synced_at"?(w(),k("span",Yd,R(oe.value.dir==="asc"?"▲":"▼"),1)):we("",!0)])])]),c("tbody",null,[(w(!0),k(W,null,he(Po.value,b=>(w(),k("tr",{key:b.public_key,class:Be(["clickable",{selected:Oe.value&&Oe.value.public_key===b.public_key}]),onClick:j=>lt(b)},[c("td",null,[c("input",{type:"checkbox",checked:me.value.has(b.public_key),onChange:j=>fi(b.public_key),onClick:m[19]||(m[19]=on(()=>{},["stop"]))},null,40,Xd)]),c("td",{class:"mono",title:b.public_key},R(L(b.public_key)),9,Zd),c("td",null,R(b.adv_name||""),1),c("td",null,R(x(b.type)),1),c("td",null,R(b.adv_lat??""),1),c("td",null,R(b.adv_lon??""),1),c("td",null,R(N(b.last_synced_at)),1)],10,Qd))),128))])])])]),c("div",eh,[m[52]||(m[52]=c("h3",null,"Contact",-1)),c("div",th,[Oe.value?(w(),k("div",sh,[c("div",oh,[(w(!0),k(W,null,he(rt.value,b=>(w(),k(W,{key:b[0]},[c("div",lh,R(b[0]),1),c("div",{class:Be({mono:b[2]}),style:{"word-break":"break-all"}},R(b[1]),3)],64))),128))])])):(w(),k("div",nh,"select a contact"))])])])):Array.isArray(s.value[n.value])?(w(),k("table",rh,[c("thead",null,[c("tr",null,[(w(!0),k(W,null,he(Io(s.value[n.value]),b=>(w(),k("th",{key:b},R(b),1))),128))])]),c("tbody",null,[(w(!0),k(W,null,he(s.value[n.value],(b,j)=>(w(),k("tr",{key:j},[(w(!0),k(W,null,he(Io(s.value[n.value]),Me=>(w(),k("td",{key:Me,title:No(b,Me)},R(No(b,Me)),9,ih))),128))]))),128))])])):(w(),k("div",ah,"loading…"))])])])}}},uh=To(ch,[["__scopeId","data-v-c5dac4d3"]]),fh={class:"panes"},dh={class:"side-col"},hh={class:"pane",style:{flex:"1 1 0","min-height":"160px"}},ph={class:"body"},mh=["onClick"],vh={class:"muted"},gh={class:"pane",style:{flex:"1 1 0","min-height":"200px"}},_h={class:"toolbar"},yh={class:"body"},bh=["onClick"],wh={class:"muted mono"},kh={class:"pane",style:{flex:"1"}},xh={key:0,class:"err",style:{padding:"10px"}},Ch={key:1,class:"empty"},Eh={class:"meta"},Sh={class:"who"},Ah={key:0},Rh=["href"],Th={key:1,class:"mention"},Oh={class:"toolbar"},Ph=["placeholder","disabled"],Ih=["disabled"],Nh={key:0,class:"err",style:{padding:"0 12px 8px"}},$h={__name:"Messages",setup(e){const t=Z([]),n=Z(null),s=Z(null),o=Z([]),l=Z(null),r=Z([]),i=Z(""),a=Z(""),d=Z(""),f=Z(!1),u=Z("");let g=null;const _=pe(()=>{const K=i.value.toLowerCase();return K?r.value.filter(S=>(S.adv_name||"").toLowerCase().includes(K)||(S.public_key||"").toLowerCase().includes(K)):r.value}),P=pe(()=>{if(typeof n.value=="number"){const K=t.value.find(S=>S.channel_idx===n.value);return{kind:"channel",idx:n.value,label:(K==null?void 0:K.name)||`#${n.value}`}}return n.value==="dm"&&s.value?{kind:"dm",pubkey:s.value.public_key,label:s.value.adv_name||s.value.public_key.slice(0,12)}:null}),I=pe(()=>P.value?`Message ${P.value.label}…`:"Pick a channel or a contact to send to…");async function U(){t.value=(await ie("/channels")).items,n.value===null&&t.value.length&&G(t.value[0].channel_idx)}async function Y(){r.value=(await ie("/contacts?limit=500")).items}async function M(){await Ut();const K=l.value;K&&(K.scrollTop=K.scrollHeight)}async function G(K){n.value=K,s.value=null;const S=await ie(`/channel-messages?channel_idx=${K}&limit=100`);o.value=S.items.slice().reverse(),await M()}async function B(){n.value="dm",s.value=null;const K=await ie("/direct-messages?limit=100");o.value=K.items.slice().reverse(),await M()}async function ne(K){n.value="dm",s.value=K;const S=await ie(`/direct-messages?pubkey=${encodeURIComponent(K.public_key)}&limit=100`);o.value=S.items.slice().reverse(),await M()}async function Se(){const K=d.value.trim();if(!(!K||!P.value||f.value)){f.value=!0,u.value="";try{P.value.kind==="channel"?await ie("/send/channel",{method:"POST",json:{channel_idx:P.value.idx,text:K}}):await ie("/send/dm",{method:"POST",json:{pubkey:P.value.pubkey,text:K}}),d.value=""}catch(S){u.value=S.message}finally{f.value=!1}}}function de(K,S){if(!K||!S)return K||"";const D=`${S}: `;return K.startsWith(D)?K.slice(D.length):K}const se=/(https?:\/\/[^\s<>]+)|@\[([^\]]+)\]/g;function le(K){const S=de(K.text,K.sender_name),D=[];let O=0,ve;for(se.lastIndex=0;(ve=se.exec(S))!==null;){if(ve.index>O&&D.push({type:"text",value:S.slice(O,ve.index)}),ve[1]){const Ae=ve[1].match(/^(.*?)([.,;:!?)]+)$/);Ae?(D.push({type:"link",value:Ae[1]}),D.push({type:"text",value:Ae[2]})):D.push({type:"link",value:ve[1]})}else D.push({type:"mention",value:ve[2]});O=se.lastIndex}return O{try{await U(),await Y()}catch(K){a.value=K.message}g=new WebSocket(ai("/ws/messages")),g.onmessage=K=>{const S=JSON.parse(K.data),D=l.value,O=D?D.scrollHeight-D.scrollTop-D.clientHeight<60:!0;let ve=!1;n.value==="dm"&&S.kind==="dm"?(!s.value||S.sender_pubkey===s.value.public_key)&&(o.value.push(S),ve=!0):S.kind==="channel"&&S.channel_idx===n.value&&(o.value.push(S),ve=!0),o.value.length>300&&o.value.shift(),ve&&O&&M()}}),xs(()=>g&&g.close()),(K,S)=>{var D;return w(),k("div",fh,[c("div",dh,[c("div",hh,[S[3]||(S[3]=c("h3",null,"Channels",-1)),c("div",ph,[c("table",null,[c("tbody",null,[(w(!0),k(W,null,he(t.value,O=>(w(),k("tr",{key:O.channel_idx,class:Be(["clickable",{selected:n.value===O.channel_idx}]),onClick:ve=>G(O.channel_idx)},[c("td",null,[_e(R(O.name)+" ",1),c("span",vh,"#"+R(O.channel_idx),1)])],10,mh))),128)),c("tr",{class:Be(["clickable",{selected:n.value==="dm"&&!s.value}]),onClick:B},[...S[2]||(S[2]=[c("td",null,"✉ Direct messages",-1)])],2)])])])]),c("div",gh,[c("h3",null,"Contacts ("+R(r.value.length)+")",1),c("div",_h,[je(c("input",{"onUpdate:modelValue":S[0]||(S[0]=O=>i.value=O),placeholder:"search",style:{flex:"1"}},null,512),[[et,i.value]])]),c("div",yh,[c("table",null,[c("tbody",null,[(w(!0),k(W,null,he(_.value,O=>(w(),k("tr",{key:O.public_key,class:Be(["clickable",{selected:s.value&&s.value.public_key===O.public_key}]),onClick:ve=>ne(O),title:"Open a DM conversation with this contact"},[c("td",null,[_e(R(O.adv_name||"(unnamed)"),1),S[4]||(S[4]=c("br",null,null,-1)),c("span",wh,R(O.public_key.slice(0,12)),1)])],10,bh))),128))])])])])]),c("div",kh,[c("h3",null,R(n.value==="dm"?s.value?`DM · ${s.value.adv_name||s.value.public_key.slice(0,12)}`:"Direct messages":((D=t.value.find(O=>O.channel_idx===n.value))==null?void 0:D.name)||"Messages"),1),c("div",{class:"body",ref_key:"msgBody",ref:l},[a.value?(w(),k("div",xh,R(a.value),1)):we("",!0),o.value.length?we("",!0):(w(),k("div",Ch,"no messages")),(w(!0),k(W,null,he(o.value,O=>{var ve;return w(),k("div",{key:O.id,class:Be(["msg",{out:O.is_outgoing}])},[c("div",Eh,[c("span",Sh,R(O.is_outgoing?"→ me":O.sender_name||((ve=O.sender_pubkey)==null?void 0:ve.slice(0,12))||"?"),1),_e(" · "+R(pt(ci)(O.received_at))+" ",1),O.snr!=null?(w(),k("span",Ah,"· snr "+R(O.snr),1)):we("",!0)]),c("div",null,[(w(!0),k(W,null,he(le(O),(Ae,xe)=>(w(),k(W,{key:xe},[Ae.type==="link"?(w(),k("a",{key:0,href:Ae.value,target:"_blank",rel:"noopener noreferrer"},R(Ae.value),9,Rh)):Ae.type==="mention"?(w(),k("span",Th,"@["+R(Ae.value)+"]",1)):(w(),k(W,{key:2},[_e(R(Ae.value),1)],64))],64))),128))])],2)}),128))],512),c("div",Oh,[je(c("input",{style:{flex:"1"},placeholder:I.value,"onUpdate:modelValue":S[1]||(S[1]=O=>d.value=O),disabled:!P.value||f.value,onKeyup:cn(Se,["enter"])},null,40,Ph),[[et,d.value]]),c("button",{disabled:!P.value||f.value||!d.value.trim(),onClick:Se},R(f.value?"Sending…":"Send"),9,Ih)]),u.value?(w(),k("div",Nh,R(u.value),1)):we("",!0)])])}}},Mh={class:"hexdump"},Dh=["onMouseenter"],Lh={key:0},jh={key:1},Fh={key:0,class:"empty"},Vh={__name:"HexDump",props:{hex:{type:String,default:""},activeRange:{type:Object,default:null}},emits:["hover-offset"],setup(e,{emit:t}){const n=e,s=t,o=pe(()=>{const r=(n.hex||"").replace(/\s+/g,""),i=[];for(let a=0;a+2<=r.length;a+=2)i.push(r.slice(a,a+2));return i});function l(r){const i=n.activeRange;return i&&r>=i.offset&&r(w(),k("div",Mh,[(w(!0),k(W,null,he(o.value,(a,d)=>(w(),k("span",{key:d,class:Be(["hexbyte",{active:l(d)}]),onMouseenter:f=>s("hover-offset",d),onMouseleave:i[0]||(i[0]=f=>s("hover-offset",null))},[_e(R(a),1),(d+1)%16===0?(w(),k("span",Lh,[...i[1]||(i[1]=[c("br",null,null,-1)])])):(w(),k("span",jh))],42,Dh))),128)),o.value.length?we("",!0):(w(),k("div",Fh,"no raw bytes"))]))}},Uh=["onMouseenter"],Hh={class:"fname"},Bh={class:"fmeta"},Kh={class:"fval"},Gh={key:0,class:"fval muted"},Wh={key:1,class:"fmeta"},qh={key:0,class:"decoded"},Jh={class:"kv"},zh={class:"k"},Yh={class:"mono"},Qh={__name:"FieldBreakout",props:{fields:{type:Array,default:()=>[]},decoded:{type:Object,default:null},activeIndex:{type:Number,default:-1}},emits:["hover-field"],setup(e,{emit:t}){const n=t;function s(r){return r==="timestamp"||r.endsWith("_timestamp")||r.endsWith("_at")}function o(r,i){return s(r)?us(i):l(i)}function l(r){return r==null?"":typeof r=="object"?JSON.stringify(r):String(r)}return(r,i)=>(w(),k("div",null,[(w(!0),k(W,null,he(e.fields,(a,d)=>(w(),k("div",{key:d,class:Be(["field-row",{active:d===e.activeIndex}]),onMouseenter:f=>n("hover-field",d),onMouseleave:i[0]||(i[0]=f=>n("hover-field",-1))},[c("div",Hh,R(a.name),1),c("div",Bh,"offset "+R(a.offset)+" · "+R(a.length)+" byte(s)",1),c("div",Kh,R(a.hex),1),a.value!==null&&a.value!==void 0?(w(),k("div",Gh,R(l(a.value)),1)):we("",!0),a.description?(w(),k("div",Wh,R(a.description),1)):we("",!0)],42,Uh))),128)),e.decoded?(w(),k("div",qh,[i[1]||(i[1]=c("h4",{style:{margin:"6px 0"}},"Decoded payload",-1)),c("div",Jh,[(w(!0),k(W,null,he(e.decoded,(a,d)=>(w(),k(W,{key:d},[c("div",zh,R(d),1),c("div",Yh,R(o(d,a)),1)],64))),128))])])):we("",!0)]))}},Xh={class:"pdetail"},Zh={key:0,class:"pdesc"},ep={class:"kv"},tp={class:"k"},np={class:"kv"},sp={class:"k"},op={class:"mono"},lp={class:"kv"},rp={class:"k"},ip={class:"mono"},ap={__name:"PacketDetail",props:{packet:{type:Object,required:!0}},setup(e){const t=e,n={ADVERT:"A node broadcast an advertisement (presence beacon). The bot learns its public key, name, and route and tracks it as a contact.",DM:"A direct message addressed to the bot, decrypted from RF. Dispatched to a command handler if it is a command, else logged.",GRPCHAT:"A channel (group) message the bot holds the key for. Logged, and dispatched if it is a command.",DM_SENT:"The radio accepted an outbound DM from the bot for transmission.",ACK:"Acknowledgement that a message the bot sent reached its destination.",CMD_ACK:"The radio firmware accepted a command the bot issued (OK frame).",CMD_ERR:"The radio firmware rejected a command the bot issued (ERROR frame).",CONTACT:"One contact entry streamed from the radio during a contact-table sync.",NEW_CONTACT:"The radio added a new contact after hearing a previously-unknown node.",CONTACTS_SYNC:"A contact-table sync from the radio completed.",CONTACT_DEL:"A contact was removed from the radio's contact table.",CONTACTS_FULL:"The radio's contact table is full and is dropping new nodes. Triggers automatic eviction when enabled.",REPEAT:"A repeater was heard rebroadcasting a message the bot sent (delivery is propagating).",NO_REPEAT:"No repeater was heard rebroadcasting the bot's message within the timeout window.",DIRECT_0HOP:"The bot's DM went straight to a 0-hop neighbor, so no repeater is involved — nothing to rebroadcast.",PATH_UPDATE:"Routing-path information for a contact was updated.",PATH_RESPONSE:"A response carrying the route to a contact.",TRACE:"A path-trace (traceroute) response.",TELEMETRY:"A telemetry response from a node.",BATTERY:"The radio reported its battery status.",STATUS:"A status response from the radio.",DEVICE_INFO:"The radio reported its device information.",SELF_INFO:"The radio reported its own identity/configuration.",CHANNEL_INFO:"The radio reported channel configuration.",TIME:"The radio reported its current clock time.",MSG_WAIT:"The radio signaled that messages are queued; the bot will fetch them.",NO_MORE_MSGS:"The radio's queued-message fetch is drained — nothing more waiting.",LOGIN_OK:"A login to a repeater/room server succeeded.",LOGIN_FAIL:"A login to a repeater/room server failed.",CONNECTION:"The bot's link to the radio changed state (connected/disconnected).",RX_LOG:"A raw RF frame captured from the radio's receive log.",LOG:"A log line emitted by the radio."},s=pe(()=>n[t.packet.packet_type]||"");function o(u){return u!=null&&u!==""}const l=pe(()=>{const u=t.packet,g=[],_=(P,I,U={})=>{o(I)&&g.push({k:P,v:I,...U})};return _("received",u.received_at,{time:!0}),_("event_type",u.event_type),_("packet_type",u.packet_type),_("channel",u.channel_idx),_("from",u.sender_name),_("pubkey",u.sender_pubkey||u.sender_pubkey_prefix,{mono:!0}),_("path",o(u.path_len)?`${u.path} (${u.path_len} hops)`:u.path,{mono:!0}),_("SNR",u.snr),_("RSSI",u.rssi),_("text",u.text),g});function r(u){if(!u)return null;if(typeof u=="object")return u;try{return JSON.parse(u)}catch{return null}}const i=pe(()=>{const u=r(t.packet.payload_json);return!u||typeof u!="object"||Object.keys(u).length===0?null:u}),a=pe(()=>{const u=r(t.packet.attributes_json);return!u||typeof u!="object"||Object.keys(u).length===0?null:u});function d(u){return u==="timestamp"||u.endsWith("_timestamp")||u.endsWith("_at")||u==="last_advert"}function f(u,g){return g==null?"":d(u)&&typeof g=="number"&&g>0?us(g):typeof g=="object"?JSON.stringify(g):String(g)}return(u,g)=>(w(),k("div",Xh,[s.value?(w(),k("p",Zh,R(s.value),1)):we("",!0),g[2]||(g[2]=c("h4",null,"Packet",-1)),c("div",ep,[(w(!0),k(W,null,he(l.value,_=>(w(),k(W,{key:_.k},[c("div",tp,R(_.k),1),c("div",{class:Be({mono:_.mono})},R(_.time?pt(us)(_.v):_.v),3)],64))),128))]),i.value?(w(),k(W,{key:1},[g[0]||(g[0]=c("h4",null,"Payload",-1)),c("div",np,[(w(!0),k(W,null,he(i.value,(_,P)=>(w(),k(W,{key:P},[c("div",sp,R(P),1),c("div",op,R(f(P,_)),1)],64))),128))])],64)):we("",!0),a.value?(w(),k(W,{key:2},[g[1]||(g[1]=c("h4",null,"Attributes",-1)),c("div",lp,[(w(!0),k(W,null,he(a.value,(_,P)=>(w(),k(W,{key:P},[c("div",rp,R(P),1),c("div",ip,R(f(P,_)),1)],64))),128))])],64)):we("",!0)]))}},cp=To(ap,[["__scopeId","data-v-f9017f2b"]]),up={class:"panes"},fp={class:"pane",style:{flex:"1.3"}},dp={class:"toolbar"},hp={class:"chk"},pp=["checked"],mp=["checked","onChange"],vp={class:"muted"},gp={key:0,class:"err"},_p=["data-pid","onClick"],yp={class:"pane",style:{flex:"1"}},bp={class:"body"},wp={key:0,class:"empty"},kp={key:1,class:"empty"},xp={key:0,class:"err",style:{padding:"0 12px"}},Cp={key:3,class:"empty"},Ep={__name:"Packets",setup(e){const t=Z([]),n=Z(null),s=Z(new Set),o=Z(new Set),l=Z(null),r=Z(null),i=Z(null),a=Z(-1),d=Z("");let f=null;const u=pe(()=>[...o.value].sort()),g=pe(()=>s.value.size===0),_=S=>!s.value.has(S),P=pe(()=>s.value.size===0?t.value:t.value.filter(S=>!s.value.has(S.packet_type)));function I(S){let D=null;for(const O of S)O.packet_type&&!o.value.has(O.packet_type)&&(D=D||new Set(o.value),D.add(O.packet_type));D&&(o.value=D)}function U(S){s.value=S?new Set:new Set(o.value)}function Y(S,D){const O=new Set(s.value);D?O.delete(S):O.add(S),s.value=O}const M=pe(()=>{if(!r.value||a.value<0)return null;const S=r.value.fields[a.value];return S?{offset:S.offset,length:S.length}:null});async function G(){try{const S=await ie("/packets?limit=200");t.value=S.items.slice().reverse(),I(S.items),await Ut(),ne()}catch(S){d.value=S.message}}function B(){const S=n.value;return S?S.scrollHeight-S.scrollTop-S.clientHeight<40:!0}function ne(){const S=n.value;S&&(S.scrollTop=S.scrollHeight)}function Se(S){var D,O;(O=(D=n.value)==null?void 0:D.querySelector(`[data-pid="${S}"]`))==null||O.scrollIntoView({block:"nearest"})}function de(S){const D=P.value;if(!D.length)return;let O=l.value?D.findIndex(Ae=>Ae.id===l.value.id):-1;O===-1?O=D.length-1:O=Math.max(0,Math.min(D.length-1,O+S));const ve=D[O];le(ve),Ut(()=>Se(ve.id))}function se(S){if(S.key!=="ArrowUp"&&S.key!=="ArrowDown")return;const D=S.target;D&&(D.tagName==="INPUT"||D.tagName==="TEXTAREA"||D.tagName==="SELECT"||D.isContentEditable)||S.metaKey||S.ctrlKey||S.altKey||(S.preventDefault(),de(S.key==="ArrowUp"?-1:1))}async function le(S){l.value=S,r.value=null,i.value=null,a.value=-1;try{S.has_raw?r.value=await ie("/packets/decode",{method:"POST",json:{packet_id:S.id}}):i.value=await ie(`/packets/${S.id}`)}catch(D){d.value=D.message}}function K(S){if(S===null||!r.value){a.value=-1;return}const D=r.value.fields.findIndex(O=>S>=O.offset&&S{G(),f=new WebSocket(ai("/ws/packets")),f.onmessage=S=>{const D=JSON.parse(S.data),O=B();t.value.push(D),t.value.length>500&&t.value.shift(),I([D]),O&&Ut(ne)},window.addEventListener("keydown",se)}),xs(()=>{f&&f.close(),window.removeEventListener("keydown",se)}),(S,D)=>(w(),k("div",up,[c("div",fp,[D[4]||(D[4]=c("h3",null,"Packets (live)",-1)),c("div",dp,[c("label",hp,[c("input",{type:"checkbox",checked:g.value,onChange:D[0]||(D[0]=O=>U(O.target.checked))},null,40,pp),D[2]||(D[2]=_e(" All ",-1))]),(w(!0),k(W,null,he(u.value,O=>(w(),k("label",{key:O,class:"chk"},[c("input",{type:"checkbox",checked:_(O),onChange:ve=>Y(O,ve.target.checked)},null,40,mp),_e(" "+R(O),1)]))),128)),c("span",vp,R(P.value.length)+" shown",1),d.value?(w(),k("span",gp,R(d.value),1)):we("",!0)]),c("div",{class:"body",ref_key:"listEl",ref:n},[c("table",null,[D[3]||(D[3]=c("thead",null,[c("tr",null,[c("th",null,"time"),c("th",null,"type"),c("th",null,"from"),c("th",null,"ch"),c("th",null,"text"),c("th",null,"raw")])],-1)),c("tbody",null,[(w(!0),k(W,null,he(P.value,O=>(w(),k("tr",{key:O.id,"data-pid":O.id,class:Be(["clickable",{selected:l.value&&l.value.id===O.id}]),onClick:ve=>le(O)},[c("td",null,R(pt(ci)(O.received_at)),1),c("td",null,R(O.packet_type),1),c("td",null,R(O.sender_name||O.sender_pubkey_prefix||""),1),c("td",null,R(O.channel_idx??""),1),c("td",null,R(O.text||""),1),c("td",null,R(O.has_raw?"●":""),1)],10,_p))),128))])])],512)]),c("div",yp,[D[5]||(D[5]=c("h3",null,"Inspector",-1)),c("div",bp,[l.value?l.value.has_raw?r.value?(w(),k(W,{key:2},[Te(Vh,{hex:r.value.raw_hex,"active-range":M.value,onHoverOffset:K},null,8,["hex","active-range"]),r.value.error?(w(),k("div",xp,R(r.value.error),1)):we("",!0),Te(Qh,{fields:r.value.fields,decoded:r.value.decoded,"active-index":a.value,onHoverField:D[1]||(D[1]=O=>a.value=O)},null,8,["fields","decoded","active-index"])],64)):(w(),k("div",Cp,"decoding…")):(w(),k(W,{key:1},[i.value?(w(),Lr(cp,{key:0,packet:i.value},null,8,["packet"])):(w(),k("div",kp,"loading…"))],64)):(w(),k("div",wp,"select a packet"))])])]))}},Sp=[{path:"/login",component:cf,meta:{public:!0}},{path:"/",redirect:"/messages"},{path:"/manage",component:uh},{path:"/messages",component:$h},{path:"/packets",component:Ep}],ui=Zu({history:Pu(),routes:Sp});ui.beforeEach(e=>{const t=Bn();if(!e.meta.public&&!t.token)return"/login";if(e.path==="/login"&&t.token)return"/"});Lc(sf).use(Vc()).use(ui).mount("#app");
diff --git a/webapi/static/index.html b/webapi/static/index.html
index 49424e2..3e29231 100644
--- a/webapi/static/index.html
+++ b/webapi/static/index.html
@@ -4,8 +4,8 @@
mcbot admin
-
-
+
+