From b6bb6b1df06dabfba5f0764b6bb53195ee45047f Mon Sep 17 00:00:00 2001 From: tajniak81 <13187254+tajniak81@users.noreply.github.com> Date: Fri, 17 Jul 2026 20:07:48 +0200 Subject: [PATCH] Add a language-switch system with per-language files Introduce a hand-rolled i18n layer across all three UIs, each reading its text from per-language JSON files (English base + Polish + Danish). Nothing in the converted screens hardcodes English any more. - Web App (Vue): src/i18n/{en,pl,da}.json + index.js exposing t()/tSplit(), reactive to the signed-in profile locale. Every view, component, form and the status labels in lib/format.js go through t(). - API Server panel (Vue): src/i18n/ with its own localStorage-persisted language (the panel has no user profile) and a header language picker. Chrome, cards, login and API section titles translated; endpoint reference descriptions intentionally kept in English. Rebuilt embedded dist. - Phone App (Flutter): assets/i18n/ + lib/i18n.dart loaded at startup, driven by AppSettings.locale. Nav, login, lock, dashboard, the full Settings panel (incl. language picker) and format.dart status labels translated; remaining detail screens fall back to English. Language = the language half of the existing BCP-47 locale; the region half still drives date/number/currency formatting. Missing keys fall back to English, and plurals use Intl.PluralRules / Intl.plural so Polish gets the correct one/few/many forms. Settings flags languages without a translation. Tests updated to assert the localized (Polish) status wording; all pass. See TRANSLATIONS.md for the format and how to add a language. Co-Authored-By: Claude Opus 4.8 --- .../api/dist/assets/index-CL6eq5qV.js | 17 + ...{index-i1JZk1ZM.css => index-D3MeNcl7.css} | 2 +- .../api/dist/assets/index-OENR1RVj.js | 17 - API Server/internal/api/dist/index.html | 4 +- API Server/panel/src/App.vue | 66 +- .../panel/src/components/EndpointTable.vue | 6 +- API Server/panel/src/components/LoginView.vue | 17 +- API Server/panel/src/components/OrgsCard.vue | 27 +- .../panel/src/components/PluginsCard.vue | 43 +- .../panel/src/components/PocketBaseCard.vue | 29 +- .../panel/src/components/StatusCard.vue | 28 +- API Server/panel/src/components/UsersCard.vue | 47 +- .../panel/src/components/WebAppCard.vue | 26 +- API Server/panel/src/i18n/da.json | 163 +++++ API Server/panel/src/i18n/en.json | 163 +++++ API Server/panel/src/i18n/index.js | Bin 0 -> 3326 bytes API Server/panel/src/i18n/pl.json | 163 +++++ Phone App/assets/i18n/da.json | 204 ++++++ Phone App/assets/i18n/en.json | 204 ++++++ Phone App/assets/i18n/pl.json | 206 ++++++ Phone App/lib/format.dart | 47 +- Phone App/lib/i18n.dart | 97 +++ Phone App/lib/main.dart | 3 + Phone App/lib/screens/dashboard_screen.dart | 35 +- Phone App/lib/screens/lock_screen.dart | 11 +- Phone App/lib/screens/login_screen.dart | 80 +-- Phone App/lib/screens/root_shell.dart | 25 +- Phone App/lib/screens/settings_screen.dart | 205 +++--- Phone App/pubspec.yaml | 3 + Phone App/test/models_format_test.dart | 39 +- README.md | 4 + TRANSLATIONS.md | 95 +++ Web App/web/src/App.vue | 13 +- Web App/web/src/api.js | 3 +- .../web/src/components/AttachmentField.vue | 22 +- Web App/web/src/components/CarFormModal.vue | 70 +- .../web/src/components/DocumentFormModal.vue | 43 +- Web App/web/src/components/FuelFormModal.vue | 35 +- .../src/components/MaintenanceFormModal.vue | 64 +- Web App/web/src/components/PartFormModal.vue | 19 +- .../web/src/components/ReminderFormModal.vue | 50 +- .../web/src/components/ServiceFormModal.vue | 25 +- Web App/web/src/components/ShareModal.vue | 30 +- .../components/TechnicalCheckFormModal.vue | 34 +- Web App/web/src/i18n/da.json | 628 +++++++++++++++++ Web App/web/src/i18n/en.json | 628 +++++++++++++++++ Web App/web/src/i18n/index.js | Bin 0 -> 4379 bytes Web App/web/src/i18n/pl.json | 640 ++++++++++++++++++ Web App/web/src/lib/format.js | 41 +- Web App/web/src/views/AdminUsers.vue | 71 +- Web App/web/src/views/CarDetail.vue | 455 ++++++------- Web App/web/src/views/Dashboard.vue | 28 +- Web App/web/src/views/Login.vue | 28 +- Web App/web/src/views/Settings.vue | 167 +++-- 54 files changed, 4191 insertions(+), 979 deletions(-) create mode 100644 API Server/internal/api/dist/assets/index-CL6eq5qV.js rename API Server/internal/api/dist/assets/{index-i1JZk1ZM.css => index-D3MeNcl7.css} (84%) delete mode 100644 API Server/internal/api/dist/assets/index-OENR1RVj.js create mode 100644 API Server/panel/src/i18n/da.json create mode 100644 API Server/panel/src/i18n/en.json create mode 100644 API Server/panel/src/i18n/index.js create mode 100644 API Server/panel/src/i18n/pl.json create mode 100644 Phone App/assets/i18n/da.json create mode 100644 Phone App/assets/i18n/en.json create mode 100644 Phone App/assets/i18n/pl.json create mode 100644 Phone App/lib/i18n.dart create mode 100644 TRANSLATIONS.md create mode 100644 Web App/web/src/i18n/da.json create mode 100644 Web App/web/src/i18n/en.json create mode 100644 Web App/web/src/i18n/index.js create mode 100644 Web App/web/src/i18n/pl.json diff --git a/API Server/internal/api/dist/assets/index-CL6eq5qV.js b/API Server/internal/api/dist/assets/index-CL6eq5qV.js new file mode 100644 index 0000000..a241407 --- /dev/null +++ b/API Server/internal/api/dist/assets/index-CL6eq5qV.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 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 ln(e){const t=Object.create(null);for(const s of e.split(","))t[s]=1;return s=>s in t}const Y={},xt=[],He=()=>{},gi=()=>!1,ks=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Ss=e=>e.startsWith("onUpdate:"),he=Object.assign,an=(e,t)=>{const s=e.indexOf(t);s>-1&&e.splice(s,1)},$o=Object.prototype.hasOwnProperty,G=(e,t)=>$o.call(e,t),L=Array.isArray,kt=e=>es(e)==="[object Map]",Rt=e=>es(e)==="[object Set]",Rn=e=>es(e)==="[object Date]",H=e=>typeof e=="function",ne=e=>typeof e=="string",Ve=e=>typeof e=="symbol",Z=e=>e!==null&&typeof e=="object",mi=e=>(Z(e)||H(e))&&H(e.then)&&H(e.catch),bi=Object.prototype.toString,es=e=>bi.call(e),Ao=e=>es(e).slice(8,-1),vi=e=>es(e)==="[object Object]",cn=e=>ne(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Ft=ln(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Ts=e=>{const t=Object.create(null);return(s=>t[s]||(t[s]=e(s)))},Oo=/-\w/g,Ce=Ts(e=>e.replace(Oo,t=>t.slice(1).toUpperCase())),Ro=/\B([A-Z])/g,ct=Ts(e=>e.replace(Ro,"-$1").toLowerCase()),_i=Ts(e=>e.charAt(0).toUpperCase()+e.slice(1)),Ms=Ts(e=>e?`on${_i(e)}`:""),Be=(e,t)=>!Object.is(e,t),fs=(e,...t)=>{for(let s=0;s{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:n,value:s})},Es=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let In;const Cs=()=>In||(In=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function un(e){if(L(e)){const t={};for(let s=0;s{if(s){const n=s.split(Uo);n.length>1&&(t[n[0].trim()]=n[1].trim())}}),t}function $e(e){let t="";if(ne(e))t=e;else if(L(e))for(let s=0;srt(s,t))}const xi=e=>!!(e&&e.__v_isRef===!0),b=e=>ne(e)?e:e==null?"":L(e)||Z(e)&&(e.toString===bi||!H(e.toString))?xi(e)?b(e.value):JSON.stringify(e,ki,2):String(e),ki=(e,t)=>xi(t)?ki(e,t.value):kt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((s,[n,i],o)=>(s[Ns(n,o)+" =>"]=i,s),{})}:Rt(t)?{[`Set(${t.size})`]:[...t.values()].map(s=>Ns(s))}:Ve(t)?Ns(t):Z(t)&&!L(t)&&!vi(t)?String(t):t,Ns=(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 ae;class Lo{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&&ae&&(ae.active?(this.parent=ae,this.index=(ae.scopes||(ae.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(ae===this)ae=this.prevScope;else{let t=ae;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(Ht){let t=Ht;for(Ht=void 0;t;){const s=t.next;t.next=void 0,t.flags&=-9,t=s}}let e;for(;Bt;){let t=Bt;for(Bt=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 Ci(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Pi(e){let t,s=e.depsTail,n=s;for(;n;){const i=n.prevDep;n.version===-1?(n===s&&(s=i),hn(n),Bo(n)):t=n,n.dep.activeLink=n.prevActiveLink,n.prevActiveLink=void 0,n=i}e.deps=t,e.depsTail=s}function qs(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&($i(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function $i(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===qt)||(e.globalVersion=qt,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!qs(e))))return;e.flags|=2;const t=e.dep,s=Q,n=Pe;Q=e,Pe=!0;try{Ci(e);const i=e.fn(e._value);(t.version===0||Be(i,e._value))&&(e.flags|=128,e._value=i,t.version++)}catch(i){throw t.version++,i}finally{Q=s,Pe=n,Pi(e),e.flags&=-3}}function hn(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)hn(o,!0)}!t&&!--s.sc&&s.map&&s.map.delete(s.key)}function Bo(e){const{prevDep:t,nextDep:s}=e;t&&(t.nextDep=s,e.prevDep=void 0),s&&(s.prevDep=t,e.nextDep=void 0)}let Pe=!0;const Ai=[];function Ke(){Ai.push(Pe),Pe=!1}function We(){const e=Ai.pop();Pe=e===void 0?!0:e}function Un(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const s=Q;Q=void 0;try{t()}finally{Q=s}}}let qt=0;class Ho{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 gn{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(!Q||!Pe||Q===this.computed)return;let s=this.activeLink;if(s===void 0||s.sub!==Q)s=this.activeLink=new Ho(Q,this),Q.deps?(s.prevDep=Q.depsTail,Q.depsTail.nextDep=s,Q.depsTail=s):Q.deps=Q.depsTail=s,Oi(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=Q.depsTail,s.nextDep=void 0,Q.depsTail.nextDep=s,Q.depsTail=s,Q.deps===s&&(Q.deps=n)}return s}trigger(t){this.version++,qt++,this.notify(t)}notify(t){fn();try{for(let s=this.subs;s;s=s.prevSub)s.sub.notify()&&s.sub.dep.notify()}finally{pn()}}}function Oi(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)Oi(n)}const s=e.dep.subs;s!==e&&(e.prevSub=s,s&&(s.nextSub=e)),e.dep.subs=e}}const Zs=new WeakMap,vt=Symbol(""),Js=Symbol(""),Zt=Symbol("");function ue(e,t,s){if(Pe&&Q){let n=Zs.get(e);n||Zs.set(e,n=new Map);let i=n.get(s);i||(n.set(s,i=new gn),i.map=n,i.key=s),i.track()}}function Je(e,t,s,n,i,o){const r=Zs.get(e);if(!r){qt++;return}const l=a=>{a&&a.trigger()};if(fn(),t==="clear")r.forEach(l);else{const a=L(e),p=a&&cn(s);if(a&&s==="length"){const u=Number(n);r.forEach((m,y)=>{(y==="length"||y===Zt||!Ve(y)&&y>=u)&&l(m)})}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(vt)),kt(e)&&l(r.get(Js)));break;case"delete":a||(l(r.get(vt)),kt(e)&&l(r.get(Js)));break;case"set":kt(e)&&l(r.get(vt));break}}pn()}function yt(e){const t=W(e);return t===e?t:(ue(t,"iterate",Zt),Se(e)?t:t.map(Ae))}function Ps(e){return ue(e=W(e),"iterate",Zt),e}function Le(e,t){return et(e)?Ct(_t(e)?Ae(t):t):Ae(t)}const Vo={__proto__:null,[Symbol.iterator](){return zs(this,Symbol.iterator,e=>Le(this,e))},concat(...e){return yt(this).concat(...e.map(t=>L(t)?yt(t):t))},entries(){return zs(this,"entries",e=>(e[1]=Le(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=>Le(this,n)),arguments)},find(e,t){return Ge(this,"find",e,t,s=>Le(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=>Le(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 Ls(this,"includes",e)},indexOf(...e){return Ls(this,"indexOf",e)},join(e){return yt(this).join(e)},lastIndexOf(...e){return Ls(this,"lastIndexOf",e)},map(e,t){return Ge(this,"map",e,t,void 0,arguments)},pop(){return Nt(this,"pop")},push(...e){return Nt(this,"push",e)},reduce(e,...t){return jn(this,"reduce",e,t)},reduceRight(e,...t){return jn(this,"reduceRight",e,t)},shift(){return Nt(this,"shift")},some(e,t){return Ge(this,"some",e,t,void 0,arguments)},splice(...e){return Nt(this,"splice",e)},toReversed(){return yt(this).toReversed()},toSorted(e){return yt(this).toSorted(e)},toSpliced(...e){return yt(this).toSpliced(...e)},unshift(...e){return Nt(this,"unshift",e)},values(){return zs(this,"values",e=>Le(this,e))}};function zs(e,t,s){const n=Ps(e),i=n[t]();return n!==e&&!Se(e)&&(i._next=i.next,i.next=()=>{const o=i._next();return o.done||(o.value=s(o.value)),o}),i}const Ko=Array.prototype;function Ge(e,t,s,n,i,o){const r=Ps(e),l=r!==e&&!Se(e),a=r[t];if(a!==Ko[t]){const m=a.apply(e,o);return l?Ae(m):m}let p=s;r!==e&&(l?p=function(m,y){return s.call(this,Le(e,m),y,e)}:s.length>2&&(p=function(m,y){return s.call(this,m,y,e)}));const u=a.call(r,p,n);return l&&i?i(u):u}function jn(e,t,s,n){const i=Ps(e),o=i!==e&&!Se(e);let r=s,l=!1;i!==e&&(o?(l=n.length===0,r=function(p,u,m){return l&&(l=!1,p=Le(e,p)),s.call(this,p,Le(e,u),m,e)}):s.length>3&&(r=function(p,u,m){return s.call(this,p,u,m,e)}));const a=i[t](r,...n);return l?Le(e,a):a}function Ls(e,t,s){const n=W(e);ue(n,"iterate",Zt);const i=n[t](...s);return(i===-1||i===!1)&&vn(s[0])?(s[0]=W(s[0]),n[t](...s)):i}function Nt(e,t,s=[]){Ke(),fn();const n=W(e)[t].apply(e,s);return pn(),We(),n}const Wo=ln("__proto__,__v_isRef,__isVue"),Ri=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Ve));function Go(e){Ve(e)||(e=String(e));const t=W(this);return ue(t,"has",e),t.hasOwnProperty(e)}class Ii{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?nr:Ni:o?Mi:ji).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(n)?t:void 0;const r=L(t);if(!i){let a;if(r&&(a=Vo[s]))return a;if(s==="hasOwnProperty")return Go}const l=Reflect.get(t,s,fe(t)?t:n);if((Ve(s)?Ri.has(s):Wo(s))||(i||ue(t,"get",s),o))return l;if(fe(l)){const a=r&&cn(s)?l:l.value;return i&&Z(a)?Xs(a):a}return Z(l)?i?Xs(l):Jt(l):l}}class Ui extends Ii{constructor(t=!1){super(!1,t)}set(t,s,n,i){let o=t[s];const r=L(t)&&cn(s);if(!this._isShallow){const p=et(o);if(!Se(n)&&!et(n)&&(o=W(o),n=W(n)),!r&&fe(o)&&!fe(n))return p||(o.value=n),!0}const l=r?Number(s)e,as=e=>Reflect.getPrototypeOf(e);function Xo(e,t,s){return function(...n){const i=this.__v_raw,o=W(i),r=kt(o),l=e==="entries"||e===Symbol.iterator&&r,a=e==="keys"&&r,p=i[e](...n),u=s?Ys:t?Ct:Ae;return!t&&ue(o,"iterate",a?Js:vt),he(Object.create(p),{next(){const{value:m,done:y}=p.next();return y?{value:m,done:y}:{value:l?[u(m[0]),u(m[1])]:u(m),done:y}}})}}function cs(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Qo(e,t){const s={get(i){const o=this.__v_raw,r=W(o),l=W(i);e||(Be(i,l)&&ue(r,"get",i),ue(r,"get",l));const{has:a}=as(r),p=t?Ys:e?Ct:Ae;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&&ue(W(i),"iterate",vt),i.size},has(i){const o=this.__v_raw,r=W(o),l=W(i);return e||(Be(i,l)&&ue(r,"has",i),ue(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=W(l),p=t?Ys:e?Ct:Ae;return!e&&ue(a,"iterate",vt),l.forEach((u,m)=>i.call(o,p(u),p(m),r))}};return he(s,e?{add:cs("add"),set:cs("set"),delete:cs("delete"),clear:cs("clear")}:{add(i){const o=W(this),r=as(o),l=W(i),a=!t&&!Se(i)&&!et(i)?l:i;return r.has.call(o,a)||Be(i,a)&&r.has.call(o,i)||Be(l,a)&&r.has.call(o,l)||(o.add(a),Je(o,"add",a,a)),this},set(i,o){!t&&!Se(o)&&!et(o)&&(o=W(o));const r=W(this),{has:l,get:a}=as(r);let p=l.call(r,i);p||(i=W(i),p=l.call(r,i));const u=a.call(r,i);return r.set(i,o),p?Be(o,u)&&Je(r,"set",i,o):Je(r,"add",i,o),this},delete(i){const o=W(this),{has:r,get:l}=as(o);let a=r.call(o,i);a||(i=W(i),a=r.call(o,i)),l&&l.call(o,i);const p=o.delete(i);return a&&Je(o,"delete",i,void 0),p},clear(){const i=W(this),o=i.size!==0,r=i.clear();return o&&Je(i,"clear",void 0,void 0),r}}),["keys","values","entries",Symbol.iterator].forEach(i=>{s[i]=Xo(i,e,t)}),s}function mn(e,t){const s=Qo(e,t);return(n,i,o)=>i==="__v_isReactive"?!e:i==="__v_isReadonly"?e:i==="__v_raw"?n:Reflect.get(G(s,i)&&i in n?s:n,i,o)}const er={get:mn(!1,!1)},tr={get:mn(!1,!0)},sr={get:mn(!0,!1)};const ji=new WeakMap,Mi=new WeakMap,Ni=new WeakMap,nr=new WeakMap;function ir(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Jt(e){return et(e)?e:bn(e,!1,Zo,er,ji)}function or(e){return bn(e,!1,Yo,tr,Mi)}function Xs(e){return bn(e,!0,Jo,sr,Ni)}function bn(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=ir(Ao(e));if(r===0)return e;const l=new Proxy(e,r===2?n:s);return i.set(e,l),l}function _t(e){return et(e)?_t(e.__v_raw):!!(e&&e.__v_isReactive)}function et(e){return!!(e&&e.__v_isReadonly)}function Se(e){return!!(e&&e.__v_isShallow)}function vn(e){return e?!!e.__v_raw:!1}function W(e){const t=e&&e.__v_raw;return t?W(t):e}function rr(e){return!G(e,"__v_skip")&&Object.isExtensible(e)&&yi(e,"__v_skip",!0),e}const Ae=e=>Z(e)?Jt(e):e,Ct=e=>Z(e)?Xs(e):e;function fe(e){return e?e.__v_isRef===!0:!1}function V(e){return lr(e,!1)}function lr(e,t){return fe(e)?e:new ar(e,t)}class ar{constructor(t,s){this.dep=new gn,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=s?t:W(t),this._value=s?t:Ae(t),this.__v_isShallow=s}get value(){return this.dep.track(),this._value}set value(t){const s=this._rawValue,n=this.__v_isShallow||Se(t)||et(t);t=n?t:W(t),Be(t,s)&&(this._rawValue=t,this._value=n?t:Ae(t),this.dep.trigger())}}function g(e){return fe(e)?e.value:e}const cr={get:(e,t,s)=>t==="__v_raw"?e:g(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 Di(e){return _t(e)?e:new Proxy(e,cr)}class ur{constructor(t,s,n){this.fn=t,this.setter=s,this._value=void 0,this.dep=new gn(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=qt-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!s,this.isSSR=n}notify(){if(this.flags|=16,!(this.flags&8)&&Q!==this)return Ei(this,!0),!0}get value(){const t=this.dep.track();return $i(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function dr(e,t,s=!1){let n,i;return H(e)?n=e:(n=e.get,i=e.set),new ur(n,i,s)}const us={},gs=new WeakMap;let mt;function fr(e,t=!1,s=mt){if(s){let n=gs.get(s);n||gs.set(s,n=[]),n.push(e)}}function pr(e,t,s=Y){const{immediate:n,deep:i,once:o,scheduler:r,augmentJob:l,call:a}=s,p=M=>i?M:Se(M)||i===!1||i===0?Ye(M,1):Ye(M);let u,m,y,A,D=!1,C=!1;if(fe(e)?(m=()=>e.value,D=Se(e)):_t(e)?(m=()=>p(e),D=!0):L(e)?(C=!0,D=e.some(M=>_t(M)||Se(M)),m=()=>e.map(M=>{if(fe(M))return M.value;if(_t(M))return p(M);if(H(M))return a?a(M,2):M()})):H(e)?t?m=a?()=>a(e,2):e:m=()=>{if(y){Ke();try{y()}finally{We()}}const M=mt;mt=u;try{return a?a(e,3,[A]):e(A)}finally{mt=M}}:m=He,t&&i){const M=m,oe=i===!0?1/0:i;m=()=>Ye(M(),oe)}const P=Fo(),T=()=>{u.stop(),P&&P.active&&an(P.effects,u)};if(o&&t){const M=t;t=(...oe)=>{const Re=M(...oe);return T(),Re}}let $=C?new Array(e.length).fill(us):us;const j=M=>{if(!(!(u.flags&1)||!u.dirty&&!M))if(t){const oe=u.run();if(M||i||D||(C?oe.some((Re,Ie)=>Be(Re,$[Ie])):Be(oe,$))){y&&y();const Re=mt;mt=u;try{const Ie=[oe,$===us?void 0:C&&$[0]===us?[]:$,A];$=oe,a?a(t,3,Ie):t(...Ie)}finally{mt=Re}}}else u.run()};return l&&l(j),u=new Si(m),u.scheduler=r?()=>r(j,!1):j,A=M=>fr(M,!1,u),y=u.onStop=()=>{const M=gs.get(u);if(M){if(a)a(M,4);else for(const oe of M)oe();gs.delete(u)}},t?n?j(!0):$=u.run():r?r(j.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(L(e))for(let n=0;n{Ye(n,t,s)});else if(vi(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 ts(e,t,s,n){try{return n?e(...n):e()}catch(i){$s(i,t,s)}}function Oe(e,t,s,n){if(H(e)){const i=ts(e,t,s,n);return i&&mi(i)&&i.catch(o=>{$s(o,t,s)}),i}if(L(e)){const i=[];for(let o=0;o>>1,i=be[n],o=Yt(i);o=Yt(s)?be.push(e):be.splice(gr(t),0,e),e.flags|=1,Fi()}}function Fi(){ms||(ms=zi.then(Hi))}function mr(e){L(e)?St.push(...e):ot&&e.id===-1?ot.splice(wt+1,0,e):e.flags&1||(St.push(e),e.flags|=1),Fi()}function Mn(e,t,s=ze+1){for(;sYt(s)-Yt(n));if(St.length=0,ot){ot.push(...t);return}for(ot=t,wt=0;wte.id==null?e.flags&2?-1:1/0:e.id;function Hi(e){try{for(ze=0;ze{n._d&&Gn(-1);const o=bs(t);let r;try{r=e(...i)}finally{bs(o),n._d&&Gn(1)}return r};return n._n=!0,n._c=!0,n._d=!0,n}function re(e,t){if(xe===null)return e;const s=Is(xe),n=e.dirs||(e.dirs=[]);for(let i=0;i1)return s&&H(t)?t.call(n&&n.proxy):t}}const _r=Symbol.for("v-scx"),yr=()=>ps(_r);function Fs(e,t,s){return Ki(e,t,s)}function Ki(e,t,s=Y){const{immediate:n,deep:i,flush:o,once:r}=s,l=he({},s),a=t&&n||!t&&o!=="post";let p;if(Qt){if(o==="sync"){const A=yr();p=A.__watcherHandles||(A.__watcherHandles=[])}else if(!a){const A=()=>{};return A.stop=He,A.resume=He,A.pause=He,A}}const u=ve;l.call=(A,D,C)=>Oe(A,u,D,C);let m=!1;o==="post"?l.scheduler=A=>{_e(A,u&&u.suspense)}:o!=="sync"&&(m=!0,l.scheduler=(A,D)=>{D?A():_n(A)}),l.augmentJob=A=>{t&&(A.flags|=4),m&&(A.flags|=2,u&&(A.id=u.uid,A.i=u))};const y=pr(e,t,l);return Qt&&(p?p.push(y):a&&y()),y}function wr(e,t,s){const n=this.proxy,i=ne(e)?e.includes(".")?Wi(n,e):()=>n[e]:e.bind(n,n);let o;H(t)?o=t:(o=t.handler,s=t);const r=ss(this),l=Ki(i,o.bind(n),s);return r(),l}function Wi(e,t){const s=t.split(".");return()=>{let n=e;for(let i=0;ie.__isTeleport,Bs=Symbol("_leaveCb");function yn(e,t){e.shapeFlag&6&&e.component?(e.transition=t,yn(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Gi(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function Nn(e,t){let s;return!!((s=Object.getOwnPropertyDescriptor(e,t))&&!s.configurable)}const vs=new WeakMap;function Vt(e,t,s,n,i=!1){if(L(e)){e.forEach((C,P)=>Vt(C,t&&(L(t)?t[P]:t),s,n,i));return}if(Kt(n)&&!i){n.shapeFlag&512&&n.type.__asyncResolved&&n.component.subTree.component&&Vt(e,t,s,n.component.subTree);return}const o=n.shapeFlag&4?Is(n.component):n.el,r=i?null:o,{i:l,r:a}=e,p=t&&t.r,u=l.refs===Y?l.refs={}:l.refs,m=l.setupState,y=W(m),A=m===Y?gi:C=>Nn(u,C)?!1:G(y,C),D=(C,P)=>!(P&&Nn(u,P));if(p!=null&&p!==a){if(Dn(t),ne(p))u[p]=null,A(p)&&(m[p]=null);else if(fe(p)){const C=t;D(p,C.k)&&(p.value=null),C.k&&(u[C.k]=null)}}if(H(a)){Ke();try{ts(a,l,12,[r,u])}finally{We()}}else{const C=ne(a),P=fe(a);if(C||P){const T=()=>{if(e.f){const $=C?A(a)?m[a]:u[a]:D()||!e.k?a.value:u[e.k];if(i)L($)&&an($,o);else if(L($))$.includes(o)||$.push(o);else if(C)u[a]=[o],A(a)&&(m[a]=u[a]);else{const j=[o];D(a,e.k)&&(a.value=j),e.k&&(u[e.k]=j)}}else C?(u[a]=r,A(a)&&(m[a]=r)):P&&(D(a,e.k)&&(a.value=r),e.k&&(u[e.k]=r))};if(r){const $=()=>{T(),vs.delete(e)};$.id=-1,vs.set(e,$),_e($,s)}else Dn(e),T()}}}function Dn(e){const t=vs.get(e);t&&(t.flags|=8,vs.delete(e))}Cs().requestIdleCallback;Cs().cancelIdleCallback;const Kt=e=>!!e.type.__asyncLoader,qi=e=>e.type.__isKeepAlive;function Sr(e,t){Zi(e,"a",t)}function Tr(e,t){Zi(e,"da",t)}function Zi(e,t,s=ve){const n=e.__wdc||(e.__wdc=()=>{let i=s;for(;i;){if(i.isDeactivated)return;i=i.parent}return e()});if(As(t,n,s),s){let i=s.parent;for(;i&&i.parent;)qi(i.parent.vnode)&&Er(n,t,s,i),i=i.parent}}function Er(e,t,s,n){const i=As(t,e,n,!0);wn(()=>{an(n[t],i)},s)}function As(e,t,s=ve,n=!1){if(s){const i=s[e]||(s[e]=[]),o=t.__weh||(t.__weh=(...r)=>{Ke();const l=ss(s),a=Oe(t,s,e,r);return l(),We(),a});return n?i.unshift(o):i.push(o),o}}const tt=e=>(t,s=ve)=>{(!Qt||e==="sp")&&As(e,(...n)=>t(...n),s)},Cr=tt("bm"),ut=tt("m"),Pr=tt("bu"),$r=tt("u"),Ar=tt("bum"),wn=tt("um"),Or=tt("sp"),Rr=tt("rtg"),Ir=tt("rtc");function Ur(e,t=ve){As("ec",e,t)}const jr=Symbol.for("v-ndc");function ke(e,t,s,n){let i;const o=s,r=L(e);if(r||ne(e)){const l=r&&_t(e);let a=!1,p=!1;l&&(a=!Se(e),p=et(e),e=Ps(e)),i=new Array(e.length);for(let u=0,m=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?bo(e)?Is(e):Qs(e.parent):null,Wt=he(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Qs(e.parent),$root:e=>Qs(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Yi(e),$forceUpdate:e=>e.f||(e.f=()=>{_n(e.update)}),$nextTick:e=>e.n||(e.n=Li.bind(e.proxy)),$watch:e=>wr.bind(e)}),Hs=(e,t)=>e!==Y&&!e.__isScriptSetup&&G(e,t),Mr={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 y=r[t];if(y!==void 0)switch(y){case 1:return n[t];case 2:return i[t];case 4:return s[t];case 3:return o[t]}else{if(Hs(n,t))return r[t]=1,n[t];if(i!==Y&&G(i,t))return r[t]=2,i[t];if(G(o,t))return r[t]=3,o[t];if(s!==Y&&G(s,t))return r[t]=4,s[t];en&&(r[t]=0)}}const p=Wt[t];let u,m;if(p)return t==="$attrs"&&ue(e.attrs,"get",""),p(e);if((u=l.__cssModules)&&(u=u[t]))return u;if(s!==Y&&G(s,t))return r[t]=4,s[t];if(m=a.config.globalProperties,G(m,t))return m[t]},set({_:e},t,s){const{data:n,setupState:i,ctx:o}=e;return Hs(i,t)?(i[t]=s,!0):n!==Y&&G(n,t)?(n[t]=s,!0):G(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!==Y&&l[0]!=="$"&&G(e,l)||Hs(t,l)||G(o,l)||G(n,l)||G(Wt,l)||G(i.config.globalProperties,l)||(a=r.__cssModules)&&a[l])},defineProperty(e,t,s){return s.get!=null?e._.accessCache[t]=0:G(s,"value")&&this.set(e,t,s.value,null),Reflect.defineProperty(e,t,s)}};function zn(e){return L(e)?e.reduce((t,s)=>(t[s]=null,t),{}):e}let en=!0;function Nr(e){const t=Yi(e),s=e.proxy,n=e.ctx;en=!1,t.beforeCreate&&Ln(t.beforeCreate,e,"bc");const{data:i,computed:o,methods:r,watch:l,provide:a,inject:p,created:u,beforeMount:m,mounted:y,beforeUpdate:A,updated:D,activated:C,deactivated:P,beforeDestroy:T,beforeUnmount:$,destroyed:j,unmounted:M,render:oe,renderTracked:Re,renderTriggered:Ie,errorCaptured:st,serverPrefetch:ns,expose:dt,inheritAttrs:It,components:is,directives:os,filters:Us}=t;if(p&&Dr(p,n,null),r)for(const te in r){const X=r[te];H(X)&&(n[te]=X.bind(s))}if(i){const te=i.call(s,s);Z(te)&&(e.data=Jt(te))}if(en=!0,o)for(const te in o){const X=o[te],ft=H(X)?X.bind(s,s):H(X.get)?X.get.bind(s,s):He,rs=!H(X)&&H(X.set)?X.set.bind(s):He,pt=Qe({get:ft,set:rs});Object.defineProperty(n,te,{enumerable:!0,configurable:!0,get:()=>pt.value,set:Ue=>pt.value=Ue})}if(l)for(const te in l)Ji(l[te],n,s,te);if(a){const te=H(a)?a.call(s):a;Reflect.ownKeys(te).forEach(X=>{vr(X,te[X])})}u&&Ln(u,e,"c");function ge(te,X){L(X)?X.forEach(ft=>te(ft.bind(s))):X&&te(X.bind(s))}if(ge(Cr,m),ge(ut,y),ge(Pr,A),ge($r,D),ge(Sr,C),ge(Tr,P),ge(Ur,st),ge(Ir,Re),ge(Rr,Ie),ge(Ar,$),ge(wn,M),ge(Or,ns),L(dt))if(dt.length){const te=e.exposed||(e.exposed={});dt.forEach(X=>{Object.defineProperty(te,X,{get:()=>s[X],set:ft=>s[X]=ft,enumerable:!0})})}else e.exposed||(e.exposed={});oe&&e.render===He&&(e.render=oe),It!=null&&(e.inheritAttrs=It),is&&(e.components=is),os&&(e.directives=os),ns&&Gi(e)}function Dr(e,t,s=He){L(e)&&(e=tn(e));for(const n in e){const i=e[n];let o;Z(i)?"default"in i?o=ps(i.from||n,i.default,!0):o=ps(i.from||n):o=ps(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){Oe(L(e)?e.map(n=>n.bind(t.proxy)):e.bind(t.proxy),t,s)}function Ji(e,t,s,n){let i=n.includes(".")?Wi(s,n):()=>s[n];if(ne(e)){const o=t[e];H(o)&&Fs(i,o)}else if(H(e))Fs(i,e.bind(s));else if(Z(e))if(L(e))e.forEach(o=>Ji(o,t,s,n));else{const o=H(e.handler)?e.handler.bind(s):t[e.handler];H(o)&&Fs(i,o,e)}}function Yi(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=>_s(a,p,r,!0)),_s(a,t,r)),Z(t)&&o.set(t,a),a}function _s(e,t,s,n=!1){const{mixins:i,extends:o}=t;o&&_s(e,o,s,!0),i&&i.forEach(r=>_s(e,r,s,!0));for(const r in t)if(!(n&&r==="expose")){const l=zr[r]||s&&s[r];e[r]=l?l(e[r],t[r]):t[r]}return e}const zr={data:Fn,props:Bn,emits:Bn,methods:zt,computed:zt,beforeCreate:me,created:me,beforeMount:me,mounted:me,beforeUpdate:me,updated:me,beforeDestroy:me,beforeUnmount:me,destroyed:me,unmounted:me,activated:me,deactivated:me,errorCaptured:me,serverPrefetch:me,components:zt,directives:zt,watch:Fr,provide:Fn,inject:Lr};function Fn(e,t){return t?e?function(){return he(H(e)?e.call(this,this):e,H(t)?t.call(this,this):t)}:t:e}function Lr(e,t){return zt(tn(e),tn(t))}function tn(e){if(L(e)){const t={};for(let s=0;st==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ce(t)}Modifiers`]||e[`${ct(t)}Modifiers`];function Kr(e,t,...s){if(e.isUnmounted)return;const n=e.vnode.props||Y;let i=s;const o=t.startsWith("update:"),r=o&&Vr(n,t.slice(7));r&&(r.trim&&(i=s.map(u=>ne(u)?u.trim():u)),r.number&&(i=s.map(Es)));let l,a=n[l=Ms(t)]||n[l=Ms(Ce(t))];!a&&o&&(a=n[l=Ms(ct(t))]),a&&Oe(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,Oe(p,e,6,i)}}const Wr=new WeakMap;function Qi(e,t,s=!1){const n=s?Wr: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,he(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):(L(o)?o.forEach(a=>r[a]=null):he(r,o),Z(e)&&n.set(e,r),r)}function Os(e,t){return!e||!ks(t)?!1:(t=t.slice(2),t=t==="Once"?t:t.replace(/Once$/,""),G(e,t[0].toLowerCase()+t.slice(1))||G(e,ct(t))||G(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:m,data:y,setupState:A,ctx:D,inheritAttrs:C}=e,P=bs(e);let T,$;try{if(s.shapeFlag&4){const M=i||n,oe=M;T=Fe(p.call(oe,M,u,m,A,y,D)),$=l}else{const M=t;T=Fe(M.length>1?M(m,{attrs:l,slots:r,emit:a}):M(m,null)),$=t.props?l:Gr(l)}}catch(M){Gt.length=0,$s(M,e,1),T=ce(lt)}let j=T;if($&&C!==!1){const M=Object.keys($),{shapeFlag:oe}=j;M.length&&oe&7&&(o&&M.some(Ss)&&($=qr($,o)),j=Pt(j,$,!1,!0))}return s.dirs&&(j=Pt(j,null,!1,!0),j.dirs=j.dirs?j.dirs.concat(s.dirs):s.dirs),s.transition&&yn(j,s.transition),T=j,bs(P),T}const Gr=e=>{let t;for(const s in e)(s==="class"||s==="style"||ks(s))&&((t||(t={}))[s]=e[s]);return t},qr=(e,t)=>{const s={};for(const n in e)(!Ss(n)||!(n.slice(9)in t))&&(s[n]=e[n]);return s};function Zr(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 m=0;mObject.create(to),no=e=>Object.getPrototypeOf(e)===to;function Yr(e,t,s,n=!1){const i={},o=so();e.propsDefaults=Object.create(null),io(e,t,i,o);for(const r in e.propsOptions[0])r in i||(i[r]=void 0);s?e.props=n?i:or(i):e.type.props?e.props=i:e.props=o,e.attrs=o}function Xr(e,t,s,n){const{props:i,attrs:o,vnode:{patchFlag:r}}=e,l=W(i),[a]=e.propsOptions;let p=!1;if((n||r>0)&&!(r&16)){if(r&8){const u=e.vnode.dynamicProps;for(let m=0;m{a=!0;const[y,A]=oo(m,t,!0);he(r,y),A&&l.push(...A)};!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(L(o))for(let u=0;ue==="_"||e==="_ctx"||e==="$stable",kn=e=>L(e)?e.map(Fe):[Fe(e)],el=(e,t,s)=>{if(t._n)return t;const n=br((...i)=>kn(t(...i)),s);return n._c=!1,n},ro=(e,t,s)=>{const n=e._ctx;for(const i in e){if(xn(i))continue;const o=e[i];if(H(o))t[i]=el(i,o,n);else if(o!=null){const r=kn(o);t[i]=()=>r}}},lo=(e,t)=>{const s=kn(t);e.slots.default=()=>s},ao=(e,t,s)=>{for(const n in t)(s||!xn(n))&&(e[n]=t[n])},tl=(e,t,s)=>{const n=e.slots=so();if(e.vnode.shapeFlag&32){const i=t._;i?(ao(n,t,s),s&&yi(n,"_",i,!0)):ro(t,n)}else t&&lo(e,t)},sl=(e,t,s)=>{const{vnode:n,slots:i}=e;let o=!0,r=Y;if(n.shapeFlag&32){const l=t._;l?s&&l===1?o=!1:ao(i,t,s):(o=!t.$stable,ro(t,i)),r=t}else t&&(lo(e,t),r={default:1});if(o)for(const l in i)!xn(l)&&r[l]==null&&delete i[l]},_e=ll;function nl(e){return il(e)}function il(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:m,nextSibling:y,setScopeId:A=He,insertStaticContent:D}=e,C=(c,f,v,S=null,x=null,_=null,I=void 0,R=null,O=!!f.dynamicChildren)=>{if(c===f)return;c&&!Dt(c,f)&&(S=ls(c),Ue(c,x,_,!0),c=null),f.patchFlag===-2&&(O=!1,f.dynamicChildren=null);const{type:w,ref:z,shapeFlag:U}=f;switch(w){case Rs:P(c,f,v,S);break;case lt:T(c,f,v,S);break;case Ks:c==null&&$(f,v,S,I);break;case ee:is(c,f,v,S,x,_,I,R,O);break;default:U&1?oe(c,f,v,S,x,_,I,R,O):U&6?os(c,f,v,S,x,_,I,R,O):(U&64||U&128)&&w.process(c,f,v,S,x,_,I,R,O,jt)}z!=null&&x?Vt(z,c&&c.ref,_,f||c,!f):z==null&&c&&c.ref!=null&&Vt(c.ref,null,_,c,!0)},P=(c,f,v,S)=>{if(c==null)n(f.el=l(f.children),v,S);else{const x=f.el=c.el;f.children!==c.children&&p(x,f.children)}},T=(c,f,v,S)=>{c==null?n(f.el=a(f.children||""),v,S):f.el=c.el},$=(c,f,v,S)=>{[c.el,c.anchor]=D(c.children,f,v,S,c.el,c.anchor)},j=({el:c,anchor:f},v,S)=>{let x;for(;c&&c!==f;)x=y(c),n(c,v,S),c=x;n(f,v,S)},M=({el:c,anchor:f})=>{let v;for(;c&&c!==f;)v=y(c),i(c),c=v;i(f)},oe=(c,f,v,S,x,_,I,R,O)=>{if(f.type==="svg"?I="svg":f.type==="math"&&(I="mathml"),c==null)Re(f,v,S,x,_,I,R,O);else{const w=c.el&&c.el._isVueCE?c.el:null;try{w&&w._beginPatch(),ns(c,f,x,_,I,R,O)}finally{w&&w._endPatch()}}},Re=(c,f,v,S,x,_,I,R)=>{let O,w;const{props:z,shapeFlag:U,transition:N,dirs:F}=c;if(O=c.el=r(c.type,_,z&&z.is,z),U&8?u(O,c.children):U&16&&st(c.children,O,null,S,x,Vs(c,_),I,R),F&&ht(c,null,S,"created"),Ie(O,c,c.scopeId,I,S),z){for(const J in z)J!=="value"&&!Ft(J)&&o(O,J,null,z[J],_,S);"value"in z&&o(O,"value",null,z.value,_),(w=z.onVnodeBeforeMount)&&De(w,S,c)}F&&ht(c,null,S,"beforeMount");const K=ol(x,N);K&&N.beforeEnter(O),n(O,f,v),((w=z&&z.onVnodeMounted)||K||F)&&_e(()=>{try{w&&De(w,S,c),K&&N.enter(O),F&&ht(c,null,S,"mounted")}finally{}},x)},Ie=(c,f,v,S,x)=>{if(v&&A(c,v),S)for(let _=0;_{for(let w=O;w{const R=f.el=c.el;let{patchFlag:O,dynamicChildren:w,dirs:z}=f;O|=c.patchFlag&16;const U=c.props||Y,N=f.props||Y;let F;if(v&>(v,!1),(F=N.onVnodeBeforeUpdate)&&De(F,v,f,c),z&&ht(f,c,v,"beforeUpdate"),v&>(v,!0),w&&(!c.dynamicChildren||c.dynamicChildren.length!==w.length)&&(O=0,I=!1,w=null),(U.innerHTML&&N.innerHTML==null||U.textContent&&N.textContent==null)&&u(R,""),w?dt(c.dynamicChildren,w,R,v,S,Vs(f,x),_):I||X(c,f,R,null,v,S,Vs(f,x),_,!1),O>0){if(O&16)It(R,U,N,v,x);else if(O&2&&U.class!==N.class&&o(R,"class",null,N.class,x),O&4&&o(R,"style",U.style,N.style,x),O&8){const K=f.dynamicProps;for(let J=0;J{F&&De(F,v,f,c),z&&ht(f,c,v,"updated")},S)},dt=(c,f,v,S,x,_,I)=>{for(let R=0;R{if(f!==v){if(f!==Y)for(const _ in f)!Ft(_)&&!(_ in v)&&o(c,_,f[_],null,x,S);for(const _ in v){if(Ft(_))continue;const I=v[_],R=f[_];I!==R&&_!=="value"&&o(c,_,R,I,x,S)}"value"in v&&o(c,"value",f.value,v.value,x)}},is=(c,f,v,S,x,_,I,R,O)=>{const w=f.el=c?c.el:l(""),z=f.anchor=c?c.anchor:l("");let{patchFlag:U,dynamicChildren:N,slotScopeIds:F}=f;F&&(R=R?R.concat(F):F),c==null?(n(w,v,S),n(z,v,S),st(f.children||[],v,z,x,_,I,R,O)):U>0&&U&64&&N&&c.dynamicChildren&&c.dynamicChildren.length===N.length?(dt(c.dynamicChildren,N,v,x,_,I,R),(f.key!=null||x&&f===x.subTree)&&co(c,f,!0)):X(c,f,v,z,x,_,I,R,O)},os=(c,f,v,S,x,_,I,R,O)=>{f.slotScopeIds=R,c==null?f.shapeFlag&512?x.ctx.activate(f,v,S,I,O):Us(f,v,S,x,_,I,O):En(c,f,O)},Us=(c,f,v,S,x,_,I)=>{const R=c.component=hl(c,S,x);if(qi(c)&&(R.ctx.renderer=jt),ml(R,!1,I),R.asyncDep){if(x&&x.registerDep(R,ge,I),!c.el){const O=R.subTree=ce(lt);T(null,O,f,v),c.placeholder=O.el}}else ge(R,c,f,v,x,_,I)},En=(c,f,v)=>{const S=f.component=c.component;if(Zr(c,f,v))if(S.asyncDep&&!S.asyncResolved){te(S,f,v);return}else S.next=f,S.update();else f.el=c.el,S.vnode=f},ge=(c,f,v,S,x,_,I)=>{const R=()=>{if(c.isMounted){let{next:U,bu:N,u:F,parent:K,vnode:J}=c;{const Me=uo(c);if(Me){U&&(U.el=J.el,te(c,U,I)),Me.asyncDep.then(()=>{_e(()=>{c.isUnmounted||w()},x)});return}}let q=U,ie;gt(c,!1),U?(U.el=J.el,te(c,U,I)):U=J,N&&fs(N),(ie=U.props&&U.props.onVnodeBeforeUpdate)&&De(ie,K,U,J),gt(c,!0);const le=Hn(c),je=c.subTree;c.subTree=le,C(je,le,m(je.el),ls(je),c,x,_),U.el=le.el,q===null&&Jr(c,le.el),F&&_e(F,x),(ie=U.props&&U.props.onVnodeUpdated)&&_e(()=>De(ie,K,U,J),x)}else{let U;const{el:N,props:F}=f,{bm:K,m:J,parent:q,root:ie,type:le}=c,je=Kt(f);gt(c,!1),K&&fs(K),!je&&(U=F&&F.onVnodeBeforeMount)&&De(U,q,f),gt(c,!0);{ie.ce&&ie.ce._hasShadowRoot()&&ie.ce._injectChildStyle(le,c.parent?c.parent.type:void 0);const Me=c.subTree=Hn(c);C(null,Me,v,S,c,x,_),f.el=Me.el}if(J&&_e(J,x),!je&&(U=F&&F.onVnodeMounted)){const Me=f;_e(()=>De(U,q,Me),x)}(f.shapeFlag&256||q&&Kt(q.vnode)&&q.vnode.shapeFlag&256)&&c.a&&_e(c.a,x),c.isMounted=!0,f=v=S=null}};c.scope.on();const O=c.effect=new Si(R);c.scope.off();const w=c.update=O.run.bind(O),z=c.job=O.runIfDirty.bind(O);z.i=c,z.id=c.uid,O.scheduler=()=>_n(z),gt(c,!0),w()},te=(c,f,v)=>{f.component=c;const S=c.vnode.props;c.vnode=f,c.next=null,Xr(c,f.props,S,v),sl(c,f.children,v),Ke(),Mn(c),We()},X=(c,f,v,S,x,_,I,R,O=!1)=>{const w=c&&c.children,z=c?c.shapeFlag:0,U=f.children,{patchFlag:N,shapeFlag:F}=f;if(N>0){if(N&128){rs(w,U,v,S,x,_,I,R,O);return}else if(N&256){ft(w,U,v,S,x,_,I,R,O);return}}F&8?(z&16&&Ut(w,x,_),U!==w&&u(v,U)):z&16?F&16?rs(w,U,v,S,x,_,I,R,O):Ut(w,x,_,!0):(z&8&&u(v,""),F&16&&st(U,v,S,x,_,I,R,O))},ft=(c,f,v,S,x,_,I,R,O)=>{c=c||xt,f=f||xt;const w=c.length,z=f.length,U=Math.min(w,z);let N;for(N=0;Nz?Ut(c,x,_,!0,!1,U):st(f,v,S,x,_,I,R,O,U)},rs=(c,f,v,S,x,_,I,R,O)=>{let w=0;const z=f.length;let U=c.length-1,N=z-1;for(;w<=U&&w<=N;){const F=c[w],K=f[w]=O?Ze(f[w]):Fe(f[w]);if(Dt(F,K))C(F,K,v,null,x,_,I,R,O);else break;w++}for(;w<=U&&w<=N;){const F=c[U],K=f[N]=O?Ze(f[N]):Fe(f[N]);if(Dt(F,K))C(F,K,v,null,x,_,I,R,O);else break;U--,N--}if(w>U){if(w<=N){const F=N+1,K=FN)for(;w<=U;)Ue(c[w],x,_,!0),w++;else{const F=w,K=w,J=new Map;for(w=K;w<=N;w++){const ye=f[w]=O?Ze(f[w]):Fe(f[w]);ye.key!=null&&J.set(ye.key,w)}let q,ie=0;const le=N-K+1;let je=!1,Me=0;const Mt=new Array(le);for(w=0;w=le){Ue(ye,x,_,!0);continue}let Ne;if(ye.key!=null)Ne=J.get(ye.key);else for(q=K;q<=N;q++)if(Mt[q-K]===0&&Dt(ye,f[q])){Ne=q;break}Ne===void 0?Ue(ye,x,_,!0):(Mt[Ne-K]=w+1,Ne>=Me?Me=Ne:je=!0,C(ye,f[Ne],v,null,x,_,I,R,O),ie++)}const $n=je?rl(Mt):xt;for(q=$n.length-1,w=le-1;w>=0;w--){const ye=K+w,Ne=f[ye],An=f[ye+1],On=ye+1{const{el:_,type:I,transition:R,children:O,shapeFlag:w}=c;if(w&6){pt(c.component.subTree,f,v,S);return}if(w&128){c.suspense.move(f,v,S);return}if(w&64){I.move(c,f,v,jt);return}if(I===ee){n(_,f,v);for(let U=0;UR.enter(_),x));else{const{leave:U,delayLeave:N,afterLeave:F}=R,K=()=>{c.ctx.isUnmounted?i(_):n(_,f,v)},J=()=>{const q=_._isLeaving||!!_[Bs];_._isLeaving&&_[Bs](!0),R.persisted&&!q?K():U(_,()=>{K(),F&&F()})};N?N(_,K,J):J()}else n(_,f,v)},Ue=(c,f,v,S=!1,x=!1)=>{const{type:_,props:I,ref:R,children:O,dynamicChildren:w,shapeFlag:z,patchFlag:U,dirs:N,cacheIndex:F,memo:K}=c;if(U===-2&&(x=!1),R!=null&&(Ke(),Vt(R,null,v,c,!0),We()),F!=null&&(f.renderCache[F]=void 0),z&256){f.ctx.deactivate(c);return}const J=z&1&&N,q=!Kt(c);let ie;if(q&&(ie=I&&I.onVnodeBeforeUnmount)&&De(ie,f,c),z&6)Po(c.component,v,S);else{if(z&128){c.suspense.unmount(v,S);return}J&&ht(c,null,f,"beforeUnmount"),z&64?c.type.remove(c,f,v,jt,S):w&&!w.hasOnce&&(_!==ee||U>0&&U&64)?Ut(w,f,v,!1,!0):(_===ee&&U&384||!x&&z&16)&&Ut(O,f,v),S&&Cn(c)}const le=K!=null&&F==null;(q&&(ie=I&&I.onVnodeUnmounted)||J||le)&&_e(()=>{ie&&De(ie,f,c),J&&ht(c,null,f,"unmounted"),le&&(c.el=null)},v)},Cn=c=>{const{type:f,el:v,anchor:S,transition:x}=c;if(f===ee){Co(v,S);return}if(f===Ks){M(c);return}const _=()=>{i(v),x&&!x.persisted&&x.afterLeave&&x.afterLeave()};if(c.shapeFlag&1&&x&&!x.persisted){const{leave:I,delayLeave:R}=x,O=()=>I(v,_);R?R(c.el,_,O):O()}else _()},Co=(c,f)=>{let v;for(;c!==f;)v=y(c),i(c),c=v;i(f)},Po=(c,f,v)=>{const{bum:S,scope:x,job:_,subTree:I,um:R,m:O,a:w}=c;Wn(O),Wn(w),S&&fs(S),x.stop(),_&&(_.flags|=8,Ue(I,c,f,v)),R&&_e(R,f),_e(()=>{c.isUnmounted=!0},f)},Ut=(c,f,v,S=!1,x=!1,_=0)=>{for(let I=_;I{if(c.shapeFlag&6)return ls(c.component.subTree);if(c.shapeFlag&128)return c.suspense.next();const f=y(c.anchor||c.el),v=f&&f[xr];return v?y(v):f};let js=!1;const Pn=(c,f,v)=>{let S;c==null?f._vnode&&(Ue(f._vnode,null,null,!0),S=f._vnode.component):C(f._vnode||null,c,f,null,null,null,v),f._vnode=c,js||(js=!0,Mn(S),Bi(),js=!1)},jt={p:C,um:Ue,m:pt,r:Cn,mt:Us,mc:st,pc:X,pbc:dt,n:ls,o:e};return{render:Pn,hydrate:void 0,createApp:Hr(Pn)}}function Vs({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 gt({effect:e,job:t},s){s?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function ol(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function co(e,t,s=!1){const n=e.children,i=t.children;if(L(n)&&L(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 uo(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:uo(t)}function Wn(e){if(e)for(let t=0;te.__isSuspense;function ll(e,t){t&&t.pendingBranch?L(e)?t.effects.push(...e):t.effects.push(e):mr(e)}const ee=Symbol.for("v-fgt"),Rs=Symbol.for("v-txt"),lt=Symbol.for("v-cmt"),Ks=Symbol.for("v-stc"),Gt=[];let we=null;function k(e=!1){Gt.push(we=e?null:[])}function al(){Gt.pop(),we=Gt[Gt.length-1]||null}let Xt=1;function Gn(e,t=!1){Xt+=e,e<0&&we&&t&&(we.hasOnce=!0)}function ho(e){return e.dynamicChildren=Xt>0?we||xt:null,al(),Xt>0&&we&&we.push(e),e}function E(e,t,s,n,i,o){return ho(d(e,t,s,n,i,o,!0))}function it(e,t,s,n,i){return ho(ce(e,t,s,n,i,!0))}function go(e){return e?e.__v_isVNode===!0:!1}function Dt(e,t){return e.type===t.type&&e.key===t.key}const mo=({key:e})=>e??null,hs=({ref:e,ref_key:t,ref_for:s})=>(typeof e=="number"&&(e=""+e),e!=null?ne(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===ee?0:1,r=!1,l=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&mo(t),ref:t&&hs(t),scopeId:Vi,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?(ys(a,s),o&128&&e.normalize(a)):s&&(a.shapeFlag|=ne(s)?8:16),Xt>0&&!r&&we&&(a.patchFlag>0||o&6)&&a.patchFlag!==32&&we.push(a),a}const ce=cl;function cl(e,t=null,s=null,n=0,i=null,o=!1){if((!e||e===jr)&&(e=lt),go(e)){const l=Pt(e,t,!0);return s&&ys(l,s),Xt>0&&!o&&we&&(l.shapeFlag&6?we[we.indexOf(e)]=l:we.push(l)),l.patchFlag=-2,l}if(yl(e)&&(e=e.__vccOpts),t){t=ul(t);let{class:l,style:a}=t;l&&!ne(l)&&(t.class=$e(l)),Z(a)&&(vn(a)&&!L(a)&&(a=he({},a)),t.style=un(a))}const r=ne(e)?1:po(e)?128:kr(e)?64:Z(e)?4:H(e)?2:0;return d(e,t,s,n,i,r,o,!0)}function ul(e){return e?vn(e)||no(e)?he({},e):e:null}function Pt(e,t,s=!1,n=!1){const{props:i,ref:o,patchFlag:r,children:l,transition:a}=e,p=t?dl(i||{},t):i,u={__v_isVNode:!0,__v_skip:!0,type:e.type,props:p,key:p&&mo(p),ref:t&&t.ref?s&&o?L(o)?o.concat(hs(t)):[o,hs(t)]:hs(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!==ee?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&&Pt(e.ssContent),ssFallback:e.ssFallback&&Pt(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return a&&n&&yn(u,a.clone(u)),u}function Te(e=" ",t=0){return ce(Rs,null,e,t)}function B(e="",t=!1){return t?(k(),it(lt,null,e)):ce(lt,null,e)}function Fe(e){return e==null||typeof e=="boolean"?ce(lt):L(e)?ce(ee,null,e.slice()):go(e)?Ze(e):ce(Rs,null,String(e))}function Ze(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Pt(e)}function ys(e,t){let s=0;const{shapeFlag:n}=e;if(t==null)t=null;else if(L(t))s=16;else if(typeof t=="object")if(n&65){const i=t.default;i&&(i._c&&(i._d=!1),ys(e,i()),i._c&&(i._d=!0));return}else{s=32;const i=t._;!i&&!no(t)?t._ctx=xe:i===3&&xe&&(xe.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else if(H(t)){if(n&65){ys(e,{default:t});return}t={default:t,_ctx:xe},s=32}else t=String(t),n&64?(s=16,t=[Te(t)]):s=8;e.children=t,e.shapeFlag|=s}function dl(...e){const t={};for(let s=0;sve||xe;let ws,nn;{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)}};ws=t("__VUE_INSTANCE_SETTERS__",s=>ve=s),nn=t("__VUE_SSR_SETTERS__",s=>Qt=s)}const ss=e=>{const t=ve;return ws(e),e.scope.on(),()=>{e.scope.off(),ws(t)}},qn=()=>{ve&&ve.scope.off(),ws(null)};function bo(e){return e.vnode.shapeFlag&4}let Qt=!1;function ml(e,t=!1,s=!1){t&&nn(t);const{props:n,children:i}=e.vnode,o=bo(e);Yr(e,n,o,t),tl(e,i,s||t);const r=o?bl(e,t):void 0;return t&&nn(!1),r}function bl(e,t){const s=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Mr);const{setup:n}=s;if(n){Ke();const i=e.setupContext=n.length>1?_l(e):null,o=ss(e),r=ts(n,e,0,[e.props,i]),l=mi(r);if(We(),o(),(l||e.sp)&&!Kt(e)&&Gi(e),l){if(r.then(qn,qn),t)return r.then(a=>{Zn(e,a)}).catch(a=>{$s(a,e,0)});e.asyncDep=r}else Zn(e,r)}else vo(e)}function Zn(e,t,s){H(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Z(t)&&(e.setupState=Di(t)),vo(e)}function vo(e,t,s){const n=e.type;e.render||(e.render=n.render||He);{const i=ss(e);Ke();try{Nr(e)}finally{We(),i()}}}const vl={get(e,t){return ue(e,"get",""),e[t]}};function _l(e){const t=s=>{e.exposed=s||{}};return{attrs:new Proxy(e.attrs,vl),slots:e.slots,emit:e.emit,expose:t}}function Is(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Di(rr(e.exposed)),{get(t,s){if(s in t)return t[s];if(s in Wt)return Wt[s](e)},has(t,s){return s in t||s in Wt}})):e.proxy}function yl(e){return H(e)&&"__vccOpts"in e}const Qe=(e,t)=>dr(e,t,Qt),wl="3.5.39";/** +* @vue/runtime-dom v3.5.39 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let on;const Jn=typeof window<"u"&&window.trustedTypes;if(Jn)try{on=Jn.createPolicy("vue",{createHTML:e=>e})}catch{}const _o=on?e=>on.createHTML(e):e=>e,xl="http://www.w3.org/2000/svg",kl="http://www.w3.org/1998/Math/MathML",qe=typeof document<"u"?document:null,Yn=qe&&qe.createElement("template"),Sl={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"?qe.createElementNS(xl,e):t==="mathml"?qe.createElementNS(kl,e):s?qe.createElement(e,{is:s}):qe.createElement(e);return e==="select"&&n&&n.multiple!=null&&i.setAttribute("multiple",n.multiple),i},createText:e=>qe.createTextNode(e),createComment:e=>qe.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>qe.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{Yn.innerHTML=_o(n==="svg"?`${e}`:n==="mathml"?`${e}`:e);const l=Yn.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]}},Tl=Symbol("_vtc");function El(e,t,s){const n=e[Tl];n&&(t=(t?[t,...n]:[...n]).join(" ")),t==null?e.removeAttribute("class"):s?e.setAttribute("class",t):e.className=t}const Xn=Symbol("_vod"),Cl=Symbol("_vsh"),Pl=Symbol(""),$l=/(?:^|;)\s*display\s*:/;function Al(e,t,s){const n=e.style,i=ne(s);let o=!1;if(s&&!i){if(t)if(ne(t))for(const r of t.split(";")){const l=r.slice(0,r.indexOf(":")).trim();s[l]==null&&Lt(n,l,"")}else for(const r in t)s[r]==null&&Lt(n,r,"");for(const r in s){r==="display"&&(o=!0);const l=s[r];l!=null?Rl(e,r,!ne(t)&&t?t[r]:void 0,l)||Lt(n,r,l):Lt(n,r,"")}}else if(i){if(t!==s){const r=n[Pl];r&&(s+=";"+r),n.cssText=s,o=$l.test(s)}}else t&&e.removeAttribute("style");Xn in e&&(e[Xn]=o?n.display:"",e[Cl]&&(n.display="none"))}const Qn=/\s*!important$/;function Lt(e,t,s){if(L(s))s.forEach(n=>Lt(e,t,n));else if(s==null&&(s=""),t.startsWith("--"))e.setProperty(t,s);else{const n=Ol(e,t);Qn.test(s)?e.setProperty(ct(n),s.replace(Qn,""),"important"):e[n]=s}}const ei=["Webkit","Moz","ms"],Ws={};function Ol(e,t){const s=Ws[t];if(s)return s;let n=Ce(t);if(n!=="filter"&&n in e)return Ws[t]=n;n=_i(n);for(let i=0;iGs||(Dl.then(()=>Gs=0),Gs=Date.now());function Ll(e,t){const s=n=>{if(!n._vts)n._vts=Date.now();else if(n._vts<=s.attached)return;const i=s.value;if(L(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,Fl=(e,t,s,n,i,o)=>{const r=i==="svg";t==="class"?El(e,n,r):t==="style"?Al(e,s,n):ks(t)?Ss(t)||Ul(e,t,s,n,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Bl(e,t,n,r))?(ni(e,t,n),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&si(e,t,n,r,o,t!=="value")):e._isVueCE&&(Hl(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!ne(n)))?ni(e,Ce(t),n,o,t):(t==="true-value"?e._trueValue=n:t==="false-value"&&(e._falseValue=n),si(e,t,n,r))};function Bl(e,t,s,n){if(n)return!!(t==="innerHTML"||t==="textContent"||t in e&&oi(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 oi(t)&&ne(s)?!1:t in e}function Hl(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 at=e=>{const t=e.props["onUpdate:modelValue"]||!1;return L(t)?s=>fs(t,s):t};function Vl(e){e.target.composing=!0}function ri(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Ee=Symbol("_assign");function li(e,t,s){return t&&(e=e.trim()),s&&(e=Es(e)),e}const pe={created(e,{modifiers:{lazy:t,trim:s,number:n}},i){e[Ee]=at(i);const o=n||i.props&&i.props.type==="number";Xe(e,t?"change":"input",r=>{r.target.composing||e[Ee](li(e.value,s,o))}),(s||o)&&Xe(e,"change",()=>{e.value=li(e.value,s,o)}),t||(Xe(e,"compositionstart",Vl),Xe(e,"compositionend",ri),Xe(e,"change",ri))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:s,modifiers:{lazy:n,trim:i,number:o}},r){if(e[Ee]=at(r),e.composing)return;const l=(o||e.type==="number")&&!/^0\d/.test(e.value)?Es(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)}},Kl={deep:!0,created(e,t,s){e[Ee]=at(s),Xe(e,"change",()=>{const n=e._modelValue,i=$t(e),o=e.checked,r=e[Ee];if(L(n)){const l=dn(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(Rt(n)){const l=new Set(n);o?l.add(i):l.delete(i),r(l)}else r(yo(e,o))})},mounted:ai,beforeUpdate(e,t,s){e[Ee]=at(s),ai(e,t,s)}};function ai(e,{value:t,oldValue:s},n){e._modelValue=t;let i;if(L(t))i=dn(t,n.props.value)>-1;else if(Rt(t))i=t.has(n.props.value);else{if(t===s)return;i=rt(t,yo(e,!0))}e.checked!==i&&(e.checked=i)}const Wl={created(e,{value:t},s){e.checked=rt(t,s.props.value),e[Ee]=at(s),Xe(e,"change",()=>{e[Ee]($t(e))})},beforeUpdate(e,{value:t,oldValue:s},n){e[Ee]=at(n),t!==s&&(e.checked=rt(t,n.props.value))}},xs={deep:!0,created(e,{value:t,modifiers:{number:s}},n){const i=Rt(t);Xe(e,"change",()=>{const o=Array.prototype.filter.call(e.options,r=>r.selected).map(r=>s?Es($t(r)):$t(r));e[Ee](e.multiple?i?new Set(o):o:o[0]),e._assigning=!0,Li(()=>{e._assigning=!1})}),e[Ee]=at(n)},mounted(e,{value:t}){ci(e,t)},beforeUpdate(e,t,s){e[Ee]=at(s)},updated(e,{value:t}){e._assigning||ci(e,t)}};function ci(e,t){const s=e.multiple,n=L(t);if(!(s&&!n&&!Rt(t))){for(let i=0,o=e.options.length;iString(p)===String(l)):r.selected=dn(t,l)>-1}else r.selected=t.has(l);else if(rt($t(r),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 yo(e,t){const s=t?"_trueValue":"_falseValue";return s in e?e[s]:t}const Gl={created(e,t,s){ds(e,t,s,null,"created")},mounted(e,t,s){ds(e,t,s,null,"mounted")},beforeUpdate(e,t,s,n){ds(e,t,s,n,"beforeUpdate")},updated(e,t,s,n){ds(e,t,s,n,"updated")}};function ql(e,t){switch(e){case"SELECT":return xs;case"TEXTAREA":return pe;default:switch(t){case"checkbox":return Kl;case"radio":return Wl;default:return pe}}}function ds(e,t,s,n,i){const r=ql(e.tagName,s.props&&s.props.type)[i];r&&r(e,t,s,n)}const Zl=["ctrl","shift","alt","meta"],Jl={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)=>Zl.some(s=>e[`${s}Key`]&&!t.includes(s))},Yl=(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=ct(i.key);if(t.some(r=>r===o||Xl[r]===o))return e(i)}))},ea=he({patchProp:Fl},Sl);let ui;function ta(){return ui||(ui=nl(ea))}const sa=((...e)=>{const t=ta().createApp(...e),{mount:s}=t;return t.mount=n=>{const i=ia(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,na(i));return i instanceof Element&&(i.removeAttribute("v-cloak"),i.setAttribute("data-v-app","")),r},t});function na(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function ia(e){return ne(e)?document.querySelector(e):e}const wo="dh-panel-theme";function oa(){var e;try{const t=localStorage.getItem(wo);if(t==="dark"||t==="light")return t}catch{}return(e=window.matchMedia)!=null&&e.call(window,"(prefers-color-scheme: dark)").matches?"dark":"light"}const Et=V(oa());function xo(e){Et.value=e,document.documentElement.classList.toggle("dark",e==="dark");try{localStorage.setItem(wo,e)}catch{}}function di(){xo(Et.value==="dark"?"light":"dark")}xo(Et.value);const ra={apiServer:"API server",switchToLight:"Switch to light theme",switchToDark:"Switch to dark theme",theme:"Theme",signOut:"Sign out",loading:"Loading…",standardUserNote:"Signed in as a standard user — management sections need an admin role",footer:"DriverVault — car maintenance & service tracker."},la={overview:"Overview",users:"Users",orgs:"Organizations",pocketbase:"PocketBase",webapp:"Web App",plugins:"Plugins",api:"API"},aa={title:"Sign in",subtitle:"Superadmin console for the DriverVault API Server.",email:"Email",password:"Password",submit:"Sign in",submitting:"Signing in…",invalid:"Invalid email or password.",failed:"Could not sign in.",authNote:"Authenticates against PocketBase through this server"},ca={title:"Status",unreachable:"unreachable",checking:"Checking…",apiServer:"API Server",pocketBase:"PocketBase",webApp:"Web App",thisProcess:"this process"},ua={create:"Create",save:"Save",cancel:"Cancel",edit:"Edit",delete:"Delete",rename:"Rename",empty:"—",name:"Name",email:"Email",role:"Role",organization:"Organization"},da={title:"Users",allOrgs:"All organizations",yourOrg:"Your organization",newUser:"New user",password:"Password",passwordUnchanged:"Password (blank = unchanged)",passwordPlaceholder:"min 8 characters",orgNone:"— none —",you:"you",empty:"No users.",confirmDelete:"Delete {email}? This cannot be undone."},fa={title:"Organizations",subtitle:"Tenants users belong to",newOrg:"New organization",namePlaceholder:"Acme Fleet",empty:"No organizations yet.",colId:"ID",confirmDelete:'Delete the organization "{name}"?'},pa={title:"PocketBase",subtitle:"Database connection used by every endpoint",connected:"connected",noSuperuser:"no superuser",unreachable:"unreachable",baseUrl:"Base URL",superuserEmail:"Superuser email",superuserPassword:"Superuser password",passwordUnchanged:"unchanged",passwordNotSet:"not set",saveApply:"Save & apply",testConnection:"Test connection",persistedEnv:"persisted to .env",testOk:"Connection OK — superuser authenticated.",testReachableNoAuth:"PocketBase is reachable, but the service account did not authenticate.",testUnreachable:"PocketBase is not reachable at that address.",savedNotice:"Saved. The server is now using this PocketBase."},ha={title:"Web App",subtitle:"Address probed by the status check, and who may call this API from a browser",reachable:"reachable",unreachable:"unreachable",baseUrl:"Base URL",allowedOrigins:"Allowed origins",originsHint:"Comma separated, or {star} for any. Native mobile apps are not subject to CORS.",saveApply:"Save & apply",testConnection:"Test connection",persistedEnv:"persisted to .env",testOk:"Web App is reachable.",testFailed:"Web App did not answer its health check at that address.",savedNotice:"Saved. New origins apply to the next request."},ga={title:"Plugins",subtitle:"Third-party service integrations",registerExternal:"Register external",cancelRegister:"Cancel",name:"Name",baseUrl:"Base URL",provider:"Provider",register:"Register",empty:"No plugins yet. Register an external one above, or compile a built-in connector.",builtin:"builtin",enabled:"enabled",disabled:"disabled",health:"Health",configure:"Configure",close:"Close",noConfig:"This plugin takes no configuration.",capabilities:"Capabilities",saved:"Saved.",checking:"Checking…",save:"Save",saveEnable:"Save & enable",disable:"Disable",remove:"Remove",builtinNote:"Built-in plugins can be disabled but not removed",confirmRemove:'Remove the external plugin "{name}"? Its saved config is deleted.'},ma={colEndpoint:"Endpoint",colDescription:"Description",authNone:"No auth",authBearer:"Bearer token",authManager:"Admin / superadmin",authSuperadmin:"Superadmin",groupPublic:"Public",groupIdentity:"Identity",groupCars:"Cars",groupService:"Service records",groupParts:"Parts",groupAccount:"Account",groupManagement:"Management",groupSuperadmin:"Superadmin"},ba={app:ra,sections:la,login:aa,status:ca,common:ua,users:da,orgs:fa,pocketbase:pa,webapp:ha,plugins:ga,api:ma},va={apiServer:"Serwer API",switchToLight:"Przełącz na motyw jasny",switchToDark:"Przełącz na motyw ciemny",theme:"Motyw",signOut:"Wyloguj się",loading:"Ładowanie…",standardUserNote:"Zalogowano jako zwykły użytkownik — sekcje zarządzania wymagają roli administratora",footer:"DriverVault — rejestr serwisu i konserwacji samochodu."},_a={overview:"Przegląd",users:"Użytkownicy",orgs:"Organizacje",pocketbase:"PocketBase",webapp:"Aplikacja webowa",plugins:"Wtyczki",api:"API"},ya={title:"Zaloguj się",subtitle:"Konsola superadministratora serwera API DriverVault.",email:"E-mail",password:"Hasło",submit:"Zaloguj się",submitting:"Logowanie…",invalid:"Nieprawidłowy e-mail lub hasło.",failed:"Nie udało się zalogować.",authNote:"Uwierzytelnia w PocketBase za pośrednictwem tego serwera"},wa={title:"Status",unreachable:"niedostępny",checking:"Sprawdzanie…",apiServer:"Serwer API",pocketBase:"PocketBase",webApp:"Aplikacja webowa",thisProcess:"ten proces"},xa={create:"Utwórz",save:"Zapisz",cancel:"Anuluj",edit:"Edytuj",delete:"Usuń",rename:"Zmień nazwę",empty:"—",name:"Nazwa",email:"E-mail",role:"Rola",organization:"Organizacja"},ka={title:"Użytkownicy",allOrgs:"Wszystkie organizacje",yourOrg:"Twoja organizacja",newUser:"Nowy użytkownik",password:"Hasło",passwordUnchanged:"Hasło (puste = bez zmian)",passwordPlaceholder:"min. 8 znaków",orgNone:"— brak —",you:"Ty",empty:"Brak użytkowników.",confirmDelete:"Usunąć {email}? Tej operacji nie można cofnąć."},Sa={title:"Organizacje",subtitle:"Podmioty, do których należą użytkownicy",newOrg:"Nowa organizacja",namePlaceholder:"Acme Fleet",empty:"Brak organizacji.",colId:"ID",confirmDelete:"Usunąć organizację „{name}”?"},Ta={title:"PocketBase",subtitle:"Połączenie z bazą danych używane przez każdy punkt końcowy",connected:"połączono",noSuperuser:"brak superużytkownika",unreachable:"niedostępny",baseUrl:"Adres bazowy",superuserEmail:"E-mail superużytkownika",superuserPassword:"Hasło superużytkownika",passwordUnchanged:"bez zmian",passwordNotSet:"nie ustawiono",saveApply:"Zapisz i zastosuj",testConnection:"Testuj połączenie",persistedEnv:"zapisano w .env",testOk:"Połączenie OK — superużytkownik uwierzytelniony.",testReachableNoAuth:"PocketBase jest dostępny, ale konto usługowe nie zostało uwierzytelnione.",testUnreachable:"PocketBase jest niedostępny pod tym adresem.",savedNotice:"Zapisano. Serwer korzysta teraz z tego PocketBase."},Ea={title:"Aplikacja webowa",subtitle:"Adres sprawdzany podczas kontroli statusu oraz kto może wywoływać to API z przeglądarki",reachable:"dostępna",unreachable:"niedostępna",baseUrl:"Adres bazowy",allowedOrigins:"Dozwolone źródła",originsHint:"Oddzielone przecinkami lub {star} dla dowolnego. Natywne aplikacje mobilne nie podlegają CORS.",saveApply:"Zapisz i zastosuj",testConnection:"Testuj połączenie",persistedEnv:"zapisano w .env",testOk:"Aplikacja webowa jest dostępna.",testFailed:"Aplikacja webowa nie odpowiedziała na kontrolę stanu pod tym adresem.",savedNotice:"Zapisano. Nowe źródła obowiązują od następnego żądania."},Ca={title:"Wtyczki",subtitle:"Integracje z usługami zewnętrznymi",registerExternal:"Zarejestruj zewnętrzną",cancelRegister:"Anuluj",name:"Nazwa",baseUrl:"Adres bazowy",provider:"Dostawca",register:"Zarejestruj",empty:"Brak wtyczek. Zarejestruj zewnętrzną powyżej lub skompiluj wbudowany łącznik.",builtin:"wbudowana",enabled:"włączona",disabled:"wyłączona",health:"Stan",configure:"Konfiguruj",close:"Zamknij",noConfig:"Ta wtyczka nie wymaga konfiguracji.",capabilities:"Możliwości",saved:"Zapisano.",checking:"Sprawdzanie…",save:"Zapisz",saveEnable:"Zapisz i włącz",disable:"Wyłącz",remove:"Usuń",builtinNote:"Wtyczki wbudowane można wyłączyć, ale nie usunąć",confirmRemove:"Usunąć zewnętrzną wtyczkę „{name}”? Jej zapisana konfiguracja zostanie usunięta."},Pa={colEndpoint:"Punkt końcowy",colDescription:"Opis",authNone:"Bez uwierzytelniania",authBearer:"Token Bearer",authManager:"Administrator / superadministrator",authSuperadmin:"Superadministrator",groupPublic:"Publiczne",groupIdentity:"Tożsamość",groupCars:"Samochody",groupService:"Wpisy serwisowe",groupParts:"Części",groupAccount:"Konto",groupManagement:"Zarządzanie",groupSuperadmin:"Superadministrator"},$a={app:va,sections:_a,login:ya,status:wa,common:xa,users:ka,orgs:Sa,pocketbase:Ta,webapp:Ea,plugins:Ca,api:Pa},Aa={apiServer:"API-server",switchToLight:"Skift til lyst tema",switchToDark:"Skift til mørkt tema",theme:"Tema",signOut:"Log ud",loading:"Indlæser…",standardUserNote:"Logget ind som almindelig bruger — administrationssektioner kræver en administratorrolle",footer:"DriverVault — bilservice- og vedligeholdelsesregister."},Oa={overview:"Oversigt",users:"Brugere",orgs:"Organisationer",pocketbase:"PocketBase",webapp:"Webapp",plugins:"Plugins",api:"API"},Ra={title:"Log ind",subtitle:"Superadmin-konsol til DriverVault API-serveren.",email:"E-mail",password:"Adgangskode",submit:"Log ind",submitting:"Logger ind…",invalid:"Ugyldig e-mail eller adgangskode.",failed:"Kunne ikke logge ind.",authNote:"Godkender mod PocketBase gennem denne server"},Ia={title:"Status",unreachable:"utilgængelig",checking:"Tjekker…",apiServer:"API-server",pocketBase:"PocketBase",webApp:"Webapp",thisProcess:"denne proces"},Ua={create:"Opret",save:"Gem",cancel:"Annuller",edit:"Rediger",delete:"Slet",rename:"Omdøb",empty:"—",name:"Navn",email:"E-mail",role:"Rolle",organization:"Organisation"},ja={title:"Brugere",allOrgs:"Alle organisationer",yourOrg:"Din organisation",newUser:"Ny bruger",password:"Adgangskode",passwordUnchanged:"Adgangskode (tom = uændret)",passwordPlaceholder:"mindst 8 tegn",orgNone:"— ingen —",you:"dig",empty:"Ingen brugere.",confirmDelete:"Slet {email}? Dette kan ikke fortrydes."},Ma={title:"Organisationer",subtitle:"Enheder, som brugere tilhører",newOrg:"Ny organisation",namePlaceholder:"Acme Fleet",empty:"Ingen organisationer endnu.",colId:"ID",confirmDelete:'Slet organisationen "{name}"?'},Na={title:"PocketBase",subtitle:"Databaseforbindelse brugt af hvert endpoint",connected:"forbundet",noSuperuser:"ingen superbruger",unreachable:"utilgængelig",baseUrl:"Basis-URL",superuserEmail:"Superbrugerens e-mail",superuserPassword:"Superbrugerens adgangskode",passwordUnchanged:"uændret",passwordNotSet:"ikke angivet",saveApply:"Gem og anvend",testConnection:"Test forbindelse",persistedEnv:"gemt i .env",testOk:"Forbindelse OK — superbruger godkendt.",testReachableNoAuth:"PocketBase er tilgængelig, men servicekontoen blev ikke godkendt.",testUnreachable:"PocketBase er ikke tilgængelig på den adresse.",savedNotice:"Gemt. Serveren bruger nu denne PocketBase."},Da={title:"Webapp",subtitle:"Adressen, der tjekkes ved statuskontrol, og hvem der må kalde dette API fra en browser",reachable:"tilgængelig",unreachable:"utilgængelig",baseUrl:"Basis-URL",allowedOrigins:"Tilladte oprindelser",originsHint:"Kommasepareret, eller {star} for enhver. Native mobilapps er ikke underlagt CORS.",saveApply:"Gem og anvend",testConnection:"Test forbindelse",persistedEnv:"gemt i .env",testOk:"Webappen er tilgængelig.",testFailed:"Webappen svarede ikke på sit helbredstjek på den adresse.",savedNotice:"Gemt. Nye oprindelser gælder fra næste anmodning."},za={title:"Plugins",subtitle:"Integrationer med tredjepartstjenester",registerExternal:"Registrér ekstern",cancelRegister:"Annuller",name:"Navn",baseUrl:"Basis-URL",provider:"Udbyder",register:"Registrér",empty:"Ingen plugins endnu. Registrér et eksternt ovenfor, eller kompilér et indbygget stik.",builtin:"indbygget",enabled:"aktiveret",disabled:"deaktiveret",health:"Helbred",configure:"Konfigurer",close:"Luk",noConfig:"Dette plugin kræver ingen konfiguration.",capabilities:"Funktioner",saved:"Gemt.",checking:"Tjekker…",save:"Gem",saveEnable:"Gem og aktivér",disable:"Deaktiver",remove:"Fjern",builtinNote:"Indbyggede plugins kan deaktiveres, men ikke fjernes",confirmRemove:'Fjern det eksterne plugin "{name}"? Dets gemte konfiguration slettes.'},La={colEndpoint:"Endpoint",colDescription:"Beskrivelse",authNone:"Ingen godkendelse",authBearer:"Bearer-token",authManager:"Admin / superadmin",authSuperadmin:"Superadmin",groupPublic:"Offentlig",groupIdentity:"Identitet",groupCars:"Biler",groupService:"Serviceposter",groupParts:"Reservedele",groupAccount:"Konto",groupManagement:"Administration",groupSuperadmin:"Superadmin"},Fa={app:Aa,sections:Oa,login:Ra,status:Ia,common:Ua,users:ja,orgs:Ma,pocketbase:Na,webapp:Da,plugins:za,api:La},ko="dh-panel-lang",So="en",At={en:ba,pl:$a,da:Fa},Ba=Object.keys(At);function Ha(){try{const t=localStorage.getItem(ko);if(t&&At[t])return t}catch{}const e=(navigator.language||"en").split("-")[0];return At[e]?e:So}const Sn=V(Ha());function Va(e){if(At[e]){Sn.value=e;try{localStorage.setItem(ko,e)}catch{}}}function fi(e,t){return t.split(".").reduce((s,n)=>s==null?void 0:s[n],e)}function Ka(e,t){return t?e.replace(/\{(\w+)\}/g,(s,n)=>t[n]==null?s:String(t[n])):e}function Wa(e,t,s){let n="other";try{n=new Intl.PluralRules(s).select(t)}catch{n=t===1?"one":"other"}return e[n]??e.other??e.one}function h(e,t){const s=Sn.value;let n=fi(At[s],e);if(n==null&&(n=fi(At[So],e)),n==null)return e;if(typeof n=="object"){if((t==null?void 0:t.n)==null)return e;n=Wa(n,t.n,s)}return typeof n!="string"?e:Ka(n,t)}function pi(e,t,s){const i=h(e,{...s,[t]:"\0"}),o=i.indexOf("\0");return o===-1?{before:i,after:""}:{before:i.slice(0,o),after:i.slice(o+1)}}const rn="dh-panel-token";function Ga(){try{return localStorage.getItem(rn)||""}catch{return""}}const Ot=V(Ga()),de=V(null),bt=Qe(()=>{var e;return((e=de.value)==null?void 0:e.role)==="superadmin"}),hi=Qe(()=>{var e,t;return((e=de.value)==null?void 0:e.role)==="admin"||((t=de.value)==null?void 0:t.role)==="superadmin"});function To(e){Ot.value=e;try{e?localStorage.setItem(rn,e):localStorage.removeItem(rn)}catch{}}class qa extends Error{constructor(t,s,n){super(t),this.status=s,this.body=n}}function Za(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 se(e,{method:t="GET",body:s,auth:n=!0}={}){const i={};s!==void 0&&(i["Content-Type"]="application/json"),n&&Ot.value&&(i.Authorization=Ot.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&&Tn(),new qa(Za(l,o.status),o.status,l);return l}async function Ja(e,t){const s=await se("/api/auth/login",{method:"POST",body:{email:e,password:t},auth:!1});return To(s.token),await Eo(),de.value}async function Eo(){return de.value=await se("/api/identity"),de.value}function Tn(){To(""),de.value=null}async function Ya(){if(!Ot.value)return null;try{return await Eo()}catch{return Tn(),null}}const Xa={class:"mx-auto flex w-full max-w-sm flex-col gap-5 pt-24"},Qa={class:"dh-card p-6"},ec={class:"text-lg font-bold tracking-[-0.02em] text-strong"},tc={class:"mt-1 mb-5 text-sm text-body"},sc={class:"dh-label",for:"login-email"},nc={class:"dh-label",for:"login-password"},ic={key:0,class:"rounded-control bg-danger-soft px-3 py-2 text-xs text-danger"},oc=["disabled"],rc={class:"eyebrow text-center"},lc={__name:"LoginView",emits:["authenticated"],setup(e,{emit:t}){const s=t,n=V(""),i=V(""),o=V(""),r=V(!1),l=Qe(()=>n.value.trim()!==""&&i.value!==""&&!r.value);async function a(){if(l.value){o.value="",r.value=!0;try{const p=await Ja(n.value.trim(),i.value);s("authenticated",p)}catch(p){o.value=p.status===400||p.status===404?h("login.invalid"):p.message||h("login.failed"),i.value=""}finally{r.value=!1}}}return(p,u)=>(k(),E("div",Xa,[d("div",Qa,[d("h1",ec,b(g(h)("login.title")),1),d("p",tc,b(g(h)("login.subtitle")),1),d("form",{class:"flex flex-col gap-4",onSubmit:Yl(a,["prevent"])},[d("div",null,[d("label",sc,b(g(h)("login.email")),1),re(d("input",{id:"login-email","onUpdate:modelValue":u[0]||(u[0]=m=>n.value=m),class:"dh-input",type:"email",autocomplete:"username",autofocus:"",placeholder:"you@example.com"},null,512),[[pe,n.value]])]),d("div",null,[d("label",nc,b(g(h)("login.password")),1),re(d("input",{id:"login-password","onUpdate:modelValue":u[1]||(u[1]=m=>i.value=m),class:"dh-input",type:"password",autocomplete:"current-password",placeholder:"••••••••"},null,512),[[pe,i.value]])]),o.value?(k(),E("p",ic,b(o.value),1)):B("",!0),d("button",{class:"dh-btn w-full",type:"submit",disabled:!l.value},b(r.value?g(h)("login.submitting"):g(h)("login.submit")),9,oc)],32)]),d("p",rc,b(g(h)("login.authNote")),1)]))}},ac={class:"dh-card overflow-hidden"},cc={class:"flex items-center justify-between border-b border-subtle px-5 py-4"},uc={class:"text-base font-bold tracking-[-0.02em] text-strong"},dc={key:0,class:"dh-pill bg-danger-soft text-danger"},fc={key:0,class:"px-5 py-4 text-sm text-danger"},pc={key:1,class:"w-full text-left text-sm"},hc={class:"px-5 py-3 font-medium text-strong"},gc={class:"data px-5 py-3 text-xs text-muted"},mc={class:"data px-5 py-3 text-right text-xs text-muted"},bc={class:"px-5 py-3 text-right"},vc={key:2,class:"px-5 py-4 text-sm text-muted"},_c={__name:"StatusCard",setup(e){const t=V(null),s=V("");let n=null;async function i(){try{t.value=await se("/api/status",{auth:!1}),s.value=""}catch(l){t.value=null,s.value=l.message||h("status.unreachable")}}const o=Qe(()=>{var l,a,p;return[{key:"apiServer",label:h("status.apiServer"),h:(l=t.value)==null?void 0:l.apiServer},{key:"pocketBase",label:h("status.pocketBase"),h:(a=t.value)==null?void 0:a.pocketBase},{key:"webApp",label:h("status.webApp"),h:(p=t.value)==null?void 0:p.webApp}]});ut(()=>{i(),n=setInterval(i,1e4)}),wn(()=>clearInterval(n));const r=l=>l==="ok"?"bg-success-soft text-success":"bg-danger-soft text-danger";return(l,a)=>(k(),E("div",ac,[d("div",cc,[d("div",uc,b(g(h)("status.title")),1),s.value?(k(),E("span",dc,[a[0]||(a[0]=d("span",{class:"h-1.5 w-1.5 rounded-full bg-current"},null,-1)),Te(b(g(h)("status.unreachable")),1)])):B("",!0)]),s.value?(k(),E("div",fc,b(s.value),1)):t.value?(k(),E("table",pc,[d("tbody",null,[(k(!0),E(ee,null,ke(o.value,p=>(k(),E("tr",{key:p.key,class:"border-t border-subtle first:border-t-0"},[d("td",hc,b(p.label),1),d("td",gc,b(p.h.url||g(h)("status.thisProcess")),1),d("td",mc,b(p.h.latencyMs!=null?p.h.latencyMs+"ms":g(h)("common.empty")),1),d("td",bc,[d("span",{class:$e(["dh-pill",r(p.h.status)])},[a[1]||(a[1]=d("span",{class:"h-1.5 w-1.5 rounded-full bg-current"},null,-1)),Te(b(p.h.status),1)],2)])]))),128))])])):(k(),E("div",vc,b(g(h)("status.checking")),1))]))}},yc={class:"dh-card overflow-hidden"},wc={class:"flex items-center justify-between border-b border-subtle px-5 py-4"},xc={class:"text-base font-bold tracking-[-0.02em] text-strong"},kc={class:"mt-0.5 text-xs text-muted"},Sc={class:"flex flex-col gap-4 px-5 py-4"},Tc={class:"dh-label",for:"pb-url"},Ec={class:"grid gap-4 sm:grid-cols-2"},Cc={class:"dh-label",for:"pb-email"},Pc={class:"dh-label",for:"pb-password"},$c=["placeholder"],Ac={key:0,class:"data text-xs text-muted"},Oc={key:1,class:"rounded-control bg-info-soft px-3 py-2 text-xs text-info"},Rc={key:2,class:"rounded-control bg-danger-soft px-3 py-2 text-xs text-danger"},Ic={class:"flex items-center gap-2"},Uc=["disabled"],jc=["disabled"],Mc={class:"eyebrow"},Nc={__name:"PocketBaseCard",setup(e){const t=V(null),s=V({url:"",adminEmail:"",adminPassword:""}),n=V(null),i=V(""),o=V(""),r=V(!1);async function l(){try{t.value=await se("/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}}ut(l);async function a(){i.value="",o.value="",r.value=!0;try{n.value=await se("/api/admin/pb-config/test",{method:"POST",body:s.value}),o.value=n.value.superuser?h("pocketbase.testOk"):n.value.reachable?h("pocketbase.testReachableNoAuth"):h("pocketbase.testUnreachable")}catch(u){i.value=u.message}finally{r.value=!1}}async function p(){i.value="",o.value="",r.value=!0;try{const u=await se("/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||h("pocketbase.savedNotice")}catch(u){i.value=u.message}finally{r.value=!1}}return(u,m)=>{var y,A;return k(),E("div",yc,[d("div",wc,[d("div",null,[d("div",xc,b(g(h)("pocketbase.title")),1),d("p",kc,b(g(h)("pocketbase.subtitle")),1)]),n.value?(k(),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"])},[m[3]||(m[3]=d("span",{class:"h-1.5 w-1.5 rounded-full bg-current"},null,-1)),Te(" "+b(n.value.superuser?g(h)("pocketbase.connected"):n.value.reachable?g(h)("pocketbase.noSuperuser"):g(h)("pocketbase.unreachable")),1)],2)):B("",!0)]),d("div",Sc,[d("div",null,[d("label",Tc,b(g(h)("pocketbase.baseUrl")),1),re(d("input",{id:"pb-url","onUpdate:modelValue":m[0]||(m[0]=D=>s.value.url=D),class:"dh-input",placeholder:"http://10.2.1.10:8027"},null,512),[[pe,s.value.url]])]),d("div",Ec,[d("div",null,[d("label",Cc,b(g(h)("pocketbase.superuserEmail")),1),re(d("input",{id:"pb-email","onUpdate:modelValue":m[1]||(m[1]=D=>s.value.adminEmail=D),class:"dh-input",autocomplete:"off"},null,512),[[pe,s.value.adminEmail]])]),d("div",null,[d("label",Pc,b(g(h)("pocketbase.superuserPassword")),1),re(d("input",{id:"pb-password","onUpdate:modelValue":m[2]||(m[2]=D=>s.value.adminPassword=D),class:"dh-input",type:"password",autocomplete:"new-password",placeholder:(y=t.value)!=null&&y.adminConfigured?g(h)("pocketbase.passwordUnchanged"):g(h)("pocketbase.passwordNotSet")},null,8,$c),[[pe,s.value.adminPassword]])])]),(A=n.value)!=null&&A.detail?(k(),E("p",Ac,b(n.value.detail),1)):B("",!0),o.value?(k(),E("p",Oc,b(o.value),1)):B("",!0),i.value?(k(),E("p",Rc,b(i.value),1)):B("",!0),d("div",Ic,[d("button",{class:"dh-btn",disabled:r.value,onClick:p},b(g(h)("pocketbase.saveApply")),9,Uc),d("button",{class:"dh-btn-ghost",disabled:r.value,onClick:a},b(g(h)("pocketbase.testConnection")),9,jc),m[4]||(m[4]=d("span",{class:"flex-1"},null,-1)),d("span",Mc,b(g(h)("pocketbase.persistedEnv")),1)])])])}}},Dc={class:"dh-card overflow-hidden"},zc={class:"flex items-center justify-between border-b border-subtle px-5 py-4"},Lc={class:"text-base font-bold tracking-[-0.02em] text-strong"},Fc={class:"mt-0.5 text-xs text-muted"},Bc={class:"flex flex-col gap-4 px-5 py-4"},Hc={class:"dh-label",for:"web-url"},Vc={class:"dh-label",for:"web-origins"},Kc={class:"mt-1 text-xs text-muted"},Wc={key:0,class:"data text-xs text-muted"},Gc={key:1,class:"rounded-control bg-info-soft px-3 py-2 text-xs text-info"},qc={key:2,class:"rounded-control bg-danger-soft px-3 py-2 text-xs text-danger"},Zc={class:"flex items-center gap-2"},Jc=["disabled"],Yc=["disabled"],Xc={class:"eyebrow"},Qc={__name:"WebAppCard",setup(e){const t=V(null),s=V({url:"",origins:""}),n=V(null),i=V(""),o=V(""),r=V(!1),l=y=>y.split(",").map(A=>A.trim()).filter(Boolean);function a(y){t.value=y,s.value={url:y.url,origins:(y.allowOrigins||[]).join(", ")},n.value=y.probe}async function p(){try{a(await se("/api/admin/webapp-config"))}catch(y){i.value=y.message}}ut(p);async function u(){i.value="",o.value="",r.value=!0;try{n.value=await se("/api/admin/webapp-config/test",{method:"POST",body:{url:s.value.url}}),o.value=n.value.status==="ok"?h("webapp.testOk"):h("webapp.testFailed")}catch(y){i.value=y.message}finally{r.value=!1}}async function m(){i.value="",o.value="",r.value=!0;try{const y=await se("/api/admin/webapp-config",{method:"PUT",body:{url:s.value.url,allowOrigins:l(s.value.origins)}});a(y.config),o.value=y.warning||h("webapp.savedNotice")}catch(y){i.value=y.message}finally{r.value=!1}}return(y,A)=>{var D;return k(),E("div",Dc,[d("div",zc,[d("div",null,[d("div",Lc,b(g(h)("webapp.title")),1),d("p",Fc,b(g(h)("webapp.subtitle")),1)]),n.value?(k(),E("span",{key:0,class:$e(["dh-pill",n.value.status==="ok"?"bg-success-soft text-success":"bg-danger-soft text-danger"])},[A[2]||(A[2]=d("span",{class:"h-1.5 w-1.5 rounded-full bg-current"},null,-1)),Te(" "+b(n.value.status==="ok"?g(h)("webapp.reachable"):g(h)("webapp.unreachable")),1)],2)):B("",!0)]),d("div",Bc,[d("div",null,[d("label",Hc,b(g(h)("webapp.baseUrl")),1),re(d("input",{id:"web-url","onUpdate:modelValue":A[0]||(A[0]=C=>s.value.url=C),class:"dh-input",placeholder:"http://localhost:5173"},null,512),[[pe,s.value.url]])]),d("div",null,[d("label",Vc,b(g(h)("webapp.allowedOrigins")),1),re(d("input",{id:"web-origins","onUpdate:modelValue":A[1]||(A[1]=C=>s.value.origins=C),class:"dh-input",placeholder:"http://localhost:5173, https://app.example.com"},null,512),[[pe,s.value.origins]]),d("p",Kc,[Te(b(g(pi)("webapp.originsHint","star").before),1),A[3]||(A[3]=d("span",{class:"data"},"*",-1)),Te(b(g(pi)("webapp.originsHint","star").after),1)])]),(D=n.value)!=null&&D.error?(k(),E("p",Wc,b(n.value.error),1)):B("",!0),o.value?(k(),E("p",Gc,b(o.value),1)):B("",!0),i.value?(k(),E("p",qc,b(i.value),1)):B("",!0),d("div",Zc,[d("button",{class:"dh-btn",disabled:r.value,onClick:m},b(g(h)("webapp.saveApply")),9,Jc),d("button",{class:"dh-btn-ghost",disabled:r.value,onClick:u},b(g(h)("webapp.testConnection")),9,Yc),A[4]||(A[4]=d("span",{class:"flex-1"},null,-1)),d("span",Xc,b(g(h)("webapp.persistedEnv")),1)])])])}}},eu={class:"dh-card overflow-hidden"},tu={class:"flex items-center justify-between border-b border-subtle px-5 py-4"},su={class:"text-base font-bold tracking-[-0.02em] text-strong"},nu={class:"mt-0.5 text-xs text-muted"},iu={key:0,class:"border-b border-subtle bg-sunken px-5 py-4"},ou={class:"grid gap-3 sm:grid-cols-3"},ru={class:"dh-label"},lu={class:"dh-label"},au={class:"dh-label"},cu=["disabled"],uu={key:1,class:"border-b border-subtle px-5 py-3 text-xs text-danger"},du={key:2,class:"px-5 py-6 text-center text-sm text-muted"},fu={class:"flex items-center gap-3 px-5 py-3"},pu=["onClick"],hu={class:"font-semibold text-strong"},gu={class:"dh-pill bg-sunken text-muted"},mu={key:0,class:"text-xs text-muted"},bu=["disabled","onClick"],vu=["disabled","onClick"],_u={key:0,class:"bg-sunken px-5 py-4"},yu={key:0,class:"data mb-3 text-xs text-muted"},wu={key:1,class:"grid gap-3 sm:grid-cols-2"},xu={class:"dh-label"},ku={key:0,class:"text-danger"},Su=["onUpdate:modelValue"],Tu=["value"],Eu=["onUpdate:modelValue","type","placeholder"],Cu={key:2,class:"mt-1 text-xs text-muted"},Pu={key:2,class:"text-xs text-muted"},$u={key:3,class:"mt-4"},Au={class:"eyebrow mb-1.5"},Ou={class:"data flex flex-col gap-1 text-xs text-muted"},Ru={class:"text-strong"},Iu={key:0},Uu={key:1},ju={key:4,class:"data mt-3 text-xs text-body"},Mu={class:"mt-4 flex items-center gap-2"},Nu=["disabled","onClick"],Du=["disabled","onClick"],zu=["disabled","onClick"],Lu={key:5,class:"eyebrow mt-2"},Fu={__name:"PluginsCard",setup(e){const t=V([]),s=V(""),n=V(!1),i=V(null),o=Jt({}),r=Jt({}),l=V(!1),a=V({name:"",baseURL:"",provider:""});async function p(){try{const P=await se("/api/admin/plugins");t.value=P.plugins||[],s.value=""}catch(P){s.value=P.message}}ut(p);function u(P){var $;if(i.value===P.name){i.value=null;return}const T={};for(const j of P.configFields||[])T[j.key]=(($=P.config)==null?void 0:$[j.key])??"";o[P.name]=T,i.value=P.name}async function m(P,T){n.value=!0,r[P.name]="";try{const $=await se(`/api/admin/plugins/${encodeURIComponent(P.name)}`,{method:"PUT",body:{enabled:T,config:o[P.name]??{}}});r[P.name]=$.warning||h("plugins.saved"),await p()}catch($){r[P.name]=$.message}finally{n.value=!1}}async function y(P){n.value=!0,r[P.name]=h("plugins.checking");try{const T=await se(`/api/admin/plugins/${encodeURIComponent(P.name)}/health`,{method:"POST"});r[P.name]=`${T.health.status}${T.health.detail?" — "+T.health.detail:""}`,await p()}catch(T){r[P.name]=T.message}finally{n.value=!1}}async function A(P){if(confirm(h("plugins.confirmRemove",{name:P.name}))){n.value=!0;try{await se(`/api/admin/plugins/${encodeURIComponent(P.name)}`,{method:"DELETE"}),i.value===P.name&&(i.value=null),await p()}catch(T){r[P.name]=T.message}finally{n.value=!1}}}async function D(){n.value=!0,s.value="";try{await se("/api/admin/plugins",{method:"POST",body:a.value}),a.value={name:"",baseURL:"",provider:""},l.value=!1,await p()}catch(P){s.value=P.message}finally{n.value=!1}}const C=P=>P==="ok"?"bg-success-soft text-success":P==="degraded"?"bg-warning-soft text-warning":"bg-danger-soft text-danger";return(P,T)=>(k(),E("div",eu,[d("div",tu,[d("div",null,[d("div",su,b(g(h)("plugins.title")),1),d("p",nu,b(g(h)("plugins.subtitle")),1)]),d("button",{class:"dh-btn-ghost",onClick:T[0]||(T[0]=$=>l.value=!l.value)},b(l.value?g(h)("plugins.cancelRegister"):g(h)("plugins.registerExternal")),1)]),l.value?(k(),E("div",iu,[d("div",ou,[d("div",null,[d("label",ru,b(g(h)("plugins.name")),1),re(d("input",{"onUpdate:modelValue":T[1]||(T[1]=$=>a.value.name=$),class:"dh-input",placeholder:"acme-parts"},null,512),[[pe,a.value.name]])]),d("div",null,[d("label",lu,b(g(h)("plugins.baseUrl")),1),re(d("input",{"onUpdate:modelValue":T[2]||(T[2]=$=>a.value.baseURL=$),class:"dh-input",placeholder:"http://127.0.0.1:9100"},null,512),[[pe,a.value.baseURL]])]),d("div",null,[d("label",au,b(g(h)("plugins.provider")),1),re(d("input",{"onUpdate:modelValue":T[3]||(T[3]=$=>a.value.provider=$),class:"dh-input",placeholder:"ACME Corp"},null,512),[[pe,a.value.provider]])])]),d("button",{class:"dh-btn mt-3",disabled:n.value||!a.value.name||!a.value.baseURL,onClick:D},b(g(h)("plugins.register")),9,cu)])):B("",!0),s.value?(k(),E("p",uu,b(s.value),1)):B("",!0),t.value.length?B("",!0):(k(),E("p",du,b(g(h)("plugins.empty")),1)),(k(!0),E(ee,null,ke(t.value,$=>(k(),E("div",{key:$.name,class:"border-t border-subtle first:border-t-0"},[d("div",fu,[d("button",{class:"flex flex-1 items-center gap-3 text-left",onClick:j=>u($)},[d("span",hu,b($.name),1),d("span",gu,b($.kind||g(h)("plugins.builtin")),1),$.provider?(k(),E("span",mu,b($.provider),1)):B("",!0),$.health?(k(),E("span",{key:1,class:$e(["dh-pill",C($.health.status)])},[T[4]||(T[4]=d("span",{class:"h-1.5 w-1.5 rounded-full bg-current"},null,-1)),Te(b($.health.status),1)],2)):B("",!0)],8,pu),d("span",{class:$e(["dh-pill",$.enabled?"bg-success-soft text-success":"bg-sunken text-muted"])},b($.enabled?g(h)("plugins.enabled"):g(h)("plugins.disabled")),3),d("button",{class:"dh-btn-ghost",disabled:n.value,onClick:j=>y($)},b(g(h)("plugins.health")),9,bu),d("button",{class:"dh-btn-ghost",disabled:n.value,onClick:j=>u($)},b(i.value===$.name?g(h)("plugins.close"):g(h)("plugins.configure")),9,vu)]),i.value===$.name?(k(),E("div",_u,[$.baseURL?(k(),E("div",yu,b($.baseURL),1)):B("",!0),($.configFields||[]).length?(k(),E("div",wu,[(k(!0),E(ee,null,ke($.configFields,j=>(k(),E("div",{key:j.key},[d("label",xu,[Te(b(j.label||j.key),1),j.required?(k(),E("span",ku," *")):B("",!0)]),j.type==="select"?re((k(),E("select",{key:0,"onUpdate:modelValue":M=>o[$.name][j.key]=M,class:"dh-select"},[(k(!0),E(ee,null,ke(j.options||[],M=>(k(),E("option",{key:M.value,value:M.value},b(M.label||M.value),9,Tu))),128))],8,Su)),[[xs,o[$.name][j.key]]]):re((k(),E("input",{key:1,"onUpdate:modelValue":M=>o[$.name][j.key]=M,class:"dh-input",type:j.type==="password"?"password":j.type==="number"?"number":"text",placeholder:j.default||"",autocomplete:"off"},null,8,Eu)),[[Gl,o[$.name][j.key]]]),j.help?(k(),E("p",Cu,b(j.help),1)):B("",!0)]))),128))])):(k(),E("p",Pu,b(g(h)("plugins.noConfig")),1)),($.capabilities||[]).length?(k(),E("div",$u,[d("div",Au,b(g(h)("plugins.capabilities")),1),d("ul",Ou,[(k(!0),E(ee,null,ke($.capabilities,j=>(k(),E("li",{key:j.id},[d("span",Ru,b(j.id),1),j.method||j.endpoint?(k(),E("span",Iu," — "+b(j.method)+" "+b(j.endpoint),1)):B("",!0),j.description?(k(),E("span",Uu," · "+b(j.description),1)):B("",!0)]))),128))])])):B("",!0),r[$.name]?(k(),E("p",ju,b(r[$.name]),1)):B("",!0),d("div",Mu,[d("button",{class:"dh-btn",disabled:n.value,onClick:j=>m($,!0)},b($.enabled?g(h)("plugins.save"):g(h)("plugins.saveEnable")),9,Nu),$.enabled?(k(),E("button",{key:0,class:"dh-btn-ghost",disabled:n.value,onClick:j=>m($,!1)},b(g(h)("plugins.disable")),9,Du)):B("",!0),T[5]||(T[5]=d("span",{class:"flex-1"},null,-1)),$.kind==="external"?(k(),E("button",{key:1,class:"dh-btn-danger",disabled:n.value,onClick:j=>A($)},b(g(h)("plugins.remove")),9,zu)):B("",!0)]),$.kind!=="external"?(k(),E("p",Lu,b(g(h)("plugins.builtinNote")),1)):B("",!0)])):B("",!0)]))),128))]))}},Bu={class:"dh-card overflow-hidden"},Hu={class:"flex items-center justify-between border-b border-subtle px-5 py-4"},Vu={class:"text-base font-bold tracking-[-0.02em] text-strong"},Ku={class:"mt-0.5 text-xs text-muted"},Wu={key:0,class:"border-b border-subtle px-5 py-3 text-xs text-danger"},Gu={key:1,class:"border-b border-subtle bg-sunken px-5 py-4"},qu={class:"grid gap-3 sm:grid-cols-2"},Zu={class:"dh-label"},Ju={class:"dh-label"},Yu={class:"dh-label"},Xu=["placeholder"],Qu={class:"dh-label"},ed=["value"],td={key:0},sd={class:"dh-label"},nd={value:""},id=["value"],od={class:"mt-3 flex items-center gap-2"},rd=["disabled"],ld=["disabled"],ad={key:2,class:"px-5 py-6 text-center text-sm text-muted"},cd={key:3,class:"w-full text-left text-sm"},ud={class:"[&>th]:eyebrow [&>th]:px-5 [&>th]:py-2.5 [&>th]:font-medium"},dd={class:"data px-5 py-2.5 text-xs text-strong"},fd={key:0,class:"eyebrow ml-1"},pd={class:"px-5 py-2.5 text-body"},hd={class:"px-5 py-2.5 text-body"},gd={class:"px-5 py-2.5"},md={class:"px-5 py-2.5 text-right whitespace-nowrap"},bd=["onClick"],vd=["disabled","onClick"],_d={__name:"UsersCard",setup(e){const t=V([]),s=V([]),n=V(""),i=V(!1),o=V(null),r=V({}),l=Qe(()=>bt.value?["user","admin","superadmin"]:["user","admin"]);async function a(){try{const[C,P]=await Promise.all([se("/api/users"),se("/api/orgs")]);t.value=C.users||[],s.value=P.organizations||[],n.value=""}catch(C){n.value=C.message}}ut(a);function p(){var C;o.value="new",r.value={email:"",name:"",password:"",role:"user",organization:bt.value?"":((C=de.value)==null?void 0:C.organization)||""}}function u(C){o.value=C.id,r.value={email:C.email,name:C.name||"",password:"",role:C.role,organization:C.organization||""}}function m(){o.value=null,n.value=""}async function y(){i.value=!0,n.value="";try{if(o.value==="new")await se("/api/users",{method:"POST",body:r.value});else{const C={...r.value};C.password||delete C.password,await se(`/api/users/${o.value}`,{method:"PATCH",body:C})}o.value=null,await a()}catch(C){n.value=C.message}finally{i.value=!1}}async function A(C){if(confirm(h("users.confirmDelete",{email:C.email}))){i.value=!0,n.value="";try{await se(`/api/users/${C.id}`,{method:"DELETE"}),await a()}catch(P){n.value=P.message}finally{i.value=!1}}}const D=C=>C==="superadmin"?"bg-info-soft text-info":C==="admin"?"bg-warning-soft text-warning":"bg-sunken text-muted";return(C,P)=>(k(),E("div",Bu,[d("div",Hu,[d("div",null,[d("div",Vu,b(g(h)("users.title")),1),d("p",Ku,b(g(bt)?g(h)("users.allOrgs"):g(h)("users.yourOrg")),1)]),d("button",{class:"dh-btn",onClick:p},b(g(h)("users.newUser")),1)]),n.value?(k(),E("p",Wu,b(n.value),1)):B("",!0),o.value?(k(),E("div",Gu,[d("div",qu,[d("div",null,[d("label",Zu,b(g(h)("common.email")),1),re(d("input",{"onUpdate:modelValue":P[0]||(P[0]=T=>r.value.email=T),class:"dh-input",type:"email",autocomplete:"off"},null,512),[[pe,r.value.email]])]),d("div",null,[d("label",Ju,b(g(h)("common.name")),1),re(d("input",{"onUpdate:modelValue":P[1]||(P[1]=T=>r.value.name=T),class:"dh-input",autocomplete:"off"},null,512),[[pe,r.value.name]])]),d("div",null,[d("label",Yu,b(o.value==="new"?g(h)("users.password"):g(h)("users.passwordUnchanged")),1),re(d("input",{"onUpdate:modelValue":P[2]||(P[2]=T=>r.value.password=T),class:"dh-input",type:"password",autocomplete:"new-password",placeholder:g(h)("users.passwordPlaceholder")},null,8,Xu),[[pe,r.value.password]])]),d("div",null,[d("label",Qu,b(g(h)("common.role")),1),re(d("select",{"onUpdate:modelValue":P[3]||(P[3]=T=>r.value.role=T),class:"dh-select"},[(k(!0),E(ee,null,ke(l.value,T=>(k(),E("option",{key:T,value:T},b(T),9,ed))),128))],512),[[xs,r.value.role]])]),g(bt)?(k(),E("div",td,[d("label",sd,b(g(h)("common.organization")),1),re(d("select",{"onUpdate:modelValue":P[4]||(P[4]=T=>r.value.organization=T),class:"dh-select"},[d("option",nd,b(g(h)("users.orgNone")),1),(k(!0),E(ee,null,ke(s.value,T=>(k(),E("option",{key:T.id,value:T.id},b(T.name),9,id))),128))],512),[[xs,r.value.organization]])])):B("",!0)]),d("div",od,[d("button",{class:"dh-btn",disabled:i.value,onClick:y},b(o.value==="new"?g(h)("common.create"):g(h)("common.save")),9,rd),d("button",{class:"dh-btn-ghost",disabled:i.value,onClick:m},b(g(h)("common.cancel")),9,ld)])])):B("",!0),t.value.length?(k(),E("table",cd,[d("thead",null,[d("tr",ud,[d("th",null,b(g(h)("common.email")),1),d("th",null,b(g(h)("common.name")),1),d("th",null,b(g(h)("common.organization")),1),d("th",null,b(g(h)("common.role")),1),P[5]||(P[5]=d("th",null,null,-1))])]),d("tbody",null,[(k(!0),E(ee,null,ke(t.value,T=>{var $,j;return k(),E("tr",{key:T.id,class:"border-t border-subtle transition-colors hover:bg-sunken"},[d("td",dd,[Te(b(T.email)+" ",1),T.id===(($=g(de))==null?void 0:$.id)?(k(),E("span",fd,b(g(h)("users.you")),1)):B("",!0)]),d("td",pd,b(T.name||g(h)("common.empty")),1),d("td",hd,b(T.organizationName||g(h)("common.empty")),1),d("td",gd,[d("span",{class:$e(["dh-pill",D(T.role)])},b(T.role),3)]),d("td",md,[d("button",{class:"dh-btn-ghost",onClick:M=>u(T)},b(g(h)("common.edit")),9,bd),T.id!==((j=g(de))==null?void 0:j.id)?(k(),E("button",{key:0,class:"dh-btn-danger ml-1.5",disabled:i.value,onClick:M=>A(T)},b(g(h)("common.delete")),9,vd)):B("",!0)])])}),128))])])):(k(),E("p",ad,b(g(h)("users.empty")),1))]))}},yd={class:"dh-card overflow-hidden"},wd={class:"flex items-center justify-between border-b border-subtle px-5 py-4"},xd={class:"text-base font-bold tracking-[-0.02em] text-strong"},kd={class:"mt-0.5 text-xs text-muted"},Sd={key:0,class:"border-b border-subtle px-5 py-3 text-xs text-danger"},Td={key:1,class:"border-b border-subtle bg-sunken px-5 py-4"},Ed={class:"dh-label"},Cd=["placeholder"],Pd={class:"mt-3 flex items-center gap-2"},$d=["disabled"],Ad=["disabled"],Od={key:2,class:"px-5 py-6 text-center text-sm text-muted"},Rd={key:3,class:"w-full text-left text-sm"},Id={class:"[&>th]:eyebrow [&>th]:px-5 [&>th]:py-2.5 [&>th]:font-medium"},Ud={class:"px-5 py-2.5 font-medium text-strong"},jd={class:"data px-5 py-2.5 text-xs text-muted"},Md={class:"px-5 py-2.5 text-right whitespace-nowrap"},Nd=["onClick"],Dd=["disabled","onClick"],zd={__name:"OrgsCard",setup(e){const t=V([]),s=V(""),n=V(!1),i=V(null),o=V("");async function r(){try{const y=await se("/api/orgs");t.value=y.organizations||[],s.value=""}catch(y){s.value=y.message}}ut(r);function l(){i.value="new",o.value=""}function a(y){i.value=y.id,o.value=y.name}function p(){i.value=null,s.value=""}async function u(){n.value=!0,s.value="";try{i.value==="new"?await se("/api/orgs",{method:"POST",body:{name:o.value}}):await se(`/api/orgs/${i.value}`,{method:"PATCH",body:{name:o.value}}),i.value=null,await r()}catch(y){s.value=y.message}finally{n.value=!1}}async function m(y){if(confirm(h("orgs.confirmDelete",{name:y.name}))){n.value=!0,s.value="";try{await se(`/api/orgs/${y.id}`,{method:"DELETE"}),await r()}catch(A){s.value=A.message}finally{n.value=!1}}}return(y,A)=>(k(),E("div",yd,[d("div",wd,[d("div",null,[d("div",xd,b(g(h)("orgs.title")),1),d("p",kd,b(g(h)("orgs.subtitle")),1)]),g(bt)?(k(),E("button",{key:0,class:"dh-btn",onClick:l},b(g(h)("orgs.newOrg")),1)):B("",!0)]),s.value?(k(),E("p",Sd,b(s.value),1)):B("",!0),i.value?(k(),E("div",Td,[d("label",Ed,b(g(h)("common.name")),1),re(d("input",{"onUpdate:modelValue":A[0]||(A[0]=D=>o.value=D),class:"dh-input",placeholder:g(h)("orgs.namePlaceholder"),onKeyup:Ql(u,["enter"])},null,40,Cd),[[pe,o.value]]),d("div",Pd,[d("button",{class:"dh-btn",disabled:n.value||!o.value.trim(),onClick:u},b(i.value==="new"?g(h)("common.create"):g(h)("common.save")),9,$d),d("button",{class:"dh-btn-ghost",disabled:n.value,onClick:p},b(g(h)("common.cancel")),9,Ad)])])):B("",!0),t.value.length?(k(),E("table",Rd,[d("thead",null,[d("tr",Id,[d("th",null,b(g(h)("common.name")),1),d("th",null,b(g(h)("orgs.colId")),1),A[1]||(A[1]=d("th",null,null,-1))])]),d("tbody",null,[(k(!0),E(ee,null,ke(t.value,D=>(k(),E("tr",{key:D.id,class:"border-t border-subtle transition-colors hover:bg-sunken"},[d("td",Ud,b(D.name),1),d("td",jd,b(D.id),1),d("td",Md,[g(bt)?(k(),E(ee,{key:0},[d("button",{class:"dh-btn-ghost",onClick:C=>a(D)},b(g(h)("common.rename")),9,Nd),d("button",{class:"dh-btn-danger ml-1.5",disabled:n.value,onClick:C=>m(D)},b(g(h)("common.delete")),9,Dd)],64)):B("",!0)])]))),128))])])):(k(),E("p",Od,b(g(h)("orgs.empty")),1))]))}},Ld={class:"dh-card overflow-hidden"},Fd={class:"flex items-center justify-between border-b border-subtle px-5 py-4"},Bd={class:"text-base font-bold tracking-[-0.02em] text-strong"},Hd={class:"eyebrow"},Vd={class:"w-full text-left text-sm"},Kd={class:"[&>th]:eyebrow [&>th]:px-5 [&>th]:py-2.5 [&>th]:font-medium"},Wd={class:"data border-t border-subtle px-5 py-2.5 text-xs whitespace-nowrap"},Gd={class:"text-strong"},qd={class:"border-t border-subtle px-5 py-2.5 text-body"},nt={__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)=>(k(),E("div",Ld,[d("div",Fd,[d("div",Bd,b(e.title),1),d("span",Hd,b(e.auth),1)]),d("table",Vd,[d("thead",null,[d("tr",Kd,[d("th",null,b(g(h)("api.colEndpoint")),1),d("th",null,b(g(h)("api.colDescription")),1)])]),d("tbody",null,[(k(!0),E(ee,null,ke(e.endpoints,i=>(k(),E("tr",{key:i.method+i.path,class:"transition-colors hover:bg-sunken"},[d("td",Wd,[d("span",{class:$e(["font-semibold",t[i.method]])},b(i.method),3),d("span",Gd,b(i.path),1)]),d("td",qd,b(i.desc),1)]))),128))])])]))}},Zd={class:"mx-auto flex max-w-4xl flex-col gap-6 px-6 pt-12 pb-16"},Jd={class:"flex items-center gap-3"},Yd={class:"inline-flex items-center gap-2.5 select-none"},Xd={class:"h-8 w-8 shrink-0",viewBox:"0 0 48 48",fill:"none","aria-hidden":"true"},Qd={transform:"translate(7 0) skewX(-13)"},ef=["fill"],tf=["fill"],sf=["fill"],nf={class:"eyebrow mt-1.5"},of={key:0,class:"data hidden text-xs text-muted sm:inline"},rf={key:0},lf={key:1,class:"dh-pill bg-info-soft text-info"},af=["value","aria-label"],cf=["value"],uf=["title"],df={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"},ff={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"},pf={key:0,class:"eyebrow py-16 text-center"},hf={class:"flex flex-wrap gap-1.5"},gf=["onClick"],mf={key:7,class:"eyebrow text-center"},bf={class:"eyebrow text-center"},vf={__name:"App",setup(e){const t=V(!0),s=V("overview");ut(async()=>{await Ya(),t.value=!1});const n=Qe(()=>{const C=[{id:"overview",label:h("sections.overview")}];return hi.value&&C.push({id:"users",label:h("sections.users")},{id:"orgs",label:h("sections.orgs")}),bt.value&&C.push({id:"pocketbase",label:h("sections.pocketbase")},{id:"webapp",label:h("sections.webapp")},{id:"plugins",label:h("sections.plugins")}),C.push({id:"api",label:h("sections.api")}),C}),i=Qe(()=>Ba.map(C=>{let P=C;try{P=new Intl.DisplayNames([C],{type:"language"}).of(C)||C}catch{}return{code:C,label:P.charAt(0).toUpperCase()+P.slice(1)}}));function o(){Tn(),s.value="overview"}const r=Qe(()=>Et.value==="dark"?["#60a5fa","#93c5fd","#ffffff"]:["var(--brand-700)","var(--brand-500)","var(--brand-400)"]),l=[{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"}],a=[{method:"GET",path:"/api/auth/me",desc:"Identity of the bearer token"},{method:"GET",path:"/api/identity",desc:"Identity incl. role + organization"}],p=[{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)"}],u=[{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"}],m=[{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"}],y=[{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"}],A=[{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)"}],D=[{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(C,P)=>(k(),E("div",Zd,[d("div",Jd,[d("span",Yd,[(k(),E("svg",Xd,[d("g",Qd,[d("rect",{x:"9",y:"16",width:"6",height:"16",rx:"3",fill:r.value[0]},null,8,ef),d("rect",{x:"19",y:"12",width:"6",height:"24",rx:"3",fill:r.value[1]},null,8,tf),d("rect",{x:"29",y:"8",width:"6",height:"32",rx:"3",fill:r.value[2]},null,8,sf)])])),P[2]||(P[2]=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))]),d("span",nf,b(g(h)("app.apiServer")),1),P[5]||(P[5]=d("div",{class:"flex-1"},null,-1)),g(de)?(k(),E("span",of,[Te(b(g(de).email),1),g(de).organizationName?(k(),E("span",rf," · "+b(g(de).organizationName),1)):B("",!0)])):B("",!0),g(de)?(k(),E("span",lf,b(g(de).role),1)):B("",!0),d("select",{class:"dh-select !w-auto !py-1 !text-xs",value:g(Sn),"aria-label":g(h)("sections.overview"),onChange:P[0]||(P[0]=T=>g(Va)(T.target.value))},[(k(!0),E(ee,null,ke(i.value,T=>(k(),E("option",{key:T.code,value:T.code},b(T.label),9,cf))),128))],40,af),d("button",{class:"dh-btn-ghost",title:g(Et)==="dark"?g(h)("app.switchToLight"):g(h)("app.switchToDark"),onClick:P[1]||(P[1]=(...T)=>g(di)&&g(di)(...T))},[g(Et)==="dark"?(k(),E("svg",df,[...P[3]||(P[3]=[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)])])):(k(),E("svg",ff,[...P[4]||(P[4]=[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)])])),Te(" "+b(g(h)("app.theme")),1)],8,uf),g(Ot)?(k(),E("button",{key:2,class:"dh-btn-ghost",onClick:o},b(g(h)("app.signOut")),1)):B("",!0)]),t.value?(k(),E("p",pf,b(g(h)("app.loading")),1)):g(Ot)?(k(),E(ee,{key:2},[d("nav",hf,[(k(!0),E(ee,null,ke(n.value,T=>(k(),E("button",{key:T.id,class:$e(["dh-btn-ghost",s.value===T.id?"border-accent text-brandtext":""]),onClick:$=>s.value=T.id},b(T.label),11,gf))),128))]),s.value==="overview"?(k(),it(_c,{key:0})):s.value==="users"?(k(),it(_d,{key:1})):s.value==="orgs"?(k(),it(zd,{key:2})):s.value==="pocketbase"?(k(),it(Nc,{key:3})):s.value==="webapp"?(k(),it(Qc,{key:4})):s.value==="plugins"?(k(),it(Fu,{key:5})):s.value==="api"?(k(),E(ee,{key:6},[ce(nt,{title:g(h)("api.groupPublic"),auth:g(h)("api.authNone"),endpoints:l},null,8,["title","auth"]),ce(nt,{title:g(h)("api.groupIdentity"),auth:g(h)("api.authBearer"),endpoints:a},null,8,["title","auth"]),ce(nt,{title:g(h)("api.groupCars"),auth:g(h)("api.authBearer"),endpoints:p},null,8,["title","auth"]),ce(nt,{title:g(h)("api.groupService"),auth:g(h)("api.authBearer"),endpoints:u},null,8,["title","auth"]),ce(nt,{title:g(h)("api.groupParts"),auth:g(h)("api.authBearer"),endpoints:m},null,8,["title","auth"]),ce(nt,{title:g(h)("api.groupAccount"),auth:g(h)("api.authBearer"),endpoints:y},null,8,["title","auth"]),ce(nt,{title:g(h)("api.groupManagement"),auth:g(h)("api.authManager"),endpoints:A},null,8,["title","auth"]),ce(nt,{title:g(h)("api.groupSuperadmin"),auth:g(h)("api.authSuperadmin"),endpoints:D},null,8,["title","auth"])],64)):B("",!0),!g(hi)&&s.value==="overview"?(k(),E("p",mf,b(g(h)("app.standardUserNote")),1)):B("",!0)],64)):(k(),it(lc,{key:1})),d("p",bf,b(g(h)("app.footer")),1)]))}};sa(vf).mount("#app"); diff --git a/API Server/internal/api/dist/assets/index-i1JZk1ZM.css b/API Server/internal/api/dist/assets/index-D3MeNcl7.css similarity index 84% rename from API Server/internal/api/dist/assets/index-i1JZk1ZM.css rename to API Server/internal/api/dist/assets/index-D3MeNcl7.css index 7c9044d..f540d3d 100644 --- a/API Server/internal/api/dist/assets/index-i1JZk1ZM.css +++ b/API Server/internal/api/dist/assets/index-D3MeNcl7.css @@ -1 +1 @@ -/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial}}}@layer theme{:root,:host{--font-sans:var(--font-sans);--font-mono:var(--font-mono);--spacing:.25rem;--container-sm:24rem;--container-4xl:56rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--shadow-xs:var(--shadow-xs);--shadow-sm:var(--shadow-sm);--shadow-md:0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--radius-control:12px;--radius-card:18px;--radius-pill:999px}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.ml-1{margin-left:var(--spacing)}.ml-1\.5{margin-left:calc(var(--spacing) * 1.5)}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-flex{display:inline-flex}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-4{height:calc(var(--spacing) * 4)}.h-8{height:calc(var(--spacing) * 8)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-4{width:calc(var(--spacing) * 4)}.w-8{width:calc(var(--spacing) * 8)}.w-full{width:100%}.max-w-4xl{max-width:var(--container-4xl)}.max-w-sm{max-width:var(--container-sm)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.overflow-hidden{overflow:hidden}.rounded-control{border-radius:12px}.rounded-full{border-radius:3.40282e38px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-accent{border-color:var(--accent)}.border-subtle{border-color:var(--border-subtle)}.bg-current{background-color:currentColor}.bg-danger-soft{background-color:var(--danger-100)}.bg-info-soft{background-color:var(--info-100)}.bg-success-soft{background-color:var(--success-100)}.bg-sunken{background-color:var(--surface-sunken)}.bg-warning-soft{background-color:var(--warning-100)}.p-6{padding:calc(var(--spacing) * 6)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-16{padding-block:calc(var(--spacing) * 16)}.pt-12{padding-top:calc(var(--spacing) * 12)}.pt-24{padding-top:calc(var(--spacing) * 24)}.pb-16{padding-bottom:calc(var(--spacing) * 16)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-none{--tw-leading:1;line-height:1}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[-0\.02em\]{--tw-tracking:-.02em;letter-spacing:-.02em}.tracking-\[-0\.03em\]{--tw-tracking:-.03em;letter-spacing:-.03em}.whitespace-nowrap{white-space:nowrap}.text-body{color:var(--text-body)}.text-brandtext{color:var(--text-brand)}.text-danger{color:var(--danger-600)}.text-info{color:var(--info-600)}.text-muted{color:var(--text-muted)}.text-strong{color:var(--text-strong)}.text-success{color:var(--success-600)}.text-warning{color:var(--warning-600)}.italic{font-style:italic}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.select-none{-webkit-user-select:none;user-select:none}.first\:border-t-0:first-child{border-top-style:var(--tw-border-style);border-top-width:0}@media(hover:hover){.hover\:bg-sunken:hover{background-color:var(--surface-sunken)}}@media(min-width:40rem){.sm\:inline{display:inline}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}.\[\&\>th\]\:px-5>th{padding-inline:calc(var(--spacing) * 5)}.\[\&\>th\]\:py-2\.5>th{padding-block:calc(var(--spacing) * 2.5)}.\[\&\>th\]\:font-medium>th{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}}:root{color-scheme:light;--brand-900:#0b1730;--brand-800:#0f1e3d;--brand-700:#1e40af;--brand-600:#2563eb;--brand-500:#3b82f6;--brand-400:#60a5fa;--brand-300:#93c5fd;--brand-200:#c7dbfb;--brand-100:#e8f0fd;--ink-900:#0f1e3d;--ink-700:#28374f;--ink-600:#3e4e68;--ink-500:#5c6b85;--ink-400:#7a8aa6;--ink-300:#b4bece;--ink-200:#d6deea;--ink-100:#e4e9f2;--ink-50:#eef2f8;--ink-25:#f7f9fc;--white:#fff;--success-600:#1f8a5b;--success-100:#e1f3ea;--warning-600:#d9822b;--warning-100:#fbeddd;--danger-600:#dc2a45;--danger-100:#fbe3e7;--info-600:#2563eb;--info-100:#e8f0fd;--surface-page:var(--ink-25);--surface-card:var(--white);--surface-sunken:var(--ink-50);--border-subtle:var(--ink-100);--border-default:var(--ink-200);--border-strong:var(--ink-300);--text-strong:var(--ink-900);--text-body:var(--ink-600);--text-muted:var(--ink-400);--text-brand:var(--brand-700);--accent:var(--brand-600);--accent-hover:var(--brand-700);--focus-ring:var(--brand-400);--shadow-xs:0 1px 2px #0f1e3d0f;--shadow-sm:0 1px 2px #0f1e3d0a, 0 2px 6px #0f1e3d0f;--shadow-md:0 1px 2px #0f1e3d0a, 0 12px 30px -12px #0f1e3d24;--font-display:"Archivo", system-ui, sans-serif;--font-sans:"Archivo", system-ui, sans-serif;--font-mono:"DM Mono", ui-monospace, "SF Mono", monospace}html.dark{color-scheme:dark;--success-100:#12352a;--warning-100:#3a2a16;--danger-100:#3a1620;--info-100:#122a4d;--surface-page:#0b1730;--surface-card:#13233f;--surface-sunken:#0f1e38;--border-subtle:#21324f;--border-default:#2c3f5e;--border-strong:#3c5173;--text-strong:#f2f6fc;--text-body:#b7c4d9;--text-muted:#7c8ca8;--text-brand:#93c5fd;--accent:#3b82f6;--accent-hover:#60a5fa;--focus-ring:#60a5fa;--success-600:#35b27a;--warning-600:#e0a03a;--danger-600:#e85c74;--shadow-xs:0 1px 2px #0006;--shadow-sm:0 1px 2px #0006, 0 2px 6px #0006;--shadow-md:0 1px 2px #00000059, 0 12px 30px -12px #0000008c}html,body,#app{height:100%}body{font-family:var(--font-sans);background:var(--surface-page);color:var(--text-body);-webkit-font-smoothing:antialiased;margin:0}.eyebrow{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.16em;color:var(--text-muted);font-size:11px}.data{font-family:var(--font-mono);letter-spacing:.02em;font-variant-numeric:tabular-nums}.dh-btn-ghost{border-radius:var(--radius-control);border:1px solid var(--border-default);background:var(--surface-card);height:34px;color:var(--text-strong);font-family:var(--font-sans);cursor:pointer;justify-content:center;align-items:center;gap:8px;padding:0 12px;font-size:.8125rem;font-weight:600;transition:background-color .14s,border-color .14s;display:inline-flex}.dh-btn-ghost:hover{background:var(--surface-sunken);border-color:var(--border-strong)}.dh-btn-ghost:focus-visible{box-shadow:0 0 0 3px var(--focus-ring);outline:none}.dh-btn{border-radius:var(--radius-control);background:var(--accent);color:#fff;height:34px;font-family:var(--font-sans);cursor:pointer;border:1px solid #0000;justify-content:center;align-items:center;gap:8px;padding:0 14px;font-size:.8125rem;font-weight:600;transition:background-color .14s;display:inline-flex}.dh-btn:hover:not(:disabled){background:var(--accent-hover)}.dh-btn:focus-visible{box-shadow:0 0 0 3px var(--focus-ring);outline:none}.dh-btn:disabled,.dh-btn-ghost:disabled,.dh-btn-danger:disabled{opacity:.55;cursor:not-allowed}.dh-btn-danger{border-radius:var(--radius-control);border:1px solid var(--border-default);height:30px;color:var(--danger-600);font-family:var(--font-sans);cursor:pointer;background:0 0;justify-content:center;align-items:center;gap:6px;padding:0 10px;font-size:.75rem;font-weight:600;transition:background-color .14s,border-color .14s;display:inline-flex}.dh-btn-danger:hover:not(:disabled){background:var(--danger-100);border-color:var(--danger-600)}.dh-input,.dh-select{border-radius:var(--radius-control);border:1px solid var(--border-default);background:var(--surface-card);width:100%;height:36px;color:var(--text-strong);font-family:var(--font-sans);padding:0 10px;font-size:.8125rem;transition:border-color .14s}.dh-input::placeholder{color:var(--text-muted)}.dh-input:focus,.dh-select:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--focus-ring);outline:none}.dh-label{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.16em;color:var(--text-muted);margin-bottom:5px;font-size:10px;display:block}.dh-pill{border-radius:var(--radius-pill);font-family:var(--font-mono);white-space:nowrap;align-items:center;gap:6px;padding:3px 9px;font-size:11px;font-weight:500;display:inline-flex}.dh-card{border:1px solid var(--border-subtle);background:var(--surface-card);border-radius:var(--radius-card);box-shadow:var(--shadow-sm)}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false} +/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial}}}@layer theme{:root,:host{--font-sans:var(--font-sans);--font-mono:var(--font-mono);--spacing:.25rem;--container-sm:24rem;--container-4xl:56rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--shadow-xs:var(--shadow-xs);--shadow-sm:var(--shadow-sm);--shadow-md:0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--radius-control:12px;--radius-card:18px;--radius-pill:999px}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.ml-1{margin-left:var(--spacing)}.ml-1\.5{margin-left:calc(var(--spacing) * 1.5)}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-flex{display:inline-flex}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-4{height:calc(var(--spacing) * 4)}.h-8{height:calc(var(--spacing) * 8)}.\!w-auto{width:auto!important}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-4{width:calc(var(--spacing) * 4)}.w-8{width:calc(var(--spacing) * 8)}.w-full{width:100%}.max-w-4xl{max-width:var(--container-4xl)}.max-w-sm{max-width:var(--container-sm)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.overflow-hidden{overflow:hidden}.rounded-control{border-radius:12px}.rounded-full{border-radius:3.40282e38px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-accent{border-color:var(--accent)}.border-subtle{border-color:var(--border-subtle)}.bg-current{background-color:currentColor}.bg-danger-soft{background-color:var(--danger-100)}.bg-info-soft{background-color:var(--info-100)}.bg-success-soft{background-color:var(--success-100)}.bg-sunken{background-color:var(--surface-sunken)}.bg-warning-soft{background-color:var(--warning-100)}.p-6{padding:calc(var(--spacing) * 6)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.\!py-1{padding-block:var(--spacing)!important}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-16{padding-block:calc(var(--spacing) * 16)}.pt-12{padding-top:calc(var(--spacing) * 12)}.pt-24{padding-top:calc(var(--spacing) * 24)}.pb-16{padding-bottom:calc(var(--spacing) * 16)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.\!text-xs{font-size:var(--text-xs)!important;line-height:var(--tw-leading,var(--text-xs--line-height))!important}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-none{--tw-leading:1;line-height:1}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[-0\.02em\]{--tw-tracking:-.02em;letter-spacing:-.02em}.tracking-\[-0\.03em\]{--tw-tracking:-.03em;letter-spacing:-.03em}.whitespace-nowrap{white-space:nowrap}.text-body{color:var(--text-body)}.text-brandtext{color:var(--text-brand)}.text-danger{color:var(--danger-600)}.text-info{color:var(--info-600)}.text-muted{color:var(--text-muted)}.text-strong{color:var(--text-strong)}.text-success{color:var(--success-600)}.text-warning{color:var(--warning-600)}.italic{font-style:italic}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.select-none{-webkit-user-select:none;user-select:none}.first\:border-t-0:first-child{border-top-style:var(--tw-border-style);border-top-width:0}@media(hover:hover){.hover\:bg-sunken:hover{background-color:var(--surface-sunken)}}@media(min-width:40rem){.sm\:inline{display:inline}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}.\[\&\>th\]\:px-5>th{padding-inline:calc(var(--spacing) * 5)}.\[\&\>th\]\:py-2\.5>th{padding-block:calc(var(--spacing) * 2.5)}.\[\&\>th\]\:font-medium>th{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}}:root{color-scheme:light;--brand-900:#0b1730;--brand-800:#0f1e3d;--brand-700:#1e40af;--brand-600:#2563eb;--brand-500:#3b82f6;--brand-400:#60a5fa;--brand-300:#93c5fd;--brand-200:#c7dbfb;--brand-100:#e8f0fd;--ink-900:#0f1e3d;--ink-700:#28374f;--ink-600:#3e4e68;--ink-500:#5c6b85;--ink-400:#7a8aa6;--ink-300:#b4bece;--ink-200:#d6deea;--ink-100:#e4e9f2;--ink-50:#eef2f8;--ink-25:#f7f9fc;--white:#fff;--success-600:#1f8a5b;--success-100:#e1f3ea;--warning-600:#d9822b;--warning-100:#fbeddd;--danger-600:#dc2a45;--danger-100:#fbe3e7;--info-600:#2563eb;--info-100:#e8f0fd;--surface-page:var(--ink-25);--surface-card:var(--white);--surface-sunken:var(--ink-50);--border-subtle:var(--ink-100);--border-default:var(--ink-200);--border-strong:var(--ink-300);--text-strong:var(--ink-900);--text-body:var(--ink-600);--text-muted:var(--ink-400);--text-brand:var(--brand-700);--accent:var(--brand-600);--accent-hover:var(--brand-700);--focus-ring:var(--brand-400);--shadow-xs:0 1px 2px #0f1e3d0f;--shadow-sm:0 1px 2px #0f1e3d0a, 0 2px 6px #0f1e3d0f;--shadow-md:0 1px 2px #0f1e3d0a, 0 12px 30px -12px #0f1e3d24;--font-display:"Archivo", system-ui, sans-serif;--font-sans:"Archivo", system-ui, sans-serif;--font-mono:"DM Mono", ui-monospace, "SF Mono", monospace}html.dark{color-scheme:dark;--success-100:#12352a;--warning-100:#3a2a16;--danger-100:#3a1620;--info-100:#122a4d;--surface-page:#0b1730;--surface-card:#13233f;--surface-sunken:#0f1e38;--border-subtle:#21324f;--border-default:#2c3f5e;--border-strong:#3c5173;--text-strong:#f2f6fc;--text-body:#b7c4d9;--text-muted:#7c8ca8;--text-brand:#93c5fd;--accent:#3b82f6;--accent-hover:#60a5fa;--focus-ring:#60a5fa;--success-600:#35b27a;--warning-600:#e0a03a;--danger-600:#e85c74;--shadow-xs:0 1px 2px #0006;--shadow-sm:0 1px 2px #0006, 0 2px 6px #0006;--shadow-md:0 1px 2px #00000059, 0 12px 30px -12px #0000008c}html,body,#app{height:100%}body{font-family:var(--font-sans);background:var(--surface-page);color:var(--text-body);-webkit-font-smoothing:antialiased;margin:0}.eyebrow{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.16em;color:var(--text-muted);font-size:11px}.data{font-family:var(--font-mono);letter-spacing:.02em;font-variant-numeric:tabular-nums}.dh-btn-ghost{border-radius:var(--radius-control);border:1px solid var(--border-default);background:var(--surface-card);height:34px;color:var(--text-strong);font-family:var(--font-sans);cursor:pointer;justify-content:center;align-items:center;gap:8px;padding:0 12px;font-size:.8125rem;font-weight:600;transition:background-color .14s,border-color .14s;display:inline-flex}.dh-btn-ghost:hover{background:var(--surface-sunken);border-color:var(--border-strong)}.dh-btn-ghost:focus-visible{box-shadow:0 0 0 3px var(--focus-ring);outline:none}.dh-btn{border-radius:var(--radius-control);background:var(--accent);color:#fff;height:34px;font-family:var(--font-sans);cursor:pointer;border:1px solid #0000;justify-content:center;align-items:center;gap:8px;padding:0 14px;font-size:.8125rem;font-weight:600;transition:background-color .14s;display:inline-flex}.dh-btn:hover:not(:disabled){background:var(--accent-hover)}.dh-btn:focus-visible{box-shadow:0 0 0 3px var(--focus-ring);outline:none}.dh-btn:disabled,.dh-btn-ghost:disabled,.dh-btn-danger:disabled{opacity:.55;cursor:not-allowed}.dh-btn-danger{border-radius:var(--radius-control);border:1px solid var(--border-default);height:30px;color:var(--danger-600);font-family:var(--font-sans);cursor:pointer;background:0 0;justify-content:center;align-items:center;gap:6px;padding:0 10px;font-size:.75rem;font-weight:600;transition:background-color .14s,border-color .14s;display:inline-flex}.dh-btn-danger:hover:not(:disabled){background:var(--danger-100);border-color:var(--danger-600)}.dh-input,.dh-select{border-radius:var(--radius-control);border:1px solid var(--border-default);background:var(--surface-card);width:100%;height:36px;color:var(--text-strong);font-family:var(--font-sans);padding:0 10px;font-size:.8125rem;transition:border-color .14s}.dh-input::placeholder{color:var(--text-muted)}.dh-input:focus,.dh-select:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--focus-ring);outline:none}.dh-label{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.16em;color:var(--text-muted);margin-bottom:5px;font-size:10px;display:block}.dh-pill{border-radius:var(--radius-pill);font-family:var(--font-mono);white-space:nowrap;align-items:center;gap:6px;padding:3px 9px;font-size:11px;font-weight:500;display:inline-flex}.dh-card{border:1px solid var(--border-subtle);background:var(--surface-card);border-radius:var(--radius-card);box-shadow:var(--shadow-sm)}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false} diff --git a/API Server/internal/api/dist/assets/index-OENR1RVj.js b/API Server/internal/api/dist/assets/index-OENR1RVj.js deleted file mode 100644 index fdb658e..0000000 --- a/API Server/internal/api/dist/assets/index-OENR1RVj.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 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 9826296..857c41d 100644 --- a/API Server/internal/api/dist/index.html +++ b/API Server/internal/api/dist/index.html @@ -6,8 +6,8 @@ DriverVault · API Server - - + +
diff --git a/API Server/panel/src/App.vue b/API Server/panel/src/App.vue index fcadd3f..055ca68 100644 --- a/API Server/panel/src/App.vue +++ b/API Server/panel/src/App.vue @@ -1,6 +1,7 @@