diff --git a/API Server/.env.example b/API Server/.env.example index 97bb161..8b3b802 100644 --- a/API Server/.env.example +++ b/API Server/.env.example @@ -19,10 +19,12 @@ POCKETBASE_ADMIN_EMAIL= POCKETBASE_ADMIN_PASSWORD= # CORS allowed origins for browser clients (comma separated, or * for any). -# Native mobile apps are not subject to CORS. +# Native mobile apps are not subject to CORS. Editable at runtime from the panel +# (Web App section), which writes the change back into this file. CORS_ALLOW_ORIGINS=http://localhost:5173 -# Web App address, probed by GET /api/status and shown on the panel. +# Web App address, probed by GET /api/status and shown on the panel. Editable at +# runtime from the panel (Web App section). WEBAPP_URL=http://localhost:5173 # PocketBase auth collection holding app users (default: users). diff --git a/API Server/internal/api/dist/assets/index-DKHgRvVM.js b/API Server/internal/api/dist/assets/index-DKHgRvVM.js deleted file mode 100644 index a19ffd6..0000000 --- a/API Server/internal/api/dist/assets/index-DKHgRvVM.js +++ /dev/null @@ -1,17 +0,0 @@ -(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))n(i);new MutationObserver(i=>{for(const o of i)if(o.type==="childList")for(const r of o.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&n(r)}).observe(document,{childList:!0,subtree:!0});function s(i){const o={};return i.integrity&&(o.integrity=i.integrity),i.referrerPolicy&&(o.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?o.credentials="include":i.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function n(i){if(i.ep)return;i.ep=!0;const o=s(i);fetch(i.href,o)}})();/** -* @vue/shared v3.5.39 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/function on(e){const t=Object.create(null);for(const s of e.split(","))t[s]=1;return s=>s in t}const J={},xt=[],He=()=>{},ui=()=>!1,xs=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),ws=e=>e.startsWith("onUpdate:"),de=Object.assign,rn=(e,t)=>{const s=e.indexOf(t);s>-1&&e.splice(s,1)},wo=Object.prototype.hasOwnProperty,W=(e,t)=>wo.call(e,t),U=Array.isArray,wt=e=>Zt(e)==="[object Map]",At=e=>Zt(e)==="[object Set]",$n=e=>Zt(e)==="[object Date]",H=e=>typeof e=="function",ee=e=>typeof e=="string",Ve=e=>typeof e=="symbol",z=e=>e!==null&&typeof e=="object",fi=e=>(z(e)||H(e))&&H(e.then)&&H(e.catch),di=Object.prototype.toString,Zt=e=>di.call(e),So=e=>Zt(e).slice(8,-1),pi=e=>Zt(e)==="[object Object]",ln=e=>ee(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Nt=on(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Ss=e=>{const t=Object.create(null);return(s=>t[s]||(t[s]=e(s)))},To=/-\w/g,Ce=Ss(e=>e.replace(To,t=>t.slice(1).toUpperCase())),Co=/\B([A-Z])/g,rt=Ss(e=>e.replace(Co,"-$1").toLowerCase()),hi=Ss(e=>e.charAt(0).toUpperCase()+e.slice(1)),Is=Ss(e=>e?`on${hi(e)}`:""),Ne=(e,t)=>!Object.is(e,t),us=(e,...t)=>{for(let s=0;s{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:n,value:s})},Ts=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let An;const Cs=()=>An||(An=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function an(e){if(U(e)){const t={};for(let s=0;s{if(s){const n=s.split(ko);n.length>1&&(t[n[0].trim()]=n[1].trim())}}),t}function je(e){let t="";if(ee(e))t=e;else if(U(e))for(let s=0;snt(s,t))}const bi=e=>!!(e&&e.__v_isRef===!0),D=e=>ee(e)?e:e==null?"":U(e)||z(e)&&(e.toString===di||!H(e.toString))?bi(e)?D(e.value):JSON.stringify(e,vi,2):String(e),vi=(e,t)=>bi(t)?vi(e,t.value):wt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((s,[n,i],o)=>(s[Ds(n,o)+" =>"]=i,s),{})}:At(t)?{[`Set(${t.size})`]:[...t.values()].map(s=>Ds(s))}:Ve(t)?Ds(t):z(t)&&!U(t)&&!pi(t)?String(t):t,Ds=(e,t="")=>{var s;return Ve(e)?`Symbol(${(s=e.description)!=null?s:t})`:e};/** -* @vue/reactivity v3.5.39 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let re;class Ro{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&&re&&(re.active?(this.parent=re,this.index=(re.scopes||(re.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,s;if(this.scopes)for(t=0,s=this.scopes.length;t0&&--this._on===0){if(re===this)re=this.prevScope;else{let t=re;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 s,n;for(s=0,n=this.effects.length;s0)return;if(Vt){let t=Vt;for(Vt=void 0;t;){const s=t.next;t.next=void 0,t.flags&=-9,t=s}}let e;for(;Ht;){let t=Ht;for(Ht=void 0;t;){const s=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(n){e||(e=n)}t=s}}if(e)throw e}function wi(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Si(e){let t,s=e.depsTail,n=s;for(;n;){const i=n.prevDep;n.version===-1?(n===s&&(s=i),dn(n),Do(n)):t=n,n.dep.activeLink=n.prevActiveLink,n.prevActiveLink=void 0,n=i}e.deps=t,e.depsTail=s}function Gs(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Ti(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Ti(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Gt)||(e.globalVersion=Gt,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Gs(e))))return;e.flags|=2;const t=e.dep,s=X,n=Ee;X=e,Ee=!0;try{wi(e);const i=e.fn(e._value);(t.version===0||Ne(i,e._value))&&(e.flags|=128,e._value=i,t.version++)}catch(i){throw t.version++,i}finally{X=s,Ee=n,Si(e),e.flags&=-3}}function dn(e,t=!1){const{dep:s,prevSub:n,nextSub:i}=e;if(n&&(n.nextSub=i,e.prevSub=void 0),i&&(i.prevSub=n,e.nextSub=void 0),s.subs===e&&(s.subs=n,!n&&s.computed)){s.computed.flags&=-5;for(let o=s.computed.deps;o;o=o.nextDep)dn(o,!0)}!t&&!--s.sc&&s.map&&s.map.delete(s.key)}function Do(e){const{prevDep:t,nextDep:s}=e;t&&(t.nextDep=s,e.prevDep=void 0),s&&(s.prevDep=t,e.nextDep=void 0)}let Ee=!0;const Ci=[];function Be(){Ci.push(Ee),Ee=!1}function Ke(){const e=Ci.pop();Ee=e===void 0?!0:e}function On(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const s=X;X=void 0;try{t()}finally{X=s}}}let Gt=0;class Fo{constructor(t,s){this.sub=t,this.dep=s,this.version=s.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class pn{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(!X||!Ee||X===this.computed)return;let s=this.activeLink;if(s===void 0||s.sub!==X)s=this.activeLink=new Fo(X,this),X.deps?(s.prevDep=X.depsTail,X.depsTail.nextDep=s,X.depsTail=s):X.deps=X.depsTail=s,Ei(s);else if(s.version===-1&&(s.version=this.version,s.nextDep)){const n=s.nextDep;n.prevDep=s.prevDep,s.prevDep&&(s.prevDep.nextDep=n),s.prevDep=X.depsTail,s.nextDep=void 0,X.depsTail.nextDep=s,X.depsTail=s,X.deps===s&&(X.deps=n)}return s}trigger(t){this.version++,Gt++,this.notify(t)}notify(t){un();try{for(let s=this.subs;s;s=s.prevSub)s.sub.notify()&&s.sub.dep.notify()}finally{fn()}}}function Ei(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let n=t.deps;n;n=n.nextDep)Ei(n)}const s=e.dep.subs;s!==e&&(e.prevSub=s,s&&(s.nextSub=e)),e.dep.subs=e}}const zs=new WeakMap,gt=Symbol(""),qs=Symbol(""),zt=Symbol("");function ae(e,t,s){if(Ee&&X){let n=zs.get(e);n||zs.set(e,n=new Map);let i=n.get(s);i||(n.set(s,i=new pn),i.map=n,i.key=s),i.track()}}function qe(e,t,s,n,i,o){const r=zs.get(e);if(!r){Gt++;return}const l=a=>{a&&a.trigger()};if(un(),t==="clear")r.forEach(l);else{const a=U(e),p=a&&ln(s);if(a&&s==="length"){const u=Number(n);r.forEach((h,T)=>{(T==="length"||T===zt||!Ve(T)&&T>=u)&&l(h)})}else switch((s!==void 0||r.has(void 0))&&l(r.get(s)),p&&l(r.get(zt)),t){case"add":a?p&&l(r.get("length")):(l(r.get(gt)),wt(e)&&l(r.get(qs)));break;case"delete":a||(l(r.get(gt)),wt(e)&&l(r.get(qs)));break;case"set":wt(e)&&l(r.get(gt));break}}fn()}function _t(e){const t=K(e);return t===e?t:(ae(t,"iterate",zt),we(e)?t:t.map(ke))}function Es(e){return ae(e=K(e),"iterate",zt),e}function Le(e,t){return Xe(e)?Et(mt(e)?ke(t):t):ke(t)}const Lo={__proto__:null,[Symbol.iterator](){return Ls(this,Symbol.iterator,e=>Le(this,e))},concat(...e){return _t(this).concat(...e.map(t=>U(t)?_t(t):t))},entries(){return Ls(this,"entries",e=>(e[1]=Le(this,e[1]),e))},every(e,t){return We(this,"every",e,t,void 0,arguments)},filter(e,t){return We(this,"filter",e,t,s=>s.map(n=>Le(this,n)),arguments)},find(e,t){return We(this,"find",e,t,s=>Le(this,s),arguments)},findIndex(e,t){return We(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return We(this,"findLast",e,t,s=>Le(this,s),arguments)},findLastIndex(e,t){return We(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return We(this,"forEach",e,t,void 0,arguments)},includes(...e){return Us(this,"includes",e)},indexOf(...e){return Us(this,"indexOf",e)},join(e){return _t(this).join(e)},lastIndexOf(...e){return Us(this,"lastIndexOf",e)},map(e,t){return We(this,"map",e,t,void 0,arguments)},pop(){return Dt(this,"pop")},push(...e){return Dt(this,"push",e)},reduce(e,...t){return Mn(this,"reduce",e,t)},reduceRight(e,...t){return Mn(this,"reduceRight",e,t)},shift(){return Dt(this,"shift")},some(e,t){return We(this,"some",e,t,void 0,arguments)},splice(...e){return Dt(this,"splice",e)},toReversed(){return _t(this).toReversed()},toSorted(e){return _t(this).toSorted(e)},toSpliced(...e){return _t(this).toSpliced(...e)},unshift(...e){return Dt(this,"unshift",e)},values(){return Ls(this,"values",e=>Le(this,e))}};function Ls(e,t,s){const n=Es(e),i=n[t]();return n!==e&&!we(e)&&(i._next=i.next,i.next=()=>{const o=i._next();return o.done||(o.value=s(o.value)),o}),i}const Uo=Array.prototype;function We(e,t,s,n,i,o){const r=Es(e),l=r!==e&&!we(e),a=r[t];if(a!==Uo[t]){const h=a.apply(e,o);return l?ke(h):h}let p=s;r!==e&&(l?p=function(h,T){return s.call(this,Le(e,h),T,e)}:s.length>2&&(p=function(h,T){return s.call(this,h,T,e)}));const u=a.call(r,p,n);return l&&i?i(u):u}function Mn(e,t,s,n){const i=Es(e),o=i!==e&&!we(e);let r=s,l=!1;i!==e&&(o?(l=n.length===0,r=function(p,u,h){return l&&(l=!1,p=Le(e,p)),s.call(this,p,Le(e,u),h,e)}):s.length>3&&(r=function(p,u,h){return s.call(this,p,u,h,e)}));const a=i[t](r,...n);return l?Le(e,a):a}function Us(e,t,s){const n=K(e);ae(n,"iterate",zt);const i=n[t](...s);return(i===-1||i===!1)&&mn(s[0])?(s[0]=K(s[0]),n[t](...s)):i}function Dt(e,t,s=[]){Be(),un();const n=K(e)[t].apply(e,s);return fn(),Ke(),n}const No=on("__proto__,__v_isRef,__isVue"),ki=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Ve));function Ho(e){Ve(e)||(e=String(e));const t=K(this);return ae(t,"has",e),t.hasOwnProperty(e)}class Pi{constructor(t=!1,s=!1){this._isReadonly=t,this._isShallow=s}get(t,s,n){if(s==="__v_skip")return t.__v_skip;const i=this._isReadonly,o=this._isShallow;if(s==="__v_isReactive")return!i;if(s==="__v_isReadonly")return i;if(s==="__v_isShallow")return o;if(s==="__v_raw")return n===(i?o?Yo:Mi:o?Oi:Ai).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(n)?t:void 0;const r=U(t);if(!i){let a;if(r&&(a=Lo[s]))return a;if(s==="hasOwnProperty")return Ho}const l=Reflect.get(t,s,fe(t)?t:n);if((Ve(s)?ki.has(s):No(s))||(i||ae(t,"get",s),o))return l;if(fe(l)){const a=r&&ln(s)?l:l.value;return i&&z(a)?Ys(a):a}return z(l)?i?Ys(l):qt(l):l}}class $i extends Pi{constructor(t=!1){super(!1,t)}set(t,s,n,i){let o=t[s];const r=U(t)&&ln(s);if(!this._isShallow){const p=Xe(o);if(!we(n)&&!Xe(n)&&(o=K(o),n=K(n)),!r&&fe(o)&&!fe(n))return p||(o.value=n),!0}const l=r?Number(s)e,rs=e=>Reflect.getPrototypeOf(e);function Wo(e,t,s){return function(...n){const i=this.__v_raw,o=K(i),r=wt(o),l=e==="entries"||e===Symbol.iterator&&r,a=e==="keys"&&r,p=i[e](...n),u=s?Js:t?Et:ke;return!t&&ae(o,"iterate",a?qs:gt),de(Object.create(p),{next(){const{value:h,done:T}=p.next();return T?{value:h,done:T}:{value:l?[u(h[0]),u(h[1])]:u(h),done:T}}})}}function ls(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Go(e,t){const s={get(i){const o=this.__v_raw,r=K(o),l=K(i);e||(Ne(i,l)&&ae(r,"get",i),ae(r,"get",l));const{has:a}=rs(r),p=t?Js:e?Et:ke;if(a.call(r,i))return p(o.get(i));if(a.call(r,l))return p(o.get(l));o!==r&&o.get(i)},get size(){const i=this.__v_raw;return!e&&ae(K(i),"iterate",gt),i.size},has(i){const o=this.__v_raw,r=K(o),l=K(i);return e||(Ne(i,l)&&ae(r,"has",i),ae(r,"has",l)),i===l?o.has(i):o.has(i)||o.has(l)},forEach(i,o){const r=this,l=r.__v_raw,a=K(l),p=t?Js:e?Et:ke;return!e&&ae(a,"iterate",gt),l.forEach((u,h)=>i.call(o,p(u),p(h),r))}};return de(s,e?{add:ls("add"),set:ls("set"),delete:ls("delete"),clear:ls("clear")}:{add(i){const o=K(this),r=rs(o),l=K(i),a=!t&&!we(i)&&!Xe(i)?l:i;return r.has.call(o,a)||Ne(i,a)&&r.has.call(o,i)||Ne(l,a)&&r.has.call(o,l)||(o.add(a),qe(o,"add",a,a)),this},set(i,o){!t&&!we(o)&&!Xe(o)&&(o=K(o));const r=K(this),{has:l,get:a}=rs(r);let p=l.call(r,i);p||(i=K(i),p=l.call(r,i));const u=a.call(r,i);return r.set(i,o),p?Ne(o,u)&&qe(r,"set",i,o):qe(r,"add",i,o),this},delete(i){const o=K(this),{has:r,get:l}=rs(o);let a=r.call(o,i);a||(i=K(i),a=r.call(o,i)),l&&l.call(o,i);const p=o.delete(i);return a&&qe(o,"delete",i,void 0),p},clear(){const i=K(this),o=i.size!==0,r=i.clear();return o&&qe(i,"clear",void 0,void 0),r}}),["keys","values","entries",Symbol.iterator].forEach(i=>{s[i]=Wo(i,e,t)}),s}function hn(e,t){const s=Go(e,t);return(n,i,o)=>i==="__v_isReactive"?!e:i==="__v_isReadonly"?e:i==="__v_raw"?n:Reflect.get(W(s,i)&&i in n?s:n,i,o)}const zo={get:hn(!1,!1)},qo={get:hn(!1,!0)},Jo={get:hn(!0,!1)};const Ai=new WeakMap,Oi=new WeakMap,Mi=new WeakMap,Yo=new WeakMap;function Xo(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function qt(e){return Xe(e)?e:gn(e,!1,jo,zo,Ai)}function Zo(e){return gn(e,!1,Ko,qo,Oi)}function Ys(e){return gn(e,!0,Bo,Jo,Mi)}function gn(e,t,s,n,i){if(!z(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;const o=i.get(e);if(o)return o;const r=Xo(So(e));if(r===0)return e;const l=new Proxy(e,r===2?n:s);return i.set(e,l),l}function mt(e){return Xe(e)?mt(e.__v_raw):!!(e&&e.__v_isReactive)}function Xe(e){return!!(e&&e.__v_isReadonly)}function we(e){return!!(e&&e.__v_isShallow)}function mn(e){return e?!!e.__v_raw:!1}function K(e){const t=e&&e.__v_raw;return t?K(t):e}function Qo(e){return!W(e,"__v_skip")&&Object.isExtensible(e)&&gi(e,"__v_skip",!0),e}const ke=e=>z(e)?qt(e):e,Et=e=>z(e)?Ys(e):e;function fe(e){return e?e.__v_isRef===!0:!1}function j(e){return er(e,!1)}function er(e,t){return fe(e)?e:new tr(e,t)}class tr{constructor(t,s){this.dep=new pn,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=s?t:K(t),this._value=s?t:ke(t),this.__v_isShallow=s}get value(){return this.dep.track(),this._value}set value(t){const s=this._rawValue,n=this.__v_isShallow||we(t)||Xe(t);t=n?t:K(t),Ne(t,s)&&(this._rawValue=t,this._value=n?t:ke(t),this.dep.trigger())}}function se(e){return fe(e)?e.value:e}const sr={get:(e,t,s)=>t==="__v_raw"?e:se(Reflect.get(e,t,s)),set:(e,t,s,n)=>{const i=e[t];return fe(i)&&!fe(s)?(i.value=s,!0):Reflect.set(e,t,s,n)}};function Ri(e){return mt(e)?e:new Proxy(e,sr)}class nr{constructor(t,s,n){this.fn=t,this.setter=s,this._value=void 0,this.dep=new pn(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Gt-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!s,this.isSSR=n}notify(){if(this.flags|=16,!(this.flags&8)&&X!==this)return xi(this,!0),!0}get value(){const t=this.dep.track();return Ti(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function ir(e,t,s=!1){let n,i;return H(e)?n=e:(n=e.get,i=e.set),new nr(n,i,s)}const as={},ps=new WeakMap;let dt;function or(e,t=!1,s=dt){if(s){let n=ps.get(s);n||ps.set(s,n=[]),n.push(e)}}function rr(e,t,s=J){const{immediate:n,deep:i,once:o,scheduler:r,augmentJob:l,call:a}=s,p=R=>i?R:we(R)||i===!1||i===0?Je(R,1):Je(R);let u,h,T,$,F=!1,y=!1;if(fe(e)?(h=()=>e.value,F=we(e)):mt(e)?(h=()=>p(e),F=!0):U(e)?(y=!0,F=e.some(R=>mt(R)||we(R)),h=()=>e.map(R=>{if(fe(R))return R.value;if(mt(R))return p(R);if(H(R))return a?a(R,2):R()})):H(e)?t?h=a?()=>a(e,2):e:h=()=>{if(T){Be();try{T()}finally{Ke()}}const R=dt;dt=u;try{return a?a(e,3,[$]):e($)}finally{dt=R}}:h=He,t&&i){const R=h,ie=i===!0?1/0:i;h=()=>Je(R(),ie)}const S=Io(),x=()=>{u.stop(),S&&S.active&&rn(S.effects,u)};if(o&&t){const R=t;t=(...ie)=>{const $e=R(...ie);return x(),$e}}let C=y?new Array(e.length).fill(as):as;const M=R=>{if(!(!(u.flags&1)||!u.dirty&&!R))if(t){const ie=u.run();if(R||i||F||(y?ie.some(($e,Ae)=>Ne($e,C[Ae])):Ne(ie,C))){T&&T();const $e=dt;dt=u;try{const Ae=[ie,C===as?void 0:y&&C[0]===as?[]:C,$];C=ie,a?a(t,3,Ae):t(...Ae)}finally{dt=$e}}}else u.run()};return l&&l(M),u=new _i(h),u.scheduler=r?()=>r(M,!1):M,$=R=>or(R,!1,u),T=u.onStop=()=>{const R=ps.get(u);if(R){if(a)a(R,4);else for(const ie of R)ie();ps.delete(u)}},t?n?M(!0):C=u.run():r?r(M.bind(null,!0),!0):u.run(),x.pause=u.pause.bind(u),x.resume=u.resume.bind(u),x.stop=x,x}function Je(e,t=1/0,s){if(t<=0||!z(e)||e.__v_skip||(s=s||new Map,(s.get(e)||0)>=t))return e;if(s.set(e,t),t--,fe(e))Je(e.value,t,s);else if(U(e))for(let n=0;n{Je(n,t,s)});else if(pi(e)){for(const n in e)Je(e[n],t,s);for(const n of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,n)&&Je(e[n],t,s)}return e}/** -* @vue/runtime-core v3.5.39 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/function Qt(e,t,s,n){try{return n?e(...n):e()}catch(i){ks(i,t,s)}}function Pe(e,t,s,n){if(H(e)){const i=Qt(e,t,s,n);return i&&fi(i)&&i.catch(o=>{ks(o,t,s)}),i}if(U(e)){const i=[];for(let o=0;o>>1,i=ge[n],o=Jt(i);o=Jt(s)?ge.push(e):ge.splice(ar(t),0,e),e.flags|=1,Fi()}}function Fi(){hs||(hs=Ii.then(Ui))}function cr(e){U(e)?St.push(...e):st&&e.id===-1?st.splice(yt+1,0,e):e.flags&1||(St.push(e),e.flags|=1),Fi()}function Rn(e,t,s=Fe+1){for(;sJt(s)-Jt(n));if(St.length=0,st){st.push(...t);return}for(st=t,yt=0;yte.id==null?e.flags&2?-1:1/0:e.id;function Ui(e){try{for(Fe=0;Fe{n._d&&Kn(-1);const o=gs(t);let r;try{r=e(...i)}finally{gs(o),n._d&&Kn(1)}return r};return n._n=!0,n._c=!0,n._d=!0,n}function ue(e,t){if(xe===null)return e;const s=Os(xe),n=e.dirs||(e.dirs=[]);for(let i=0;i1)return s&&H(t)?t.call(n&&n.proxy):t}}const dr=Symbol.for("v-scx"),pr=()=>fs(dr);function Ns(e,t,s){return Hi(e,t,s)}function Hi(e,t,s=J){const{immediate:n,deep:i,flush:o,once:r}=s,l=de({},s),a=t&&n||!t&&o!=="post";let p;if(Xt){if(o==="sync"){const $=pr();p=$.__watcherHandles||($.__watcherHandles=[])}else if(!a){const $=()=>{};return $.stop=He,$.resume=He,$.pause=He,$}}const u=me;l.call=($,F,y)=>Pe($,u,F,y);let h=!1;o==="post"?l.scheduler=$=>{be($,u&&u.suspense)}:o!=="sync"&&(h=!0,l.scheduler=($,F)=>{F?$():bn($)}),l.augmentJob=$=>{t&&($.flags|=4),h&&($.flags|=2,u&&($.id=u.uid,$.i=u))};const T=rr(e,t,l);return Xt&&(p?p.push(T):a&&T()),T}function hr(e,t,s){const n=this.proxy,i=ee(e)?e.includes(".")?Vi(n,e):()=>n[e]:e.bind(n,n);let o;H(t)?o=t:(o=t.handler,s=t);const r=es(this),l=Hi(i,o.bind(n),s);return r(),l}function Vi(e,t){const s=t.split(".");return()=>{let n=e;for(let i=0;ie.__isTeleport,Hs=Symbol("_leaveCb");function vn(e,t){e.shapeFlag&6&&e.component?(e.transition=t,vn(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 ji(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function In(e,t){let s;return!!((s=Object.getOwnPropertyDescriptor(e,t))&&!s.configurable)}const ms=new WeakMap;function jt(e,t,s,n,i=!1){if(U(e)){e.forEach((y,S)=>jt(y,t&&(U(t)?t[S]:t),s,n,i));return}if(Bt(n)&&!i){n.shapeFlag&512&&n.type.__asyncResolved&&n.component.subTree.component&&jt(e,t,s,n.component.subTree);return}const o=n.shapeFlag&4?Os(n.component):n.el,r=i?null:o,{i:l,r:a}=e,p=t&&t.r,u=l.refs===J?l.refs={}:l.refs,h=l.setupState,T=K(h),$=h===J?ui:y=>In(u,y)?!1:W(T,y),F=(y,S)=>!(S&&In(u,S));if(p!=null&&p!==a){if(Dn(t),ee(p))u[p]=null,$(p)&&(h[p]=null);else if(fe(p)){const y=t;F(p,y.k)&&(p.value=null),y.k&&(u[y.k]=null)}}if(H(a)){Be();try{Qt(a,l,12,[r,u])}finally{Ke()}}else{const y=ee(a),S=fe(a);if(y||S){const x=()=>{if(e.f){const C=y?$(a)?h[a]:u[a]:F()||!e.k?a.value:u[e.k];if(i)U(C)&&rn(C,o);else if(U(C))C.includes(o)||C.push(o);else if(y)u[a]=[o],$(a)&&(h[a]=u[a]);else{const M=[o];F(a,e.k)&&(a.value=M),e.k&&(u[e.k]=M)}}else y?(u[a]=r,$(a)&&(h[a]=r)):S&&(F(a,e.k)&&(a.value=r),e.k&&(u[e.k]=r))};if(r){const C=()=>{x(),ms.delete(e)};C.id=-1,ms.set(e,C),be(C,s)}else Dn(e),x()}}}function Dn(e){const t=ms.get(e);t&&(t.flags|=8,ms.delete(e))}Cs().requestIdleCallback;Cs().cancelIdleCallback;const Bt=e=>!!e.type.__asyncLoader,Bi=e=>e.type.__isKeepAlive;function br(e,t){Ki(e,"a",t)}function vr(e,t){Ki(e,"da",t)}function Ki(e,t,s=me){const n=e.__wdc||(e.__wdc=()=>{let i=s;for(;i;){if(i.isDeactivated)return;i=i.parent}return e()});if(Ps(t,n,s),s){let i=s.parent;for(;i&&i.parent;)Bi(i.parent.vnode)&&_r(n,t,s,i),i=i.parent}}function _r(e,t,s,n){const i=Ps(t,e,n,!0);_n(()=>{rn(n[t],i)},s)}function Ps(e,t,s=me,n=!1){if(s){const i=s[e]||(s[e]=[]),o=t.__weh||(t.__weh=(...r)=>{Be();const l=es(s),a=Pe(t,s,e,r);return l(),Ke(),a});return n?i.unshift(o):i.push(o),o}}const Qe=e=>(t,s=me)=>{(!Xt||e==="sp")&&Ps(e,(...n)=>t(...n),s)},yr=Qe("bm"),vt=Qe("m"),xr=Qe("bu"),wr=Qe("u"),Sr=Qe("bum"),_n=Qe("um"),Tr=Qe("sp"),Cr=Qe("rtg"),Er=Qe("rtc");function kr(e,t=me){Ps("ec",e,t)}const Pr=Symbol.for("v-ndc");function Te(e,t,s,n){let i;const o=s,r=U(e);if(r||ee(e)){const l=r&&mt(e);let a=!1,p=!1;l&&(a=!we(e),p=Xe(e),e=Es(e)),i=new Array(e.length);for(let u=0,h=e.length;ut(l,a,void 0,o));else{const l=Object.keys(e);i=new Array(l.length);for(let a=0,p=l.length;ae?fo(e)?Os(e):Xs(e.parent):null,Kt=de(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=>Gi(e),$forceUpdate:e=>e.f||(e.f=()=>{bn(e.update)}),$nextTick:e=>e.n||(e.n=Di.bind(e.proxy)),$watch:e=>hr.bind(e)}),Vs=(e,t)=>e!==J&&!e.__isScriptSetup&&W(e,t),$r={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:s,setupState:n,data:i,props:o,accessCache:r,type:l,appContext:a}=e;if(t[0]!=="$"){const T=r[t];if(T!==void 0)switch(T){case 1:return n[t];case 2:return i[t];case 4:return s[t];case 3:return o[t]}else{if(Vs(n,t))return r[t]=1,n[t];if(i!==J&&W(i,t))return r[t]=2,i[t];if(W(o,t))return r[t]=3,o[t];if(s!==J&&W(s,t))return r[t]=4,s[t];Zs&&(r[t]=0)}}const p=Kt[t];let u,h;if(p)return t==="$attrs"&&ae(e.attrs,"get",""),p(e);if((u=l.__cssModules)&&(u=u[t]))return u;if(s!==J&&W(s,t))return r[t]=4,s[t];if(h=a.config.globalProperties,W(h,t))return h[t]},set({_:e},t,s){const{data:n,setupState:i,ctx:o}=e;return Vs(i,t)?(i[t]=s,!0):n!==J&&W(n,t)?(n[t]=s,!0):W(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(o[t]=s,!0)},has({_:{data:e,setupState:t,accessCache:s,ctx:n,appContext:i,props:o,type:r}},l){let a;return!!(s[l]||e!==J&&l[0]!=="$"&&W(e,l)||Vs(t,l)||W(o,l)||W(n,l)||W(Kt,l)||W(i.config.globalProperties,l)||(a=r.__cssModules)&&a[l])},defineProperty(e,t,s){return s.get!=null?e._.accessCache[t]=0:W(s,"value")&&this.set(e,t,s.value,null),Reflect.defineProperty(e,t,s)}};function Fn(e){return U(e)?e.reduce((t,s)=>(t[s]=null,t),{}):e}let Zs=!0;function Ar(e){const t=Gi(e),s=e.proxy,n=e.ctx;Zs=!1,t.beforeCreate&&Ln(t.beforeCreate,e,"bc");const{data:i,computed:o,methods:r,watch:l,provide:a,inject:p,created:u,beforeMount:h,mounted:T,beforeUpdate:$,updated:F,activated:y,deactivated:S,beforeDestroy:x,beforeUnmount:C,destroyed:M,unmounted:R,render:ie,renderTracked:$e,renderTriggered:Ae,errorCaptured:et,serverPrefetch:ts,expose:lt,inheritAttrs:Ot,components:ss,directives:ns,filters:Ms}=t;if(p&&Or(p,n,null),r)for(const Z in r){const Y=r[Z];H(Y)&&(n[Z]=Y.bind(s))}if(i){const Z=i.call(s,s);z(Z)&&(e.data=qt(Z))}if(Zs=!0,o)for(const Z in o){const Y=o[Z],at=H(Y)?Y.bind(s,s):H(Y.get)?Y.get.bind(s,s):He,is=!H(Y)&&H(Y.set)?Y.set.bind(s):He,ct=bt({get:at,set:is});Object.defineProperty(n,Z,{enumerable:!0,configurable:!0,get:()=>ct.value,set:Oe=>ct.value=Oe})}if(l)for(const Z in l)Wi(l[Z],n,s,Z);if(a){const Z=H(a)?a.call(s):a;Reflect.ownKeys(Z).forEach(Y=>{fr(Y,Z[Y])})}u&&Ln(u,e,"c");function pe(Z,Y){U(Y)?Y.forEach(at=>Z(at.bind(s))):Y&&Z(Y.bind(s))}if(pe(yr,h),pe(vt,T),pe(xr,$),pe(wr,F),pe(br,y),pe(vr,S),pe(kr,et),pe(Er,$e),pe(Cr,Ae),pe(Sr,C),pe(_n,R),pe(Tr,ts),U(lt))if(lt.length){const Z=e.exposed||(e.exposed={});lt.forEach(Y=>{Object.defineProperty(Z,Y,{get:()=>s[Y],set:at=>s[Y]=at,enumerable:!0})})}else e.exposed||(e.exposed={});ie&&e.render===He&&(e.render=ie),Ot!=null&&(e.inheritAttrs=Ot),ss&&(e.components=ss),ns&&(e.directives=ns),ts&&ji(e)}function Or(e,t,s=He){U(e)&&(e=Qs(e));for(const n in e){const i=e[n];let o;z(i)?"default"in i?o=fs(i.from||n,i.default,!0):o=fs(i.from||n):o=fs(i),fe(o)?Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:()=>o.value,set:r=>o.value=r}):t[n]=o}}function Ln(e,t,s){Pe(U(e)?e.map(n=>n.bind(t.proxy)):e.bind(t.proxy),t,s)}function Wi(e,t,s,n){let i=n.includes(".")?Vi(s,n):()=>s[n];if(ee(e)){const o=t[e];H(o)&&Ns(i,o)}else if(H(e))Ns(i,e.bind(s));else if(z(e))if(U(e))e.forEach(o=>Wi(o,t,s,n));else{const o=H(e.handler)?e.handler.bind(s):t[e.handler];H(o)&&Ns(i,o,e)}}function Gi(e){const t=e.type,{mixins:s,extends:n}=t,{mixins:i,optionsCache:o,config:{optionMergeStrategies:r}}=e.appContext,l=o.get(t);let a;return l?a=l:!i.length&&!s&&!n?a=t:(a={},i.length&&i.forEach(p=>bs(a,p,r,!0)),bs(a,t,r)),z(t)&&o.set(t,a),a}function bs(e,t,s,n=!1){const{mixins:i,extends:o}=t;o&&bs(e,o,s,!0),i&&i.forEach(r=>bs(e,r,s,!0));for(const r in t)if(!(n&&r==="expose")){const l=Mr[r]||s&&s[r];e[r]=l?l(e[r],t[r]):t[r]}return e}const Mr={data:Un,props:Nn,emits:Nn,methods:Lt,computed:Lt,beforeCreate:he,created:he,beforeMount:he,mounted:he,beforeUpdate:he,updated:he,beforeDestroy:he,beforeUnmount:he,destroyed:he,unmounted:he,activated:he,deactivated:he,errorCaptured:he,serverPrefetch:he,components:Lt,directives:Lt,watch:Ir,provide:Un,inject:Rr};function Un(e,t){return t?e?function(){return de(H(e)?e.call(this,this):e,H(t)?t.call(this,this):t)}:t:e}function Rr(e,t){return Lt(Qs(e),Qs(t))}function Qs(e){if(U(e)){const t={};for(let s=0;st==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ce(t)}Modifiers`]||e[`${rt(t)}Modifiers`];function Ur(e,t,...s){if(e.isUnmounted)return;const n=e.vnode.props||J;let i=s;const o=t.startsWith("update:"),r=o&&Lr(n,t.slice(7));r&&(r.trim&&(i=s.map(u=>ee(u)?u.trim():u)),r.number&&(i=s.map(Ts)));let l,a=n[l=Is(t)]||n[l=Is(Ce(t))];!a&&o&&(a=n[l=Is(rt(t))]),a&&Pe(a,e,6,i);const p=n[l+"Once"];if(p){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Pe(p,e,6,i)}}const Nr=new WeakMap;function qi(e,t,s=!1){const n=s?Nr:t.emitsCache,i=n.get(e);if(i!==void 0)return i;const o=e.emits;let r={},l=!1;if(!H(e)){const a=p=>{const u=qi(p,t,!0);u&&(l=!0,de(r,u))};!s&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}return!o&&!l?(z(e)&&n.set(e,null),null):(U(o)?o.forEach(a=>r[a]=null):de(r,o),z(e)&&n.set(e,r),r)}function $s(e,t){return!e||!xs(t)?!1:(t=t.slice(2),t=t==="Once"?t:t.replace(/Once$/,""),W(e,t[0].toLowerCase()+t.slice(1))||W(e,rt(t))||W(e,t))}function Hn(e){const{type:t,vnode:s,proxy:n,withProxy:i,propsOptions:[o],slots:r,attrs:l,emit:a,render:p,renderCache:u,props:h,data:T,setupState:$,ctx:F,inheritAttrs:y}=e,S=gs(e);let x,C;try{if(s.shapeFlag&4){const R=i||n,ie=R;x=Ue(p.call(ie,R,u,h,$,T,F)),C=l}else{const R=t;x=Ue(R.length>1?R(h,{attrs:l,slots:r,emit:a}):R(h,null)),C=t.props?l:Hr(l)}}catch(R){Wt.length=0,ks(R,e,1),x=le(it)}let M=x;if(C&&y!==!1){const R=Object.keys(C),{shapeFlag:ie}=M;R.length&&ie&7&&(o&&R.some(ws)&&(C=Vr(C,o)),M=kt(M,C,!1,!0))}return s.dirs&&(M=kt(M,null,!1,!0),M.dirs=M.dirs?M.dirs.concat(s.dirs):s.dirs),s.transition&&vn(M,s.transition),x=M,gs(S),x}const Hr=e=>{let t;for(const s in e)(s==="class"||s==="style"||xs(s))&&((t||(t={}))[s]=e[s]);return t},Vr=(e,t)=>{const s={};for(const n in e)(!ws(n)||!(n.slice(9)in t))&&(s[n]=e[n]);return s};function jr(e,t,s){const{props:n,children:i,component:o}=e,{props:r,children:l,patchFlag:a}=t,p=o.emitsOptions;if(t.dirs||t.transition)return!0;if(s&&a>=0){if(a&1024)return!0;if(a&16)return n?Vn(n,r,p):!!r;if(a&8){const u=t.dynamicProps;for(let h=0;hObject.create(Yi),Zi=e=>Object.getPrototypeOf(e)===Yi;function Kr(e,t,s,n=!1){const i={},o=Xi();e.propsDefaults=Object.create(null),Qi(e,t,i,o);for(const r in e.propsOptions[0])r in i||(i[r]=void 0);s?e.props=n?i:Zo(i):e.type.props?e.props=i:e.props=o,e.attrs=o}function Wr(e,t,s,n){const{props:i,attrs:o,vnode:{patchFlag:r}}=e,l=K(i),[a]=e.propsOptions;let p=!1;if((n||r>0)&&!(r&16)){if(r&8){const u=e.vnode.dynamicProps;for(let h=0;h{a=!0;const[T,$]=eo(h,t,!0);de(r,T),$&&l.push(...$)};!s&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}if(!o&&!a)return z(e)&&n.set(e,xt),xt;if(U(o))for(let u=0;ue==="_"||e==="_ctx"||e==="$stable",xn=e=>U(e)?e.map(Ue):[Ue(e)],zr=(e,t,s)=>{if(t._n)return t;const n=ur((...i)=>xn(t(...i)),s);return n._c=!1,n},to=(e,t,s)=>{const n=e._ctx;for(const i in e){if(yn(i))continue;const o=e[i];if(H(o))t[i]=zr(i,o,n);else if(o!=null){const r=xn(o);t[i]=()=>r}}},so=(e,t)=>{const s=xn(t);e.slots.default=()=>s},no=(e,t,s)=>{for(const n in t)(s||!yn(n))&&(e[n]=t[n])},qr=(e,t,s)=>{const n=e.slots=Xi();if(e.vnode.shapeFlag&32){const i=t._;i?(no(n,t,s),s&&gi(n,"_",i,!0)):to(t,n)}else t&&so(e,t)},Jr=(e,t,s)=>{const{vnode:n,slots:i}=e;let o=!0,r=J;if(n.shapeFlag&32){const l=t._;l?s&&l===1?o=!1:no(i,t,s):(o=!t.$stable,to(t,i)),r=t}else t&&(so(e,t),r={default:1});if(o)for(const l in i)!yn(l)&&r[l]==null&&delete i[l]},be=el;function Yr(e){return Xr(e)}function Xr(e,t){const s=Cs();s.__VUE__=!0;const{insert:n,remove:i,patchProp:o,createElement:r,createText:l,createComment:a,setText:p,setElementText:u,parentNode:h,nextSibling:T,setScopeId:$=He,insertStaticContent:F}=e,y=(c,f,g,_=null,v=null,m=null,A=void 0,P=null,k=!!f.dynamicChildren)=>{if(c===f)return;c&&!Ft(c,f)&&(_=os(c),Oe(c,v,m,!0),c=null),f.patchFlag===-2&&(k=!1,f.dynamicChildren=null);const{type:b,ref:L,shapeFlag:O}=f;switch(b){case As:S(c,f,g,_);break;case it:x(c,f,g,_);break;case Bs:c==null&&C(f,g,_,A);break;case Q:ss(c,f,g,_,v,m,A,P,k);break;default:O&1?ie(c,f,g,_,v,m,A,P,k):O&6?ns(c,f,g,_,v,m,A,P,k):(O&64||O&128)&&b.process(c,f,g,_,v,m,A,P,k,Rt)}L!=null&&v?jt(L,c&&c.ref,m,f||c,!f):L==null&&c&&c.ref!=null&&jt(c.ref,null,m,c,!0)},S=(c,f,g,_)=>{if(c==null)n(f.el=l(f.children),g,_);else{const v=f.el=c.el;f.children!==c.children&&p(v,f.children)}},x=(c,f,g,_)=>{c==null?n(f.el=a(f.children||""),g,_):f.el=c.el},C=(c,f,g,_)=>{[c.el,c.anchor]=F(c.children,f,g,_,c.el,c.anchor)},M=({el:c,anchor:f},g,_)=>{let v;for(;c&&c!==f;)v=T(c),n(c,g,_),c=v;n(f,g,_)},R=({el:c,anchor:f})=>{let g;for(;c&&c!==f;)g=T(c),i(c),c=g;i(f)},ie=(c,f,g,_,v,m,A,P,k)=>{if(f.type==="svg"?A="svg":f.type==="math"&&(A="mathml"),c==null)$e(f,g,_,v,m,A,P,k);else{const b=c.el&&c.el._isVueCE?c.el:null;try{b&&b._beginPatch(),ts(c,f,v,m,A,P,k)}finally{b&&b._endPatch()}}},$e=(c,f,g,_,v,m,A,P)=>{let k,b;const{props:L,shapeFlag:O,transition:I,dirs:N}=c;if(k=c.el=r(c.type,m,L&&L.is,L),O&8?u(k,c.children):O&16&&et(c.children,k,null,_,v,js(c,m),A,P),N&&ut(c,null,_,"created"),Ae(k,c,c.scopeId,A,_),L){for(const q in L)q!=="value"&&!Nt(q)&&o(k,q,null,L[q],m,_);"value"in L&&o(k,"value",null,L.value,m),(b=L.onVnodeBeforeMount)&&De(b,_,c)}N&&ut(c,null,_,"beforeMount");const B=Zr(v,I);B&&I.beforeEnter(k),n(k,f,g),((b=L&&L.onVnodeMounted)||B||N)&&be(()=>{try{b&&De(b,_,c),B&&I.enter(k),N&&ut(c,null,_,"mounted")}finally{}},v)},Ae=(c,f,g,_,v)=>{if(g&&$(c,g),_)for(let m=0;m<_.length;m++)$(c,_[m]);if(v){let m=v.subTree;if(f===m||lo(m.type)&&(m.ssContent===f||m.ssFallback===f)){const A=v.vnode;Ae(c,A,A.scopeId,A.slotScopeIds,v.parent)}}},et=(c,f,g,_,v,m,A,P,k=0)=>{for(let b=k;b{const P=f.el=c.el;let{patchFlag:k,dynamicChildren:b,dirs:L}=f;k|=c.patchFlag&16;const O=c.props||J,I=f.props||J;let N;if(g&&ft(g,!1),(N=I.onVnodeBeforeUpdate)&&De(N,g,f,c),L&&ut(f,c,g,"beforeUpdate"),g&&ft(g,!0),b&&(!c.dynamicChildren||c.dynamicChildren.length!==b.length)&&(k=0,A=!1,b=null),(O.innerHTML&&I.innerHTML==null||O.textContent&&I.textContent==null)&&u(P,""),b?lt(c.dynamicChildren,b,P,g,_,js(f,v),m):A||Y(c,f,P,null,g,_,js(f,v),m,!1),k>0){if(k&16)Ot(P,O,I,g,v);else if(k&2&&O.class!==I.class&&o(P,"class",null,I.class,v),k&4&&o(P,"style",O.style,I.style,v),k&8){const B=f.dynamicProps;for(let q=0;q{N&&De(N,g,f,c),L&&ut(f,c,g,"updated")},_)},lt=(c,f,g,_,v,m,A)=>{for(let P=0;P{if(f!==g){if(f!==J)for(const m in f)!Nt(m)&&!(m in g)&&o(c,m,f[m],null,v,_);for(const m in g){if(Nt(m))continue;const A=g[m],P=f[m];A!==P&&m!=="value"&&o(c,m,P,A,v,_)}"value"in g&&o(c,"value",f.value,g.value,v)}},ss=(c,f,g,_,v,m,A,P,k)=>{const b=f.el=c?c.el:l(""),L=f.anchor=c?c.anchor:l("");let{patchFlag:O,dynamicChildren:I,slotScopeIds:N}=f;N&&(P=P?P.concat(N):N),c==null?(n(b,g,_),n(L,g,_),et(f.children||[],g,L,v,m,A,P,k)):O>0&&O&64&&I&&c.dynamicChildren&&c.dynamicChildren.length===I.length?(lt(c.dynamicChildren,I,g,v,m,A,P),(f.key!=null||v&&f===v.subTree)&&io(c,f,!0)):Y(c,f,g,L,v,m,A,P,k)},ns=(c,f,g,_,v,m,A,P,k)=>{f.slotScopeIds=P,c==null?f.shapeFlag&512?v.ctx.activate(f,g,_,A,k):Ms(f,g,_,v,m,A,k):Sn(c,f,k)},Ms=(c,f,g,_,v,m,A)=>{const P=c.component=ll(c,_,v);if(Bi(c)&&(P.ctx.renderer=Rt),cl(P,!1,A),P.asyncDep){if(v&&v.registerDep(P,pe,A),!c.el){const k=P.subTree=le(it);x(null,k,f,g),c.placeholder=k.el}}else pe(P,c,f,g,v,m,A)},Sn=(c,f,g)=>{const _=f.component=c.component;if(jr(c,f,g))if(_.asyncDep&&!_.asyncResolved){Z(_,f,g);return}else _.next=f,_.update();else f.el=c.el,_.vnode=f},pe=(c,f,g,_,v,m,A)=>{const P=()=>{if(c.isMounted){let{next:O,bu:I,u:N,parent:B,vnode:q}=c;{const Re=oo(c);if(Re){O&&(O.el=q.el,Z(c,O,A)),Re.asyncDep.then(()=>{be(()=>{c.isUnmounted||b()},v)});return}}let G=O,te;ft(c,!1),O?(O.el=q.el,Z(c,O,A)):O=q,I&&us(I),(te=O.props&&O.props.onVnodeBeforeUpdate)&&De(te,B,O,q),ft(c,!0);const oe=Hn(c),Me=c.subTree;c.subTree=oe,y(Me,oe,h(Me.el),os(Me),c,v,m),O.el=oe.el,G===null&&Br(c,oe.el),N&&be(N,v),(te=O.props&&O.props.onVnodeUpdated)&&be(()=>De(te,B,O,q),v)}else{let O;const{el:I,props:N}=f,{bm:B,m:q,parent:G,root:te,type:oe}=c,Me=Bt(f);ft(c,!1),B&&us(B),!Me&&(O=N&&N.onVnodeBeforeMount)&&De(O,G,f),ft(c,!0);{te.ce&&te.ce._hasShadowRoot()&&te.ce._injectChildStyle(oe,c.parent?c.parent.type:void 0);const Re=c.subTree=Hn(c);y(null,Re,g,_,c,v,m),f.el=Re.el}if(q&&be(q,v),!Me&&(O=N&&N.onVnodeMounted)){const Re=f;be(()=>De(O,G,Re),v)}(f.shapeFlag&256||G&&Bt(G.vnode)&&G.vnode.shapeFlag&256)&&c.a&&be(c.a,v),c.isMounted=!0,f=g=_=null}};c.scope.on();const k=c.effect=new _i(P);c.scope.off();const b=c.update=k.run.bind(k),L=c.job=k.runIfDirty.bind(k);L.i=c,L.id=c.uid,k.scheduler=()=>bn(L),ft(c,!0),b()},Z=(c,f,g)=>{f.component=c;const _=c.vnode.props;c.vnode=f,c.next=null,Wr(c,f.props,_,g),Jr(c,f.children,g),Be(),Rn(c),Ke()},Y=(c,f,g,_,v,m,A,P,k=!1)=>{const b=c&&c.children,L=c?c.shapeFlag:0,O=f.children,{patchFlag:I,shapeFlag:N}=f;if(I>0){if(I&128){is(b,O,g,_,v,m,A,P,k);return}else if(I&256){at(b,O,g,_,v,m,A,P,k);return}}N&8?(L&16&&Mt(b,v,m),O!==b&&u(g,O)):L&16?N&16?is(b,O,g,_,v,m,A,P,k):Mt(b,v,m,!0):(L&8&&u(g,""),N&16&&et(O,g,_,v,m,A,P,k))},at=(c,f,g,_,v,m,A,P,k)=>{c=c||xt,f=f||xt;const b=c.length,L=f.length,O=Math.min(b,L);let I;for(I=0;IL?Mt(c,v,m,!0,!1,O):et(f,g,_,v,m,A,P,k,O)},is=(c,f,g,_,v,m,A,P,k)=>{let b=0;const L=f.length;let O=c.length-1,I=L-1;for(;b<=O&&b<=I;){const N=c[b],B=f[b]=k?ze(f[b]):Ue(f[b]);if(Ft(N,B))y(N,B,g,null,v,m,A,P,k);else break;b++}for(;b<=O&&b<=I;){const N=c[O],B=f[I]=k?ze(f[I]):Ue(f[I]);if(Ft(N,B))y(N,B,g,null,v,m,A,P,k);else break;O--,I--}if(b>O){if(b<=I){const N=I+1,B=NI)for(;b<=O;)Oe(c[b],v,m,!0),b++;else{const N=b,B=b,q=new Map;for(b=B;b<=I;b++){const _e=f[b]=k?ze(f[b]):Ue(f[b]);_e.key!=null&&q.set(_e.key,b)}let G,te=0;const oe=I-B+1;let Me=!1,Re=0;const It=new Array(oe);for(b=0;b=oe){Oe(_e,v,m,!0);continue}let Ie;if(_e.key!=null)Ie=q.get(_e.key);else for(G=B;G<=I;G++)if(It[G-B]===0&&Ft(_e,f[G])){Ie=G;break}Ie===void 0?Oe(_e,v,m,!0):(It[Ie-B]=b+1,Ie>=Re?Re=Ie:Me=!0,y(_e,f[Ie],g,null,v,m,A,P,k),te++)}const En=Me?Qr(It):xt;for(G=En.length-1,b=oe-1;b>=0;b--){const _e=B+b,Ie=f[_e],kn=f[_e+1],Pn=_e+1{const{el:m,type:A,transition:P,children:k,shapeFlag:b}=c;if(b&6){ct(c.component.subTree,f,g,_);return}if(b&128){c.suspense.move(f,g,_);return}if(b&64){A.move(c,f,g,Rt);return}if(A===Q){n(m,f,g);for(let O=0;OP.enter(m),v));else{const{leave:O,delayLeave:I,afterLeave:N}=P,B=()=>{c.ctx.isUnmounted?i(m):n(m,f,g)},q=()=>{const G=m._isLeaving||!!m[Hs];m._isLeaving&&m[Hs](!0),P.persisted&&!G?B():O(m,()=>{B(),N&&N()})};I?I(m,B,q):q()}else n(m,f,g)},Oe=(c,f,g,_=!1,v=!1)=>{const{type:m,props:A,ref:P,children:k,dynamicChildren:b,shapeFlag:L,patchFlag:O,dirs:I,cacheIndex:N,memo:B}=c;if(O===-2&&(v=!1),P!=null&&(Be(),jt(P,null,g,c,!0),Ke()),N!=null&&(f.renderCache[N]=void 0),L&256){f.ctx.deactivate(c);return}const q=L&1&&I,G=!Bt(c);let te;if(G&&(te=A&&A.onVnodeBeforeUnmount)&&De(te,f,c),L&6)xo(c.component,g,_);else{if(L&128){c.suspense.unmount(g,_);return}q&&ut(c,null,f,"beforeUnmount"),L&64?c.type.remove(c,f,g,Rt,_):b&&!b.hasOnce&&(m!==Q||O>0&&O&64)?Mt(b,f,g,!1,!0):(m===Q&&O&384||!v&&L&16)&&Mt(k,f,g),_&&Tn(c)}const oe=B!=null&&N==null;(G&&(te=A&&A.onVnodeUnmounted)||q||oe)&&be(()=>{te&&De(te,f,c),q&&ut(c,null,f,"unmounted"),oe&&(c.el=null)},g)},Tn=c=>{const{type:f,el:g,anchor:_,transition:v}=c;if(f===Q){yo(g,_);return}if(f===Bs){R(c);return}const m=()=>{i(g),v&&!v.persisted&&v.afterLeave&&v.afterLeave()};if(c.shapeFlag&1&&v&&!v.persisted){const{leave:A,delayLeave:P}=v,k=()=>A(g,m);P?P(c.el,m,k):k()}else m()},yo=(c,f)=>{let g;for(;c!==f;)g=T(c),i(c),c=g;i(f)},xo=(c,f,g)=>{const{bum:_,scope:v,job:m,subTree:A,um:P,m:k,a:b}=c;Bn(k),Bn(b),_&&us(_),v.stop(),m&&(m.flags|=8,Oe(A,c,f,g)),P&&be(P,f),be(()=>{c.isUnmounted=!0},f)},Mt=(c,f,g,_=!1,v=!1,m=0)=>{for(let A=m;A{if(c.shapeFlag&6)return os(c.component.subTree);if(c.shapeFlag&128)return c.suspense.next();const f=T(c.anchor||c.el),g=f&&f[gr];return g?T(g):f};let Rs=!1;const Cn=(c,f,g)=>{let _;c==null?f._vnode&&(Oe(f._vnode,null,null,!0),_=f._vnode.component):y(f._vnode||null,c,f,null,null,null,g),f._vnode=c,Rs||(Rs=!0,Rn(_),Li(),Rs=!1)},Rt={p:y,um:Oe,m:ct,r:Tn,mt:Ms,mc:et,pc:Y,pbc:lt,n:os,o:e};return{render:Cn,hydrate:void 0,createApp:Fr(Cn)}}function js({type:e,props:t},s){return s==="svg"&&e==="foreignObject"||s==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:s}function ft({effect:e,job:t},s){s?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Zr(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function io(e,t,s=!1){const n=e.children,i=t.children;if(U(n)&&U(i))for(let o=0;o>1,e[s[l]]0&&(t[n]=s[o-1]),s[o]=n)}}for(o=s.length,r=s[o-1];o-- >0;)s[o]=r,r=t[r];return s}function oo(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:oo(t)}function Bn(e){if(e)for(let t=0;te.__isSuspense;function el(e,t){t&&t.pendingBranch?U(e)?t.effects.push(...e):t.effects.push(e):cr(e)}const Q=Symbol.for("v-fgt"),As=Symbol.for("v-txt"),it=Symbol.for("v-cmt"),Bs=Symbol.for("v-stc"),Wt=[];let ye=null;function w(e=!1){Wt.push(ye=e?null:[])}function tl(){Wt.pop(),ye=Wt[Wt.length-1]||null}let Yt=1;function Kn(e,t=!1){Yt+=e,e<0&&ye&&t&&(ye.hasOnce=!0)}function ao(e){return e.dynamicChildren=Yt>0?ye||xt:null,tl(),Yt>0&&ye&&ye.push(e),e}function E(e,t,s,n,i,o){return ao(d(e,t,s,n,i,o,!0))}function pt(e,t,s,n,i){return ao(le(e,t,s,n,i,!0))}function co(e){return e?e.__v_isVNode===!0:!1}function Ft(e,t){return e.type===t.type&&e.key===t.key}const uo=({key:e})=>e??null,ds=({ref:e,ref_key:t,ref_for:s})=>(typeof e=="number"&&(e=""+e),e!=null?ee(e)||fe(e)||H(e)?{i:xe,r:e,k:t,f:!!s}:e:null);function d(e,t=null,s=null,n=0,i=null,o=e===Q?0:1,r=!1,l=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&uo(t),ref:t&&ds(t),scopeId:Ni,slotScopeIds:null,children:s,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:o,patchFlag:n,dynamicProps:i,dynamicChildren:null,appContext:null,ctx:xe};return l?(vs(a,s),o&128&&e.normalize(a)):s&&(a.shapeFlag|=ee(s)?8:16),Yt>0&&!r&&ye&&(a.patchFlag>0||o&6)&&a.patchFlag!==32&&ye.push(a),a}const le=sl;function sl(e,t=null,s=null,n=0,i=null,o=!1){if((!e||e===Pr)&&(e=it),co(e)){const l=kt(e,t,!0);return s&&vs(l,s),Yt>0&&!o&&ye&&(l.shapeFlag&6?ye[ye.indexOf(e)]=l:ye.push(l)),l.patchFlag=-2,l}if(pl(e)&&(e=e.__vccOpts),t){t=nl(t);let{class:l,style:a}=t;l&&!ee(l)&&(t.class=je(l)),z(a)&&(mn(a)&&!U(a)&&(a=de({},a)),t.style=an(a))}const r=ee(e)?1:lo(e)?128:mr(e)?64:z(e)?4:H(e)?2:0;return d(e,t,s,n,i,r,o,!0)}function nl(e){return e?mn(e)||Zi(e)?de({},e):e:null}function kt(e,t,s=!1,n=!1){const{props:i,ref:o,patchFlag:r,children:l,transition:a}=e,p=t?il(i||{},t):i,u={__v_isVNode:!0,__v_skip:!0,type:e.type,props:p,key:p&&uo(p),ref:t&&t.ref?s&&o?U(o)?o.concat(ds(t)):[o,ds(t)]:ds(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Q?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&&kt(e.ssContent),ssFallback:e.ssFallback&&kt(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return a&&n&&vn(u,a.clone(u)),u}function Ze(e=" ",t=0){return le(As,null,e,t)}function V(e="",t=!1){return t?(w(),pt(it,null,e)):le(it,null,e)}function Ue(e){return e==null||typeof e=="boolean"?le(it):U(e)?le(Q,null,e.slice()):co(e)?ze(e):le(As,null,String(e))}function ze(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:kt(e)}function vs(e,t){let s=0;const{shapeFlag:n}=e;if(t==null)t=null;else if(U(t))s=16;else if(typeof t=="object")if(n&65){const i=t.default;i&&(i._c&&(i._d=!1),vs(e,i()),i._c&&(i._d=!0));return}else{s=32;const i=t._;!i&&!Zi(t)?t._ctx=xe:i===3&&xe&&(xe.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else if(H(t)){if(n&65){vs(e,{default:t});return}t={default:t,_ctx:xe},s=32}else t=String(t),n&64?(s=16,t=[Ze(t)]):s=8;e.children=t,e.shapeFlag|=s}function il(...e){const t={};for(let s=0;sme||xe;let _s,tn;{const e=Cs(),t=(s,n)=>{let i;return(i=e[s])||(i=e[s]=[]),i.push(n),o=>{i.length>1?i.forEach(r=>r(o)):i[0](o)}};_s=t("__VUE_INSTANCE_SETTERS__",s=>me=s),tn=t("__VUE_SSR_SETTERS__",s=>Xt=s)}const es=e=>{const t=me;return _s(e),e.scope.on(),()=>{e.scope.off(),_s(t)}},Wn=()=>{me&&me.scope.off(),_s(null)};function fo(e){return e.vnode.shapeFlag&4}let Xt=!1;function cl(e,t=!1,s=!1){t&&tn(t);const{props:n,children:i}=e.vnode,o=fo(e);Kr(e,n,o,t),qr(e,i,s||t);const r=o?ul(e,t):void 0;return t&&tn(!1),r}function ul(e,t){const s=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,$r);const{setup:n}=s;if(n){Be();const i=e.setupContext=n.length>1?dl(e):null,o=es(e),r=Qt(n,e,0,[e.props,i]),l=fi(r);if(Ke(),o(),(l||e.sp)&&!Bt(e)&&ji(e),l){if(r.then(Wn,Wn),t)return r.then(a=>{Gn(e,a)}).catch(a=>{ks(a,e,0)});e.asyncDep=r}else Gn(e,r)}else po(e)}function Gn(e,t,s){H(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:z(t)&&(e.setupState=Ri(t)),po(e)}function po(e,t,s){const n=e.type;e.render||(e.render=n.render||He);{const i=es(e);Be();try{Ar(e)}finally{Ke(),i()}}}const fl={get(e,t){return ae(e,"get",""),e[t]}};function dl(e){const t=s=>{e.exposed=s||{}};return{attrs:new Proxy(e.attrs,fl),slots:e.slots,emit:e.emit,expose:t}}function Os(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Ri(Qo(e.exposed)),{get(t,s){if(s in t)return t[s];if(s in Kt)return Kt[s](e)},has(t,s){return s in t||s in Kt}})):e.proxy}function pl(e){return H(e)&&"__vccOpts"in e}const bt=(e,t)=>ir(e,t,Xt),hl="3.5.39";/** -* @vue/runtime-dom v3.5.39 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let sn;const zn=typeof window<"u"&&window.trustedTypes;if(zn)try{sn=zn.createPolicy("vue",{createHTML:e=>e})}catch{}const ho=sn?e=>sn.createHTML(e):e=>e,gl="http://www.w3.org/2000/svg",ml="http://www.w3.org/1998/Math/MathML",Ge=typeof document<"u"?document:null,qn=Ge&&Ge.createElement("template"),bl={insert:(e,t,s)=>{t.insertBefore(e,s||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,s,n)=>{const i=t==="svg"?Ge.createElementNS(gl,e):t==="mathml"?Ge.createElementNS(ml,e):s?Ge.createElement(e,{is:s}):Ge.createElement(e);return e==="select"&&n&&n.multiple!=null&&i.setAttribute("multiple",n.multiple),i},createText:e=>Ge.createTextNode(e),createComment:e=>Ge.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Ge.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,s,n,i,o){const r=s?s.previousSibling:t.lastChild;if(i&&(i===o||i.nextSibling))for(;t.insertBefore(i.cloneNode(!0),s),!(i===o||!(i=i.nextSibling)););else{qn.innerHTML=ho(n==="svg"?`${e}`:n==="mathml"?`${e}`:e);const l=qn.content;if(n==="svg"||n==="mathml"){const a=l.firstChild;for(;a.firstChild;)l.appendChild(a.firstChild);l.removeChild(a)}t.insertBefore(l,s)}return[r?r.nextSibling:t.firstChild,s?s.previousSibling:t.lastChild]}},vl=Symbol("_vtc");function _l(e,t,s){const n=e[vl];n&&(t=(t?[t,...n]:[...n]).join(" ")),t==null?e.removeAttribute("class"):s?e.setAttribute("class",t):e.className=t}const Jn=Symbol("_vod"),yl=Symbol("_vsh"),xl=Symbol(""),wl=/(?:^|;)\s*display\s*:/;function Sl(e,t,s){const n=e.style,i=ee(s);let o=!1;if(s&&!i){if(t)if(ee(t))for(const r of t.split(";")){const l=r.slice(0,r.indexOf(":")).trim();s[l]==null&&Ut(n,l,"")}else for(const r in t)s[r]==null&&Ut(n,r,"");for(const r in s){r==="display"&&(o=!0);const l=s[r];l!=null?Cl(e,r,!ee(t)&&t?t[r]:void 0,l)||Ut(n,r,l):Ut(n,r,"")}}else if(i){if(t!==s){const r=n[xl];r&&(s+=";"+r),n.cssText=s,o=wl.test(s)}}else t&&e.removeAttribute("style");Jn in e&&(e[Jn]=o?n.display:"",e[yl]&&(n.display="none"))}const Yn=/\s*!important$/;function Ut(e,t,s){if(U(s))s.forEach(n=>Ut(e,t,n));else if(s==null&&(s=""),t.startsWith("--"))e.setProperty(t,s);else{const n=Tl(e,t);Yn.test(s)?e.setProperty(rt(n),s.replace(Yn,""),"important"):e[n]=s}}const Xn=["Webkit","Moz","ms"],Ks={};function Tl(e,t){const s=Ks[t];if(s)return s;let n=Ce(t);if(n!=="filter"&&n in e)return Ks[t]=n;n=hi(n);for(let i=0;iWs||(Ol.then(()=>Ws=0),Ws=Date.now());function Rl(e,t){const s=n=>{if(!n._vts)n._vts=Date.now();else if(n._vts<=s.attached)return;const i=s.value;if(U(i)){const o=n.stopImmediatePropagation;n.stopImmediatePropagation=()=>{o.call(n),n._stopped=!0};const r=i.slice(),l=[n];for(let a=0;ae.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Il=(e,t,s,n,i,o)=>{const r=i==="svg";t==="class"?_l(e,n,r):t==="style"?Sl(e,s,n):xs(t)?ws(t)||kl(e,t,s,n,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Dl(e,t,n,r))?(ei(e,t,n),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Qn(e,t,n,r,o,t!=="value")):e._isVueCE&&(Fl(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!ee(n)))?ei(e,Ce(t),n,o,t):(t==="true-value"?e._trueValue=n:t==="false-value"&&(e._falseValue=n),Qn(e,t,n,r))};function Dl(e,t,s,n){if(n)return!!(t==="innerHTML"||t==="textContent"||t in e&&si(t)&&H(s));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 i=e.tagName;if(i==="IMG"||i==="VIDEO"||i==="CANVAS"||i==="SOURCE")return!1}return si(t)&&ee(s)?!1:t in e}function Fl(e,t){const s=e._def.props;if(!s)return!1;const n=Ce(t);return Array.isArray(s)?s.some(i=>Ce(i)===n):Object.keys(s).some(i=>Ce(i)===n)}const ot=e=>{const t=e.props["onUpdate:modelValue"]||!1;return U(t)?s=>us(t,s):t};function Ll(e){e.target.composing=!0}function ni(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Se=Symbol("_assign");function ii(e,t,s){return t&&(e=e.trim()),s&&(e=Ts(e)),e}const ve={created(e,{modifiers:{lazy:t,trim:s,number:n}},i){e[Se]=ot(i);const o=n||i.props&&i.props.type==="number";Ye(e,t?"change":"input",r=>{r.target.composing||e[Se](ii(e.value,s,o))}),(s||o)&&Ye(e,"change",()=>{e.value=ii(e.value,s,o)}),t||(Ye(e,"compositionstart",Ll),Ye(e,"compositionend",ni),Ye(e,"change",ni))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:s,modifiers:{lazy:n,trim:i,number:o}},r){if(e[Se]=ot(r),e.composing)return;const l=(o||e.type==="number")&&!/^0\d/.test(e.value)?Ts(e.value):e.value,a=t??"";if(l===a)return;const p=e.getRootNode();(p instanceof Document||p instanceof ShadowRoot)&&p.activeElement===e&&e.type!=="range"&&(n&&t===s||i&&e.value.trim()===a)||(e.value=a)}},Ul={deep:!0,created(e,t,s){e[Se]=ot(s),Ye(e,"change",()=>{const n=e._modelValue,i=Pt(e),o=e.checked,r=e[Se];if(U(n)){const l=cn(n,i),a=l!==-1;if(o&&!a)r(n.concat(i));else if(!o&&a){const p=[...n];p.splice(l,1),r(p)}}else if(At(n)){const l=new Set(n);o?l.add(i):l.delete(i),r(l)}else r(go(e,o))})},mounted:oi,beforeUpdate(e,t,s){e[Se]=ot(s),oi(e,t,s)}};function oi(e,{value:t,oldValue:s},n){e._modelValue=t;let i;if(U(t))i=cn(t,n.props.value)>-1;else if(At(t))i=t.has(n.props.value);else{if(t===s)return;i=nt(t,go(e,!0))}e.checked!==i&&(e.checked=i)}const Nl={created(e,{value:t},s){e.checked=nt(t,s.props.value),e[Se]=ot(s),Ye(e,"change",()=>{e[Se](Pt(e))})},beforeUpdate(e,{value:t,oldValue:s},n){e[Se]=ot(n),t!==s&&(e.checked=nt(t,n.props.value))}},ys={deep:!0,created(e,{value:t,modifiers:{number:s}},n){const i=At(t);Ye(e,"change",()=>{const o=Array.prototype.filter.call(e.options,r=>r.selected).map(r=>s?Ts(Pt(r)):Pt(r));e[Se](e.multiple?i?new Set(o):o:o[0]),e._assigning=!0,Di(()=>{e._assigning=!1})}),e[Se]=ot(n)},mounted(e,{value:t}){ri(e,t)},beforeUpdate(e,t,s){e[Se]=ot(s)},updated(e,{value:t}){e._assigning||ri(e,t)}};function ri(e,t){const s=e.multiple,n=U(t);if(!(s&&!n&&!At(t))){for(let i=0,o=e.options.length;iString(p)===String(l)):r.selected=cn(t,l)>-1}else r.selected=t.has(l);else if(nt(Pt(r),t)){e.selectedIndex!==i&&(e.selectedIndex=i);return}}!s&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function Pt(e){return"_value"in e?e._value:e.value}function go(e,t){const s=t?"_trueValue":"_falseValue";return s in e?e[s]:t}const Hl={created(e,t,s){cs(e,t,s,null,"created")},mounted(e,t,s){cs(e,t,s,null,"mounted")},beforeUpdate(e,t,s,n){cs(e,t,s,n,"beforeUpdate")},updated(e,t,s,n){cs(e,t,s,n,"updated")}};function Vl(e,t){switch(e){case"SELECT":return ys;case"TEXTAREA":return ve;default:switch(t){case"checkbox":return Ul;case"radio":return Nl;default:return ve}}}function cs(e,t,s,n,i){const r=Vl(e.tagName,s.props&&s.props.type)[i];r&&r(e,t,s,n)}const jl=["ctrl","shift","alt","meta"],Bl={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)=>jl.some(s=>e[`${s}Key`]&&!t.includes(s))},Kl=(e,t)=>{if(!e)return e;const s=e._withMods||(e._withMods={}),n=t.join(".");return s[n]||(s[n]=((i,...o)=>{for(let r=0;r{const s=e._withKeys||(e._withKeys={}),n=t.join(".");return s[n]||(s[n]=(i=>{if(!("key"in i))return;const o=rt(i.key);if(t.some(r=>r===o||Wl[r]===o))return e(i)}))},zl=de({patchProp:Il},bl);let li;function ql(){return li||(li=Yr(zl))}const Jl=((...e)=>{const t=ql().createApp(...e),{mount:s}=t;return t.mount=n=>{const i=Xl(n);if(!i)return;const o=t._component;!H(o)&&!o.render&&!o.template&&(o.template=i.innerHTML),i.nodeType===1&&(i.textContent="");const r=s(i,!1,Yl(i));return i instanceof Element&&(i.removeAttribute("v-cloak"),i.setAttribute("data-v-app","")),r},t});function Yl(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Xl(e){return ee(e)?document.querySelector(e):e}const mo="dh-panel-theme";function Zl(){var e;try{const t=localStorage.getItem(mo);if(t==="dark"||t==="light")return t}catch{}return(e=window.matchMedia)!=null&&e.call(window,"(prefers-color-scheme: dark)").matches?"dark":"light"}const Ct=j(Zl());function bo(e){Ct.value=e,document.documentElement.classList.toggle("dark",e==="dark");try{localStorage.setItem(mo,e)}catch{}}function ai(){bo(Ct.value==="dark"?"light":"dark")}bo(Ct.value);const nn="dh-panel-token";function Ql(){try{return localStorage.getItem(nn)||""}catch{return""}}const $t=j(Ql()),ce=j(null),ht=bt(()=>{var e;return((e=ce.value)==null?void 0:e.role)==="superadmin"}),ci=bt(()=>{var e,t;return((e=ce.value)==null?void 0:e.role)==="admin"||((t=ce.value)==null?void 0:t.role)==="superadmin"});function vo(e){$t.value=e;try{e?localStorage.setItem(nn,e):localStorage.removeItem(nn)}catch{}}class ea extends Error{constructor(t,s,n){super(t),this.status=s,this.body=n}}function ta(e,t){if(!e||typeof e!="object")return`HTTP ${t}`;if(e.error)return e.error;const s=Object.entries(e.data||{}).map(([n,i])=>`${n}: ${(i==null?void 0:i.message)||i}`).filter(Boolean);return s.length?s.join("; "):e.message||`HTTP ${t}`}async function ne(e,{method:t="GET",body:s,auth:n=!0}={}){const i={};s!==void 0&&(i["Content-Type"]="application/json"),n&&$t.value&&(i.Authorization=$t.value);const o=await fetch(e,{method:t,headers:i,body:s===void 0?void 0:JSON.stringify(s)}),r=await o.text();let l=null;try{l=r?JSON.parse(r):null}catch{l=null}if(!o.ok)throw o.status===401&&n&&wn(),new ea(ta(l,o.status),o.status,l);return l}async function sa(e,t){const s=await ne("/api/auth/login",{method:"POST",body:{email:e,password:t},auth:!1});return vo(s.token),await _o(),ce.value}async function _o(){return ce.value=await ne("/api/identity"),ce.value}function wn(){vo(""),ce.value=null}async function na(){if(!$t.value)return null;try{return await _o()}catch{return wn(),null}}const ia={class:"mx-auto flex w-full max-w-sm flex-col gap-5 pt-24"},oa={class:"dh-card p-6"},ra={key:0,class:"rounded-control bg-danger-soft px-3 py-2 text-xs text-danger"},la=["disabled"],aa={__name:"LoginView",emits:["authenticated"],setup(e,{emit:t}){const s=t,n=j(""),i=j(""),o=j(""),r=j(!1),l=bt(()=>n.value.trim()!==""&&i.value!==""&&!r.value);async function a(){if(l.value){o.value="",r.value=!0;try{const p=await sa(n.value.trim(),i.value);s("authenticated",p)}catch(p){o.value=p.status===400||p.status===404?"Invalid email or password.":p.message||"Could not sign in.",i.value=""}finally{r.value=!1}}}return(p,u)=>(w(),E("div",ia,[d("div",oa,[u[4]||(u[4]=d("h1",{class:"text-lg font-bold tracking-[-0.02em] text-strong"},"Sign in",-1)),u[5]||(u[5]=d("p",{class:"mt-1 mb-5 text-sm text-body"}," Superadmin console for the DriverVault API Server. ",-1)),d("form",{class:"flex flex-col gap-4",onSubmit:Kl(a,["prevent"])},[d("div",null,[u[2]||(u[2]=d("label",{class:"dh-label",for:"login-email"},"Email",-1)),ue(d("input",{id:"login-email","onUpdate:modelValue":u[0]||(u[0]=h=>n.value=h),class:"dh-input",type:"email",autocomplete:"username",autofocus:"",placeholder:"you@example.com"},null,512),[[ve,n.value]])]),d("div",null,[u[3]||(u[3]=d("label",{class:"dh-label",for:"login-password"},"Password",-1)),ue(d("input",{id:"login-password","onUpdate:modelValue":u[1]||(u[1]=h=>i.value=h),class:"dh-input",type:"password",autocomplete:"current-password",placeholder:"••••••••"},null,512),[[ve,i.value]])]),o.value?(w(),E("p",ra,D(o.value),1)):V("",!0),d("button",{class:"dh-btn w-full",type:"submit",disabled:!l.value},D(r.value?"Signing in…":"Sign in"),9,la)],32)]),u[6]||(u[6]=d("p",{class:"eyebrow text-center"}," Authenticates against PocketBase through this server ",-1))]))}},ca={class:"dh-card overflow-hidden"},ua={class:"flex items-center justify-between border-b border-subtle px-5 py-4"},fa={key:0,class:"dh-pill bg-danger-soft text-danger"},da={key:0,class:"px-5 py-4 text-sm text-danger"},pa={key:1,class:"w-full text-left text-sm"},ha={class:"px-5 py-3 font-medium text-strong"},ga={class:"data px-5 py-3 text-xs text-muted"},ma={class:"data px-5 py-3 text-right text-xs text-muted"},ba={class:"px-5 py-3 text-right"},va={key:2,class:"px-5 py-4 text-sm text-muted"},_a={__name:"StatusCard",setup(e){const t=j(null),s=j("");let n=null;async function i(){try{t.value=await ne("/api/status",{auth:!1}),s.value=""}catch(r){t.value=null,s.value=r.message||"unreachable"}}vt(()=>{i(),n=setInterval(i,1e4)}),_n(()=>clearInterval(n));const o=r=>r==="ok"?"bg-success-soft text-success":"bg-danger-soft text-danger";return(r,l)=>(w(),E("div",ca,[d("div",ua,[l[1]||(l[1]=d("div",{class:"text-base font-bold tracking-[-0.02em] text-strong"},"Status",-1)),s.value?(w(),E("span",fa,[...l[0]||(l[0]=[d("span",{class:"h-1.5 w-1.5 rounded-full bg-current"},null,-1),Ze("unreachable ",-1)])])):V("",!0)]),s.value?(w(),E("div",da,D(s.value),1)):t.value?(w(),E("table",pa,[d("tbody",null,[(w(!0),E(Q,null,Te([{key:"apiServer",label:"API Server",h:t.value.apiServer},{key:"pocketBase",label:"PocketBase",h:t.value.pocketBase},{key:"webApp",label:"Web App",h:t.value.webApp}],a=>(w(),E("tr",{key:a.key,class:"border-t border-subtle first:border-t-0"},[d("td",ha,D(a.label),1),d("td",ga,D(a.h.url||"this process"),1),d("td",ma,D(a.h.latencyMs!=null?a.h.latencyMs+"ms":"—"),1),d("td",ba,[d("span",{class:je(["dh-pill",o(a.h.status)])},[l[2]||(l[2]=d("span",{class:"h-1.5 w-1.5 rounded-full bg-current"},null,-1)),Ze(D(a.h.status),1)],2)])]))),128))])])):(w(),E("div",va,"Checking…"))]))}},ya={class:"dh-card overflow-hidden"},xa={class:"flex items-center justify-between border-b border-subtle px-5 py-4"},wa={class:"flex flex-col gap-4 px-5 py-4"},Sa={class:"grid gap-4 sm:grid-cols-2"},Ta=["placeholder"],Ca={key:0,class:"data text-xs text-muted"},Ea={key:1,class:"rounded-control bg-info-soft px-3 py-2 text-xs text-info"},ka={key:2,class:"rounded-control bg-danger-soft px-3 py-2 text-xs text-danger"},Pa={class:"flex items-center gap-2"},$a=["disabled"],Aa=["disabled"],Oa={__name:"PocketBaseCard",setup(e){const t=j(null),s=j({url:"",adminEmail:"",adminPassword:""}),n=j(null),i=j(""),o=j(""),r=j(!1);async function l(){try{t.value=await ne("/api/admin/pb-config"),s.value={url:t.value.url,adminEmail:t.value.adminEmail,adminPassword:""},n.value=t.value.probe}catch(u){i.value=u.message}}vt(l);async function a(){i.value="",o.value="",r.value=!0;try{n.value=await ne("/api/admin/pb-config/test",{method:"POST",body:s.value}),o.value=n.value.superuser?"Connection OK — superuser authenticated.":n.value.reachable?"PocketBase is reachable, but the service account did not authenticate.":"PocketBase is not reachable at that address."}catch(u){i.value=u.message}finally{r.value=!1}}async function p(){i.value="",o.value="",r.value=!0;try{const u=await ne("/api/admin/pb-config",{method:"PUT",body:s.value});t.value=u.config,n.value=u.config.probe,s.value.adminPassword="",o.value=u.warning||"Saved. The server is now using this PocketBase."}catch(u){i.value=u.message}finally{r.value=!1}}return(u,h)=>{var T,$;return w(),E("div",ya,[d("div",xa,[h[4]||(h[4]=d("div",null,[d("div",{class:"text-base font-bold tracking-[-0.02em] text-strong"},"PocketBase"),d("p",{class:"mt-0.5 text-xs text-muted"},"Database connection used by every endpoint")],-1)),n.value?(w(),E("span",{key:0,class:je(["dh-pill",n.value.superuser?"bg-success-soft text-success":n.value.reachable?"bg-warning-soft text-warning":"bg-danger-soft text-danger"])},[h[3]||(h[3]=d("span",{class:"h-1.5 w-1.5 rounded-full bg-current"},null,-1)),Ze(" "+D(n.value.superuser?"connected":n.value.reachable?"no superuser":"unreachable"),1)],2)):V("",!0)]),d("div",wa,[d("div",null,[h[5]||(h[5]=d("label",{class:"dh-label",for:"pb-url"},"Base URL",-1)),ue(d("input",{id:"pb-url","onUpdate:modelValue":h[0]||(h[0]=F=>s.value.url=F),class:"dh-input",placeholder:"http://10.2.1.10:8027"},null,512),[[ve,s.value.url]])]),d("div",Sa,[d("div",null,[h[6]||(h[6]=d("label",{class:"dh-label",for:"pb-email"},"Superuser email",-1)),ue(d("input",{id:"pb-email","onUpdate:modelValue":h[1]||(h[1]=F=>s.value.adminEmail=F),class:"dh-input",autocomplete:"off"},null,512),[[ve,s.value.adminEmail]])]),d("div",null,[h[7]||(h[7]=d("label",{class:"dh-label",for:"pb-password"},"Superuser password",-1)),ue(d("input",{id:"pb-password","onUpdate:modelValue":h[2]||(h[2]=F=>s.value.adminPassword=F),class:"dh-input",type:"password",autocomplete:"new-password",placeholder:(T=t.value)!=null&&T.adminConfigured?"unchanged":"not set"},null,8,Ta),[[ve,s.value.adminPassword]])])]),($=n.value)!=null&&$.detail?(w(),E("p",Ca,D(n.value.detail),1)):V("",!0),o.value?(w(),E("p",Ea,D(o.value),1)):V("",!0),i.value?(w(),E("p",ka,D(i.value),1)):V("",!0),d("div",Pa,[d("button",{class:"dh-btn",disabled:r.value,onClick:p},"Save & apply",8,$a),d("button",{class:"dh-btn-ghost",disabled:r.value,onClick:a},"Test connection",8,Aa),h[8]||(h[8]=d("span",{class:"flex-1"},null,-1)),h[9]||(h[9]=d("span",{class:"eyebrow"},"persisted to .env",-1))])])])}}},Ma={class:"dh-card overflow-hidden"},Ra={class:"flex items-center justify-between border-b border-subtle px-5 py-4"},Ia={key:0,class:"border-b border-subtle bg-sunken px-5 py-4"},Da={class:"grid gap-3 sm:grid-cols-3"},Fa=["disabled"],La={key:1,class:"border-b border-subtle px-5 py-3 text-xs text-danger"},Ua={key:2,class:"px-5 py-6 text-center text-sm text-muted"},Na={class:"flex items-center gap-3 px-5 py-3"},Ha=["onClick"],Va={class:"font-semibold text-strong"},ja={class:"dh-pill bg-sunken text-muted"},Ba={key:0,class:"text-xs text-muted"},Ka=["disabled","onClick"],Wa=["disabled","onClick"],Ga={key:0,class:"bg-sunken px-5 py-4"},za={key:0,class:"data mb-3 text-xs text-muted"},qa={key:1,class:"grid gap-3 sm:grid-cols-2"},Ja={class:"dh-label"},Ya={key:0,class:"text-danger"},Xa=["onUpdate:modelValue"],Za=["value"],Qa=["onUpdate:modelValue","type","placeholder"],ec={key:2,class:"mt-1 text-xs text-muted"},tc={key:2,class:"text-xs text-muted"},sc={key:3,class:"mt-4"},nc={class:"data flex flex-col gap-1 text-xs text-muted"},ic={class:"text-strong"},oc={key:0},rc={key:1},lc={key:4,class:"data mt-3 text-xs text-body"},ac={class:"mt-4 flex items-center gap-2"},cc=["disabled","onClick"],uc=["disabled","onClick"],fc=["disabled","onClick"],dc={key:5,class:"eyebrow mt-2"},pc={__name:"PluginsCard",setup(e){const t=j([]),s=j(""),n=j(!1),i=j(null),o=qt({}),r=qt({}),l=j(!1),a=j({name:"",baseURL:"",provider:""});async function p(){try{const S=await ne("/api/admin/plugins");t.value=S.plugins||[],s.value=""}catch(S){s.value=S.message}}vt(p);function u(S){var C;if(i.value===S.name){i.value=null;return}const x={};for(const M of S.configFields||[])x[M.key]=((C=S.config)==null?void 0:C[M.key])??"";o[S.name]=x,i.value=S.name}async function h(S,x){n.value=!0,r[S.name]="";try{const C=await ne(`/api/admin/plugins/${encodeURIComponent(S.name)}`,{method:"PUT",body:{enabled:x,config:o[S.name]??{}}});r[S.name]=C.warning||"Saved.",await p()}catch(C){r[S.name]=C.message}finally{n.value=!1}}async function T(S){n.value=!0,r[S.name]="Checking…";try{const x=await ne(`/api/admin/plugins/${encodeURIComponent(S.name)}/health`,{method:"POST"});r[S.name]=`${x.health.status}${x.health.detail?" — "+x.health.detail:""}`,await p()}catch(x){r[S.name]=x.message}finally{n.value=!1}}async function $(S){if(confirm(`Remove the external plugin "${S.name}"? Its saved config is deleted.`)){n.value=!0;try{await ne(`/api/admin/plugins/${encodeURIComponent(S.name)}`,{method:"DELETE"}),i.value===S.name&&(i.value=null),await p()}catch(x){r[S.name]=x.message}finally{n.value=!1}}}async function F(){n.value=!0,s.value="";try{await ne("/api/admin/plugins",{method:"POST",body:a.value}),a.value={name:"",baseURL:"",provider:""},l.value=!1,await p()}catch(S){s.value=S.message}finally{n.value=!1}}const y=S=>S==="ok"?"bg-success-soft text-success":S==="degraded"?"bg-warning-soft text-warning":"bg-danger-soft text-danger";return(S,x)=>(w(),E("div",Ma,[d("div",Ra,[x[4]||(x[4]=d("div",null,[d("div",{class:"text-base font-bold tracking-[-0.02em] text-strong"},"Plugins"),d("p",{class:"mt-0.5 text-xs text-muted"},"Third-party service integrations")],-1)),d("button",{class:"dh-btn-ghost",onClick:x[0]||(x[0]=C=>l.value=!l.value)},D(l.value?"Cancel":"Register external"),1)]),l.value?(w(),E("div",Ia,[d("div",Da,[d("div",null,[x[5]||(x[5]=d("label",{class:"dh-label"},"Name",-1)),ue(d("input",{"onUpdate:modelValue":x[1]||(x[1]=C=>a.value.name=C),class:"dh-input",placeholder:"acme-parts"},null,512),[[ve,a.value.name]])]),d("div",null,[x[6]||(x[6]=d("label",{class:"dh-label"},"Base URL",-1)),ue(d("input",{"onUpdate:modelValue":x[2]||(x[2]=C=>a.value.baseURL=C),class:"dh-input",placeholder:"http://127.0.0.1:9100"},null,512),[[ve,a.value.baseURL]])]),d("div",null,[x[7]||(x[7]=d("label",{class:"dh-label"},"Provider",-1)),ue(d("input",{"onUpdate:modelValue":x[3]||(x[3]=C=>a.value.provider=C),class:"dh-input",placeholder:"ACME Corp"},null,512),[[ve,a.value.provider]])])]),d("button",{class:"dh-btn mt-3",disabled:n.value||!a.value.name||!a.value.baseURL,onClick:F}," Register ",8,Fa)])):V("",!0),s.value?(w(),E("p",La,D(s.value),1)):V("",!0),t.value.length?V("",!0):(w(),E("p",Ua," No plugins yet. Register an external one above, or compile a built-in connector. ")),(w(!0),E(Q,null,Te(t.value,C=>(w(),E("div",{key:C.name,class:"border-t border-subtle first:border-t-0"},[d("div",Na,[d("button",{class:"flex flex-1 items-center gap-3 text-left",onClick:M=>u(C)},[d("span",Va,D(C.name),1),d("span",ja,D(C.kind||"builtin"),1),C.provider?(w(),E("span",Ba,D(C.provider),1)):V("",!0),C.health?(w(),E("span",{key:1,class:je(["dh-pill",y(C.health.status)])},[x[8]||(x[8]=d("span",{class:"h-1.5 w-1.5 rounded-full bg-current"},null,-1)),Ze(D(C.health.status),1)],2)):V("",!0)],8,Ha),d("span",{class:je(["dh-pill",C.enabled?"bg-success-soft text-success":"bg-sunken text-muted"])},D(C.enabled?"enabled":"disabled"),3),d("button",{class:"dh-btn-ghost",disabled:n.value,onClick:M=>T(C)},"Health",8,Ka),d("button",{class:"dh-btn-ghost",disabled:n.value,onClick:M=>u(C)},D(i.value===C.name?"Close":"Configure"),9,Wa)]),i.value===C.name?(w(),E("div",Ga,[C.baseURL?(w(),E("div",za,D(C.baseURL),1)):V("",!0),(C.configFields||[]).length?(w(),E("div",qa,[(w(!0),E(Q,null,Te(C.configFields,M=>(w(),E("div",{key:M.key},[d("label",Ja,[Ze(D(M.label||M.key),1),M.required?(w(),E("span",Ya," *")):V("",!0)]),M.type==="select"?ue((w(),E("select",{key:0,"onUpdate:modelValue":R=>o[C.name][M.key]=R,class:"dh-select"},[(w(!0),E(Q,null,Te(M.options||[],R=>(w(),E("option",{key:R.value,value:R.value},D(R.label||R.value),9,Za))),128))],8,Xa)),[[ys,o[C.name][M.key]]]):ue((w(),E("input",{key:1,"onUpdate:modelValue":R=>o[C.name][M.key]=R,class:"dh-input",type:M.type==="password"?"password":M.type==="number"?"number":"text",placeholder:M.default||"",autocomplete:"off"},null,8,Qa)),[[Hl,o[C.name][M.key]]]),M.help?(w(),E("p",ec,D(M.help),1)):V("",!0)]))),128))])):(w(),E("p",tc,"This plugin takes no configuration.")),(C.capabilities||[]).length?(w(),E("div",sc,[x[9]||(x[9]=d("div",{class:"eyebrow mb-1.5"},"Capabilities",-1)),d("ul",nc,[(w(!0),E(Q,null,Te(C.capabilities,M=>(w(),E("li",{key:M.id},[d("span",ic,D(M.id),1),M.method||M.endpoint?(w(),E("span",oc," — "+D(M.method)+" "+D(M.endpoint),1)):V("",!0),M.description?(w(),E("span",rc," · "+D(M.description),1)):V("",!0)]))),128))])])):V("",!0),r[C.name]?(w(),E("p",lc,D(r[C.name]),1)):V("",!0),d("div",ac,[d("button",{class:"dh-btn",disabled:n.value,onClick:M=>h(C,!0)},D(C.enabled?"Save":"Save & enable"),9,cc),C.enabled?(w(),E("button",{key:0,class:"dh-btn-ghost",disabled:n.value,onClick:M=>h(C,!1)}," Disable ",8,uc)):V("",!0),x[10]||(x[10]=d("span",{class:"flex-1"},null,-1)),C.kind==="external"?(w(),E("button",{key:1,class:"dh-btn-danger",disabled:n.value,onClick:M=>$(C)}," Remove ",8,fc)):V("",!0)]),C.kind!=="external"?(w(),E("p",dc," Built-in plugins can be disabled but not removed ")):V("",!0)])):V("",!0)]))),128))]))}},hc={class:"dh-card overflow-hidden"},gc={class:"flex items-center justify-between border-b border-subtle px-5 py-4"},mc={class:"mt-0.5 text-xs text-muted"},bc={key:0,class:"border-b border-subtle px-5 py-3 text-xs text-danger"},vc={key:1,class:"border-b border-subtle bg-sunken px-5 py-4"},_c={class:"grid gap-3 sm:grid-cols-2"},yc={class:"dh-label"},xc=["value"],wc={key:0},Sc=["value"],Tc={class:"mt-3 flex items-center gap-2"},Cc=["disabled"],Ec=["disabled"],kc={key:2,class:"px-5 py-6 text-center text-sm text-muted"},Pc={key:3,class:"w-full text-left text-sm"},$c={class:"data px-5 py-2.5 text-xs text-strong"},Ac={key:0,class:"eyebrow ml-1"},Oc={class:"px-5 py-2.5 text-body"},Mc={class:"px-5 py-2.5 text-body"},Rc={class:"px-5 py-2.5"},Ic={class:"px-5 py-2.5 text-right whitespace-nowrap"},Dc=["onClick"],Fc=["disabled","onClick"],Lc={__name:"UsersCard",setup(e){const t=j([]),s=j([]),n=j(""),i=j(!1),o=j(null),r=j({}),l=bt(()=>ht.value?["user","admin","superadmin"]:["user","admin"]);async function a(){try{const[y,S]=await Promise.all([ne("/api/users"),ne("/api/orgs")]);t.value=y.users||[],s.value=S.organizations||[],n.value=""}catch(y){n.value=y.message}}vt(a);function p(){var y;o.value="new",r.value={email:"",name:"",password:"",role:"user",organization:ht.value?"":((y=ce.value)==null?void 0:y.organization)||""}}function u(y){o.value=y.id,r.value={email:y.email,name:y.name||"",password:"",role:y.role,organization:y.organization||""}}function h(){o.value=null,n.value=""}async function T(){i.value=!0,n.value="";try{if(o.value==="new")await ne("/api/users",{method:"POST",body:r.value});else{const y={...r.value};y.password||delete y.password,await ne(`/api/users/${o.value}`,{method:"PATCH",body:y})}o.value=null,await a()}catch(y){n.value=y.message}finally{i.value=!1}}async function $(y){if(confirm(`Delete ${y.email}? This cannot be undone.`)){i.value=!0,n.value="";try{await ne(`/api/users/${y.id}`,{method:"DELETE"}),await a()}catch(S){n.value=S.message}finally{i.value=!1}}}const F=y=>y==="superadmin"?"bg-info-soft text-info":y==="admin"?"bg-warning-soft text-warning":"bg-sunken text-muted";return(y,S)=>(w(),E("div",hc,[d("div",gc,[d("div",null,[S[5]||(S[5]=d("div",{class:"text-base font-bold tracking-[-0.02em] text-strong"},"Users",-1)),d("p",mc,D(se(ht)?"All organizations":"Your organization"),1)]),d("button",{class:"dh-btn",onClick:p},"New user")]),n.value?(w(),E("p",bc,D(n.value),1)):V("",!0),o.value?(w(),E("div",vc,[d("div",_c,[d("div",null,[S[6]||(S[6]=d("label",{class:"dh-label"},"Email",-1)),ue(d("input",{"onUpdate:modelValue":S[0]||(S[0]=x=>r.value.email=x),class:"dh-input",type:"email",autocomplete:"off"},null,512),[[ve,r.value.email]])]),d("div",null,[S[7]||(S[7]=d("label",{class:"dh-label"},"Name",-1)),ue(d("input",{"onUpdate:modelValue":S[1]||(S[1]=x=>r.value.name=x),class:"dh-input",autocomplete:"off"},null,512),[[ve,r.value.name]])]),d("div",null,[d("label",yc," Password"+D(o.value==="new"?"":" (blank = unchanged)"),1),ue(d("input",{"onUpdate:modelValue":S[2]||(S[2]=x=>r.value.password=x),class:"dh-input",type:"password",autocomplete:"new-password",placeholder:"min 8 characters"},null,512),[[ve,r.value.password]])]),d("div",null,[S[8]||(S[8]=d("label",{class:"dh-label"},"Role",-1)),ue(d("select",{"onUpdate:modelValue":S[3]||(S[3]=x=>r.value.role=x),class:"dh-select"},[(w(!0),E(Q,null,Te(l.value,x=>(w(),E("option",{key:x,value:x},D(x),9,xc))),128))],512),[[ys,r.value.role]])]),se(ht)?(w(),E("div",wc,[S[10]||(S[10]=d("label",{class:"dh-label"},"Organization",-1)),ue(d("select",{"onUpdate:modelValue":S[4]||(S[4]=x=>r.value.organization=x),class:"dh-select"},[S[9]||(S[9]=d("option",{value:""},"— none —",-1)),(w(!0),E(Q,null,Te(s.value,x=>(w(),E("option",{key:x.id,value:x.id},D(x.name),9,Sc))),128))],512),[[ys,r.value.organization]])])):V("",!0)]),d("div",Tc,[d("button",{class:"dh-btn",disabled:i.value,onClick:T},D(o.value==="new"?"Create":"Save"),9,Cc),d("button",{class:"dh-btn-ghost",disabled:i.value,onClick:h},"Cancel",8,Ec)])])):V("",!0),t.value.length?(w(),E("table",Pc,[S[11]||(S[11]=d("thead",null,[d("tr",{class:"[&>th]:eyebrow [&>th]:px-5 [&>th]:py-2.5 [&>th]:font-medium"},[d("th",null,"Email"),d("th",null,"Name"),d("th",null,"Organization"),d("th",null,"Role"),d("th")])],-1)),d("tbody",null,[(w(!0),E(Q,null,Te(t.value,x=>{var C,M;return w(),E("tr",{key:x.id,class:"border-t border-subtle transition-colors hover:bg-sunken"},[d("td",$c,[Ze(D(x.email)+" ",1),x.id===((C=se(ce))==null?void 0:C.id)?(w(),E("span",Ac,"you")):V("",!0)]),d("td",Oc,D(x.name||"—"),1),d("td",Mc,D(x.organizationName||"—"),1),d("td",Rc,[d("span",{class:je(["dh-pill",F(x.role)])},D(x.role),3)]),d("td",Ic,[d("button",{class:"dh-btn-ghost",onClick:R=>u(x)},"Edit",8,Dc),x.id!==((M=se(ce))==null?void 0:M.id)?(w(),E("button",{key:0,class:"dh-btn-danger ml-1.5",disabled:i.value,onClick:R=>$(x)}," Delete ",8,Fc)):V("",!0)])])}),128))])])):(w(),E("p",kc,"No users."))]))}},Uc={class:"dh-card overflow-hidden"},Nc={class:"flex items-center justify-between border-b border-subtle px-5 py-4"},Hc={key:0,class:"border-b border-subtle px-5 py-3 text-xs text-danger"},Vc={key:1,class:"border-b border-subtle bg-sunken px-5 py-4"},jc={class:"mt-3 flex items-center gap-2"},Bc=["disabled"],Kc=["disabled"],Wc={key:2,class:"px-5 py-6 text-center text-sm text-muted"},Gc={key:3,class:"w-full text-left text-sm"},zc={class:"px-5 py-2.5 font-medium text-strong"},qc={class:"data px-5 py-2.5 text-xs text-muted"},Jc={class:"px-5 py-2.5 text-right whitespace-nowrap"},Yc=["onClick"],Xc=["disabled","onClick"],Zc={__name:"OrgsCard",setup(e){const t=j([]),s=j(""),n=j(!1),i=j(null),o=j("");async function r(){try{const T=await ne("/api/orgs");t.value=T.organizations||[],s.value=""}catch(T){s.value=T.message}}vt(r);function l(){i.value="new",o.value=""}function a(T){i.value=T.id,o.value=T.name}function p(){i.value=null,s.value=""}async function u(){n.value=!0,s.value="";try{i.value==="new"?await ne("/api/orgs",{method:"POST",body:{name:o.value}}):await ne(`/api/orgs/${i.value}`,{method:"PATCH",body:{name:o.value}}),i.value=null,await r()}catch(T){s.value=T.message}finally{n.value=!1}}async function h(T){if(confirm(`Delete the organization "${T.name}"?`)){n.value=!0,s.value="";try{await ne(`/api/orgs/${T.id}`,{method:"DELETE"}),await r()}catch($){s.value=$.message}finally{n.value=!1}}}return(T,$)=>(w(),E("div",Uc,[d("div",Nc,[$[1]||($[1]=d("div",null,[d("div",{class:"text-base font-bold tracking-[-0.02em] text-strong"},"Organizations"),d("p",{class:"mt-0.5 text-xs text-muted"},"Tenants users belong to")],-1)),se(ht)?(w(),E("button",{key:0,class:"dh-btn",onClick:l},"New organization")):V("",!0)]),s.value?(w(),E("p",Hc,D(s.value),1)):V("",!0),i.value?(w(),E("div",Vc,[$[2]||($[2]=d("label",{class:"dh-label"},"Name",-1)),ue(d("input",{"onUpdate:modelValue":$[0]||($[0]=F=>o.value=F),class:"dh-input",placeholder:"Acme Fleet",onKeyup:Gl(u,["enter"])},null,544),[[ve,o.value]]),d("div",jc,[d("button",{class:"dh-btn",disabled:n.value||!o.value.trim(),onClick:u},D(i.value==="new"?"Create":"Save"),9,Bc),d("button",{class:"dh-btn-ghost",disabled:n.value,onClick:p},"Cancel",8,Kc)])])):V("",!0),t.value.length?(w(),E("table",Gc,[$[3]||($[3]=d("thead",null,[d("tr",{class:"[&>th]:eyebrow [&>th]:px-5 [&>th]:py-2.5 [&>th]:font-medium"},[d("th",null,"Name"),d("th",null,"ID"),d("th")])],-1)),d("tbody",null,[(w(!0),E(Q,null,Te(t.value,F=>(w(),E("tr",{key:F.id,class:"border-t border-subtle transition-colors hover:bg-sunken"},[d("td",zc,D(F.name),1),d("td",qc,D(F.id),1),d("td",Jc,[se(ht)?(w(),E(Q,{key:0},[d("button",{class:"dh-btn-ghost",onClick:y=>a(F)},"Rename",8,Yc),d("button",{class:"dh-btn-danger ml-1.5",disabled:n.value,onClick:y=>h(F)}," Delete ",8,Xc)],64)):V("",!0)])]))),128))])])):(w(),E("p",Wc," No organizations yet. "))]))}},Qc={class:"dh-card overflow-hidden"},eu={class:"flex items-center justify-between border-b border-subtle px-5 py-4"},tu={class:"text-base font-bold tracking-[-0.02em] text-strong"},su={class:"eyebrow"},nu={class:"w-full text-left text-sm"},iu={class:"data border-t border-subtle px-5 py-2.5 text-xs whitespace-nowrap"},ou={class:"text-strong"},ru={class:"border-t border-subtle px-5 py-2.5 text-body"},tt={__name:"EndpointTable",props:{title:String,auth:String,endpoints:Array},setup(e){const t={GET:"text-success",POST:"text-brandtext",PATCH:"text-warning",DELETE:"text-danger"};return(s,n)=>(w(),E("div",Qc,[d("div",eu,[d("div",tu,D(e.title),1),d("span",su,D(e.auth),1)]),d("table",nu,[n[0]||(n[0]=d("thead",null,[d("tr",{class:"[&>th]:eyebrow [&>th]:px-5 [&>th]:py-2.5 [&>th]:font-medium"},[d("th",null,"Endpoint"),d("th",null,"Description")])],-1)),d("tbody",null,[(w(!0),E(Q,null,Te(e.endpoints,i=>(w(),E("tr",{key:i.method+i.path,class:"transition-colors hover:bg-sunken"},[d("td",iu,[d("span",{class:je(["font-semibold",t[i.method]])},D(i.method),3),d("span",ou,D(i.path),1)]),d("td",ru,D(i.desc),1)]))),128))])])]))}},lu={class:"mx-auto flex max-w-4xl flex-col gap-6 px-6 pt-12 pb-16"},au={class:"flex items-center gap-3"},cu={class:"inline-flex items-center gap-2.5 select-none"},uu={class:"h-8 w-8 shrink-0",viewBox:"0 0 48 48",fill:"none","aria-hidden":"true"},fu={transform:"translate(7 0) skewX(-13)"},du=["fill"],pu=["fill"],hu=["fill"],gu={key:0,class:"data hidden text-xs text-muted sm:inline"},mu={key:0},bu={key:1,class:"dh-pill bg-info-soft text-info"},vu=["title"],_u={key:0,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.75",class:"h-4 w-4"},yu={key:1,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.75",class:"h-4 w-4"},xu={key:0,class:"eyebrow py-16 text-center"},wu={class:"flex flex-wrap gap-1.5"},Su=["onClick"],Tu={key:6,class:"eyebrow text-center"},Cu={__name:"App",setup(e){const t=j(!0),s=j("overview");vt(async()=>{await na(),t.value=!1});const n=bt(()=>{const F=[{id:"overview",label:"Overview"}];return ci.value&&F.push({id:"users",label:"Users"},{id:"orgs",label:"Organizations"}),ht.value&&F.push({id:"pocketbase",label:"PocketBase"},{id:"plugins",label:"Plugins"}),F.push({id:"api",label:"API"}),F});function i(){wn(),s.value="overview"}const o=bt(()=>Ct.value==="dark"?["#60a5fa","#93c5fd","#ffffff"]:["var(--brand-700)","var(--brand-500)","var(--brand-400)"]),r=[{method:"GET",path:"/api/health",desc:"Liveness probe (no auth)"},{method:"GET",path:"/api/status",desc:"Health of PocketBase + Web App"},{method:"POST",path:"/api/auth/login",desc:"Exchange email + password for a PocketBase token"},{method:"GET",path:"/api/auth/validate",desc:"Check whether a token is still valid"}],l=[{method:"GET",path:"/api/auth/me",desc:"Identity of the bearer token"},{method:"GET",path:"/api/identity",desc:"Identity incl. role + organization"}],a=[{method:"GET",path:"/api/cars",desc:"List owned + shared cars"},{method:"POST",path:"/api/cars",desc:"Create a car"},{method:"GET",path:"/api/cars/{id}",desc:"Fetch one car"},{method:"PATCH",path:"/api/cars/{id}",desc:"Update a car"},{method:"DELETE",path:"/api/cars/{id}",desc:"Delete a car (owner only)"},{method:"GET",path:"/api/cars/{id}/service-records",desc:"A car's service history"},{method:"GET",path:"/api/cars/{id}/parts",desc:"A car's parts catalog"},{method:"GET",path:"/api/cars/{id}/shares",desc:"Who a car is shared with (owner)"},{method:"POST",path:"/api/cars/{id}/shares",desc:"Share a car by email (owner)"},{method:"DELETE",path:"/api/cars/{id}/shares/{userId}",desc:"Revoke a share (owner)"}],p=[{method:"GET",path:"/api/service-records",desc:"List service records"},{method:"POST",path:"/api/service-records",desc:"Log a service record"},{method:"GET",path:"/api/service-records/{id}",desc:"Fetch one record"},{method:"PATCH",path:"/api/service-records/{id}",desc:"Update a record"},{method:"DELETE",path:"/api/service-records/{id}",desc:"Delete a record"}],u=[{method:"GET",path:"/api/parts",desc:"List parts"},{method:"POST",path:"/api/parts",desc:"Add a part"},{method:"GET",path:"/api/parts/{id}",desc:"Fetch one part"},{method:"PATCH",path:"/api/parts/{id}",desc:"Update a part"},{method:"DELETE",path:"/api/parts/{id}",desc:"Delete a part"}],h=[{method:"GET",path:"/api/me",desc:"Current user profile"},{method:"PATCH",path:"/api/me",desc:"Update profile"},{method:"POST",path:"/api/me/password",desc:"Change password"},{method:"POST",path:"/api/me/avatar",desc:"Upload avatar"},{method:"GET",path:"/api/me/avatar",desc:"Fetch avatar"},{method:"DELETE",path:"/api/me/avatar",desc:"Remove avatar"},{method:"POST",path:"/api/me/verify/request",desc:"Request email verification"},{method:"GET",path:"/api/me/export",desc:"Export your data"},{method:"POST",path:"/api/me/import",desc:"Import data"},{method:"POST",path:"/api/me/delete",desc:"Request account deletion"},{method:"POST",path:"/api/me/delete/cancel",desc:"Cancel deletion request"},{method:"DELETE",path:"/api/me",desc:"Finalize account deletion"}],T=[{method:"GET",path:"/api/users",desc:"List users (scoped by role)"},{method:"POST",path:"/api/users",desc:"Create a user"},{method:"PATCH",path:"/api/users/{id}",desc:"Update email / name / role / org / password"},{method:"DELETE",path:"/api/users/{id}",desc:"Delete a user"},{method:"GET",path:"/api/orgs",desc:"List organizations"},{method:"POST",path:"/api/orgs",desc:"Create an organization (superadmin)"},{method:"PATCH",path:"/api/orgs/{id}",desc:"Rename an organization (superadmin)"},{method:"DELETE",path:"/api/orgs/{id}",desc:"Delete an organization (superadmin)"}],$=[{method:"GET",path:"/api/admin/pb-config",desc:"PocketBase connection + live probe"},{method:"POST",path:"/api/admin/pb-config/test",desc:"Probe a candidate connection"},{method:"PUT",path:"/api/admin/pb-config",desc:"Apply + persist a connection"},{method:"GET",path:"/api/admin/plugins",desc:"List plugins (secrets masked)"},{method:"POST",path:"/api/admin/plugins",desc:"Register an external plugin"},{method:"GET",path:"/api/admin/plugins/{name}",desc:"Fetch one plugin"},{method:"PUT",path:"/api/admin/plugins/{name}",desc:"Enable/disable + configure"},{method:"DELETE",path:"/api/admin/plugins/{name}",desc:"Remove an external plugin"},{method:"POST",path:"/api/admin/plugins/{name}/health",desc:"Run a health check now"}];return(F,y)=>(w(),E("div",lu,[d("div",au,[d("span",cu,[(w(),E("svg",uu,[d("g",fu,[d("rect",{x:"9",y:"16",width:"6",height:"16",rx:"3",fill:o.value[0]},null,8,du),d("rect",{x:"19",y:"12",width:"6",height:"24",rx:"3",fill:o.value[1]},null,8,pu),d("rect",{x:"29",y:"8",width:"6",height:"32",rx:"3",fill:o.value[2]},null,8,hu)])])),y[1]||(y[1]=d("span",{class:"text-2xl leading-none font-extrabold tracking-[-0.03em] italic"},[d("span",{class:"text-strong"},"Driver"),d("span",{class:"text-brandtext"},"Vault")],-1))]),y[5]||(y[5]=d("span",{class:"eyebrow mt-1.5"},"API server",-1)),y[6]||(y[6]=d("div",{class:"flex-1"},null,-1)),se(ce)?(w(),E("span",gu,[Ze(D(se(ce).email),1),se(ce).organizationName?(w(),E("span",mu," · "+D(se(ce).organizationName),1)):V("",!0)])):V("",!0),se(ce)?(w(),E("span",bu,D(se(ce).role),1)):V("",!0),d("button",{class:"dh-btn-ghost",title:se(Ct)==="dark"?"Switch to light theme":"Switch to dark theme",onClick:y[0]||(y[0]=(...S)=>se(ai)&&se(ai)(...S))},[se(Ct)==="dark"?(w(),E("svg",_u,[...y[2]||(y[2]=[d("circle",{cx:"12",cy:"12",r:"4"},null,-1),d("path",{"stroke-linecap":"round",d:"M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4"},null,-1)])])):(w(),E("svg",yu,[...y[3]||(y[3]=[d("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M21 12.8A9 9 0 1 1 11.2 3a7 7 0 0 0 9.8 9.8Z"},null,-1)])])),y[4]||(y[4]=Ze(" Theme ",-1))],8,vu),se($t)?(w(),E("button",{key:2,class:"dh-btn-ghost",onClick:i},"Sign out")):V("",!0)]),t.value?(w(),E("p",xu,"Loading…")):se($t)?(w(),E(Q,{key:2},[d("nav",wu,[(w(!0),E(Q,null,Te(n.value,S=>(w(),E("button",{key:S.id,class:je(["dh-btn-ghost",s.value===S.id?"border-accent text-brandtext":""]),onClick:x=>s.value=S.id},D(S.label),11,Su))),128))]),s.value==="overview"?(w(),pt(_a,{key:0})):s.value==="users"?(w(),pt(Lc,{key:1})):s.value==="orgs"?(w(),pt(Zc,{key:2})):s.value==="pocketbase"?(w(),pt(Oa,{key:3})):s.value==="plugins"?(w(),pt(pc,{key:4})):s.value==="api"?(w(),E(Q,{key:5},[le(tt,{title:"Public",auth:"No auth",endpoints:r}),le(tt,{title:"Identity",auth:"Bearer token",endpoints:l}),le(tt,{title:"Cars",auth:"Bearer token",endpoints:a}),le(tt,{title:"Service records",auth:"Bearer token",endpoints:p}),le(tt,{title:"Parts",auth:"Bearer token",endpoints:u}),le(tt,{title:"Account",auth:"Bearer token",endpoints:h}),le(tt,{title:"Management",auth:"Admin / superadmin",endpoints:T}),le(tt,{title:"Superadmin",auth:"Superadmin",endpoints:$})],64)):V("",!0),!se(ci)&&s.value==="overview"?(w(),E("p",Tu," Signed in as a standard user — management sections need an admin role ")):V("",!0)],64)):(w(),pt(aa,{key:1})),y[7]||(y[7]=d("p",{class:"eyebrow text-center"},"DriverVault — car maintenance & service tracker.",-1))]))}};Jl(Cu).mount("#app"); diff --git a/API Server/internal/api/dist/assets/index-OENR1RVj.js b/API Server/internal/api/dist/assets/index-OENR1RVj.js new file mode 100644 index 0000000..fdb658e --- /dev/null +++ b/API Server/internal/api/dist/assets/index-OENR1RVj.js @@ -0,0 +1,17 @@ +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))n(i);new MutationObserver(i=>{for(const l of i)if(l.type==="childList")for(const o of l.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&n(o)}).observe(document,{childList:!0,subtree:!0});function s(i){const l={};return i.integrity&&(l.integrity=i.integrity),i.referrerPolicy&&(l.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?l.credentials="include":i.crossOrigin==="anonymous"?l.credentials="omit":l.credentials="same-origin",l}function n(i){if(i.ep)return;i.ep=!0;const l=s(i);fetch(i.href,l)}})();/** +* @vue/shared v3.5.39 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function ln(e){const t=Object.create(null);for(const s of e.split(","))t[s]=1;return s=>s in t}const J={},xt=[],He=()=>{},ui=()=>!1,xs=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),ws=e=>e.startsWith("onUpdate:"),pe=Object.assign,on=(e,t)=>{const s=e.indexOf(t);s>-1&&e.splice(s,1)},xl=Object.prototype.hasOwnProperty,W=(e,t)=>xl.call(e,t),U=Array.isArray,wt=e=>Zt(e)==="[object Map]",At=e=>Zt(e)==="[object Set]",Pn=e=>Zt(e)==="[object Date]",V=e=>typeof e=="function",te=e=>typeof e=="string",Be=e=>typeof e=="symbol",z=e=>e!==null&&typeof e=="object",fi=e=>(z(e)||V(e))&&V(e.then)&&V(e.catch),di=Object.prototype.toString,Zt=e=>di.call(e),wl=e=>Zt(e).slice(8,-1),pi=e=>Zt(e)==="[object Object]",rn=e=>te(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Nt=ln(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Ss=e=>{const t=Object.create(null);return(s=>t[s]||(t[s]=e(s)))},Sl=/-\w/g,Ee=Ss(e=>e.replace(Sl,t=>t.slice(1).toUpperCase())),Tl=/\B([A-Z])/g,rt=Ss(e=>e.replace(Tl,"-$1").toLowerCase()),hi=Ss(e=>e.charAt(0).toUpperCase()+e.slice(1)),Is=Ss(e=>e?`on${hi(e)}`:""),Ve=(e,t)=>!Object.is(e,t),us=(e,...t)=>{for(let s=0;s{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:n,value:s})},Ts=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let An;const Cs=()=>An||(An=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function an(e){if(U(e)){const t={};for(let s=0;s{if(s){const n=s.split(El);n.length>1&&(t[n[0].trim()]=n[1].trim())}}),t}function $e(e){let t="";if(te(e))t=e;else if(U(e))for(let s=0;sit(s,t))}const bi=e=>!!(e&&e.__v_isRef===!0),I=e=>te(e)?e:e==null?"":U(e)||z(e)&&(e.toString===di||!V(e.toString))?bi(e)?I(e.value):JSON.stringify(e,vi,2):String(e),vi=(e,t)=>bi(t)?vi(e,t.value):wt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((s,[n,i],l)=>(s[Ds(n,l)+" =>"]=i,s),{})}:At(t)?{[`Set(${t.size})`]:[...t.values()].map(s=>Ds(s))}:Be(t)?Ds(t):z(t)&&!U(t)&&!pi(t)?String(t):t,Ds=(e,t="")=>{var s;return Be(e)?`Symbol(${(s=e.description)!=null?s:t})`:e};/** +* @vue/reactivity v3.5.39 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let re;class Rl{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&&re&&(re.active?(this.parent=re,this.index=(re.scopes||(re.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,s;if(this.scopes)for(t=0,s=this.scopes.length;t0&&--this._on===0){if(re===this)re=this.prevScope;else{let t=re;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 s,n;for(s=0,n=this.effects.length;s0)return;if(Vt){let t=Vt;for(Vt=void 0;t;){const s=t.next;t.next=void 0,t.flags&=-9,t=s}}let e;for(;jt;){let t=jt;for(jt=void 0;t;){const s=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(n){e||(e=n)}t=s}}if(e)throw e}function wi(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Si(e){let t,s=e.depsTail,n=s;for(;n;){const i=n.prevDep;n.version===-1?(n===s&&(s=i),dn(n),Il(n)):t=n,n.dep.activeLink=n.prevActiveLink,n.prevActiveLink=void 0,n=i}e.deps=t,e.depsTail=s}function Gs(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Ti(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Ti(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Gt)||(e.globalVersion=Gt,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Gs(e))))return;e.flags|=2;const t=e.dep,s=X,n=ke;X=e,ke=!0;try{wi(e);const i=e.fn(e._value);(t.version===0||Ve(i,e._value))&&(e.flags|=128,e._value=i,t.version++)}catch(i){throw t.version++,i}finally{X=s,ke=n,Si(e),e.flags&=-3}}function dn(e,t=!1){const{dep:s,prevSub:n,nextSub:i}=e;if(n&&(n.nextSub=i,e.prevSub=void 0),i&&(i.prevSub=n,e.nextSub=void 0),s.subs===e&&(s.subs=n,!n&&s.computed)){s.computed.flags&=-5;for(let l=s.computed.deps;l;l=l.nextDep)dn(l,!0)}!t&&!--s.sc&&s.map&&s.map.delete(s.key)}function Il(e){const{prevDep:t,nextDep:s}=e;t&&(t.nextDep=s,e.prevDep=void 0),s&&(s.prevDep=t,e.nextDep=void 0)}let ke=!0;const Ci=[];function Ke(){Ci.push(ke),ke=!1}function We(){const e=Ci.pop();ke=e===void 0?!0:e}function On(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const s=X;X=void 0;try{t()}finally{X=s}}}let Gt=0;class Dl{constructor(t,s){this.sub=t,this.dep=s,this.version=s.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class pn{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(!X||!ke||X===this.computed)return;let s=this.activeLink;if(s===void 0||s.sub!==X)s=this.activeLink=new Dl(X,this),X.deps?(s.prevDep=X.depsTail,X.depsTail.nextDep=s,X.depsTail=s):X.deps=X.depsTail=s,Ei(s);else if(s.version===-1&&(s.version=this.version,s.nextDep)){const n=s.nextDep;n.prevDep=s.prevDep,s.prevDep&&(s.prevDep.nextDep=n),s.prevDep=X.depsTail,s.nextDep=void 0,X.depsTail.nextDep=s,X.depsTail=s,X.deps===s&&(X.deps=n)}return s}trigger(t){this.version++,Gt++,this.notify(t)}notify(t){un();try{for(let s=this.subs;s;s=s.prevSub)s.sub.notify()&&s.sub.dep.notify()}finally{fn()}}}function Ei(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let n=t.deps;n;n=n.nextDep)Ei(n)}const s=e.dep.subs;s!==e&&(e.prevSub=s,s&&(s.nextSub=e)),e.dep.subs=e}}const zs=new WeakMap,mt=Symbol(""),qs=Symbol(""),zt=Symbol("");function ce(e,t,s){if(ke&&X){let n=zs.get(e);n||zs.set(e,n=new Map);let i=n.get(s);i||(n.set(s,i=new pn),i.map=n,i.key=s),i.track()}}function Je(e,t,s,n,i,l){const o=zs.get(e);if(!o){Gt++;return}const r=a=>{a&&a.trigger()};if(un(),t==="clear")o.forEach(r);else{const a=U(e),p=a&&rn(s);if(a&&s==="length"){const u=Number(n);o.forEach((h,b)=>{(b==="length"||b===zt||!Be(b)&&b>=u)&&r(h)})}else switch((s!==void 0||o.has(void 0))&&r(o.get(s)),p&&r(o.get(zt)),t){case"add":a?p&&r(o.get("length")):(r(o.get(mt)),wt(e)&&r(o.get(qs)));break;case"delete":a||(r(o.get(mt)),wt(e)&&r(o.get(qs)));break;case"set":wt(e)&&r(o.get(mt));break}}fn()}function _t(e){const t=K(e);return t===e?t:(ce(t,"iterate",zt),we(e)?t:t.map(Pe))}function Es(e){return ce(e=K(e),"iterate",zt),e}function Ne(e,t){return Ze(e)?Et(bt(e)?Pe(t):t):Pe(t)}const Fl={__proto__:null,[Symbol.iterator](){return Ls(this,Symbol.iterator,e=>Ne(this,e))},concat(...e){return _t(this).concat(...e.map(t=>U(t)?_t(t):t))},entries(){return Ls(this,"entries",e=>(e[1]=Ne(this,e[1]),e))},every(e,t){return Ge(this,"every",e,t,void 0,arguments)},filter(e,t){return Ge(this,"filter",e,t,s=>s.map(n=>Ne(this,n)),arguments)},find(e,t){return Ge(this,"find",e,t,s=>Ne(this,s),arguments)},findIndex(e,t){return Ge(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Ge(this,"findLast",e,t,s=>Ne(this,s),arguments)},findLastIndex(e,t){return Ge(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Ge(this,"forEach",e,t,void 0,arguments)},includes(...e){return Us(this,"includes",e)},indexOf(...e){return Us(this,"indexOf",e)},join(e){return _t(this).join(e)},lastIndexOf(...e){return Us(this,"lastIndexOf",e)},map(e,t){return Ge(this,"map",e,t,void 0,arguments)},pop(){return Dt(this,"pop")},push(...e){return Dt(this,"push",e)},reduce(e,...t){return Rn(this,"reduce",e,t)},reduceRight(e,...t){return Rn(this,"reduceRight",e,t)},shift(){return Dt(this,"shift")},some(e,t){return Ge(this,"some",e,t,void 0,arguments)},splice(...e){return Dt(this,"splice",e)},toReversed(){return _t(this).toReversed()},toSorted(e){return _t(this).toSorted(e)},toSpliced(...e){return _t(this).toSpliced(...e)},unshift(...e){return Dt(this,"unshift",e)},values(){return Ls(this,"values",e=>Ne(this,e))}};function Ls(e,t,s){const n=Es(e),i=n[t]();return n!==e&&!we(e)&&(i._next=i.next,i.next=()=>{const l=i._next();return l.done||(l.value=s(l.value)),l}),i}const Ll=Array.prototype;function Ge(e,t,s,n,i,l){const o=Es(e),r=o!==e&&!we(e),a=o[t];if(a!==Ll[t]){const h=a.apply(e,l);return r?Pe(h):h}let p=s;o!==e&&(r?p=function(h,b){return s.call(this,Ne(e,h),b,e)}:s.length>2&&(p=function(h,b){return s.call(this,h,b,e)}));const u=a.call(o,p,n);return r&&i?i(u):u}function Rn(e,t,s,n){const i=Es(e),l=i!==e&&!we(e);let o=s,r=!1;i!==e&&(l?(r=n.length===0,o=function(p,u,h){return r&&(r=!1,p=Ne(e,p)),s.call(this,p,Ne(e,u),h,e)}):s.length>3&&(o=function(p,u,h){return s.call(this,p,u,h,e)}));const a=i[t](o,...n);return r?Ne(e,a):a}function Us(e,t,s){const n=K(e);ce(n,"iterate",zt);const i=n[t](...s);return(i===-1||i===!1)&&mn(s[0])?(s[0]=K(s[0]),n[t](...s)):i}function Dt(e,t,s=[]){Ke(),un();const n=K(e)[t].apply(e,s);return fn(),We(),n}const Ul=ln("__proto__,__v_isRef,__isVue"),ki=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Be));function Nl(e){Be(e)||(e=String(e));const t=K(this);return ce(t,"has",e),t.hasOwnProperty(e)}class $i{constructor(t=!1,s=!1){this._isReadonly=t,this._isShallow=s}get(t,s,n){if(s==="__v_skip")return t.__v_skip;const i=this._isReadonly,l=this._isShallow;if(s==="__v_isReactive")return!i;if(s==="__v_isReadonly")return i;if(s==="__v_isShallow")return l;if(s==="__v_raw")return n===(i?l?Jl:Ri:l?Oi:Ai).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(n)?t:void 0;const o=U(t);if(!i){let a;if(o&&(a=Fl[s]))return a;if(s==="hasOwnProperty")return Nl}const r=Reflect.get(t,s,fe(t)?t:n);if((Be(s)?ki.has(s):Ul(s))||(i||ce(t,"get",s),l))return r;if(fe(r)){const a=o&&rn(s)?r:r.value;return i&&z(a)?Ys(a):a}return z(r)?i?Ys(r):qt(r):r}}class Pi extends $i{constructor(t=!1){super(!1,t)}set(t,s,n,i){let l=t[s];const o=U(t)&&rn(s);if(!this._isShallow){const p=Ze(l);if(!we(n)&&!Ze(n)&&(l=K(l),n=K(n)),!o&&fe(l)&&!fe(n))return p||(l.value=n),!0}const r=o?Number(s)e,os=e=>Reflect.getPrototypeOf(e);function Kl(e,t,s){return function(...n){const i=this.__v_raw,l=K(i),o=wt(l),r=e==="entries"||e===Symbol.iterator&&o,a=e==="keys"&&o,p=i[e](...n),u=s?Js:t?Et:Pe;return!t&&ce(l,"iterate",a?qs:mt),pe(Object.create(p),{next(){const{value:h,done:b}=p.next();return b?{value:h,done:b}:{value:r?[u(h[0]),u(h[1])]:u(h),done:b}}})}}function rs(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Wl(e,t){const s={get(i){const l=this.__v_raw,o=K(l),r=K(i);e||(Ve(i,r)&&ce(o,"get",i),ce(o,"get",r));const{has:a}=os(o),p=t?Js:e?Et:Pe;if(a.call(o,i))return p(l.get(i));if(a.call(o,r))return p(l.get(r));l!==o&&l.get(i)},get size(){const i=this.__v_raw;return!e&&ce(K(i),"iterate",mt),i.size},has(i){const l=this.__v_raw,o=K(l),r=K(i);return e||(Ve(i,r)&&ce(o,"has",i),ce(o,"has",r)),i===r?l.has(i):l.has(i)||l.has(r)},forEach(i,l){const o=this,r=o.__v_raw,a=K(r),p=t?Js:e?Et:Pe;return!e&&ce(a,"iterate",mt),r.forEach((u,h)=>i.call(l,p(u),p(h),o))}};return pe(s,e?{add:rs("add"),set:rs("set"),delete:rs("delete"),clear:rs("clear")}:{add(i){const l=K(this),o=os(l),r=K(i),a=!t&&!we(i)&&!Ze(i)?r:i;return o.has.call(l,a)||Ve(i,a)&&o.has.call(l,i)||Ve(r,a)&&o.has.call(l,r)||(l.add(a),Je(l,"add",a,a)),this},set(i,l){!t&&!we(l)&&!Ze(l)&&(l=K(l));const o=K(this),{has:r,get:a}=os(o);let p=r.call(o,i);p||(i=K(i),p=r.call(o,i));const u=a.call(o,i);return o.set(i,l),p?Ve(l,u)&&Je(o,"set",i,l):Je(o,"add",i,l),this},delete(i){const l=K(this),{has:o,get:r}=os(l);let a=o.call(l,i);a||(i=K(i),a=o.call(l,i)),r&&r.call(l,i);const p=l.delete(i);return a&&Je(l,"delete",i,void 0),p},clear(){const i=K(this),l=i.size!==0,o=i.clear();return l&&Je(i,"clear",void 0,void 0),o}}),["keys","values","entries",Symbol.iterator].forEach(i=>{s[i]=Kl(i,e,t)}),s}function hn(e,t){const s=Wl(e,t);return(n,i,l)=>i==="__v_isReactive"?!e:i==="__v_isReadonly"?e:i==="__v_raw"?n:Reflect.get(W(s,i)&&i in n?s:n,i,l)}const Gl={get:hn(!1,!1)},zl={get:hn(!1,!0)},ql={get:hn(!0,!1)};const Ai=new WeakMap,Oi=new WeakMap,Ri=new WeakMap,Jl=new WeakMap;function Yl(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function qt(e){return Ze(e)?e:gn(e,!1,Vl,Gl,Ai)}function Xl(e){return gn(e,!1,Bl,zl,Oi)}function Ys(e){return gn(e,!0,Hl,ql,Ri)}function gn(e,t,s,n,i){if(!z(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;const l=i.get(e);if(l)return l;const o=Yl(wl(e));if(o===0)return e;const r=new Proxy(e,o===2?n:s);return i.set(e,r),r}function bt(e){return Ze(e)?bt(e.__v_raw):!!(e&&e.__v_isReactive)}function Ze(e){return!!(e&&e.__v_isReadonly)}function we(e){return!!(e&&e.__v_isShallow)}function mn(e){return e?!!e.__v_raw:!1}function K(e){const t=e&&e.__v_raw;return t?K(t):e}function Zl(e){return!W(e,"__v_skip")&&Object.isExtensible(e)&&gi(e,"__v_skip",!0),e}const Pe=e=>z(e)?qt(e):e,Et=e=>z(e)?Ys(e):e;function fe(e){return e?e.__v_isRef===!0:!1}function H(e){return Ql(e,!1)}function Ql(e,t){return fe(e)?e:new eo(e,t)}class eo{constructor(t,s){this.dep=new pn,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=s?t:K(t),this._value=s?t:Pe(t),this.__v_isShallow=s}get value(){return this.dep.track(),this._value}set value(t){const s=this._rawValue,n=this.__v_isShallow||we(t)||Ze(t);t=n?t:K(t),Ve(t,s)&&(this._rawValue=t,this._value=n?t:Pe(t),this.dep.trigger())}}function ne(e){return fe(e)?e.value:e}const to={get:(e,t,s)=>t==="__v_raw"?e:ne(Reflect.get(e,t,s)),set:(e,t,s,n)=>{const i=e[t];return fe(i)&&!fe(s)?(i.value=s,!0):Reflect.set(e,t,s,n)}};function Mi(e){return bt(e)?e:new Proxy(e,to)}class so{constructor(t,s,n){this.fn=t,this.setter=s,this._value=void 0,this.dep=new pn(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Gt-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!s,this.isSSR=n}notify(){if(this.flags|=16,!(this.flags&8)&&X!==this)return xi(this,!0),!0}get value(){const t=this.dep.track();return Ti(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function no(e,t,s=!1){let n,i;return V(e)?n=e:(n=e.get,i=e.set),new so(n,i,s)}const as={},ps=new WeakMap;let ht;function io(e,t=!1,s=ht){if(s){let n=ps.get(s);n||ps.set(s,n=[]),n.push(e)}}function lo(e,t,s=J){const{immediate:n,deep:i,once:l,scheduler:o,augmentJob:r,call:a}=s,p=M=>i?M:we(M)||i===!1||i===0?Ye(M,1):Ye(M);let u,h,b,x,D=!1,S=!1;if(fe(e)?(h=()=>e.value,D=we(e)):bt(e)?(h=()=>p(e),D=!0):U(e)?(S=!0,D=e.some(M=>bt(M)||we(M)),h=()=>e.map(M=>{if(fe(M))return M.value;if(bt(M))return p(M);if(V(M))return a?a(M,2):M()})):V(e)?t?h=a?()=>a(e,2):e:h=()=>{if(b){Ke();try{b()}finally{We()}}const M=ht;ht=u;try{return a?a(e,3,[x]):e(x)}finally{ht=M}}:h=He,t&&i){const M=h,ie=i===!0?1/0:i;h=()=>Ye(M(),ie)}const C=Ml(),T=()=>{u.stop(),C&&C.active&&on(C.effects,u)};if(l&&t){const M=t;t=(...ie)=>{const Oe=M(...ie);return T(),Oe}}let k=S?new Array(e.length).fill(as):as;const R=M=>{if(!(!(u.flags&1)||!u.dirty&&!M))if(t){const ie=u.run();if(M||i||D||(S?ie.some((Oe,Re)=>Ve(Oe,k[Re])):Ve(ie,k))){b&&b();const Oe=ht;ht=u;try{const Re=[ie,k===as?void 0:S&&k[0]===as?[]:k,x];k=ie,a?a(t,3,Re):t(...Re)}finally{ht=Oe}}}else u.run()};return r&&r(R),u=new _i(h),u.scheduler=o?()=>o(R,!1):R,x=M=>io(M,!1,u),b=u.onStop=()=>{const M=ps.get(u);if(M){if(a)a(M,4);else for(const ie of M)ie();ps.delete(u)}},t?n?R(!0):k=u.run():o?o(R.bind(null,!0),!0):u.run(),T.pause=u.pause.bind(u),T.resume=u.resume.bind(u),T.stop=T,T}function Ye(e,t=1/0,s){if(t<=0||!z(e)||e.__v_skip||(s=s||new Map,(s.get(e)||0)>=t))return e;if(s.set(e,t),t--,fe(e))Ye(e.value,t,s);else if(U(e))for(let n=0;n{Ye(n,t,s)});else if(pi(e)){for(const n in e)Ye(e[n],t,s);for(const n of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,n)&&Ye(e[n],t,s)}return e}/** +* @vue/runtime-core v3.5.39 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function Qt(e,t,s,n){try{return n?e(...n):e()}catch(i){ks(i,t,s)}}function Ae(e,t,s,n){if(V(e)){const i=Qt(e,t,s,n);return i&&fi(i)&&i.catch(l=>{ks(l,t,s)}),i}if(U(e)){const i=[];for(let l=0;l>>1,i=me[n],l=Jt(i);l=Jt(s)?me.push(e):me.splice(ro(t),0,e),e.flags|=1,Fi()}}function Fi(){hs||(hs=Ii.then(Ui))}function ao(e){U(e)?St.push(...e):nt&&e.id===-1?nt.splice(yt+1,0,e):e.flags&1||(St.push(e),e.flags|=1),Fi()}function Mn(e,t,s=Ue+1){for(;sJt(s)-Jt(n));if(St.length=0,nt){nt.push(...t);return}for(nt=t,yt=0;yte.id==null?e.flags&2?-1:1/0:e.id;function Ui(e){try{for(Ue=0;Ue{n._d&&Kn(-1);const l=gs(t);let o;try{o=e(...i)}finally{gs(l),n._d&&Kn(1)}return o};return n._n=!0,n._c=!0,n._d=!0,n}function le(e,t){if(xe===null)return e;const s=Os(xe),n=e.dirs||(e.dirs=[]);for(let i=0;i1)return s&&V(t)?t.call(n&&n.proxy):t}}const fo=Symbol.for("v-scx"),po=()=>fs(fo);function Ns(e,t,s){return ji(e,t,s)}function ji(e,t,s=J){const{immediate:n,deep:i,flush:l,once:o}=s,r=pe({},s),a=t&&n||!t&&l!=="post";let p;if(Xt){if(l==="sync"){const x=po();p=x.__watcherHandles||(x.__watcherHandles=[])}else if(!a){const x=()=>{};return x.stop=He,x.resume=He,x.pause=He,x}}const u=be;r.call=(x,D,S)=>Ae(x,u,D,S);let h=!1;l==="post"?r.scheduler=x=>{ve(x,u&&u.suspense)}:l!=="sync"&&(h=!0,r.scheduler=(x,D)=>{D?x():bn(x)}),r.augmentJob=x=>{t&&(x.flags|=4),h&&(x.flags|=2,u&&(x.id=u.uid,x.i=u))};const b=lo(e,t,r);return Xt&&(p?p.push(b):a&&b()),b}function ho(e,t,s){const n=this.proxy,i=te(e)?e.includes(".")?Vi(n,e):()=>n[e]:e.bind(n,n);let l;V(t)?l=t:(l=t.handler,s=t);const o=es(this),r=ji(i,l.bind(n),s);return o(),r}function Vi(e,t){const s=t.split(".");return()=>{let n=e;for(let i=0;ie.__isTeleport,js=Symbol("_leaveCb");function vn(e,t){e.shapeFlag&6&&e.component?(e.transition=t,vn(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 Hi(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function In(e,t){let s;return!!((s=Object.getOwnPropertyDescriptor(e,t))&&!s.configurable)}const ms=new WeakMap;function Ht(e,t,s,n,i=!1){if(U(e)){e.forEach((S,C)=>Ht(S,t&&(U(t)?t[C]:t),s,n,i));return}if(Bt(n)&&!i){n.shapeFlag&512&&n.type.__asyncResolved&&n.component.subTree.component&&Ht(e,t,s,n.component.subTree);return}const l=n.shapeFlag&4?Os(n.component):n.el,o=i?null:l,{i:r,r:a}=e,p=t&&t.r,u=r.refs===J?r.refs={}:r.refs,h=r.setupState,b=K(h),x=h===J?ui:S=>In(u,S)?!1:W(b,S),D=(S,C)=>!(C&&In(u,C));if(p!=null&&p!==a){if(Dn(t),te(p))u[p]=null,x(p)&&(h[p]=null);else if(fe(p)){const S=t;D(p,S.k)&&(p.value=null),S.k&&(u[S.k]=null)}}if(V(a)){Ke();try{Qt(a,r,12,[o,u])}finally{We()}}else{const S=te(a),C=fe(a);if(S||C){const T=()=>{if(e.f){const k=S?x(a)?h[a]:u[a]:D()||!e.k?a.value:u[e.k];if(i)U(k)&&on(k,l);else if(U(k))k.includes(l)||k.push(l);else if(S)u[a]=[l],x(a)&&(h[a]=u[a]);else{const R=[l];D(a,e.k)&&(a.value=R),e.k&&(u[e.k]=R)}}else S?(u[a]=o,x(a)&&(h[a]=o)):C&&(D(a,e.k)&&(a.value=o),e.k&&(u[e.k]=o))};if(o){const k=()=>{T(),ms.delete(e)};k.id=-1,ms.set(e,k),ve(k,s)}else Dn(e),T()}}}function Dn(e){const t=ms.get(e);t&&(t.flags|=8,ms.delete(e))}Cs().requestIdleCallback;Cs().cancelIdleCallback;const Bt=e=>!!e.type.__asyncLoader,Bi=e=>e.type.__isKeepAlive;function bo(e,t){Ki(e,"a",t)}function vo(e,t){Ki(e,"da",t)}function Ki(e,t,s=be){const n=e.__wdc||(e.__wdc=()=>{let i=s;for(;i;){if(i.isDeactivated)return;i=i.parent}return e()});if($s(t,n,s),s){let i=s.parent;for(;i&&i.parent;)Bi(i.parent.vnode)&&_o(n,t,s,i),i=i.parent}}function _o(e,t,s,n){const i=$s(t,e,n,!0);_n(()=>{on(n[t],i)},s)}function $s(e,t,s=be,n=!1){if(s){const i=s[e]||(s[e]=[]),l=t.__weh||(t.__weh=(...o)=>{Ke();const r=es(s),a=Ae(t,s,e,o);return r(),We(),a});return n?i.unshift(l):i.push(l),l}}const Qe=e=>(t,s=be)=>{(!Xt||e==="sp")&&$s(e,(...n)=>t(...n),s)},yo=Qe("bm"),at=Qe("m"),xo=Qe("bu"),wo=Qe("u"),So=Qe("bum"),_n=Qe("um"),To=Qe("sp"),Co=Qe("rtg"),Eo=Qe("rtc");function ko(e,t=be){$s("ec",e,t)}const $o=Symbol.for("v-ndc");function Ce(e,t,s,n){let i;const l=s,o=U(e);if(o||te(e)){const r=o&&bt(e);let a=!1,p=!1;r&&(a=!we(e),p=Ze(e),e=Es(e)),i=new Array(e.length);for(let u=0,h=e.length;ut(r,a,void 0,l));else{const r=Object.keys(e);i=new Array(r.length);for(let a=0,p=r.length;ae?fl(e)?Os(e):Xs(e.parent):null,Kt=pe(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=>Gi(e),$forceUpdate:e=>e.f||(e.f=()=>{bn(e.update)}),$nextTick:e=>e.n||(e.n=Di.bind(e.proxy)),$watch:e=>ho.bind(e)}),Vs=(e,t)=>e!==J&&!e.__isScriptSetup&&W(e,t),Po={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:s,setupState:n,data:i,props:l,accessCache:o,type:r,appContext:a}=e;if(t[0]!=="$"){const b=o[t];if(b!==void 0)switch(b){case 1:return n[t];case 2:return i[t];case 4:return s[t];case 3:return l[t]}else{if(Vs(n,t))return o[t]=1,n[t];if(i!==J&&W(i,t))return o[t]=2,i[t];if(W(l,t))return o[t]=3,l[t];if(s!==J&&W(s,t))return o[t]=4,s[t];Zs&&(o[t]=0)}}const p=Kt[t];let u,h;if(p)return t==="$attrs"&&ce(e.attrs,"get",""),p(e);if((u=r.__cssModules)&&(u=u[t]))return u;if(s!==J&&W(s,t))return o[t]=4,s[t];if(h=a.config.globalProperties,W(h,t))return h[t]},set({_:e},t,s){const{data:n,setupState:i,ctx:l}=e;return Vs(i,t)?(i[t]=s,!0):n!==J&&W(n,t)?(n[t]=s,!0):W(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(l[t]=s,!0)},has({_:{data:e,setupState:t,accessCache:s,ctx:n,appContext:i,props:l,type:o}},r){let a;return!!(s[r]||e!==J&&r[0]!=="$"&&W(e,r)||Vs(t,r)||W(l,r)||W(n,r)||W(Kt,r)||W(i.config.globalProperties,r)||(a=o.__cssModules)&&a[r])},defineProperty(e,t,s){return s.get!=null?e._.accessCache[t]=0:W(s,"value")&&this.set(e,t,s.value,null),Reflect.defineProperty(e,t,s)}};function Fn(e){return U(e)?e.reduce((t,s)=>(t[s]=null,t),{}):e}let Zs=!0;function Ao(e){const t=Gi(e),s=e.proxy,n=e.ctx;Zs=!1,t.beforeCreate&&Ln(t.beforeCreate,e,"bc");const{data:i,computed:l,methods:o,watch:r,provide:a,inject:p,created:u,beforeMount:h,mounted:b,beforeUpdate:x,updated:D,activated:S,deactivated:C,beforeDestroy:T,beforeUnmount:k,destroyed:R,unmounted:M,render:ie,renderTracked:Oe,renderTriggered:Re,errorCaptured:et,serverPrefetch:ts,expose:ct,inheritAttrs:Ot,components:ss,directives:ns,filters:Rs}=t;if(p&&Oo(p,n,null),o)for(const Z in o){const Y=o[Z];V(Y)&&(n[Z]=Y.bind(s))}if(i){const Z=i.call(s,s);z(Z)&&(e.data=qt(Z))}if(Zs=!0,l)for(const Z in l){const Y=l[Z],ut=V(Y)?Y.bind(s,s):V(Y.get)?Y.get.bind(s,s):He,is=!V(Y)&&V(Y.set)?Y.set.bind(s):He,ft=vt({get:ut,set:is});Object.defineProperty(n,Z,{enumerable:!0,configurable:!0,get:()=>ft.value,set:Me=>ft.value=Me})}if(r)for(const Z in r)Wi(r[Z],n,s,Z);if(a){const Z=V(a)?a.call(s):a;Reflect.ownKeys(Z).forEach(Y=>{uo(Y,Z[Y])})}u&&Ln(u,e,"c");function he(Z,Y){U(Y)?Y.forEach(ut=>Z(ut.bind(s))):Y&&Z(Y.bind(s))}if(he(yo,h),he(at,b),he(xo,x),he(wo,D),he(bo,S),he(vo,C),he(ko,et),he(Eo,Oe),he(Co,Re),he(So,k),he(_n,M),he(To,ts),U(ct))if(ct.length){const Z=e.exposed||(e.exposed={});ct.forEach(Y=>{Object.defineProperty(Z,Y,{get:()=>s[Y],set:ut=>s[Y]=ut,enumerable:!0})})}else e.exposed||(e.exposed={});ie&&e.render===He&&(e.render=ie),Ot!=null&&(e.inheritAttrs=Ot),ss&&(e.components=ss),ns&&(e.directives=ns),ts&&Hi(e)}function Oo(e,t,s=He){U(e)&&(e=Qs(e));for(const n in e){const i=e[n];let l;z(i)?"default"in i?l=fs(i.from||n,i.default,!0):l=fs(i.from||n):l=fs(i),fe(l)?Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:()=>l.value,set:o=>l.value=o}):t[n]=l}}function Ln(e,t,s){Ae(U(e)?e.map(n=>n.bind(t.proxy)):e.bind(t.proxy),t,s)}function Wi(e,t,s,n){let i=n.includes(".")?Vi(s,n):()=>s[n];if(te(e)){const l=t[e];V(l)&&Ns(i,l)}else if(V(e))Ns(i,e.bind(s));else if(z(e))if(U(e))e.forEach(l=>Wi(l,t,s,n));else{const l=V(e.handler)?e.handler.bind(s):t[e.handler];V(l)&&Ns(i,l,e)}}function Gi(e){const t=e.type,{mixins:s,extends:n}=t,{mixins:i,optionsCache:l,config:{optionMergeStrategies:o}}=e.appContext,r=l.get(t);let a;return r?a=r:!i.length&&!s&&!n?a=t:(a={},i.length&&i.forEach(p=>bs(a,p,o,!0)),bs(a,t,o)),z(t)&&l.set(t,a),a}function bs(e,t,s,n=!1){const{mixins:i,extends:l}=t;l&&bs(e,l,s,!0),i&&i.forEach(o=>bs(e,o,s,!0));for(const o in t)if(!(n&&o==="expose")){const r=Ro[o]||s&&s[o];e[o]=r?r(e[o],t[o]):t[o]}return e}const Ro={data:Un,props:Nn,emits:Nn,methods:Lt,computed:Lt,beforeCreate:ge,created:ge,beforeMount:ge,mounted:ge,beforeUpdate:ge,updated:ge,beforeDestroy:ge,beforeUnmount:ge,destroyed:ge,unmounted:ge,activated:ge,deactivated:ge,errorCaptured:ge,serverPrefetch:ge,components:Lt,directives:Lt,watch:Io,provide:Un,inject:Mo};function Un(e,t){return t?e?function(){return pe(V(e)?e.call(this,this):e,V(t)?t.call(this,this):t)}:t:e}function Mo(e,t){return Lt(Qs(e),Qs(t))}function Qs(e){if(U(e)){const t={};for(let s=0;st==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ee(t)}Modifiers`]||e[`${rt(t)}Modifiers`];function Uo(e,t,...s){if(e.isUnmounted)return;const n=e.vnode.props||J;let i=s;const l=t.startsWith("update:"),o=l&&Lo(n,t.slice(7));o&&(o.trim&&(i=s.map(u=>te(u)?u.trim():u)),o.number&&(i=s.map(Ts)));let r,a=n[r=Is(t)]||n[r=Is(Ee(t))];!a&&l&&(a=n[r=Is(rt(t))]),a&&Ae(a,e,6,i);const p=n[r+"Once"];if(p){if(!e.emitted)e.emitted={};else if(e.emitted[r])return;e.emitted[r]=!0,Ae(p,e,6,i)}}const No=new WeakMap;function qi(e,t,s=!1){const n=s?No:t.emitsCache,i=n.get(e);if(i!==void 0)return i;const l=e.emits;let o={},r=!1;if(!V(e)){const a=p=>{const u=qi(p,t,!0);u&&(r=!0,pe(o,u))};!s&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}return!l&&!r?(z(e)&&n.set(e,null),null):(U(l)?l.forEach(a=>o[a]=null):pe(o,l),z(e)&&n.set(e,o),o)}function Ps(e,t){return!e||!xs(t)?!1:(t=t.slice(2),t=t==="Once"?t:t.replace(/Once$/,""),W(e,t[0].toLowerCase()+t.slice(1))||W(e,rt(t))||W(e,t))}function jn(e){const{type:t,vnode:s,proxy:n,withProxy:i,propsOptions:[l],slots:o,attrs:r,emit:a,render:p,renderCache:u,props:h,data:b,setupState:x,ctx:D,inheritAttrs:S}=e,C=gs(e);let T,k;try{if(s.shapeFlag&4){const M=i||n,ie=M;T=je(p.call(ie,M,u,h,x,b,D)),k=r}else{const M=t;T=je(M.length>1?M(h,{attrs:r,slots:o,emit:a}):M(h,null)),k=t.props?r:jo(r)}}catch(M){Wt.length=0,ks(M,e,1),T=ae(lt)}let R=T;if(k&&S!==!1){const M=Object.keys(k),{shapeFlag:ie}=R;M.length&&ie&7&&(l&&M.some(ws)&&(k=Vo(k,l)),R=kt(R,k,!1,!0))}return s.dirs&&(R=kt(R,null,!1,!0),R.dirs=R.dirs?R.dirs.concat(s.dirs):s.dirs),s.transition&&vn(R,s.transition),T=R,gs(C),T}const jo=e=>{let t;for(const s in e)(s==="class"||s==="style"||xs(s))&&((t||(t={}))[s]=e[s]);return t},Vo=(e,t)=>{const s={};for(const n in e)(!ws(n)||!(n.slice(9)in t))&&(s[n]=e[n]);return s};function Ho(e,t,s){const{props:n,children:i,component:l}=e,{props:o,children:r,patchFlag:a}=t,p=l.emitsOptions;if(t.dirs||t.transition)return!0;if(s&&a>=0){if(a&1024)return!0;if(a&16)return n?Vn(n,o,p):!!o;if(a&8){const u=t.dynamicProps;for(let h=0;hObject.create(Yi),Zi=e=>Object.getPrototypeOf(e)===Yi;function Ko(e,t,s,n=!1){const i={},l=Xi();e.propsDefaults=Object.create(null),Qi(e,t,i,l);for(const o in e.propsOptions[0])o in i||(i[o]=void 0);s?e.props=n?i:Xl(i):e.type.props?e.props=i:e.props=l,e.attrs=l}function Wo(e,t,s,n){const{props:i,attrs:l,vnode:{patchFlag:o}}=e,r=K(i),[a]=e.propsOptions;let p=!1;if((n||o>0)&&!(o&16)){if(o&8){const u=e.vnode.dynamicProps;for(let h=0;h{a=!0;const[b,x]=el(h,t,!0);pe(o,b),x&&r.push(...x)};!s&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}if(!l&&!a)return z(e)&&n.set(e,xt),xt;if(U(l))for(let u=0;ue==="_"||e==="_ctx"||e==="$stable",xn=e=>U(e)?e.map(je):[je(e)],zo=(e,t,s)=>{if(t._n)return t;const n=co((...i)=>xn(t(...i)),s);return n._c=!1,n},tl=(e,t,s)=>{const n=e._ctx;for(const i in e){if(yn(i))continue;const l=e[i];if(V(l))t[i]=zo(i,l,n);else if(l!=null){const o=xn(l);t[i]=()=>o}}},sl=(e,t)=>{const s=xn(t);e.slots.default=()=>s},nl=(e,t,s)=>{for(const n in t)(s||!yn(n))&&(e[n]=t[n])},qo=(e,t,s)=>{const n=e.slots=Xi();if(e.vnode.shapeFlag&32){const i=t._;i?(nl(n,t,s),s&&gi(n,"_",i,!0)):tl(t,n)}else t&&sl(e,t)},Jo=(e,t,s)=>{const{vnode:n,slots:i}=e;let l=!0,o=J;if(n.shapeFlag&32){const r=t._;r?s&&r===1?l=!1:nl(i,t,s):(l=!t.$stable,tl(t,i)),o=t}else t&&(sl(e,t),o={default:1});if(l)for(const r in i)!yn(r)&&o[r]==null&&delete i[r]},ve=er;function Yo(e){return Xo(e)}function Xo(e,t){const s=Cs();s.__VUE__=!0;const{insert:n,remove:i,patchProp:l,createElement:o,createText:r,createComment:a,setText:p,setElementText:u,parentNode:h,nextSibling:b,setScopeId:x=He,insertStaticContent:D}=e,S=(c,f,g,w=null,_=null,m=null,A=void 0,P=null,$=!!f.dynamicChildren)=>{if(c===f)return;c&&!Ft(c,f)&&(w=ls(c),Me(c,_,m,!0),c=null),f.patchFlag===-2&&($=!1,f.dynamicChildren=null);const{type:v,ref:L,shapeFlag:O}=f;switch(v){case As:C(c,f,g,w);break;case lt:T(c,f,g,w);break;case Bs:c==null&&k(f,g,w,A);break;case Q:ss(c,f,g,w,_,m,A,P,$);break;default:O&1?ie(c,f,g,w,_,m,A,P,$):O&6?ns(c,f,g,w,_,m,A,P,$):(O&64||O&128)&&v.process(c,f,g,w,_,m,A,P,$,Mt)}L!=null&&_?Ht(L,c&&c.ref,m,f||c,!f):L==null&&c&&c.ref!=null&&Ht(c.ref,null,m,c,!0)},C=(c,f,g,w)=>{if(c==null)n(f.el=r(f.children),g,w);else{const _=f.el=c.el;f.children!==c.children&&p(_,f.children)}},T=(c,f,g,w)=>{c==null?n(f.el=a(f.children||""),g,w):f.el=c.el},k=(c,f,g,w)=>{[c.el,c.anchor]=D(c.children,f,g,w,c.el,c.anchor)},R=({el:c,anchor:f},g,w)=>{let _;for(;c&&c!==f;)_=b(c),n(c,g,w),c=_;n(f,g,w)},M=({el:c,anchor:f})=>{let g;for(;c&&c!==f;)g=b(c),i(c),c=g;i(f)},ie=(c,f,g,w,_,m,A,P,$)=>{if(f.type==="svg"?A="svg":f.type==="math"&&(A="mathml"),c==null)Oe(f,g,w,_,m,A,P,$);else{const v=c.el&&c.el._isVueCE?c.el:null;try{v&&v._beginPatch(),ts(c,f,_,m,A,P,$)}finally{v&&v._endPatch()}}},Oe=(c,f,g,w,_,m,A,P)=>{let $,v;const{props:L,shapeFlag:O,transition:F,dirs:N}=c;if($=c.el=o(c.type,m,L&&L.is,L),O&8?u($,c.children):O&16&&et(c.children,$,null,w,_,Hs(c,m),A,P),N&&dt(c,null,w,"created"),Re($,c,c.scopeId,A,w),L){for(const q in L)q!=="value"&&!Nt(q)&&l($,q,null,L[q],m,w);"value"in L&&l($,"value",null,L.value,m),(v=L.onVnodeBeforeMount)&&Le(v,w,c)}N&&dt(c,null,w,"beforeMount");const B=Zo(_,F);B&&F.beforeEnter($),n($,f,g),((v=L&&L.onVnodeMounted)||B||N)&&ve(()=>{try{v&&Le(v,w,c),B&&F.enter($),N&&dt(c,null,w,"mounted")}finally{}},_)},Re=(c,f,g,w,_)=>{if(g&&x(c,g),w)for(let m=0;m{for(let v=$;v{const P=f.el=c.el;let{patchFlag:$,dynamicChildren:v,dirs:L}=f;$|=c.patchFlag&16;const O=c.props||J,F=f.props||J;let N;if(g&&pt(g,!1),(N=F.onVnodeBeforeUpdate)&&Le(N,g,f,c),L&&dt(f,c,g,"beforeUpdate"),g&&pt(g,!0),v&&(!c.dynamicChildren||c.dynamicChildren.length!==v.length)&&($=0,A=!1,v=null),(O.innerHTML&&F.innerHTML==null||O.textContent&&F.textContent==null)&&u(P,""),v?ct(c.dynamicChildren,v,P,g,w,Hs(f,_),m):A||Y(c,f,P,null,g,w,Hs(f,_),m,!1),$>0){if($&16)Ot(P,O,F,g,_);else if($&2&&O.class!==F.class&&l(P,"class",null,F.class,_),$&4&&l(P,"style",O.style,F.style,_),$&8){const B=f.dynamicProps;for(let q=0;q{N&&Le(N,g,f,c),L&&dt(f,c,g,"updated")},w)},ct=(c,f,g,w,_,m,A)=>{for(let P=0;P{if(f!==g){if(f!==J)for(const m in f)!Nt(m)&&!(m in g)&&l(c,m,f[m],null,_,w);for(const m in g){if(Nt(m))continue;const A=g[m],P=f[m];A!==P&&m!=="value"&&l(c,m,P,A,_,w)}"value"in g&&l(c,"value",f.value,g.value,_)}},ss=(c,f,g,w,_,m,A,P,$)=>{const v=f.el=c?c.el:r(""),L=f.anchor=c?c.anchor:r("");let{patchFlag:O,dynamicChildren:F,slotScopeIds:N}=f;N&&(P=P?P.concat(N):N),c==null?(n(v,g,w),n(L,g,w),et(f.children||[],g,L,_,m,A,P,$)):O>0&&O&64&&F&&c.dynamicChildren&&c.dynamicChildren.length===F.length?(ct(c.dynamicChildren,F,g,_,m,A,P),(f.key!=null||_&&f===_.subTree)&&il(c,f,!0)):Y(c,f,g,L,_,m,A,P,$)},ns=(c,f,g,w,_,m,A,P,$)=>{f.slotScopeIds=P,c==null?f.shapeFlag&512?_.ctx.activate(f,g,w,A,$):Rs(f,g,w,_,m,A,$):Sn(c,f,$)},Rs=(c,f,g,w,_,m,A)=>{const P=c.component=rr(c,w,_);if(Bi(c)&&(P.ctx.renderer=Mt),cr(P,!1,A),P.asyncDep){if(_&&_.registerDep(P,he,A),!c.el){const $=P.subTree=ae(lt);T(null,$,f,g),c.placeholder=$.el}}else he(P,c,f,g,_,m,A)},Sn=(c,f,g)=>{const w=f.component=c.component;if(Ho(c,f,g))if(w.asyncDep&&!w.asyncResolved){Z(w,f,g);return}else w.next=f,w.update();else f.el=c.el,w.vnode=f},he=(c,f,g,w,_,m,A)=>{const P=()=>{if(c.isMounted){let{next:O,bu:F,u:N,parent:B,vnode:q}=c;{const De=ll(c);if(De){O&&(O.el=q.el,Z(c,O,A)),De.asyncDep.then(()=>{ve(()=>{c.isUnmounted||v()},_)});return}}let G=O,se;pt(c,!1),O?(O.el=q.el,Z(c,O,A)):O=q,F&&us(F),(se=O.props&&O.props.onVnodeBeforeUpdate)&&Le(se,B,O,q),pt(c,!0);const oe=jn(c),Ie=c.subTree;c.subTree=oe,S(Ie,oe,h(Ie.el),ls(Ie),c,_,m),O.el=oe.el,G===null&&Bo(c,oe.el),N&&ve(N,_),(se=O.props&&O.props.onVnodeUpdated)&&ve(()=>Le(se,B,O,q),_)}else{let O;const{el:F,props:N}=f,{bm:B,m:q,parent:G,root:se,type:oe}=c,Ie=Bt(f);pt(c,!1),B&&us(B),!Ie&&(O=N&&N.onVnodeBeforeMount)&&Le(O,G,f),pt(c,!0);{se.ce&&se.ce._hasShadowRoot()&&se.ce._injectChildStyle(oe,c.parent?c.parent.type:void 0);const De=c.subTree=jn(c);S(null,De,g,w,c,_,m),f.el=De.el}if(q&&ve(q,_),!Ie&&(O=N&&N.onVnodeMounted)){const De=f;ve(()=>Le(O,G,De),_)}(f.shapeFlag&256||G&&Bt(G.vnode)&&G.vnode.shapeFlag&256)&&c.a&&ve(c.a,_),c.isMounted=!0,f=g=w=null}};c.scope.on();const $=c.effect=new _i(P);c.scope.off();const v=c.update=$.run.bind($),L=c.job=$.runIfDirty.bind($);L.i=c,L.id=c.uid,$.scheduler=()=>bn(L),pt(c,!0),v()},Z=(c,f,g)=>{f.component=c;const w=c.vnode.props;c.vnode=f,c.next=null,Wo(c,f.props,w,g),Jo(c,f.children,g),Ke(),Mn(c),We()},Y=(c,f,g,w,_,m,A,P,$=!1)=>{const v=c&&c.children,L=c?c.shapeFlag:0,O=f.children,{patchFlag:F,shapeFlag:N}=f;if(F>0){if(F&128){is(v,O,g,w,_,m,A,P,$);return}else if(F&256){ut(v,O,g,w,_,m,A,P,$);return}}N&8?(L&16&&Rt(v,_,m),O!==v&&u(g,O)):L&16?N&16?is(v,O,g,w,_,m,A,P,$):Rt(v,_,m,!0):(L&8&&u(g,""),N&16&&et(O,g,w,_,m,A,P,$))},ut=(c,f,g,w,_,m,A,P,$)=>{c=c||xt,f=f||xt;const v=c.length,L=f.length,O=Math.min(v,L);let F;for(F=0;FL?Rt(c,_,m,!0,!1,O):et(f,g,w,_,m,A,P,$,O)},is=(c,f,g,w,_,m,A,P,$)=>{let v=0;const L=f.length;let O=c.length-1,F=L-1;for(;v<=O&&v<=F;){const N=c[v],B=f[v]=$?qe(f[v]):je(f[v]);if(Ft(N,B))S(N,B,g,null,_,m,A,P,$);else break;v++}for(;v<=O&&v<=F;){const N=c[O],B=f[F]=$?qe(f[F]):je(f[F]);if(Ft(N,B))S(N,B,g,null,_,m,A,P,$);else break;O--,F--}if(v>O){if(v<=F){const N=F+1,B=NF)for(;v<=O;)Me(c[v],_,m,!0),v++;else{const N=v,B=v,q=new Map;for(v=B;v<=F;v++){const _e=f[v]=$?qe(f[v]):je(f[v]);_e.key!=null&&q.set(_e.key,v)}let G,se=0;const oe=F-B+1;let Ie=!1,De=0;const It=new Array(oe);for(v=0;v=oe){Me(_e,_,m,!0);continue}let Fe;if(_e.key!=null)Fe=q.get(_e.key);else for(G=B;G<=F;G++)if(It[G-B]===0&&Ft(_e,f[G])){Fe=G;break}Fe===void 0?Me(_e,_,m,!0):(It[Fe-B]=v+1,Fe>=De?De=Fe:Ie=!0,S(_e,f[Fe],g,null,_,m,A,P,$),se++)}const En=Ie?Qo(It):xt;for(G=En.length-1,v=oe-1;v>=0;v--){const _e=B+v,Fe=f[_e],kn=f[_e+1],$n=_e+1{const{el:m,type:A,transition:P,children:$,shapeFlag:v}=c;if(v&6){ft(c.component.subTree,f,g,w);return}if(v&128){c.suspense.move(f,g,w);return}if(v&64){A.move(c,f,g,Mt);return}if(A===Q){n(m,f,g);for(let O=0;O<$.length;O++)ft($[O],f,g,w);n(c.anchor,f,g);return}if(A===Bs){R(c,f,g);return}if(w!==2&&v&1&&P)if(w===0)P.persisted&&!m[js]?n(m,f,g):(P.beforeEnter(m),n(m,f,g),ve(()=>P.enter(m),_));else{const{leave:O,delayLeave:F,afterLeave:N}=P,B=()=>{c.ctx.isUnmounted?i(m):n(m,f,g)},q=()=>{const G=m._isLeaving||!!m[js];m._isLeaving&&m[js](!0),P.persisted&&!G?B():O(m,()=>{B(),N&&N()})};F?F(m,B,q):q()}else n(m,f,g)},Me=(c,f,g,w=!1,_=!1)=>{const{type:m,props:A,ref:P,children:$,dynamicChildren:v,shapeFlag:L,patchFlag:O,dirs:F,cacheIndex:N,memo:B}=c;if(O===-2&&(_=!1),P!=null&&(Ke(),Ht(P,null,g,c,!0),We()),N!=null&&(f.renderCache[N]=void 0),L&256){f.ctx.deactivate(c);return}const q=L&1&&F,G=!Bt(c);let se;if(G&&(se=A&&A.onVnodeBeforeUnmount)&&Le(se,f,c),L&6)yl(c.component,g,w);else{if(L&128){c.suspense.unmount(g,w);return}q&&dt(c,null,f,"beforeUnmount"),L&64?c.type.remove(c,f,g,Mt,w):v&&!v.hasOnce&&(m!==Q||O>0&&O&64)?Rt(v,f,g,!1,!0):(m===Q&&O&384||!_&&L&16)&&Rt($,f,g),w&&Tn(c)}const oe=B!=null&&N==null;(G&&(se=A&&A.onVnodeUnmounted)||q||oe)&&ve(()=>{se&&Le(se,f,c),q&&dt(c,null,f,"unmounted"),oe&&(c.el=null)},g)},Tn=c=>{const{type:f,el:g,anchor:w,transition:_}=c;if(f===Q){_l(g,w);return}if(f===Bs){M(c);return}const m=()=>{i(g),_&&!_.persisted&&_.afterLeave&&_.afterLeave()};if(c.shapeFlag&1&&_&&!_.persisted){const{leave:A,delayLeave:P}=_,$=()=>A(g,m);P?P(c.el,m,$):$()}else m()},_l=(c,f)=>{let g;for(;c!==f;)g=b(c),i(c),c=g;i(f)},yl=(c,f,g)=>{const{bum:w,scope:_,job:m,subTree:A,um:P,m:$,a:v}=c;Bn($),Bn(v),w&&us(w),_.stop(),m&&(m.flags|=8,Me(A,c,f,g)),P&&ve(P,f),ve(()=>{c.isUnmounted=!0},f)},Rt=(c,f,g,w=!1,_=!1,m=0)=>{for(let A=m;A{if(c.shapeFlag&6)return ls(c.component.subTree);if(c.shapeFlag&128)return c.suspense.next();const f=b(c.anchor||c.el),g=f&&f[go];return g?b(g):f};let Ms=!1;const Cn=(c,f,g)=>{let w;c==null?f._vnode&&(Me(f._vnode,null,null,!0),w=f._vnode.component):S(f._vnode||null,c,f,null,null,null,g),f._vnode=c,Ms||(Ms=!0,Mn(w),Li(),Ms=!1)},Mt={p:S,um:Me,m:ft,r:Tn,mt:Rs,mc:et,pc:Y,pbc:ct,n:ls,o:e};return{render:Cn,hydrate:void 0,createApp:Fo(Cn)}}function Hs({type:e,props:t},s){return s==="svg"&&e==="foreignObject"||s==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:s}function pt({effect:e,job:t},s){s?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Zo(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function il(e,t,s=!1){const n=e.children,i=t.children;if(U(n)&&U(i))for(let l=0;l>1,e[s[r]]0&&(t[n]=s[l-1]),s[l]=n)}}for(l=s.length,o=s[l-1];l-- >0;)s[l]=o,o=t[o];return s}function ll(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:ll(t)}function Bn(e){if(e)for(let t=0;te.__isSuspense;function er(e,t){t&&t.pendingBranch?U(e)?t.effects.push(...e):t.effects.push(e):ao(e)}const Q=Symbol.for("v-fgt"),As=Symbol.for("v-txt"),lt=Symbol.for("v-cmt"),Bs=Symbol.for("v-stc"),Wt=[];let ye=null;function y(e=!1){Wt.push(ye=e?null:[])}function tr(){Wt.pop(),ye=Wt[Wt.length-1]||null}let Yt=1;function Kn(e,t=!1){Yt+=e,e<0&&ye&&t&&(ye.hasOnce=!0)}function al(e){return e.dynamicChildren=Yt>0?ye||xt:null,tr(),Yt>0&&ye&&ye.push(e),e}function E(e,t,s,n,i,l){return al(d(e,t,s,n,i,l,!0))}function st(e,t,s,n,i){return al(ae(e,t,s,n,i,!0))}function cl(e){return e?e.__v_isVNode===!0:!1}function Ft(e,t){return e.type===t.type&&e.key===t.key}const ul=({key:e})=>e??null,ds=({ref:e,ref_key:t,ref_for:s})=>(typeof e=="number"&&(e=""+e),e!=null?te(e)||fe(e)||V(e)?{i:xe,r:e,k:t,f:!!s}:e:null);function d(e,t=null,s=null,n=0,i=null,l=e===Q?0:1,o=!1,r=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ul(t),ref:t&&ds(t),scopeId:Ni,slotScopeIds:null,children:s,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:n,dynamicProps:i,dynamicChildren:null,appContext:null,ctx:xe};return r?(vs(a,s),l&128&&e.normalize(a)):s&&(a.shapeFlag|=te(s)?8:16),Yt>0&&!o&&ye&&(a.patchFlag>0||l&6)&&a.patchFlag!==32&&ye.push(a),a}const ae=sr;function sr(e,t=null,s=null,n=0,i=null,l=!1){if((!e||e===$o)&&(e=lt),cl(e)){const r=kt(e,t,!0);return s&&vs(r,s),Yt>0&&!l&&ye&&(r.shapeFlag&6?ye[ye.indexOf(e)]=r:ye.push(r)),r.patchFlag=-2,r}if(pr(e)&&(e=e.__vccOpts),t){t=nr(t);let{class:r,style:a}=t;r&&!te(r)&&(t.class=$e(r)),z(a)&&(mn(a)&&!U(a)&&(a=pe({},a)),t.style=an(a))}const o=te(e)?1:rl(e)?128:mo(e)?64:z(e)?4:V(e)?2:0;return d(e,t,s,n,i,o,l,!0)}function nr(e){return e?mn(e)||Zi(e)?pe({},e):e:null}function kt(e,t,s=!1,n=!1){const{props:i,ref:l,patchFlag:o,children:r,transition:a}=e,p=t?ir(i||{},t):i,u={__v_isVNode:!0,__v_skip:!0,type:e.type,props:p,key:p&&ul(p),ref:t&&t.ref?s&&l?U(l)?l.concat(ds(t)):[l,ds(t)]:ds(t):l,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:r,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Q?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:a,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&kt(e.ssContent),ssFallback:e.ssFallback&&kt(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return a&&n&&vn(u,a.clone(u)),u}function Se(e=" ",t=0){return ae(As,null,e,t)}function j(e="",t=!1){return t?(y(),st(lt,null,e)):ae(lt,null,e)}function je(e){return e==null||typeof e=="boolean"?ae(lt):U(e)?ae(Q,null,e.slice()):cl(e)?qe(e):ae(As,null,String(e))}function qe(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:kt(e)}function vs(e,t){let s=0;const{shapeFlag:n}=e;if(t==null)t=null;else if(U(t))s=16;else if(typeof t=="object")if(n&65){const i=t.default;i&&(i._c&&(i._d=!1),vs(e,i()),i._c&&(i._d=!0));return}else{s=32;const i=t._;!i&&!Zi(t)?t._ctx=xe:i===3&&xe&&(xe.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else if(V(t)){if(n&65){vs(e,{default:t});return}t={default:t,_ctx:xe},s=32}else t=String(t),n&64?(s=16,t=[Se(t)]):s=8;e.children=t,e.shapeFlag|=s}function ir(...e){const t={};for(let s=0;sbe||xe;let _s,tn;{const e=Cs(),t=(s,n)=>{let i;return(i=e[s])||(i=e[s]=[]),i.push(n),l=>{i.length>1?i.forEach(o=>o(l)):i[0](l)}};_s=t("__VUE_INSTANCE_SETTERS__",s=>be=s),tn=t("__VUE_SSR_SETTERS__",s=>Xt=s)}const es=e=>{const t=be;return _s(e),e.scope.on(),()=>{e.scope.off(),_s(t)}},Wn=()=>{be&&be.scope.off(),_s(null)};function fl(e){return e.vnode.shapeFlag&4}let Xt=!1;function cr(e,t=!1,s=!1){t&&tn(t);const{props:n,children:i}=e.vnode,l=fl(e);Ko(e,n,l,t),qo(e,i,s||t);const o=l?ur(e,t):void 0;return t&&tn(!1),o}function ur(e,t){const s=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Po);const{setup:n}=s;if(n){Ke();const i=e.setupContext=n.length>1?dr(e):null,l=es(e),o=Qt(n,e,0,[e.props,i]),r=fi(o);if(We(),l(),(r||e.sp)&&!Bt(e)&&Hi(e),r){if(o.then(Wn,Wn),t)return o.then(a=>{Gn(e,a)}).catch(a=>{ks(a,e,0)});e.asyncDep=o}else Gn(e,o)}else dl(e)}function Gn(e,t,s){V(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:z(t)&&(e.setupState=Mi(t)),dl(e)}function dl(e,t,s){const n=e.type;e.render||(e.render=n.render||He);{const i=es(e);Ke();try{Ao(e)}finally{We(),i()}}}const fr={get(e,t){return ce(e,"get",""),e[t]}};function dr(e){const t=s=>{e.exposed=s||{}};return{attrs:new Proxy(e.attrs,fr),slots:e.slots,emit:e.emit,expose:t}}function Os(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Mi(Zl(e.exposed)),{get(t,s){if(s in t)return t[s];if(s in Kt)return Kt[s](e)},has(t,s){return s in t||s in Kt}})):e.proxy}function pr(e){return V(e)&&"__vccOpts"in e}const vt=(e,t)=>no(e,t,Xt),hr="3.5.39";/** +* @vue/runtime-dom v3.5.39 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let sn;const zn=typeof window<"u"&&window.trustedTypes;if(zn)try{sn=zn.createPolicy("vue",{createHTML:e=>e})}catch{}const pl=sn?e=>sn.createHTML(e):e=>e,gr="http://www.w3.org/2000/svg",mr="http://www.w3.org/1998/Math/MathML",ze=typeof document<"u"?document:null,qn=ze&&ze.createElement("template"),br={insert:(e,t,s)=>{t.insertBefore(e,s||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,s,n)=>{const i=t==="svg"?ze.createElementNS(gr,e):t==="mathml"?ze.createElementNS(mr,e):s?ze.createElement(e,{is:s}):ze.createElement(e);return e==="select"&&n&&n.multiple!=null&&i.setAttribute("multiple",n.multiple),i},createText:e=>ze.createTextNode(e),createComment:e=>ze.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>ze.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,s,n,i,l){const o=s?s.previousSibling:t.lastChild;if(i&&(i===l||i.nextSibling))for(;t.insertBefore(i.cloneNode(!0),s),!(i===l||!(i=i.nextSibling)););else{qn.innerHTML=pl(n==="svg"?`${e}`:n==="mathml"?`${e}`:e);const r=qn.content;if(n==="svg"||n==="mathml"){const a=r.firstChild;for(;a.firstChild;)r.appendChild(a.firstChild);r.removeChild(a)}t.insertBefore(r,s)}return[o?o.nextSibling:t.firstChild,s?s.previousSibling:t.lastChild]}},vr=Symbol("_vtc");function _r(e,t,s){const n=e[vr];n&&(t=(t?[t,...n]:[...n]).join(" ")),t==null?e.removeAttribute("class"):s?e.setAttribute("class",t):e.className=t}const Jn=Symbol("_vod"),yr=Symbol("_vsh"),xr=Symbol(""),wr=/(?:^|;)\s*display\s*:/;function Sr(e,t,s){const n=e.style,i=te(s);let l=!1;if(s&&!i){if(t)if(te(t))for(const o of t.split(";")){const r=o.slice(0,o.indexOf(":")).trim();s[r]==null&&Ut(n,r,"")}else for(const o in t)s[o]==null&&Ut(n,o,"");for(const o in s){o==="display"&&(l=!0);const r=s[o];r!=null?Cr(e,o,!te(t)&&t?t[o]:void 0,r)||Ut(n,o,r):Ut(n,o,"")}}else if(i){if(t!==s){const o=n[xr];o&&(s+=";"+o),n.cssText=s,l=wr.test(s)}}else t&&e.removeAttribute("style");Jn in e&&(e[Jn]=l?n.display:"",e[yr]&&(n.display="none"))}const Yn=/\s*!important$/;function Ut(e,t,s){if(U(s))s.forEach(n=>Ut(e,t,n));else if(s==null&&(s=""),t.startsWith("--"))e.setProperty(t,s);else{const n=Tr(e,t);Yn.test(s)?e.setProperty(rt(n),s.replace(Yn,""),"important"):e[n]=s}}const Xn=["Webkit","Moz","ms"],Ks={};function Tr(e,t){const s=Ks[t];if(s)return s;let n=Ee(t);if(n!=="filter"&&n in e)return Ks[t]=n;n=hi(n);for(let i=0;iWs||(Or.then(()=>Ws=0),Ws=Date.now());function Mr(e,t){const s=n=>{if(!n._vts)n._vts=Date.now();else if(n._vts<=s.attached)return;const i=s.value;if(U(i)){const l=n.stopImmediatePropagation;n.stopImmediatePropagation=()=>{l.call(n),n._stopped=!0};const o=i.slice(),r=[n];for(let a=0;ae.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Ir=(e,t,s,n,i,l)=>{const o=i==="svg";t==="class"?_r(e,n,o):t==="style"?Sr(e,s,n):xs(t)?ws(t)||kr(e,t,s,n,l):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Dr(e,t,n,o))?(ei(e,t,n),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Qn(e,t,n,o,l,t!=="value")):e._isVueCE&&(Fr(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!te(n)))?ei(e,Ee(t),n,l,t):(t==="true-value"?e._trueValue=n:t==="false-value"&&(e._falseValue=n),Qn(e,t,n,o))};function Dr(e,t,s,n){if(n)return!!(t==="innerHTML"||t==="textContent"||t in e&&si(t)&&V(s));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 i=e.tagName;if(i==="IMG"||i==="VIDEO"||i==="CANVAS"||i==="SOURCE")return!1}return si(t)&&te(s)?!1:t in e}function Fr(e,t){const s=e._def.props;if(!s)return!1;const n=Ee(t);return Array.isArray(s)?s.some(i=>Ee(i)===n):Object.keys(s).some(i=>Ee(i)===n)}const ot=e=>{const t=e.props["onUpdate:modelValue"]||!1;return U(t)?s=>us(t,s):t};function Lr(e){e.target.composing=!0}function ni(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Te=Symbol("_assign");function ii(e,t,s){return t&&(e=e.trim()),s&&(e=Ts(e)),e}const de={created(e,{modifiers:{lazy:t,trim:s,number:n}},i){e[Te]=ot(i);const l=n||i.props&&i.props.type==="number";Xe(e,t?"change":"input",o=>{o.target.composing||e[Te](ii(e.value,s,l))}),(s||l)&&Xe(e,"change",()=>{e.value=ii(e.value,s,l)}),t||(Xe(e,"compositionstart",Lr),Xe(e,"compositionend",ni),Xe(e,"change",ni))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:s,modifiers:{lazy:n,trim:i,number:l}},o){if(e[Te]=ot(o),e.composing)return;const r=(l||e.type==="number")&&!/^0\d/.test(e.value)?Ts(e.value):e.value,a=t??"";if(r===a)return;const p=e.getRootNode();(p instanceof Document||p instanceof ShadowRoot)&&p.activeElement===e&&e.type!=="range"&&(n&&t===s||i&&e.value.trim()===a)||(e.value=a)}},Ur={deep:!0,created(e,t,s){e[Te]=ot(s),Xe(e,"change",()=>{const n=e._modelValue,i=$t(e),l=e.checked,o=e[Te];if(U(n)){const r=cn(n,i),a=r!==-1;if(l&&!a)o(n.concat(i));else if(!l&&a){const p=[...n];p.splice(r,1),o(p)}}else if(At(n)){const r=new Set(n);l?r.add(i):r.delete(i),o(r)}else o(hl(e,l))})},mounted:li,beforeUpdate(e,t,s){e[Te]=ot(s),li(e,t,s)}};function li(e,{value:t,oldValue:s},n){e._modelValue=t;let i;if(U(t))i=cn(t,n.props.value)>-1;else if(At(t))i=t.has(n.props.value);else{if(t===s)return;i=it(t,hl(e,!0))}e.checked!==i&&(e.checked=i)}const Nr={created(e,{value:t},s){e.checked=it(t,s.props.value),e[Te]=ot(s),Xe(e,"change",()=>{e[Te]($t(e))})},beforeUpdate(e,{value:t,oldValue:s},n){e[Te]=ot(n),t!==s&&(e.checked=it(t,n.props.value))}},ys={deep:!0,created(e,{value:t,modifiers:{number:s}},n){const i=At(t);Xe(e,"change",()=>{const l=Array.prototype.filter.call(e.options,o=>o.selected).map(o=>s?Ts($t(o)):$t(o));e[Te](e.multiple?i?new Set(l):l:l[0]),e._assigning=!0,Di(()=>{e._assigning=!1})}),e[Te]=ot(n)},mounted(e,{value:t}){oi(e,t)},beforeUpdate(e,t,s){e[Te]=ot(s)},updated(e,{value:t}){e._assigning||oi(e,t)}};function oi(e,t){const s=e.multiple,n=U(t);if(!(s&&!n&&!At(t))){for(let i=0,l=e.options.length;iString(p)===String(r)):o.selected=cn(t,r)>-1}else o.selected=t.has(r);else if(it($t(o),t)){e.selectedIndex!==i&&(e.selectedIndex=i);return}}!s&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function $t(e){return"_value"in e?e._value:e.value}function hl(e,t){const s=t?"_trueValue":"_falseValue";return s in e?e[s]:t}const jr={created(e,t,s){cs(e,t,s,null,"created")},mounted(e,t,s){cs(e,t,s,null,"mounted")},beforeUpdate(e,t,s,n){cs(e,t,s,n,"beforeUpdate")},updated(e,t,s,n){cs(e,t,s,n,"updated")}};function Vr(e,t){switch(e){case"SELECT":return ys;case"TEXTAREA":return de;default:switch(t){case"checkbox":return Ur;case"radio":return Nr;default:return de}}}function cs(e,t,s,n,i){const o=Vr(e.tagName,s.props&&s.props.type)[i];o&&o(e,t,s,n)}const Hr=["ctrl","shift","alt","meta"],Br={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)=>Hr.some(s=>e[`${s}Key`]&&!t.includes(s))},Kr=(e,t)=>{if(!e)return e;const s=e._withMods||(e._withMods={}),n=t.join(".");return s[n]||(s[n]=((i,...l)=>{for(let o=0;o{const s=e._withKeys||(e._withKeys={}),n=t.join(".");return s[n]||(s[n]=(i=>{if(!("key"in i))return;const l=rt(i.key);if(t.some(o=>o===l||Wr[o]===l))return e(i)}))},zr=pe({patchProp:Ir},br);let ri;function qr(){return ri||(ri=Yo(zr))}const Jr=((...e)=>{const t=qr().createApp(...e),{mount:s}=t;return t.mount=n=>{const i=Xr(n);if(!i)return;const l=t._component;!V(l)&&!l.render&&!l.template&&(l.template=i.innerHTML),i.nodeType===1&&(i.textContent="");const o=s(i,!1,Yr(i));return i instanceof Element&&(i.removeAttribute("v-cloak"),i.setAttribute("data-v-app","")),o},t});function Yr(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Xr(e){return te(e)?document.querySelector(e):e}const gl="dh-panel-theme";function Zr(){var e;try{const t=localStorage.getItem(gl);if(t==="dark"||t==="light")return t}catch{}return(e=window.matchMedia)!=null&&e.call(window,"(prefers-color-scheme: dark)").matches?"dark":"light"}const Ct=H(Zr());function ml(e){Ct.value=e,document.documentElement.classList.toggle("dark",e==="dark");try{localStorage.setItem(gl,e)}catch{}}function ai(){ml(Ct.value==="dark"?"light":"dark")}ml(Ct.value);const nn="dh-panel-token";function Qr(){try{return localStorage.getItem(nn)||""}catch{return""}}const Pt=H(Qr()),ue=H(null),gt=vt(()=>{var e;return((e=ue.value)==null?void 0:e.role)==="superadmin"}),ci=vt(()=>{var e,t;return((e=ue.value)==null?void 0:e.role)==="admin"||((t=ue.value)==null?void 0:t.role)==="superadmin"});function bl(e){Pt.value=e;try{e?localStorage.setItem(nn,e):localStorage.removeItem(nn)}catch{}}class ea extends Error{constructor(t,s,n){super(t),this.status=s,this.body=n}}function ta(e,t){if(!e||typeof e!="object")return`HTTP ${t}`;if(e.error)return e.error;const s=Object.entries(e.data||{}).map(([n,i])=>`${n}: ${(i==null?void 0:i.message)||i}`).filter(Boolean);return s.length?s.join("; "):e.message||`HTTP ${t}`}async function ee(e,{method:t="GET",body:s,auth:n=!0}={}){const i={};s!==void 0&&(i["Content-Type"]="application/json"),n&&Pt.value&&(i.Authorization=Pt.value);const l=await fetch(e,{method:t,headers:i,body:s===void 0?void 0:JSON.stringify(s)}),o=await l.text();let r=null;try{r=o?JSON.parse(o):null}catch{r=null}if(!l.ok)throw l.status===401&&n&&wn(),new ea(ta(r,l.status),l.status,r);return r}async function sa(e,t){const s=await ee("/api/auth/login",{method:"POST",body:{email:e,password:t},auth:!1});return bl(s.token),await vl(),ue.value}async function vl(){return ue.value=await ee("/api/identity"),ue.value}function wn(){bl(""),ue.value=null}async function na(){if(!Pt.value)return null;try{return await vl()}catch{return wn(),null}}const ia={class:"mx-auto flex w-full max-w-sm flex-col gap-5 pt-24"},la={class:"dh-card p-6"},oa={key:0,class:"rounded-control bg-danger-soft px-3 py-2 text-xs text-danger"},ra=["disabled"],aa={__name:"LoginView",emits:["authenticated"],setup(e,{emit:t}){const s=t,n=H(""),i=H(""),l=H(""),o=H(!1),r=vt(()=>n.value.trim()!==""&&i.value!==""&&!o.value);async function a(){if(r.value){l.value="",o.value=!0;try{const p=await sa(n.value.trim(),i.value);s("authenticated",p)}catch(p){l.value=p.status===400||p.status===404?"Invalid email or password.":p.message||"Could not sign in.",i.value=""}finally{o.value=!1}}}return(p,u)=>(y(),E("div",ia,[d("div",la,[u[4]||(u[4]=d("h1",{class:"text-lg font-bold tracking-[-0.02em] text-strong"},"Sign in",-1)),u[5]||(u[5]=d("p",{class:"mt-1 mb-5 text-sm text-body"}," Superadmin console for the DriverVault API Server. ",-1)),d("form",{class:"flex flex-col gap-4",onSubmit:Kr(a,["prevent"])},[d("div",null,[u[2]||(u[2]=d("label",{class:"dh-label",for:"login-email"},"Email",-1)),le(d("input",{id:"login-email","onUpdate:modelValue":u[0]||(u[0]=h=>n.value=h),class:"dh-input",type:"email",autocomplete:"username",autofocus:"",placeholder:"you@example.com"},null,512),[[de,n.value]])]),d("div",null,[u[3]||(u[3]=d("label",{class:"dh-label",for:"login-password"},"Password",-1)),le(d("input",{id:"login-password","onUpdate:modelValue":u[1]||(u[1]=h=>i.value=h),class:"dh-input",type:"password",autocomplete:"current-password",placeholder:"••••••••"},null,512),[[de,i.value]])]),l.value?(y(),E("p",oa,I(l.value),1)):j("",!0),d("button",{class:"dh-btn w-full",type:"submit",disabled:!r.value},I(o.value?"Signing in…":"Sign in"),9,ra)],32)]),u[6]||(u[6]=d("p",{class:"eyebrow text-center"}," Authenticates against PocketBase through this server ",-1))]))}},ca={class:"dh-card overflow-hidden"},ua={class:"flex items-center justify-between border-b border-subtle px-5 py-4"},fa={key:0,class:"dh-pill bg-danger-soft text-danger"},da={key:0,class:"px-5 py-4 text-sm text-danger"},pa={key:1,class:"w-full text-left text-sm"},ha={class:"px-5 py-3 font-medium text-strong"},ga={class:"data px-5 py-3 text-xs text-muted"},ma={class:"data px-5 py-3 text-right text-xs text-muted"},ba={class:"px-5 py-3 text-right"},va={key:2,class:"px-5 py-4 text-sm text-muted"},_a={__name:"StatusCard",setup(e){const t=H(null),s=H("");let n=null;async function i(){try{t.value=await ee("/api/status",{auth:!1}),s.value=""}catch(o){t.value=null,s.value=o.message||"unreachable"}}at(()=>{i(),n=setInterval(i,1e4)}),_n(()=>clearInterval(n));const l=o=>o==="ok"?"bg-success-soft text-success":"bg-danger-soft text-danger";return(o,r)=>(y(),E("div",ca,[d("div",ua,[r[1]||(r[1]=d("div",{class:"text-base font-bold tracking-[-0.02em] text-strong"},"Status",-1)),s.value?(y(),E("span",fa,[...r[0]||(r[0]=[d("span",{class:"h-1.5 w-1.5 rounded-full bg-current"},null,-1),Se("unreachable ",-1)])])):j("",!0)]),s.value?(y(),E("div",da,I(s.value),1)):t.value?(y(),E("table",pa,[d("tbody",null,[(y(!0),E(Q,null,Ce([{key:"apiServer",label:"API Server",h:t.value.apiServer},{key:"pocketBase",label:"PocketBase",h:t.value.pocketBase},{key:"webApp",label:"Web App",h:t.value.webApp}],a=>(y(),E("tr",{key:a.key,class:"border-t border-subtle first:border-t-0"},[d("td",ha,I(a.label),1),d("td",ga,I(a.h.url||"this process"),1),d("td",ma,I(a.h.latencyMs!=null?a.h.latencyMs+"ms":"—"),1),d("td",ba,[d("span",{class:$e(["dh-pill",l(a.h.status)])},[r[2]||(r[2]=d("span",{class:"h-1.5 w-1.5 rounded-full bg-current"},null,-1)),Se(I(a.h.status),1)],2)])]))),128))])])):(y(),E("div",va,"Checking…"))]))}},ya={class:"dh-card overflow-hidden"},xa={class:"flex items-center justify-between border-b border-subtle px-5 py-4"},wa={class:"flex flex-col gap-4 px-5 py-4"},Sa={class:"grid gap-4 sm:grid-cols-2"},Ta=["placeholder"],Ca={key:0,class:"data text-xs text-muted"},Ea={key:1,class:"rounded-control bg-info-soft px-3 py-2 text-xs text-info"},ka={key:2,class:"rounded-control bg-danger-soft px-3 py-2 text-xs text-danger"},$a={class:"flex items-center gap-2"},Pa=["disabled"],Aa=["disabled"],Oa={__name:"PocketBaseCard",setup(e){const t=H(null),s=H({url:"",adminEmail:"",adminPassword:""}),n=H(null),i=H(""),l=H(""),o=H(!1);async function r(){try{t.value=await ee("/api/admin/pb-config"),s.value={url:t.value.url,adminEmail:t.value.adminEmail,adminPassword:""},n.value=t.value.probe}catch(u){i.value=u.message}}at(r);async function a(){i.value="",l.value="",o.value=!0;try{n.value=await ee("/api/admin/pb-config/test",{method:"POST",body:s.value}),l.value=n.value.superuser?"Connection OK — superuser authenticated.":n.value.reachable?"PocketBase is reachable, but the service account did not authenticate.":"PocketBase is not reachable at that address."}catch(u){i.value=u.message}finally{o.value=!1}}async function p(){i.value="",l.value="",o.value=!0;try{const u=await ee("/api/admin/pb-config",{method:"PUT",body:s.value});t.value=u.config,n.value=u.config.probe,s.value.adminPassword="",l.value=u.warning||"Saved. The server is now using this PocketBase."}catch(u){i.value=u.message}finally{o.value=!1}}return(u,h)=>{var b,x;return y(),E("div",ya,[d("div",xa,[h[4]||(h[4]=d("div",null,[d("div",{class:"text-base font-bold tracking-[-0.02em] text-strong"},"PocketBase"),d("p",{class:"mt-0.5 text-xs text-muted"},"Database connection used by every endpoint")],-1)),n.value?(y(),E("span",{key:0,class:$e(["dh-pill",n.value.superuser?"bg-success-soft text-success":n.value.reachable?"bg-warning-soft text-warning":"bg-danger-soft text-danger"])},[h[3]||(h[3]=d("span",{class:"h-1.5 w-1.5 rounded-full bg-current"},null,-1)),Se(" "+I(n.value.superuser?"connected":n.value.reachable?"no superuser":"unreachable"),1)],2)):j("",!0)]),d("div",wa,[d("div",null,[h[5]||(h[5]=d("label",{class:"dh-label",for:"pb-url"},"Base URL",-1)),le(d("input",{id:"pb-url","onUpdate:modelValue":h[0]||(h[0]=D=>s.value.url=D),class:"dh-input",placeholder:"http://10.2.1.10:8027"},null,512),[[de,s.value.url]])]),d("div",Sa,[d("div",null,[h[6]||(h[6]=d("label",{class:"dh-label",for:"pb-email"},"Superuser email",-1)),le(d("input",{id:"pb-email","onUpdate:modelValue":h[1]||(h[1]=D=>s.value.adminEmail=D),class:"dh-input",autocomplete:"off"},null,512),[[de,s.value.adminEmail]])]),d("div",null,[h[7]||(h[7]=d("label",{class:"dh-label",for:"pb-password"},"Superuser password",-1)),le(d("input",{id:"pb-password","onUpdate:modelValue":h[2]||(h[2]=D=>s.value.adminPassword=D),class:"dh-input",type:"password",autocomplete:"new-password",placeholder:(b=t.value)!=null&&b.adminConfigured?"unchanged":"not set"},null,8,Ta),[[de,s.value.adminPassword]])])]),(x=n.value)!=null&&x.detail?(y(),E("p",Ca,I(n.value.detail),1)):j("",!0),l.value?(y(),E("p",Ea,I(l.value),1)):j("",!0),i.value?(y(),E("p",ka,I(i.value),1)):j("",!0),d("div",$a,[d("button",{class:"dh-btn",disabled:o.value,onClick:p},"Save & apply",8,Pa),d("button",{class:"dh-btn-ghost",disabled:o.value,onClick:a},"Test connection",8,Aa),h[8]||(h[8]=d("span",{class:"flex-1"},null,-1)),h[9]||(h[9]=d("span",{class:"eyebrow"},"persisted to .env",-1))])])])}}},Ra={class:"dh-card overflow-hidden"},Ma={class:"flex items-center justify-between border-b border-subtle px-5 py-4"},Ia={class:"flex flex-col gap-4 px-5 py-4"},Da={key:0,class:"data text-xs text-muted"},Fa={key:1,class:"rounded-control bg-info-soft px-3 py-2 text-xs text-info"},La={key:2,class:"rounded-control bg-danger-soft px-3 py-2 text-xs text-danger"},Ua={class:"flex items-center gap-2"},Na=["disabled"],ja=["disabled"],Va={__name:"WebAppCard",setup(e){const t=H(null),s=H({url:"",origins:""}),n=H(null),i=H(""),l=H(""),o=H(!1),r=b=>b.split(",").map(x=>x.trim()).filter(Boolean);function a(b){t.value=b,s.value={url:b.url,origins:(b.allowOrigins||[]).join(", ")},n.value=b.probe}async function p(){try{a(await ee("/api/admin/webapp-config"))}catch(b){i.value=b.message}}at(p);async function u(){i.value="",l.value="",o.value=!0;try{n.value=await ee("/api/admin/webapp-config/test",{method:"POST",body:{url:s.value.url}}),l.value=n.value.status==="ok"?"Web App is reachable.":"Web App did not answer its health check at that address."}catch(b){i.value=b.message}finally{o.value=!1}}async function h(){i.value="",l.value="",o.value=!0;try{const b=await ee("/api/admin/webapp-config",{method:"PUT",body:{url:s.value.url,allowOrigins:r(s.value.origins)}});a(b.config),l.value=b.warning||"Saved. New origins apply to the next request."}catch(b){i.value=b.message}finally{o.value=!1}}return(b,x)=>{var D;return y(),E("div",Ra,[d("div",Ma,[x[3]||(x[3]=d("div",null,[d("div",{class:"text-base font-bold tracking-[-0.02em] text-strong"},"Web App"),d("p",{class:"mt-0.5 text-xs text-muted"},"Address probed by the status check, and who may call this API from a browser")],-1)),n.value?(y(),E("span",{key:0,class:$e(["dh-pill",n.value.status==="ok"?"bg-success-soft text-success":"bg-danger-soft text-danger"])},[x[2]||(x[2]=d("span",{class:"h-1.5 w-1.5 rounded-full bg-current"},null,-1)),Se(" "+I(n.value.status==="ok"?"reachable":"unreachable"),1)],2)):j("",!0)]),d("div",Ia,[d("div",null,[x[4]||(x[4]=d("label",{class:"dh-label",for:"web-url"},"Base URL",-1)),le(d("input",{id:"web-url","onUpdate:modelValue":x[0]||(x[0]=S=>s.value.url=S),class:"dh-input",placeholder:"http://localhost:5173"},null,512),[[de,s.value.url]])]),d("div",null,[x[5]||(x[5]=d("label",{class:"dh-label",for:"web-origins"},"Allowed origins",-1)),le(d("input",{id:"web-origins","onUpdate:modelValue":x[1]||(x[1]=S=>s.value.origins=S),class:"dh-input",placeholder:"http://localhost:5173, https://app.example.com"},null,512),[[de,s.value.origins]]),x[6]||(x[6]=d("p",{class:"mt-1 text-xs text-muted"},[Se(" Comma separated, or "),d("span",{class:"data"},"*"),Se(" for any. Native mobile apps are not subject to CORS. ")],-1))]),(D=n.value)!=null&&D.error?(y(),E("p",Da,I(n.value.error),1)):j("",!0),l.value?(y(),E("p",Fa,I(l.value),1)):j("",!0),i.value?(y(),E("p",La,I(i.value),1)):j("",!0),d("div",Ua,[d("button",{class:"dh-btn",disabled:o.value,onClick:h},"Save & apply",8,Na),d("button",{class:"dh-btn-ghost",disabled:o.value,onClick:u},"Test connection",8,ja),x[7]||(x[7]=d("span",{class:"flex-1"},null,-1)),x[8]||(x[8]=d("span",{class:"eyebrow"},"persisted to .env",-1))])])])}}},Ha={class:"dh-card overflow-hidden"},Ba={class:"flex items-center justify-between border-b border-subtle px-5 py-4"},Ka={key:0,class:"border-b border-subtle bg-sunken px-5 py-4"},Wa={class:"grid gap-3 sm:grid-cols-3"},Ga=["disabled"],za={key:1,class:"border-b border-subtle px-5 py-3 text-xs text-danger"},qa={key:2,class:"px-5 py-6 text-center text-sm text-muted"},Ja={class:"flex items-center gap-3 px-5 py-3"},Ya=["onClick"],Xa={class:"font-semibold text-strong"},Za={class:"dh-pill bg-sunken text-muted"},Qa={key:0,class:"text-xs text-muted"},ec=["disabled","onClick"],tc=["disabled","onClick"],sc={key:0,class:"bg-sunken px-5 py-4"},nc={key:0,class:"data mb-3 text-xs text-muted"},ic={key:1,class:"grid gap-3 sm:grid-cols-2"},lc={class:"dh-label"},oc={key:0,class:"text-danger"},rc=["onUpdate:modelValue"],ac=["value"],cc=["onUpdate:modelValue","type","placeholder"],uc={key:2,class:"mt-1 text-xs text-muted"},fc={key:2,class:"text-xs text-muted"},dc={key:3,class:"mt-4"},pc={class:"data flex flex-col gap-1 text-xs text-muted"},hc={class:"text-strong"},gc={key:0},mc={key:1},bc={key:4,class:"data mt-3 text-xs text-body"},vc={class:"mt-4 flex items-center gap-2"},_c=["disabled","onClick"],yc=["disabled","onClick"],xc=["disabled","onClick"],wc={key:5,class:"eyebrow mt-2"},Sc={__name:"PluginsCard",setup(e){const t=H([]),s=H(""),n=H(!1),i=H(null),l=qt({}),o=qt({}),r=H(!1),a=H({name:"",baseURL:"",provider:""});async function p(){try{const C=await ee("/api/admin/plugins");t.value=C.plugins||[],s.value=""}catch(C){s.value=C.message}}at(p);function u(C){var k;if(i.value===C.name){i.value=null;return}const T={};for(const R of C.configFields||[])T[R.key]=((k=C.config)==null?void 0:k[R.key])??"";l[C.name]=T,i.value=C.name}async function h(C,T){n.value=!0,o[C.name]="";try{const k=await ee(`/api/admin/plugins/${encodeURIComponent(C.name)}`,{method:"PUT",body:{enabled:T,config:l[C.name]??{}}});o[C.name]=k.warning||"Saved.",await p()}catch(k){o[C.name]=k.message}finally{n.value=!1}}async function b(C){n.value=!0,o[C.name]="Checking…";try{const T=await ee(`/api/admin/plugins/${encodeURIComponent(C.name)}/health`,{method:"POST"});o[C.name]=`${T.health.status}${T.health.detail?" — "+T.health.detail:""}`,await p()}catch(T){o[C.name]=T.message}finally{n.value=!1}}async function x(C){if(confirm(`Remove the external plugin "${C.name}"? Its saved config is deleted.`)){n.value=!0;try{await ee(`/api/admin/plugins/${encodeURIComponent(C.name)}`,{method:"DELETE"}),i.value===C.name&&(i.value=null),await p()}catch(T){o[C.name]=T.message}finally{n.value=!1}}}async function D(){n.value=!0,s.value="";try{await ee("/api/admin/plugins",{method:"POST",body:a.value}),a.value={name:"",baseURL:"",provider:""},r.value=!1,await p()}catch(C){s.value=C.message}finally{n.value=!1}}const S=C=>C==="ok"?"bg-success-soft text-success":C==="degraded"?"bg-warning-soft text-warning":"bg-danger-soft text-danger";return(C,T)=>(y(),E("div",Ha,[d("div",Ba,[T[4]||(T[4]=d("div",null,[d("div",{class:"text-base font-bold tracking-[-0.02em] text-strong"},"Plugins"),d("p",{class:"mt-0.5 text-xs text-muted"},"Third-party service integrations")],-1)),d("button",{class:"dh-btn-ghost",onClick:T[0]||(T[0]=k=>r.value=!r.value)},I(r.value?"Cancel":"Register external"),1)]),r.value?(y(),E("div",Ka,[d("div",Wa,[d("div",null,[T[5]||(T[5]=d("label",{class:"dh-label"},"Name",-1)),le(d("input",{"onUpdate:modelValue":T[1]||(T[1]=k=>a.value.name=k),class:"dh-input",placeholder:"acme-parts"},null,512),[[de,a.value.name]])]),d("div",null,[T[6]||(T[6]=d("label",{class:"dh-label"},"Base URL",-1)),le(d("input",{"onUpdate:modelValue":T[2]||(T[2]=k=>a.value.baseURL=k),class:"dh-input",placeholder:"http://127.0.0.1:9100"},null,512),[[de,a.value.baseURL]])]),d("div",null,[T[7]||(T[7]=d("label",{class:"dh-label"},"Provider",-1)),le(d("input",{"onUpdate:modelValue":T[3]||(T[3]=k=>a.value.provider=k),class:"dh-input",placeholder:"ACME Corp"},null,512),[[de,a.value.provider]])])]),d("button",{class:"dh-btn mt-3",disabled:n.value||!a.value.name||!a.value.baseURL,onClick:D}," Register ",8,Ga)])):j("",!0),s.value?(y(),E("p",za,I(s.value),1)):j("",!0),t.value.length?j("",!0):(y(),E("p",qa," No plugins yet. Register an external one above, or compile a built-in connector. ")),(y(!0),E(Q,null,Ce(t.value,k=>(y(),E("div",{key:k.name,class:"border-t border-subtle first:border-t-0"},[d("div",Ja,[d("button",{class:"flex flex-1 items-center gap-3 text-left",onClick:R=>u(k)},[d("span",Xa,I(k.name),1),d("span",Za,I(k.kind||"builtin"),1),k.provider?(y(),E("span",Qa,I(k.provider),1)):j("",!0),k.health?(y(),E("span",{key:1,class:$e(["dh-pill",S(k.health.status)])},[T[8]||(T[8]=d("span",{class:"h-1.5 w-1.5 rounded-full bg-current"},null,-1)),Se(I(k.health.status),1)],2)):j("",!0)],8,Ya),d("span",{class:$e(["dh-pill",k.enabled?"bg-success-soft text-success":"bg-sunken text-muted"])},I(k.enabled?"enabled":"disabled"),3),d("button",{class:"dh-btn-ghost",disabled:n.value,onClick:R=>b(k)},"Health",8,ec),d("button",{class:"dh-btn-ghost",disabled:n.value,onClick:R=>u(k)},I(i.value===k.name?"Close":"Configure"),9,tc)]),i.value===k.name?(y(),E("div",sc,[k.baseURL?(y(),E("div",nc,I(k.baseURL),1)):j("",!0),(k.configFields||[]).length?(y(),E("div",ic,[(y(!0),E(Q,null,Ce(k.configFields,R=>(y(),E("div",{key:R.key},[d("label",lc,[Se(I(R.label||R.key),1),R.required?(y(),E("span",oc," *")):j("",!0)]),R.type==="select"?le((y(),E("select",{key:0,"onUpdate:modelValue":M=>l[k.name][R.key]=M,class:"dh-select"},[(y(!0),E(Q,null,Ce(R.options||[],M=>(y(),E("option",{key:M.value,value:M.value},I(M.label||M.value),9,ac))),128))],8,rc)),[[ys,l[k.name][R.key]]]):le((y(),E("input",{key:1,"onUpdate:modelValue":M=>l[k.name][R.key]=M,class:"dh-input",type:R.type==="password"?"password":R.type==="number"?"number":"text",placeholder:R.default||"",autocomplete:"off"},null,8,cc)),[[jr,l[k.name][R.key]]]),R.help?(y(),E("p",uc,I(R.help),1)):j("",!0)]))),128))])):(y(),E("p",fc,"This plugin takes no configuration.")),(k.capabilities||[]).length?(y(),E("div",dc,[T[9]||(T[9]=d("div",{class:"eyebrow mb-1.5"},"Capabilities",-1)),d("ul",pc,[(y(!0),E(Q,null,Ce(k.capabilities,R=>(y(),E("li",{key:R.id},[d("span",hc,I(R.id),1),R.method||R.endpoint?(y(),E("span",gc," — "+I(R.method)+" "+I(R.endpoint),1)):j("",!0),R.description?(y(),E("span",mc," · "+I(R.description),1)):j("",!0)]))),128))])])):j("",!0),o[k.name]?(y(),E("p",bc,I(o[k.name]),1)):j("",!0),d("div",vc,[d("button",{class:"dh-btn",disabled:n.value,onClick:R=>h(k,!0)},I(k.enabled?"Save":"Save & enable"),9,_c),k.enabled?(y(),E("button",{key:0,class:"dh-btn-ghost",disabled:n.value,onClick:R=>h(k,!1)}," Disable ",8,yc)):j("",!0),T[10]||(T[10]=d("span",{class:"flex-1"},null,-1)),k.kind==="external"?(y(),E("button",{key:1,class:"dh-btn-danger",disabled:n.value,onClick:R=>x(k)}," Remove ",8,xc)):j("",!0)]),k.kind!=="external"?(y(),E("p",wc," Built-in plugins can be disabled but not removed ")):j("",!0)])):j("",!0)]))),128))]))}},Tc={class:"dh-card overflow-hidden"},Cc={class:"flex items-center justify-between border-b border-subtle px-5 py-4"},Ec={class:"mt-0.5 text-xs text-muted"},kc={key:0,class:"border-b border-subtle px-5 py-3 text-xs text-danger"},$c={key:1,class:"border-b border-subtle bg-sunken px-5 py-4"},Pc={class:"grid gap-3 sm:grid-cols-2"},Ac={class:"dh-label"},Oc=["value"],Rc={key:0},Mc=["value"],Ic={class:"mt-3 flex items-center gap-2"},Dc=["disabled"],Fc=["disabled"],Lc={key:2,class:"px-5 py-6 text-center text-sm text-muted"},Uc={key:3,class:"w-full text-left text-sm"},Nc={class:"data px-5 py-2.5 text-xs text-strong"},jc={key:0,class:"eyebrow ml-1"},Vc={class:"px-5 py-2.5 text-body"},Hc={class:"px-5 py-2.5 text-body"},Bc={class:"px-5 py-2.5"},Kc={class:"px-5 py-2.5 text-right whitespace-nowrap"},Wc=["onClick"],Gc=["disabled","onClick"],zc={__name:"UsersCard",setup(e){const t=H([]),s=H([]),n=H(""),i=H(!1),l=H(null),o=H({}),r=vt(()=>gt.value?["user","admin","superadmin"]:["user","admin"]);async function a(){try{const[S,C]=await Promise.all([ee("/api/users"),ee("/api/orgs")]);t.value=S.users||[],s.value=C.organizations||[],n.value=""}catch(S){n.value=S.message}}at(a);function p(){var S;l.value="new",o.value={email:"",name:"",password:"",role:"user",organization:gt.value?"":((S=ue.value)==null?void 0:S.organization)||""}}function u(S){l.value=S.id,o.value={email:S.email,name:S.name||"",password:"",role:S.role,organization:S.organization||""}}function h(){l.value=null,n.value=""}async function b(){i.value=!0,n.value="";try{if(l.value==="new")await ee("/api/users",{method:"POST",body:o.value});else{const S={...o.value};S.password||delete S.password,await ee(`/api/users/${l.value}`,{method:"PATCH",body:S})}l.value=null,await a()}catch(S){n.value=S.message}finally{i.value=!1}}async function x(S){if(confirm(`Delete ${S.email}? This cannot be undone.`)){i.value=!0,n.value="";try{await ee(`/api/users/${S.id}`,{method:"DELETE"}),await a()}catch(C){n.value=C.message}finally{i.value=!1}}}const D=S=>S==="superadmin"?"bg-info-soft text-info":S==="admin"?"bg-warning-soft text-warning":"bg-sunken text-muted";return(S,C)=>(y(),E("div",Tc,[d("div",Cc,[d("div",null,[C[5]||(C[5]=d("div",{class:"text-base font-bold tracking-[-0.02em] text-strong"},"Users",-1)),d("p",Ec,I(ne(gt)?"All organizations":"Your organization"),1)]),d("button",{class:"dh-btn",onClick:p},"New user")]),n.value?(y(),E("p",kc,I(n.value),1)):j("",!0),l.value?(y(),E("div",$c,[d("div",Pc,[d("div",null,[C[6]||(C[6]=d("label",{class:"dh-label"},"Email",-1)),le(d("input",{"onUpdate:modelValue":C[0]||(C[0]=T=>o.value.email=T),class:"dh-input",type:"email",autocomplete:"off"},null,512),[[de,o.value.email]])]),d("div",null,[C[7]||(C[7]=d("label",{class:"dh-label"},"Name",-1)),le(d("input",{"onUpdate:modelValue":C[1]||(C[1]=T=>o.value.name=T),class:"dh-input",autocomplete:"off"},null,512),[[de,o.value.name]])]),d("div",null,[d("label",Ac," Password"+I(l.value==="new"?"":" (blank = unchanged)"),1),le(d("input",{"onUpdate:modelValue":C[2]||(C[2]=T=>o.value.password=T),class:"dh-input",type:"password",autocomplete:"new-password",placeholder:"min 8 characters"},null,512),[[de,o.value.password]])]),d("div",null,[C[8]||(C[8]=d("label",{class:"dh-label"},"Role",-1)),le(d("select",{"onUpdate:modelValue":C[3]||(C[3]=T=>o.value.role=T),class:"dh-select"},[(y(!0),E(Q,null,Ce(r.value,T=>(y(),E("option",{key:T,value:T},I(T),9,Oc))),128))],512),[[ys,o.value.role]])]),ne(gt)?(y(),E("div",Rc,[C[10]||(C[10]=d("label",{class:"dh-label"},"Organization",-1)),le(d("select",{"onUpdate:modelValue":C[4]||(C[4]=T=>o.value.organization=T),class:"dh-select"},[C[9]||(C[9]=d("option",{value:""},"— none —",-1)),(y(!0),E(Q,null,Ce(s.value,T=>(y(),E("option",{key:T.id,value:T.id},I(T.name),9,Mc))),128))],512),[[ys,o.value.organization]])])):j("",!0)]),d("div",Ic,[d("button",{class:"dh-btn",disabled:i.value,onClick:b},I(l.value==="new"?"Create":"Save"),9,Dc),d("button",{class:"dh-btn-ghost",disabled:i.value,onClick:h},"Cancel",8,Fc)])])):j("",!0),t.value.length?(y(),E("table",Uc,[C[11]||(C[11]=d("thead",null,[d("tr",{class:"[&>th]:eyebrow [&>th]:px-5 [&>th]:py-2.5 [&>th]:font-medium"},[d("th",null,"Email"),d("th",null,"Name"),d("th",null,"Organization"),d("th",null,"Role"),d("th")])],-1)),d("tbody",null,[(y(!0),E(Q,null,Ce(t.value,T=>{var k,R;return y(),E("tr",{key:T.id,class:"border-t border-subtle transition-colors hover:bg-sunken"},[d("td",Nc,[Se(I(T.email)+" ",1),T.id===((k=ne(ue))==null?void 0:k.id)?(y(),E("span",jc,"you")):j("",!0)]),d("td",Vc,I(T.name||"—"),1),d("td",Hc,I(T.organizationName||"—"),1),d("td",Bc,[d("span",{class:$e(["dh-pill",D(T.role)])},I(T.role),3)]),d("td",Kc,[d("button",{class:"dh-btn-ghost",onClick:M=>u(T)},"Edit",8,Wc),T.id!==((R=ne(ue))==null?void 0:R.id)?(y(),E("button",{key:0,class:"dh-btn-danger ml-1.5",disabled:i.value,onClick:M=>x(T)}," Delete ",8,Gc)):j("",!0)])])}),128))])])):(y(),E("p",Lc,"No users."))]))}},qc={class:"dh-card overflow-hidden"},Jc={class:"flex items-center justify-between border-b border-subtle px-5 py-4"},Yc={key:0,class:"border-b border-subtle px-5 py-3 text-xs text-danger"},Xc={key:1,class:"border-b border-subtle bg-sunken px-5 py-4"},Zc={class:"mt-3 flex items-center gap-2"},Qc=["disabled"],eu=["disabled"],tu={key:2,class:"px-5 py-6 text-center text-sm text-muted"},su={key:3,class:"w-full text-left text-sm"},nu={class:"px-5 py-2.5 font-medium text-strong"},iu={class:"data px-5 py-2.5 text-xs text-muted"},lu={class:"px-5 py-2.5 text-right whitespace-nowrap"},ou=["onClick"],ru=["disabled","onClick"],au={__name:"OrgsCard",setup(e){const t=H([]),s=H(""),n=H(!1),i=H(null),l=H("");async function o(){try{const b=await ee("/api/orgs");t.value=b.organizations||[],s.value=""}catch(b){s.value=b.message}}at(o);function r(){i.value="new",l.value=""}function a(b){i.value=b.id,l.value=b.name}function p(){i.value=null,s.value=""}async function u(){n.value=!0,s.value="";try{i.value==="new"?await ee("/api/orgs",{method:"POST",body:{name:l.value}}):await ee(`/api/orgs/${i.value}`,{method:"PATCH",body:{name:l.value}}),i.value=null,await o()}catch(b){s.value=b.message}finally{n.value=!1}}async function h(b){if(confirm(`Delete the organization "${b.name}"?`)){n.value=!0,s.value="";try{await ee(`/api/orgs/${b.id}`,{method:"DELETE"}),await o()}catch(x){s.value=x.message}finally{n.value=!1}}}return(b,x)=>(y(),E("div",qc,[d("div",Jc,[x[1]||(x[1]=d("div",null,[d("div",{class:"text-base font-bold tracking-[-0.02em] text-strong"},"Organizations"),d("p",{class:"mt-0.5 text-xs text-muted"},"Tenants users belong to")],-1)),ne(gt)?(y(),E("button",{key:0,class:"dh-btn",onClick:r},"New organization")):j("",!0)]),s.value?(y(),E("p",Yc,I(s.value),1)):j("",!0),i.value?(y(),E("div",Xc,[x[2]||(x[2]=d("label",{class:"dh-label"},"Name",-1)),le(d("input",{"onUpdate:modelValue":x[0]||(x[0]=D=>l.value=D),class:"dh-input",placeholder:"Acme Fleet",onKeyup:Gr(u,["enter"])},null,544),[[de,l.value]]),d("div",Zc,[d("button",{class:"dh-btn",disabled:n.value||!l.value.trim(),onClick:u},I(i.value==="new"?"Create":"Save"),9,Qc),d("button",{class:"dh-btn-ghost",disabled:n.value,onClick:p},"Cancel",8,eu)])])):j("",!0),t.value.length?(y(),E("table",su,[x[3]||(x[3]=d("thead",null,[d("tr",{class:"[&>th]:eyebrow [&>th]:px-5 [&>th]:py-2.5 [&>th]:font-medium"},[d("th",null,"Name"),d("th",null,"ID"),d("th")])],-1)),d("tbody",null,[(y(!0),E(Q,null,Ce(t.value,D=>(y(),E("tr",{key:D.id,class:"border-t border-subtle transition-colors hover:bg-sunken"},[d("td",nu,I(D.name),1),d("td",iu,I(D.id),1),d("td",lu,[ne(gt)?(y(),E(Q,{key:0},[d("button",{class:"dh-btn-ghost",onClick:S=>a(D)},"Rename",8,ou),d("button",{class:"dh-btn-danger ml-1.5",disabled:n.value,onClick:S=>h(D)}," Delete ",8,ru)],64)):j("",!0)])]))),128))])])):(y(),E("p",tu," No organizations yet. "))]))}},cu={class:"dh-card overflow-hidden"},uu={class:"flex items-center justify-between border-b border-subtle px-5 py-4"},fu={class:"text-base font-bold tracking-[-0.02em] text-strong"},du={class:"eyebrow"},pu={class:"w-full text-left text-sm"},hu={class:"data border-t border-subtle px-5 py-2.5 text-xs whitespace-nowrap"},gu={class:"text-strong"},mu={class:"border-t border-subtle px-5 py-2.5 text-body"},tt={__name:"EndpointTable",props:{title:String,auth:String,endpoints:Array},setup(e){const t={GET:"text-success",POST:"text-brandtext",PATCH:"text-warning",DELETE:"text-danger"};return(s,n)=>(y(),E("div",cu,[d("div",uu,[d("div",fu,I(e.title),1),d("span",du,I(e.auth),1)]),d("table",pu,[n[0]||(n[0]=d("thead",null,[d("tr",{class:"[&>th]:eyebrow [&>th]:px-5 [&>th]:py-2.5 [&>th]:font-medium"},[d("th",null,"Endpoint"),d("th",null,"Description")])],-1)),d("tbody",null,[(y(!0),E(Q,null,Ce(e.endpoints,i=>(y(),E("tr",{key:i.method+i.path,class:"transition-colors hover:bg-sunken"},[d("td",hu,[d("span",{class:$e(["font-semibold",t[i.method]])},I(i.method),3),d("span",gu,I(i.path),1)]),d("td",mu,I(i.desc),1)]))),128))])])]))}},bu={class:"mx-auto flex max-w-4xl flex-col gap-6 px-6 pt-12 pb-16"},vu={class:"flex items-center gap-3"},_u={class:"inline-flex items-center gap-2.5 select-none"},yu={class:"h-8 w-8 shrink-0",viewBox:"0 0 48 48",fill:"none","aria-hidden":"true"},xu={transform:"translate(7 0) skewX(-13)"},wu=["fill"],Su=["fill"],Tu=["fill"],Cu={key:0,class:"data hidden text-xs text-muted sm:inline"},Eu={key:0},ku={key:1,class:"dh-pill bg-info-soft text-info"},$u=["title"],Pu={key:0,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.75",class:"h-4 w-4"},Au={key:1,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.75",class:"h-4 w-4"},Ou={key:0,class:"eyebrow py-16 text-center"},Ru={class:"flex flex-wrap gap-1.5"},Mu=["onClick"],Iu={key:7,class:"eyebrow text-center"},Du={__name:"App",setup(e){const t=H(!0),s=H("overview");at(async()=>{await na(),t.value=!1});const n=vt(()=>{const D=[{id:"overview",label:"Overview"}];return ci.value&&D.push({id:"users",label:"Users"},{id:"orgs",label:"Organizations"}),gt.value&&D.push({id:"pocketbase",label:"PocketBase"},{id:"webapp",label:"Web App"},{id:"plugins",label:"Plugins"}),D.push({id:"api",label:"API"}),D});function i(){wn(),s.value="overview"}const l=vt(()=>Ct.value==="dark"?["#60a5fa","#93c5fd","#ffffff"]:["var(--brand-700)","var(--brand-500)","var(--brand-400)"]),o=[{method:"GET",path:"/api/health",desc:"Liveness probe (no auth)"},{method:"GET",path:"/api/status",desc:"Health of PocketBase + Web App"},{method:"POST",path:"/api/auth/login",desc:"Exchange email + password for a PocketBase token"},{method:"GET",path:"/api/auth/validate",desc:"Check whether a token is still valid"}],r=[{method:"GET",path:"/api/auth/me",desc:"Identity of the bearer token"},{method:"GET",path:"/api/identity",desc:"Identity incl. role + organization"}],a=[{method:"GET",path:"/api/cars",desc:"List owned + shared cars"},{method:"POST",path:"/api/cars",desc:"Create a car"},{method:"GET",path:"/api/cars/{id}",desc:"Fetch one car"},{method:"PATCH",path:"/api/cars/{id}",desc:"Update a car"},{method:"DELETE",path:"/api/cars/{id}",desc:"Delete a car (owner only)"},{method:"GET",path:"/api/cars/{id}/service-records",desc:"A car's service history"},{method:"GET",path:"/api/cars/{id}/parts",desc:"A car's parts catalog"},{method:"GET",path:"/api/cars/{id}/shares",desc:"Who a car is shared with (owner)"},{method:"POST",path:"/api/cars/{id}/shares",desc:"Share a car by email (owner)"},{method:"DELETE",path:"/api/cars/{id}/shares/{userId}",desc:"Revoke a share (owner)"}],p=[{method:"GET",path:"/api/service-records",desc:"List service records"},{method:"POST",path:"/api/service-records",desc:"Log a service record"},{method:"GET",path:"/api/service-records/{id}",desc:"Fetch one record"},{method:"PATCH",path:"/api/service-records/{id}",desc:"Update a record"},{method:"DELETE",path:"/api/service-records/{id}",desc:"Delete a record"}],u=[{method:"GET",path:"/api/parts",desc:"List parts"},{method:"POST",path:"/api/parts",desc:"Add a part"},{method:"GET",path:"/api/parts/{id}",desc:"Fetch one part"},{method:"PATCH",path:"/api/parts/{id}",desc:"Update a part"},{method:"DELETE",path:"/api/parts/{id}",desc:"Delete a part"}],h=[{method:"GET",path:"/api/me",desc:"Current user profile"},{method:"PATCH",path:"/api/me",desc:"Update profile"},{method:"POST",path:"/api/me/password",desc:"Change password"},{method:"POST",path:"/api/me/avatar",desc:"Upload avatar"},{method:"GET",path:"/api/me/avatar",desc:"Fetch avatar"},{method:"DELETE",path:"/api/me/avatar",desc:"Remove avatar"},{method:"POST",path:"/api/me/verify/request",desc:"Request email verification"},{method:"GET",path:"/api/me/export",desc:"Export your data"},{method:"POST",path:"/api/me/import",desc:"Import data"},{method:"POST",path:"/api/me/delete",desc:"Request account deletion"},{method:"POST",path:"/api/me/delete/cancel",desc:"Cancel deletion request"},{method:"DELETE",path:"/api/me",desc:"Finalize account deletion"}],b=[{method:"GET",path:"/api/users",desc:"List users (scoped by role)"},{method:"POST",path:"/api/users",desc:"Create a user"},{method:"PATCH",path:"/api/users/{id}",desc:"Update email / name / role / org / password"},{method:"DELETE",path:"/api/users/{id}",desc:"Delete a user"},{method:"GET",path:"/api/orgs",desc:"List organizations"},{method:"POST",path:"/api/orgs",desc:"Create an organization (superadmin)"},{method:"PATCH",path:"/api/orgs/{id}",desc:"Rename an organization (superadmin)"},{method:"DELETE",path:"/api/orgs/{id}",desc:"Delete an organization (superadmin)"}],x=[{method:"GET",path:"/api/admin/pb-config",desc:"PocketBase connection + live probe"},{method:"POST",path:"/api/admin/pb-config/test",desc:"Probe a candidate connection"},{method:"PUT",path:"/api/admin/pb-config",desc:"Apply + persist a connection"},{method:"GET",path:"/api/admin/webapp-config",desc:"Web App URL + CORS origins, with a live probe"},{method:"POST",path:"/api/admin/webapp-config/test",desc:"Probe a candidate Web App address"},{method:"PUT",path:"/api/admin/webapp-config",desc:"Apply + persist Web App settings"},{method:"GET",path:"/api/admin/plugins",desc:"List plugins (secrets masked)"},{method:"POST",path:"/api/admin/plugins",desc:"Register an external plugin"},{method:"GET",path:"/api/admin/plugins/{name}",desc:"Fetch one plugin"},{method:"PUT",path:"/api/admin/plugins/{name}",desc:"Enable/disable + configure"},{method:"DELETE",path:"/api/admin/plugins/{name}",desc:"Remove an external plugin"},{method:"POST",path:"/api/admin/plugins/{name}/health",desc:"Run a health check now"}];return(D,S)=>(y(),E("div",bu,[d("div",vu,[d("span",_u,[(y(),E("svg",yu,[d("g",xu,[d("rect",{x:"9",y:"16",width:"6",height:"16",rx:"3",fill:l.value[0]},null,8,wu),d("rect",{x:"19",y:"12",width:"6",height:"24",rx:"3",fill:l.value[1]},null,8,Su),d("rect",{x:"29",y:"8",width:"6",height:"32",rx:"3",fill:l.value[2]},null,8,Tu)])])),S[1]||(S[1]=d("span",{class:"text-2xl leading-none font-extrabold tracking-[-0.03em] italic"},[d("span",{class:"text-strong"},"Driver"),d("span",{class:"text-brandtext"},"Vault")],-1))]),S[5]||(S[5]=d("span",{class:"eyebrow mt-1.5"},"API server",-1)),S[6]||(S[6]=d("div",{class:"flex-1"},null,-1)),ne(ue)?(y(),E("span",Cu,[Se(I(ne(ue).email),1),ne(ue).organizationName?(y(),E("span",Eu," · "+I(ne(ue).organizationName),1)):j("",!0)])):j("",!0),ne(ue)?(y(),E("span",ku,I(ne(ue).role),1)):j("",!0),d("button",{class:"dh-btn-ghost",title:ne(Ct)==="dark"?"Switch to light theme":"Switch to dark theme",onClick:S[0]||(S[0]=(...C)=>ne(ai)&&ne(ai)(...C))},[ne(Ct)==="dark"?(y(),E("svg",Pu,[...S[2]||(S[2]=[d("circle",{cx:"12",cy:"12",r:"4"},null,-1),d("path",{"stroke-linecap":"round",d:"M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4"},null,-1)])])):(y(),E("svg",Au,[...S[3]||(S[3]=[d("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M21 12.8A9 9 0 1 1 11.2 3a7 7 0 0 0 9.8 9.8Z"},null,-1)])])),S[4]||(S[4]=Se(" Theme ",-1))],8,$u),ne(Pt)?(y(),E("button",{key:2,class:"dh-btn-ghost",onClick:i},"Sign out")):j("",!0)]),t.value?(y(),E("p",Ou,"Loading…")):ne(Pt)?(y(),E(Q,{key:2},[d("nav",Ru,[(y(!0),E(Q,null,Ce(n.value,C=>(y(),E("button",{key:C.id,class:$e(["dh-btn-ghost",s.value===C.id?"border-accent text-brandtext":""]),onClick:T=>s.value=C.id},I(C.label),11,Mu))),128))]),s.value==="overview"?(y(),st(_a,{key:0})):s.value==="users"?(y(),st(zc,{key:1})):s.value==="orgs"?(y(),st(au,{key:2})):s.value==="pocketbase"?(y(),st(Oa,{key:3})):s.value==="webapp"?(y(),st(Va,{key:4})):s.value==="plugins"?(y(),st(Sc,{key:5})):s.value==="api"?(y(),E(Q,{key:6},[ae(tt,{title:"Public",auth:"No auth",endpoints:o}),ae(tt,{title:"Identity",auth:"Bearer token",endpoints:r}),ae(tt,{title:"Cars",auth:"Bearer token",endpoints:a}),ae(tt,{title:"Service records",auth:"Bearer token",endpoints:p}),ae(tt,{title:"Parts",auth:"Bearer token",endpoints:u}),ae(tt,{title:"Account",auth:"Bearer token",endpoints:h}),ae(tt,{title:"Management",auth:"Admin / superadmin",endpoints:b}),ae(tt,{title:"Superadmin",auth:"Superadmin",endpoints:x})],64)):j("",!0),!ne(ci)&&s.value==="overview"?(y(),E("p",Iu," Signed in as a standard user — management sections need an admin role ")):j("",!0)],64)):(y(),st(aa,{key:1})),S[7]||(S[7]=d("p",{class:"eyebrow text-center"},"DriverVault — car maintenance & service tracker.",-1))]))}};Jr(Du).mount("#app"); diff --git a/API Server/internal/api/dist/index.html b/API Server/internal/api/dist/index.html index a147693..9826296 100644 --- a/API Server/internal/api/dist/index.html +++ b/API Server/internal/api/dist/index.html @@ -6,7 +6,7 @@ DriverVault · API Server - + diff --git a/API Server/internal/api/server.go b/API Server/internal/api/server.go index 671149a..6c633bc 100644 --- a/API Server/internal/api/server.go +++ b/API Server/internal/api/server.go @@ -37,6 +37,8 @@ // # superadmin // GET /api/admin/pb-config PUT /api/admin/pb-config // POST /api/admin/pb-config/test +// GET /api/admin/webapp-config PUT /api/admin/webapp-config +// POST /api/admin/webapp-config/test // GET /api/admin/plugins POST /api/admin/plugins // GET /api/admin/plugins/{name} PUT /api/admin/plugins/{name} // DELETE /api/admin/plugins/{name} POST /api/admin/plugins/{name}/health @@ -157,6 +159,22 @@ func (s *Server) webAppURL() string { return s.cfg.WebAppURL } +// webAppSettings snapshots the Web App settings for the settings endpoints. +func (s *Server) webAppSettings() (url string, allowOrigins []string) { + s.mu.RLock() + defer s.mu.RUnlock() + return s.cfg.WebAppURL, append([]string(nil), s.cfg.AllowOrigins...) +} + +// setWebAppConfig applies new Web App settings at runtime. The CORS middleware +// reads the origin list per request, so the new list is live immediately. +func (s *Server) setWebAppConfig(url string, allowOrigins []string) { + s.mu.Lock() + defer s.mu.Unlock() + s.cfg.WebAppURL = url + s.cfg.AllowOrigins = append([]string(nil), allowOrigins...) +} + // pbSettings snapshots the PocketBase connection for the settings endpoints. func (s *Server) pbSettings() (url, adminEmail, adminPassword string) { s.mu.RLock() @@ -234,6 +252,12 @@ func (s *Server) Handler() http.Handler { mux.HandleFunc("POST /api/admin/pb-config/test", s.requireSuperadminAuth(s.handleTestPBConfig)) mux.HandleFunc("PUT /api/admin/pb-config", s.requireSuperadminAuth(s.handleUpdatePBConfig)) + // Web App settings — superadmin only. Where the Web App lives (probed by + // /api/status) and which browser origins CORS admits. + mux.HandleFunc("GET /api/admin/webapp-config", s.requireSuperadminAuth(s.handleGetWebAppConfig)) + mux.HandleFunc("POST /api/admin/webapp-config/test", s.requireSuperadminAuth(s.handleTestWebAppConfig)) + mux.HandleFunc("PUT /api/admin/webapp-config", s.requireSuperadminAuth(s.handleUpdateWebAppConfig)) + // Plugins — external-service integrations, managed by a superadmin. mux.HandleFunc("GET /api/admin/plugins", s.requireSuperadminAuth(s.handleListPlugins)) mux.HandleFunc("POST /api/admin/plugins", s.requireSuperadminAuth(s.handleRegisterPlugin)) @@ -351,26 +375,37 @@ func (s *Server) recoverer(next http.Handler) http.Handler { }) } -func (s *Server) cors(next http.Handler) http.Handler { - allowed := map[string]bool{} - wildcard := false +// originAllowed reports whether origin may call this server, and whether it was +// the wildcard that allowed it. The allow-list is consulted per request rather +// than captured once, so editing it from the panel takes effect without a +// restart. +func (s *Server) originAllowed(origin string) (allowed, wildcard bool) { + s.mu.RLock() + defer s.mu.RUnlock() for _, o := range s.cfg.AllowOrigins { if o == "*" { - wildcard = true + return true, true + } + if o == origin { + allowed = true } - allowed[o] = true } + return allowed, false +} + +func (s *Server) cors(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - origin := r.Header.Get("Origin") - if origin != "" && (wildcard || allowed[origin]) { - if wildcard { - w.Header().Set("Access-Control-Allow-Origin", "*") - } else { - w.Header().Set("Access-Control-Allow-Origin", origin) - w.Header().Add("Vary", "Origin") + if origin := r.Header.Get("Origin"); origin != "" { + if allowed, wildcard := s.originAllowed(origin); allowed { + if wildcard { + w.Header().Set("Access-Control-Allow-Origin", "*") + } else { + w.Header().Set("Access-Control-Allow-Origin", origin) + w.Header().Add("Vary", "Origin") + } + w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PATCH, DELETE, OPTIONS") + w.Header().Set("Access-Control-Allow-Headers", "Authorization, Content-Type") } - w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PATCH, DELETE, OPTIONS") - w.Header().Set("Access-Control-Allow-Headers", "Authorization, Content-Type") } if r.Method == http.MethodOptions { w.WriteHeader(http.StatusNoContent) diff --git a/API Server/internal/api/settings.go b/API Server/internal/api/settings.go index 2d218e0..ebe7469 100644 --- a/API Server/internal/api/settings.go +++ b/API Server/internal/api/settings.go @@ -55,8 +55,8 @@ func probePB(ctx context.Context, url, email, password string) pbProbe { return p } -// normalizePBURL trims, defaults the scheme to http, and drops a trailing slash. -func normalizePBURL(u string) string { +// normalizeURL trims, defaults the scheme to http, and drops a trailing slash. +func normalizeURL(u string) string { u = strings.TrimSpace(u) if u == "" { return "" @@ -95,7 +95,7 @@ type pbConfigBody struct { // keep-current semantics for blank fields. func (s *Server) resolve(b pbConfigBody) (url, email, password string) { curURL, curEmail, curPassword := s.pbSettings() - url = normalizePBURL(b.URL) + url = normalizeURL(b.URL) if url == "" { url = curURL } @@ -130,7 +130,7 @@ func (s *Server) handleUpdatePBConfig(w http.ResponseWriter, r *http.Request) { writeError(w, http.StatusBadRequest, "invalid json") return } - if normalizePBURL(b.URL) == "" { + if normalizeURL(b.URL) == "" { writeError(w, http.StatusBadRequest, "a PocketBase URL is required") return } @@ -157,3 +157,103 @@ func (s *Server) handleUpdatePBConfig(w http.ResponseWriter, r *http.Request) { "config": viewFor(r.Context(), url, email, password), }) } + +// webAppConfigView is the Web App shape returned to the panel: where the Web App +// lives (the address /api/status probes) and which browser origins CORS lets +// call this server. +type webAppConfigView struct { + URL string `json:"url"` + AllowOrigins []string `json:"allowOrigins"` + Probe svcHealth `json:"probe"` +} + +// webAppViewFor builds the panel's Web App view, including a live probe. +func webAppViewFor(ctx context.Context, url string, origins []string) webAppConfigView { + return webAppConfigView{ + URL: url, + AllowOrigins: origins, + Probe: probe(ctx, url+"/healthz"), + } +} + +// GET /api/admin/webapp-config — current Web App settings + a live probe. +func (s *Server) handleGetWebAppConfig(w http.ResponseWriter, r *http.Request) { + url, origins := s.webAppSettings() + writeJSON(w, http.StatusOK, webAppViewFor(r.Context(), url, origins)) +} + +// webAppConfigBody is the editable Web App payload. A blank url means "keep the +// current one"; allowOrigins is taken as sent (it is a complete list, not a +// patch), so it may only be omitted, never emptied. +type webAppConfigBody struct { + URL string `json:"url"` + AllowOrigins []string `json:"allowOrigins"` +} + +// POST /api/admin/webapp-config/test — probe a candidate Web App address WITHOUT +// applying it. CORS origins are not probeable, so this only checks the URL. +func (s *Server) handleTestWebAppConfig(w http.ResponseWriter, r *http.Request) { + var b webAppConfigBody + if err := json.NewDecoder(r.Body).Decode(&b); err != nil { + writeError(w, http.StatusBadRequest, "invalid json") + return + } + url := normalizeURL(b.URL) + if url == "" { + url, _ = s.webAppSettings() + } + writeJSON(w, http.StatusOK, probe(r.Context(), url+"/healthz")) +} + +// PUT /api/admin/webapp-config — apply new Web App settings at runtime and +// persist them to .env. The CORS middleware re-reads the origin list on every +// request, so a change here takes effect without a restart. +func (s *Server) handleUpdateWebAppConfig(w http.ResponseWriter, r *http.Request) { + var b webAppConfigBody + if err := json.NewDecoder(r.Body).Decode(&b); err != nil { + writeError(w, http.StatusBadRequest, "invalid json") + return + } + url := normalizeURL(b.URL) + if url == "" { + writeError(w, http.StatusBadRequest, "a Web App URL is required") + return + } + origins := cleanOrigins(b.AllowOrigins) + if len(origins) == 0 { + writeError(w, http.StatusBadRequest, "at least one allowed origin is required (use * for any)") + return + } + + // Apply at runtime, then persist so the change survives a restart. + s.setWebAppConfig(url, origins) + if err := config.UpdateEnvFile(config.EnvFile, map[string]string{ + "WEBAPP_URL": url, + "CORS_ALLOW_ORIGINS": strings.Join(origins, ","), + }); err != nil { + // The runtime change already took effect; report that persistence failed. + log.Printf("webapp-config: persist to %s failed: %v", config.EnvFile, err) + writeJSON(w, http.StatusOK, map[string]any{ + "config": webAppViewFor(r.Context(), url, origins), + "warning": "applied for this session, but could not be saved to .env: " + err.Error(), + }) + return + } + + log.Printf("webapp-config: Web App updated to %s, origins %s (by superadmin)", url, strings.Join(origins, ",")) + writeJSON(w, http.StatusOK, map[string]any{ + "config": webAppViewFor(r.Context(), url, origins), + }) +} + +// cleanOrigins trims each origin and drops the blanks, so a trailing comma or a +// stray space in the panel's text field can't register an unmatchable origin. +func cleanOrigins(in []string) []string { + out := make([]string, 0, len(in)) + for _, o := range in { + if o = strings.TrimSpace(o); o != "" { + out = append(out, o) + } + } + return out +} diff --git a/API Server/panel/src/App.vue b/API Server/panel/src/App.vue index 49117cd..fcadd3f 100644 --- a/API Server/panel/src/App.vue +++ b/API Server/panel/src/App.vue @@ -5,6 +5,7 @@ import { me, token, restore, logout, isManager, isSuperadmin } from "./api"; import LoginView from "./components/LoginView.vue"; import StatusCard from "./components/StatusCard.vue"; import PocketBaseCard from "./components/PocketBaseCard.vue"; +import WebAppCard from "./components/WebAppCard.vue"; import PluginsCard from "./components/PluginsCard.vue"; import UsersCard from "./components/UsersCard.vue"; import OrgsCard from "./components/OrgsCard.vue"; @@ -18,16 +19,20 @@ onMounted(async () => { booting.value = false; }); -// Cards are gated by role: management needs a manager, PocketBase + plugins need -// a superadmin. The server enforces the same rules — this only hides what the -// caller could not use anyway. +// Cards are gated by role: management needs a manager, PocketBase, Web App + +// plugins need a superadmin. The server enforces the same rules — this only +// hides what the caller could not use anyway. const sections = computed(() => { const out = [{ id: "overview", label: "Overview" }]; if (isManager.value) { out.push({ id: "users", label: "Users" }, { id: "orgs", label: "Organizations" }); } if (isSuperadmin.value) { - out.push({ id: "pocketbase", label: "PocketBase" }, { id: "plugins", label: "Plugins" }); + out.push( + { id: "pocketbase", label: "PocketBase" }, + { id: "webapp", label: "Web App" }, + { id: "plugins", label: "Plugins" }, + ); } out.push({ id: "api", label: "API" }); return out; @@ -118,6 +123,9 @@ const superadminApi = [ { method: "GET", path: "/api/admin/pb-config", desc: "PocketBase connection + live probe" }, { method: "POST", path: "/api/admin/pb-config/test", desc: "Probe a candidate connection" }, { method: "PUT", path: "/api/admin/pb-config", desc: "Apply + persist a connection" }, + { method: "GET", path: "/api/admin/webapp-config", desc: "Web App URL + CORS origins, with a live probe" }, + { method: "POST", path: "/api/admin/webapp-config/test", desc: "Probe a candidate Web App address" }, + { method: "PUT", path: "/api/admin/webapp-config", desc: "Apply + persist Web App settings" }, { method: "GET", path: "/api/admin/plugins", desc: "List plugins (secrets masked)" }, { method: "POST", path: "/api/admin/plugins", desc: "Register an external plugin" }, { method: "GET", path: "/api/admin/plugins/{name}", desc: "Fetch one plugin" }, @@ -207,6 +215,7 @@ const superadminApi = [ +