diff --git a/docs/planning/auth-fix-plan.md b/docs/planning/auth-fix-plan.md index a679e24..404f38b 100644 --- a/docs/planning/auth-fix-plan.md +++ b/docs/planning/auth-fix-plan.md @@ -62,36 +62,36 @@ **Цель:** пользователь остаётся залогиненым дни и недели без ручных повторных входов. -### 2.1. Автоматический refresh токена при 401 +### 2.1. Автоматический refresh токена при 401 ✅ - **Проблема:** истечение access_token мгновенно разлогинивает. - **Файлы:** - - `webclient/src/stores/auth.js` — в `init()` при 401 сначала вызвать `refreshToken()`, потом повторить `apiGet("/auth/me")`. - - `webclient/src/api/client.js` — при 401 ответа делать **один** вызов `/auth/refresh` (с queue, чтобы не делать N параллельных), затем retry исходного запроса. + - `webclient/src/stores/auth.js` — в `init()` при 401 сначала вызывает `refreshToken()`, потом повторяет `apiGet("/auth/me")` ✅ + - `webclient/src/api/client.js` — при 401 ответа делает **один** вызов `/auth/refresh` (с queue, чтобы не делать N параллельных), затем retry исходного запроса ✅ - **Acceptance criteria:** - Токен истёк → frontend автоматически обновляет и retry запроса без видимого разлогина. - Если refresh тоже 401 → только тогда редирект на login. -### 2.2. Поддержать Bearer-token fallback в `refresh()` и `logout()` +### 2.2. Поддержать Bearer-token fallback в `refresh()` и `logout()` ✅ - **Проблема:** эти endpoint'ы читают только `$_SESSION`, но SPA может работать без session cookie. - **Файлы:** - - `server/SHServ/Controllers/AuthController.php` — `refresh()` и `logout()` должны извлекать access_token из `Authorization` header, искать session по нему в `shserv_sessions`, и работать от найденной записи. + - `server/SHServ/Controllers/AuthController.php` — `refresh()` и `logout()` теперь извлекают access_token из `Authorization` header, ищут session по `access_token` в `shserv_sessions`, и работают от найденной записи ✅ - **Acceptance criteria:** - Вызов `POST /auth/refresh` с `Authorization: Bearer ` возвращает новый токен даже без PHP session cookie. - `POST /auth/logout` с валидным Bearer отзывает сессию. -### 2.3. Использовать `expires_in` на фронтенде (proactive refresh) +### 2.3. Использовать `expires_in` на фронтенде (proactive refresh) ✅ - **Проблема:** фронтенд не знает, когда токен истечёт, и ждёт 401. - **Файлы:** - - `webclient/src/api/auth.js` — сохранять `expires_at` (timestamp) рядом с token в localStorage. - - `webclient/src/stores/auth.js` — `setInterval` или `setTimeout` на обновление за 60 секунд до expiration. + - `webclient/src/api/auth.js` — сохраняет `expires_at` (timestamp) рядом с token в localStorage ✅ + - `webclient/src/stores/auth.js` — `setTimeout` на обновление за 60 секунд до expiration, с cancel при logout ✅ - **Acceptance criteria:** - Токен обновляется **до** истечения, 401 от API не происходит при нормальной работе. -### 2.4. Убрать дублирование извлечения токена из URL -- **Проблема:** `main.js` и `LoginPage.vue` оба пытаются обработать callback → лишний `me`. +### 2.4. Убрать дублирование извлечения токена из URL ✅ +- **Проблема:** `main.js` и `LoginPage.vue` оба пытались обработать callback → лишний `me`. - **Файлы:** - - `webclient/src/features/auth/pages/LoginPage.vue` — удалить `onMounted` логику с `route.query.access_token`. - - `webclient/src/app/main.js` — оставить единственную точку обработки. + - `webclient/src/features/auth/pages/LoginPage.vue` — очищен, не содержит логики OAuth callback ✅ + - `webclient/src/app/main.js` — единственная точка обработки ✅ - **Acceptance criteria:** - `LoginPage.vue` не содержит логики OAuth callback. @@ -170,7 +170,14 @@ - [x] Коммит: `Phase 1 auth security hotfixes: cookie-based session, bearer checks, router guard sync`. - [ ] Прод деплой только через `git pull`. -### Переход к Phase 2 -- [ ] Smoke-test Phase 1 на проде подтверждён. -- [ ] Все задачи Phase 2 реализованы. -- [ ] Тесты не сломаны. +### Phase 2 — выполнено +- [x] Все задачи текущей фазы реализованы. +- [x] Frontend build проходит (`npm run build`). +- [x] PHP lint чистый. +- [x] Тесты не сломаны (13 pre-existing failures). +- [ ] Ручной smoke-test на локальном сервере: login → dashboard → reload → logout → login. +- [ ] Прод деплой только через `git pull`. + +### Переход к Phase 3 +- [ ] Smoke-test Phase 2 на проде подтверждён. +- [ ] Все задачи Phase 3 реализованы. diff --git a/server/SHServ/Controllers/AuthController.php b/server/SHServ/Controllers/AuthController.php index 336c406..051c6fe 100644 --- a/server/SHServ/Controllers/AuthController.php +++ b/server/SHServ/Controllers/AuthController.php @@ -108,12 +108,44 @@ */ public function logout() { + $sessionToken = $_SESSION['shserv_auth_token'] ?? null; + + if (!$sessionToken) { + $bearer = $this->get_bearer_token(); + if ($bearer) { + $tb = app()->thin_builder; + $result = $tb->select('shserv_sessions', ['session_token'], [['access_token', '=', $bearer]]); + if ($result) { + $sessionToken = $result[0]['session_token']; + } + } + } + + if ($sessionToken) { + $service = new AuthService(); + $dbStore = new DbTokenStore(app()->thin_builder); + $tokenSet = $dbStore->get($sessionToken); + if ($tokenSet && $tokenSet->refreshToken) { + try { + $service->getClient()->revokeToken($tokenSet->refreshToken, 'refresh_token'); + } catch (\Throwable $e) { + // ignore revoke failures during logout + } + } + $dbStore->forget($sessionToken); + } + if (session_status() === PHP_SESSION_NONE) { @session_start(); } - $service = new AuthService(); - $service->logout(); + unset( + $_SESSION['shserv_auth_token'], + $_SESSION['shserv_access_token'], + $_SESSION['shserv_user_id'], + $_SESSION['gauth_state'], + $_SESSION['gauth_pkce'] + ); // Destroy session cookie so the browser stops sending it if (ini_get('session.use_cookies')) { @@ -171,6 +203,18 @@ public function refresh() { $sessionToken = $_SESSION['shserv_auth_token'] ?? null; + + if (!$sessionToken) { + $bearer = $this->get_bearer_token(); + if ($bearer) { + $tb = app()->thin_builder; + $result = $tb->select('shserv_sessions', ['session_token'], [['access_token', '=', $bearer]]); + if ($result) { + $sessionToken = $result[0]['session_token']; + } + } + } + if (!$sessionToken) { return $this->utils()->response_error('not_found_any_sessions', [], [], 401); } diff --git a/server/dist/assets/NotFoundPage-Bg6TwA7b.js b/server/dist/assets/NotFoundPage-Bg6TwA7b.js new file mode 100644 index 0000000..d93d6cd --- /dev/null +++ b/server/dist/assets/NotFoundPage-Bg6TwA7b.js @@ -0,0 +1 @@ +import{c as e,a as t,u as o,G as a,o as n}from"./index-Vo31ftuu.js";const s={class:"page"},u={__name:"NotFoundPage",setup(c){return(r,_)=>(n(),e("section",s,[t(o(a),{title:"Not Found",text:"The page you are looking for does not exist.",icon:"ph-warning"})]))}};export{u as default}; diff --git a/server/dist/assets/NotFoundPage-DmNfJ50v.js b/server/dist/assets/NotFoundPage-DmNfJ50v.js deleted file mode 100644 index 8b751ad..0000000 --- a/server/dist/assets/NotFoundPage-DmNfJ50v.js +++ /dev/null @@ -1 +0,0 @@ -import{c as e,a as t,u as o,G as a,o as n}from"./index-DAqizFIn.js";const s={class:"page"},u={__name:"NotFoundPage",setup(c){return(r,_)=>(n(),e("section",s,[t(o(a),{title:"Not Found",text:"The page you are looking for does not exist.",icon:"ph-warning"})]))}};export{u as default}; diff --git a/server/dist/assets/index-DAqizFIn.js b/server/dist/assets/index-DAqizFIn.js deleted file mode 100644 index 940e3c4..0000000 --- a/server/dist/assets/index-DAqizFIn.js +++ /dev/null @@ -1,37 +0,0 @@ -(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))a(s);new MutationObserver(s=>{for(const r of s)if(r.type==="childList")for(const i of r.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&a(i)}).observe(document,{childList:!0,subtree:!0});function n(s){const r={};return s.integrity&&(r.integrity=s.integrity),s.referrerPolicy&&(r.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?r.credentials="include":s.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function a(s){if(s.ep)return;s.ep=!0;const r=n(s);fetch(s.href,r)}})();/** -* @vue/shared v3.5.33 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/function Ts(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const Le={},kn=[],Pt=()=>{},ci=()=>!1,Ca=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Ea=e=>e.startsWith("onUpdate:"),tt=Object.assign,$s=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Qo=Object.prototype.hasOwnProperty,Ce=(e,t)=>Qo.call(e,t),he=Array.isArray,An=e=>ia(e)==="[object Map]",di=e=>ia(e)==="[object Set]",sr=e=>ia(e)==="[object Date]",_e=e=>typeof e=="function",He=e=>typeof e=="string",yt=e=>typeof e=="symbol",Te=e=>e!==null&&typeof e=="object",fi=e=>(Te(e)||_e(e))&&_e(e.then)&&_e(e.catch),pi=Object.prototype.toString,ia=e=>pi.call(e),Xo=e=>ia(e).slice(8,-1),vi=e=>ia(e)==="[object Object]",Ra=e=>He(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Gn=Ts(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Ta=e=>{const t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},el=/-\w/g,ft=Ta(e=>e.replace(el,t=>t.slice(1).toUpperCase())),tl=/\B([A-Z])/g,vn=Ta(e=>e.replace(tl,"-$1").toLowerCase()),$a=Ta(e=>e.charAt(0).toUpperCase()+e.slice(1)),Ka=Ta(e=>e?`on${$a(e)}`:""),Dt=(e,t)=>!Object.is(e,t),Wa=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:a,value:n})},nl=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let rr;const Ia=()=>rr||(rr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Is(e){if(he(e)){const t={};for(let n=0;n{if(n){const a=n.split(sl);a.length>1&&(t[a[0].trim()]=a[1].trim())}}),t}function Lt(e){let t="";if(He(e))t=e;else if(he(e))for(let n=0;n!!(e&&e.__v_isRef===!0),M=e=>He(e)?e:e==null?"":he(e)||Te(e)&&(e.toString===pi||!_e(e.toString))?mi(e)?M(e.value):JSON.stringify(e,yi,2):String(e),yi=(e,t)=>mi(t)?yi(e,t.value):An(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[a,s],r)=>(n[Ja(a,r)+" =>"]=s,n),{})}:di(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Ja(n))}:yt(t)?Ja(t):Te(t)&&!he(t)&&!vi(t)?String(t):t,Ja=(e,t="")=>{var n;return yt(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** -* @vue/reactivity v3.5.33 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let Ze;class _i{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.__v_skip=!0,this.parent=Ze,!t&&Ze&&(this.index=(Ze.scopes||(Ze.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0&&--this._on===0){if(Ze===this)Ze=this.prevScope;else{let t=Ze;for(;t;){if(t.prevScope===this){t.prevScope=this.prevScope;break}t=t.prevScope}}this.prevScope=void 0}}stop(t){if(this._active){this._active=!1;let n,a;for(n=0,a=this.effects.length;n0)return;if(zn){let t=zn;for(zn=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;qn;){let t=qn;for(qn=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(a){e||(e=a)}t=n}}if(e)throw e}function xi(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Ci(e){let t,n=e.depsTail,a=n;for(;a;){const s=a.prevDep;a.version===-1?(a===n&&(n=s),Os(a),dl(a)):t=a,a.dep.activeLink=a.prevActiveLink,a.prevActiveLink=void 0,a=s}e.deps=t,e.depsTail=n}function cs(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Ei(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Ei(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Xn)||(e.globalVersion=Xn,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!cs(e))))return;e.flags|=2;const t=e.dep,n=Oe,a=St;Oe=e,St=!0;try{xi(e);const s=e.fn(e._value);(t.version===0||Dt(s,e._value))&&(e.flags|=128,e._value=s,t.version++)}catch(s){throw t.version++,s}finally{Oe=n,St=a,Ci(e),e.flags&=-3}}function Os(e,t=!1){const{dep:n,prevSub:a,nextSub:s}=e;if(a&&(a.nextSub=s,e.prevSub=void 0),s&&(s.prevSub=a,e.nextSub=void 0),n.subs===e&&(n.subs=a,!a&&n.computed)){n.computed.flags&=-5;for(let r=n.computed.deps;r;r=r.nextDep)Os(r,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function dl(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let St=!0;const Ri=[];function qt(){Ri.push(St),St=!1}function zt(){const e=Ri.pop();St=e===void 0?!0:e}function ir(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=Oe;Oe=void 0;try{t()}finally{Oe=n}}}let Xn=0;class fl{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Ls{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!Oe||!St||Oe===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==Oe)n=this.activeLink=new fl(Oe,this),Oe.deps?(n.prevDep=Oe.depsTail,Oe.depsTail.nextDep=n,Oe.depsTail=n):Oe.deps=Oe.depsTail=n,Ti(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const a=n.nextDep;a.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=a),n.prevDep=Oe.depsTail,n.nextDep=void 0,Oe.depsTail.nextDep=n,Oe.depsTail=n,Oe.deps===n&&(Oe.deps=a)}return n}trigger(t){this.version++,Xn++,this.notify(t)}notify(t){Ps();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Fs()}}}function Ti(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let a=t.deps;a;a=a.nextDep)Ti(a)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const ma=new WeakMap,dn=Symbol(""),ds=Symbol(""),ea=Symbol("");function at(e,t,n){if(St&&Oe){let a=ma.get(e);a||ma.set(e,a=new Map);let s=a.get(n);s||(a.set(n,s=new Ls),s.map=a,s.key=n),s.track()}}function Ht(e,t,n,a,s,r){const i=ma.get(e);if(!i){Xn++;return}const o=l=>{l&&l.trigger()};if(Ps(),t==="clear")i.forEach(o);else{const l=he(e),u=l&&Ra(n);if(l&&n==="length"){const c=Number(a);i.forEach((d,f)=>{(f==="length"||f===ea||!yt(f)&&f>=c)&&o(d)})}else switch((n!==void 0||i.has(void 0))&&o(i.get(n)),u&&o(i.get(ea)),t){case"add":l?u&&o(i.get("length")):(o(i.get(dn)),An(e)&&o(i.get(ds)));break;case"delete":l||(o(i.get(dn)),An(e)&&o(i.get(ds)));break;case"set":An(e)&&o(i.get(dn));break}}Fs()}function pl(e,t){const n=ma.get(e);return n&&n.get(t)}function _n(e){const t=Ae(e);return t===e?t:(at(t,"iterate",ea),ht(e)?t:t.map(kt))}function Da(e){return at(e=Ae(e),"iterate",ea),e}function $t(e,t){return Kt(e)?Rn(Gt(e)?kt(t):t):kt(t)}const vl={__proto__:null,[Symbol.iterator](){return Za(this,Symbol.iterator,e=>$t(this,e))},concat(...e){return _n(this).concat(...e.map(t=>he(t)?_n(t):t))},entries(){return Za(this,"entries",e=>(e[1]=$t(this,e[1]),e))},every(e,t){return Ut(this,"every",e,t,void 0,arguments)},filter(e,t){return Ut(this,"filter",e,t,n=>n.map(a=>$t(this,a)),arguments)},find(e,t){return Ut(this,"find",e,t,n=>$t(this,n),arguments)},findIndex(e,t){return Ut(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Ut(this,"findLast",e,t,n=>$t(this,n),arguments)},findLastIndex(e,t){return Ut(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Ut(this,"forEach",e,t,void 0,arguments)},includes(...e){return Qa(this,"includes",e)},indexOf(...e){return Qa(this,"indexOf",e)},join(e){return _n(this).join(e)},lastIndexOf(...e){return Qa(this,"lastIndexOf",e)},map(e,t){return Ut(this,"map",e,t,void 0,arguments)},pop(){return On(this,"pop")},push(...e){return On(this,"push",e)},reduce(e,...t){return or(this,"reduce",e,t)},reduceRight(e,...t){return or(this,"reduceRight",e,t)},shift(){return On(this,"shift")},some(e,t){return Ut(this,"some",e,t,void 0,arguments)},splice(...e){return On(this,"splice",e)},toReversed(){return _n(this).toReversed()},toSorted(e){return _n(this).toSorted(e)},toSpliced(...e){return _n(this).toSpliced(...e)},unshift(...e){return On(this,"unshift",e)},values(){return Za(this,"values",e=>$t(this,e))}};function Za(e,t,n){const a=Da(e),s=a[t]();return a!==e&&!ht(e)&&(s._next=s.next,s.next=()=>{const r=s._next();return r.done||(r.value=n(r.value)),r}),s}const gl=Array.prototype;function Ut(e,t,n,a,s,r){const i=Da(e),o=i!==e&&!ht(e),l=i[t];if(l!==gl[t]){const d=l.apply(e,r);return o?kt(d):d}let u=n;i!==e&&(o?u=function(d,f){return n.call(this,$t(e,d),f,e)}:n.length>2&&(u=function(d,f){return n.call(this,d,f,e)}));const c=l.call(i,u,a);return o&&s?s(c):c}function or(e,t,n,a){const s=Da(e),r=s!==e&&!ht(e);let i=n,o=!1;s!==e&&(r?(o=a.length===0,i=function(u,c,d){return o&&(o=!1,u=$t(e,u)),n.call(this,u,$t(e,c),d,e)}):n.length>3&&(i=function(u,c,d){return n.call(this,u,c,d,e)}));const l=s[t](i,...a);return o?$t(e,l):l}function Qa(e,t,n){const a=Ae(e);at(a,"iterate",ea);const s=a[t](...n);return(s===-1||s===!1)&&Pa(n[0])?(n[0]=Ae(n[0]),a[t](...n)):s}function On(e,t,n=[]){qt(),Ps();const a=Ae(e)[t].apply(e,n);return Fs(),zt(),a}const hl=Ts("__proto__,__v_isRef,__isVue"),$i=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(yt));function ml(e){yt(e)||(e=String(e));const t=Ae(this);return at(t,"has",e),t.hasOwnProperty(e)}class Ii{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,a){if(n==="__v_skip")return t.__v_skip;const s=this._isReadonly,r=this._isShallow;if(n==="__v_isReactive")return!s;if(n==="__v_isReadonly")return s;if(n==="__v_isShallow")return r;if(n==="__v_raw")return a===(s?r?El:Oi:r?Fi:Pi).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(a)?t:void 0;const i=he(t);if(!s){let l;if(i&&(l=vl[n]))return l;if(n==="hasOwnProperty")return ml}const o=Reflect.get(t,n,Ue(t)?t:a);if((yt(n)?$i.has(n):hl(n))||(s||at(t,"get",n),r))return o;if(Ue(o)){const l=i&&Ra(n)?o:o.value;return s&&Te(l)?ps(l):l}return Te(o)?s?ps(o):Yt(o):o}}class Di extends Ii{constructor(t=!1){super(!1,t)}set(t,n,a,s){let r=t[n];const i=he(t)&&Ra(n);if(!this._isShallow){const u=Kt(r);if(!ht(a)&&!Kt(a)&&(r=Ae(r),a=Ae(a)),!i&&Ue(r)&&!Ue(a))return u||(r.value=a),!0}const o=i?Number(n)e,da=e=>Reflect.getPrototypeOf(e);function Sl(e,t,n){return function(...a){const s=this.__v_raw,r=Ae(s),i=An(r),o=e==="entries"||e===Symbol.iterator&&i,l=e==="keys"&&i,u=s[e](...a),c=n?fs:t?Rn:kt;return!t&&at(r,"iterate",l?ds:dn),tt(Object.create(u),{next(){const{value:d,done:f}=u.next();return f?{value:d,done:f}:{value:o?[c(d[0]),c(d[1])]:c(d),done:f}}})}}function fa(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function kl(e,t){const n={get(s){const r=this.__v_raw,i=Ae(r),o=Ae(s);e||(Dt(s,o)&&at(i,"get",s),at(i,"get",o));const{has:l}=da(i),u=t?fs:e?Rn:kt;if(l.call(i,s))return u(r.get(s));if(l.call(i,o))return u(r.get(o));r!==i&&r.get(s)},get size(){const s=this.__v_raw;return!e&&at(Ae(s),"iterate",dn),s.size},has(s){const r=this.__v_raw,i=Ae(r),o=Ae(s);return e||(Dt(s,o)&&at(i,"has",s),at(i,"has",o)),s===o?r.has(s):r.has(s)||r.has(o)},forEach(s,r){const i=this,o=i.__v_raw,l=Ae(o),u=t?fs:e?Rn:kt;return!e&&at(l,"iterate",dn),o.forEach((c,d)=>s.call(r,u(c),u(d),i))}};return tt(n,e?{add:fa("add"),set:fa("set"),delete:fa("delete"),clear:fa("clear")}:{add(s){const r=Ae(this),i=da(r),o=Ae(s),l=!t&&!ht(s)&&!Kt(s)?o:s;return i.has.call(r,l)||Dt(s,l)&&i.has.call(r,s)||Dt(o,l)&&i.has.call(r,o)||(r.add(l),Ht(r,"add",l,l)),this},set(s,r){!t&&!ht(r)&&!Kt(r)&&(r=Ae(r));const i=Ae(this),{has:o,get:l}=da(i);let u=o.call(i,s);u||(s=Ae(s),u=o.call(i,s));const c=l.call(i,s);return i.set(s,r),u?Dt(r,c)&&Ht(i,"set",s,r):Ht(i,"add",s,r),this},delete(s){const r=Ae(this),{has:i,get:o}=da(r);let l=i.call(r,s);l||(s=Ae(s),l=i.call(r,s)),o&&o.call(r,s);const u=r.delete(s);return l&&Ht(r,"delete",s,void 0),u},clear(){const s=Ae(this),r=s.size!==0,i=s.clear();return r&&Ht(s,"clear",void 0,void 0),i}}),["keys","values","entries",Symbol.iterator].forEach(s=>{n[s]=Sl(s,e,t)}),n}function Ns(e,t){const n=kl(e,t);return(a,s,r)=>s==="__v_isReactive"?!e:s==="__v_isReadonly"?e:s==="__v_raw"?a:Reflect.get(Ce(n,s)&&s in a?n:a,s,r)}const Al={get:Ns(!1,!1)},xl={get:Ns(!1,!0)},Cl={get:Ns(!0,!1)};const Pi=new WeakMap,Fi=new WeakMap,Oi=new WeakMap,El=new WeakMap;function Rl(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Tl(e){return e.__v_skip||!Object.isExtensible(e)?0:Rl(Xo(e))}function Yt(e){return Kt(e)?e:Ms(e,!1,_l,Al,Pi)}function Li(e){return Ms(e,!1,wl,xl,Fi)}function ps(e){return Ms(e,!0,bl,Cl,Oi)}function Ms(e,t,n,a,s){if(!Te(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const r=Tl(e);if(r===0)return e;const i=s.get(e);if(i)return i;const o=new Proxy(e,r===2?a:n);return s.set(e,o),o}function Gt(e){return Kt(e)?Gt(e.__v_raw):!!(e&&e.__v_isReactive)}function Kt(e){return!!(e&&e.__v_isReadonly)}function ht(e){return!!(e&&e.__v_isShallow)}function Pa(e){return e?!!e.__v_raw:!1}function Ae(e){const t=e&&e.__v_raw;return t?Ae(t):e}function Us(e){return!Ce(e,"__v_skip")&&Object.isExtensible(e)&&gi(e,"__v_skip",!0),e}const kt=e=>Te(e)?Yt(e):e,Rn=e=>Te(e)?ps(e):e;function Ue(e){return e?e.__v_isRef===!0:!1}function Z(e){return Ni(e,!1)}function $l(e){return Ni(e,!0)}function Ni(e,t){return Ue(e)?e:new Il(e,t)}class Il{constructor(t,n){this.dep=new Ls,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:Ae(t),this._value=n?t:kt(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,a=this.__v_isShallow||ht(t)||Kt(t);t=a?t:Ae(t),Dt(t,n)&&(this._rawValue=t,this._value=a?t:kt(t),this.dep.trigger())}}function v(e){return Ue(e)?e.value:e}const Dl={get:(e,t,n)=>t==="__v_raw"?e:v(Reflect.get(e,t,n)),set:(e,t,n,a)=>{const s=e[t];return Ue(s)&&!Ue(n)?(s.value=n,!0):Reflect.set(e,t,n,a)}};function Mi(e){return Gt(e)?e:new Proxy(e,Dl)}function Pl(e){const t=he(e)?new Array(e.length):{};for(const n in e)t[n]=Ol(e,n);return t}class Fl{constructor(t,n,a){this._object=t,this._defaultValue=a,this.__v_isRef=!0,this._value=void 0,this._key=yt(n)?n:String(n),this._raw=Ae(t);let s=!0,r=t;if(!he(t)||yt(this._key)||!Ra(this._key))do s=!Pa(r)||ht(r);while(s&&(r=r.__v_raw));this._shallow=s}get value(){let t=this._object[this._key];return this._shallow&&(t=v(t)),this._value=t===void 0?this._defaultValue:t}set value(t){if(this._shallow&&Ue(this._raw[this._key])){const n=this._object[this._key];if(Ue(n)){n.value=t;return}}this._object[this._key]=t}get dep(){return pl(this._raw,this._key)}}function Ol(e,t,n){return new Fl(e,t,n)}class Ll{constructor(t,n,a){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Ls(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Xn-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=a}notify(){if(this.flags|=16,!(this.flags&8)&&Oe!==this)return Ai(this,!0),!0}get value(){const t=this.dep.track();return Ei(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Nl(e,t,n=!1){let a,s;return _e(e)?a=e:(a=e.get,s=e.set),new Ll(a,s,n)}const pa={},ya=new WeakMap;let ln;function Ml(e,t=!1,n=ln){if(n){let a=ya.get(n);a||ya.set(n,a=[]),a.push(e)}}function Ul(e,t,n=Le){const{immediate:a,deep:s,once:r,scheduler:i,augmentJob:o,call:l}=n,u=E=>s?E:ht(E)||s===!1||s===0?an(E,1):an(E);let c,d,f,g,h=!1,w=!1;if(Ue(e)?(d=()=>e.value,h=ht(e)):Gt(e)?(d=()=>u(e),h=!0):he(e)?(w=!0,h=e.some(E=>Gt(E)||ht(E)),d=()=>e.map(E=>{if(Ue(E))return E.value;if(Gt(E))return u(E);if(_e(E))return l?l(E,2):E()})):_e(e)?t?d=l?()=>l(e,2):e:d=()=>{if(f){qt();try{f()}finally{zt()}}const E=ln;ln=c;try{return l?l(e,3,[g]):e(g)}finally{ln=E}}:d=Pt,t&&s){const E=d,L=s===!0?1/0:s;d=()=>an(E(),L)}const y=wi(),P=()=>{c.stop(),y&&y.active&&$s(y.effects,c)};if(r&&t){const E=t;t=(...L)=>{E(...L),P()}}let _=w?new Array(e.length).fill(pa):pa;const S=E=>{if(!(!(c.flags&1)||!c.dirty&&!E))if(t){const L=c.run();if(s||h||(w?L.some((D,T)=>Dt(D,_[T])):Dt(L,_))){f&&f();const D=ln;ln=c;try{const T=[L,_===pa?void 0:w&&_[0]===pa?[]:_,g];_=L,l?l(t,3,T):t(...T)}finally{ln=D}}}else c.run()};return o&&o(S),c=new Si(d),c.scheduler=i?()=>i(S,!1):S,g=E=>Ml(E,!1,c),f=c.onStop=()=>{const E=ya.get(c);if(E){if(l)l(E,4);else for(const L of E)L();ya.delete(c)}},t?a?S(!0):_=c.run():i?i(S.bind(null,!0),!0):c.run(),P.pause=c.pause.bind(c),P.resume=c.resume.bind(c),P.stop=P,P}function an(e,t=1/0,n){if(t<=0||!Te(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,Ue(e))an(e.value,t,n);else if(he(e))for(let a=0;a{an(a,t,n)});else if(vi(e)){for(const a in e)an(e[a],t,n);for(const a of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,a)&&an(e[a],t,n)}return e}/** -* @vue/runtime-core v3.5.33 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/function oa(e,t,n,a){try{return a?e(...a):e()}catch(s){Fa(s,t,n)}}function Nt(e,t,n,a){if(_e(e)){const s=oa(e,t,n,a);return s&&fi(s)&&s.catch(r=>{Fa(r,t,n)}),s}if(he(e)){const s=[];for(let r=0;r>>1,s=ct[a],r=ta(s);r=ta(n)?ct.push(e):ct.splice(Vl(t),0,e),e.flags|=1,Bi()}}function Bi(){_a||(_a=Ui.then(ji))}function jl(e){he(e)?xn.push(...e):tn&&e.id===-1?tn.splice(wn+1,0,e):e.flags&1||(xn.push(e),e.flags|=1),Bi()}function lr(e,t,n=Tt+1){for(;nta(n)-ta(a));if(xn.length=0,tn){tn.push(...t);return}for(tn=t,wn=0;wne.id==null?e.flags&2?-1:1/0:e.id;function ji(e){try{for(Tt=0;Tt{a._d&&ka(-1);const r=ba(t);let i;try{i=e(...s)}finally{ba(r),a._d&&ka(1)}return i};return a._n=!0,a._c=!0,a._d=!0,a}function rn(e,t,n,a){const s=e.dirs,r=t&&t.dirs;for(let i=0;i1)return n&&_e(t)?t.call(a&&a.proxy):t}}function Hl(){return!!(Ba()||fn)}const Gl=Symbol.for("v-scx"),ql=()=>mt(Gl);function Ft(e,t,n){return Gi(e,t,n)}function Gi(e,t,n=Le){const{immediate:a,deep:s,flush:r,once:i}=n,o=tt({},n),l=t&&a||!t&&r!=="post";let u;if(sa){if(r==="sync"){const g=ql();u=g.__watcherHandles||(g.__watcherHandles=[])}else if(!l){const g=()=>{};return g.stop=Pt,g.resume=Pt,g.pause=Pt,g}}const c=st;o.call=(g,h,w)=>Nt(g,c,h,w);let d=!1;r==="post"?o.scheduler=g=>{ot(g,c&&c.suspense)}:r!=="sync"&&(d=!0,o.scheduler=(g,h)=>{h?g():Bs(g)}),o.augmentJob=g=>{t&&(g.flags|=4),d&&(g.flags|=2,c&&(g.id=c.uid,g.i=c))};const f=Ul(e,t,o);return sa&&(u?u.push(f):l&&f()),f}function zl(e,t,n){const a=this.proxy,s=He(e)?e.includes(".")?qi(a,e):()=>a[e]:e.bind(a,a);let r;_e(t)?r=t:(r=t.handler,n=t);const i=ua(this),o=Gi(s,r.bind(a),n);return i(),o}function qi(e,t){const n=t.split(".");return()=>{let a=e;for(let s=0;se.__isTeleport,un=e=>e&&(e.disabled||e.disabled===""),Wl=e=>e&&(e.defer||e.defer===""),ur=e=>typeof SVGElement<"u"&&e instanceof SVGElement,cr=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,vs=(e,t)=>{const n=e&&e.to;return He(n)?t?t(n):null:n},Jl={name:"Teleport",__isTeleport:!0,process(e,t,n,a,s,r,i,o,l,u){const{mc:c,pc:d,pbc:f,o:{insert:g,querySelector:h,createText:w,createComment:y,parentNode:P}}=u,_=un(t.props);let{dynamicChildren:S}=t;const E=(T,C,I)=>{T.shapeFlag&16&&c(T.children,C,I,s,r,i,o,l)},L=(T=t)=>{const C=un(T.props),I=T.target=vs(T.props,h),te=gs(I,T,w,g);I&&(i!=="svg"&&ur(I)?i="svg":i!=="mathml"&&cr(I)&&(i="mathml"),s&&s.isCE&&(s.ce._teleportTargets||(s.ce._teleportTargets=new Set)).add(I),C||(E(T,I,te),Bn(T,!1)))},D=T=>{const C=()=>{if(Xt.get(T)===C){if(Xt.delete(T),un(T.props)){const I=P(T.el)||n;E(T,I,T.anchor),Bn(T,!0)}L(T)}};Xt.set(T,C),ot(C,r)};if(e==null){const T=t.el=w(""),C=t.anchor=w("");if(g(T,n,a),g(C,n,a),Wl(t.props)||r&&r.pendingBranch){D(t);return}_&&(E(t,n,C),Bn(t,!0)),L()}else{t.el=e.el;const T=t.anchor=e.anchor,C=Xt.get(e);if(C){C.flags|=8,Xt.delete(e),D(t);return}t.targetStart=e.targetStart;const I=t.target=e.target,te=t.targetAnchor=e.targetAnchor,ue=un(e.props),ye=ue?n:I,we=ue?T:te;if(i==="svg"||ur(I)?i="svg":(i==="mathml"||cr(I))&&(i="mathml"),S?(f(e.dynamicChildren,S,ye,s,r,i,o),Gs(e,t,!0)):l||d(e,t,ye,we,s,r,i,o,!1),_)ue?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):va(t,n,T,u,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const V=t.target=vs(t.props,h);V&&va(t,V,null,u,0)}else ue&&va(t,I,te,u,1);Bn(t,_)}},remove(e,t,n,{um:a,o:{remove:s}},r){const{shapeFlag:i,children:o,anchor:l,targetStart:u,targetAnchor:c,target:d,props:f}=e;let g=r||!un(f);const h=Xt.get(e);if(h&&(h.flags|=8,Xt.delete(e),g=!1),d&&(s(u),s(c)),r&&s(l),i&16)for(let w=0;wWn(w,t&&(he(t)?t[y]:t),n,a,s));return}if(Cn(a)&&!s){a.shapeFlag&512&&a.type.__asyncResolved&&a.component.subTree.component&&Wn(e,t,n,a.component.subTree);return}const r=a.shapeFlag&4?zs(a.component):a.el,i=s?null:r,{i:o,r:l}=e,u=t&&t.r,c=o.refs===Le?o.refs={}:o.refs,d=o.setupState,f=Ae(d),g=d===Le?ci:w=>dr(c,w)?!1:Ce(f,w),h=(w,y)=>!(y&&dr(c,y));if(u!=null&&u!==l){if(fr(t),He(u))c[u]=null,g(u)&&(d[u]=null);else if(Ue(u)){const w=t;h(u,w.k)&&(u.value=null),w.k&&(c[w.k]=null)}}if(_e(l))oa(l,o,12,[i,c]);else{const w=He(l),y=Ue(l);if(w||y){const P=()=>{if(e.f){const _=w?g(l)?d[l]:c[l]:h()||!e.k?l.value:c[e.k];if(s)he(_)&&$s(_,r);else if(he(_))_.includes(r)||_.push(r);else if(w)c[l]=[r],g(l)&&(d[l]=c[l]);else{const S=[r];h(l,e.k)&&(l.value=S),e.k&&(c[e.k]=S)}}else w?(c[l]=i,g(l)&&(d[l]=i)):y&&(h(l,e.k)&&(l.value=i),e.k&&(c[e.k]=i))};if(i){const _=()=>{P(),wa.delete(e)};_.id=-1,wa.set(e,_),ot(_,n)}else fr(e),P()}}}function fr(e){const t=wa.get(e);t&&(t.flags|=8,wa.delete(e))}Ia().requestIdleCallback;Ia().cancelIdleCallback;const Cn=e=>!!e.type.__asyncLoader,Wi=e=>e.type.__isKeepAlive;function Xl(e,t){Ji(e,"a",t)}function eu(e,t){Ji(e,"da",t)}function Ji(e,t,n=st){const a=e.__wdc||(e.__wdc=()=>{let s=n;for(;s;){if(s.isDeactivated)return;s=s.parent}return e()});if(Oa(t,a,n),n){let s=n.parent;for(;s&&s.parent;)Wi(s.parent.vnode)&&tu(a,t,n,s),s=s.parent}}function tu(e,t,n,a){const s=Oa(t,e,a,!0);la(()=>{$s(a[t],s)},n)}function Oa(e,t,n=st,a=!1){if(n){const s=n[e]||(n[e]=[]),r=t.__weh||(t.__weh=(...i)=>{qt();const o=ua(n),l=Nt(t,n,e,i);return o(),zt(),l});return a?s.unshift(r):s.push(r),r}}const Zt=e=>(t,n=st)=>{(!sa||e==="sp")&&Oa(e,(...a)=>t(...a),n)},nu=Zt("bm"),bt=Zt("m"),au=Zt("bu"),su=Zt("u"),La=Zt("bum"),la=Zt("um"),ru=Zt("sp"),iu=Zt("rtg"),ou=Zt("rtc");function Yi(e,t=st){Oa("ec",e,t)}const lu="components";function sn(e,t){return cu(lu,e,!0,t)||e}const uu=Symbol.for("v-ndc");function cu(e,t,n=!0,a=!1){const s=dt||st;if(s){const r=s.type;{const o=Wu(r,!1);if(o&&(o===t||o===ft(t)||o===$a(ft(t))))return r}const i=pr(s[e]||r[e],t)||pr(s.appContext[e],t);return!i&&a?r:i}}function pr(e,t){return e&&(e[t]||e[ft(t)]||e[$a(ft(t))])}function Wt(e,t,n,a){let s;const r=n,i=he(e);if(i||He(e)){const o=i&&Gt(e);let l=!1,u=!1;o&&(l=!ht(e),u=Kt(e),e=Da(e)),s=new Array(e.length);for(let c=0,d=e.length;ct(o,l,void 0,r));else{const o=Object.keys(e);s=new Array(o.length);for(let l=0,u=o.length;l{const r=a.fn(...s);return r&&(r.key=a.key),r}:a.fn)}return e}function Na(e,t,n={},a,s){if(dt.ce||dt.parent&&Cn(dt.parent)&&dt.parent.ce){const u=Object.keys(n).length>0;return t!=="default"&&(n.name=t),b(),z(Pe,null,[$("slot",n,a&&a())],u?-2:64)}let r=e[t];r&&r._c&&(r._d=!1),b();const i=r&&Qi(r(n)),o=n.key||i&&i.key,l=z(Pe,{key:(o&&!yt(o)?o:`_${t}`)+(!i&&a?"_fb":"")},i||(a?a():[]),i&&e._===1?64:-2);return!s&&l.scopeId&&(l.slotScopeIds=[l.scopeId+"-s"]),r&&r._c&&(r._d=!0),l}function Qi(e){return e.some(t=>aa(t)?!(t.type===Jt||t.type===Pe&&!Qi(t.children)):!0)?e:null}const hs=e=>e?_o(e)?zs(e):hs(e.parent):null,Jn=tt(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=>hs(e.parent),$root:e=>hs(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>eo(e),$forceUpdate:e=>e.f||(e.f=()=>{Bs(e.update)}),$nextTick:e=>e.n||(e.n=pn.bind(e.proxy)),$watch:e=>zl.bind(e)}),Xa=(e,t)=>e!==Le&&!e.__isScriptSetup&&Ce(e,t),du={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:a,data:s,props:r,accessCache:i,type:o,appContext:l}=e;if(t[0]!=="$"){const f=i[t];if(f!==void 0)switch(f){case 1:return a[t];case 2:return s[t];case 4:return n[t];case 3:return r[t]}else{if(Xa(a,t))return i[t]=1,a[t];if(s!==Le&&Ce(s,t))return i[t]=2,s[t];if(Ce(r,t))return i[t]=3,r[t];if(n!==Le&&Ce(n,t))return i[t]=4,n[t];ms&&(i[t]=0)}}const u=Jn[t];let c,d;if(u)return t==="$attrs"&&at(e.attrs,"get",""),u(e);if((c=o.__cssModules)&&(c=c[t]))return c;if(n!==Le&&Ce(n,t))return i[t]=4,n[t];if(d=l.config.globalProperties,Ce(d,t))return d[t]},set({_:e},t,n){const{data:a,setupState:s,ctx:r}=e;return Xa(s,t)?(s[t]=n,!0):a!==Le&&Ce(a,t)?(a[t]=n,!0):Ce(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(r[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:a,appContext:s,props:r,type:i}},o){let l;return!!(n[o]||e!==Le&&o[0]!=="$"&&Ce(e,o)||Xa(t,o)||Ce(r,o)||Ce(a,o)||Ce(Jn,o)||Ce(s.config.globalProperties,o)||(l=i.__cssModules)&&l[o])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Ce(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function vr(e){return he(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let ms=!0;function fu(e){const t=eo(e),n=e.proxy,a=e.ctx;ms=!1,t.beforeCreate&&gr(t.beforeCreate,e,"bc");const{data:s,computed:r,methods:i,watch:o,provide:l,inject:u,created:c,beforeMount:d,mounted:f,beforeUpdate:g,updated:h,activated:w,deactivated:y,beforeDestroy:P,beforeUnmount:_,destroyed:S,unmounted:E,render:L,renderTracked:D,renderTriggered:T,errorCaptured:C,serverPrefetch:I,expose:te,inheritAttrs:ue,components:ye,directives:we,filters:V}=t;if(u&&pu(u,a,null),i)for(const K in i){const ee=i[K];_e(ee)&&(a[K]=ee.bind(n))}if(s){const K=s.call(n,n);Te(K)&&(e.data=Yt(K))}if(ms=!0,r)for(const K in r){const ee=r[K],fe=_e(ee)?ee.bind(n,n):_e(ee.get)?ee.get.bind(n,n):Pt,Se=!_e(ee)&&_e(ee.set)?ee.set.bind(n):Pt,Ee=Q({get:fe,set:Se});Object.defineProperty(a,K,{enumerable:!0,configurable:!0,get:()=>Ee.value,set:be=>Ee.value=be})}if(o)for(const K in o)Xi(o[K],a,n,K);if(l){const K=_e(l)?l.call(n):l;Reflect.ownKeys(K).forEach(ee=>{Kn(ee,K[ee])})}c&&gr(c,e,"c");function Y(K,ee){he(ee)?ee.forEach(fe=>K(fe.bind(n))):ee&&K(ee.bind(n))}if(Y(nu,d),Y(bt,f),Y(au,g),Y(su,h),Y(Xl,w),Y(eu,y),Y(Yi,C),Y(ou,D),Y(iu,T),Y(La,_),Y(la,E),Y(ru,I),he(te))if(te.length){const K=e.exposed||(e.exposed={});te.forEach(ee=>{Object.defineProperty(K,ee,{get:()=>n[ee],set:fe=>n[ee]=fe,enumerable:!0})})}else e.exposed||(e.exposed={});L&&e.render===Pt&&(e.render=L),ue!=null&&(e.inheritAttrs=ue),ye&&(e.components=ye),we&&(e.directives=we),I&&Ki(e)}function pu(e,t,n=Pt){he(e)&&(e=ys(e));for(const a in e){const s=e[a];let r;Te(s)?"default"in s?r=mt(s.from||a,s.default,!0):r=mt(s.from||a):r=mt(s),Ue(r)?Object.defineProperty(t,a,{enumerable:!0,configurable:!0,get:()=>r.value,set:i=>r.value=i}):t[a]=r}}function gr(e,t,n){Nt(he(e)?e.map(a=>a.bind(t.proxy)):e.bind(t.proxy),t,n)}function Xi(e,t,n,a){let s=a.includes(".")?qi(n,a):()=>n[a];if(He(e)){const r=t[e];_e(r)&&Ft(s,r)}else if(_e(e))Ft(s,e.bind(n));else if(Te(e))if(he(e))e.forEach(r=>Xi(r,t,n,a));else{const r=_e(e.handler)?e.handler.bind(n):t[e.handler];_e(r)&&Ft(s,r,e)}}function eo(e){const t=e.type,{mixins:n,extends:a}=t,{mixins:s,optionsCache:r,config:{optionMergeStrategies:i}}=e.appContext,o=r.get(t);let l;return o?l=o:!s.length&&!n&&!a?l=t:(l={},s.length&&s.forEach(u=>Sa(l,u,i,!0)),Sa(l,t,i)),Te(t)&&r.set(t,l),l}function Sa(e,t,n,a=!1){const{mixins:s,extends:r}=t;r&&Sa(e,r,n,!0),s&&s.forEach(i=>Sa(e,i,n,!0));for(const i in t)if(!(a&&i==="expose")){const o=vu[i]||n&&n[i];e[i]=o?o(e[i],t[i]):t[i]}return e}const vu={data:hr,props:mr,emits:mr,methods:Vn,computed:Vn,beforeCreate:it,created:it,beforeMount:it,mounted:it,beforeUpdate:it,updated:it,beforeDestroy:it,beforeUnmount:it,destroyed:it,unmounted:it,activated:it,deactivated:it,errorCaptured:it,serverPrefetch:it,components:Vn,directives:Vn,watch:hu,provide:hr,inject:gu};function hr(e,t){return t?e?function(){return tt(_e(e)?e.call(this,this):e,_e(t)?t.call(this,this):t)}:t:e}function gu(e,t){return Vn(ys(e),ys(t))}function ys(e){if(he(e)){const t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${ft(t)}Modifiers`]||e[`${vn(t)}Modifiers`];function bu(e,t,...n){if(e.isUnmounted)return;const a=e.vnode.props||Le;let s=n;const r=t.startsWith("update:"),i=r&&_u(a,t.slice(7));i&&(i.trim&&(s=n.map(c=>He(c)?c.trim():c)),i.number&&(s=n.map(nl)));let o,l=a[o=Ka(t)]||a[o=Ka(ft(t))];!l&&r&&(l=a[o=Ka(vn(t))]),l&&Nt(l,e,6,s);const u=a[o+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[o])return;e.emitted[o]=!0,Nt(u,e,6,s)}}const wu=new WeakMap;function no(e,t,n=!1){const a=n?wu:t.emitsCache,s=a.get(e);if(s!==void 0)return s;const r=e.emits;let i={},o=!1;if(!_e(e)){const l=u=>{const c=no(u,t,!0);c&&(o=!0,tt(i,c))};!n&&t.mixins.length&&t.mixins.forEach(l),e.extends&&l(e.extends),e.mixins&&e.mixins.forEach(l)}return!r&&!o?(Te(e)&&a.set(e,null),null):(he(r)?r.forEach(l=>i[l]=null):tt(i,r),Te(e)&&a.set(e,i),i)}function Ma(e,t){return!e||!Ca(t)?!1:(t=t.slice(2).replace(/Once$/,""),Ce(e,t[0].toLowerCase()+t.slice(1))||Ce(e,vn(t))||Ce(e,t))}function yr(e){const{type:t,vnode:n,proxy:a,withProxy:s,propsOptions:[r],slots:i,attrs:o,emit:l,render:u,renderCache:c,props:d,data:f,setupState:g,ctx:h,inheritAttrs:w}=e,y=ba(e);let P,_;try{if(n.shapeFlag&4){const E=s||a,L=E;P=It(u.call(L,E,c,d,g,f,h)),_=o}else{const E=t;P=It(E.length>1?E(d,{attrs:o,slots:i,emit:l}):E(d,null)),_=t.props?o:Su(o)}}catch(E){Yn.length=0,Fa(E,e,1),P=$(Jt)}let S=P;if(_&&w!==!1){const E=Object.keys(_),{shapeFlag:L}=S;E.length&&L&7&&(r&&E.some(Ea)&&(_=ku(_,r)),S=Tn(S,_,!1,!0))}return n.dirs&&(S=Tn(S,null,!1,!0),S.dirs=S.dirs?S.dirs.concat(n.dirs):n.dirs),n.transition&&Vs(S,n.transition),P=S,ba(y),P}const Su=e=>{let t;for(const n in e)(n==="class"||n==="style"||Ca(n))&&((t||(t={}))[n]=e[n]);return t},ku=(e,t)=>{const n={};for(const a in e)(!Ea(a)||!(a.slice(9)in t))&&(n[a]=e[a]);return n};function Au(e,t,n){const{props:a,children:s,component:r}=e,{props:i,children:o,patchFlag:l}=t,u=r.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&l>=0){if(l&1024)return!0;if(l&16)return a?_r(a,i,u):!!i;if(l&8){const c=t.dynamicProps;for(let d=0;dObject.create(so),io=e=>Object.getPrototypeOf(e)===so;function Cu(e,t,n,a=!1){const s={},r=ro();e.propsDefaults=Object.create(null),oo(e,t,s,r);for(const i in e.propsOptions[0])i in s||(s[i]=void 0);n?e.props=a?s:Li(s):e.type.props?e.props=s:e.props=r,e.attrs=r}function Eu(e,t,n,a){const{props:s,attrs:r,vnode:{patchFlag:i}}=e,o=Ae(s),[l]=e.propsOptions;let u=!1;if((a||i>0)&&!(i&16)){if(i&8){const c=e.vnode.dynamicProps;for(let d=0;d{l=!0;const[f,g]=lo(d,t,!0);tt(i,f),g&&o.push(...g)};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}if(!r&&!l)return Te(e)&&a.set(e,kn),kn;if(he(r))for(let c=0;ce==="_"||e==="_ctx"||e==="$stable",Hs=e=>he(e)?e.map(It):[It(e)],Tu=(e,t,n)=>{if(t._n)return t;const a=k((...s)=>Hs(t(...s)),n);return a._c=!1,a},uo=(e,t,n)=>{const a=e._ctx;for(const s in e){if(js(s))continue;const r=e[s];if(_e(r))t[s]=Tu(s,r,a);else if(r!=null){const i=Hs(r);t[s]=()=>i}}},co=(e,t)=>{const n=Hs(t);e.slots.default=()=>n},fo=(e,t,n)=>{for(const a in t)(n||!js(a))&&(e[a]=t[a])},$u=(e,t,n)=>{const a=e.slots=ro();if(e.vnode.shapeFlag&32){const s=t._;s?(fo(a,t,n),n&&gi(a,"_",s,!0)):uo(t,a)}else t&&co(e,t)},Iu=(e,t,n)=>{const{vnode:a,slots:s}=e;let r=!0,i=Le;if(a.shapeFlag&32){const o=t._;o?n&&o===1?r=!1:fo(s,t,n):(r=!t.$stable,uo(t,s)),i=t}else t&&(co(e,t),i={default:1});if(r)for(const o in s)!js(o)&&i[o]==null&&delete s[o]},ot=Lu;function Du(e){return Pu(e)}function Pu(e,t){const n=Ia();n.__VUE__=!0;const{insert:a,remove:s,patchProp:r,createElement:i,createText:o,createComment:l,setText:u,setElementText:c,parentNode:d,nextSibling:f,setScopeId:g=Pt,insertStaticContent:h}=e,w=(p,m,x,B=null,G=null,H=null,oe=void 0,re=null,ne=!!m.dynamicChildren)=>{if(p===m)return;p&&!Ln(p,m)&&(B=N(p),be(p,G,H,!0),p=null),m.patchFlag===-2&&(ne=!1,m.dynamicChildren=null);const{type:J,ref:de,shapeFlag:le}=m;switch(J){case Ua:y(p,m,x,B);break;case Jt:P(p,m,x,B);break;case ga:p==null&&_(m,x,B,oe);break;case Pe:ye(p,m,x,B,G,H,oe,re,ne);break;default:le&1?L(p,m,x,B,G,H,oe,re,ne):le&6?we(p,m,x,B,G,H,oe,re,ne):(le&64||le&128)&&J.process(p,m,x,B,G,H,oe,re,ne,A)}de!=null&&G?Wn(de,p&&p.ref,H,m||p,!m):de==null&&p&&p.ref!=null&&Wn(p.ref,null,H,p,!0)},y=(p,m,x,B)=>{if(p==null)a(m.el=o(m.children),x,B);else{const G=m.el=p.el;m.children!==p.children&&u(G,m.children)}},P=(p,m,x,B)=>{p==null?a(m.el=l(m.children||""),x,B):m.el=p.el},_=(p,m,x,B)=>{[p.el,p.anchor]=h(p.children,m,x,B,p.el,p.anchor)},S=({el:p,anchor:m},x,B)=>{let G;for(;p&&p!==m;)G=f(p),a(p,x,B),p=G;a(m,x,B)},E=({el:p,anchor:m})=>{let x;for(;p&&p!==m;)x=f(p),s(p),p=x;s(m)},L=(p,m,x,B,G,H,oe,re,ne)=>{if(m.type==="svg"?oe="svg":m.type==="math"&&(oe="mathml"),p==null)D(m,x,B,G,H,oe,re,ne);else{const J=p.el&&p.el._isVueCE?p.el:null;try{J&&J._beginPatch(),I(p,m,G,H,oe,re,ne)}finally{J&&J._endPatch()}}},D=(p,m,x,B,G,H,oe,re)=>{let ne,J;const{props:de,shapeFlag:le,transition:ce,dirs:ge}=p;if(ne=p.el=i(p.type,H,de&&de.is,de),le&8?c(ne,p.children):le&16&&C(p.children,ne,null,B,G,es(p,H),oe,re),ge&&rn(p,null,B,"created"),T(ne,p,p.scopeId,oe,B),de){for(const Re in de)Re!=="value"&&!Gn(Re)&&r(ne,Re,null,de[Re],H,B);"value"in de&&r(ne,"value",null,de.value,H),(J=de.onVnodeBeforeMount)&&Ct(J,B,p)}ge&&rn(p,null,B,"beforeMount");const ke=Fu(G,ce);ke&&ce.beforeEnter(ne),a(ne,m,x),((J=de&&de.onVnodeMounted)||ke||ge)&&ot(()=>{try{J&&Ct(J,B,p),ke&&ce.enter(ne),ge&&rn(p,null,B,"mounted")}finally{}},G)},T=(p,m,x,B,G)=>{if(x&&g(p,x),B)for(let H=0;H{for(let J=ne;J{const re=m.el=p.el;let{patchFlag:ne,dynamicChildren:J,dirs:de}=m;ne|=p.patchFlag&16;const le=p.props||Le,ce=m.props||Le;let ge;if(x&&on(x,!1),(ge=ce.onVnodeBeforeUpdate)&&Ct(ge,x,m,p),de&&rn(m,p,x,"beforeUpdate"),x&&on(x,!0),(le.innerHTML&&ce.innerHTML==null||le.textContent&&ce.textContent==null)&&c(re,""),J?te(p.dynamicChildren,J,re,x,B,es(m,G),H):oe||ee(p,m,re,null,x,B,es(m,G),H,!1),ne>0){if(ne&16)ue(re,le,ce,x,G);else if(ne&2&&le.class!==ce.class&&r(re,"class",null,ce.class,G),ne&4&&r(re,"style",le.style,ce.style,G),ne&8){const ke=m.dynamicProps;for(let Re=0;Re{ge&&Ct(ge,x,m,p),de&&rn(m,p,x,"updated")},B)},te=(p,m,x,B,G,H,oe)=>{for(let re=0;re{if(m!==x){if(m!==Le)for(const H in m)!Gn(H)&&!(H in x)&&r(p,H,m[H],null,G,B);for(const H in x){if(Gn(H))continue;const oe=x[H],re=m[H];oe!==re&&H!=="value"&&r(p,H,re,oe,G,B)}"value"in x&&r(p,"value",m.value,x.value,G)}},ye=(p,m,x,B,G,H,oe,re,ne)=>{const J=m.el=p?p.el:o(""),de=m.anchor=p?p.anchor:o("");let{patchFlag:le,dynamicChildren:ce,slotScopeIds:ge}=m;ge&&(re=re?re.concat(ge):ge),p==null?(a(J,x,B),a(de,x,B),C(m.children||[],x,de,G,H,oe,re,ne)):le>0&&le&64&&ce&&p.dynamicChildren&&p.dynamicChildren.length===ce.length?(te(p.dynamicChildren,ce,x,G,H,oe,re),(m.key!=null||G&&m===G.subTree)&&Gs(p,m,!0)):ee(p,m,x,de,G,H,oe,re,ne)},we=(p,m,x,B,G,H,oe,re,ne)=>{m.slotScopeIds=re,p==null?m.shapeFlag&512?G.ctx.activate(m,x,B,oe,ne):V(m,x,B,G,H,oe,ne):W(p,m,ne)},V=(p,m,x,B,G,H,oe)=>{const re=p.component=Hu(p,B,G);if(Wi(p)&&(re.ctx.renderer=A),Gu(re,!1,oe),re.asyncDep){if(G&&G.registerDep(re,Y,oe),!p.el){const ne=re.subTree=$(Jt);P(null,ne,m,x),p.placeholder=ne.el}}else Y(re,p,m,x,G,H,oe)},W=(p,m,x)=>{const B=m.component=p.component;if(Au(p,m,x))if(B.asyncDep&&!B.asyncResolved){K(B,m,x);return}else B.next=m,B.update();else m.el=p.el,B.vnode=m},Y=(p,m,x,B,G,H,oe)=>{const re=()=>{if(p.isMounted){let{next:le,bu:ce,u:ge,parent:ke,vnode:Re}=p;{const De=po(p);if(De){le&&(le.el=Re.el,K(p,le,oe)),De.asyncDep.then(()=>{ot(()=>{p.isUnmounted||J()},G)});return}}let Ie=le,Be;on(p,!1),le?(le.el=Re.el,K(p,le,oe)):le=Re,ce&&Wa(ce),(Be=le.props&&le.props.onVnodeBeforeUpdate)&&Ct(Be,ke,le,Re),on(p,!0);const ie=yr(p),O=p.subTree;p.subTree=ie,w(O,ie,d(O.el),N(O),p,G,H),le.el=ie.el,Ie===null&&xu(p,ie.el),ge&&ot(ge,G),(Be=le.props&&le.props.onVnodeUpdated)&&ot(()=>Ct(Be,ke,le,Re),G)}else{let le;const{el:ce,props:ge}=m,{bm:ke,m:Re,parent:Ie,root:Be,type:ie}=p,O=Cn(m);on(p,!1),ke&&Wa(ke),!O&&(le=ge&&ge.onVnodeBeforeMount)&&Ct(le,Ie,m),on(p,!0);{Be.ce&&Be.ce._hasShadowRoot()&&Be.ce._injectChildStyle(ie,p.parent?p.parent.type:void 0);const De=p.subTree=yr(p);w(null,De,x,B,p,G,H),m.el=De.el}if(Re&&ot(Re,G),!O&&(le=ge&&ge.onVnodeMounted)){const De=m;ot(()=>Ct(le,Ie,De),G)}(m.shapeFlag&256||Ie&&Cn(Ie.vnode)&&Ie.vnode.shapeFlag&256)&&p.a&&ot(p.a,G),p.isMounted=!0,m=x=B=null}};p.scope.on();const ne=p.effect=new Si(re);p.scope.off();const J=p.update=ne.run.bind(ne),de=p.job=ne.runIfDirty.bind(ne);de.i=p,de.id=p.uid,ne.scheduler=()=>Bs(de),on(p,!0),J()},K=(p,m,x)=>{m.component=p;const B=p.vnode.props;p.vnode=m,p.next=null,Eu(p,m.props,B,x),Iu(p,m.children,x),qt(),lr(p),zt()},ee=(p,m,x,B,G,H,oe,re,ne=!1)=>{const J=p&&p.children,de=p?p.shapeFlag:0,le=m.children,{patchFlag:ce,shapeFlag:ge}=m;if(ce>0){if(ce&128){Se(J,le,x,B,G,H,oe,re,ne);return}else if(ce&256){fe(J,le,x,B,G,H,oe,re,ne);return}}ge&8?(de&16&&$e(J,G,H),le!==J&&c(x,le)):de&16?ge&16?Se(J,le,x,B,G,H,oe,re,ne):$e(J,G,H,!0):(de&8&&c(x,""),ge&16&&C(le,x,B,G,H,oe,re,ne))},fe=(p,m,x,B,G,H,oe,re,ne)=>{p=p||kn,m=m||kn;const J=p.length,de=m.length,le=Math.min(J,de);let ce;for(ce=0;cede?$e(p,G,H,!0,!1,le):C(m,x,B,G,H,oe,re,ne,le)},Se=(p,m,x,B,G,H,oe,re,ne)=>{let J=0;const de=m.length;let le=p.length-1,ce=de-1;for(;J<=le&&J<=ce;){const ge=p[J],ke=m[J]=ne?jt(m[J]):It(m[J]);if(Ln(ge,ke))w(ge,ke,x,null,G,H,oe,re,ne);else break;J++}for(;J<=le&&J<=ce;){const ge=p[le],ke=m[ce]=ne?jt(m[ce]):It(m[ce]);if(Ln(ge,ke))w(ge,ke,x,null,G,H,oe,re,ne);else break;le--,ce--}if(J>le){if(J<=ce){const ge=ce+1,ke=gece)for(;J<=le;)be(p[J],G,H,!0),J++;else{const ge=J,ke=J,Re=new Map;for(J=ke;J<=ce;J++){const Ke=m[J]=ne?jt(m[J]):It(m[J]);Ke.key!=null&&Re.set(Ke.key,J)}let Ie,Be=0;const ie=ce-ke+1;let O=!1,De=0;const et=new Array(ie);for(J=0;J=ie){be(Ke,G,H,!0);continue}let ze;if(Ke.key!=null)ze=Re.get(Ke.key);else for(Ie=ke;Ie<=ce;Ie++)if(et[Ie-ke]===0&&Ln(Ke,m[Ie])){ze=Ie;break}ze===void 0?be(Ke,G,H,!0):(et[ze-ke]=J+1,ze>=De?De=ze:O=!0,w(Ke,m[ze],x,null,G,H,oe,re,ne),Be++)}const ve=O?Ou(et):kn;for(Ie=ve.length-1,J=ie-1;J>=0;J--){const Ke=ke+J,ze=m[Ke],Fn=m[Ke+1],ar=Ke+1{const{el:H,type:oe,transition:re,children:ne,shapeFlag:J}=p;if(J&6){Ee(p.component.subTree,m,x,B);return}if(J&128){p.suspense.move(m,x,B);return}if(J&64){oe.move(p,m,x,A);return}if(oe===Pe){a(H,m,x);for(let le=0;lere.enter(H),G);else{const{leave:le,delayLeave:ce,afterLeave:ge}=re,ke=()=>{p.ctx.isUnmounted?s(H):a(H,m,x)},Re=()=>{H._isLeaving&&H[Ql](!0),le(H,()=>{ke(),ge&&ge()})};ce?ce(H,ke,Re):Re()}else a(H,m,x)},be=(p,m,x,B=!1,G=!1)=>{const{type:H,props:oe,ref:re,children:ne,dynamicChildren:J,shapeFlag:de,patchFlag:le,dirs:ce,cacheIndex:ge,memo:ke}=p;if(le===-2&&(G=!1),re!=null&&(qt(),Wn(re,null,x,p,!0),zt()),ge!=null&&(m.renderCache[ge]=void 0),de&256){m.ctx.deactivate(p);return}const Re=de&1&&ce,Ie=!Cn(p);let Be;if(Ie&&(Be=oe&&oe.onVnodeBeforeUnmount)&&Ct(Be,m,p),de&6)je(p.component,x,B);else{if(de&128){p.suspense.unmount(x,B);return}Re&&rn(p,null,m,"beforeUnmount"),de&64?p.type.remove(p,m,x,A,B):J&&!J.hasOnce&&(H!==Pe||le>0&&le&64)?$e(J,m,x,!1,!0):(H===Pe&&le&384||!G&&de&16)&&$e(ne,m,x),B&&Me(p)}const ie=ke!=null&&ge==null;(Ie&&(Be=oe&&oe.onVnodeUnmounted)||Re||ie)&&ot(()=>{Be&&Ct(Be,m,p),Re&&rn(p,null,m,"unmounted"),ie&&(p.el=null)},x)},Me=p=>{const{type:m,el:x,anchor:B,transition:G}=p;if(m===Pe){Ve(x,B);return}if(m===ga){E(p);return}const H=()=>{s(x),G&&!G.persisted&&G.afterLeave&&G.afterLeave()};if(p.shapeFlag&1&&G&&!G.persisted){const{leave:oe,delayLeave:re}=G,ne=()=>oe(x,H);re?re(p.el,H,ne):ne()}else H()},Ve=(p,m)=>{let x;for(;p!==m;)x=f(p),s(p),p=x;s(m)},je=(p,m,x)=>{const{bum:B,scope:G,job:H,subTree:oe,um:re,m:ne,a:J}=p;wr(ne),wr(J),B&&Wa(B),G.stop(),H&&(H.flags|=8,be(oe,p,m,x)),re&&ot(re,m),ot(()=>{p.isUnmounted=!0},m)},$e=(p,m,x,B=!1,G=!1,H=0)=>{for(let oe=H;oe{if(p.shapeFlag&6)return N(p.component.subTree);if(p.shapeFlag&128)return p.suspense.next();const m=f(p.anchor||p.el),x=m&&m[zi];return x?f(x):m};let ae=!1;const R=(p,m,x)=>{let B;p==null?m._vnode&&(be(m._vnode,null,null,!0),B=m._vnode.component):w(m._vnode||null,p,m,null,null,null,x),m._vnode=p,ae||(ae=!0,lr(B),Vi(),ae=!1)},A={p:w,um:be,m:Ee,r:Me,mt:V,mc:C,pc:ee,pbc:te,n:N,o:e};return{render:R,hydrate:void 0,createApp:yu(R)}}function es({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function on({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Fu(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Gs(e,t,n=!1){const a=e.children,s=t.children;if(he(a)&&he(s))for(let r=0;r>1,e[n[o]]0&&(t[a]=n[r-1]),n[r]=a)}}for(r=n.length,i=n[r-1];r-- >0;)n[r]=i,i=t[i];return n}function po(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:po(t)}function wr(e){if(e)for(let t=0;te.__isSuspense;function Lu(e,t){t&&t.pendingBranch?he(e)?t.effects.push(...e):t.effects.push(e):jl(e)}const Pe=Symbol.for("v-fgt"),Ua=Symbol.for("v-txt"),Jt=Symbol.for("v-cmt"),ga=Symbol.for("v-stc"),Yn=[];let vt=null;function b(e=!1){Yn.push(vt=e?null:[])}function Nu(){Yn.pop(),vt=Yn[Yn.length-1]||null}let na=1;function ka(e,t=!1){na+=e,e<0&&vt&&t&&(vt.hasOnce=!0)}function ho(e){return e.dynamicChildren=na>0?vt||kn:null,Nu(),na>0&&vt&&vt.push(e),e}function q(e,t,n,a,s,r){return ho(F(e,t,n,a,s,r,!0))}function z(e,t,n,a,s){return ho($(e,t,n,a,s,!0))}function aa(e){return e?e.__v_isVNode===!0:!1}function Ln(e,t){return e.type===t.type&&e.key===t.key}const mo=({key:e})=>e??null,ha=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?He(e)||Ue(e)||_e(e)?{i:dt,r:e,k:t,f:!!n}:e:null);function F(e,t=null,n=null,a=0,s=null,r=e===Pe?0:1,i=!1,o=!1){const l={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&mo(t),ref:t&&ha(t),scopeId:Hi,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:r,patchFlag:a,dynamicProps:s,dynamicChildren:null,appContext:null,ctx:dt};return o?(qs(l,n),r&128&&e.normalize(l)):n&&(l.shapeFlag|=He(n)?8:16),na>0&&!i&&vt&&(l.patchFlag>0||r&6)&&l.patchFlag!==32&&vt.push(l),l}const $=Mu;function Mu(e,t=null,n=null,a=0,s=null,r=!1){if((!e||e===uu)&&(e=Jt),aa(e)){const o=Tn(e,t,!0);return n&&qs(o,n),na>0&&!r&&vt&&(o.shapeFlag&6?vt[vt.indexOf(e)]=o:vt.push(o)),o.patchFlag=-2,o}if(Ju(e)&&(e=e.__vccOpts),t){t=Uu(t);let{class:o,style:l}=t;o&&!He(o)&&(t.class=Lt(o)),Te(l)&&(Pa(l)&&!he(l)&&(l=tt({},l)),t.style=Is(l))}const i=He(e)?1:go(e)?128:Kl(e)?64:Te(e)?4:_e(e)?2:0;return F(e,t,n,a,s,i,r,!0)}function Uu(e){return e?Pa(e)||io(e)?tt({},e):e:null}function Tn(e,t,n=!1,a=!1){const{props:s,ref:r,patchFlag:i,children:o,transition:l}=e,u=t?yo(s||{},t):s,c={__v_isVNode:!0,__v_skip:!0,type:e.type,props:u,key:u&&mo(u),ref:t&&t.ref?n&&r?he(r)?r.concat(ha(t)):[r,ha(t)]:ha(t):r,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:o,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Pe?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:l,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Tn(e.ssContent),ssFallback:e.ssFallback&&Tn(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return l&&a&&Vs(c,l.clone(c)),c}function U(e=" ",t=0){return $(Ua,null,e,t)}function Bu(e,t){const n=$(ga,null,e);return n.staticCount=t,n}function se(e="",t=!1){return t?(b(),z(Jt,null,e)):$(Jt,null,e)}function It(e){return e==null||typeof e=="boolean"?$(Jt):he(e)?$(Pe,null,e.slice()):aa(e)?jt(e):$(Ua,null,String(e))}function jt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Tn(e)}function qs(e,t){let n=0;const{shapeFlag:a}=e;if(t==null)t=null;else if(he(t))n=16;else if(typeof t=="object")if(a&65){const s=t.default;s&&(s._c&&(s._d=!1),qs(e,s()),s._c&&(s._d=!0));return}else{n=32;const s=t._;!s&&!io(t)?t._ctx=dt:s===3&&dt&&(dt.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else _e(t)?(t={default:t,_ctx:dt},n=32):(t=String(t),a&64?(n=16,t=[U(t)]):n=8);e.children=t,e.shapeFlag|=n}function yo(...e){const t={};for(let n=0;nst||dt;let Aa,bs;{const e=Ia(),t=(n,a)=>{let s;return(s=e[n])||(s=e[n]=[]),s.push(a),r=>{s.length>1?s.forEach(i=>i(r)):s[0](r)}};Aa=t("__VUE_INSTANCE_SETTERS__",n=>st=n),bs=t("__VUE_SSR_SETTERS__",n=>sa=n)}const ua=e=>{const t=st;return Aa(e),e.scope.on(),()=>{e.scope.off(),Aa(t)}},Sr=()=>{st&&st.scope.off(),Aa(null)};function _o(e){return e.vnode.shapeFlag&4}let sa=!1;function Gu(e,t=!1,n=!1){t&&bs(t);const{props:a,children:s}=e.vnode,r=_o(e);Cu(e,a,r,t),$u(e,s,n||t);const i=r?qu(e,t):void 0;return t&&bs(!1),i}function qu(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,du);const{setup:a}=n;if(a){qt();const s=e.setupContext=a.length>1?Ku(e):null,r=ua(e),i=oa(a,e,0,[e.props,s]),o=fi(i);if(zt(),r(),(o||e.sp)&&!Cn(e)&&Ki(e),o){if(i.then(Sr,Sr),t)return i.then(l=>{kr(e,l)}).catch(l=>{Fa(l,e,0)});e.asyncDep=i}else kr(e,i)}else bo(e)}function kr(e,t,n){_e(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Te(t)&&(e.setupState=Mi(t)),bo(e)}function bo(e,t,n){const a=e.type;e.render||(e.render=a.render||Pt);{const s=ua(e);qt();try{fu(e)}finally{zt(),s()}}}const zu={get(e,t){return at(e,"get",""),e[t]}};function Ku(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,zu),slots:e.slots,emit:e.emit,expose:t}}function zs(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Mi(Us(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Jn)return Jn[n](e)},has(t,n){return n in t||n in Jn}})):e.proxy}function Wu(e,t=!0){return _e(e)?e.displayName||e.name:e.name||t&&e.__name}function Ju(e){return _e(e)&&"__vccOpts"in e}const Q=(e,t)=>Nl(e,t,sa);function j(e,t,n){try{ka(-1);const a=arguments.length;return a===2?Te(t)&&!he(t)?aa(t)?$(e,null,[t]):$(e,t):$(e,null,t):(a>3?n=Array.prototype.slice.call(arguments,2):a===3&&aa(n)&&(n=[n]),$(e,t,n))}finally{ka(1)}}const Yu="3.5.33";/** -* @vue/runtime-dom v3.5.33 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let ws;const Ar=typeof window<"u"&&window.trustedTypes;if(Ar)try{ws=Ar.createPolicy("vue",{createHTML:e=>e})}catch{}const wo=ws?e=>ws.createHTML(e):e=>e,Zu="http://www.w3.org/2000/svg",Qu="http://www.w3.org/1998/Math/MathML",Vt=typeof document<"u"?document:null,xr=Vt&&Vt.createElement("template"),Xu={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,a)=>{const s=t==="svg"?Vt.createElementNS(Zu,e):t==="mathml"?Vt.createElementNS(Qu,e):n?Vt.createElement(e,{is:n}):Vt.createElement(e);return e==="select"&&a&&a.multiple!=null&&s.setAttribute("multiple",a.multiple),s},createText:e=>Vt.createTextNode(e),createComment:e=>Vt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Vt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,a,s,r){const i=n?n.previousSibling:t.lastChild;if(s&&(s===r||s.nextSibling))for(;t.insertBefore(s.cloneNode(!0),n),!(s===r||!(s=s.nextSibling)););else{xr.innerHTML=wo(a==="svg"?`${e}`:a==="mathml"?`${e}`:e);const o=xr.content;if(a==="svg"||a==="mathml"){const l=o.firstChild;for(;l.firstChild;)o.appendChild(l.firstChild);o.removeChild(l)}t.insertBefore(o,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},ec=Symbol("_vtc");function tc(e,t,n){const a=e[ec];a&&(t=(t?[t,...a]:[...a]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Cr=Symbol("_vod"),nc=Symbol("_vsh"),ac=Symbol(""),sc=/(?:^|;)\s*display\s*:/;function rc(e,t,n){const a=e.style,s=He(n);let r=!1;if(n&&!s){if(t)if(He(t))for(const i of t.split(";")){const o=i.slice(0,i.indexOf(":")).trim();n[o]==null&&jn(a,o,"")}else for(const i in t)n[i]==null&&jn(a,i,"");for(const i in n){i==="display"&&(r=!0);const o=n[i];o!=null?oc(e,i,!He(t)&&t?t[i]:void 0,o)||jn(a,i,o):jn(a,i,"")}}else if(s){if(t!==n){const i=a[ac];i&&(n+=";"+i),a.cssText=n,r=sc.test(n)}}else t&&e.removeAttribute("style");Cr in e&&(e[Cr]=r?a.display:"",e[nc]&&(a.display="none"))}const Er=/\s*!important$/;function jn(e,t,n){if(he(n))n.forEach(a=>jn(e,t,a));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const a=ic(e,t);Er.test(n)?e.setProperty(vn(a),n.replace(Er,""),"important"):e[a]=n}}const Rr=["Webkit","Moz","ms"],ts={};function ic(e,t){const n=ts[t];if(n)return n;let a=ft(t);if(a!=="filter"&&a in e)return ts[t]=a;a=$a(a);for(let s=0;sns||(fc.then(()=>ns=0),ns=Date.now());function vc(e,t){const n=a=>{if(!a._vts)a._vts=Date.now();else if(a._vts<=n.attached)return;Nt(gc(a,n.value),t,5,[a])};return n.value=e,n.attached=pc(),n}function gc(e,t){if(he(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(a=>s=>!s._stopped&&a&&a(s))}else return t}const Fr=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,hc=(e,t,n,a,s,r)=>{const i=s==="svg";t==="class"?tc(e,a,i):t==="style"?rc(e,n,a):Ca(t)?Ea(t)||cc(e,t,n,a,r):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):mc(e,t,a,i))?(Ir(e,t,a),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&$r(e,t,a,i,r,t!=="value")):e._isVueCE&&(yc(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!He(a)))?Ir(e,ft(t),a,r,t):(t==="true-value"?e._trueValue=a:t==="false-value"&&(e._falseValue=a),$r(e,t,a,i))};function mc(e,t,n,a){if(a)return!!(t==="innerHTML"||t==="textContent"||t in e&&Fr(t)&&_e(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const s=e.tagName;if(s==="IMG"||s==="VIDEO"||s==="CANVAS"||s==="SOURCE")return!1}return Fr(t)&&He(n)?!1:t in e}function yc(e,t){const n=e._def.props;if(!n)return!1;const a=ft(t);return Array.isArray(n)?n.some(s=>ft(s)===a):Object.keys(n).some(s=>ft(s)===a)}const _c=["ctrl","shift","alt","meta"],bc={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)=>_c.some(n=>e[`${n}Key`]&&!t.includes(n))},Va=(e,t)=>{if(!e)return e;const n=e._withMods||(e._withMods={}),a=t.join(".");return n[a]||(n[a]=((s,...r)=>{for(let i=0;i{const t=Sc().createApp(...e),{mount:n}=t;return t.mount=a=>{const s=xc(a);if(!s)return;const r=t._component;!_e(r)&&!r.render&&!r.template&&(r.template=s.innerHTML),s.nodeType===1&&(s.textContent="");const i=n(s,!1,Ac(s));return s instanceof Element&&(s.removeAttribute("v-cloak"),s.setAttribute("data-v-app","")),i},t});function Ac(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function xc(e){return He(e)?document.querySelector(e):e}/*! - * pinia v2.3.1 - * (c) 2025 Eduardo San Martin Morote - * @license MIT - */let So;const ja=e=>So=e,ko=Symbol();function Ss(e){return e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"&&typeof e.toJSON!="function"}var Zn;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(Zn||(Zn={}));function Cc(){const e=bi(!0),t=e.run(()=>Z({}));let n=[],a=[];const s=Us({install(r){ja(s),s._a=r,r.provide(ko,s),r.config.globalProperties.$pinia=s,a.forEach(i=>n.push(i)),a=[]},use(r){return this._a?n.push(r):a.push(r),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return s}const Ao=()=>{};function Lr(e,t,n,a=Ao){e.push(t);const s=()=>{const r=e.indexOf(t);r>-1&&(e.splice(r,1),a())};return!n&&wi()&&cl(s),s}function bn(e,...t){e.slice().forEach(n=>{n(...t)})}const Ec=e=>e(),Nr=Symbol(),as=Symbol();function ks(e,t){e instanceof Map&&t instanceof Map?t.forEach((n,a)=>e.set(a,n)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const n in t){if(!t.hasOwnProperty(n))continue;const a=t[n],s=e[n];Ss(s)&&Ss(a)&&e.hasOwnProperty(n)&&!Ue(a)&&!Gt(a)?e[n]=ks(s,a):e[n]=a}return e}const Rc=Symbol();function Tc(e){return!Ss(e)||!e.hasOwnProperty(Rc)}const{assign:en}=Object;function $c(e){return!!(Ue(e)&&e.effect)}function Ic(e,t,n,a){const{state:s,actions:r,getters:i}=t,o=n.state.value[e];let l;function u(){o||(n.state.value[e]=s?s():{});const c=Pl(n.state.value[e]);return en(c,r,Object.keys(i||{}).reduce((d,f)=>(d[f]=Us(Q(()=>{ja(n);const g=n._s.get(e);return i[f].call(g,g)})),d),{}))}return l=xo(e,u,t,n,a,!0),l}function xo(e,t,n={},a,s,r){let i;const o=en({actions:{}},n),l={deep:!0};let u,c,d=[],f=[],g;const h=a.state.value[e];!r&&!h&&(a.state.value[e]={});let w;function y(C){let I;u=c=!1,typeof C=="function"?(C(a.state.value[e]),I={type:Zn.patchFunction,storeId:e,events:g}):(ks(a.state.value[e],C),I={type:Zn.patchObject,payload:C,storeId:e,events:g});const te=w=Symbol();pn().then(()=>{w===te&&(u=!0)}),c=!0,bn(d,I,a.state.value[e])}const P=r?function(){const{state:I}=n,te=I?I():{};this.$patch(ue=>{en(ue,te)})}:Ao;function _(){i.stop(),d=[],f=[],a._s.delete(e)}const S=(C,I="")=>{if(Nr in C)return C[as]=I,C;const te=function(){ja(a);const ue=Array.from(arguments),ye=[],we=[];function V(K){ye.push(K)}function W(K){we.push(K)}bn(f,{args:ue,name:te[as],store:L,after:V,onError:W});let Y;try{Y=C.apply(this&&this.$id===e?this:L,ue)}catch(K){throw bn(we,K),K}return Y instanceof Promise?Y.then(K=>(bn(ye,K),K)).catch(K=>(bn(we,K),Promise.reject(K))):(bn(ye,Y),Y)};return te[Nr]=!0,te[as]=I,te},E={_p:a,$id:e,$onAction:Lr.bind(null,f),$patch:y,$reset:P,$subscribe(C,I={}){const te=Lr(d,C,I.detached,()=>ue()),ue=i.run(()=>Ft(()=>a.state.value[e],ye=>{(I.flush==="sync"?c:u)&&C({storeId:e,type:Zn.direct,events:g},ye)},en({},l,I)));return te},$dispose:_},L=Yt(E);a._s.set(e,L);const T=(a._a&&a._a.runWithContext||Ec)(()=>a._e.run(()=>(i=bi()).run(()=>t({action:S}))));for(const C in T){const I=T[C];if(Ue(I)&&!$c(I)||Gt(I))r||(h&&Tc(I)&&(Ue(I)?I.value=h[C]:ks(I,h[C])),a.state.value[e][C]=I);else if(typeof I=="function"){const te=S(I,C);T[C]=te,o.actions[C]=I}}return en(L,T),en(Ae(L),T),Object.defineProperty(L,"$state",{get:()=>a.state.value[e],set:C=>{y(I=>{en(I,C)})}}),a._p.forEach(C=>{en(L,i.run(()=>C({store:L,app:a._a,pinia:a,options:o})))}),h&&r&&n.hydrate&&n.hydrate(L.$state,h),u=!0,c=!0,L}/*! #__NO_SIDE_EFFECTS__ */function gn(e,t,n){let a,s;const r=typeof t=="function";typeof e=="string"?(a=e,s=r?n:t):(s=e,a=e.id);function i(o,l){const u=Hl();return o=o||(u?mt(ko,null):null),o&&ja(o),o=So,o._s.has(a)||(r?xo(a,t,s,o):Ic(a,s,o)),o._s.get(a)}return i.$id=a,i}/*! - * vue-router v4.6.4 - * (c) 2025 Eduardo San Martin Morote - * @license MIT - */const Sn=typeof document<"u";function Co(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function Dc(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&Co(e.default)}const xe=Object.assign;function ss(e,t){const n={};for(const a in t){const s=t[a];n[a]=At(s)?s.map(e):e(s)}return n}const Qn=()=>{},At=Array.isArray;function Mr(e,t){const n={};for(const a in e)n[a]=a in t?t[a]:e[a];return n}const Eo=/#/g,Pc=/&/g,Fc=/\//g,Oc=/=/g,Lc=/\?/g,Ro=/\+/g,Nc=/%5B/g,Mc=/%5D/g,To=/%5E/g,Uc=/%60/g,$o=/%7B/g,Bc=/%7C/g,Io=/%7D/g,Vc=/%20/g;function Ks(e){return e==null?"":encodeURI(""+e).replace(Bc,"|").replace(Nc,"[").replace(Mc,"]")}function jc(e){return Ks(e).replace($o,"{").replace(Io,"}").replace(To,"^")}function As(e){return Ks(e).replace(Ro,"%2B").replace(Vc,"+").replace(Eo,"%23").replace(Pc,"%26").replace(Uc,"`").replace($o,"{").replace(Io,"}").replace(To,"^")}function Hc(e){return As(e).replace(Oc,"%3D")}function Gc(e){return Ks(e).replace(Eo,"%23").replace(Lc,"%3F")}function qc(e){return Gc(e).replace(Fc,"%2F")}function ra(e){if(e==null)return null;try{return decodeURIComponent(""+e)}catch{}return""+e}const zc=/\/$/,Kc=e=>e.replace(zc,"");function rs(e,t,n="/"){let a,s={},r="",i="";const o=t.indexOf("#");let l=t.indexOf("?");return l=o>=0&&l>o?-1:l,l>=0&&(a=t.slice(0,l),r=t.slice(l,o>0?o:t.length),s=e(r.slice(1))),o>=0&&(a=a||t.slice(0,o),i=t.slice(o,t.length)),a=Zc(a??t,n),{fullPath:a+r+i,path:a,query:s,hash:ra(i)}}function Wc(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function Ur(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Jc(e,t,n){const a=t.matched.length-1,s=n.matched.length-1;return a>-1&&a===s&&$n(t.matched[a],n.matched[s])&&Do(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function $n(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Do(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!Yc(e[n],t[n]))return!1;return!0}function Yc(e,t){return At(e)?Br(e,t):At(t)?Br(t,e):(e==null?void 0:e.valueOf())===(t==null?void 0:t.valueOf())}function Br(e,t){return At(t)?e.length===t.length&&e.every((n,a)=>n===t[a]):e.length===1&&e[0]===t}function Zc(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),a=e.split("/"),s=a[a.length-1];(s===".."||s===".")&&a.push("");let r=n.length-1,i,o;for(i=0;i1&&r--;else break;return n.slice(0,r).join("/")+"/"+a.slice(i).join("/")}const Qt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};let xs=(function(e){return e.pop="pop",e.push="push",e})({}),is=(function(e){return e.back="back",e.forward="forward",e.unknown="",e})({});function Qc(e){if(!e)if(Sn){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Kc(e)}const Xc=/^[^#]+#/;function ed(e,t){return e.replace(Xc,"#")+t}function td(e,t){const n=document.documentElement.getBoundingClientRect(),a=e.getBoundingClientRect();return{behavior:t.behavior,left:a.left-n.left-(t.left||0),top:a.top-n.top-(t.top||0)}}const Ha=()=>({left:window.scrollX,top:window.scrollY});function nd(e){let t;if("el"in e){const n=e.el,a=typeof n=="string"&&n.startsWith("#"),s=typeof n=="string"?a?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!s)return;t=td(s,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function Vr(e,t){return(history.state?history.state.position-t:-1)+e}const Cs=new Map;function ad(e,t){Cs.set(e,t)}function sd(e){const t=Cs.get(e);return Cs.delete(e),t}function rd(e){return typeof e=="string"||e&&typeof e=="object"}function Po(e){return typeof e=="string"||typeof e=="symbol"}let Ge=(function(e){return e[e.MATCHER_NOT_FOUND=1]="MATCHER_NOT_FOUND",e[e.NAVIGATION_GUARD_REDIRECT=2]="NAVIGATION_GUARD_REDIRECT",e[e.NAVIGATION_ABORTED=4]="NAVIGATION_ABORTED",e[e.NAVIGATION_CANCELLED=8]="NAVIGATION_CANCELLED",e[e.NAVIGATION_DUPLICATED=16]="NAVIGATION_DUPLICATED",e})({});const Fo=Symbol("");Ge.MATCHER_NOT_FOUND+"",Ge.NAVIGATION_GUARD_REDIRECT+"",Ge.NAVIGATION_ABORTED+"",Ge.NAVIGATION_CANCELLED+"",Ge.NAVIGATION_DUPLICATED+"";function In(e,t){return xe(new Error,{type:e,[Fo]:!0},t)}function Bt(e,t){return e instanceof Error&&Fo in e&&(t==null||!!(e.type&t))}const id=["params","query","hash"];function od(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;const t={};for(const n of id)n in e&&(t[n]=e[n]);return JSON.stringify(t,null,2)}function ld(e){const t={};if(e===""||e==="?")return t;const n=(e[0]==="?"?e.slice(1):e).split("&");for(let a=0;as&&As(s)):[a&&As(a)]).forEach(s=>{s!==void 0&&(t+=(t.length?"&":"")+n,s!=null&&(t+="="+s))})}return t}function ud(e){const t={};for(const n in e){const a=e[n];a!==void 0&&(t[n]=At(a)?a.map(s=>s==null?null:""+s):a==null?a:""+a)}return t}const cd=Symbol(""),Hr=Symbol(""),Ga=Symbol(""),Ws=Symbol(""),Es=Symbol("");function Nn(){let e=[];function t(a){return e.push(a),()=>{const s=e.indexOf(a);s>-1&&e.splice(s,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function nn(e,t,n,a,s,r=i=>i()){const i=a&&(a.enterCallbacks[s]=a.enterCallbacks[s]||[]);return()=>new Promise((o,l)=>{const u=f=>{f===!1?l(In(Ge.NAVIGATION_ABORTED,{from:n,to:t})):f instanceof Error?l(f):rd(f)?l(In(Ge.NAVIGATION_GUARD_REDIRECT,{from:t,to:f})):(i&&a.enterCallbacks[s]===i&&typeof f=="function"&&i.push(f),o())},c=r(()=>e.call(a&&a.instances[s],t,n,u));let d=Promise.resolve(c);e.length<3&&(d=d.then(u)),d.catch(f=>l(f))})}function os(e,t,n,a,s=r=>r()){const r=[];for(const i of e)for(const o in i.components){let l=i.components[o];if(!(t!=="beforeRouteEnter"&&!i.instances[o]))if(Co(l)){const u=(l.__vccOpts||l)[t];u&&r.push(nn(u,n,a,i,o,s))}else{let u=l();r.push(()=>u.then(c=>{if(!c)throw new Error(`Couldn't resolve component "${o}" at "${i.path}"`);const d=Dc(c)?c.default:c;i.mods[o]=c,i.components[o]=d;const f=(d.__vccOpts||d)[t];return f&&nn(f,n,a,i,o,s)()}))}}return r}function dd(e,t){const n=[],a=[],s=[],r=Math.max(t.matched.length,e.matched.length);for(let i=0;i$n(u,o))?a.push(o):n.push(o));const l=e.matched[i];l&&(t.matched.find(u=>$n(u,l))||s.push(l))}return[n,a,s]}/*! - * vue-router v4.6.4 - * (c) 2025 Eduardo San Martin Morote - * @license MIT - */let fd=()=>location.protocol+"//"+location.host;function Oo(e,t){const{pathname:n,search:a,hash:s}=t,r=e.indexOf("#");if(r>-1){let i=s.includes(e.slice(r))?e.slice(r).length:1,o=s.slice(i);return o[0]!=="/"&&(o="/"+o),Ur(o,"")}return Ur(n,e)+a+s}function pd(e,t,n,a){let s=[],r=[],i=null;const o=({state:f})=>{const g=Oo(e,location),h=n.value,w=t.value;let y=0;if(f){if(n.value=g,t.value=f,i&&i===h){i=null;return}y=w?f.position-w.position:0}else a(g);s.forEach(P=>{P(n.value,h,{delta:y,type:xs.pop,direction:y?y>0?is.forward:is.back:is.unknown})})};function l(){i=n.value}function u(f){s.push(f);const g=()=>{const h=s.indexOf(f);h>-1&&s.splice(h,1)};return r.push(g),g}function c(){if(document.visibilityState==="hidden"){const{history:f}=window;if(!f.state)return;f.replaceState(xe({},f.state,{scroll:Ha()}),"")}}function d(){for(const f of r)f();r=[],window.removeEventListener("popstate",o),window.removeEventListener("pagehide",c),document.removeEventListener("visibilitychange",c)}return window.addEventListener("popstate",o),window.addEventListener("pagehide",c),document.addEventListener("visibilitychange",c),{pauseListeners:l,listen:u,destroy:d}}function Gr(e,t,n,a=!1,s=!1){return{back:e,current:t,forward:n,replaced:a,position:window.history.length,scroll:s?Ha():null}}function vd(e){const{history:t,location:n}=window,a={value:Oo(e,n)},s={value:t.state};s.value||r(a.value,{back:null,current:a.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function r(l,u,c){const d=e.indexOf("#"),f=d>-1?(n.host&&document.querySelector("base")?e:e.slice(d))+l:fd()+e+l;try{t[c?"replaceState":"pushState"](u,"",f),s.value=u}catch(g){console.error(g),n[c?"replace":"assign"](f)}}function i(l,u){r(l,xe({},t.state,Gr(s.value.back,l,s.value.forward,!0),u,{position:s.value.position}),!0),a.value=l}function o(l,u){const c=xe({},s.value,t.state,{forward:l,scroll:Ha()});r(c.current,c,!0),r(l,xe({},Gr(a.value,l,null),{position:c.position+1},u),!1),a.value=l}return{location:a,state:s,push:o,replace:i}}function gd(e){e=Qc(e);const t=vd(e),n=pd(e,t.state,t.location,t.replace);function a(r,i=!0){i||n.pauseListeners(),history.go(r)}const s=xe({location:"",base:e,go:a,createHref:ed.bind(null,e)},t,n);return Object.defineProperty(s,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(s,"state",{enumerable:!0,get:()=>t.state.value}),s}function hd(e){return e=location.host?e||location.pathname+location.search:"",e.includes("#")||(e+="#"),gd(e)}let cn=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e})({});var We=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e})(We||{});const md={type:cn.Static,value:""},yd=/[a-zA-Z0-9_]/;function _d(e){if(!e)return[[]];if(e==="/")return[[md]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(g){throw new Error(`ERR (${n})/"${u}": ${g}`)}let n=We.Static,a=n;const s=[];let r;function i(){r&&s.push(r),r=[]}let o=0,l,u="",c="";function d(){u&&(n===We.Static?r.push({type:cn.Static,value:u}):n===We.Param||n===We.ParamRegExp||n===We.ParamRegExpEnd?(r.length>1&&(l==="*"||l==="+")&&t(`A repeatable param (${u}) must be alone in its segment. eg: '/:ids+.`),r.push({type:cn.Param,value:u,regexp:c,repeatable:l==="*"||l==="+",optional:l==="*"||l==="?"})):t("Invalid state to consume buffer"),u="")}function f(){u+=l}for(;ot.length?t.length===1&&t[0]===lt.Static+lt.Segment?1:-1:0}function Lo(e,t){let n=0;const a=e.score,s=t.score;for(;n0&&t[t.length-1]<0}const Ad={strict:!1,end:!0,sensitive:!1};function xd(e,t,n){const a=Sd(_d(e.path),n),s=xe(a,{record:e,parent:t,children:[],alias:[]});return t&&!s.record.aliasOf==!t.record.aliasOf&&t.children.push(s),s}function Cd(e,t){const n=[],a=new Map;t=Mr(Ad,t);function s(d){return a.get(d)}function r(d,f,g){const h=!g,w=Wr(d);w.aliasOf=g&&g.record;const y=Mr(t,d),P=[w];if("alias"in d){const E=typeof d.alias=="string"?[d.alias]:d.alias;for(const L of E)P.push(Wr(xe({},w,{components:g?g.record.components:w.components,path:L,aliasOf:g?g.record:w})))}let _,S;for(const E of P){const{path:L}=E;if(f&&L[0]!=="/"){const D=f.record.path,T=D[D.length-1]==="/"?"":"/";E.path=f.record.path+(L&&T+L)}if(_=xd(E,f,y),g?g.alias.push(_):(S=S||_,S!==_&&S.alias.push(_),h&&d.name&&!Jr(_)&&i(d.name)),No(_)&&l(_),w.children){const D=w.children;for(let T=0;T{i(S)}:Qn}function i(d){if(Po(d)){const f=a.get(d);f&&(a.delete(d),n.splice(n.indexOf(f),1),f.children.forEach(i),f.alias.forEach(i))}else{const f=n.indexOf(d);f>-1&&(n.splice(f,1),d.record.name&&a.delete(d.record.name),d.children.forEach(i),d.alias.forEach(i))}}function o(){return n}function l(d){const f=Td(d,n);n.splice(f,0,d),d.record.name&&!Jr(d)&&a.set(d.record.name,d)}function u(d,f){let g,h={},w,y;if("name"in d&&d.name){if(g=a.get(d.name),!g)throw In(Ge.MATCHER_NOT_FOUND,{location:d});y=g.record.name,h=xe(Kr(f.params,g.keys.filter(S=>!S.optional).concat(g.parent?g.parent.keys.filter(S=>S.optional):[]).map(S=>S.name)),d.params&&Kr(d.params,g.keys.map(S=>S.name))),w=g.stringify(h)}else if(d.path!=null)w=d.path,g=n.find(S=>S.re.test(w)),g&&(h=g.parse(w),y=g.record.name);else{if(g=f.name?a.get(f.name):n.find(S=>S.re.test(f.path)),!g)throw In(Ge.MATCHER_NOT_FOUND,{location:d,currentLocation:f});y=g.record.name,h=xe({},f.params,d.params),w=g.stringify(h)}const P=[];let _=g;for(;_;)P.unshift(_.record),_=_.parent;return{name:y,path:w,params:h,matched:P,meta:Rd(P)}}e.forEach(d=>r(d));function c(){n.length=0,a.clear()}return{addRoute:r,resolve:u,removeRoute:i,clearRoutes:c,getRoutes:o,getRecordMatcher:s}}function Kr(e,t){const n={};for(const a of t)a in e&&(n[a]=e[a]);return n}function Wr(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:Ed(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function Ed(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const a in e.components)t[a]=typeof n=="object"?n[a]:n;return t}function Jr(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Rd(e){return e.reduce((t,n)=>xe(t,n.meta),{})}function Td(e,t){let n=0,a=t.length;for(;n!==a;){const r=n+a>>1;Lo(e,t[r])<0?a=r:n=r+1}const s=$d(e);return s&&(a=t.lastIndexOf(s,a-1)),a}function $d(e){let t=e;for(;t=t.parent;)if(No(t)&&Lo(e,t)===0)return t}function No({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function Yr(e){const t=mt(Ga),n=mt(Ws),a=Q(()=>{const l=v(e.to);return t.resolve(l)}),s=Q(()=>{const{matched:l}=a.value,{length:u}=l,c=l[u-1],d=n.matched;if(!c||!d.length)return-1;const f=d.findIndex($n.bind(null,c));if(f>-1)return f;const g=Zr(l[u-2]);return u>1&&Zr(c)===g&&d[d.length-1].path!==g?d.findIndex($n.bind(null,l[u-2])):f}),r=Q(()=>s.value>-1&&Od(n.params,a.value.params)),i=Q(()=>s.value>-1&&s.value===n.matched.length-1&&Do(n.params,a.value.params));function o(l={}){if(Fd(l)){const u=t[v(e.replace)?"replace":"push"](v(e.to)).catch(Qn);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>u),u}return Promise.resolve()}return{route:a,href:Q(()=>a.value.href),isActive:r,isExactActive:i,navigate:o}}function Id(e){return e.length===1?e[0]:e}const Dd=qe({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:Yr,setup(e,{slots:t}){const n=Yt(Yr(e)),{options:a}=mt(Ga),s=Q(()=>({[Qr(e.activeClass,a.linkActiveClass,"router-link-active")]:n.isActive,[Qr(e.exactActiveClass,a.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const r=t.default&&Id(t.default(n));return e.custom?r:j("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:s.value},r)}}}),Pd=Dd;function Fd(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function Od(e,t){for(const n in t){const a=t[n],s=e[n];if(typeof a=="string"){if(a!==s)return!1}else if(!At(s)||s.length!==a.length||a.some((r,i)=>r.valueOf()!==s[i].valueOf()))return!1}return!0}function Zr(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Qr=(e,t,n)=>e??t??n,Ld=qe({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const a=mt(Es),s=Q(()=>e.route||a.value),r=mt(Hr,0),i=Q(()=>{let u=v(r);const{matched:c}=s.value;let d;for(;(d=c[u])&&!d.components;)u++;return u}),o=Q(()=>s.value.matched[i.value]);Kn(Hr,Q(()=>i.value+1)),Kn(cd,o),Kn(Es,s);const l=Z();return Ft(()=>[l.value,o.value,e.name],([u,c,d],[f,g,h])=>{c&&(c.instances[d]=u,g&&g!==c&&u&&u===f&&(c.leaveGuards.size||(c.leaveGuards=g.leaveGuards),c.updateGuards.size||(c.updateGuards=g.updateGuards))),u&&c&&(!g||!$n(c,g)||!f)&&(c.enterCallbacks[d]||[]).forEach(w=>w(u))},{flush:"post"}),()=>{const u=s.value,c=e.name,d=o.value,f=d&&d.components[c];if(!f)return Xr(n.default,{Component:f,route:u});const g=d.props[c],h=g?g===!0?u.params:typeof g=="function"?g(u):g:null,y=j(f,xe({},h,t,{onVnodeUnmounted:P=>{P.component.isUnmounted&&(d.instances[c]=null)},ref:l}));return Xr(n.default,{Component:y,route:u})||y}}});function Xr(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const Mo=Ld;function Nd(e){const t=Cd(e.routes,e),n=e.parseQuery||ld,a=e.stringifyQuery||jr,s=e.history,r=Nn(),i=Nn(),o=Nn(),l=$l(Qt);let u=Qt;Sn&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const c=ss.bind(null,N=>""+N),d=ss.bind(null,qc),f=ss.bind(null,ra);function g(N,ae){let R,A;return Po(N)?(R=t.getRecordMatcher(N),A=ae):A=N,t.addRoute(A,R)}function h(N){const ae=t.getRecordMatcher(N);ae&&t.removeRoute(ae)}function w(){return t.getRoutes().map(N=>N.record)}function y(N){return!!t.getRecordMatcher(N)}function P(N,ae){if(ae=xe({},ae||l.value),typeof N=="string"){const x=rs(n,N,ae.path),B=t.resolve({path:x.path},ae),G=s.createHref(x.fullPath);return xe(x,B,{params:f(B.params),hash:ra(x.hash),redirectedFrom:void 0,href:G})}let R;if(N.path!=null)R=xe({},N,{path:rs(n,N.path,ae.path).path});else{const x=xe({},N.params);for(const B in x)x[B]==null&&delete x[B];R=xe({},N,{params:d(x)}),ae.params=d(ae.params)}const A=t.resolve(R,ae),X=N.hash||"";A.params=c(f(A.params));const p=Wc(a,xe({},N,{hash:jc(X),path:A.path})),m=s.createHref(p);return xe({fullPath:p,hash:X,query:a===jr?ud(N.query):N.query||{}},A,{redirectedFrom:void 0,href:m})}function _(N){return typeof N=="string"?rs(n,N,l.value.path):xe({},N)}function S(N,ae){if(u!==N)return In(Ge.NAVIGATION_CANCELLED,{from:ae,to:N})}function E(N){return T(N)}function L(N){return E(xe(_(N),{replace:!0}))}function D(N,ae){const R=N.matched[N.matched.length-1];if(R&&R.redirect){const{redirect:A}=R;let X=typeof A=="function"?A(N,ae):A;return typeof X=="string"&&(X=X.includes("?")||X.includes("#")?X=_(X):{path:X},X.params={}),xe({query:N.query,hash:N.hash,params:X.path!=null?{}:N.params},X)}}function T(N,ae){const R=u=P(N),A=l.value,X=N.state,p=N.force,m=N.replace===!0,x=D(R,A);if(x)return T(xe(_(x),{state:typeof x=="object"?xe({},X,x.state):X,force:p,replace:m}),ae||R);const B=R;B.redirectedFrom=ae;let G;return!p&&Jc(a,A,R)&&(G=In(Ge.NAVIGATION_DUPLICATED,{to:B,from:A}),Ee(A,A,!0,!1)),(G?Promise.resolve(G):te(B,A)).catch(H=>Bt(H)?Bt(H,Ge.NAVIGATION_GUARD_REDIRECT)?H:Se(H):ee(H,B,A)).then(H=>{if(H){if(Bt(H,Ge.NAVIGATION_GUARD_REDIRECT))return T(xe({replace:m},_(H.to),{state:typeof H.to=="object"?xe({},X,H.to.state):X,force:p}),ae||B)}else H=ye(B,A,!0,m,X);return ue(B,A,H),H})}function C(N,ae){const R=S(N,ae);return R?Promise.reject(R):Promise.resolve()}function I(N){const ae=Ve.values().next().value;return ae&&typeof ae.runWithContext=="function"?ae.runWithContext(N):N()}function te(N,ae){let R;const[A,X,p]=dd(N,ae);R=os(A.reverse(),"beforeRouteLeave",N,ae);for(const x of A)x.leaveGuards.forEach(B=>{R.push(nn(B,N,ae))});const m=C.bind(null,N,ae);return R.push(m),$e(R).then(()=>{R=[];for(const x of r.list())R.push(nn(x,N,ae));return R.push(m),$e(R)}).then(()=>{R=os(X,"beforeRouteUpdate",N,ae);for(const x of X)x.updateGuards.forEach(B=>{R.push(nn(B,N,ae))});return R.push(m),$e(R)}).then(()=>{R=[];for(const x of p)if(x.beforeEnter)if(At(x.beforeEnter))for(const B of x.beforeEnter)R.push(nn(B,N,ae));else R.push(nn(x.beforeEnter,N,ae));return R.push(m),$e(R)}).then(()=>(N.matched.forEach(x=>x.enterCallbacks={}),R=os(p,"beforeRouteEnter",N,ae,I),R.push(m),$e(R))).then(()=>{R=[];for(const x of i.list())R.push(nn(x,N,ae));return R.push(m),$e(R)}).catch(x=>Bt(x,Ge.NAVIGATION_CANCELLED)?x:Promise.reject(x))}function ue(N,ae,R){o.list().forEach(A=>I(()=>A(N,ae,R)))}function ye(N,ae,R,A,X){const p=S(N,ae);if(p)return p;const m=ae===Qt,x=Sn?history.state:{};R&&(A||m?s.replace(N.fullPath,xe({scroll:m&&x&&x.scroll},X)):s.push(N.fullPath,X)),l.value=N,Ee(N,ae,R,m),Se()}let we;function V(){we||(we=s.listen((N,ae,R)=>{if(!je.listening)return;const A=P(N),X=D(A,je.currentRoute.value);if(X){T(xe(X,{replace:!0,force:!0}),A).catch(Qn);return}u=A;const p=l.value;Sn&&ad(Vr(p.fullPath,R.delta),Ha()),te(A,p).catch(m=>Bt(m,Ge.NAVIGATION_ABORTED|Ge.NAVIGATION_CANCELLED)?m:Bt(m,Ge.NAVIGATION_GUARD_REDIRECT)?(T(xe(_(m.to),{force:!0}),A).then(x=>{Bt(x,Ge.NAVIGATION_ABORTED|Ge.NAVIGATION_DUPLICATED)&&!R.delta&&R.type===xs.pop&&s.go(-1,!1)}).catch(Qn),Promise.reject()):(R.delta&&s.go(-R.delta,!1),ee(m,A,p))).then(m=>{m=m||ye(A,p,!1),m&&(R.delta&&!Bt(m,Ge.NAVIGATION_CANCELLED)?s.go(-R.delta,!1):R.type===xs.pop&&Bt(m,Ge.NAVIGATION_ABORTED|Ge.NAVIGATION_DUPLICATED)&&s.go(-1,!1)),ue(A,p,m)}).catch(Qn)}))}let W=Nn(),Y=Nn(),K;function ee(N,ae,R){Se(N);const A=Y.list();return A.length?A.forEach(X=>X(N,ae,R)):console.error(N),Promise.reject(N)}function fe(){return K&&l.value!==Qt?Promise.resolve():new Promise((N,ae)=>{W.add([N,ae])})}function Se(N){return K||(K=!N,V(),W.list().forEach(([ae,R])=>N?R(N):ae()),W.reset()),N}function Ee(N,ae,R,A){const{scrollBehavior:X}=e;if(!Sn||!X)return Promise.resolve();const p=!R&&sd(Vr(N.fullPath,0))||(A||!R)&&history.state&&history.state.scroll||null;return pn().then(()=>X(N,ae,p)).then(m=>m&&nd(m)).catch(m=>ee(m,N,ae))}const be=N=>s.go(N);let Me;const Ve=new Set,je={currentRoute:l,listening:!0,addRoute:g,removeRoute:h,clearRoutes:t.clearRoutes,hasRoute:y,getRoutes:w,resolve:P,options:e,push:E,replace:L,go:be,back:()=>be(-1),forward:()=>be(1),beforeEach:r.add,beforeResolve:i.add,afterEach:o.add,onError:Y.add,isReady:fe,install(N){N.component("RouterLink",Pd),N.component("RouterView",Mo),N.config.globalProperties.$router=je,Object.defineProperty(N.config.globalProperties,"$route",{enumerable:!0,get:()=>v(l)}),Sn&&!Me&&l.value===Qt&&(Me=!0,E(s.location).catch(A=>{}));const ae={};for(const A in Qt)Object.defineProperty(ae,A,{get:()=>l.value[A],enumerable:!0});N.provide(Ga,je),N.provide(Ws,Li(ae)),N.provide(Es,l);const R=N.unmount;Ve.add(N),N.unmount=function(){Ve.delete(N),Ve.size<1&&(u=Qt,we&&we(),we=null,l.value=Qt,Me=!1,K=!1),R()}}};function $e(N){return N.reduce((ae,R)=>ae.then(()=>I(R)),Promise.resolve())}return je}function hn(){return mt(Ga)}function qa(e){return mt(Ws)}var Md={},Ud=new Set(["primary","secondary","accent","success","warning","danger","error","info"]);function Fe(...e){return e.flatMap(t=>t?Array.isArray(t)?t:typeof t=="object"?Object.entries(t).filter(([,n])=>n).map(([n])=>n):[t]:[]).filter(Boolean).join(" ")}function Pn(e,t="primary"){return Ud.has(e)?e:t}function Je(e,t=""){if(!e)return null;const n=e.includes("ph ")||e.startsWith("ph-");n||typeof process<"u"&&Md&&console.warn(`[gnexus-ui-kit] Icon "${e}" is missing the required "ph-" prefix. Use "ph-${e}" instead.`);const a=n?e:`ph-${e}`;return j("i",{class:Fe("ph",a,t),"aria-hidden":"true"})}function Uo(e){const t=e.target;return t.type==="checkbox"?t.checked:t.value}var Bd=["a[href]","button:not([disabled])","input:not([disabled])","select:not([disabled])","textarea:not([disabled])","[tabindex]:not([tabindex='-1'])"].join(",");function Vd(e,t){if(e.key!=="Tab"||!t)return;const n=[...t.querySelectorAll(Bd)].filter(r=>!r.hasAttribute("disabled")&&r.offsetParent!==null);if(!n.length){e.preventDefault(),t.focus();return}const a=n[0],s=n[n.length-1];e.shiftKey&&document.activeElement===a?(e.preventDefault(),s.focus()):!e.shiftKey&&document.activeElement===s&&(e.preventDefault(),a.focus())}var jd=qe({name:"GnActionCard",props:{kicker:{type:String,default:""},title:{type:String,required:!0},text:{type:String,default:""}},setup(e,{slots:t}){return()=>{var n,a,s;return j("article",{class:"card action-card"},[j("div",{class:"card-content"},[(e.kicker||t.kicker)&&j("span",{class:"action-card-kicker"},((n=t.kicker)==null?void 0:n.call(t))||e.kicker),j("h3",{class:"action-card-title"},((a=t.title)==null?void 0:a.call(t))||e.title),(e.text||t.default)&&j("p",{class:"action-card-text"},((s=t.default)==null?void 0:s.call(t))||e.text),t.actions&&j("div",{class:"action-card-actions"},t.actions())])])}}}),Qe=qe({name:"GnAlert",inheritAttrs:!1,props:{variant:{type:String,default:"primary"},role:{type:String,default:"status"}},setup(e,{attrs:t,slots:n}){return()=>{var a;const s=Pn(e.variant);return j("div",{...t,role:e.role,class:Fe("alert",`alert-${s}`,t.class)},(a=n.default)==null?void 0:a.call(n))}}}),Hd=qe({name:"GnAvatar",inheritAttrs:!1,props:{src:{type:String,default:""},alt:{type:String,default:""},initials:{type:String,default:""},icon:{type:String,default:""},size:{type:String,default:"md"},variant:{type:String,default:"primary"},outline:{type:Boolean,default:!1},status:{type:String,default:""}},setup(e,{attrs:t}){return()=>{const n=Pn(e.variant);return j("span",{...t,class:Fe("avatar",`avatar-${n}`,{"avatar-sm":e.size==="sm","avatar-lg":e.size==="lg","avatar-outline":e.outline,"is-online":e.status==="online","is-busy":e.status==="busy","is-offline":e.status==="offline"},t.class)},[e.src?j("img",{src:e.src,alt:e.alt}):Je(e.icon)||e.initials,e.status&&j("span",{class:"avatar-status","aria-hidden":"true"})])}}}),me=qe({name:"GnBadge",inheritAttrs:!1,props:{variant:{type:String,default:"primary"},outline:{type:Boolean,default:!1}},setup(e,{attrs:t,slots:n}){return()=>{var a;const s=Pn(e.variant);return j("span",{...t,class:Fe("badge",e.outline&&s==="primary"?"badge-primary-outline":`badge-${s}`,t.class)},(a=n.default)==null?void 0:a.call(n))}}}),pe=qe({name:"GnButton",inheritAttrs:!1,props:{variant:{type:String,default:"primary"},size:{type:String,default:"md"},icon:{type:String,default:""},loading:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},type:{type:String,default:"button"}},setup(e,{attrs:t,slots:n}){return()=>{var a;const s=!!(e.icon||e.loading),r=Pn(e.variant);return j("button",{...t,type:e.type,disabled:e.disabled||e.loading,class:Fe("btn",`btn-${r}`,{"btn-small":e.size==="sm","btn-large":e.size==="lg","with-icon":s,"loading-state":e.loading},t.class)},[e.loading?Je("ph-bold ph-spinner"):Je(e.icon),(a=n.default)==null?void 0:a.call(n)])}}}),ei=qe({name:"GnChip",inheritAttrs:!1,props:{variant:{type:String,default:""},icon:{type:String,default:""},selected:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},removable:{type:Boolean,default:!1},clickable:{type:Boolean,default:!1}},emits:["remove"],setup(e,{attrs:t,emit:n,slots:a}){return()=>{var s,r,i,o;const l=e.clickable?"button":"span",u=e.variant?Pn(e.variant):"",c=(i=(r=(s=a.default)==null?void 0:s.call(a))==null?void 0:r[0])==null?void 0:i.children;return j(l,{...t,type:l==="button"?"button":void 0,disabled:l==="button"?e.disabled:void 0,"aria-pressed":l==="button"?String(e.selected):void 0,class:Fe("chip",u&&`chip-${u}`,{"chip-selected":e.selected,"chip-disabled":e.disabled},t.class)},[Je(e.icon),(o=a.default)==null?void 0:o.call(a),e.removable&&j("button",{class:"chip-remove",type:"button","aria-label":c?`Remove ${c}`:"Remove",onClick:d=>{d.stopPropagation(),n("remove")}},[Je("ph-x")])])}}}),Gd=0,ut=qe({name:"GnModal",props:{open:{type:Boolean,default:!1},title:{type:String,default:""},closeOnBackdrop:{type:Boolean,default:!0}},emits:["update:open","close"],setup(e,{emit:t,slots:n}){const a=`gn-modal-title-${++Gd}`,s=Z(null),r=Z(!1),i=Z(!1);let o=null,l=null;const u=()=>{t("update:open",!1),t("close")},c=f=>{f.key==="Escape"?(f.preventDefault(),u()):Vd(f,s.value)},d=()=>{pn(()=>{var f;(f=s.value)==null||f.focus()})};return Ft(()=>e.open,f=>{var g;f?(i.value=!0,r.value=!0,pn(()=>{requestAnimationFrame(()=>{i.value=!1})}),o=document.activeElement,document.addEventListener("keydown",c),d()):(i.value=!0,document.removeEventListener("keydown",c),(g=o==null?void 0:o.focus)==null||g.call(o),o=null,l=window.setTimeout(()=>{r.value=!1,i.value=!1},300))},{flush:"post"}),La(()=>{document.removeEventListener("keydown",c),window.clearTimeout(l)}),()=>{var f,g,h;return r.value?j(Zl,{to:"body"},[j("div",{class:Fe("modal",i.value?"a-hide":"a-show"),"aria-hidden":"false"},[j("div",{class:"modal-backdrop",onClick:()=>e.closeOnBackdrop&&u()}),j("div",{ref:s,class:"modal-dialog",role:"dialog","aria-modal":"true","aria-labelledby":a,tabindex:"-1"},[j("header",{class:"modal-header"},[j("h4",{class:"modal-title",id:a},((f=n.title)==null?void 0:f.call(n))||e.title),j("button",{class:"btn-icon modal-close",type:"button","aria-label":"Close",onClick:u},[Je("ph-x")])]),j("div",{class:"modal-panel"},[j("div",{class:"modal-body"},(g=n.default)==null?void 0:g.call(n)),(n.footer||n.actions)&&j("footer",{class:"modal-footer"},[(h=n.footer)==null?void 0:h.call(n),n.actions&&j("div",{class:"actions"},n.actions({close:u}))])])])])]):null}}}),qd=qe({name:"GnCopyButton",props:{text:{type:String,required:!0},icon:{type:String,default:"ph-copy"},successIcon:{type:String,default:"ph-check"},duration:{type:Number,default:3e3},label:{type:String,default:"Copy"},size:{type:String,default:null}},emits:["copy"],setup(e,{emit:t}){const n=Z(!1);let a=null;const s=async()=>{try{await navigator.clipboard.writeText(e.text)}catch{const i=document.createElement("textarea");i.value=e.text,i.style.position="fixed",i.style.opacity="0",document.body.appendChild(i),i.select(),document.execCommand("copy"),document.body.removeChild(i)}n.value=!0,window.clearTimeout(a),a=window.setTimeout(()=>{n.value=!1},e.duration),t("copy",e.text)};return()=>j("button",{class:Fe("btn-icon",{"btn-icon-sm":e.size==="sm"}),type:"button","aria-label":e.label,onClick:s},[Je(n.value?e.successIcon:e.icon)])}}),zd=qe({name:"GnDropdown",props:{label:{type:String,default:"Actions"},icon:{type:String,default:"ph-dots-three-outline"},variant:{type:String,default:"secondary"},items:{type:Array,default:()=>[]}},emits:["select"],setup(e,{emit:t,slots:n}){const a=Z(!1),s=Z(null),r=()=>{a.value=!1,document.removeEventListener("click",i),document.removeEventListener("keydown",o)},i=c=>{s.value&&!s.value.contains(c.target)&&r()},o=c=>{c.key==="Escape"&&(c.preventDefault(),r())},l=()=>{a.value=!a.value,a.value?(setTimeout(()=>document.addEventListener("click",i),0),document.addEventListener("keydown",o)):r()},u=c=>{var d;c.disabled||((d=c.onSelect)==null||d.call(c,c),t("select",c),r())};return La(r),()=>{var c,d;return j("div",{ref:s,class:Fe("dropdown",{"is-open":a.value})},[((c=n.trigger)==null?void 0:c.call(n,{open:a.value,toggle:l}))||j(pe,{variant:e.variant,icon:e.icon,"aria-expanded":a.value?"true":"false",onClick:l},()=>e.label),j("div",{class:"dropdown-menu",role:"menu"},((d=n.default)==null?void 0:d.call(n,{close:r}))||e.items.map(f=>j("button",{class:Fe("dropdown-item",f.danger&&"dropdown-item-danger"),type:"button",role:"menuitem",disabled:f.disabled,onClick:()=>u(f)},[Je(f.icon),f.label])))])}}}),Kd=qe({name:"GnEmptyState",inheritAttrs:!1,props:{title:{type:String,required:!0},text:{type:String,default:""},icon:{type:String,default:"ph-package"},variant:{type:String,default:""}},setup(e,{attrs:t,slots:n}){return()=>{var a,s;return j("div",{...t,class:Fe("empty-state",e.variant&&`empty-state-${e.variant}`,t.class)},[j("div",{class:"empty-state-icon"},[Je(e.icon)]),j("h3",{class:"empty-state-title"},((a=n.title)==null?void 0:a.call(n))||e.title),(e.text||n.default)&&j("p",{class:"empty-state-text"},((s=n.default)==null?void 0:s.call(n))||e.text),n.actions&&j("div",{class:"empty-state-actions"},n.actions())])}}}),Ot=qe({name:"GnInput",inheritAttrs:!1,props:{modelValue:{type:[String,Number],default:""},label:{type:String,default:""},type:{type:String,default:"text"},icon:{type:String,default:""},state:{type:String,default:""},help:{type:String,default:""},bare:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(e,{attrs:t,emit:n}){return()=>{const a=j("input",{...t,type:e.type,value:e.modelValue,class:Fe(e.bare?"":"input",t.class),onInput:s=>n("update:modelValue",Uo(s))});return e.bare?a:j("div",{class:"form-group"},[j("label",{class:Fe("label",e.state)},[e.label,Je(e.icon),a]),e.help&&j("div",{class:Fe("input-info",e.state==="error"&&"error")},e.help)])}}}),Bo=qe({name:"GnLoader",inheritAttrs:!1,props:{circle:{type:Boolean,default:!1},label:{type:String,default:"Loading"}},setup(e,{attrs:t}){return()=>e.circle?j("div",{...t,class:Fe("circle-loader",t.class)},[Je("ph-bold ph-spinner normalize"),e.label]):j("div",{...t,class:Fe("loader",t.class),role:"status","aria-label":e.label})}});function Wd(){var e;const t=Ba();return((e=t==null?void 0:t.proxy)==null?void 0:e.$router)||null}function Jd(){var e;const t=Ba();return((e=t==null?void 0:t.proxy)==null?void 0:e.$route)||null}function Yd(e,t,n="prefix"){if(!e)return!1;const a=e.value||e;return typeof t=="string"?n==="exact"?a.path===t:a.path===t||a.path.startsWith(t+"/"):t.path?n==="exact"?a.path===t.path:a.path===t.path||a.path.startsWith(t.path+"/"):t.name?a.name===t.name:!1}var Zd=qe({name:"GnNavList",inheritAttrs:!1,props:{items:{type:Array,default:()=>[]},activeMatch:{type:String,default:"prefix"}},emits:["select"],setup(e,{attrs:t,emit:n,slots:a}){const s=Wd(),r=Jd(),i=!!(s&&r),o=u=>{if(u){if(typeof u=="string")return u;if(u.path)return u.path}},l=Q(()=>e.items.map(u=>{const c=!!u.to,d=c?i?s.resolve(u.to).href:o(u.to):u.href,f=c&&i?Yd(r,u.to,e.activeMatch):!!u.active;return{...u,resolvedHref:d,isActive:f,hasTo:c}}));return()=>j("ul",{...t,class:Fe("list list-nav",t.class)},l.value.map(u=>{var c,d;return j("li",{class:Fe("list-item",{"list-item-active":u.isActive})},[j(u.resolvedHref?"a":"button",{class:"list-action",href:u.resolvedHref,type:u.resolvedHref?void 0:"button",onClick:f=>{var g;u.hasTo&&i&&(f.preventDefault(),s.push(u.to)),(g=u.onSelect)==null||g.call(u,u,f),n("select",u)}},[j("span",{class:"list-label"},[Je(u.icon),((c=a.label)==null?void 0:c.call(a,{item:u}))||u.label]),(u.meta||a.meta)&&j("span",{class:"list-meta"},((d=a.meta)==null?void 0:d.call(a,{item:u}))||u.meta)])])}))}}),Qd=0,Xd=qe({name:"GnNavigationShell",props:{brand:{type:String,default:"GNexus UI Kit"},logoSrc:{type:String,default:"/assets/imgs/gnexus-mark.svg"},current:{type:String,default:""},title:{type:String,default:"Sections"},subtitle:{type:String,default:"Navigation"},footerLeft:{type:String,default:""},footerRight:{type:String,default:""},items:{type:Array,default:()=>[]},activeMatch:{type:String,default:"prefix"}},emits:["select"],setup(e,{emit:t,slots:n}){const a=Z(!1),s=`gn-nav-drawer-${++Qd}`,r=Z(null);let i=null;const o=()=>{a.value=!1},l=()=>{a.value=!a.value},u=c=>{c.key==="Escape"&&(c.preventDefault(),o())};return Ft(a,c=>{var d;c?(i=document.activeElement,document.body.classList.add("nav-drawer-open"),document.addEventListener("keydown",u),pn(()=>{var f;return(f=r.value)==null?void 0:f.focus()})):(document.body.classList.remove("nav-drawer-open"),document.removeEventListener("keydown",u),(d=i==null?void 0:i.focus)==null||d.call(i),i=null)}),La(()=>{document.body.classList.remove("nav-drawer-open"),document.removeEventListener("keydown",u)}),()=>{var c,d,f,g,h,w,y;return[j("header",{class:"nav-topbar"},[j("button",{class:"nav-topbar-toggle",type:"button","aria-controls":s,"aria-expanded":a.value?"true":"false",onClick:l},[Je("ph-sidebar-simple"),j("span",{},"Menu")]),j("div",{class:"nav-topbar-brand"},[e.logoSrc&&j("img",{src:e.logoSrc,alt:"","aria-hidden":"true"}),j("span",{},((c=n.brand)==null?void 0:c.call(n))||e.brand)]),j("div",{class:"nav-topbar-current"},((d=n.current)==null?void 0:d.call(n))||e.current)]),j("div",{class:"nav-drawer-backdrop",onClick:o}),j("aside",{ref:r,class:["nav-drawer",{"is-open":a.value}],id:s,"aria-label":"Navigation","aria-hidden":a.value?"false":"true",tabindex:"-1"},[j("header",{class:"nav-drawer-header"},[j("div",{},[j("div",{class:"nav-drawer-title"},((f=n.title)==null?void 0:f.call(n))||e.title),j("div",{class:"nav-drawer-subtitle"},((g=n.subtitle)==null?void 0:g.call(n))||e.subtitle)]),j("button",{class:"nav-drawer-close",type:"button","aria-label":"Close navigation",onClick:o},[Je("ph-x")])]),j("nav",{class:"nav-drawer-body"},[((h=n.default)==null?void 0:h.call(n,{close:o}))||j(Zd,{items:e.items,activeMatch:e.activeMatch,onSelect:P=>{t("select",P),o()}})]),(n.footer||e.footerLeft||e.footerRight)&&j("footer",{class:"nav-drawer-footer"},((w=n.footer)==null?void 0:w.call(n))||[j("span",{},e.footerLeft),j("span",{},e.footerRight)])]),(y=n.content)==null?void 0:y.call(n)]}}}),xt=qe({name:"GnPageHeader",inheritAttrs:!1,props:{title:{type:String,required:!0},subtitle:{type:String,default:""},kicker:{type:String,default:""},compact:{type:Boolean,default:!1},accent:{type:Boolean,default:!1}},setup(e,{attrs:t,slots:n}){return()=>{var a,s,r;return j("header",{...t,class:Fe("page-header",{"page-header-compact":e.compact,"page-header-accent":e.accent},t.class)},[j("div",{class:"page-header-content"},[(e.kicker||n.kicker)&&j("div",{class:"page-header-kicker"},((a=n.kicker)==null?void 0:a.call(n))||e.kicker),j("h1",{class:"page-header-title"},((s=n.title)==null?void 0:s.call(n))||e.title),(e.subtitle||n.subtitle)&&j("p",{class:"page-header-subtitle"},((r=n.subtitle)==null?void 0:r.call(n))||e.subtitle),n.meta&&j("div",{class:"page-header-meta"},n.meta())]),n.actions&&j("div",{class:"page-header-actions"},n.actions())])}}}),Js=qe({name:"GnSelect",inheritAttrs:!1,props:{modelValue:{type:[String,Number],default:""},label:{type:String,default:""},icon:{type:String,default:""},state:{type:String,default:""},help:{type:String,default:""},options:{type:Array,default:()=>[]}},emits:["update:modelValue"],setup(e,{attrs:t,emit:n,slots:a}){const s=()=>e.options.map(r=>{const i=typeof r=="object"?r.value:r,o=typeof r=="object"?r.label:r;return j("option",{value:i},o)});return()=>{var r;return j("div",{class:"form-group"},[j("label",{class:Fe("label",e.state)},[e.label,Je(e.icon),j("div",{class:"select-wrap"},[j("select",{...t,value:e.modelValue,class:Fe("input select",t.class),onChange:i=>n("update:modelValue",Uo(i))},((r=a.default)==null?void 0:r.call(a))||s())])]),e.help&&j("div",{class:Fe("input-info",e.state==="error"&&"error")},e.help)])}}}),ef=qe({name:"GnSwitch",inheritAttrs:!1,props:{modelValue:{type:Boolean,default:!1},label:{type:String,default:""},disabled:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(e,{attrs:t,emit:n,slots:a}){return()=>{var s;return j("label",{class:Fe("switch",t.class)},[j("input",{...t,type:"checkbox",checked:e.modelValue,disabled:e.disabled,onChange:r=>n("update:modelValue",r.target.checked)}),j("span",{class:"switch-control","aria-hidden":"true"}),j("span",{class:"switch-label"},((s=a.default)==null?void 0:s.call(a))||e.label)])}}}),Dn=qe({name:"GnTable",props:{columns:{type:Array,required:!0},rows:{type:Array,default:()=>[]},caption:{type:String,default:""},emptyText:{type:String,default:"Empty"}},setup(e,{attrs:t,slots:n}){return()=>{var a;return j("div",{class:"table-wrapper"},[j("table",{class:Fe("table data-list",{"table-empty":!e.rows.length},t.class)},[e.caption&&j("caption",{class:"table-caption"},e.caption),j("thead",{class:"table-head"},[j("tr",{class:"table-row"},e.columns.map(s=>j("th",{scope:"col"},s.label)))]),j("tbody",{class:"table-body"},e.rows.length?e.rows.map(s=>j("tr",{class:"table-row"},e.columns.map(r=>{var i;const o=`cell-${r.key}`;return j("td",{},((i=n[o])==null?void 0:i.call(n,{row:s,column:r,value:s[r.key]}))||s[r.key])}))):j("tr",{},[j("td",{class:"is-empty",colspan:e.columns.length},((a=n.empty)==null?void 0:a.call(n))||e.emptyText)]))])])}}}),Vo=Symbol("gnexus-ui-kit-toast"),ti={info:"ph-info",success:"ph-check-circle",warning:"ph-warning",danger:"ph-warning-octagon",error:"ph-warning-octagon",primary:"ph-info",secondary:"ph-info"},tf=qe({name:"GnToastProvider",props:{lifetime:{type:Number,default:4e3}},setup(e,{slots:t,expose:n}){const a=Z(null),s=Z(!1),r=Z(!1);let i=null,o=null,l=null;const u=Z(100),c=()=>{window.clearTimeout(o),window.clearInterval(l),s.value=!0,r.value=!1,o=window.setTimeout(()=>{a.value=null,s.value=!1,u.value=100,window.clearTimeout(i),i=null},300)},d=()=>{window.clearTimeout(o),window.clearTimeout(i),window.clearInterval(l),s.value=!1,r.value=!1,u.value=100,a.value=null},f=w=>{window.clearTimeout(o),window.clearInterval(l),s.value=!1,r.value=!1,u.value=100;const y=Pn(w.variant||w.type||"info","info"),P=w.lifetime!==void 0?w.lifetime:e.lifetime;if(a.value={id:Date.now(),variant:y==="error"?"danger":y,title:w.title||"",text:w.text||w.message||"",icon:w.icon||ti[y]||ti.info,lifetime:P},window.clearTimeout(i),P!==0){const S=P/100;u.value=100,l=window.setInterval(()=>{u.value-=100/S,u.value<=0&&window.clearInterval(l)},100),i=window.setTimeout(c,P)}pn(()=>{requestAnimationFrame(()=>{r.value=!0})})},g={show:f,close:d,info:w=>f({...w,variant:"info"}),success:w=>f({...w,variant:"success"}),warning:w=>f({...w,variant:"warning"}),danger:w=>f({...w,variant:"danger"}),error:w=>f({...w,variant:"danger"})};Kn(Vo,g),n(g);const h=()=>s.value?"a-hide":r.value?"a-show":"";return()=>{var w;return[(w=t.default)==null?void 0:w.call(t),a.value&&j("div",{class:Fe("toast",h(),`toast-${a.value.variant}`),role:"alert"},[j("div",{class:"toast-content"},[j("div",{class:"toast-header"},[Je(a.value.icon),a.value.title]),a.value.text&&j("p",{class:"toast-text"},a.value.text)]),j("button",{class:"btn-icon toast-close",type:"button","aria-label":"Close",onClick:c},[Je("ph-x")]),a.value.lifetime!==0&&j("div",{class:"toast-progress"},[j("div",{class:"toast-progress-bar",style:{transform:`scaleX(${Math.max(0,u.value/100)})`}})])])]}}}),nf=qe({name:"GnUserCard",props:{name:{type:String,required:!0},email:{type:String,default:""},role:{type:String,default:""},avatar:{type:Object,default:()=>({})},href:{type:String,default:""},compact:{type:Boolean,default:!1},actions:{type:Array,default:()=>[]}},setup(e,{slots:t}){const n=()=>{var r;return((r=t.avatar)==null?void 0:r.call(t))||j(Hd,{...e.avatar,size:e.compact?"sm":"md"})},a=()=>j("span",{class:"identity"},[n(),j("span",{class:"identity-content"},[j("span",{class:"identity-title"},e.name),e.email&&j("span",{class:"identity-meta"},e.email)])]),s=()=>t.actions?t.actions():e.actions.length?j("div",{class:"user-card-actions"},e.actions.map(r=>{if(e.compact)return j("button",{class:"btn-icon",type:"button","aria-label":r.label,onClick:r.onClick},[Je(r.icon)]);const i=!!r.icon,o=Fe("btn","btn-small",{[`btn-${r.variant}`]:r.variant,"btn-secondary":!r.variant,"with-icon":i});return j("button",{class:o,type:"button",onClick:r.onClick},[i&&Je(r.icon),r.label])})):null;return()=>{const r=Fe("card","user-card",{"user-card-compact":e.compact}),i=[];e.href?i.push(j("a",{class:"profile-identity",href:e.href,target:"_blank",rel:"noopener noreferrer"},[a()])):i.push(a()),!e.compact&&e.role&&i.push(j("span",{class:"user-card-role"},e.role)),t.default&&!e.compact&&i.push(j("div",{class:"user-card-extra"},t.default()));const o=s();return o&&i.push(o),j("article",{class:r},[j("div",{class:"user-card-body"},i)])}}});function mn(){const e=mt(Vo,null);if(e)return e;const t=()=>{throw new Error("GNexus UI Kit: useToast() requires near the app root.")};return{show:t,info:t,success:t,warning:t,danger:t,error:t,close:t}}const xa="shserv_access_token";let En=null;function af(e){En=e||null;try{En?localStorage.setItem(xa,En):localStorage.removeItem(xa)}catch{}}function sf(){if(En)return En;try{return localStorage.getItem(xa)||null}catch{return null}}function Hn(){En=null;try{localStorage.removeItem(xa)}catch{}}const rf=1e4;function of(e){const t=new URLSearchParams;for(const[a,s]of Object.entries(e||{}))s!=null&&t.append(a,String(s));const n=t.toString();return n?`?${n}`:""}function lf(e,t){const n="".replace(/\/+$/,""),a=String(t||"").replace(/^\/+/,"");return n?`${n}/${a}`:`/${a}`}function uf(e,t){return`${e}${of(t)}`}async function cf(e,t,n,a={}){const s=Number(a.timeoutMs||rf),r=new AbortController,i=setTimeout(()=>r.abort(),s),l=lf("",uf(t,a.query)),u={Accept:"application/json",...a.headers||{}},c=sf();c&&(u.Authorization=`Bearer ${c}`);const d={method:e,headers:u,signal:r.signal,credentials:"include"};a.signal&&a.signal.addEventListener("abort",()=>r.abort(),{once:!0}),n!=null&&(u["Content-Type"]="application/json",d.body=JSON.stringify(n));try{const f=await fetch(l,d),g=await f.text();let h=g;if(g)try{h=JSON.parse(g)}catch{h=g}return{response:f,data:h,meta:{url:l,method:e,statusCode:f.status,headers:f.headers}}}finally{clearTimeout(i)}}function ls(e,t,n={}){return{type:e,message:t,...n}}async function jo(e,t,n,a){try{const{response:s,data:r,meta:i}=await cf(e,t,n,a);return s.ok?r&&typeof r=="object"&&(r.status===!1||r.status==="error")?{ok:!1,error:ls("api_error",r.msg||r.message||"API error",{errorAlias:r.error_alias,failedFields:r.failed_fields||[],raw:r}),meta:i}:{ok:!0,data:r,meta:i}:(s.status===401&&(Hn(),window.location.hash.includes("/login")||(window.location.href=`/auth/login?return_to=${encodeURIComponent(window.location.href)}`)),{ok:!1,error:ls("http_error",`HTTP ${s.status}`,{statusCode:s.status,raw:r}),meta:i})}catch(s){const r=(s==null?void 0:s.name)==="AbortError";return{ok:!1,error:ls(r?"timeout":"network_error",(s==null?void 0:s.message)||"Network error",{details:s}),meta:{url:t,method:e,statusCode:0,headers:null}}}}function Ne(e,t){return jo("GET",e,null,t)}function Xe(e,t,n){return jo("POST",e,t,n)}const ca=gn("auth",()=>{const e=Z(null),t=Z([]),n=Z(!1),a=Q(()=>!!e.value),s=Q(()=>new Set(t.value));function r(f){return s.value.has(f)}function i(f){return Array.isArray(f)?f.some(g=>s.value.has(g)):!1}let o=null;async function l(){return o||(n.value=!0,o=Ne("/auth/me").then(f=>{var g;if(f.ok){const h=((g=f.data)==null?void 0:g.data)||{};e.value=h.user||null,t.value=h.permissions||[]}else e.value=null,t.value=[],Hn()}).catch(()=>{e.value=null,t.value=[],Hn()}).finally(()=>{n.value=!1}),o)}async function u(){var g,h;const f=await Xe("/auth/refresh");f.ok?af(((h=(g=f.data)==null?void 0:g.data)==null?void 0:h.access_token)||null):Hn()}async function c(){try{await Xe("/auth/logout")}catch{}e.value=null,t.value=[],Hn(),window.location.href="/#/login"}function d(){const f=window.location.href;window.location.href=`/auth/login?return_to=${encodeURIComponent(f)}`}return{user:e,permissions:t,isLoading:n,isAuthenticated:a,hasPermission:r,hasAnyPermission:i,init:l,refreshToken:u,logout:c,redirectToLogin:d}}),df={__name:"AppShell",setup(e){const t=qa(),n=ca(),a={login:"Login","areas-favorites":"Favorites","areas-tree":"Areas","area-detail":"Area",devices:"Devices","device-detail":"Device","devices-scanning":"Scanning","scripts-actions":"Actions","scripts-regular":"Regular","scripts-scopes":"Scopes","script-detail":"Script",firmwares:"Firmwares"},s=Q(()=>{const f=t==null?void 0:t.name;return f&&a[f]?a[f]:""}),r=[{label:"Favorites",to:"/areas/favorites",icon:"ph-bookmarks",permission:"areas.view"},{label:"Areas",to:"/areas/tree",icon:"ph-map-trifold",permission:"areas.view"},{label:"Devices",to:"/devices",icon:"ph-cpu",permission:"devices.view"},{label:"Scanning",to:"/devices/scanning",icon:"ph-magnifying-glass",permission:"devices.scan"},{label:"Actions",to:"/scripts/actions",icon:"ph-play",permission:"scripts.run"},{label:"Regular",to:"/scripts/regular",icon:"ph-clock",permission:"scripts.view"},{label:"Scopes",to:"/scripts/scopes",icon:"ph-brackets-curly",permission:"scripts.view"},{label:"Firmwares",to:"/firmwares",icon:"ph-cloud-arrow-down",permission:"firmware.view"}],i=Q(()=>r.filter(f=>f.permission?n.hasPermission(f.permission):!0));function o(f){return f?f.split(/\s+/).slice(0,2).map(g=>{var h;return(h=g[0])==null?void 0:h.toUpperCase()}).join(""):""}function l(f){return f?f.charAt(0).toUpperCase()+f.slice(1):""}function u(){const f=window.location.href;window.location.href=`/auth/login?return_to=${encodeURIComponent(f)}`}function c(){const f=document.querySelector(".nav-drawer-backdrop");f&&f.click()}function d(){c(),n.logout()}return(f,g)=>(b(),z(v(Xd),{brand:"SHSERV WEB CLIENT","logo-src":"",title:"Navigation",subtitle:"Smart Home",items:i.value,"active-match":"prefix",current:s.value},{content:k(()=>[Na(f.$slots,"default")]),footer:k(()=>{var h,w,y,P,_,S;return[v(n).isAuthenticated?(b(),z(v(nf),{key:0,name:((h=v(n).user)==null?void 0:h.display_name)||"User",email:((w=v(n).user)==null?void 0:w.email)||"",role:l((y=v(n).user)==null?void 0:y.system_role),avatar:{src:((P=v(n).user)==null?void 0:P.avatar_url)||"",initials:o((_=v(n).user)==null?void 0:_.display_name),size:"sm"},href:((S=v(n).user)==null?void 0:S.gauth_profile_url)||"",compact:"",actions:[{label:"Logout",icon:"ph-sign-out",variant:"ghost",onClick:d}]},null,8,["name","email","role","avatar","href","actions"])):(b(),z(v(pe),{key:1,variant:"primary",size:"sm",onClick:u},{icon:k(()=>[...g[0]||(g[0]=[F("i",{class:"ph ph-sign-in"},null,-1)])]),default:k(()=>[g[1]||(g[1]=U(" Sign in ",-1))]),_:1}))]}),_:3},8,["items","current"]))}},Ye=(e,t)=>{const n=e.__vccOpts||e;for(const[a,s]of t)n[a]=s;return n},ff={key:0},pf={key:1,class:"error-meta"},vf={class:"error-actions"},gf={__name:"AppErrorState",props:{title:{type:String,default:"Request failed"},message:{type:String,default:""},retry:{type:Function,default:null},error:{type:Object,default:null}},setup(e){const t=e,n=Q(()=>{var s;return t.message||((s=t.error)==null?void 0:s.message)||""}),a=Q(()=>{if(!t.error)return"";try{return JSON.stringify(t.error,null,2)}catch{return String(t.error)}});return(s,r)=>(b(),z(v(Qe),{variant:"danger",role:"alert"},{default:k(()=>[F("strong",null,M(e.title),1),n.value?(b(),q("p",ff,M(n.value),1)):se("",!0),e.error?(b(),q("div",pf,[e.error.type?(b(),z(v(me),{key:0,variant:"secondary"},{default:k(()=>[U(M(e.error.type),1)]),_:1})):se("",!0),e.error.statusCode?(b(),z(v(me),{key:1,variant:"secondary"},{default:k(()=>[U("HTTP "+M(e.error.statusCode),1)]),_:1})):se("",!0),e.error.errorAlias?(b(),z(v(me),{key:2,variant:"warning"},{default:k(()=>[U(M(e.error.errorAlias),1)]),_:1})):se("",!0)])):se("",!0),F("div",vf,[e.error?(b(),z(v(qd),{key:0,text:a.value,label:"Copy error details",size:"sm"},null,8,["text"])):se("",!0),e.retry?(b(),z(v(pe),{key:1,variant:"danger",onClick:e.retry},{default:k(()=>[...r[0]||(r[0]=[U("Retry",-1)])]),_:1},8,["onClick"])):se("",!0)])]),_:1}))}},pt=Ye(gf,[["__scopeId","data-v-f1e6bcb8"]]),hf={key:0,class:"error-boundary",role:"alert"},mf={__name:"AppErrorBoundary",setup(e){const t=Z(!1),n=Z("");Yi((s,r,i)=>{const o=(s==null?void 0:s.message)||String(s);return console.error("[AppErrorBoundary] Caught Vue error:",o,"| info:",i,s),t.value=!0,n.value=o,!1});function a(){t.value=!1,n.value=""}return(s,r)=>t.value?(b(),q("div",hf,[$(pt,{title:"Something went wrong",message:n.value,retry:a},null,8,["message"])])):Na(s.$slots,"default",{key:1},void 0,!0)}},yf=Ye(mf,[["__scopeId","data-v-1e10ea7f"]]),_f={__name:"App",setup(e){return(t,n)=>(b(),z(df,null,{default:k(()=>[$(v(tf),null,{default:k(()=>[$(yf,null,{default:k(()=>[$(v(Mo))]),_:1})]),_:1})]),_:1}))}},bf="modulepreload",wf=function(e){return"/"+e},ni={},Sf=function(t,n,a){let s=Promise.resolve();if(n&&n.length>0){let i=function(u){return Promise.all(u.map(c=>Promise.resolve(c).then(d=>({status:"fulfilled",value:d}),d=>({status:"rejected",reason:d}))))};document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),l=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));s=i(n.map(u=>{if(u=wf(u),u in ni)return;ni[u]=!0;const c=u.endsWith(".css"),d=c?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${u}"]${d}`))return;const f=document.createElement("link");if(f.rel=c?"stylesheet":bf,c||(f.as="script"),f.crossOrigin="",f.href=u,l&&f.setAttribute("nonce",l),document.head.appendChild(f),c)return new Promise((g,h)=>{f.addEventListener("load",g),f.addEventListener("error",()=>h(new Error(`Unable to preload CSS for ${u}`)))})}))}function r(i){const o=new Event("vite:preloadError",{cancelable:!0});if(o.payload=i,window.dispatchEvent(o),!o.defaultPrevented)throw i}return s.then(i=>{for(const o of i||[])o.status==="rejected"&&r(o.reason);return t().catch(r)})},Et={list(e){return Ne("/api/v1/areas/list",e)},innerList(e,t){return Ne(`/api/v1/areas/id/${encodeURIComponent(String(e))}/list`,t)},newArea(e){return Xe("/api/v1/areas/new-area",e)},remove(e){return Ne(`/api/v1/areas/id/${encodeURIComponent(String(e))}/remove`)},devices(e,t){return Ne(`/api/v1/areas/id/${encodeURIComponent(String(e))}/devices`,t)},scripts(e,t){return Ne(`/api/v1/areas/id/${encodeURIComponent(String(e))}/scripts`,t)},updateDisplayName(e){return Xe("/api/v1/areas/update-display-name",e)},updateAlias(e){return Xe("/api/v1/areas/update-alias",e)},placeInArea(e){return Xe("/api/v1/areas/place-in-area",e)},unassign(e){return Ne(`/api/v1/areas/id/${encodeURIComponent(String(e))}/unassign-from-area`)}};function gt(e={}){const t=Z(null),n=Z(!1),a=Z(null);async function s(o){var u,c;(u=t.value)==null||u.abort();const l=new AbortController;t.value=l,n.value=!0,a.value=null;try{const d=await o(l.signal);return t.value=null,n.value=!1,d.ok||e.ignoreTimeout!==!1&&((c=d.error)==null?void 0:c.type)==="timeout"||(a.value=d.error),d}catch(d){return t.value=null,n.value=!1,a.value={type:"network_error",message:(d==null?void 0:d.message)||"Network error"},{ok:!1,error:a.value}}}function r(){var o;(o=t.value)==null||o.abort(),t.value=null}function i(){a.value=null,r()}return{abortController:t,isLoading:n,error:a,execute:s,abort:r,clear:i}}const Ho="sh:areas:expandedNodes";function kf(){try{const e=localStorage.getItem(Ho);if(e){const t=JSON.parse(e);if(Array.isArray(t))return new Set(t)}}catch{}return new Set}function Af(e){try{localStorage.setItem(Ho,JSON.stringify([...e]))}catch{}}function xf(e){const t={},n=[];for(const a of e)t[a.id]={...a,children:[]};for(const a of e){const s=t[a.id],r=a.parent_id&&a.parent_id==a.id,i=a.parent_id&&t[a.parent_id];!r&&i?t[a.parent_id].children.push(s):n.push(s)}return n.length===0&&e.length>0?Object.values(t):n}const wt=gn("areas",()=>{const e=Z([]),t=Z(null),n=Z([]),a=Z([]),s=gt(),r=gt(),i=Q(()=>Object.fromEntries(e.value.map(D=>[String(D.id),D]))),o=Q(()=>xf(e.value)),l=Z(kf());Ft(l,D=>{Af(D)},{deep:!0});function u(D){const T=new Set(l.value);T.has(D)?T.delete(D):T.add(D),l.value=T}function c(D){return l.value.has(D)}async function d(){return s.execute(async D=>{var C,I;const T=await Et.list({signal:D});return T.ok&&(e.value=((I=(C=T.data)==null?void 0:C.data)==null?void 0:I.areas)||[]),T})}async function f(D){var C,I,te,ue,ye,we;r.abort();const T=new AbortController;r.abortController.value=T,r.isLoading.value=!0,r.error.value=null,t.value=i.value[String(D)]||null,n.value=[],a.value=[];try{const[V,W]=await Promise.all([Et.devices(D,{signal:T.signal}),Et.scripts(D,{signal:T.signal})]);return r.abortController.value=null,r.isLoading.value=!1,V.ok?W.ok?(n.value=((ue=(te=V.data)==null?void 0:te.data)==null?void 0:ue.devices)||[],a.value=((we=(ye=W.data)==null?void 0:ye.data)==null?void 0:we.scripts)||[],{ok:!0}):(((I=W.error)==null?void 0:I.type)!=="timeout"&&(r.error.value=W.error),{ok:!1,error:r.error.value}):(((C=V.error)==null?void 0:C.type)!=="timeout"&&(r.error.value=V.error),{ok:!1,error:r.error.value})}catch(V){return r.abortController.value=null,r.isLoading.value=!1,r.error.value={type:"network_error",message:(V==null?void 0:V.message)||"Network error"},{ok:!1,error:r.error.value}}}function g(){t.value=null,n.value=[],a.value=[],r.clear()}async function h(D){var C,I;const T=await Et.devices(D);return T.ok&&(n.value=((I=(C=T.data)==null?void 0:C.data)==null?void 0:I.devices)||[]),T}async function w(D){var C,I;const T=await Et.scripts(D);return T.ok&&(a.value=((I=(C=T.data)==null?void 0:C.data)==null?void 0:I.scripts)||[]),T}async function y(D){var C,I;const T=await Et.newArea(D);if(T.ok){const te=(I=(C=T.data)==null?void 0:C.data)==null?void 0:I.area;te&&e.value.push(te)}return T}async function P(D,T){const C=await Et.updateDisplayName({area_id:D,display_name:T});if(C.ok){const I=e.value.findIndex(te=>te.id===D);I!==-1&&(e.value[I]={...e.value[I],display_name:T})}return C}async function _(D){const T=await Et.remove(D);return T.ok&&(e.value=e.value.filter(C=>C.id!==D)),T}function S(D){return!(D!=null&&D.parent_id)||D.parent_id<=0}async function E(D,T){const C=e.value.find(ue=>ue.id===D),I=e.value.filter(S).length;if(C&&S(C)&&I===1)return{ok:!1,error:{message:"Cannot assign the last root area as a child."}};const te=await Et.placeInArea({target_id:D,place_in_area_id:T});if(te.ok){const ue=e.value.findIndex(ye=>ye.id===D);ue!==-1&&e.value.splice(ue,1,{...e.value[ue],parent_id:Number(T)})}return te}async function L(D){const T=await Et.unassign(D);if(T.ok){const C=e.value.findIndex(I=>I.id===D);C!==-1&&e.value.splice(C,1,{...e.value[C],parent_id:0})}return T}return{areas:e,isLoading:s.isLoading,error:s.error,currentArea:t,currentAreaDevices:n,currentAreaScripts:a,isLoadingAreaDetail:r.isLoading,errorAreaDetail:r.error,areasById:i,areaTree:o,expandedNodeIds:l,toggleNode:u,isNodeExpanded:c,loadAreas:d,loadAreaDetail:f,clearAreaDetail:g,loadAreaDevices:h,loadAreaScripts:w,createArea:y,renameArea:P,removeArea:_,assignToArea:E,unassignArea:L}}),Go="sh_fav_areas";function Cf(){try{return JSON.parse(localStorage.getItem(Go)||"[]").map(String)}catch{return[]}}function ai(e){localStorage.setItem(Go,JSON.stringify(e.map(String)))}const Ys=gn("favorites",()=>{const e=Z(Cf());function t(r){return e.value.includes(String(r))}function n(r){const i=String(r);e.value.includes(i)||(e.value.push(i),ai(e.value))}function a(r){e.value=e.value.filter(i=>i!==String(r)),ai(e.value)}function s(r){return t(r)?(a(r),!1):(n(r),!0)}return{ids:e,has:t,add:n,remove:a,toggle:s}}),Ef=["aria-label"],qo={__name:"AreaFavoriteButton",props:{areaId:{type:[String,Number],required:!0}},setup(e){const t=e,n=Ys(),a=Q(()=>n.has(t.areaId));return(s,r)=>(b(),q("button",{class:Lt(["btn-icon area-favorite-btn",{"is-active":a.value,"text-muted":!a.value,"text-warning":a.value}]),type:"button","aria-label":a.value?"Remove bookmark":"Bookmark",onClick:r[0]||(r[0]=Va(i=>v(n).toggle(e.areaId),["stop"]))},[F("i",{class:Lt(["ph",a.value?"ph-fill ph-bookmark-simple":"ph-bookmark-simple"])},null,2)],10,Ef))}},_t={__name:"AppLoadingState",props:{text:{type:String,default:"Loading"}},setup(e){return(t,n)=>(b(),z(v(Bo),{circle:"",label:e.text},null,8,["label"]))}},rt={__name:"AppEmptyState",props:{title:{type:String,default:"Nothing here"},message:{type:String,default:""}},setup(e){return(t,n)=>(b(),z(v(Kd),{title:e.title,text:e.message,icon:"ph-package"},{actions:k(()=>[Na(t.$slots,"action")]),_:3},8,["title","text"]))}},Rf={class:"page"},Tf={key:3,class:"area-favorites-list"},$f=["onClick"],If={class:"area-favorite-info"},Df={class:"area-favorite-title"},Pf={class:"area-favorite-meta"},Ff={key:0,class:"area-favorite-parent"},Of={class:"area-favorite-actions"},Lf={__name:"AreaFavoritesPage",setup(e){const t=wt(),n=Ys(),a=hn(),s=Q(()=>{const o=new Set(n.ids.map(String));return t.areas.filter(l=>o.has(String(l.id)))});function r(o){if(!o.parent_id)return null;const l=t.areasById[String(o.parent_id)];return(l==null?void 0:l.display_name)||null}function i(o){a.push({name:"area-detail",params:{id:String(o.id)}})}return bt(()=>{t.areas.length===0&&t.loadAreas()}),(o,l)=>{const u=sn("router-link");return b(),q("section",Rf,[$(v(xt),{title:"Favorites",kicker:"Areas"},{actions:k(()=>[$(v(me),{variant:"primary"},{default:k(()=>[U(M(s.value.length)+" favorite areas",1)]),_:1})]),_:1}),v(t).isLoading?(b(),z(_t,{key:0,text:"Loading areas"})):v(t).error?(b(),z(pt,{key:1,title:"Areas loading failed",error:v(t).error,retry:v(t).loadAreas},null,8,["error","retry"])):s.value.length===0?(b(),z(rt,{key:2,title:"No favorite areas",message:"Favorite areas from the current client are preserved through localStorage."})):(b(),q("ul",Tf,[(b(!0),q(Pe,null,Wt(s.value,c=>(b(),q("li",{key:c.id,class:"area-favorite-item"},[F("article",{class:"area-favorite-card",onClick:d=>i(c)},[l[2]||(l[2]=F("div",{class:"area-favorite-icon"},[F("i",{class:"ph ph-fill ph-bookmark-simple"})],-1)),F("div",If,[F("h2",Df,M(c.display_name),1),F("p",Pf,[$(v(me),{variant:"secondary"},{default:k(()=>[U(M(c.type),1)]),_:2},1024),F("code",null,M(c.alias),1),r(c)?(b(),q("span",Ff,[l[1]||(l[1]=U(" in ",-1)),$(u,{to:{name:"area-detail",params:{id:String(c.parent_id)}},class:"parent-link",onClick:l[0]||(l[0]=Va(()=>{},["stop"]))},{default:k(()=>[U(M(r(c)),1)]),_:2},1032,["to"])])):se("",!0)])]),F("div",Of,[$(qo,{"area-id":c.id},null,8,["area-id"])])],8,$f)]))),128))]))])}}},Nf=Ye(Lf,[["__scopeId","data-v-f8795944"]]);function Mt(){const e=ca();return{has:t=>e.hasPermission(t),hasAny:t=>e.hasAnyPermission(t),permissions:e.permissions}}const Mf=["disabled","aria-expanded"],Uf={class:"area-tree-info"},Bf={class:"text-muted"},Vf={class:"area-tree-actions"},jf={key:0,class:"area-tree-children"},Hf={key:1,class:"area-tree-node"},Gf={class:"area-tree-card area-tree-cycle text-danger"},qf={__name:"AreaTreeNode",props:{area:{type:Object,required:!0},ancestors:{type:Array,default:()=>[]}},setup(e){const t=e,n=hn(),a=wt(),s=Q(()=>a.isNodeExpanded(t.area.id)),r=Q(()=>{var c;return!((c=t.area.children)!=null&&c.length)}),i=Q(()=>t.ancestors.includes(String(t.area.id))),o=Q(()=>[...t.ancestors,String(t.area.id)]);function l(){a.toggleNode(t.area.id)}function u(){n.push({name:"area-detail",params:{id:String(t.area.id)}})}return(c,d)=>{var g;const f=sn("AreaTreeNode",!0);return i.value?(b(),q("li",Hf,[F("article",Gf," Cycle skipped for area ID "+M(e.area.id),1)])):(b(),q("li",{key:0,class:Lt(["area-tree-node",{"is-open":s.value,"is-leaf":r.value}])},[F("article",{class:"area-tree-card",onClick:u},[F("button",{class:Lt(["tree-toggle",{"text-primary":!r.value,"text-muted":r.value}]),type:"button",disabled:r.value,"aria-expanded":s.value,onClick:Va(l,["stop"])},M(r.value?"·":s.value?"−":"+"),11,Mf),F("div",Uf,[F("h2",null,M(e.area.display_name),1),F("p",Bf,[$(v(me),{variant:"secondary"},{default:k(()=>[U(M(e.area.type),1)]),_:1}),F("code",null,M(e.area.alias),1)])]),F("div",Vf,[$(qo,{"area-id":e.area.id},null,8,["area-id"])])]),(g=e.area.children)!=null&&g.length&&s.value?(b(),q("ul",jf,[(b(!0),q(Pe,null,Wt(e.area.children,h=>(b(),z(f,{key:h.id,area:h,ancestors:o.value},null,8,["area","ancestors"]))),128))])):se("",!0)],2))}}},zf={class:"page"},Kf={key:3,class:"area-tree"},Wf={class:"form-group"},Jf={class:"form-group"},Yf={class:"form-group"},Zf={key:0,class:"form-group"},Qf={__name:"AreaTreePage",setup(e){const t=wt(),n=mn(),a=Mt(),s=Z(!1),r=Z(!1),i=Z(""),o=Yt({type:"",alias:"",display_name:""});function l(){o.type="",o.alias="",o.display_name="",i.value="",s.value=!0}async function u(){var d;r.value=!0,i.value="";const c=await t.createArea({...o});if(r.value=!1,!c.ok){i.value=((d=c.error)==null?void 0:d.message)||"Failed to create area";return}s.value=!1,n.success({title:"Created",text:"Area created successfully"})}return bt(()=>{t.loadAreas()}),(c,d)=>(b(),q("section",zf,[$(v(xt),{title:"Tree",kicker:"Areas"},{actions:k(()=>[v(a).has("areas.manage")?(b(),z(v(pe),{key:0,variant:"primary",icon:"ph-plus",onClick:l},{default:k(()=>[...d[5]||(d[5]=[U("Create area",-1)])]),_:1})):se("",!0)]),_:1}),v(t).isLoading?(b(),z(_t,{key:0,text:"Loading areas tree"})):v(t).error?(b(),z(pt,{key:1,title:"Areas loading failed",error:v(t).error,retry:v(t).loadAreas},null,8,["error","retry"])):v(t).areaTree.length===0?(b(),z(rt,{key:2,title:"No areas",message:"No areas found. Create one to get started."})):(b(),q("ul",Kf,[(b(!0),q(Pe,null,Wt(v(t).areaTree,f=>(b(),z(qf,{key:f.id,area:f},null,8,["area"]))),128))])),$(v(ut),{open:s.value,title:"Create area","onUpdate:open":d[4]||(d[4]=f=>s.value=f)},{footer:k(()=>[$(v(pe),{variant:"secondary",onClick:d[3]||(d[3]=f=>s.value=!1)},{default:k(()=>[...d[6]||(d[6]=[U("Cancel",-1)])]),_:1}),$(v(pe),{variant:"primary",icon:"ph-plus",loading:r.value,onClick:u},{default:k(()=>[...d[7]||(d[7]=[U("Create",-1)])]),_:1},8,["loading"])]),default:k(()=>[F("div",Wf,[$(v(Ot),{modelValue:o.type,"onUpdate:modelValue":d[0]||(d[0]=f=>o.type=f),label:"Type",placeholder:"room"},null,8,["modelValue"])]),F("div",Jf,[$(v(Ot),{modelValue:o.alias,"onUpdate:modelValue":d[1]||(d[1]=f=>o.alias=f),label:"Alias",placeholder:"kitchen"},null,8,["modelValue"])]),F("div",Yf,[$(v(Ot),{modelValue:o.display_name,"onUpdate:modelValue":d[2]||(d[2]=f=>o.display_name=f),label:"Display name",placeholder:"Kitchen"},null,8,["modelValue"])]),i.value?(b(),q("div",Zf,[$(v(Qe),{variant:"danger"},{default:k(()=>[U(M(i.value),1)]),_:1})])):se("",!0)]),_:1},8,["open"])]))}},Xf=Ye(Qf,[["__scopeId","data-v-5f02f384"]]),ep={device_name:"name",device_hard_id:"device_id",device_ip:"ip",ip_address:"ip",mac_address:"mac",device_mac:"mac",core_version:"firmware_core_version",type:"device_type"};function tp(e){const t={};for(const[n,a]of Object.entries(e||{}))t[ep[n]||n]=a;return t}function Mn(e){return encodeURIComponent(String(e))}function np(e){var n,a,s;if(!e.ok)return e;const t=((a=(n=e.data)==null?void 0:n.data)==null?void 0:a.devices)||[];return{...e,data:{...e.data,data:{...(s=e.data)==null?void 0:s.data,devices:t.map(tp)}}}}const nt={async list(){return np(await Ne("/api/v1/devices/list"))},status(e,t){return Ne(`/api/v1/devices/id/${Mn(e)}/status`,t)},reboot(e){return Ne(`/api/v1/devices/id/${Mn(e)}/reboot`)},action(e){return Xe("/api/v1/devices/action",e)},scanningSetup(e){return Ne("/api/v1/devices/scanning/setup",{timeoutMs:12e4,...e})},scanningAll(e){return Ne("/api/v1/devices/scanning/all",{timeoutMs:12e4,...e})},setupNewDevice(e){return Xe("/api/v1/devices/setup/new-device",e)},detail(e,t){return Ne(`/api/v1/devices/id/${Mn(e)}`,t)},updateName(e,t){return Xe("/api/v1/devices/update-name",{device_id:e,name:t})},updateDescription(e,t){return Xe("/api/v1/devices/update-description",{device_id:e,description:t})},updateAlias(e,t){return Xe("/api/v1/devices/update-alias",{device_id:e,new_alias:t})},remove(e){return Ne(`/api/v1/devices/id/${Mn(e)}/remove`)},resetup(e){return Xe("/api/v1/devices/resetup",{device_id:e})},reset(e){return Xe("/api/v1/devices/reset",{device_id:e})},unassign(e){return Ne(`/api/v1/devices/id/${Mn(e)}/unassign-from-area`)},placeInArea(e){return Xe("/api/v1/devices/place-in-area",e)}},ap=4;function Rs(e){return String((e==null?void 0:e.id)||"")}function Zs(e,t){return{deviceId:Rs(e),status:"idle",message:"",response:null,connectionStatus:(e==null?void 0:e.connection_status)||"unknown",updatedAt:null,...t}}function sp(e,t){var s,r;const a=(((r=(s=t.data)==null?void 0:s.data)==null?void 0:r.device)||{}).device_response||{};return Zs(e,{status:"ready",message:a.status||"ok",response:a,connectionStatus:"active",updatedAt:new Date().toISOString()})}function rp(e,t){var s,r,i;const n=((s=t.error)==null?void 0:s.raw)||{},a=((r=n==null?void 0:n.data)==null?void 0:r.connection_status)||(e==null?void 0:e.connection_status)||"unknown";return Zs(e,{status:"error",message:((i=t.error)==null?void 0:i.message)||"Device state is unavailable",response:n,connectionStatus:a,updatedAt:new Date().toISOString()})}async function ip(e,t,n){let a=0;const s=Math.max(1,Math.min(t,e.length));async function r(){for(;a{const e=Z([]),t=Z({}),n=Z(0),a=Z(new Set),s=Z(null),r=Z(null),i=Z(null),o=Z(!1),l=Z(null),u=gt(),c=gt(),d=Q(()=>e.value.length),f=Q(()=>V=>a.value.has(String(V)));async function g(){return u.execute(async V=>{var Y,K;const W=await nt.list({signal:V});return W.ok&&(e.value=((K=(Y=W.data)==null?void 0:Y.data)==null?void 0:K.devices)||[],i.value=new Date().toISOString()),W})}function h(V,W){const Y=Rs(V);Y&&(t.value={...t.value,[Y]:Zs(V,W)})}async function w(V,W,Y){const K=n.value+1;n.value=K,o.value=!0,l.value=null,Y&&(t.value={});const ee=[];for(const fe of V)fe.connection_status==="lost"?h(fe,{status:"skipped",message:"Connection lost",connectionStatus:"lost"}):(h(fe,{status:"loading",message:"Loading"}),ee.push(fe));try{await ip(ee,W.concurrency||ap,async fe=>{const Se=await nt.status(fe.id);n.value===K&&(t.value={...t.value,[Rs(fe)]:Se.ok?sp(fe,Se):rp(fe,Se)})})}catch(fe){n.value===K&&(l.value={type:"state_loader_error",message:(fe==null?void 0:fe.message)||"Device states loader failed"})}finally{n.value===K&&(o.value=!1)}}async function y(V,W={}){return w(V,W,!1)}async function P(V={}){return w(e.value,V,!0)}async function _(V){const W=String(V);a.value=new Set(a.value).add(W);const Y=await nt.reboot(V),K=new Set(a.value);return K.delete(W),a.value=K,Y}async function S(V){return c.execute(async W=>{var K,ee;const Y=await nt.detail(V,{signal:W});return Y.ok&&(s.value=((ee=(K=Y.data)==null?void 0:K.data)==null?void 0:ee.device)||null),Y})}async function E(V){var ee,fe;const W=await nt.status(V);if(!W.ok)return r.value={ok:!1,error:W.error,channels:[]},W;const K=(((fe=(ee=W.data)==null?void 0:ee.data)==null?void 0:fe.device)||{}).device_response||{};return r.value={ok:!0,channels:K.channels||[],raw:K},W}async function L(V,W){const Y=await nt.updateName(V,W);return Y.ok&&s.value&&(s.value={...s.value,name:W}),Y}async function D(V,W){const Y=await nt.updateDescription(V,W);return Y.ok&&s.value&&(s.value={...s.value,description:W}),Y}async function T(V,W){const Y=await nt.updateAlias(V,W);return Y.ok&&s.value&&(s.value={...s.value,alias:W}),Y}async function C(V){return nt.remove(V)}async function I(V){return nt.resetup(V)}async function te(V){return nt.reset(V)}async function ue(V){const W=await nt.unassign(V);return W.ok&&s.value&&(s.value={...s.value,area_id:null}),W}async function ye(V,W){const Y=await nt.placeInArea({target_id:V,place_in_area_id:W});return Y.ok&&s.value&&(s.value={...s.value,area_id:W}),Y}function we(){s.value=null,r.value=null,c.clear()}return{devices:e,isLoading:u.isLoading,error:u.error,isLoadingStates:o,stateError:l,stateByDeviceId:t,stateRunId:n,rebootingIds:a,lastLoadedAt:i,currentDevice:s,currentDeviceStatus:r,isLoadingDetail:c.isLoading,errorDetail:c.error,total:d,isRebooting:f,loadDevices:g,setDeviceState:h,loadDeviceStates:P,loadStatesFor:y,rebootDevice:_,loadDeviceDetail:S,loadDeviceStatus:E,updateDeviceName:L,updateDeviceDescription:D,updateDeviceAlias:T,removeDevice:C,unassignDevice:ue,assignToArea:ye,resetupDevice:I,resetDevice:te,clearDeviceDetail:we}}),Rt={actionsList(e){return Ne("/api/v1/scripts/actions/list",e)},regularList(e){return Ne("/api/v1/scripts/regular/list",e)},scopesList(e){return Ne("/api/v1/scripts/scopes/list",e)},runAction(e,t={}){return Xe("/api/v1/scripts/actions/run",{alias:e,params:t})},setActionState(e,t){return Ne(`/api/v1/scripts/actions/alias/${encodeURIComponent(e)}/${t?"enable":"disable"}`)},setRegularState(e,t){return Ne(`/api/v1/scripts/regular/alias/${encodeURIComponent(e)}/${t?"enable":"disable"}`)},setScopeState(e,t){return Ne(`/api/v1/scripts/scopes/name/${encodeURIComponent(e)}/${t?"enable":"disable"}`)},scopeCode(e,t){return Ne(`/api/v1/scripts/scopes/name/${encodeURIComponent(e)}`,t)},placeInArea(e){return Xe("/api/v1/scripts/place-in-area",e)},unassign(e){return Ne(`/api/v1/scripts/id/${encodeURIComponent(String(e))}/unassign-from-area`)}},yn=gn("scripts",()=>{const e=Z([]),t=Z([]),n=Z([]),a=Z(new Set),s=Z(null),r=Z(""),i=gt(),o=gt(),l=gt(),u=gt(),c=Q(()=>e.value.length),d=Q(()=>t.value.length),f=Q(()=>n.value.length),g=Q(()=>V=>a.value.has(V)),h=Q(()=>V=>e.value.find(W=>W.alias===V)||null),w=Q(()=>V=>t.value.find(W=>W.alias===V)||null),y=Q(()=>V=>n.value.find(W=>W.name===V)||null),P=Q(()=>V=>e.value.filter(W=>W.scope===V)),_=Q(()=>V=>t.value.filter(W=>W.scope===V));async function S(){return i.execute(async V=>{var Y,K;const W=await Rt.actionsList({signal:V});return W.ok&&(e.value=((K=(Y=W.data)==null?void 0:Y.data)==null?void 0:K.scripts)||[]),W})}async function E(){return o.execute(async V=>{var Y,K;const W=await Rt.regularList({signal:V});return W.ok&&(t.value=((K=(Y=W.data)==null?void 0:Y.data)==null?void 0:K.scripts)||[]),W})}async function L(){return l.execute(async V=>{var Y,K;const W=await Rt.scopesList({signal:V});return W.ok&&(n.value=((K=(Y=W.data)==null?void 0:Y.data)==null?void 0:K.scopes)||[]),W})}async function D(V,W={}){var ee,fe,Se,Ee,be,Me;a.value=new Set(a.value).add(V),s.value=null;const Y=await Rt.runAction(V,W),K=new Set(a.value);return K.delete(V),a.value=K,Y.ok?(s.value={alias:V,ok:!0,data:(Se=(fe=(ee=Y.data)==null?void 0:ee.data)==null?void 0:fe.return)==null?void 0:Se.result,execTime:(Me=(be=(Ee=Y.data)==null?void 0:Ee.data)==null?void 0:be.return)==null?void 0:Me.exec_time},Y):(s.value={alias:V,ok:!1,error:Y.error},Y)}async function T(V,W){const Y=await Rt.setActionState(V,W);if(Y.ok){const K=e.value.findIndex(ee=>ee.alias===V);K!==-1&&(e.value[K]={...e.value[K],state:W?"enabled":"disabled"})}return Y}async function C(V,W){const Y=await Rt.setRegularState(V,W);if(Y.ok){const K=t.value.findIndex(ee=>ee.alias===V);K!==-1&&(t.value[K]={...t.value[K],state:W?"enabled":"disabled"})}return Y}async function I(V,W){const Y=await Rt.setScopeState(V,W);if(Y.ok){const K=n.value.findIndex(ee=>ee.name===V);K!==-1&&(n.value[K]={...n.value[K],state:W?"enabled":"disabled"})}return Y}async function te(V,W){const Y=await Rt.placeInArea({target_id:V,place_in_area_id:W});if(Y.ok){const K=e.value.findIndex(fe=>fe.id===V);K!==-1&&e.value.splice(K,1,{...e.value[K],area_id:W});const ee=t.value.findIndex(fe=>fe.id===V);ee!==-1&&t.value.splice(ee,1,{...t.value[ee],area_id:W})}return Y}async function ue(V){const W=await Rt.unassign(V);if(W.ok){const Y=e.value.findIndex(ee=>ee.id===V);Y!==-1&&e.value.splice(Y,1,{...e.value[Y],area_id:null});const K=t.value.findIndex(ee=>ee.id===V);K!==-1&&t.value.splice(K,1,{...t.value[K],area_id:null})}return W}async function ye(V){return u.execute(async W=>{const Y=await Rt.scopeCode(V,{signal:W});return Y.ok&&(r.value=typeof Y.data=="string"?Y.data:""),Y})}function we(){r.value="",u.clear()}return{actions:e,regular:t,scopes:n,isLoadingActions:i.isLoading,isLoadingRegular:o.isLoading,isLoadingScopes:l.isLoading,errorActions:i.error,errorRegular:o.error,errorScopes:l.error,runningAliases:a,lastRunResult:s,currentScopeCode:r,isLoadingScopeCode:u.isLoading,errorScopeCode:u.error,totalActions:c,totalRegular:d,totalScopes:f,isRunning:g,actionByAlias:h,regularByAlias:w,scopeByName:y,actionsByScope:P,regularByScope:_,loadActions:S,loadRegular:E,loadScopes:L,runScript:D,setActionState:T,setRegularState:C,setScopeState:I,assignToArea:te,unassignFromArea:ue,loadScopeCode:ye,clearScopeCode:we}});function Qs(){const e=wt(),t=Z(""),n=Q(()=>e.areas.filter(u=>String(u.id)!==String(t.value)).map(u=>({value:String(u.id),label:`${u.display_name} (${u.type})`}))),a=Z(!1),s=Z(""),r=Z(!1),i=Z("");function o(u){s.value=u?String(u):"",t.value=u?String(u):"",i.value="",a.value=!0}async function l(u,c){var f;if(!u||!c)return;r.value=!0,i.value="";const d=await c(u,s.value);return r.value=!1,d.ok?(a.value=!1,d):(i.value=((f=d.error)==null?void 0:f.message)||"Failed to assign area",d)}return{areaOptions:n,showAssignModal:a,selectedAreaId:s,assignLoading:r,assignError:i,openAssign:o,submitAssignCore:l}}const op={key:1,class:"text-muted",style:{"font-size":"13px"}},lp={__name:"AreaBadgeLink",props:{area:{type:Object,default:null},areaId:{type:[Number,String],default:null}},setup(e){return(t,n)=>{const a=sn("router-link");return e.area?(b(),z(a,{key:0,to:{name:"area-detail",params:{id:e.area.id}},class:"area-link"},{default:k(()=>[$(v(me),{variant:"info"},{default:k(()=>[U(M(e.area.display_name),1)]),_:1})]),_:1},8,["to"])):e.areaId?(b(),q("span",op,"Area ID: "+M(e.areaId),1)):se("",!0)}}},Xs=Ye(lp,[["__scopeId","data-v-91230b95"]]),up={class:"devices-panel"},cp={class:"block-title"},dp={key:0,class:"area-assigned"},fp={class:"area-card-info"},pp={class:"text-muted"},vp={__name:"AreaAssignSection",props:{item:{type:Object,default:null},areaId:{type:[Number,String],default:null},title:{type:String,default:"Area"},emptyMessage:{type:String,default:"This item is not assigned to any area."}},emits:["assign"],setup(e,{emit:t}){const n=e,a=t,s=wt(),r=Q(()=>{var o;const i=n.areaId!=null?n.areaId:(o=n.item)==null?void 0:o.area_id;return i&&s.areasById[String(i)]||null});return(i,o)=>{const l=sn("router-link");return b(),q("div",up,[F("div",cp,M(e.title),1),r.value?(b(),q("div",dp,[$(l,{to:{name:"area-detail",params:{id:r.value.id}},class:"area-card"},{default:k(()=>[o[1]||(o[1]=F("div",{class:"area-card-icon text-primary"},[F("i",{class:"ph ph-map-trifold"})],-1)),F("div",fp,[F("strong",null,M(r.value.display_name),1),F("small",pp,M(r.value.type)+" — "+M(r.value.alias),1)])]),_:1},8,["to"])])):(b(),z(rt,{key:1,title:"Not assigned",message:e.emptyMessage},{action:k(()=>[Na(i.$slots,"action",{},()=>[$(v(pe),{variant:"primary",icon:"ph-map-pin",onClick:o[0]||(o[0]=u=>a("assign"))},{default:k(()=>[...o[2]||(o[2]=[U("Assign to area",-1)])]),_:1})],!0)]),_:3},8,["message"]))])}}},er=Ye(vp,[["__scopeId","data-v-92cae82c"]]),gp={class:"device-channels-state"},hp={key:3,class:"channels-grid"},mp={key:0,class:"ph ph-caret-up"},yp={key:1,class:"ph ph-caret-down"},_p={key:0,class:"ph ph-caret-up"},bp={key:1,class:"ph ph-caret-down"},wp={key:0,class:"ph ph-caret-up"},Sp={key:1,class:"ph ph-caret-down"},kp={key:0,class:"ph ph-caret-up"},Ap={key:1,class:"ph ph-caret-down"},xp={key:0,class:"ph ph-caret-up"},Cp={key:1,class:"ph ph-caret-down"},Ep={key:0,class:"raw-json text-muted"},Rp={__name:"DeviceChannelsState",props:{deviceType:{type:String,default:""},response:{type:Object,default:null},loading:{type:Boolean,default:!1},error:{type:[String,Object],default:null},connectionStatus:{type:String,default:"unknown"}},setup(e){const t=e,n=Q(()=>t.connectionStatus==="lost"),a=Q(()=>{var h;return((h=t.response)==null?void 0:h.channels)||[]}),s=Q(()=>{var h;return((h=t.response)==null?void 0:h.sensors)||{}}),r=Q(()=>{var h,w;return((w=(h=t.response)==null?void 0:h.hatch)==null?void 0:w.state)||"—"}),i=Q(()=>{var h,w;return((w=(h=t.response)==null?void 0:h.hatch)==null?void 0:w.position_pct)??"—"}),o=Q(()=>String(r.value).includes("open")?"warning":"primary"),l=Q(()=>String(r.value).includes("open")),u=Q(()=>{var h;return((h=t.response)==null?void 0:h.status)==="ok"}),c=Q(()=>{if(!t.response)return"";try{return JSON.stringify(t.response).slice(0,200)}catch{return""}}),d=Q(()=>{var h;return u.value?t.deviceType==="relay"||t.deviceType==="button"?a.value.length>0:t.deviceType==="sensor"?Object.keys(s.value).length>0:t.deviceType==="hatch"?!!((h=t.response)!=null&&h.hatch):!1:!1});function f(h){return h.id??h.channel}function g(h){return{enabled:"success",disabled:"secondary",mute:"primary",waiting:"warning",error:"danger"}[h]||"secondary"}return(h,w)=>(b(),q("div",gp,[e.loading?(b(),z(v(Bo),{key:0,circle:"",size:"sm",label:"Loading state"})):n.value?(b(),z(v(me),{key:1,variant:"danger",size:"sm"},{default:k(()=>[...w[0]||(w[0]=[F("i",{class:"ph ph-wifi-slash"},null,-1),U(" Offline ",-1)])]),_:1})):e.error||!u.value?(b(),z(v(me),{key:2,variant:"danger",size:"sm"},{default:k(()=>[w[1]||(w[1]=F("i",{class:"ph ph-warning-octagon"},null,-1)),typeof e.error=="string"?(b(),q(Pe,{key:0},[U(M(e.error),1)],64)):(b(),q(Pe,{key:1},[U("Error")],64))]),_:1})):d.value?(b(),q("div",hp,[e.deviceType==="relay"?(b(!0),q(Pe,{key:0},Wt(a.value,y=>(b(),z(v(me),{key:f(y),variant:y.state==="on"||y.state===!0?"success":"secondary",size:"sm"},{default:k(()=>[a.value.length>1?(b(),q(Pe,{key:0},[U(M(f(y))+": ",1)],64)):se("",!0),F("b",null,M(y.state=="off"?"OFF":"ON"),1)]),_:2},1032,["variant"]))),128)):e.deviceType==="button"?(b(!0),q(Pe,{key:1},Wt(a.value,y=>(b(),z(v(me),{key:f(y),variant:g(y.indicator),size:"sm"},{default:k(()=>[U(M(f(y))+": ",1),F("b",null,M(y.indicator),1)]),_:2},1032,["variant"]))),128)):e.deviceType==="sensor"?(b(),q(Pe,{key:2},[s.value.radar?(b(),z(v(me),{key:0,variant:"primary",size:"sm"},{default:k(()=>[F("i",{class:Lt(["ph",s.value.radar.presence?"ph-user-square":"ph-square"])},null,2),s.value.radar.presence?(b(),q(Pe,{key:0},[U(M(s.value.radar.activity_score)+" ",1),s.value.radar.activity_score_dynamics==="increasing"?(b(),q("i",mp)):s.value.radar.activity_score_dynamics==="decreasing"?(b(),q("i",yp)):se("",!0)],64)):se("",!0)]),_:1})):se("",!0),s.value.temperature?(b(),z(v(me),{key:1,variant:"primary",size:"sm"},{default:k(()=>[w[2]||(w[2]=F("i",{class:"ph ph-thermometer"},null,-1)),U(" "+M(s.value.temperature.current)+"°C ",1),s.value.temperature.dynamics==="increasing"?(b(),q("i",_p)):s.value.temperature.dynamics==="decreasing"?(b(),q("i",bp)):se("",!0)]),_:1})):se("",!0),s.value.humidity?(b(),z(v(me),{key:2,variant:"primary",size:"sm"},{default:k(()=>[w[3]||(w[3]=F("i",{class:"ph ph-drop-half-bottom"},null,-1)),U(" "+M(s.value.humidity.current)+"% ",1),s.value.humidity.dynamics==="increasing"?(b(),q("i",wp)):s.value.humidity.dynamics==="decreasing"?(b(),q("i",Sp)):se("",!0)]),_:1})):se("",!0),s.value.pressure?(b(),z(v(me),{key:3,variant:"primary",size:"sm"},{default:k(()=>[U(M(s.value.pressure.current)+"hpa ",1),s.value.pressure.dynamics==="increasing"?(b(),q("i",kp)):s.value.pressure.dynamics==="decreasing"?(b(),q("i",Ap)):se("",!0)]),_:1})):se("",!0),s.value.light?(b(),z(v(me),{key:4,variant:"primary",size:"sm"},{default:k(()=>[w[4]||(w[4]=F("i",{class:"ph ph-lightbulb"},null,-1)),U(" "+M(s.value.light.percent)+"% ",1)]),_:1})):se("",!0),s.value.microphone?(b(),z(v(me),{key:5,variant:"primary",size:"sm"},{default:k(()=>[w[5]||(w[5]=F("i",{class:"ph ph-ear"},null,-1)),U(" "+M(s.value.microphone.current_noise)+"dBi ",1),s.value.microphone.noise_dynamics==="increasing"?(b(),q("i",xp)):s.value.microphone.noise_dynamics==="decreasing"?(b(),q("i",Cp)):se("",!0)]),_:1})):se("",!0)],64)):e.deviceType==="hatch"?(b(),z(v(me),{key:3,variant:o.value,size:"sm"},{default:k(()=>[U(M(r.value)+" ",1),l.value?(b(),q(Pe,{key:0},[U(" - "+M(i.value)+"%",1)],64)):se("",!0)]),_:1},8,["variant"])):(b(),q(Pe,{key:4},[w[6]||(w[6]=F("span",{class:"unknown-type text-muted"},"Unknown type",-1)),c.value?(b(),q("pre",Ep,M(c.value),1)):se("",!0)],64))])):(b(),z(v(me),{key:4,variant:"secondary",size:"sm"},{default:k(()=>[...w[7]||(w[7]=[U("No data",-1)])]),_:1}))]))}},zo=Ye(Rp,[["__scopeId","data-v-08541c71"]]),Tp={class:"device-cell"},$p=["innerHTML"],Ip={class:"device-info"},Dp={class:"device-name-row"},Pp=["title"],Fp={class:"text-muted"},Op={__name:"DeviceTable",props:{devices:{type:Array,required:!0},showActions:{type:Boolean,default:!0},caption:{type:String,default:"Devices"}},setup(e){const t=e,n=za(),a=mn(),s=Mt(),r={relay:'',button:'',sensor:''},i=Q(()=>{const d=[{key:"device",label:"Device"},{key:"state",label:"State"}];return t.showActions&&d.push({key:"actions",label:"Actions"}),d});function o(d){return r[d]||r.relay}function l(d){return{active:"success",removed:"danger",freezed:"warning",setup:"primary"}[d]||"secondary"}function u(d){return n.stateByDeviceId[String(d.id)]||{status:"idle",message:"Not loaded",connectionStatus:d.connection_status||"unknown"}}async function c(d){var h;const f=t.devices.find(w=>String(w.id)===String(d)),g=await n.rebootDevice(d);g.ok?a.success({title:"Rebooting",text:`Device ${(f==null?void 0:f.name)||(f==null?void 0:f.alias)||"#"+d} is rebooting`}):a.error({title:"Reboot failed",text:((h=g.error)==null?void 0:h.message)||"Failed to reboot device"})}return(d,f)=>{const g=sn("router-link");return b(),z(v(Dn),{columns:i.value,rows:e.devices,caption:e.caption},Zi({"cell-device":k(({row:h})=>[$(g,{to:{name:"device-detail",params:{id:String(h.id)}},class:"device-link"},{default:k(()=>[F("div",Tp,[F("div",{class:"device-icon text-primary",innerHTML:o(h.device_type)},null,8,$p),F("div",Ip,[F("div",Dp,[F("strong",null,M(h.name||h.alias||`Device #${h.id}`),1),h.status&&h.status!=="active"?(b(),z(v(me),{key:0,variant:l(h.status),size:"sm"},{default:k(()=>[U(M(h.status),1)]),_:2},1032,["variant"])):se("",!0),F("span",{class:Lt(["status-dot",{"text-success":h.connection_status==="active","text-danger":h.connection_status!=="active"}]),"aria-hidden":"true",title:h.connection_status==="active"?"Online":"Offline"},null,10,Pp)]),F("small",Fp,M(h.alias)+" — "+M(h.device_ip||"—"),1)])])]),_:2},1032,["to"])]),"cell-state":k(({row:h})=>[$(zo,{"device-type":h.device_type,response:u(h).response,loading:u(h).status==="loading",error:u(h).status==="error"?u(h).message:null,"connection-status":h.connection_status||"unknown"},null,8,["device-type","response","loading","error","connection-status"])]),_:2},[e.showActions&&v(s).has("devices.control")?{name:"cell-actions",fn:k(({row:h})=>[$(v(pe),{variant:"warning",icon:"ph-arrow-clockwise",size:"sm",loading:v(n).isRebooting(h.id),onClick:w=>c(h.id)},{default:k(()=>[...f[0]||(f[0]=[U(" Reboot ",-1)])]),_:1},8,["loading","onClick"])]),key:"0"}:void 0]),1032,["columns","rows","caption"])}}},Ko=Ye(Op,[["__scopeId","data-v-e9714d75"]]),Lp={class:"scope-name"},Np={key:1,class:"muted"},Mp={key:1,class:"muted"},Up={__name:"ScriptTable",props:{scripts:{type:Array,required:!0},scriptType:{type:String,default:"regular"},showArea:{type:Boolean,default:!1},showScope:{type:Boolean,default:!0},showFilename:{type:Boolean,default:!0},showActions:{type:Boolean,default:!0},caption:{type:String,default:"Scripts"}},setup(e){const t=e,n=yn(),a=wt(),s=Mt(),r=Q(()=>{const c={};for(const d of a.areas)c[d.id]=d;return c});function i(c){var d;return c.area_id?((d=r.value[c.area_id])==null?void 0:d.display_name)||`Area ${c.area_id}`:null}function o(c){const d=c.type||t.scriptType;return d==="action"?"actions":d==="scope"?"scopes":d}const l=Q(()=>{const c=[{key:"alias",label:"Alias"},{key:"name",label:"Name"}];return t.showScope&&c.push({key:"scope",label:"Scope"}),t.showArea&&c.push({key:"area",label:"Area"}),c.push({key:"state",label:"State"}),t.showFilename&&c.push({key:"filename",label:"File"}),t.showActions&&c.push({key:"actions",label:"Actions"}),c});function u(c,d,f){const g=f.type||t.scriptType;g==="action"?n.setActionState(c,d):g==="regular"&&n.setRegularState(c,d)}return(c,d)=>{const f=sn("router-link");return b(),z(v(Dn),{columns:l.value,rows:e.scripts,caption:e.caption},Zi({"cell-alias":k(({row:g})=>[$(f,{to:{name:"script-detail",params:{type:o(g),id:g.alias}},class:"script-link"},{default:k(()=>[U(M(g.alias),1)]),_:2},1032,["to"])]),"cell-scope":k(({row:g})=>[g.scope?(b(),z(f,{key:0,to:{name:"script-detail",params:{type:"scopes",id:g.scope}},class:"scope-link"},{default:k(()=>[d[0]||(d[0]=F("span",{class:"scope-label"},"Scope",-1)),F("span",Lp,M(g.scope),1),d[1]||(d[1]=F("i",{class:"ph ph-arrow-right"},null,-1))]),_:2},1032,["to"])):(b(),q("span",Np,"—"))]),"cell-area":k(({row:g})=>[g.area_id?(b(),z(v(me),{key:0,variant:"primary"},{default:k(()=>[U(M(i(g)),1)]),_:2},1024)):(b(),q("span",Mp,"—"))]),"cell-state":k(({row:g})=>[$(v(me),{variant:g.state==="enabled"?"success":"secondary"},{default:k(()=>[U(M(g.state),1)]),_:2},1032,["variant"])]),_:2},[e.showActions&&v(s).has("scripts.edit")?{name:"cell-actions",fn:k(({row:g})=>[g.state==="enabled"?(b(),z(v(pe),{key:0,variant:"secondary",icon:"ph-pause",onClick:h=>u(g.alias,!1,g)},{default:k(()=>[...d[2]||(d[2]=[U(" Disable ",-1)])]),_:1},8,["onClick"])):(b(),z(v(pe),{key:1,variant:"primary",icon:"ph-play",onClick:h=>u(g.alias,!0,g)},{default:k(()=>[...d[3]||(d[3]=[U(" Enable ",-1)])]),_:1},8,["onClick"]))]),key:"0"}:void 0]),1032,["columns","rows","caption"])}}},Wo=Ye(Up,[["__scopeId","data-v-1ead75a7"]]),Bp={class:"page-actions-dropdown"},Vp=["aria-expanded","onClick"],tr={__name:"PageActionsDropdown",props:{items:{type:Array,required:!0}},setup(e){return(t,n)=>(b(),q("div",Bp,[$(v(zd),yo({items:e.items},t.$attrs),{trigger:k(({toggle:a,open:s})=>[F("button",{class:"btn-icon",type:"button","aria-label":"Actions","aria-expanded":s?"true":"false",onClick:a},[...n[0]||(n[0]=[F("i",{class:"ph ph-dots-three-vertical"},null,-1)])],8,Vp)]),_:1},16,["items"])]))}},jp={class:"area-grid"},Hp=["innerHTML"],Gp={key:1},qp={class:"script-meta"},zp={key:2},Kp={__name:"ActionScriptsGrid",props:{scripts:{type:Array,required:!0},showAreaBadge:{type:Boolean,default:!1}},emits:["run-success"],setup(e,{emit:t}){const n=e,a=t,s=hn(),r=yn(),i=wt(),o=mn(),l=Mt();function u(f){return!f.area_id||!n.showAreaBadge?null:i.areas.find(g=>g.id===f.area_id)||null}async function c(f){var h,w;const g=await r.runScript(f);g!=null&&g.ok?(o.success({title:`Ran ${f}`,text:(h=r.lastRunResult)!=null&&h.execTime?`Exec time: ${r.lastRunResult.execTime}`:void 0}),a("run-success",{alias:f})):o.error({title:`Failed ${f}`,text:((w=g==null?void 0:g.error)==null?void 0:w.message)||"Unknown error"})}function d(f){s.push({name:"script-detail",params:{type:"actions",id:f}})}return(f,g)=>(b(),q("div",jp,[(b(!0),q(Pe,null,Wt(e.scripts,h=>(b(),z(v(jd),{key:h.alias,title:h.name,onClick:w=>d(h.alias)},{default:k(()=>[h.icon?(b(),q("div",{key:0,innerHTML:h.icon,class:"script-icon"},null,8,Hp)):se("",!0),h.description?(b(),q("p",Gp,M(h.description),1)):se("",!0),F("div",qp,[$(v(me),{variant:h.state==="enabled"?"success":"secondary"},{default:k(()=>[U(M(h.state),1)]),_:2},1032,["variant"]),h.scope?(b(),z(v(me),{key:0,variant:"primary"},{default:k(()=>[U(M(h.scope),1)]),_:2},1024)):se("",!0),e.showAreaBadge&&u(h)?(b(),z(v(me),{key:1,variant:"primary"},{default:k(()=>[U(M(u(h).display_name),1)]),_:2},1024)):se("",!0)]),h.created_by||h.author?(b(),q("small",zp,M(h.created_by||h.author),1)):se("",!0)]),actions:k(()=>[v(l).has("scripts.run")?(b(),z(v(pe),{key:0,variant:"primary",icon:"ph-play",loading:v(r).isRunning(h.alias),disabled:h.state!=="enabled",onClick:Va(w=>c(h.alias),["stop"])},{default:k(()=>[...g[0]||(g[0]=[U(" Run ",-1)])]),_:1},8,["loading","disabled","onClick"])):se("",!0)]),_:2},1032,["title","onClick"]))),128))]))}},Jo=Ye(Kp,[["__scopeId","data-v-aeab265d"]]),Wp={class:"page"},Jp={key:3},Yp={class:"area-meta"},Zp={class:"actions-panel"},Qp={class:"block-title"},Xp={class:"devices-panel"},ev={class:"block-title"},tv={class:"scripts-panel"},nv={class:"block-title"},av={class:"form-group"},sv={key:0,class:"form-group"},rv={key:1,class:"form-group"},iv={key:2,class:"form-group"},ov={key:0,class:"form-group"},lv={key:0,class:"form-group"},uv={__name:"AreaDetailPage",setup(e){const t=qa(),n=hn(),a=wt(),s=za(),r=Ys();yn();const i=mn(),o=Mt(),{showAssignModal:l,selectedAreaId:u,assignLoading:c,assignError:d,openAssign:f,submitAssignCore:g}=Qs(),h=Q(()=>a.areasById[String(t.params.id)]||null),w=Q(()=>h.value?r.has(h.value.id):!1),y=Q(()=>{var A;const R=[];return o.has("areas.manage")&&(R.push({label:"Rename",icon:"ph-pencil",onSelect:fe}),((A=h.value)==null?void 0:A.parent_id)>0?R.push({label:"Change parent area",icon:"ph-map-pin",onSelect:Me},{label:"Unassign from parent",icon:"ph-x-circle",onSelect:je}):R.push({label:"Assign to area",icon:"ph-map-pin",onSelect:Me})),R.push({label:w.value?"Remove bookmark":"Bookmark",icon:w.value?"ph-fill ph-bookmark-simple":"ph-bookmark-simple",onSelect:()=>{var X;return r.toggle((X=h.value)==null?void 0:X.id)}}),o.has("areas.manage")&&R.push({label:"Remove",icon:"ph-trash",danger:!0,onSelect:Ee}),R}),P=Q(()=>!h.value||h.value.parent_id<=0?null:a.areasById[String(h.value.parent_id)]||null),_=Q(()=>a.currentAreaScripts.filter(R=>R.type==="action")),S=Q(()=>a.currentAreaScripts.filter(R=>R.type!=="action")),E=Q(()=>{if(!h.value)return!1;const R=!h.value.parent_id||h.value.parent_id<=0,A=a.areas.filter(X=>!X.parent_id||X.parent_id<=0).length;return R&&A===1});function L(R){const A=new Set,X=[R];for(;X.length;){const p=X.shift(),m=a.areas.filter(x=>x.parent_id===p);for(const x of m)A.add(x.id),X.push(x.id)}return A}const D=Q(()=>{if(!h.value)return[];const R=new Set([h.value.id,...L(h.value.id)]);return a.areas.filter(A=>!R.has(A.id)).map(A=>({value:String(A.id),label:`${A.display_name} (${A.type})`}))}),T=Z(!1),C=Z(!1),I=Z(""),te=Yt({areaId:null,display_name:""}),ue=Z(!1),ye=Z(""),we=Z(!1),V=Z(""),W=Z(!1),Y=Z(""),K=Z(!1),ee=Z("");function fe(){h.value&&(te.areaId=h.value.id,te.display_name=h.value.display_name,I.value="",T.value=!0)}async function Se(){var A;C.value=!0,I.value="";const R=await a.renameArea(te.areaId,te.display_name);if(C.value=!1,!R.ok){I.value=((A=R.error)==null?void 0:A.message)||"Failed to rename area";return}T.value=!1,i.success({title:"Renamed",text:"Area renamed successfully"})}function Ee(){h.value&&(ye.value=`Are you sure you want to remove area "${h.value.display_name}"?`,V.value="",ue.value=!0)}async function be(){var A;if(!h.value)return;we.value=!0,V.value="";const R=await a.removeArea(h.value.id);if(we.value=!1,!R.ok){V.value=((A=R.error)==null?void 0:A.message)||"Failed to remove area";return}ue.value=!1,i.success({title:"Removed",text:"Area removed successfully"}),n.push({name:"areas-tree"})}function Me(){var R;f(((R=h.value)==null?void 0:R.parent_id)>0?h.value.parent_id:"")}async function Ve(){var X;const R=(X=h.value)==null?void 0:X.id,A=await g(R,(p,m)=>a.assignToArea(p,m));A!=null&&A.ok&&i.success({title:"Assigned",text:"Area assigned successfully"})}function je(){h.value&&(Y.value=`Are you sure you want to unassign area "${h.value.display_name}" from its parent?`,ee.value="",W.value=!0)}async function $e(){var A;if(!h.value)return;K.value=!0,ee.value="";const R=await a.unassignArea(h.value.id);if(K.value=!1,!R.ok){ee.value=((A=R.error)==null?void 0:A.message)||"Failed to unassign area";return}W.value=!1,i.success({title:"Unassigned",text:"Area unassigned from parent successfully"})}async function N(){a.currentAreaDevices.length>0&&await s.loadStatesFor(a.currentAreaDevices)}async function ae(){const R=t.params.id;R&&(a.areas.length===0&&await a.loadAreas(),a.areasById[String(R)]&&(await a.loadAreaDetail(R),await N()))}return bt(()=>{ae()}),la(()=>{a.clearAreaDetail()}),(R,A)=>(b(),q("section",Wp,[v(a).isLoading||v(a).isLoadingAreaDetail?(b(),z(_t,{key:0,text:"Loading area"})):v(a).error&&!v(a).areas.length?(b(),z(pt,{key:1,title:"Areas loading failed",error:v(a).error,retry:ae},null,8,["error"])):v(a).errorAreaDetail?(b(),z(pt,{key:2,title:"Area loading failed",error:v(a).errorAreaDetail,retry:ae},null,8,["error"])):h.value?(b(),q("div",Jp,[$(v(xt),{title:h.value.display_name,kicker:"Area"},{actions:k(()=>[$(tr,{items:y.value},null,8,["items"])]),_:1},8,["title"]),F("div",Yp,[$(v(me),{variant:"secondary"},{default:k(()=>[U(M(h.value.type),1)]),_:1}),F("code",null,M(h.value.alias),1),$(Xs,{area:P.value,areaId:h.value.parent_id},null,8,["area","areaId"])]),F("div",Zp,[F("div",Qp,"Actions ("+M(_.value.length)+")",1),_.value.length===0?(b(),z(rt,{key:0,title:"No actions",message:"No action scripts assigned to this area."})):(b(),z(Jo,{key:1,scripts:_.value,onRunSuccess:N},null,8,["scripts"]))]),F("div",Xp,[F("div",ev,"Devices ("+M(v(a).currentAreaDevices.length)+")",1),v(a).currentAreaDevices.length===0?(b(),z(rt,{key:0,title:"No devices",message:"No devices assigned to this area."})):(b(),z(Ko,{key:1,devices:v(a).currentAreaDevices,caption:"Area devices"},null,8,["devices"]))]),$(er,{areaId:h.value.parent_id>0?h.value.parent_id:null,title:"Parent area",emptyMessage:"This area is not assigned to any parent area.",onAssign:Me},{action:k(()=>[v(o).has("areas.manage")?(b(),z(v(pe),{key:0,variant:"primary",icon:"ph-map-pin",onClick:Me},{default:k(()=>[U(M(h.value.parent_id>0?"Change parent area":"Assign to area"),1)]),_:1})):se("",!0)]),_:1},8,["areaId"]),F("div",tv,[F("div",nv,"Regular scripts ("+M(S.value.length)+")",1),S.value.length===0?(b(),z(rt,{key:0,title:"No regular scripts",message:"No regular scripts assigned to this area."})):(b(),z(Wo,{key:1,scripts:S.value,scriptType:"regular",showArea:!1,showActions:!1,showFilename:!1,caption:"Area regular scripts"},null,8,["scripts"]))])])):(b(),z(rt,{key:4,title:"Area not found",message:"The requested area does not exist."})),$(v(ut),{open:T.value,title:"Rename area","onUpdate:open":A[2]||(A[2]=X=>T.value=X)},{footer:k(()=>[$(v(pe),{variant:"secondary",onClick:A[1]||(A[1]=X=>T.value=!1)},{default:k(()=>[...A[10]||(A[10]=[U("Cancel",-1)])]),_:1}),$(v(pe),{variant:"primary",icon:"ph-check",loading:C.value,onClick:Se},{default:k(()=>[...A[11]||(A[11]=[U("Rename",-1)])]),_:1},8,["loading"])]),default:k(()=>[F("div",av,[$(v(Ot),{modelValue:te.display_name,"onUpdate:modelValue":A[0]||(A[0]=X=>te.display_name=X),label:"Display name"},null,8,["modelValue"])]),I.value?(b(),q("div",sv,[$(v(Qe),{variant:"danger"},{default:k(()=>[U(M(I.value),1)]),_:1})])):se("",!0)]),_:1},8,["open"]),$(v(ut),{open:v(l),title:"Assign to parent area","onUpdate:open":A[5]||(A[5]=X=>l.value=X)},{footer:k(()=>[$(v(pe),{variant:"secondary",onClick:A[4]||(A[4]=X=>l.value=!1)},{default:k(()=>[...A[13]||(A[13]=[U("Cancel",-1)])]),_:1}),E.value?se("",!0):(b(),z(v(pe),{key:0,variant:"primary",icon:"ph-check",loading:v(c),onClick:Ve},{default:k(()=>[...A[14]||(A[14]=[U(" Assign ",-1)])]),_:1},8,["loading"]))]),default:k(()=>[E.value?se("",!0):(b(),z(v(Js),{key:0,modelValue:v(u),"onUpdate:modelValue":A[3]||(A[3]=X=>Ue(u)?u.value=X:null),label:"Parent area",options:D.value,icon:"ph-map-trifold"},null,8,["modelValue","options"])),E.value?(b(),q("div",rv,[$(v(Qe),{variant:"warning"},{default:k(()=>[...A[12]||(A[12]=[U(" This is the last root area and cannot be assigned as a child. At least one root area must remain. ",-1)])]),_:1})])):se("",!0),v(d)?(b(),q("div",iv,[$(v(Qe),{variant:"danger"},{default:k(()=>[U(M(v(d)),1)]),_:1})])):se("",!0)]),_:1},8,["open"]),$(v(ut),{open:W.value,title:"Unassign from parent","onUpdate:open":A[7]||(A[7]=X=>W.value=X)},{footer:k(()=>[$(v(pe),{variant:"secondary",onClick:A[6]||(A[6]=X=>W.value=!1)},{default:k(()=>[...A[15]||(A[15]=[U("Cancel",-1)])]),_:1}),$(v(pe),{variant:"warning",icon:"ph-x-circle",loading:K.value,onClick:$e},{default:k(()=>[...A[16]||(A[16]=[U(" Unassign ",-1)])]),_:1},8,["loading"])]),default:k(()=>[F("p",null,M(Y.value),1),ee.value?(b(),q("div",ov,[$(v(Qe),{variant:"danger"},{default:k(()=>[U(M(ee.value),1)]),_:1})])):se("",!0)]),_:1},8,["open"]),$(v(ut),{open:ue.value,title:"Remove area","onUpdate:open":A[9]||(A[9]=X=>ue.value=X)},{footer:k(()=>[$(v(pe),{variant:"secondary",onClick:A[8]||(A[8]=X=>ue.value=!1)},{default:k(()=>[...A[17]||(A[17]=[U("Cancel",-1)])]),_:1}),$(v(pe),{variant:"danger",icon:"ph-trash",loading:we.value,onClick:be},{default:k(()=>[...A[18]||(A[18]=[U(" Remove ",-1)])]),_:1},8,["loading"])]),default:k(()=>[F("p",null,M(ye.value),1),V.value?(b(),q("div",lv,[$(v(Qe),{variant:"danger"},{default:k(()=>[U(M(V.value),1)]),_:1})])):se("",!0)]),_:1},8,["open"])]))}},cv=Ye(uv,[["__scopeId","data-v-a72edcc6"]]),dv={class:"page"},fv={key:3,class:"devices-panel"},pv={class:"devices-summary"},vv=300*1e3,gv={__name:"DevicesListPage",setup(e){const t=za(),n=Q(()=>{if(!t.lastLoadedAt)return!1;const s=new Date(t.lastLoadedAt).getTime();return Date.now()-s>vv});async function a(){(await t.loadDevices()).ok&&await t.loadDeviceStates()}return bt(a),(s,r)=>(b(),q("section",dv,[$(v(xt),{title:"Device Matrix",kicker:"Devices"},{actions:k(()=>[$(v(pe),{loading:v(t).isLoading||v(t).isLoadingStates,icon:"ph-arrow-clockwise",onClick:a},{default:k(()=>[...r[0]||(r[0]=[U(" Refresh ",-1)])]),_:1},8,["loading"])]),_:1}),v(t).isLoading?(b(),z(_t,{key:0,text:"Loading devices"})):v(t).error?(b(),z(pt,{key:1,title:"Devices loading failed",error:v(t).error,retry:a},null,8,["error"])):v(t).devices.length===0?(b(),z(rt,{key:2,title:"No active devices",message:"No active devices found."})):(b(),q("div",fv,[F("div",pv,[$(v(me),{variant:"primary"},{default:k(()=>[U("Total: "+M(v(t).total),1)]),_:1}),v(t).isLoadingStates?(b(),z(v(me),{key:0,variant:"secondary"},{default:k(()=>[...r[1]||(r[1]=[U("States loading",-1)])]),_:1})):(b(),z(v(me),{key:1,variant:"success"},{default:k(()=>[...r[2]||(r[2]=[U("States settled",-1)])]),_:1})),n.value?(b(),z(v(me),{key:2,variant:"warning"},{default:k(()=>[...r[3]||(r[3]=[U("Stale data",-1)])]),_:1})):se("",!0)]),v(t).stateError?(b(),z(pt,{key:0,title:"Device states loading failed",error:v(t).stateError},null,8,["error"])):se("",!0),$(Ko,{devices:v(t).devices,caption:"Registered devices"},null,8,["devices"])]))]))}},hv=Ye(gv,[["__scopeId","data-v-635f3900"]]),mv=gn("scanning",()=>{const e=Z("setup"),t=Z([]),n=gt(),a=Q(()=>t.value.length);async function s(){return n.execute(async o=>{var u,c;const l=e.value==="setup"?await nt.scanningSetup({signal:o}):await nt.scanningAll({signal:o});return l.ok&&(t.value=((c=(u=l.data)==null?void 0:u.data)==null?void 0:c.devices)||[]),l})}function r(o){e.value=o,t.value=[],n.clear()}async function i(o){return nt.setupNewDevice(o)}return{mode:e,devices:t,isLoading:n.isLoading,error:n.error,total:a,scan:s,setMode:r,setupDevice:i}}),yv={class:"page"},_v={class:"scan-filters"},bv={key:3,class:"devices-panel"},wv={class:"devices-summary"},Sv={class:"device-cell"},kv=["innerHTML"],Av={class:"device-info"},xv={class:"firmware"},Cv={key:1,class:"muted"},Ev={class:"form-group"},Rv={class:"form-group"},Tv={class:"form-group"},$v={key:0,class:"form-group"},Iv={__name:"DevicesScanningPage",setup(e){const t=mv(),n=mn(),a=Mt(),s=Z(!1),r=Z(!1),i=Z(""),o=Yt({device_ip:"",alias:"",name:"",description:""}),l={relay:'',button:'',sensor:''},u=[{key:"device",label:"Device"},{key:"status",label:"Status"},{key:"firmware",label:"Firmware"},{key:"actions",label:"Actions"}];function c(w){return l[w]||l.relay}function d(w){t.setMode(w)}function f(){t.scan()}function g(w){o.device_ip=w.ip_address,o.alias="",o.name="",o.description="",i.value="",s.value=!0}async function h(){var y;r.value=!0,i.value="";const w=await t.setupDevice({...o});if(r.value=!1,!w.ok){i.value=((y=w.error)==null?void 0:y.message)||"Failed to setup device";return}s.value=!1,n.success({title:"Device added",text:`Device ${o.alias||o.name||""} added successfully`})}return(w,y)=>(b(),q("section",yv,[$(v(xt),{title:"Scanning",kicker:"Devices"},{actions:k(()=>[$(v(pe),{loading:v(t).isLoading,icon:"ph-magnifying-glass",onClick:f},{default:k(()=>[...y[7]||(y[7]=[U(" Scan ",-1)])]),_:1},8,["loading"])]),_:1}),F("div",_v,[y[10]||(y[10]=F("span",{class:"filter-label text-muted"},"Mode:",-1)),$(v(ei),{selected:v(t).mode==="setup",clickable:"",icon:"ph-plug",onClick:y[0]||(y[0]=P=>d("setup"))},{default:k(()=>[...y[8]||(y[8]=[U(" Setup ",-1)])]),_:1},8,["selected"]),$(v(ei),{selected:v(t).mode==="all",clickable:"",icon:"ph-scan",onClick:y[1]||(y[1]=P=>d("all"))},{default:k(()=>[...y[9]||(y[9]=[U(" All ",-1)])]),_:1},8,["selected"])]),v(t).isLoading?(b(),z(_t,{key:0,text:"Scanning network"})):v(t).error?(b(),z(pt,{key:1,title:"Scan failed",error:v(t).error,retry:f},null,8,["error"])):v(t).devices.length===0?(b(),z(rt,{key:2,title:"No devices found",message:"Choose scan mode and click Scan to discover devices."})):(b(),q("div",bv,[F("div",wv,[$(v(me),{variant:"primary"},{default:k(()=>[U(M(v(t).total)+" found",1)]),_:1})]),$(v(Dn),{columns:u,rows:v(t).devices,caption:"Discovered devices"},{"cell-device":k(({row:P})=>[F("div",Sv,[F("div",{class:"device-icon",innerHTML:c(P.device_type)},null,8,kv),F("div",Av,[F("strong",null,M(P.device_name||"Unknown"),1),F("small",null,M(P.device_type||"unknown")+" — "+M(P.ip_address||"—"),1)])])]),"cell-status":k(({row:P})=>[$(v(me),{variant:P.status==="setup"?"warning":"success"},{default:k(()=>[U(M(P.status||"unknown"),1)]),_:2},1032,["variant"])]),"cell-firmware":k(({row:P})=>[F("span",xv,M(P.firmware_version||"—"),1)]),"cell-actions":k(({row:P})=>[P.status==="setup"&&v(a).has("devices.setup")?(b(),z(v(pe),{key:0,variant:"primary",icon:"ph-plus",size:"sm",onClick:_=>g(P)},{default:k(()=>[...y[11]||(y[11]=[U(" Add ",-1)])]),_:1},8,["onClick"])):(b(),q("span",Cv,"—"))]),_:1},8,["rows"])])),$(v(ut),{open:s.value,title:"Setup new device","onUpdate:open":y[6]||(y[6]=P=>s.value=P)},{footer:k(()=>[$(v(pe),{variant:"secondary",onClick:y[5]||(y[5]=P=>s.value=!1)},{default:k(()=>[...y[12]||(y[12]=[U("Cancel",-1)])]),_:1}),$(v(pe),{variant:"primary",icon:"ph-plus",loading:r.value,onClick:h},{default:k(()=>[...y[13]||(y[13]=[U(" Add device ",-1)])]),_:1},8,["loading"])]),default:k(()=>[F("div",Ev,[$(v(Ot),{modelValue:o.alias,"onUpdate:modelValue":y[2]||(y[2]=P=>o.alias=P),label:"Alias",placeholder:"kitchen_relay"},null,8,["modelValue"])]),F("div",Rv,[$(v(Ot),{modelValue:o.name,"onUpdate:modelValue":y[3]||(y[3]=P=>o.name=P),label:"Name",placeholder:"Kitchen Relay"},null,8,["modelValue"])]),F("div",Tv,[$(v(Ot),{modelValue:o.description,"onUpdate:modelValue":y[4]||(y[4]=P=>o.description=P),label:"Description"},null,8,["modelValue"])]),i.value?(b(),q("div",$v,[$(v(Qe),{variant:"danger"},{default:k(()=>[U(M(i.value),1)]),_:1})])):se("",!0)]),_:1},8,["open"])]))}},Dv=Ye(Iv,[["__scopeId","data-v-1a01bb19"]]);function si(e){return encodeURIComponent(String(e))}const Un={async list(){return Ne("/api/v1/firmwares")},async detail(e){return Ne(`/api/v1/firmwares/id/${si(e)}`)},async refresh(){return Xe("/api/v1/firmwares/refresh")},async deviceCompatibility(e){return Ne(`/api/v1/devices/id/${si(e)}/firmware-compatibility`)},async updateDeviceFirmware(e,t){return Xe("/api/v1/devices/update-firmware",{device_id:e,firmware_id:t})}},Yo=gn("firmwares",()=>{const e=Z([]),t=Z(null),n=Z(null),a=gt(),s=gt(),r=gt(),i=gt(),o=Q(()=>a.isLoading.value),l=Q(()=>s.isLoading.value),u=Q(()=>r.isLoading.value),c=Q(()=>i.isLoading.value);async function d(){return a.execute(async P=>{var S,E;const _=await Un.list({signal:P});return _.ok&&(e.value=((E=(S=_.data)==null?void 0:S.data)==null?void 0:E.firmwares)||[]),_})}async function f(){return r.execute(async()=>{const P=await Un.refresh();return P.ok&&await d(),P})}async function g(P){return s.execute(async _=>{var E,L;const S=await Un.detail(P,{signal:_});return S.ok&&(t.value=((L=(E=S.data)==null?void 0:E.data)==null?void 0:L.firmware)||null),S})}async function h(P){return i.execute(async _=>{var E,L,D,T;const S=await Un.deviceCompatibility(P,{signal:_});return S.ok&&(n.value={compatible:((L=(E=S.data)==null?void 0:E.data)==null?void 0:L.compatible)||[],currentVersion:((T=(D=S.data)==null?void 0:D.data)==null?void 0:T.current_version)||"unknown"}),S})}async function w(P,_){return r.execute(async()=>Un.updateDeviceFirmware(P,_))}function y(){n.value=null}return{firmwares:e,current:t,compatibility:n,isLoadingList:o,isLoadingDetail:l,isUpdating:u,isLoadingCompatibility:c,loadFirmwares:d,refreshFirmwares:f,loadFirmwareDetail:g,loadDeviceCompatibility:h,updateDeviceFirmware:w,clearCompatibility:y}}),Pv={class:"page"},Fv={key:2},Ov={class:"device-meta"},Lv={class:"script-info-panel"},Nv={class:"info-row"},Mv={class:"info-value"},Uv={class:"info-row"},Bv={class:"info-value"},Vv={class:"info-row"},jv={class:"info-value"},Hv={class:"info-row"},Gv={class:"info-value"},qv={class:"info-row"},zv={class:"info-value"},Kv={class:"info-row"},Wv={class:"info-value"},Jv={class:"info-row"},Yv={class:"info-value"},Zv={key:0,class:"info-row"},Qv={class:"info-value"},Xv={key:1,class:"info-row"},eg={class:"info-value"},tg={key:0,class:"devices-panel"},ng={key:1,class:"devices-panel"},ag={class:"form-group"},sg={class:"form-group"},rg={class:"form-group"},ig={key:0,class:"form-group"},og={key:0,class:"form-group"},lg={key:0,class:"form-group"},ug={key:0,class:"form-group"},cg={key:0,class:"form-group"},dg={key:0,class:"form-group"},fg={class:"firmware-options"},pg=["onClick"],vg={class:"fw-version"},gg={key:0,class:"fw-desc"},hg={key:0,class:"form-group"},mg={__name:"DeviceDetailPage",setup(e){const t=qa(),n=hn(),a=za(),s=wt(),r=Yo(),i=mn(),o=Mt(),{areaOptions:l,showAssignModal:u,selectedAreaId:c,assignLoading:d,assignError:f,openAssign:g,submitAssignCore:h}=Qs(),w=Q(()=>t.params.id),y=Q(()=>a.currentDevice),P=Q(()=>a.isLoadingDetail),_=Q(()=>a.errorDetail),S=Z(!1),E=Z(null),L=Q(()=>{var O;const ie=(O=y.value)==null?void 0:O.area_id;return ie&&s.areasById[String(ie)]||null}),D=Z(!1),T=Z(!1),C=Z(""),I=Yt({name:"",description:"",alias:""}),te=Z(!1),ue=Z(""),ye=Z(!1),we=Z(""),V=Z(!1),W=Z(""),Y=Z(!1),K=Z(""),ee=Z(!1),fe=Z(""),Se=Z(!1),Ee=Z(""),be=Z(!1),Me=Z(""),Ve=Z(!1),je=Z(""),$e=Z(!1),N=Z(null),ae=Z(""),R=Q(()=>{var ie,O;return(((O=(ie=r.compatibility)==null?void 0:ie.compatible)==null?void 0:O.length)||0)>0}),A=Q(()=>{var ie;return((ie=r.compatibility)==null?void 0:ie.compatible)||[]}),X=Q(()=>{var O,De;const ie=[];return o.has("devices.edit")&&(ie.push({label:"Edit",icon:"ph-pencil",onSelect:p}),(O=y.value)!=null&&O.area_id?ie.push({label:"Change area",icon:"ph-map-pin",onSelect:x},{label:"Unassign from area",icon:"ph-x-circle",onSelect:G}):ie.push({label:"Assign to area",icon:"ph-map-pin",onSelect:x})),o.has("devices.setup")&&ie.push({label:"ReSetup",icon:"ph-gear",onSelect:J}),o.has("devices.control")&&ie.push({label:"Reboot",icon:"ph-arrow-clockwise",disabled:a.isRebooting((De=y.value)==null?void 0:De.id),onSelect:ne}),o.has("devices.edit")&&ie.push({label:"Reset",icon:"ph-x",danger:!0,onSelect:le}),o.has("devices.delete")&&ie.push({label:"Remove",icon:"ph-trash",danger:!0,onSelect:oe}),ie});function p(){y.value&&(I.name=y.value.name||"",I.description=y.value.description||"",I.alias=y.value.alias||"",C.value="",D.value=!0)}async function m(){var et,ve,Ke,ze;T.value=!0,C.value="";const ie=w.value,O=await Promise.all([I.name!==((et=y.value)==null?void 0:et.name)?a.updateDeviceName(ie,I.name):{ok:!0},I.description!==((ve=y.value)==null?void 0:ve.description)?a.updateDeviceDescription(ie,I.description):{ok:!0},I.alias!==((Ke=y.value)==null?void 0:Ke.alias)?a.updateDeviceAlias(ie,I.alias):{ok:!0}]);T.value=!1;const De=O.find(Fn=>!Fn.ok);if(De){C.value=((ze=De.error)==null?void 0:ze.message)||"Failed to update device";return}D.value=!1,i.success({title:"Updated",text:"Device updated successfully"})}function x(){var ie;g((ie=y.value)==null?void 0:ie.area_id)}async function B(){const ie=await h(w.value,a.assignToArea.bind(a));ie!=null&&ie.ok&&i.success({title:"Assigned",text:"Device assigned to area successfully"})}function G(){y.value&&(W.value=`Are you sure you want to unassign device "${y.value.name||y.value.alias}" from its area?`,K.value="",V.value=!0)}async function H(){var O;if(!y.value)return;Y.value=!0,K.value="";const ie=await a.unassignDevice(w.value);if(Y.value=!1,!ie.ok){K.value=((O=ie.error)==null?void 0:O.message)||"Failed to unassign device";return}V.value=!1,i.success({title:"Unassigned",text:"Device unassigned from area successfully"})}function oe(){y.value&&(ue.value=`Are you sure you want to remove device "${y.value.name||y.value.alias}"?`,we.value="",te.value=!0)}async function re(){var De;const ie=w.value;ye.value=!0,we.value="";const O=await a.removeDevice(ie);if(ye.value=!1,!O.ok){we.value=((De=O.error)==null?void 0:De.message)||"Failed to remove device";return}te.value=!1,i.success({title:"Removed",text:"Device removed successfully"}),n.push({name:"devices"})}async function ne(){var O;if(!y.value)return;const ie=await a.rebootDevice(y.value.id);ie.ok?i.success({title:"Rebooting",text:`Device ${y.value.name||y.value.alias||"#"+y.value.id} is rebooting`}):i.error({title:"Reboot failed",text:((O=ie.error)==null?void 0:O.message)||"Failed to reboot device"})}function J(){y.value&&(fe.value=`Are you sure you want to repeat setup for device "${y.value.name||y.value.alias}"?`,Ee.value="",ee.value=!0)}async function de(){var De,et,ve;const ie=w.value;Se.value=!0,Ee.value="";const O=await a.resetupDevice(ie);if(Se.value=!1,!O.ok){Ee.value=((De=O.error)==null?void 0:De.message)||"Failed to repeat device setup";return}ee.value=!1,i.success({title:"Success",text:`Device ${((et=y.value)==null?void 0:et.name)||((ve=y.value)==null?void 0:ve.alias)||"#"+ie} setup repeated`}),n.push({name:"devices"})}function le(){y.value&&(Me.value=`Are you sure you want to reset device "${y.value.name||y.value.alias}"?`,je.value="",be.value=!0)}async function ce(){var De,et,ve;const ie=w.value;Ve.value=!0,je.value="";const O=await a.resetDevice(ie);if(Ve.value=!1,!O.ok){je.value=((De=O.error)==null?void 0:De.message)||"Failed to reset device";return}be.value=!1,i.success({title:"Success",text:`Device ${((et=y.value)==null?void 0:et.name)||((ve=y.value)==null?void 0:ve.alias)||"#"+ie} reset`}),n.push({name:"devices"})}function ge(){var ie;N.value=((ie=A.value[0])==null?void 0:ie.id)||null,ae.value="",$e.value=!0}async function ke(){var O;if(!N.value||!y.value)return;const ie=await r.updateDeviceFirmware(y.value.id,N.value);if(!ie.ok){ae.value=((O=ie.error)==null?void 0:O.message)||"Firmware update failed";return}$e.value=!1,i.success({title:"Updated",text:"Firmware update pushed successfully"}),await a.loadDeviceDetail(w.value)}function Re(ie){return{active:"success",removed:"danger",freezed:"warning",setup:"primary"}[ie]||"secondary"}async function Ie(){const ie=w.value;if(!ie||!y.value||y.value.connection_status!=="active")return;S.value=!0,E.value=null;const O=await a.loadDeviceStatus(ie);S.value=!1,O.ok||(E.value=O.error)}async function Be(){var O;const ie=w.value;ie&&(s.areas.length===0&&await s.loadAreas(),await a.loadDeviceDetail(ie),((O=y.value)==null?void 0:O.connection_status)==="active"&&(await Ie(),await r.loadDeviceCompatibility(ie)))}return bt(()=>{Be()}),la(()=>{a.clearDeviceDetail(),r.clearCompatibility()}),Ft(()=>t.params.id,(ie,O)=>{ie!==O&&(a.clearDeviceDetail(),Be())}),(ie,O)=>{var De,et;return b(),q("section",Pv,[P.value?(b(),z(_t,{key:0,text:"Loading device details"})):_.value?(b(),z(pt,{key:1,title:"Device loading failed",error:_.value,retry:Be},null,8,["error"])):y.value?(b(),q("div",Fv,[$(v(xt),{title:y.value.name||y.value.alias||`Device #${y.value.id}`,kicker:"Device"},{actions:k(()=>[$(tr,{items:X.value},null,8,["items"])]),_:1},8,["title"]),F("div",Ov,[$(v(me),{variant:y.value.connection_status==="active"?"success":"danger"},{default:k(()=>[U(M(y.value.connection_status==="active"?"Online":"Offline"),1)]),_:1},8,["variant"]),F("code",null,M(y.value.alias),1),$(Xs,{area:L.value,areaId:y.value.area_id},null,8,["area","areaId"])]),F("div",Lv,[F("div",Nv,[O[18]||(O[18]=F("span",{class:"info-label text-muted"},"System status:",-1)),F("span",Mv,[$(v(me),{variant:Re(y.value.status)},{default:k(()=>[U(M(y.value.status),1)]),_:1},8,["variant"])])]),F("div",Uv,[O[19]||(O[19]=F("span",{class:"info-label text-muted"},"Type:",-1)),F("span",Bv,M(y.value.device_type),1)]),F("div",Vv,[O[20]||(O[20]=F("span",{class:"info-label text-muted"},"State:",-1)),F("span",jv,[$(zo,{"device-type":y.value.device_type,response:(De=v(a).currentDeviceStatus)==null?void 0:De.raw,loading:S.value,error:(et=E.value)==null?void 0:et.message,"connection-status":y.value.connection_status},null,8,["device-type","response","loading","error","connection-status"])])]),F("div",Hv,[O[21]||(O[21]=F("span",{class:"info-label text-muted"},"IP:",-1)),F("span",Gv,M(y.value.device_ip),1)]),F("div",qv,[O[22]||(O[22]=F("span",{class:"info-label text-muted"},"MAC:",-1)),F("span",zv,M(y.value.device_mac),1)]),F("div",Kv,[O[23]||(O[23]=F("span",{class:"info-label text-muted"},"Hard ID:",-1)),F("span",Wv,M(y.value.device_hard_id),1)]),F("div",Jv,[O[24]||(O[24]=F("span",{class:"info-label text-muted"},"Firmware:",-1)),F("span",Yv,M(y.value.firmware_version),1)]),y.value.last_contact?(b(),q("div",Zv,[O[25]||(O[25]=F("span",{class:"info-label text-muted"},"Last contact:",-1)),F("span",Qv,M(y.value.last_contact),1)])):se("",!0),y.value.create_at?(b(),q("div",Xv,[O[26]||(O[26]=F("span",{class:"info-label text-muted"},"Created:",-1)),F("span",eg,M(y.value.create_at),1)])):se("",!0)]),$(er,{item:y.value,emptyMessage:"This device is not assigned to any area.",onAssign:x},{action:k(()=>[v(o).has("devices.edit")?(b(),z(v(pe),{key:0,variant:"primary",icon:"ph-map-pin",onClick:x},{default:k(()=>{var ve;return[U(M((ve=y.value)!=null&&ve.area_id?"Change area":"Assign to area"),1)]}),_:1})):se("",!0)]),_:1},8,["item"]),R.value&&v(o).has("firmware.upload")?(b(),q("div",tg,[O[29]||(O[29]=F("div",{class:"block-title"},"Firmware Update",-1)),$(v(Qe),{variant:"info"},{default:k(()=>[O[27]||(O[27]=U(" New firmware available: ",-1)),(b(!0),q(Pe,null,Wt(A.value,ve=>(b(),z(v(me),{key:ve.id,variant:"success"},{default:k(()=>[U(M(ve.version),1)]),_:2},1024))),128))]),_:1}),$(v(pe),{variant:"primary",icon:"ph-cloud-arrow-down",onClick:ge},{default:k(()=>[...O[28]||(O[28]=[U(" Update Firmware ",-1)])]),_:1})])):se("",!0),y.value.description?(b(),q("div",ng,[O[30]||(O[30]=F("div",{class:"block-title"},"Description",-1)),F("p",null,M(y.value.description),1)])):se("",!0)])):(b(),z(rt,{key:3,title:"Device not found",message:"The requested device does not exist."})),$(v(ut),{open:D.value,title:"Edit device","onUpdate:open":O[4]||(O[4]=ve=>D.value=ve)},{footer:k(()=>[$(v(pe),{variant:"secondary",onClick:O[3]||(O[3]=ve=>D.value=!1)},{default:k(()=>[...O[31]||(O[31]=[U("Cancel",-1)])]),_:1}),$(v(pe),{variant:"primary",icon:"ph-check",loading:T.value,onClick:m},{default:k(()=>[...O[32]||(O[32]=[U(" Save ",-1)])]),_:1},8,["loading"])]),default:k(()=>[F("div",ag,[$(v(Ot),{modelValue:I.name,"onUpdate:modelValue":O[0]||(O[0]=ve=>I.name=ve),label:"Name"},null,8,["modelValue"])]),F("div",sg,[$(v(Ot),{modelValue:I.description,"onUpdate:modelValue":O[1]||(O[1]=ve=>I.description=ve),label:"Description"},null,8,["modelValue"])]),F("div",rg,[$(v(Ot),{modelValue:I.alias,"onUpdate:modelValue":O[2]||(O[2]=ve=>I.alias=ve),label:"Alias"},null,8,["modelValue"])]),C.value?(b(),q("div",ig,[$(v(Qe),{variant:"danger"},{default:k(()=>[U(M(C.value),1)]),_:1})])):se("",!0)]),_:1},8,["open"]),$(v(ut),{open:v(u),title:"Assign to area","onUpdate:open":O[7]||(O[7]=ve=>u.value=ve)},{footer:k(()=>[$(v(pe),{variant:"secondary",onClick:O[6]||(O[6]=ve=>u.value=!1)},{default:k(()=>[...O[33]||(O[33]=[U("Cancel",-1)])]),_:1}),$(v(pe),{variant:"primary",icon:"ph-check",loading:v(d),onClick:B},{default:k(()=>[...O[34]||(O[34]=[U(" Assign ",-1)])]),_:1},8,["loading"])]),default:k(()=>[$(v(Js),{modelValue:v(c),"onUpdate:modelValue":O[5]||(O[5]=ve=>Ue(c)?c.value=ve:null),label:"Area",options:v(l),icon:"ph-map-trifold"},null,8,["modelValue","options"]),v(f)?(b(),q("div",og,[$(v(Qe),{variant:"danger"},{default:k(()=>[U(M(v(f)),1)]),_:1})])):se("",!0)]),_:1},8,["open"]),$(v(ut),{open:V.value,title:"Unassign from area","onUpdate:open":O[9]||(O[9]=ve=>V.value=ve)},{footer:k(()=>[$(v(pe),{variant:"secondary",onClick:O[8]||(O[8]=ve=>V.value=!1)},{default:k(()=>[...O[35]||(O[35]=[U("Cancel",-1)])]),_:1}),$(v(pe),{variant:"warning",icon:"ph-x-circle",loading:Y.value,onClick:H},{default:k(()=>[...O[36]||(O[36]=[U(" Unassign ",-1)])]),_:1},8,["loading"])]),default:k(()=>[F("p",null,M(W.value),1),K.value?(b(),q("div",lg,[$(v(Qe),{variant:"danger"},{default:k(()=>[U(M(K.value),1)]),_:1})])):se("",!0)]),_:1},8,["open"]),$(v(ut),{open:te.value,title:"Remove device","onUpdate:open":O[11]||(O[11]=ve=>te.value=ve)},{footer:k(()=>[$(v(pe),{variant:"secondary",onClick:O[10]||(O[10]=ve=>te.value=!1)},{default:k(()=>[...O[37]||(O[37]=[U("Cancel",-1)])]),_:1}),$(v(pe),{variant:"danger",icon:"ph-trash",loading:ye.value,onClick:re},{default:k(()=>[...O[38]||(O[38]=[U(" Remove ",-1)])]),_:1},8,["loading"])]),default:k(()=>[F("p",null,M(ue.value),1),we.value?(b(),q("div",ug,[$(v(Qe),{variant:"danger"},{default:k(()=>[U(M(we.value),1)]),_:1})])):se("",!0)]),_:1},8,["open"]),$(v(ut),{open:ee.value,title:"Repeat device setup","onUpdate:open":O[13]||(O[13]=ve=>ee.value=ve)},{footer:k(()=>[$(v(pe),{variant:"secondary",onClick:O[12]||(O[12]=ve=>ee.value=!1)},{default:k(()=>[...O[39]||(O[39]=[U("Cancel",-1)])]),_:1}),$(v(pe),{variant:"primary",icon:"ph-gear",loading:Se.value,onClick:de},{default:k(()=>[...O[40]||(O[40]=[U(" ReSetup ",-1)])]),_:1},8,["loading"])]),default:k(()=>[F("p",null,M(fe.value),1),Ee.value?(b(),q("div",cg,[$(v(Qe),{variant:"danger"},{default:k(()=>[U(M(Ee.value),1)]),_:1})])):se("",!0)]),_:1},8,["open"]),$(v(ut),{open:be.value,title:"Reset device","onUpdate:open":O[15]||(O[15]=ve=>be.value=ve)},{footer:k(()=>[$(v(pe),{variant:"secondary",onClick:O[14]||(O[14]=ve=>be.value=!1)},{default:k(()=>[...O[41]||(O[41]=[U("Cancel",-1)])]),_:1}),$(v(pe),{variant:"danger",icon:"ph-x",loading:Ve.value,onClick:ce},{default:k(()=>[...O[42]||(O[42]=[U(" Reset ",-1)])]),_:1},8,["loading"])]),default:k(()=>[F("p",null,M(Me.value),1),je.value?(b(),q("div",dg,[$(v(Qe),{variant:"danger"},{default:k(()=>[U(M(je.value),1)]),_:1})])):se("",!0)]),_:1},8,["open"]),$(v(ut),{open:$e.value,title:"Update Firmware","onUpdate:open":O[17]||(O[17]=ve=>$e.value=ve)},{footer:k(()=>[$(v(pe),{variant:"secondary",onClick:O[16]||(O[16]=ve=>$e.value=!1)},{default:k(()=>[...O[45]||(O[45]=[U("Cancel",-1)])]),_:1}),$(v(pe),{variant:"primary",icon:"ph-check",loading:v(r).isUpdating,disabled:!N.value,onClick:ke},{default:k(()=>[...O[46]||(O[46]=[U(" Update ",-1)])]),_:1},8,["loading","disabled"])]),default:k(()=>{var ve,Ke;return[F("p",null,[O[43]||(O[43]=U("Select firmware to install on ",-1)),F("strong",null,M(((ve=y.value)==null?void 0:ve.name)||((Ke=y.value)==null?void 0:Ke.alias)),1),O[44]||(O[44]=U(":",-1))]),F("div",fg,[(b(!0),q(Pe,null,Wt(A.value,ze=>(b(),q("div",{key:ze.id,class:Lt(["firmware-option",{active:N.value===ze.id}]),onClick:Fn=>N.value=ze.id},[F("div",vg,M(ze.version),1),ze.description?(b(),q("div",gg,M(ze.description),1)):se("",!0)],10,pg))),128))]),ae.value?(b(),q("div",hg,[$(v(Qe),{variant:"danger"},{default:k(()=>[U(M(ae.value),1)]),_:1})])):se("",!0)]}),_:1},8,["open"])])}}},yg=Ye(mg,[["__scopeId","data-v-2e1b45fd"]]),_g={class:"page"},bg={__name:"ScriptsActionsPage",setup(e){const t=yn(),n=wt();return bt(()=>{t.loadActions(),n.areas.length===0&&n.loadAreas()}),(a,s)=>(b(),q("section",_g,[$(v(xt),{title:"Actions",kicker:"Scripts"},{actions:k(()=>[$(v(me),{variant:"primary"},{default:k(()=>[U(M(v(t).totalActions)+" scripts",1)]),_:1})]),_:1}),v(t).isLoadingActions?(b(),z(_t,{key:0,text:"Loading actions"})):v(t).errorActions?(b(),z(pt,{key:1,title:"Actions loading failed",error:v(t).errorActions,retry:v(t).loadActions},null,8,["error","retry"])):v(t).actions.length===0?(b(),z(rt,{key:2,title:"No action scripts",message:"No action scripts registered."})):(b(),z(Jo,{key:3,scripts:v(t).actions,"show-area-badge":""},null,8,["scripts"]))]))}},wg=Ye(bg,[["__scopeId","data-v-f336617a"]]),Sg={class:"page"},kg={key:3,class:"devices-panel"},Ag={__name:"ScriptsRegularPage",setup(e){const t=yn(),n=wt();return bt(()=>{t.loadRegular(),n.areas.length===0&&n.loadAreas()}),(a,s)=>(b(),q("section",Sg,[$(v(xt),{title:"Regular",kicker:"Scripts"},{actions:k(()=>[$(v(me),{variant:"primary"},{default:k(()=>[U(M(v(t).totalRegular)+" scripts",1)]),_:1})]),_:1}),v(t).isLoadingRegular?(b(),z(_t,{key:0,text:"Loading regular scripts"})):v(t).errorRegular?(b(),z(pt,{key:1,title:"Regular scripts loading failed",error:v(t).errorRegular,retry:v(t).loadRegular},null,8,["error","retry"])):v(t).regular.length===0?(b(),z(rt,{key:2,title:"No regular scripts",message:"No regular scripts registered."})):(b(),q("div",kg,[$(Wo,{scripts:v(t).regular,scriptType:"regular",showArea:!0,showScope:!0,showFilename:!0,showActions:!0,caption:"Regular scripts"},null,8,["scripts"])]))]))}},xg={class:"page"},Cg={key:3,class:"devices-panel"},Eg={__name:"ScriptsScopesPage",setup(e){hn();const t=yn(),n=Mt(),a=[{key:"name",label:"Name"},{key:"filename",label:"File"},{key:"state",label:"State"},{key:"path",label:"Path"},{key:"actions",label:"Actions"}];function s(r,i){t.setScopeState(r,i)}return bt(()=>{t.loadScopes()}),(r,i)=>{const o=sn("router-link");return b(),q("section",xg,[$(v(xt),{title:"Scopes",kicker:"Scripts"},{actions:k(()=>[$(v(me),{variant:"primary"},{default:k(()=>[U(M(v(t).totalScopes)+" scopes",1)]),_:1})]),_:1}),v(t).isLoadingScopes?(b(),z(_t,{key:0,text:"Loading scopes"})):v(t).errorScopes?(b(),z(pt,{key:1,title:"Scopes loading failed",error:v(t).errorScopes,retry:v(t).loadScopes},null,8,["error","retry"])):v(t).scopes.length===0?(b(),z(rt,{key:2,title:"No scopes",message:"No script scopes registered."})):(b(),q("div",Cg,[$(v(Dn),{columns:a,rows:v(t).scopes,caption:"Script scopes"},{"cell-name":k(({row:l})=>[$(o,{to:{name:"script-detail",params:{type:"scopes",id:l.name}},class:"script-link"},{default:k(()=>[U(M(l.name),1)]),_:2},1032,["to"])]),"cell-state":k(({row:l})=>[$(v(me),{variant:l.state==="enabled"?"success":"secondary"},{default:k(()=>[U(M(l.state),1)]),_:2},1032,["variant"])]),"cell-actions":k(({row:l})=>[l.state==="enabled"&&v(n).has("scripts.edit")?(b(),z(v(pe),{key:0,variant:"secondary",icon:"ph-pause",onClick:u=>s(l.name,!1)},{default:k(()=>[...i[0]||(i[0]=[U(" Disable ",-1)])]),_:1},8,["onClick"])):v(n).has("scripts.edit")?(b(),z(v(pe),{key:1,variant:"primary",icon:"ph-play",onClick:u=>s(l.name,!0)},{default:k(()=>[...i[1]||(i[1]=[U(" Enable ",-1)])]),_:1},8,["onClick"])):se("",!0)]),_:1},8,["rows"])]))])}}},Rg=Ye(Eg,[["__scopeId","data-v-c8486788"]]);var ri=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Tg(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var us={exports:{}},ii;function $g(){return ii||(ii=1,(function(e){var t=typeof window<"u"?window:typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope?self:{};/** - * Prism: Lightweight, robust, elegant syntax highlighting - * - * @license MIT - * @author Lea Verou - * @namespace - * @public - */var n=(function(a){var s=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,r=0,i={},o={manual:a.Prism&&a.Prism.manual,disableWorkerMessageHandler:a.Prism&&a.Prism.disableWorkerMessageHandler,util:{encode:function _(S){return S instanceof l?new l(S.type,_(S.content),S.alias):Array.isArray(S)?S.map(_):S.replace(/&/g,"&").replace(/"u")return null;if(document.currentScript&&document.currentScript.tagName==="SCRIPT")return document.currentScript;try{throw new Error}catch(L){var _=(/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(L.stack)||[])[1];if(_){var S=document.getElementsByTagName("script");for(var E in S)if(S[E].src==_)return S[E]}return null}},isActive:function(_,S,E){for(var L="no-"+S;_;){var D=_.classList;if(D.contains(S))return!0;if(D.contains(L))return!1;_=_.parentElement}return!!E}},languages:{plain:i,plaintext:i,text:i,txt:i,extend:function(_,S){var E=o.util.clone(o.languages[_]);for(var L in S)E[L]=S[L];return E},insertBefore:function(_,S,E,L){L=L||o.languages;var D=L[_],T={};for(var C in D)if(D.hasOwnProperty(C)){if(C==S)for(var I in E)E.hasOwnProperty(I)&&(T[I]=E[I]);E.hasOwnProperty(C)||(T[C]=D[C])}var te=L[_];return L[_]=T,o.languages.DFS(o.languages,function(ue,ye){ye===te&&ue!=_&&(this[ue]=T)}),T},DFS:function _(S,E,L,D){D=D||{};var T=o.util.objId;for(var C in S)if(S.hasOwnProperty(C)){E.call(S,C,S[C],L||C);var I=S[C],te=o.util.type(I);te==="Object"&&!D[T(I)]?(D[T(I)]=!0,_(I,E,null,D)):te==="Array"&&!D[T(I)]&&(D[T(I)]=!0,_(I,E,C,D))}}},plugins:{},highlightAll:function(_,S){o.highlightAllUnder(document,_,S)},highlightAllUnder:function(_,S,E){var L={callback:E,container:_,selector:'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'};o.hooks.run("before-highlightall",L),L.elements=Array.prototype.slice.apply(L.container.querySelectorAll(L.selector)),o.hooks.run("before-all-elements-highlight",L);for(var D=0,T;T=L.elements[D++];)o.highlightElement(T,S===!0,L.callback)},highlightElement:function(_,S,E){var L=o.util.getLanguage(_),D=o.languages[L];o.util.setLanguage(_,L);var T=_.parentElement;T&&T.nodeName.toLowerCase()==="pre"&&o.util.setLanguage(T,L);var C=_.textContent,I={element:_,language:L,grammar:D,code:C};function te(ye){I.highlightedCode=ye,o.hooks.run("before-insert",I),I.element.innerHTML=I.highlightedCode,o.hooks.run("after-highlight",I),o.hooks.run("complete",I),E&&E.call(I.element)}if(o.hooks.run("before-sanity-check",I),T=I.element.parentElement,T&&T.nodeName.toLowerCase()==="pre"&&!T.hasAttribute("tabindex")&&T.setAttribute("tabindex","0"),!I.code){o.hooks.run("complete",I),E&&E.call(I.element);return}if(o.hooks.run("before-highlight",I),!I.grammar){te(o.util.encode(I.code));return}if(S&&a.Worker){var ue=new Worker(o.filename);ue.onmessage=function(ye){te(ye.data)},ue.postMessage(JSON.stringify({language:I.language,code:I.code,immediateClose:!0}))}else te(o.highlight(I.code,I.grammar,I.language))},highlight:function(_,S,E){var L={code:_,grammar:S,language:E};if(o.hooks.run("before-tokenize",L),!L.grammar)throw new Error('The language "'+L.language+'" has no grammar.');return L.tokens=o.tokenize(L.code,L.grammar),o.hooks.run("after-tokenize",L),l.stringify(o.util.encode(L.tokens),L.language)},tokenize:function(_,S){var E=S.rest;if(E){for(var L in E)S[L]=E[L];delete S.rest}var D=new d;return f(D,D.head,_),c(_,D,S,D.head,0),h(D)},hooks:{all:{},add:function(_,S){var E=o.hooks.all;E[_]=E[_]||[],E[_].push(S)},run:function(_,S){var E=o.hooks.all[_];if(!(!E||!E.length))for(var L=0,D;D=E[L++];)D(S)}},Token:l};a.Prism=o;function l(_,S,E,L){this.type=_,this.content=S,this.alias=E,this.length=(L||"").length|0}l.stringify=function _(S,E){if(typeof S=="string")return S;if(Array.isArray(S)){var L="";return S.forEach(function(te){L+=_(te,E)}),L}var D={type:S.type,content:_(S.content,E),tag:"span",classes:["token",S.type],attributes:{},language:E},T=S.alias;T&&(Array.isArray(T)?Array.prototype.push.apply(D.classes,T):D.classes.push(T)),o.hooks.run("wrap",D);var C="";for(var I in D.attributes)C+=" "+I+'="'+(D.attributes[I]||"").replace(/"/g,""")+'"';return"<"+D.tag+' class="'+D.classes.join(" ")+'"'+C+">"+D.content+""};function u(_,S,E,L){_.lastIndex=S;var D=_.exec(E);if(D&&L&&D[1]){var T=D[1].length;D.index+=T,D[0]=D[0].slice(T)}return D}function c(_,S,E,L,D,T){for(var C in E)if(!(!E.hasOwnProperty(C)||!E[C])){var I=E[C];I=Array.isArray(I)?I:[I];for(var te=0;te=T.reach);fe+=ee.value.length,ee=ee.next){var Se=ee.value;if(S.length>_.length)return;if(!(Se instanceof l)){var Ee=1,be;if(V){if(be=u(K,fe,_,we),!be||be.index>=_.length)break;var $e=be.index,Me=be.index+be[0].length,Ve=fe;for(Ve+=ee.value.length;$e>=Ve;)ee=ee.next,Ve+=ee.value.length;if(Ve-=ee.value.length,fe=Ve,ee.value instanceof l)continue;for(var je=ee;je!==S.tail&&(VeT.reach&&(T.reach=A);var X=ee.prev;ae&&(X=f(S,X,ae),fe+=ae.length),g(S,X,Ee);var p=new l(C,ye?o.tokenize(N,ye):N,W,N);if(ee=f(S,X,p),R&&f(S,ee,R),Ee>1){var m={cause:C+","+te,reach:A};c(_,S,E,ee.prev,fe,m),T&&m.reach>T.reach&&(T.reach=m.reach)}}}}}}function d(){var _={value:null,prev:null,next:null},S={value:null,prev:_,next:null};_.next=S,this.head=_,this.tail=S,this.length=0}function f(_,S,E){var L=S.next,D={value:E,prev:S,next:L};return S.next=D,L.prev=D,_.length++,D}function g(_,S,E){for(var L=S.next,D=0;D/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},n.languages.markup.tag.inside["attr-value"].inside.entity=n.languages.markup.entity,n.languages.markup.doctype.inside["internal-subset"].inside=n.languages.markup,n.hooks.add("wrap",function(a){a.type==="entity"&&(a.attributes.title=a.content.replace(/&/,"&"))}),Object.defineProperty(n.languages.markup.tag,"addInlined",{value:function(s,r){var i={};i["language-"+r]={pattern:/(^$)/i,lookbehind:!0,inside:n.languages[r]},i.cdata=/^$/i;var o={"included-cdata":{pattern://i,inside:i}};o["language-"+r]={pattern:/[\s\S]+/,inside:n.languages[r]};var l={};l[s]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,function(){return s}),"i"),lookbehind:!0,greedy:!0,inside:o},n.languages.insertBefore("markup","cdata",l)}}),Object.defineProperty(n.languages.markup.tag,"addAttribute",{value:function(a,s){n.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+a+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[s,"language-"+s],inside:n.languages[s]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),n.languages.html=n.languages.markup,n.languages.mathml=n.languages.markup,n.languages.svg=n.languages.markup,n.languages.xml=n.languages.extend("markup",{}),n.languages.ssml=n.languages.xml,n.languages.atom=n.languages.xml,n.languages.rss=n.languages.xml,(function(a){var s=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;a.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+s.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+s.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+s.source+"$"),alias:"url"}}},selector:{pattern:RegExp(`(^|[{}\\s])[^{}\\s](?:[^{};"'\\s]|\\s+(?![\\s{])|`+s.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:s,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},a.languages.css.atrule.inside.rest=a.languages.css;var r=a.languages.markup;r&&(r.tag.addInlined("style","css"),r.tag.addAttribute("style","css"))})(n),n.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},n.languages.javascript=n.languages.extend("clike",{"class-name":[n.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+(/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source)+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),n.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,n.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:n.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:n.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:n.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:n.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:n.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),n.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:n.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),n.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),n.languages.markup&&(n.languages.markup.tag.addInlined("script","javascript"),n.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),n.languages.js=n.languages.javascript,(function(){if(typeof n>"u"||typeof document>"u")return;Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector);var a="Loading…",s=function(w,y){return"✖ Error "+w+" while fetching file: "+y},r="✖ Error: File does not exist or is empty",i={js:"javascript",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell",sh:"bash",bat:"batch",h:"c",tex:"latex"},o="data-src-status",l="loading",u="loaded",c="failed",d="pre[data-src]:not(["+o+'="'+u+'"]):not(['+o+'="'+l+'"])';function f(w,y,P){var _=new XMLHttpRequest;_.open("GET",w,!0),_.onreadystatechange=function(){_.readyState==4&&(_.status<400&&_.responseText?y(_.responseText):_.status>=400?P(s(_.status,_.statusText)):P(r))},_.send(null)}function g(w){var y=/^\s*(\d+)\s*(?:(,)\s*(?:(\d+)\s*)?)?$/.exec(w||"");if(y){var P=Number(y[1]),_=y[2],S=y[3];return _?S?[P,Number(S)]:[P,void 0]:[P,P]}}n.hooks.add("before-highlightall",function(w){w.selector+=", "+d}),n.hooks.add("before-sanity-check",function(w){var y=w.element;if(y.matches(d)){w.code="",y.setAttribute(o,l);var P=y.appendChild(document.createElement("CODE"));P.textContent=a;var _=y.getAttribute("data-src"),S=w.language;if(S==="none"){var E=(/\.(\w+)$/.exec(_)||[,"none"])[1];S=i[E]||E}n.util.setLanguage(P,S),n.util.setLanguage(y,S);var L=n.plugins.autoloader;L&&L.loadLanguages(S),f(_,function(D){y.setAttribute(o,u);var T=g(y.getAttribute("data-range"));if(T){var C=D.split(/\r\n?|\n/g),I=T[0],te=T[1]==null?C.length:T[1];I<0&&(I+=C.length),I=Math.max(0,Math.min(I-1,C.length)),te<0&&(te+=C.length),te=Math.max(0,Math.min(te,C.length)),D=C.slice(I,te).join(` -`),y.hasAttribute("data-start")||y.setAttribute("data-start",String(I+1))}P.textContent=D,n.highlightElement(P)},function(D){y.setAttribute(o,c),P.textContent=D})}}),n.plugins.fileHighlight={highlight:function(y){for(var P=(y||document).querySelectorAll(d),_=0,S;S=P[_++];)n.highlightElement(S)}};var h=!1;n.fileHighlight=function(){h||(console.warn("Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead."),h=!0),n.plugins.fileHighlight.highlight.apply(this,arguments)}})()})(us)),us.exports}var Ig=$g();const oi=Tg(Ig);(function(e){function t(n,a){return"___"+n.toUpperCase()+a+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,a,s,r){if(n.language===a){var i=n.tokenStack=[];n.code=n.code.replace(s,function(o){if(typeof r=="function"&&!r(o))return o;for(var l=i.length,u;n.code.indexOf(u=t(a,l))!==-1;)++l;return i[l]=o,u}),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,a){if(n.language!==a||!n.tokenStack)return;n.grammar=e.languages[a];var s=0,r=Object.keys(n.tokenStack);function i(o){for(var l=0;l=r.length);l++){var u=o[l];if(typeof u=="string"||u.content&&typeof u.content=="string"){var c=r[s],d=n.tokenStack[c],f=typeof u=="string"?u:u.content,g=t(a,c),h=f.indexOf(g);if(h>-1){++s;var w=f.substring(0,h),y=new e.Token(a,e.tokenize(d,n.grammar),"language-"+a,d),P=f.substring(h+g.length),_=[];w&&_.push.apply(_,i([w])),_.push(y),P&&_.push.apply(_,i([P])),typeof u=="string"?o.splice.apply(o,[l,1].concat(_)):u.content=_}}else u.content&&i(u.content)}return o}i(n.tokens)}}})})(Prism);var li={},ui;function Dg(){return ui||(ui=1,(function(e){var t=/\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/,n=[{pattern:/\b(?:false|true)\b/i,alias:"boolean"},{pattern:/(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,greedy:!0,lookbehind:!0},{pattern:/(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,greedy:!0,lookbehind:!0},/\b(?:null)\b/i,/\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/],a=/\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i,s=/|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,r=/[{}\[\](),:;]/;e.languages.php={delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"},comment:t,variable:/\$+(?:\w+\b|(?=\{))/,package:{pattern:/(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,lookbehind:!0,inside:{punctuation:/\\/}},"class-name-definition":{pattern:/(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,lookbehind:!0,alias:"class-name"},"function-definition":{pattern:/(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,lookbehind:!0,alias:"function"},keyword:[{pattern:/(\(\s*)\b(?:array|bool|boolean|float|int|integer|object|string)\b(?=\s*\))/i,alias:"type-casting",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string)\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|never|object|self|static|string|void)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/\b(?:array(?!\s*\()|bool|float|int|iterable|mixed|object|string|void)\b/i,alias:"type-declaration",greedy:!0},{pattern:/(\|\s*)(?:false|null)\b|\b(?:false|null)(?=\s*\|)/i,alias:"type-declaration",greedy:!0,lookbehind:!0},{pattern:/\b(?:parent|self|static)(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(\byield\s+)from\b/i,lookbehind:!0},/\bclass\b/i,{pattern:/((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|never|new|or|parent|print|private|protected|public|readonly|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i,lookbehind:!0}],"argument-name":{pattern:/([(,]\s*)\b[a-z_]\w*(?=\s*:(?!:))/i,lookbehind:!0},"class-name":[{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/(\|\s*)\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,greedy:!0},{pattern:/(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,alias:"class-name-fully-qualified",greedy:!0,inside:{punctuation:/\\/}},{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*\$)/i,alias:"type-declaration",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-declaration"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,alias:["class-name-fully-qualified","static-context"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-hint"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:["class-name-fully-qualified","return-type"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,function:{pattern:/(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,lookbehind:!0,inside:{punctuation:/\\/}},property:{pattern:/(->\s*)\w+/,lookbehind:!0},number:a,operator:s,punctuation:r};var i={pattern:/\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,lookbehind:!0,inside:e.languages.php},o=[{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,alias:"nowdoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:i}},{pattern:/`(?:\\[\s\S]|[^\\`])*`/,alias:"backtick-quoted-string",greedy:!0},{pattern:/'(?:\\[\s\S]|[^\\'])*'/,alias:"single-quoted-string",greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,alias:"double-quoted-string",greedy:!0,inside:{interpolation:i}}];e.languages.insertBefore("php","variable",{string:o,attribute:{pattern:/#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,greedy:!0,inside:{"attribute-content":{pattern:/^(#\[)[\s\S]+(?=\]$)/,lookbehind:!0,inside:{comment:t,string:o,"attribute-class-name":[{pattern:/([^:]|^)\b[a-z_]\w*(?!\\)\b/i,alias:"class-name",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\?\b[a-z_]\w*)+/i,alias:["class-name","class-name-fully-qualified"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,number:a,operator:s,punctuation:r}},delimiter:{pattern:/^#\[|\]$/,alias:"punctuation"}}}}),e.hooks.add("before-tokenize",function(l){if(/<\?/.test(l.code)){var u=/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/g;e.languages["markup-templating"].buildPlaceholders(l,"php",u)}}),e.hooks.add("after-tokenize",function(l){e.languages["markup-templating"].tokenizePlaceholders(l,"php")})})(Prism)),li}Dg();const Pg={class:"page"},Fg={key:2},Og={class:"script-detail-meta"},Lg=["innerHTML"],Ng={key:1},Mg={class:"script-meta"},Ug={key:0},Bg={class:"scope-name"},Vg={class:"script-info-panel"},jg={key:0,class:"info-row"},Hg={class:"info-value"},Gg={key:1,class:"info-row"},qg={class:"info-value"},zg={key:2,class:"info-row"},Kg={class:"info-value"},Wg={key:1,class:"devices-panel"},Jg={class:"block-title"},Yg={key:2,class:"devices-panel"},Zg={class:"block-title"},Qg={key:3,class:"devices-panel"},Xg={key:2,class:"code-block"},eh=["innerHTML"],th={key:0,class:"form-group"},nh={key:0,class:"form-group"},ah={__name:"ScriptDetailPage",setup(e){const t=qa(),n=yn(),a=wt(),s=mn(),r=Mt(),{areaOptions:i,showAssignModal:o,selectedAreaId:l,assignLoading:u,assignError:c,openAssign:d,submitAssignCore:f}=Qs(),g=Q(()=>t.params.type),h=Q(()=>t.params.id),w=Q(()=>g.value==="actions"),y=Q(()=>g.value==="regular"),P=Q(()=>g.value==="scopes"),_=Q(()=>{var A,X,p;const R=[];return!P.value&&r.has("scripts.edit")&&((A=C.value)!=null&&A.area_id?R.push({label:"Change area",icon:"ph-map-pin",onSelect:ee},{label:"Unassign from area",icon:"ph-x-circle",onSelect:Ve}):R.push({label:"Assign to area",icon:"ph-map-pin",onSelect:ee})),w.value&&r.has("scripts.run")&&R.push({label:"Run",icon:"ph-play",disabled:((X=C.value)==null?void 0:X.state)!=="enabled"||n.isRunning((p=C.value)==null?void 0:p.alias),onSelect:Y}),R}),S=Q(()=>w.value?"Actions":y.value?"Regular":P.value?"Scope":"Script"),E=Q(()=>`Loading ${S.value.toLowerCase()} details`),L=Q(()=>w.value?n.isLoadingActions:y.value?n.isLoadingRegular:P.value?n.isLoadingScopes||n.isLoadingActions||n.isLoadingRegular:!1),D=Q(()=>w.value?n.errorActions:y.value?n.errorRegular:P.value?n.errorScopes:null),T=Q(()=>w.value?n.actions.length>0:y.value?n.regular.length>0:P.value?n.scopes.length>0:!1),C=Q(()=>{const R=h.value;return R?w.value?n.actionByAlias(R):y.value?n.regularByAlias(R):P.value?n.scopeByName(R):null:null}),I=Q(()=>{const R=h.value;return!R||!P.value?[]:n.actionsByScope(R)}),te=Q(()=>{const R=h.value;return!R||!P.value?[]:n.regularByScope(R)}),ue=Q(()=>{var A;const R=(A=C.value)==null?void 0:A.area_id;return R&&a.areasById[String(R)]||null}),ye=Q(()=>P.value?n.isLoadingScopeCode:!1),we=Q(()=>P.value?n.errorScopeCode:null),V=Q(()=>{var R;return w.value||y.value?((R=C.value)==null?void 0:R.code)||"":P.value?n.currentScopeCode:""}),W=Q(()=>{const R=V.value;return R?oi.highlight(R,oi.languages.php,"php"):""});async function Y(){var A,X,p;if(!((A=C.value)!=null&&A.alias))return;const R=await n.runScript(C.value.alias);R!=null&&R.ok?s.success({title:`Ran ${C.value.alias}`,text:(X=n.lastRunResult)!=null&&X.execTime?`Exec time: ${n.lastRunResult.execTime}`:void 0}):s.error({title:`Failed ${C.value.alias}`,text:((p=R==null?void 0:R.error)==null?void 0:p.message)||"Unknown error"})}async function K(R){var m,x;const A=h.value;if(!A)return;let X;w.value?X=await n.setActionState(A,R):y.value?X=await n.setRegularState(A,R):P.value&&(X=await n.setScopeState(A,R));const p=((m=C.value)==null?void 0:m.alias)||A;X&&!X.ok?s.error({title:`Failed to ${R?"enable":"disable"} ${p}`,text:((x=X.error)==null?void 0:x.message)||"Unknown error"}):X&&s.success({title:`${R?"Enabled":"Disabled"} ${p}`})}function ee(){var R;d((R=C.value)==null?void 0:R.area_id)}async function fe(){var X;const R=(X=C.value)==null?void 0:X.id,A=await f(R,n.assignToArea.bind(n));A!=null&&A.ok&&s.success({title:"Assigned",text:"Script assigned to area successfully"})}const Se=Z(!1),Ee=Z(""),be=Z(!1),Me=Z("");function Ve(){C.value&&(Ee.value=`Are you sure you want to unassign script "${C.value.name||C.value.alias}" from its area?`,Me.value="",Se.value=!0)}async function je(){var A;if(!C.value)return;be.value=!0,Me.value="";const R=await n.unassignFromArea(C.value.id);if(be.value=!1,!R.ok){Me.value=((A=R.error)==null?void 0:A.message)||"Failed to unassign script";return}Se.value=!1,s.success({title:"Unassigned",text:"Script unassigned from area successfully"})}async function $e(){const R=h.value;!R||!P.value||await n.loadScopeCode(R)}async function N(){h.value&&(w.value&&n.actions.length===0?await n.loadActions():y.value&&n.regular.length===0?await n.loadRegular():P.value&&n.scopes.length===0&&await n.loadScopes(),P.value&&(n.actions.length===0&&await n.loadActions(),n.regular.length===0&&await n.loadRegular(),await $e()),a.areas.length===0&&await a.loadAreas())}const ae=[{key:"alias",label:"Alias"},{key:"name",label:"Name"},{key:"state",label:"State"}];return bt(()=>{N()}),la(()=>{n.clearScopeCode()}),Ft(()=>[t.params.type,t.params.id],([R,A],[X,p])=>{(R!==X||A!==p)&&(n.clearScopeCode(),N())}),(R,A)=>{const X=sn("router-link");return b(),q("section",Pg,[L.value?(b(),z(_t,{key:0,text:E.value},null,8,["text"])):D.value&&!T.value?(b(),z(pt,{key:1,title:`${S.value} loading failed`,error:D.value,retry:N},null,8,["title","error"])):C.value?(b(),q("div",Fg,[$(v(xt),{title:C.value.name||C.value.alias||C.value.name,kicker:S.value},{actions:k(()=>[v(r).has("scripts.edit")?(b(),z(v(ef),{key:0,"model-value":C.value.state==="enabled",label:"Enabled","onUpdate:modelValue":A[0]||(A[0]=p=>K(p))},null,8,["model-value"])):se("",!0),$(tr,{items:_.value},null,8,["items"])]),_:1},8,["title","kicker"]),F("div",Og,[C.value.icon?(b(),q("div",{key:0,innerHTML:C.value.icon,class:"script-icon"},null,8,Lg)):se("",!0),C.value.description?(b(),q("p",Ng,M(C.value.description),1)):se("",!0),F("div",Mg,[$(v(me),{variant:C.value.state==="enabled"?"success":"secondary"},{default:k(()=>[U(M(C.value.state),1)]),_:1},8,["variant"]),F("code",null,M(C.value.alias||C.value.name),1),C.value.author?(b(),q("small",Ug,M(C.value.author),1)):se("",!0),$(Xs,{area:ue.value,areaId:C.value.area_id},null,8,["area","areaId"]),C.value.scope?(b(),z(X,{key:1,to:{name:"script-detail",params:{type:"scopes",id:C.value.scope}},class:"scope-link"},{default:k(()=>[A[6]||(A[6]=F("span",{class:"scope-label"},"Scope",-1)),F("span",Bg,M(C.value.scope),1),A[7]||(A[7]=F("i",{class:"ph ph-arrow-right"},null,-1))]),_:1},8,["to"])):se("",!0)]),F("div",Vg,[C.value.filename?(b(),q("div",jg,[A[8]||(A[8]=F("span",{class:"info-label text-muted"},"File:",-1)),F("span",Hg,M(C.value.filename),1)])):se("",!0),C.value.path?(b(),q("div",Gg,[A[9]||(A[9]=F("span",{class:"info-label text-muted"},"Path:",-1)),F("span",qg,M(C.value.path),1)])):se("",!0),C.value.created_by?(b(),q("div",zg,[A[10]||(A[10]=F("span",{class:"info-label text-muted"},"Author:",-1)),F("span",Kg,M(C.value.created_by),1)])):se("",!0)])]),P.value?se("",!0):(b(),z(er,{key:0,item:C.value,emptyMessage:"This script is not assigned to any area.",onAssign:ee},{action:k(()=>[v(r).has("scripts.edit")?(b(),z(v(pe),{key:0,variant:"primary",icon:"ph-map-pin",onClick:ee},{default:k(()=>{var p;return[U(M((p=C.value)!=null&&p.area_id?"Change area":"Assign to area"),1)]}),_:1})):se("",!0)]),_:1},8,["item"])),P.value&&I.value.length>0?(b(),q("div",Wg,[F("div",Jg,"Action scripts ("+M(I.value.length)+")",1),$(v(Dn),{rows:I.value,columns:ae},{"cell-state":k(({row:p})=>[$(v(me),{variant:p.state==="enabled"?"success":"secondary"},{default:k(()=>[U(M(p.state),1)]),_:2},1032,["variant"])]),"cell-alias":k(({row:p})=>[$(X,{to:{name:"script-detail",params:{type:"actions",id:p.alias}},class:"script-link"},{default:k(()=>[U(M(p.alias),1)]),_:2},1032,["to"])]),_:1},8,["rows"])])):se("",!0),P.value&&te.value.length>0?(b(),q("div",Yg,[F("div",Zg,"Regular scripts ("+M(te.value.length)+")",1),$(v(Dn),{rows:te.value,columns:ae},{"cell-state":k(({row:p})=>[$(v(me),{variant:p.state==="enabled"?"success":"secondary"},{default:k(()=>[U(M(p.state),1)]),_:2},1032,["variant"])]),"cell-alias":k(({row:p})=>[$(X,{to:{name:"script-detail",params:{type:"regular",id:p.alias}},class:"script-link"},{default:k(()=>[U(M(p.alias),1)]),_:2},1032,["to"])]),_:1},8,["rows"])])):se("",!0),C.value.code||P.value?(b(),q("div",Qg,[A[11]||(A[11]=F("div",{class:"block-title"},"Source code",-1)),ye.value?(b(),z(_t,{key:0,text:"Loading source code"})):we.value?(b(),z(pt,{key:1,title:"Code loading failed",error:we.value,retry:$e},null,8,["error"])):V.value?(b(),q("pre",Xg,[F("code",{class:"language-php",innerHTML:W.value},null,8,eh)])):(b(),z(rt,{key:3,title:"No code",message:"Source code is not available."}))])):se("",!0)])):(b(),z(rt,{key:3,title:"Not found",message:"The requested script does not exist."})),$(v(ut),{open:v(o),title:"Assign to area","onUpdate:open":A[3]||(A[3]=p=>o.value=p)},{footer:k(()=>[$(v(pe),{variant:"secondary",onClick:A[2]||(A[2]=p=>o.value=!1)},{default:k(()=>[...A[12]||(A[12]=[U("Cancel",-1)])]),_:1}),$(v(pe),{variant:"primary",icon:"ph-check",loading:v(u),onClick:fe},{default:k(()=>[...A[13]||(A[13]=[U(" Assign ",-1)])]),_:1},8,["loading"])]),default:k(()=>[$(v(Js),{modelValue:v(l),"onUpdate:modelValue":A[1]||(A[1]=p=>Ue(l)?l.value=p:null),label:"Area",options:v(i),icon:"ph-map-trifold"},null,8,["modelValue","options"]),v(c)?(b(),q("div",th,[$(v(Qe),{variant:"danger"},{default:k(()=>[U(M(v(c)),1)]),_:1})])):se("",!0)]),_:1},8,["open"]),$(v(ut),{open:Se.value,title:"Unassign from area","onUpdate:open":A[5]||(A[5]=p=>Se.value=p)},{footer:k(()=>[$(v(pe),{variant:"secondary",onClick:A[4]||(A[4]=p=>Se.value=!1)},{default:k(()=>[...A[14]||(A[14]=[U("Cancel",-1)])]),_:1}),$(v(pe),{variant:"warning",icon:"ph-x-circle",loading:be.value,onClick:je},{default:k(()=>[...A[15]||(A[15]=[U(" Unassign ",-1)])]),_:1},8,["loading"])]),default:k(()=>[F("p",null,M(Ee.value),1),Me.value?(b(),q("div",nh,[$(v(Qe),{variant:"danger"},{default:k(()=>[U(M(Me.value),1)]),_:1})])):se("",!0)]),_:1},8,["open"])])}}},sh=Ye(ah,[["__scopeId","data-v-31cd836e"]]),rh={class:"page"},ih={key:3,class:"firmwares-panel"},oh={class:"firmwares-summary"},lh={class:"firmwares-list"},uh={class:"firmware-header"},ch={class:"firmware-id"},dh={class:"firmware-meta"},fh={key:0,class:"firmware-desc"},ph={key:1,class:"firmware-changelog"},vh={__name:"FirmwaresListPage",setup(e){const t=Yo(),n=Mt(),a=Z(null);async function s(){var o;a.value=null;const i=await t.loadFirmwares();i.ok||(a.value=((o=i.error)==null?void 0:o.message)||"Failed to load catalog")}async function r(){var o;a.value=null;const i=await t.refreshFirmwares();i.ok||(a.value=((o=i.error)==null?void 0:o.message)||"Failed to refresh catalog")}return bt(s),(i,o)=>(b(),q("section",rh,[$(v(xt),{title:"Firmware Catalog",kicker:"Firmwares"},{actions:k(()=>[v(n).has("firmware.upload")?(b(),z(v(pe),{key:0,loading:v(t).isUpdating,icon:"ph-arrow-clockwise",onClick:r},{default:k(()=>[...o[0]||(o[0]=[U(" Refresh Catalog ",-1)])]),_:1},8,["loading"])):se("",!0)]),_:1}),v(t).isLoadingList?(b(),z(_t,{key:0,text:"Loading firmware catalog"})):a.value?(b(),z(pt,{key:1,title:"Catalog loading failed",error:a.value,retry:s},null,8,["error"])):v(t).firmwares.length===0?(b(),z(rt,{key:2,title:"No firmwares found",message:"No firmware packages detected in the firmwares directory."})):(b(),q("div",ih,[F("div",oh,[$(v(me),{variant:"primary"},{default:k(()=>[U("Total: "+M(v(t).firmwares.length),1)]),_:1})]),F("div",lh,[(b(!0),q(Pe,null,Wt(v(t).firmwares,l=>(b(),q("div",{key:l.id,class:"firmware-card"},[F("div",uh,[F("span",ch,M(l.id),1),$(v(me),{variant:"success"},{default:k(()=>[U(M(l.version),1)]),_:2},1024)]),F("div",dh,[$(v(me),{variant:"secondary"},{default:k(()=>[U(M(l.device_type),1)]),_:2},1024),l.platform?(b(),z(v(me),{key:0,variant:"info"},{default:k(()=>[U(M(l.platform),1)]),_:2},1024)):se("",!0),l.channels?(b(),z(v(me),{key:1,variant:"warning"},{default:k(()=>[U(M(l.channels)+" ch",1)]),_:2},1024)):se("",!0)]),l.description?(b(),q("p",fh,M(l.description),1)):se("",!0),l.changelog?(b(),q("pre",ph,M(l.changelog),1)):se("",!0)]))),128))])]))]))}},gh=Ye(vh,[["__scopeId","data-v-c0c73f70"]]),hh={class:"login-page"},mh={class:"login-card"},yh={key:0,class:"login-loading text-muted"},_h={__name:"LoginPage",setup(e){const t=hn(),n=ca();bt(()=>{n.isAuthenticated&&t.replace({name:"areas-favorites"})});function a(){const s=window.location.href;window.location.href=`/auth/login?return_to=${encodeURIComponent(s)}`}return(s,r)=>(b(),q("div",hh,[F("div",mh,[r[3]||(r[3]=Bu('',3)),$(v(pe),{variant:"primary",size:"lg",class:"login-btn",onClick:a},{icon:k(()=>[...r[0]||(r[0]=[F("i",{class:"ph ph-sign-in"},null,-1)])]),default:k(()=>[r[1]||(r[1]=U(" Sign in with gnexus-auth ",-1))]),_:1}),v(n).isLoading?(b(),q("p",yh,[...r[2]||(r[2]=[F("i",{class:"ph ph-spinner ph-spin"},null,-1),U(" Checking session… ",-1)])])):se("",!0)])]))}},bh=Ye(_h,[["__scopeId","data-v-db9de624"]]),wh=[{path:"/",redirect:"/areas/favorites"},{path:"/login",name:"login",component:bh,meta:{public:!0}},{path:"/areas/favorites",name:"areas-favorites",component:Nf,meta:{permission:"areas.view"}},{path:"/areas/tree",name:"areas-tree",component:Xf,meta:{permission:"areas.view"}},{path:"/areas/:id",name:"area-detail",component:cv,meta:{permission:"areas.view"}},{path:"/devices",name:"devices",component:hv,meta:{permission:"devices.view"}},{path:"/devices/scanning",name:"devices-scanning",component:Dv,meta:{permission:"devices.scan"}},{path:"/devices/:id",name:"device-detail",component:yg,meta:{permission:"devices.view"}},{path:"/scripts/actions",name:"scripts-actions",component:wg,meta:{permission:"scripts.run"}},{path:"/scripts/regular",name:"scripts-regular",component:Ag,meta:{permission:"scripts.view"}},{path:"/scripts/scopes",name:"scripts-scopes",component:Rg,meta:{permission:"scripts.view"}},{path:"/scripts/:type(actions|regular|scopes)/:id",name:"script-detail",component:sh,meta:{permission:"scripts.view"}},{path:"/firmwares",name:"firmwares",component:gh,meta:{permission:"firmware.view"}},{path:"/:pathMatch(.*)*",name:"not-found",component:()=>Sf(()=>import("./NotFoundPage-DmNfJ50v.js"),[])}],Zo=Nd({history:hd(),routes:wh});Zo.beforeEach(async(e,t,n)=>{var r,i;const a=ca();if(await a.init(),(r=e.meta)!=null&&r.public){if(e.name==="login"&&a.isAuthenticated){n({name:"areas-favorites"});return}n();return}if(!a.isAuthenticated){n({name:"login"});return}const s=(i=e.meta)==null?void 0:i.permission;if(s&&!a.hasPermission(s)){n({name:"areas-favorites"});return}n()});function Sh(e){e.config.errorHandler=(t,n,a)=>{const s=(t==null?void 0:t.message)||String(t);console.error(`[Vue errorHandler] ${a}`,s,t)},window.addEventListener("unhandledrejection",t=>{var s;const n=t.reason,a=(n==null?void 0:n.message)||((s=n==null?void 0:n.error)==null?void 0:s.message)||String(n);console.error("[Unhandled rejection]",a,n),t.preventDefault()}),window.addEventListener("error",t=>{const n=t.error,a=(n==null?void 0:n.message)||t.message||"Unknown error";console.error(`[Global error] ${a}`,"at",t.filename,t.lineno,t.colno,n)})}const nr=kc(_f);Sh(nr);const kh=Cc();nr.use(kh).use(Zo);const Ah=ca();Ah.init().finally(()=>{nr.mount("#app")});export{Kd as G,$ as a,q as c,b as o,v as u}; diff --git a/server/dist/assets/index-Vo31ftuu.js b/server/dist/assets/index-Vo31ftuu.js new file mode 100644 index 0000000..602edb8 --- /dev/null +++ b/server/dist/assets/index-Vo31ftuu.js @@ -0,0 +1,37 @@ +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))a(s);new MutationObserver(s=>{for(const r of s)if(r.type==="childList")for(const i of r.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&a(i)}).observe(document,{childList:!0,subtree:!0});function n(s){const r={};return s.integrity&&(r.integrity=s.integrity),s.referrerPolicy&&(r.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?r.credentials="include":s.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function a(s){if(s.ep)return;s.ep=!0;const r=n(s);fetch(s.href,r)}})();/** +* @vue/shared v3.5.33 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function Ds(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const Ne={},An=[],Pt=()=>{},hi=()=>!1,Ra=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Ta=e=>e.startsWith("onUpdate:"),tt=Object.assign,Ps=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},rl=Object.prototype.hasOwnProperty,Ce=(e,t)=>rl.call(e,t),he=Array.isArray,xn=e=>oa(e)==="[object Map]",mi=e=>oa(e)==="[object Set]",lr=e=>oa(e)==="[object Date]",_e=e=>typeof e=="function",He=e=>typeof e=="string",yt=e=>typeof e=="symbol",Te=e=>e!==null&&typeof e=="object",yi=e=>(Te(e)||_e(e))&&_e(e.then)&&_e(e.catch),_i=Object.prototype.toString,oa=e=>_i.call(e),il=e=>oa(e).slice(8,-1),bi=e=>oa(e)==="[object Object]",$a=e=>He(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,qn=Ds(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Ia=e=>{const t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},ol=/-\w/g,ft=Ia(e=>e.replace(ol,t=>t.slice(1).toUpperCase())),ll=/\B([A-Z])/g,vn=Ia(e=>e.replace(ll,"-$1").toLowerCase()),Da=Ia(e=>e.charAt(0).toUpperCase()+e.slice(1)),Ja=Ia(e=>e?`on${Da(e)}`:""),Dt=(e,t)=>!Object.is(e,t),Ya=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:a,value:n})},ul=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let ur;const Pa=()=>ur||(ur=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Os(e){if(he(e)){const t={};for(let n=0;n{if(n){const a=n.split(dl);a.length>1&&(t[a[0].trim()]=a[1].trim())}}),t}function Lt(e){let t="";if(He(e))t=e;else if(he(e))for(let n=0;n!!(e&&e.__v_isRef===!0),M=e=>He(e)?e:e==null?"":he(e)||Te(e)&&(e.toString===_i||!_e(e.toString))?ki(e)?M(e.value):JSON.stringify(e,Ai,2):String(e),Ai=(e,t)=>ki(t)?Ai(e,t.value):xn(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[a,s],r)=>(n[Za(a,r)+" =>"]=s,n),{})}:mi(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Za(n))}:yt(t)?Za(t):Te(t)&&!he(t)&&!bi(t)?String(t):t,Za=(e,t="")=>{var n;return yt(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.5.33 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let Ze;class xi{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.__v_skip=!0,this.parent=Ze,!t&&Ze&&(this.index=(Ze.scopes||(Ze.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0&&--this._on===0){if(Ze===this)Ze=this.prevScope;else{let t=Ze;for(;t;){if(t.prevScope===this){t.prevScope=this.prevScope;break}t=t.prevScope}}this.prevScope=void 0}}stop(t){if(this._active){this._active=!1;let n,a;for(n=0,a=this.effects.length;n0)return;if(Kn){let t=Kn;for(Kn=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;zn;){let t=zn;for(zn=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(a){e||(e=a)}t=n}}if(e)throw e}function Ii(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Di(e){let t,n=e.depsTail,a=n;for(;a;){const s=a.prevDep;a.version===-1?(a===n&&(n=s),Ms(a),yl(a)):t=a,a.dep.activeLink=a.prevActiveLink,a.prevActiveLink=void 0,a=s}e.deps=t,e.depsTail=n}function fs(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Pi(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Pi(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===ea)||(e.globalVersion=ea,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!fs(e))))return;e.flags|=2;const t=e.dep,n=Le,a=St;Le=e,St=!0;try{Ii(e);const s=e.fn(e._value);(t.version===0||Dt(s,e._value))&&(e.flags|=128,e._value=s,t.version++)}catch(s){throw t.version++,s}finally{Le=n,St=a,Di(e),e.flags&=-3}}function Ms(e,t=!1){const{dep:n,prevSub:a,nextSub:s}=e;if(a&&(a.nextSub=s,e.prevSub=void 0),s&&(s.prevSub=a,e.nextSub=void 0),n.subs===e&&(n.subs=a,!a&&n.computed)){n.computed.flags&=-5;for(let r=n.computed.deps;r;r=r.nextDep)Ms(r,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function yl(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let St=!0;const Oi=[];function qt(){Oi.push(St),St=!1}function zt(){const e=Oi.pop();St=e===void 0?!0:e}function cr(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=Le;Le=void 0;try{t()}finally{Le=n}}}let ea=0;class _l{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Us{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!Le||!St||Le===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==Le)n=this.activeLink=new _l(Le,this),Le.deps?(n.prevDep=Le.depsTail,Le.depsTail.nextDep=n,Le.depsTail=n):Le.deps=Le.depsTail=n,Fi(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const a=n.nextDep;a.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=a),n.prevDep=Le.depsTail,n.nextDep=void 0,Le.depsTail.nextDep=n,Le.depsTail=n,Le.deps===n&&(Le.deps=a)}return n}trigger(t){this.version++,ea++,this.notify(t)}notify(t){Ls();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Ns()}}}function Fi(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let a=t.deps;a;a=a.nextDep)Fi(a)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const ya=new WeakMap,dn=Symbol(""),ps=Symbol(""),ta=Symbol("");function at(e,t,n){if(St&&Le){let a=ya.get(e);a||ya.set(e,a=new Map);let s=a.get(n);s||(a.set(n,s=new Us),s.map=a,s.key=n),s.track()}}function Ht(e,t,n,a,s,r){const i=ya.get(e);if(!i){ea++;return}const o=l=>{l&&l.trigger()};if(Ls(),t==="clear")i.forEach(o);else{const l=he(e),c=l&&$a(n);if(l&&n==="length"){const u=Number(a);i.forEach((d,f)=>{(f==="length"||f===ta||!yt(f)&&f>=u)&&o(d)})}else switch((n!==void 0||i.has(void 0))&&o(i.get(n)),c&&o(i.get(ta)),t){case"add":l?c&&o(i.get("length")):(o(i.get(dn)),xn(e)&&o(i.get(ps)));break;case"delete":l||(o(i.get(dn)),xn(e)&&o(i.get(ps)));break;case"set":xn(e)&&o(i.get(dn));break}}Ns()}function bl(e,t){const n=ya.get(e);return n&&n.get(t)}function _n(e){const t=Ae(e);return t===e?t:(at(t,"iterate",ta),ht(e)?t:t.map(kt))}function Oa(e){return at(e=Ae(e),"iterate",ta),e}function $t(e,t){return Kt(e)?Tn(Gt(e)?kt(t):t):kt(t)}const wl={__proto__:null,[Symbol.iterator](){return Xa(this,Symbol.iterator,e=>$t(this,e))},concat(...e){return _n(this).concat(...e.map(t=>he(t)?_n(t):t))},entries(){return Xa(this,"entries",e=>(e[1]=$t(this,e[1]),e))},every(e,t){return Ut(this,"every",e,t,void 0,arguments)},filter(e,t){return Ut(this,"filter",e,t,n=>n.map(a=>$t(this,a)),arguments)},find(e,t){return Ut(this,"find",e,t,n=>$t(this,n),arguments)},findIndex(e,t){return Ut(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Ut(this,"findLast",e,t,n=>$t(this,n),arguments)},findLastIndex(e,t){return Ut(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Ut(this,"forEach",e,t,void 0,arguments)},includes(...e){return es(this,"includes",e)},indexOf(...e){return es(this,"indexOf",e)},join(e){return _n(this).join(e)},lastIndexOf(...e){return es(this,"lastIndexOf",e)},map(e,t){return Ut(this,"map",e,t,void 0,arguments)},pop(){return Ln(this,"pop")},push(...e){return Ln(this,"push",e)},reduce(e,...t){return dr(this,"reduce",e,t)},reduceRight(e,...t){return dr(this,"reduceRight",e,t)},shift(){return Ln(this,"shift")},some(e,t){return Ut(this,"some",e,t,void 0,arguments)},splice(...e){return Ln(this,"splice",e)},toReversed(){return _n(this).toReversed()},toSorted(e){return _n(this).toSorted(e)},toSpliced(...e){return _n(this).toSpliced(...e)},unshift(...e){return Ln(this,"unshift",e)},values(){return Xa(this,"values",e=>$t(this,e))}};function Xa(e,t,n){const a=Oa(e),s=a[t]();return a!==e&&!ht(e)&&(s._next=s.next,s.next=()=>{const r=s._next();return r.done||(r.value=n(r.value)),r}),s}const Sl=Array.prototype;function Ut(e,t,n,a,s,r){const i=Oa(e),o=i!==e&&!ht(e),l=i[t];if(l!==Sl[t]){const d=l.apply(e,r);return o?kt(d):d}let c=n;i!==e&&(o?c=function(d,f){return n.call(this,$t(e,d),f,e)}:n.length>2&&(c=function(d,f){return n.call(this,d,f,e)}));const u=l.call(i,c,a);return o&&s?s(u):u}function dr(e,t,n,a){const s=Oa(e),r=s!==e&&!ht(e);let i=n,o=!1;s!==e&&(r?(o=a.length===0,i=function(c,u,d){return o&&(o=!1,c=$t(e,c)),n.call(this,c,$t(e,u),d,e)}):n.length>3&&(i=function(c,u,d){return n.call(this,c,u,d,e)}));const l=s[t](i,...a);return o?$t(e,l):l}function es(e,t,n){const a=Ae(e);at(a,"iterate",ta);const s=a[t](...n);return(s===-1||s===!1)&&Fa(n[0])?(n[0]=Ae(n[0]),a[t](...n)):s}function Ln(e,t,n=[]){qt(),Ls();const a=Ae(e)[t].apply(e,n);return Ns(),zt(),a}const kl=Ds("__proto__,__v_isRef,__isVue"),Li=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(yt));function Al(e){yt(e)||(e=String(e));const t=Ae(this);return at(t,"has",e),t.hasOwnProperty(e)}class Ni{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,a){if(n==="__v_skip")return t.__v_skip;const s=this._isReadonly,r=this._isShallow;if(n==="__v_isReactive")return!s;if(n==="__v_isReadonly")return s;if(n==="__v_isShallow")return r;if(n==="__v_raw")return a===(s?r?Ol:Vi:r?Bi:Ui).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(a)?t:void 0;const i=he(t);if(!s){let l;if(i&&(l=wl[n]))return l;if(n==="hasOwnProperty")return Al}const o=Reflect.get(t,n,Ue(t)?t:a);if((yt(n)?Li.has(n):kl(n))||(s||at(t,"get",n),r))return o;if(Ue(o)){const l=i&&$a(n)?o:o.value;return s&&Te(l)?gs(l):l}return Te(o)?s?gs(o):Yt(o):o}}class Mi extends Ni{constructor(t=!1){super(!1,t)}set(t,n,a,s){let r=t[n];const i=he(t)&&$a(n);if(!this._isShallow){const c=Kt(r);if(!ht(a)&&!Kt(a)&&(r=Ae(r),a=Ae(a)),!i&&Ue(r)&&!Ue(a))return c||(r.value=a),!0}const o=i?Number(n)e,fa=e=>Reflect.getPrototypeOf(e);function Tl(e,t,n){return function(...a){const s=this.__v_raw,r=Ae(s),i=xn(r),o=e==="entries"||e===Symbol.iterator&&i,l=e==="keys"&&i,c=s[e](...a),u=n?vs:t?Tn:kt;return!t&&at(r,"iterate",l?ps:dn),tt(Object.create(c),{next(){const{value:d,done:f}=c.next();return f?{value:d,done:f}:{value:o?[u(d[0]),u(d[1])]:u(d),done:f}}})}}function pa(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function $l(e,t){const n={get(s){const r=this.__v_raw,i=Ae(r),o=Ae(s);e||(Dt(s,o)&&at(i,"get",s),at(i,"get",o));const{has:l}=fa(i),c=t?vs:e?Tn:kt;if(l.call(i,s))return c(r.get(s));if(l.call(i,o))return c(r.get(o));r!==i&&r.get(s)},get size(){const s=this.__v_raw;return!e&&at(Ae(s),"iterate",dn),s.size},has(s){const r=this.__v_raw,i=Ae(r),o=Ae(s);return e||(Dt(s,o)&&at(i,"has",s),at(i,"has",o)),s===o?r.has(s):r.has(s)||r.has(o)},forEach(s,r){const i=this,o=i.__v_raw,l=Ae(o),c=t?vs:e?Tn:kt;return!e&&at(l,"iterate",dn),o.forEach((u,d)=>s.call(r,c(u),c(d),i))}};return tt(n,e?{add:pa("add"),set:pa("set"),delete:pa("delete"),clear:pa("clear")}:{add(s){const r=Ae(this),i=fa(r),o=Ae(s),l=!t&&!ht(s)&&!Kt(s)?o:s;return i.has.call(r,l)||Dt(s,l)&&i.has.call(r,s)||Dt(o,l)&&i.has.call(r,o)||(r.add(l),Ht(r,"add",l,l)),this},set(s,r){!t&&!ht(r)&&!Kt(r)&&(r=Ae(r));const i=Ae(this),{has:o,get:l}=fa(i);let c=o.call(i,s);c||(s=Ae(s),c=o.call(i,s));const u=l.call(i,s);return i.set(s,r),c?Dt(r,u)&&Ht(i,"set",s,r):Ht(i,"add",s,r),this},delete(s){const r=Ae(this),{has:i,get:o}=fa(r);let l=i.call(r,s);l||(s=Ae(s),l=i.call(r,s)),o&&o.call(r,s);const c=r.delete(s);return l&&Ht(r,"delete",s,void 0),c},clear(){const s=Ae(this),r=s.size!==0,i=s.clear();return r&&Ht(s,"clear",void 0,void 0),i}}),["keys","values","entries",Symbol.iterator].forEach(s=>{n[s]=Tl(s,e,t)}),n}function Bs(e,t){const n=$l(e,t);return(a,s,r)=>s==="__v_isReactive"?!e:s==="__v_isReadonly"?e:s==="__v_raw"?a:Reflect.get(Ce(n,s)&&s in a?n:a,s,r)}const Il={get:Bs(!1,!1)},Dl={get:Bs(!1,!0)},Pl={get:Bs(!0,!1)};const Ui=new WeakMap,Bi=new WeakMap,Vi=new WeakMap,Ol=new WeakMap;function Fl(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Ll(e){return e.__v_skip||!Object.isExtensible(e)?0:Fl(il(e))}function Yt(e){return Kt(e)?e:Vs(e,!1,Cl,Il,Ui)}function ji(e){return Vs(e,!1,Rl,Dl,Bi)}function gs(e){return Vs(e,!0,El,Pl,Vi)}function Vs(e,t,n,a,s){if(!Te(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const r=Ll(e);if(r===0)return e;const i=s.get(e);if(i)return i;const o=new Proxy(e,r===2?a:n);return s.set(e,o),o}function Gt(e){return Kt(e)?Gt(e.__v_raw):!!(e&&e.__v_isReactive)}function Kt(e){return!!(e&&e.__v_isReadonly)}function ht(e){return!!(e&&e.__v_isShallow)}function Fa(e){return e?!!e.__v_raw:!1}function Ae(e){const t=e&&e.__v_raw;return t?Ae(t):e}function js(e){return!Ce(e,"__v_skip")&&Object.isExtensible(e)&&wi(e,"__v_skip",!0),e}const kt=e=>Te(e)?Yt(e):e,Tn=e=>Te(e)?gs(e):e;function Ue(e){return e?e.__v_isRef===!0:!1}function Y(e){return Hi(e,!1)}function Nl(e){return Hi(e,!0)}function Hi(e,t){return Ue(e)?e:new Ml(e,t)}class Ml{constructor(t,n){this.dep=new Us,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:Ae(t),this._value=n?t:kt(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,a=this.__v_isShallow||ht(t)||Kt(t);t=a?t:Ae(t),Dt(t,n)&&(this._rawValue=t,this._value=a?t:kt(t),this.dep.trigger())}}function v(e){return Ue(e)?e.value:e}const Ul={get:(e,t,n)=>t==="__v_raw"?e:v(Reflect.get(e,t,n)),set:(e,t,n,a)=>{const s=e[t];return Ue(s)&&!Ue(n)?(s.value=n,!0):Reflect.set(e,t,n,a)}};function Gi(e){return Gt(e)?e:new Proxy(e,Ul)}function Bl(e){const t=he(e)?new Array(e.length):{};for(const n in e)t[n]=jl(e,n);return t}class Vl{constructor(t,n,a){this._object=t,this._defaultValue=a,this.__v_isRef=!0,this._value=void 0,this._key=yt(n)?n:String(n),this._raw=Ae(t);let s=!0,r=t;if(!he(t)||yt(this._key)||!$a(this._key))do s=!Fa(r)||ht(r);while(s&&(r=r.__v_raw));this._shallow=s}get value(){let t=this._object[this._key];return this._shallow&&(t=v(t)),this._value=t===void 0?this._defaultValue:t}set value(t){if(this._shallow&&Ue(this._raw[this._key])){const n=this._object[this._key];if(Ue(n)){n.value=t;return}}this._object[this._key]=t}get dep(){return bl(this._raw,this._key)}}function jl(e,t,n){return new Vl(e,t,n)}class Hl{constructor(t,n,a){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Us(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=ea-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=a}notify(){if(this.flags|=16,!(this.flags&8)&&Le!==this)return $i(this,!0),!0}get value(){const t=this.dep.track();return Pi(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Gl(e,t,n=!1){let a,s;return _e(e)?a=e:(a=e.get,s=e.set),new Hl(a,s,n)}const va={},_a=new WeakMap;let ln;function ql(e,t=!1,n=ln){if(n){let a=_a.get(n);a||_a.set(n,a=[]),a.push(e)}}function zl(e,t,n=Ne){const{immediate:a,deep:s,once:r,scheduler:i,augmentJob:o,call:l}=n,c=C=>s?C:ht(C)||s===!1||s===0?an(C,1):an(C);let u,d,f,h,g=!1,b=!1;if(Ue(e)?(d=()=>e.value,g=ht(e)):Gt(e)?(d=()=>c(e),g=!0):he(e)?(b=!0,g=e.some(C=>Gt(C)||ht(C)),d=()=>e.map(C=>{if(Ue(C))return C.value;if(Gt(C))return c(C);if(_e(C))return l?l(C,2):C()})):_e(e)?t?d=l?()=>l(e,2):e:d=()=>{if(f){qt();try{f()}finally{zt()}}const C=ln;ln=u;try{return l?l(e,3,[h]):e(h)}finally{ln=C}}:d=Pt,t&&s){const C=d,L=s===!0?1/0:s;d=()=>an(C(),L)}const m=Ei(),$=()=>{u.stop(),m&&m.active&&Ps(m.effects,u)};if(r&&t){const C=t;t=(...L)=>{C(...L),$()}}let y=b?new Array(e.length).fill(va):va;const S=C=>{if(!(!(u.flags&1)||!u.dirty&&!C))if(t){const L=u.run();if(s||g||(b?L.some((P,T)=>Dt(P,y[T])):Dt(L,y))){f&&f();const P=ln;ln=u;try{const T=[L,y===va?void 0:b&&y[0]===va?[]:y,h];y=L,l?l(t,3,T):t(...T)}finally{ln=P}}}else u.run()};return o&&o(S),u=new Ri(d),u.scheduler=i?()=>i(S,!1):S,h=C=>ql(C,!1,u),f=u.onStop=()=>{const C=_a.get(u);if(C){if(l)l(C,4);else for(const L of C)L();_a.delete(u)}},t?a?S(!0):y=u.run():i?i(S.bind(null,!0),!0):u.run(),$.pause=u.pause.bind(u),$.resume=u.resume.bind(u),$.stop=$,$}function an(e,t=1/0,n){if(t<=0||!Te(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,Ue(e))an(e.value,t,n);else if(he(e))for(let a=0;a{an(a,t,n)});else if(bi(e)){for(const a in e)an(e[a],t,n);for(const a of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,a)&&an(e[a],t,n)}return e}/** +* @vue/runtime-core v3.5.33 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function la(e,t,n,a){try{return a?e(...a):e()}catch(s){La(s,t,n)}}function Nt(e,t,n,a){if(_e(e)){const s=la(e,t,n,a);return s&&yi(s)&&s.catch(r=>{La(r,t,n)}),s}if(he(e)){const s=[];for(let r=0;r>>1,s=ct[a],r=na(s);r=na(n)?ct.push(e):ct.splice(Wl(t),0,e),e.flags|=1,zi()}}function zi(){ba||(ba=qi.then(Wi))}function Jl(e){he(e)?Cn.push(...e):tn&&e.id===-1?tn.splice(wn+1,0,e):e.flags&1||(Cn.push(e),e.flags|=1),zi()}function fr(e,t,n=Tt+1){for(;nna(n)-na(a));if(Cn.length=0,tn){tn.push(...t);return}for(tn=t,wn=0;wne.id==null?e.flags&2?-1:1/0:e.id;function Wi(e){try{for(Tt=0;Tt{a._d&&Aa(-1);const r=wa(t);let i;try{i=e(...s)}finally{wa(r),a._d&&Aa(1)}return i};return a._n=!0,a._c=!0,a._d=!0,a}function rn(e,t,n,a){const s=e.dirs,r=t&&t.dirs;for(let i=0;i1)return n&&_e(t)?t.call(a&&a.proxy):t}}function Yl(){return!!(ja()||fn)}const Zl=Symbol.for("v-scx"),Ql=()=>mt(Zl);function Ot(e,t,n){return Yi(e,t,n)}function Yi(e,t,n=Ne){const{immediate:a,deep:s,flush:r,once:i}=n,o=tt({},n),l=t&&a||!t&&r!=="post";let c;if(ra){if(r==="sync"){const h=Ql();c=h.__watcherHandles||(h.__watcherHandles=[])}else if(!l){const h=()=>{};return h.stop=Pt,h.resume=Pt,h.pause=Pt,h}}const u=st;o.call=(h,g,b)=>Nt(h,u,g,b);let d=!1;r==="post"?o.scheduler=h=>{ot(h,u&&u.suspense)}:r!=="sync"&&(d=!0,o.scheduler=(h,g)=>{g?h():Hs(h)}),o.augmentJob=h=>{t&&(h.flags|=4),d&&(h.flags|=2,u&&(h.id=u.uid,h.i=u))};const f=zl(e,t,o);return ra&&(c?c.push(f):l&&f()),f}function Xl(e,t,n){const a=this.proxy,s=He(e)?e.includes(".")?Zi(a,e):()=>a[e]:e.bind(a,a);let r;_e(t)?r=t:(r=t.handler,n=t);const i=ca(this),o=Yi(s,r.bind(a),n);return i(),o}function Zi(e,t){const n=t.split(".");return()=>{let a=e;for(let s=0;se.__isTeleport,un=e=>e&&(e.disabled||e.disabled===""),tu=e=>e&&(e.defer||e.defer===""),pr=e=>typeof SVGElement<"u"&&e instanceof SVGElement,vr=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,hs=(e,t)=>{const n=e&&e.to;return He(n)?t?t(n):null:n},nu={name:"Teleport",__isTeleport:!0,process(e,t,n,a,s,r,i,o,l,c){const{mc:u,pc:d,pbc:f,o:{insert:h,querySelector:g,createText:b,createComment:m,parentNode:$}}=c,y=un(t.props);let{dynamicChildren:S}=t;const C=(T,E,D)=>{T.shapeFlag&16&&u(T.children,E,D,s,r,i,o,l)},L=(T=t)=>{const E=un(T.props),D=T.target=hs(T.props,g),te=ms(D,T,b,h);D&&(i!=="svg"&&pr(D)?i="svg":i!=="mathml"&&vr(D)&&(i="mathml"),s&&s.isCE&&(s.ce._teleportTargets||(s.ce._teleportTargets=new Set)).add(D),E||(C(T,D,te),jn(T,!1)))},P=T=>{const E=()=>{if(Xt.get(T)===E){if(Xt.delete(T),un(T.props)){const D=$(T.el)||n;C(T,D,T.anchor),jn(T,!0)}L(T)}};Xt.set(T,E),ot(E,r)};if(e==null){const T=t.el=b(""),E=t.anchor=b("");if(h(T,n,a),h(E,n,a),tu(t.props)||r&&r.pendingBranch){P(t);return}y&&(C(t,n,E),jn(t,!0)),L()}else{t.el=e.el;const T=t.anchor=e.anchor,E=Xt.get(e);if(E){E.flags|=8,Xt.delete(e),P(t);return}t.targetStart=e.targetStart;const D=t.target=e.target,te=t.targetAnchor=e.targetAnchor,ue=un(e.props),ye=ue?n:D,we=ue?T:te;if(i==="svg"||pr(D)?i="svg":(i==="mathml"||vr(D))&&(i="mathml"),S?(f(e.dynamicChildren,S,ye,s,r,i,o),Ks(e,t,!0)):l||d(e,t,ye,we,s,r,i,o,!1),y)ue?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):ga(t,n,T,c,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const V=t.target=hs(t.props,g);V&&ga(t,V,null,c,0)}else ue&&ga(t,D,te,c,1);jn(t,y)}},remove(e,t,n,{um:a,o:{remove:s}},r){const{shapeFlag:i,children:o,anchor:l,targetStart:c,targetAnchor:u,target:d,props:f}=e;let h=r||!un(f);const g=Xt.get(e);if(g&&(g.flags|=8,Xt.delete(e),h=!1),d&&(s(c),s(u)),r&&s(l),i&16)for(let b=0;bJn(b,t&&(he(t)?t[m]:t),n,a,s));return}if(En(a)&&!s){a.shapeFlag&512&&a.type.__asyncResolved&&a.component.subTree.component&&Jn(e,t,n,a.component.subTree);return}const r=a.shapeFlag&4?Js(a.component):a.el,i=s?null:r,{i:o,r:l}=e,c=t&&t.r,u=o.refs===Ne?o.refs={}:o.refs,d=o.setupState,f=Ae(d),h=d===Ne?hi:b=>gr(u,b)?!1:Ce(f,b),g=(b,m)=>!(m&&gr(u,m));if(c!=null&&c!==l){if(hr(t),He(c))u[c]=null,h(c)&&(d[c]=null);else if(Ue(c)){const b=t;g(c,b.k)&&(c.value=null),b.k&&(u[b.k]=null)}}if(_e(l))la(l,o,12,[i,u]);else{const b=He(l),m=Ue(l);if(b||m){const $=()=>{if(e.f){const y=b?h(l)?d[l]:u[l]:g()||!e.k?l.value:u[e.k];if(s)he(y)&&Ps(y,r);else if(he(y))y.includes(r)||y.push(r);else if(b)u[l]=[r],h(l)&&(d[l]=u[l]);else{const S=[r];g(l,e.k)&&(l.value=S),e.k&&(u[e.k]=S)}}else b?(u[l]=i,h(l)&&(d[l]=i)):m&&(g(l,e.k)&&(l.value=i),e.k&&(u[e.k]=i))};if(i){const y=()=>{$(),Sa.delete(e)};y.id=-1,Sa.set(e,y),ot(y,n)}else hr(e),$()}}}function hr(e){const t=Sa.get(e);t&&(t.flags|=8,Sa.delete(e))}Pa().requestIdleCallback;Pa().cancelIdleCallback;const En=e=>!!e.type.__asyncLoader,eo=e=>e.type.__isKeepAlive;function iu(e,t){to(e,"a",t)}function ou(e,t){to(e,"da",t)}function to(e,t,n=st){const a=e.__wdc||(e.__wdc=()=>{let s=n;for(;s;){if(s.isDeactivated)return;s=s.parent}return e()});if(Na(t,a,n),n){let s=n.parent;for(;s&&s.parent;)eo(s.parent.vnode)&&lu(a,t,n,s),s=s.parent}}function lu(e,t,n,a){const s=Na(t,e,a,!0);ua(()=>{Ps(a[t],s)},n)}function Na(e,t,n=st,a=!1){if(n){const s=n[e]||(n[e]=[]),r=t.__weh||(t.__weh=(...i)=>{qt();const o=ca(n),l=Nt(t,n,e,i);return o(),zt(),l});return a?s.unshift(r):s.push(r),r}}const Zt=e=>(t,n=st)=>{(!ra||e==="sp")&&Na(e,(...a)=>t(...a),n)},uu=Zt("bm"),bt=Zt("m"),cu=Zt("bu"),du=Zt("u"),Ma=Zt("bum"),ua=Zt("um"),fu=Zt("sp"),pu=Zt("rtg"),vu=Zt("rtc");function no(e,t=st){Na("ec",e,t)}const gu="components";function sn(e,t){return mu(gu,e,!0,t)||e}const hu=Symbol.for("v-ndc");function mu(e,t,n=!0,a=!1){const s=dt||st;if(s){const r=s.type;{const o=tc(r,!1);if(o&&(o===t||o===ft(t)||o===Da(ft(t))))return r}const i=mr(s[e]||r[e],t)||mr(s.appContext[e],t);return!i&&a?r:i}}function mr(e,t){return e&&(e[t]||e[ft(t)]||e[Da(ft(t))])}function Wt(e,t,n,a){let s;const r=n,i=he(e);if(i||He(e)){const o=i&&Gt(e);let l=!1,c=!1;o&&(l=!ht(e),c=Kt(e),e=Oa(e)),s=new Array(e.length);for(let u=0,d=e.length;ut(o,l,void 0,r));else{const o=Object.keys(e);s=new Array(o.length);for(let l=0,c=o.length;l{const r=a.fn(...s);return r&&(r.key=a.key),r}:a.fn)}return e}function Ua(e,t,n={},a,s){if(dt.ce||dt.parent&&En(dt.parent)&&dt.parent.ce){const c=Object.keys(n).length>0;return t!=="default"&&(n.name=t),w(),z(Pe,null,[I("slot",n,a&&a())],c?-2:64)}let r=e[t];r&&r._c&&(r._d=!1),w();const i=r&&so(r(n)),o=n.key||i&&i.key,l=z(Pe,{key:(o&&!yt(o)?o:`_${t}`)+(!i&&a?"_fb":"")},i||(a?a():[]),i&&e._===1?64:-2);return!s&&l.scopeId&&(l.slotScopeIds=[l.scopeId+"-s"]),r&&r._c&&(r._d=!0),l}function so(e){return e.some(t=>sa(t)?!(t.type===Jt||t.type===Pe&&!so(t.children)):!0)?e:null}const ys=e=>e?xo(e)?Js(e):ys(e.parent):null,Yn=tt(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=>ys(e.parent),$root:e=>ys(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>io(e),$forceUpdate:e=>e.f||(e.f=()=>{Hs(e.update)}),$nextTick:e=>e.n||(e.n=pn.bind(e.proxy)),$watch:e=>Xl.bind(e)}),ts=(e,t)=>e!==Ne&&!e.__isScriptSetup&&Ce(e,t),yu={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:a,data:s,props:r,accessCache:i,type:o,appContext:l}=e;if(t[0]!=="$"){const f=i[t];if(f!==void 0)switch(f){case 1:return a[t];case 2:return s[t];case 4:return n[t];case 3:return r[t]}else{if(ts(a,t))return i[t]=1,a[t];if(s!==Ne&&Ce(s,t))return i[t]=2,s[t];if(Ce(r,t))return i[t]=3,r[t];if(n!==Ne&&Ce(n,t))return i[t]=4,n[t];_s&&(i[t]=0)}}const c=Yn[t];let u,d;if(c)return t==="$attrs"&&at(e.attrs,"get",""),c(e);if((u=o.__cssModules)&&(u=u[t]))return u;if(n!==Ne&&Ce(n,t))return i[t]=4,n[t];if(d=l.config.globalProperties,Ce(d,t))return d[t]},set({_:e},t,n){const{data:a,setupState:s,ctx:r}=e;return ts(s,t)?(s[t]=n,!0):a!==Ne&&Ce(a,t)?(a[t]=n,!0):Ce(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(r[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:a,appContext:s,props:r,type:i}},o){let l;return!!(n[o]||e!==Ne&&o[0]!=="$"&&Ce(e,o)||ts(t,o)||Ce(r,o)||Ce(a,o)||Ce(Yn,o)||Ce(s.config.globalProperties,o)||(l=i.__cssModules)&&l[o])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Ce(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function yr(e){return he(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let _s=!0;function _u(e){const t=io(e),n=e.proxy,a=e.ctx;_s=!1,t.beforeCreate&&_r(t.beforeCreate,e,"bc");const{data:s,computed:r,methods:i,watch:o,provide:l,inject:c,created:u,beforeMount:d,mounted:f,beforeUpdate:h,updated:g,activated:b,deactivated:m,beforeDestroy:$,beforeUnmount:y,destroyed:S,unmounted:C,render:L,renderTracked:P,renderTriggered:T,errorCaptured:E,serverPrefetch:D,expose:te,inheritAttrs:ue,components:ye,directives:we,filters:V}=t;if(c&&bu(c,a,null),i)for(const K in i){const ee=i[K];_e(ee)&&(a[K]=ee.bind(n))}if(s){const K=s.call(n,n);Te(K)&&(e.data=Yt(K))}if(_s=!0,r)for(const K in r){const ee=r[K],fe=_e(ee)?ee.bind(n,n):_e(ee.get)?ee.get.bind(n,n):Pt,Se=!_e(ee)&&_e(ee.set)?ee.set.bind(n):Pt,Ee=Q({get:fe,set:Se});Object.defineProperty(a,K,{enumerable:!0,configurable:!0,get:()=>Ee.value,set:be=>Ee.value=be})}if(o)for(const K in o)ro(o[K],a,n,K);if(l){const K=_e(l)?l.call(n):l;Reflect.ownKeys(K).forEach(ee=>{Wn(ee,K[ee])})}u&&_r(u,e,"c");function Z(K,ee){he(ee)?ee.forEach(fe=>K(fe.bind(n))):ee&&K(ee.bind(n))}if(Z(uu,d),Z(bt,f),Z(cu,h),Z(du,g),Z(iu,b),Z(ou,m),Z(no,E),Z(vu,P),Z(pu,T),Z(Ma,y),Z(ua,C),Z(fu,D),he(te))if(te.length){const K=e.exposed||(e.exposed={});te.forEach(ee=>{Object.defineProperty(K,ee,{get:()=>n[ee],set:fe=>n[ee]=fe,enumerable:!0})})}else e.exposed||(e.exposed={});L&&e.render===Pt&&(e.render=L),ue!=null&&(e.inheritAttrs=ue),ye&&(e.components=ye),we&&(e.directives=we),D&&Xi(e)}function bu(e,t,n=Pt){he(e)&&(e=bs(e));for(const a in e){const s=e[a];let r;Te(s)?"default"in s?r=mt(s.from||a,s.default,!0):r=mt(s.from||a):r=mt(s),Ue(r)?Object.defineProperty(t,a,{enumerable:!0,configurable:!0,get:()=>r.value,set:i=>r.value=i}):t[a]=r}}function _r(e,t,n){Nt(he(e)?e.map(a=>a.bind(t.proxy)):e.bind(t.proxy),t,n)}function ro(e,t,n,a){let s=a.includes(".")?Zi(n,a):()=>n[a];if(He(e)){const r=t[e];_e(r)&&Ot(s,r)}else if(_e(e))Ot(s,e.bind(n));else if(Te(e))if(he(e))e.forEach(r=>ro(r,t,n,a));else{const r=_e(e.handler)?e.handler.bind(n):t[e.handler];_e(r)&&Ot(s,r,e)}}function io(e){const t=e.type,{mixins:n,extends:a}=t,{mixins:s,optionsCache:r,config:{optionMergeStrategies:i}}=e.appContext,o=r.get(t);let l;return o?l=o:!s.length&&!n&&!a?l=t:(l={},s.length&&s.forEach(c=>ka(l,c,i,!0)),ka(l,t,i)),Te(t)&&r.set(t,l),l}function ka(e,t,n,a=!1){const{mixins:s,extends:r}=t;r&&ka(e,r,n,!0),s&&s.forEach(i=>ka(e,i,n,!0));for(const i in t)if(!(a&&i==="expose")){const o=wu[i]||n&&n[i];e[i]=o?o(e[i],t[i]):t[i]}return e}const wu={data:br,props:wr,emits:wr,methods:Hn,computed:Hn,beforeCreate:it,created:it,beforeMount:it,mounted:it,beforeUpdate:it,updated:it,beforeDestroy:it,beforeUnmount:it,destroyed:it,unmounted:it,activated:it,deactivated:it,errorCaptured:it,serverPrefetch:it,components:Hn,directives:Hn,watch:ku,provide:br,inject:Su};function br(e,t){return t?e?function(){return tt(_e(e)?e.call(this,this):e,_e(t)?t.call(this,this):t)}:t:e}function Su(e,t){return Hn(bs(e),bs(t))}function bs(e){if(he(e)){const t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${ft(t)}Modifiers`]||e[`${vn(t)}Modifiers`];function Eu(e,t,...n){if(e.isUnmounted)return;const a=e.vnode.props||Ne;let s=n;const r=t.startsWith("update:"),i=r&&Cu(a,t.slice(7));i&&(i.trim&&(s=n.map(u=>He(u)?u.trim():u)),i.number&&(s=n.map(ul)));let o,l=a[o=Ja(t)]||a[o=Ja(ft(t))];!l&&r&&(l=a[o=Ja(vn(t))]),l&&Nt(l,e,6,s);const c=a[o+"Once"];if(c){if(!e.emitted)e.emitted={};else if(e.emitted[o])return;e.emitted[o]=!0,Nt(c,e,6,s)}}const Ru=new WeakMap;function lo(e,t,n=!1){const a=n?Ru:t.emitsCache,s=a.get(e);if(s!==void 0)return s;const r=e.emits;let i={},o=!1;if(!_e(e)){const l=c=>{const u=lo(c,t,!0);u&&(o=!0,tt(i,u))};!n&&t.mixins.length&&t.mixins.forEach(l),e.extends&&l(e.extends),e.mixins&&e.mixins.forEach(l)}return!r&&!o?(Te(e)&&a.set(e,null),null):(he(r)?r.forEach(l=>i[l]=null):tt(i,r),Te(e)&&a.set(e,i),i)}function Ba(e,t){return!e||!Ra(t)?!1:(t=t.slice(2).replace(/Once$/,""),Ce(e,t[0].toLowerCase()+t.slice(1))||Ce(e,vn(t))||Ce(e,t))}function Sr(e){const{type:t,vnode:n,proxy:a,withProxy:s,propsOptions:[r],slots:i,attrs:o,emit:l,render:c,renderCache:u,props:d,data:f,setupState:h,ctx:g,inheritAttrs:b}=e,m=wa(e);let $,y;try{if(n.shapeFlag&4){const C=s||a,L=C;$=It(c.call(L,C,u,d,h,f,g)),y=o}else{const C=t;$=It(C.length>1?C(d,{attrs:o,slots:i,emit:l}):C(d,null)),y=t.props?o:Tu(o)}}catch(C){Zn.length=0,La(C,e,1),$=I(Jt)}let S=$;if(y&&b!==!1){const C=Object.keys(y),{shapeFlag:L}=S;C.length&&L&7&&(r&&C.some(Ta)&&(y=$u(y,r)),S=$n(S,y,!1,!0))}return n.dirs&&(S=$n(S,null,!1,!0),S.dirs=S.dirs?S.dirs.concat(n.dirs):n.dirs),n.transition&&Gs(S,n.transition),$=S,wa(m),$}const Tu=e=>{let t;for(const n in e)(n==="class"||n==="style"||Ra(n))&&((t||(t={}))[n]=e[n]);return t},$u=(e,t)=>{const n={};for(const a in e)(!Ta(a)||!(a.slice(9)in t))&&(n[a]=e[a]);return n};function Iu(e,t,n){const{props:a,children:s,component:r}=e,{props:i,children:o,patchFlag:l}=t,c=r.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&l>=0){if(l&1024)return!0;if(l&16)return a?kr(a,i,c):!!i;if(l&8){const u=t.dynamicProps;for(let d=0;dObject.create(co),po=e=>Object.getPrototypeOf(e)===co;function Pu(e,t,n,a=!1){const s={},r=fo();e.propsDefaults=Object.create(null),vo(e,t,s,r);for(const i in e.propsOptions[0])i in s||(s[i]=void 0);n?e.props=a?s:ji(s):e.type.props?e.props=s:e.props=r,e.attrs=r}function Ou(e,t,n,a){const{props:s,attrs:r,vnode:{patchFlag:i}}=e,o=Ae(s),[l]=e.propsOptions;let c=!1;if((a||i>0)&&!(i&16)){if(i&8){const u=e.vnode.dynamicProps;for(let d=0;d{l=!0;const[f,h]=go(d,t,!0);tt(i,f),h&&o.push(...h)};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}if(!r&&!l)return Te(e)&&a.set(e,An),An;if(he(r))for(let u=0;ue==="_"||e==="_ctx"||e==="$stable",zs=e=>he(e)?e.map(It):[It(e)],Lu=(e,t,n)=>{if(t._n)return t;const a=k((...s)=>zs(t(...s)),n);return a._c=!1,a},ho=(e,t,n)=>{const a=e._ctx;for(const s in e){if(qs(s))continue;const r=e[s];if(_e(r))t[s]=Lu(s,r,a);else if(r!=null){const i=zs(r);t[s]=()=>i}}},mo=(e,t)=>{const n=zs(t);e.slots.default=()=>n},yo=(e,t,n)=>{for(const a in t)(n||!qs(a))&&(e[a]=t[a])},Nu=(e,t,n)=>{const a=e.slots=fo();if(e.vnode.shapeFlag&32){const s=t._;s?(yo(a,t,n),n&&wi(a,"_",s,!0)):ho(t,a)}else t&&mo(e,t)},Mu=(e,t,n)=>{const{vnode:a,slots:s}=e;let r=!0,i=Ne;if(a.shapeFlag&32){const o=t._;o?n&&o===1?r=!1:yo(s,t,n):(r=!t.$stable,ho(t,s)),i=t}else t&&(mo(e,t),i={default:1});if(r)for(const o in s)!qs(o)&&i[o]==null&&delete s[o]},ot=Hu;function Uu(e){return Bu(e)}function Bu(e,t){const n=Pa();n.__VUE__=!0;const{insert:a,remove:s,patchProp:r,createElement:i,createText:o,createComment:l,setText:c,setElementText:u,parentNode:d,nextSibling:f,setScopeId:h=Pt,insertStaticContent:g}=e,b=(p,_,x,B=null,G=null,H=null,oe=void 0,re=null,ne=!!_.dynamicChildren)=>{if(p===_)return;p&&!Nn(p,_)&&(B=N(p),be(p,G,H,!0),p=null),_.patchFlag===-2&&(ne=!1,_.dynamicChildren=null);const{type:J,ref:de,shapeFlag:le}=_;switch(J){case Va:m(p,_,x,B);break;case Jt:$(p,_,x,B);break;case ha:p==null&&y(_,x,B,oe);break;case Pe:ye(p,_,x,B,G,H,oe,re,ne);break;default:le&1?L(p,_,x,B,G,H,oe,re,ne):le&6?we(p,_,x,B,G,H,oe,re,ne):(le&64||le&128)&&J.process(p,_,x,B,G,H,oe,re,ne,A)}de!=null&&G?Jn(de,p&&p.ref,H,_||p,!_):de==null&&p&&p.ref!=null&&Jn(p.ref,null,H,p,!0)},m=(p,_,x,B)=>{if(p==null)a(_.el=o(_.children),x,B);else{const G=_.el=p.el;_.children!==p.children&&c(G,_.children)}},$=(p,_,x,B)=>{p==null?a(_.el=l(_.children||""),x,B):_.el=p.el},y=(p,_,x,B)=>{[p.el,p.anchor]=g(p.children,_,x,B,p.el,p.anchor)},S=({el:p,anchor:_},x,B)=>{let G;for(;p&&p!==_;)G=f(p),a(p,x,B),p=G;a(_,x,B)},C=({el:p,anchor:_})=>{let x;for(;p&&p!==_;)x=f(p),s(p),p=x;s(_)},L=(p,_,x,B,G,H,oe,re,ne)=>{if(_.type==="svg"?oe="svg":_.type==="math"&&(oe="mathml"),p==null)P(_,x,B,G,H,oe,re,ne);else{const J=p.el&&p.el._isVueCE?p.el:null;try{J&&J._beginPatch(),D(p,_,G,H,oe,re,ne)}finally{J&&J._endPatch()}}},P=(p,_,x,B,G,H,oe,re)=>{let ne,J;const{props:de,shapeFlag:le,transition:ce,dirs:ge}=p;if(ne=p.el=i(p.type,H,de&&de.is,de),le&8?u(ne,p.children):le&16&&E(p.children,ne,null,B,G,ns(p,H),oe,re),ge&&rn(p,null,B,"created"),T(ne,p,p.scopeId,oe,B),de){for(const Re in de)Re!=="value"&&!qn(Re)&&r(ne,Re,null,de[Re],H,B);"value"in de&&r(ne,"value",null,de.value,H),(J=de.onVnodeBeforeMount)&&Ct(J,B,p)}ge&&rn(p,null,B,"beforeMount");const ke=Vu(G,ce);ke&&ce.beforeEnter(ne),a(ne,_,x),((J=de&&de.onVnodeMounted)||ke||ge)&&ot(()=>{try{J&&Ct(J,B,p),ke&&ce.enter(ne),ge&&rn(p,null,B,"mounted")}finally{}},G)},T=(p,_,x,B,G)=>{if(x&&h(p,x),B)for(let H=0;H{for(let J=ne;J{const re=_.el=p.el;let{patchFlag:ne,dynamicChildren:J,dirs:de}=_;ne|=p.patchFlag&16;const le=p.props||Ne,ce=_.props||Ne;let ge;if(x&&on(x,!1),(ge=ce.onVnodeBeforeUpdate)&&Ct(ge,x,_,p),de&&rn(_,p,x,"beforeUpdate"),x&&on(x,!0),(le.innerHTML&&ce.innerHTML==null||le.textContent&&ce.textContent==null)&&u(re,""),J?te(p.dynamicChildren,J,re,x,B,ns(_,G),H):oe||ee(p,_,re,null,x,B,ns(_,G),H,!1),ne>0){if(ne&16)ue(re,le,ce,x,G);else if(ne&2&&le.class!==ce.class&&r(re,"class",null,ce.class,G),ne&4&&r(re,"style",le.style,ce.style,G),ne&8){const ke=_.dynamicProps;for(let Re=0;Re{ge&&Ct(ge,x,_,p),de&&rn(_,p,x,"updated")},B)},te=(p,_,x,B,G,H,oe)=>{for(let re=0;re<_.length;re++){const ne=p[re],J=_[re],de=ne.el&&(ne.type===Pe||!Nn(ne,J)||ne.shapeFlag&198)?d(ne.el):x;b(ne,J,de,null,B,G,H,oe,!0)}},ue=(p,_,x,B,G)=>{if(_!==x){if(_!==Ne)for(const H in _)!qn(H)&&!(H in x)&&r(p,H,_[H],null,G,B);for(const H in x){if(qn(H))continue;const oe=x[H],re=_[H];oe!==re&&H!=="value"&&r(p,H,re,oe,G,B)}"value"in x&&r(p,"value",_.value,x.value,G)}},ye=(p,_,x,B,G,H,oe,re,ne)=>{const J=_.el=p?p.el:o(""),de=_.anchor=p?p.anchor:o("");let{patchFlag:le,dynamicChildren:ce,slotScopeIds:ge}=_;ge&&(re=re?re.concat(ge):ge),p==null?(a(J,x,B),a(de,x,B),E(_.children||[],x,de,G,H,oe,re,ne)):le>0&&le&64&&ce&&p.dynamicChildren&&p.dynamicChildren.length===ce.length?(te(p.dynamicChildren,ce,x,G,H,oe,re),(_.key!=null||G&&_===G.subTree)&&Ks(p,_,!0)):ee(p,_,x,de,G,H,oe,re,ne)},we=(p,_,x,B,G,H,oe,re,ne)=>{_.slotScopeIds=re,p==null?_.shapeFlag&512?G.ctx.activate(_,x,B,oe,ne):V(_,x,B,G,H,oe,ne):W(p,_,ne)},V=(p,_,x,B,G,H,oe)=>{const re=p.component=Yu(p,B,G);if(eo(p)&&(re.ctx.renderer=A),Zu(re,!1,oe),re.asyncDep){if(G&&G.registerDep(re,Z,oe),!p.el){const ne=re.subTree=I(Jt);$(null,ne,_,x),p.placeholder=ne.el}}else Z(re,p,_,x,G,H,oe)},W=(p,_,x)=>{const B=_.component=p.component;if(Iu(p,_,x))if(B.asyncDep&&!B.asyncResolved){K(B,_,x);return}else B.next=_,B.update();else _.el=p.el,B.vnode=_},Z=(p,_,x,B,G,H,oe)=>{const re=()=>{if(p.isMounted){let{next:le,bu:ce,u:ge,parent:ke,vnode:Re}=p;{const De=_o(p);if(De){le&&(le.el=Re.el,K(p,le,oe)),De.asyncDep.then(()=>{ot(()=>{p.isUnmounted||J()},G)});return}}let Ie=le,Be;on(p,!1),le?(le.el=Re.el,K(p,le,oe)):le=Re,ce&&Ya(ce),(Be=le.props&&le.props.onVnodeBeforeUpdate)&&Ct(Be,ke,le,Re),on(p,!0);const ie=Sr(p),F=p.subTree;p.subTree=ie,b(F,ie,d(F.el),N(F),p,G,H),le.el=ie.el,Ie===null&&Du(p,ie.el),ge&&ot(ge,G),(Be=le.props&&le.props.onVnodeUpdated)&&ot(()=>Ct(Be,ke,le,Re),G)}else{let le;const{el:ce,props:ge}=_,{bm:ke,m:Re,parent:Ie,root:Be,type:ie}=p,F=En(_);on(p,!1),ke&&Ya(ke),!F&&(le=ge&&ge.onVnodeBeforeMount)&&Ct(le,Ie,_),on(p,!0);{Be.ce&&Be.ce._hasShadowRoot()&&Be.ce._injectChildStyle(ie,p.parent?p.parent.type:void 0);const De=p.subTree=Sr(p);b(null,De,x,B,p,G,H),_.el=De.el}if(Re&&ot(Re,G),!F&&(le=ge&&ge.onVnodeMounted)){const De=_;ot(()=>Ct(le,Ie,De),G)}(_.shapeFlag&256||Ie&&En(Ie.vnode)&&Ie.vnode.shapeFlag&256)&&p.a&&ot(p.a,G),p.isMounted=!0,_=x=B=null}};p.scope.on();const ne=p.effect=new Ri(re);p.scope.off();const J=p.update=ne.run.bind(ne),de=p.job=ne.runIfDirty.bind(ne);de.i=p,de.id=p.uid,ne.scheduler=()=>Hs(de),on(p,!0),J()},K=(p,_,x)=>{_.component=p;const B=p.vnode.props;p.vnode=_,p.next=null,Ou(p,_.props,B,x),Mu(p,_.children,x),qt(),fr(p),zt()},ee=(p,_,x,B,G,H,oe,re,ne=!1)=>{const J=p&&p.children,de=p?p.shapeFlag:0,le=_.children,{patchFlag:ce,shapeFlag:ge}=_;if(ce>0){if(ce&128){Se(J,le,x,B,G,H,oe,re,ne);return}else if(ce&256){fe(J,le,x,B,G,H,oe,re,ne);return}}ge&8?(de&16&&$e(J,G,H),le!==J&&u(x,le)):de&16?ge&16?Se(J,le,x,B,G,H,oe,re,ne):$e(J,G,H,!0):(de&8&&u(x,""),ge&16&&E(le,x,B,G,H,oe,re,ne))},fe=(p,_,x,B,G,H,oe,re,ne)=>{p=p||An,_=_||An;const J=p.length,de=_.length,le=Math.min(J,de);let ce;for(ce=0;cede?$e(p,G,H,!0,!1,le):E(_,x,B,G,H,oe,re,ne,le)},Se=(p,_,x,B,G,H,oe,re,ne)=>{let J=0;const de=_.length;let le=p.length-1,ce=de-1;for(;J<=le&&J<=ce;){const ge=p[J],ke=_[J]=ne?jt(_[J]):It(_[J]);if(Nn(ge,ke))b(ge,ke,x,null,G,H,oe,re,ne);else break;J++}for(;J<=le&&J<=ce;){const ge=p[le],ke=_[ce]=ne?jt(_[ce]):It(_[ce]);if(Nn(ge,ke))b(ge,ke,x,null,G,H,oe,re,ne);else break;le--,ce--}if(J>le){if(J<=ce){const ge=ce+1,ke=gece)for(;J<=le;)be(p[J],G,H,!0),J++;else{const ge=J,ke=J,Re=new Map;for(J=ke;J<=ce;J++){const Ke=_[J]=ne?jt(_[J]):It(_[J]);Ke.key!=null&&Re.set(Ke.key,J)}let Ie,Be=0;const ie=ce-ke+1;let F=!1,De=0;const et=new Array(ie);for(J=0;J=ie){be(Ke,G,H,!0);continue}let ze;if(Ke.key!=null)ze=Re.get(Ke.key);else for(Ie=ke;Ie<=ce;Ie++)if(et[Ie-ke]===0&&Nn(Ke,_[Ie])){ze=Ie;break}ze===void 0?be(Ke,G,H,!0):(et[ze-ke]=J+1,ze>=De?De=ze:F=!0,b(Ke,_[ze],x,null,G,H,oe,re,ne),Be++)}const ve=F?ju(et):An;for(Ie=ve.length-1,J=ie-1;J>=0;J--){const Ke=ke+J,ze=_[Ke],Fn=_[Ke+1],or=Ke+1{const{el:H,type:oe,transition:re,children:ne,shapeFlag:J}=p;if(J&6){Ee(p.component.subTree,_,x,B);return}if(J&128){p.suspense.move(_,x,B);return}if(J&64){oe.move(p,_,x,A);return}if(oe===Pe){a(H,_,x);for(let le=0;lere.enter(H),G);else{const{leave:le,delayLeave:ce,afterLeave:ge}=re,ke=()=>{p.ctx.isUnmounted?s(H):a(H,_,x)},Re=()=>{H._isLeaving&&H[ru](!0),le(H,()=>{ke(),ge&&ge()})};ce?ce(H,ke,Re):Re()}else a(H,_,x)},be=(p,_,x,B=!1,G=!1)=>{const{type:H,props:oe,ref:re,children:ne,dynamicChildren:J,shapeFlag:de,patchFlag:le,dirs:ce,cacheIndex:ge,memo:ke}=p;if(le===-2&&(G=!1),re!=null&&(qt(),Jn(re,null,x,p,!0),zt()),ge!=null&&(_.renderCache[ge]=void 0),de&256){_.ctx.deactivate(p);return}const Re=de&1&&ce,Ie=!En(p);let Be;if(Ie&&(Be=oe&&oe.onVnodeBeforeUnmount)&&Ct(Be,_,p),de&6)je(p.component,x,B);else{if(de&128){p.suspense.unmount(x,B);return}Re&&rn(p,null,_,"beforeUnmount"),de&64?p.type.remove(p,_,x,A,B):J&&!J.hasOnce&&(H!==Pe||le>0&&le&64)?$e(J,_,x,!1,!0):(H===Pe&&le&384||!G&&de&16)&&$e(ne,_,x),B&&Me(p)}const ie=ke!=null&&ge==null;(Ie&&(Be=oe&&oe.onVnodeUnmounted)||Re||ie)&&ot(()=>{Be&&Ct(Be,_,p),Re&&rn(p,null,_,"unmounted"),ie&&(p.el=null)},x)},Me=p=>{const{type:_,el:x,anchor:B,transition:G}=p;if(_===Pe){Ve(x,B);return}if(_===ha){C(p);return}const H=()=>{s(x),G&&!G.persisted&&G.afterLeave&&G.afterLeave()};if(p.shapeFlag&1&&G&&!G.persisted){const{leave:oe,delayLeave:re}=G,ne=()=>oe(x,H);re?re(p.el,H,ne):ne()}else H()},Ve=(p,_)=>{let x;for(;p!==_;)x=f(p),s(p),p=x;s(_)},je=(p,_,x)=>{const{bum:B,scope:G,job:H,subTree:oe,um:re,m:ne,a:J}=p;xr(ne),xr(J),B&&Ya(B),G.stop(),H&&(H.flags|=8,be(oe,p,_,x)),re&&ot(re,_),ot(()=>{p.isUnmounted=!0},_)},$e=(p,_,x,B=!1,G=!1,H=0)=>{for(let oe=H;oe{if(p.shapeFlag&6)return N(p.component.subTree);if(p.shapeFlag&128)return p.suspense.next();const _=f(p.anchor||p.el),x=_&&_[Qi];return x?f(x):_};let ae=!1;const R=(p,_,x)=>{let B;p==null?_._vnode&&(be(_._vnode,null,null,!0),B=_._vnode.component):b(_._vnode||null,p,_,null,null,null,x),_._vnode=p,ae||(ae=!0,fr(B),Ki(),ae=!1)},A={p:b,um:be,m:Ee,r:Me,mt:V,mc:E,pc:ee,pbc:te,n:N,o:e};return{render:R,hydrate:void 0,createApp:xu(R)}}function ns({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function on({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Vu(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Ks(e,t,n=!1){const a=e.children,s=t.children;if(he(a)&&he(s))for(let r=0;r>1,e[n[o]]0&&(t[a]=n[r-1]),n[r]=a)}}for(r=n.length,i=n[r-1];r-- >0;)n[r]=i,i=t[i];return n}function _o(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:_o(t)}function xr(e){if(e)for(let t=0;te.__isSuspense;function Hu(e,t){t&&t.pendingBranch?he(e)?t.effects.push(...e):t.effects.push(e):Jl(e)}const Pe=Symbol.for("v-fgt"),Va=Symbol.for("v-txt"),Jt=Symbol.for("v-cmt"),ha=Symbol.for("v-stc"),Zn=[];let vt=null;function w(e=!1){Zn.push(vt=e?null:[])}function Gu(){Zn.pop(),vt=Zn[Zn.length-1]||null}let aa=1;function Aa(e,t=!1){aa+=e,e<0&&vt&&t&&(vt.hasOnce=!0)}function So(e){return e.dynamicChildren=aa>0?vt||An:null,Gu(),aa>0&&vt&&vt.push(e),e}function q(e,t,n,a,s,r){return So(O(e,t,n,a,s,r,!0))}function z(e,t,n,a,s){return So(I(e,t,n,a,s,!0))}function sa(e){return e?e.__v_isVNode===!0:!1}function Nn(e,t){return e.type===t.type&&e.key===t.key}const ko=({key:e})=>e??null,ma=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?He(e)||Ue(e)||_e(e)?{i:dt,r:e,k:t,f:!!n}:e:null);function O(e,t=null,n=null,a=0,s=null,r=e===Pe?0:1,i=!1,o=!1){const l={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ko(t),ref:t&&ma(t),scopeId:Ji,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:r,patchFlag:a,dynamicProps:s,dynamicChildren:null,appContext:null,ctx:dt};return o?(Ws(l,n),r&128&&e.normalize(l)):n&&(l.shapeFlag|=He(n)?8:16),aa>0&&!i&&vt&&(l.patchFlag>0||r&6)&&l.patchFlag!==32&&vt.push(l),l}const I=qu;function qu(e,t=null,n=null,a=0,s=null,r=!1){if((!e||e===hu)&&(e=Jt),sa(e)){const o=$n(e,t,!0);return n&&Ws(o,n),aa>0&&!r&&vt&&(o.shapeFlag&6?vt[vt.indexOf(e)]=o:vt.push(o)),o.patchFlag=-2,o}if(nc(e)&&(e=e.__vccOpts),t){t=zu(t);let{class:o,style:l}=t;o&&!He(o)&&(t.class=Lt(o)),Te(l)&&(Fa(l)&&!he(l)&&(l=tt({},l)),t.style=Os(l))}const i=He(e)?1:wo(e)?128:eu(e)?64:Te(e)?4:_e(e)?2:0;return O(e,t,n,a,s,i,r,!0)}function zu(e){return e?Fa(e)||po(e)?tt({},e):e:null}function $n(e,t,n=!1,a=!1){const{props:s,ref:r,patchFlag:i,children:o,transition:l}=e,c=t?Ao(s||{},t):s,u={__v_isVNode:!0,__v_skip:!0,type:e.type,props:c,key:c&&ko(c),ref:t&&t.ref?n&&r?he(r)?r.concat(ma(t)):[r,ma(t)]:ma(t):r,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:o,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Pe?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:l,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&$n(e.ssContent),ssFallback:e.ssFallback&&$n(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return l&&a&&Gs(u,l.clone(u)),u}function U(e=" ",t=0){return I(Va,null,e,t)}function Ku(e,t){const n=I(ha,null,e);return n.staticCount=t,n}function se(e="",t=!1){return t?(w(),z(Jt,null,e)):I(Jt,null,e)}function It(e){return e==null||typeof e=="boolean"?I(Jt):he(e)?I(Pe,null,e.slice()):sa(e)?jt(e):I(Va,null,String(e))}function jt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:$n(e)}function Ws(e,t){let n=0;const{shapeFlag:a}=e;if(t==null)t=null;else if(he(t))n=16;else if(typeof t=="object")if(a&65){const s=t.default;s&&(s._c&&(s._d=!1),Ws(e,s()),s._c&&(s._d=!0));return}else{n=32;const s=t._;!s&&!po(t)?t._ctx=dt:s===3&&dt&&(dt.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else _e(t)?(t={default:t,_ctx:dt},n=32):(t=String(t),a&64?(n=16,t=[U(t)]):n=8);e.children=t,e.shapeFlag|=n}function Ao(...e){const t={};for(let n=0;nst||dt;let xa,Ss;{const e=Pa(),t=(n,a)=>{let s;return(s=e[n])||(s=e[n]=[]),s.push(a),r=>{s.length>1?s.forEach(i=>i(r)):s[0](r)}};xa=t("__VUE_INSTANCE_SETTERS__",n=>st=n),Ss=t("__VUE_SSR_SETTERS__",n=>ra=n)}const ca=e=>{const t=st;return xa(e),e.scope.on(),()=>{e.scope.off(),xa(t)}},Cr=()=>{st&&st.scope.off(),xa(null)};function xo(e){return e.vnode.shapeFlag&4}let ra=!1;function Zu(e,t=!1,n=!1){t&&Ss(t);const{props:a,children:s}=e.vnode,r=xo(e);Pu(e,a,r,t),Nu(e,s,n||t);const i=r?Qu(e,t):void 0;return t&&Ss(!1),i}function Qu(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,yu);const{setup:a}=n;if(a){qt();const s=e.setupContext=a.length>1?ec(e):null,r=ca(e),i=la(a,e,0,[e.props,s]),o=yi(i);if(zt(),r(),(o||e.sp)&&!En(e)&&Xi(e),o){if(i.then(Cr,Cr),t)return i.then(l=>{Er(e,l)}).catch(l=>{La(l,e,0)});e.asyncDep=i}else Er(e,i)}else Co(e)}function Er(e,t,n){_e(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Te(t)&&(e.setupState=Gi(t)),Co(e)}function Co(e,t,n){const a=e.type;e.render||(e.render=a.render||Pt);{const s=ca(e);qt();try{_u(e)}finally{zt(),s()}}}const Xu={get(e,t){return at(e,"get",""),e[t]}};function ec(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Xu),slots:e.slots,emit:e.emit,expose:t}}function Js(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Gi(js(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Yn)return Yn[n](e)},has(t,n){return n in t||n in Yn}})):e.proxy}function tc(e,t=!0){return _e(e)?e.displayName||e.name:e.name||t&&e.__name}function nc(e){return _e(e)&&"__vccOpts"in e}const Q=(e,t)=>Gl(e,t,ra);function j(e,t,n){try{Aa(-1);const a=arguments.length;return a===2?Te(t)&&!he(t)?sa(t)?I(e,null,[t]):I(e,t):I(e,null,t):(a>3?n=Array.prototype.slice.call(arguments,2):a===3&&sa(n)&&(n=[n]),I(e,t,n))}finally{Aa(1)}}const ac="3.5.33";/** +* @vue/runtime-dom v3.5.33 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let ks;const Rr=typeof window<"u"&&window.trustedTypes;if(Rr)try{ks=Rr.createPolicy("vue",{createHTML:e=>e})}catch{}const Eo=ks?e=>ks.createHTML(e):e=>e,sc="http://www.w3.org/2000/svg",rc="http://www.w3.org/1998/Math/MathML",Vt=typeof document<"u"?document:null,Tr=Vt&&Vt.createElement("template"),ic={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,a)=>{const s=t==="svg"?Vt.createElementNS(sc,e):t==="mathml"?Vt.createElementNS(rc,e):n?Vt.createElement(e,{is:n}):Vt.createElement(e);return e==="select"&&a&&a.multiple!=null&&s.setAttribute("multiple",a.multiple),s},createText:e=>Vt.createTextNode(e),createComment:e=>Vt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Vt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,a,s,r){const i=n?n.previousSibling:t.lastChild;if(s&&(s===r||s.nextSibling))for(;t.insertBefore(s.cloneNode(!0),n),!(s===r||!(s=s.nextSibling)););else{Tr.innerHTML=Eo(a==="svg"?`${e}`:a==="mathml"?`${e}`:e);const o=Tr.content;if(a==="svg"||a==="mathml"){const l=o.firstChild;for(;l.firstChild;)o.appendChild(l.firstChild);o.removeChild(l)}t.insertBefore(o,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},oc=Symbol("_vtc");function lc(e,t,n){const a=e[oc];a&&(t=(t?[t,...a]:[...a]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const $r=Symbol("_vod"),uc=Symbol("_vsh"),cc=Symbol(""),dc=/(?:^|;)\s*display\s*:/;function fc(e,t,n){const a=e.style,s=He(n);let r=!1;if(n&&!s){if(t)if(He(t))for(const i of t.split(";")){const o=i.slice(0,i.indexOf(":")).trim();n[o]==null&&Gn(a,o,"")}else for(const i in t)n[i]==null&&Gn(a,i,"");for(const i in n){i==="display"&&(r=!0);const o=n[i];o!=null?vc(e,i,!He(t)&&t?t[i]:void 0,o)||Gn(a,i,o):Gn(a,i,"")}}else if(s){if(t!==n){const i=a[cc];i&&(n+=";"+i),a.cssText=n,r=dc.test(n)}}else t&&e.removeAttribute("style");$r in e&&(e[$r]=r?a.display:"",e[uc]&&(a.display="none"))}const Ir=/\s*!important$/;function Gn(e,t,n){if(he(n))n.forEach(a=>Gn(e,t,a));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const a=pc(e,t);Ir.test(n)?e.setProperty(vn(a),n.replace(Ir,""),"important"):e[a]=n}}const Dr=["Webkit","Moz","ms"],as={};function pc(e,t){const n=as[t];if(n)return n;let a=ft(t);if(a!=="filter"&&a in e)return as[t]=a;a=Da(a);for(let s=0;sss||(_c.then(()=>ss=0),ss=Date.now());function wc(e,t){const n=a=>{if(!a._vts)a._vts=Date.now();else if(a._vts<=n.attached)return;Nt(Sc(a,n.value),t,5,[a])};return n.value=e,n.attached=bc(),n}function Sc(e,t){if(he(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(a=>s=>!s._stopped&&a&&a(s))}else return t}const Mr=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,kc=(e,t,n,a,s,r)=>{const i=s==="svg";t==="class"?lc(e,a,i):t==="style"?fc(e,n,a):Ra(t)?Ta(t)||mc(e,t,n,a,r):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Ac(e,t,a,i))?(Fr(e,t,a),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Or(e,t,a,i,r,t!=="value")):e._isVueCE&&(xc(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!He(a)))?Fr(e,ft(t),a,r,t):(t==="true-value"?e._trueValue=a:t==="false-value"&&(e._falseValue=a),Or(e,t,a,i))};function Ac(e,t,n,a){if(a)return!!(t==="innerHTML"||t==="textContent"||t in e&&Mr(t)&&_e(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const s=e.tagName;if(s==="IMG"||s==="VIDEO"||s==="CANVAS"||s==="SOURCE")return!1}return Mr(t)&&He(n)?!1:t in e}function xc(e,t){const n=e._def.props;if(!n)return!1;const a=ft(t);return Array.isArray(n)?n.some(s=>ft(s)===a):Object.keys(n).some(s=>ft(s)===a)}const Cc=["ctrl","shift","alt","meta"],Ec={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)=>Cc.some(n=>e[`${n}Key`]&&!t.includes(n))},Ha=(e,t)=>{if(!e)return e;const n=e._withMods||(e._withMods={}),a=t.join(".");return n[a]||(n[a]=((s,...r)=>{for(let i=0;i{const t=Tc().createApp(...e),{mount:n}=t;return t.mount=a=>{const s=Dc(a);if(!s)return;const r=t._component;!_e(r)&&!r.render&&!r.template&&(r.template=s.innerHTML),s.nodeType===1&&(s.textContent="");const i=n(s,!1,Ic(s));return s instanceof Element&&(s.removeAttribute("v-cloak"),s.setAttribute("data-v-app","")),i},t});function Ic(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Dc(e){return He(e)?document.querySelector(e):e}/*! + * pinia v2.3.1 + * (c) 2025 Eduardo San Martin Morote + * @license MIT + */let Ro;const Ga=e=>Ro=e,To=Symbol();function As(e){return e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"&&typeof e.toJSON!="function"}var Qn;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(Qn||(Qn={}));function Pc(){const e=Ci(!0),t=e.run(()=>Y({}));let n=[],a=[];const s=js({install(r){Ga(s),s._a=r,r.provide(To,s),r.config.globalProperties.$pinia=s,a.forEach(i=>n.push(i)),a=[]},use(r){return this._a?n.push(r):a.push(r),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return s}const $o=()=>{};function Br(e,t,n,a=$o){e.push(t);const s=()=>{const r=e.indexOf(t);r>-1&&(e.splice(r,1),a())};return!n&&Ei()&&ml(s),s}function bn(e,...t){e.slice().forEach(n=>{n(...t)})}const Oc=e=>e(),Vr=Symbol(),rs=Symbol();function xs(e,t){e instanceof Map&&t instanceof Map?t.forEach((n,a)=>e.set(a,n)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const n in t){if(!t.hasOwnProperty(n))continue;const a=t[n],s=e[n];As(s)&&As(a)&&e.hasOwnProperty(n)&&!Ue(a)&&!Gt(a)?e[n]=xs(s,a):e[n]=a}return e}const Fc=Symbol();function Lc(e){return!As(e)||!e.hasOwnProperty(Fc)}const{assign:en}=Object;function Nc(e){return!!(Ue(e)&&e.effect)}function Mc(e,t,n,a){const{state:s,actions:r,getters:i}=t,o=n.state.value[e];let l;function c(){o||(n.state.value[e]=s?s():{});const u=Bl(n.state.value[e]);return en(u,r,Object.keys(i||{}).reduce((d,f)=>(d[f]=js(Q(()=>{Ga(n);const h=n._s.get(e);return i[f].call(h,h)})),d),{}))}return l=Io(e,c,t,n,a,!0),l}function Io(e,t,n={},a,s,r){let i;const o=en({actions:{}},n),l={deep:!0};let c,u,d=[],f=[],h;const g=a.state.value[e];!r&&!g&&(a.state.value[e]={});let b;function m(E){let D;c=u=!1,typeof E=="function"?(E(a.state.value[e]),D={type:Qn.patchFunction,storeId:e,events:h}):(xs(a.state.value[e],E),D={type:Qn.patchObject,payload:E,storeId:e,events:h});const te=b=Symbol();pn().then(()=>{b===te&&(c=!0)}),u=!0,bn(d,D,a.state.value[e])}const $=r?function(){const{state:D}=n,te=D?D():{};this.$patch(ue=>{en(ue,te)})}:$o;function y(){i.stop(),d=[],f=[],a._s.delete(e)}const S=(E,D="")=>{if(Vr in E)return E[rs]=D,E;const te=function(){Ga(a);const ue=Array.from(arguments),ye=[],we=[];function V(K){ye.push(K)}function W(K){we.push(K)}bn(f,{args:ue,name:te[rs],store:L,after:V,onError:W});let Z;try{Z=E.apply(this&&this.$id===e?this:L,ue)}catch(K){throw bn(we,K),K}return Z instanceof Promise?Z.then(K=>(bn(ye,K),K)).catch(K=>(bn(we,K),Promise.reject(K))):(bn(ye,Z),Z)};return te[Vr]=!0,te[rs]=D,te},C={_p:a,$id:e,$onAction:Br.bind(null,f),$patch:m,$reset:$,$subscribe(E,D={}){const te=Br(d,E,D.detached,()=>ue()),ue=i.run(()=>Ot(()=>a.state.value[e],ye=>{(D.flush==="sync"?u:c)&&E({storeId:e,type:Qn.direct,events:h},ye)},en({},l,D)));return te},$dispose:y},L=Yt(C);a._s.set(e,L);const T=(a._a&&a._a.runWithContext||Oc)(()=>a._e.run(()=>(i=Ci()).run(()=>t({action:S}))));for(const E in T){const D=T[E];if(Ue(D)&&!Nc(D)||Gt(D))r||(g&&Lc(D)&&(Ue(D)?D.value=g[E]:xs(D,g[E])),a.state.value[e][E]=D);else if(typeof D=="function"){const te=S(D,E);T[E]=te,o.actions[E]=D}}return en(L,T),en(Ae(L),T),Object.defineProperty(L,"$state",{get:()=>a.state.value[e],set:E=>{m(D=>{en(D,E)})}}),a._p.forEach(E=>{en(L,i.run(()=>E({store:L,app:a._a,pinia:a,options:o})))}),g&&r&&n.hydrate&&n.hydrate(L.$state,g),c=!0,u=!0,L}/*! #__NO_SIDE_EFFECTS__ */function gn(e,t,n){let a,s;const r=typeof t=="function";typeof e=="string"?(a=e,s=r?n:t):(s=e,a=e.id);function i(o,l){const c=Yl();return o=o||(c?mt(To,null):null),o&&Ga(o),o=Ro,o._s.has(a)||(r?Io(a,t,s,o):Mc(a,s,o)),o._s.get(a)}return i.$id=a,i}/*! + * vue-router v4.6.4 + * (c) 2025 Eduardo San Martin Morote + * @license MIT + */const Sn=typeof document<"u";function Do(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function Uc(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&Do(e.default)}const xe=Object.assign;function is(e,t){const n={};for(const a in t){const s=t[a];n[a]=At(s)?s.map(e):e(s)}return n}const Xn=()=>{},At=Array.isArray;function jr(e,t){const n={};for(const a in e)n[a]=a in t?t[a]:e[a];return n}const Po=/#/g,Bc=/&/g,Vc=/\//g,jc=/=/g,Hc=/\?/g,Oo=/\+/g,Gc=/%5B/g,qc=/%5D/g,Fo=/%5E/g,zc=/%60/g,Lo=/%7B/g,Kc=/%7C/g,No=/%7D/g,Wc=/%20/g;function Ys(e){return e==null?"":encodeURI(""+e).replace(Kc,"|").replace(Gc,"[").replace(qc,"]")}function Jc(e){return Ys(e).replace(Lo,"{").replace(No,"}").replace(Fo,"^")}function Cs(e){return Ys(e).replace(Oo,"%2B").replace(Wc,"+").replace(Po,"%23").replace(Bc,"%26").replace(zc,"`").replace(Lo,"{").replace(No,"}").replace(Fo,"^")}function Yc(e){return Cs(e).replace(jc,"%3D")}function Zc(e){return Ys(e).replace(Po,"%23").replace(Hc,"%3F")}function Qc(e){return Zc(e).replace(Vc,"%2F")}function ia(e){if(e==null)return null;try{return decodeURIComponent(""+e)}catch{}return""+e}const Xc=/\/$/,ed=e=>e.replace(Xc,"");function os(e,t,n="/"){let a,s={},r="",i="";const o=t.indexOf("#");let l=t.indexOf("?");return l=o>=0&&l>o?-1:l,l>=0&&(a=t.slice(0,l),r=t.slice(l,o>0?o:t.length),s=e(r.slice(1))),o>=0&&(a=a||t.slice(0,o),i=t.slice(o,t.length)),a=sd(a??t,n),{fullPath:a+r+i,path:a,query:s,hash:ia(i)}}function td(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function Hr(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function nd(e,t,n){const a=t.matched.length-1,s=n.matched.length-1;return a>-1&&a===s&&In(t.matched[a],n.matched[s])&&Mo(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function In(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Mo(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!ad(e[n],t[n]))return!1;return!0}function ad(e,t){return At(e)?Gr(e,t):At(t)?Gr(t,e):(e==null?void 0:e.valueOf())===(t==null?void 0:t.valueOf())}function Gr(e,t){return At(t)?e.length===t.length&&e.every((n,a)=>n===t[a]):e.length===1&&e[0]===t}function sd(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),a=e.split("/"),s=a[a.length-1];(s===".."||s===".")&&a.push("");let r=n.length-1,i,o;for(i=0;i1&&r--;else break;return n.slice(0,r).join("/")+"/"+a.slice(i).join("/")}const Qt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};let Es=(function(e){return e.pop="pop",e.push="push",e})({}),ls=(function(e){return e.back="back",e.forward="forward",e.unknown="",e})({});function rd(e){if(!e)if(Sn){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),ed(e)}const id=/^[^#]+#/;function od(e,t){return e.replace(id,"#")+t}function ld(e,t){const n=document.documentElement.getBoundingClientRect(),a=e.getBoundingClientRect();return{behavior:t.behavior,left:a.left-n.left-(t.left||0),top:a.top-n.top-(t.top||0)}}const qa=()=>({left:window.scrollX,top:window.scrollY});function ud(e){let t;if("el"in e){const n=e.el,a=typeof n=="string"&&n.startsWith("#"),s=typeof n=="string"?a?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!s)return;t=ld(s,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function qr(e,t){return(history.state?history.state.position-t:-1)+e}const Rs=new Map;function cd(e,t){Rs.set(e,t)}function dd(e){const t=Rs.get(e);return Rs.delete(e),t}function fd(e){return typeof e=="string"||e&&typeof e=="object"}function Uo(e){return typeof e=="string"||typeof e=="symbol"}let Ge=(function(e){return e[e.MATCHER_NOT_FOUND=1]="MATCHER_NOT_FOUND",e[e.NAVIGATION_GUARD_REDIRECT=2]="NAVIGATION_GUARD_REDIRECT",e[e.NAVIGATION_ABORTED=4]="NAVIGATION_ABORTED",e[e.NAVIGATION_CANCELLED=8]="NAVIGATION_CANCELLED",e[e.NAVIGATION_DUPLICATED=16]="NAVIGATION_DUPLICATED",e})({});const Bo=Symbol("");Ge.MATCHER_NOT_FOUND+"",Ge.NAVIGATION_GUARD_REDIRECT+"",Ge.NAVIGATION_ABORTED+"",Ge.NAVIGATION_CANCELLED+"",Ge.NAVIGATION_DUPLICATED+"";function Dn(e,t){return xe(new Error,{type:e,[Bo]:!0},t)}function Bt(e,t){return e instanceof Error&&Bo in e&&(t==null||!!(e.type&t))}const pd=["params","query","hash"];function vd(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;const t={};for(const n of pd)n in e&&(t[n]=e[n]);return JSON.stringify(t,null,2)}function gd(e){const t={};if(e===""||e==="?")return t;const n=(e[0]==="?"?e.slice(1):e).split("&");for(let a=0;as&&Cs(s)):[a&&Cs(a)]).forEach(s=>{s!==void 0&&(t+=(t.length?"&":"")+n,s!=null&&(t+="="+s))})}return t}function hd(e){const t={};for(const n in e){const a=e[n];a!==void 0&&(t[n]=At(a)?a.map(s=>s==null?null:""+s):a==null?a:""+a)}return t}const md=Symbol(""),Kr=Symbol(""),za=Symbol(""),Zs=Symbol(""),Ts=Symbol("");function Mn(){let e=[];function t(a){return e.push(a),()=>{const s=e.indexOf(a);s>-1&&e.splice(s,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function nn(e,t,n,a,s,r=i=>i()){const i=a&&(a.enterCallbacks[s]=a.enterCallbacks[s]||[]);return()=>new Promise((o,l)=>{const c=f=>{f===!1?l(Dn(Ge.NAVIGATION_ABORTED,{from:n,to:t})):f instanceof Error?l(f):fd(f)?l(Dn(Ge.NAVIGATION_GUARD_REDIRECT,{from:t,to:f})):(i&&a.enterCallbacks[s]===i&&typeof f=="function"&&i.push(f),o())},u=r(()=>e.call(a&&a.instances[s],t,n,c));let d=Promise.resolve(u);e.length<3&&(d=d.then(c)),d.catch(f=>l(f))})}function us(e,t,n,a,s=r=>r()){const r=[];for(const i of e)for(const o in i.components){let l=i.components[o];if(!(t!=="beforeRouteEnter"&&!i.instances[o]))if(Do(l)){const c=(l.__vccOpts||l)[t];c&&r.push(nn(c,n,a,i,o,s))}else{let c=l();r.push(()=>c.then(u=>{if(!u)throw new Error(`Couldn't resolve component "${o}" at "${i.path}"`);const d=Uc(u)?u.default:u;i.mods[o]=u,i.components[o]=d;const f=(d.__vccOpts||d)[t];return f&&nn(f,n,a,i,o,s)()}))}}return r}function yd(e,t){const n=[],a=[],s=[],r=Math.max(t.matched.length,e.matched.length);for(let i=0;iIn(c,o))?a.push(o):n.push(o));const l=e.matched[i];l&&(t.matched.find(c=>In(c,l))||s.push(l))}return[n,a,s]}/*! + * vue-router v4.6.4 + * (c) 2025 Eduardo San Martin Morote + * @license MIT + */let _d=()=>location.protocol+"//"+location.host;function Vo(e,t){const{pathname:n,search:a,hash:s}=t,r=e.indexOf("#");if(r>-1){let i=s.includes(e.slice(r))?e.slice(r).length:1,o=s.slice(i);return o[0]!=="/"&&(o="/"+o),Hr(o,"")}return Hr(n,e)+a+s}function bd(e,t,n,a){let s=[],r=[],i=null;const o=({state:f})=>{const h=Vo(e,location),g=n.value,b=t.value;let m=0;if(f){if(n.value=h,t.value=f,i&&i===g){i=null;return}m=b?f.position-b.position:0}else a(h);s.forEach($=>{$(n.value,g,{delta:m,type:Es.pop,direction:m?m>0?ls.forward:ls.back:ls.unknown})})};function l(){i=n.value}function c(f){s.push(f);const h=()=>{const g=s.indexOf(f);g>-1&&s.splice(g,1)};return r.push(h),h}function u(){if(document.visibilityState==="hidden"){const{history:f}=window;if(!f.state)return;f.replaceState(xe({},f.state,{scroll:qa()}),"")}}function d(){for(const f of r)f();r=[],window.removeEventListener("popstate",o),window.removeEventListener("pagehide",u),document.removeEventListener("visibilitychange",u)}return window.addEventListener("popstate",o),window.addEventListener("pagehide",u),document.addEventListener("visibilitychange",u),{pauseListeners:l,listen:c,destroy:d}}function Wr(e,t,n,a=!1,s=!1){return{back:e,current:t,forward:n,replaced:a,position:window.history.length,scroll:s?qa():null}}function wd(e){const{history:t,location:n}=window,a={value:Vo(e,n)},s={value:t.state};s.value||r(a.value,{back:null,current:a.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function r(l,c,u){const d=e.indexOf("#"),f=d>-1?(n.host&&document.querySelector("base")?e:e.slice(d))+l:_d()+e+l;try{t[u?"replaceState":"pushState"](c,"",f),s.value=c}catch(h){console.error(h),n[u?"replace":"assign"](f)}}function i(l,c){r(l,xe({},t.state,Wr(s.value.back,l,s.value.forward,!0),c,{position:s.value.position}),!0),a.value=l}function o(l,c){const u=xe({},s.value,t.state,{forward:l,scroll:qa()});r(u.current,u,!0),r(l,xe({},Wr(a.value,l,null),{position:u.position+1},c),!1),a.value=l}return{location:a,state:s,push:o,replace:i}}function Sd(e){e=rd(e);const t=wd(e),n=bd(e,t.state,t.location,t.replace);function a(r,i=!0){i||n.pauseListeners(),history.go(r)}const s=xe({location:"",base:e,go:a,createHref:od.bind(null,e)},t,n);return Object.defineProperty(s,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(s,"state",{enumerable:!0,get:()=>t.state.value}),s}function kd(e){return e=location.host?e||location.pathname+location.search:"",e.includes("#")||(e+="#"),Sd(e)}let cn=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e})({});var We=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e})(We||{});const Ad={type:cn.Static,value:""},xd=/[a-zA-Z0-9_]/;function Cd(e){if(!e)return[[]];if(e==="/")return[[Ad]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(h){throw new Error(`ERR (${n})/"${c}": ${h}`)}let n=We.Static,a=n;const s=[];let r;function i(){r&&s.push(r),r=[]}let o=0,l,c="",u="";function d(){c&&(n===We.Static?r.push({type:cn.Static,value:c}):n===We.Param||n===We.ParamRegExp||n===We.ParamRegExpEnd?(r.length>1&&(l==="*"||l==="+")&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),r.push({type:cn.Param,value:c,regexp:u,repeatable:l==="*"||l==="+",optional:l==="*"||l==="?"})):t("Invalid state to consume buffer"),c="")}function f(){c+=l}for(;ot.length?t.length===1&&t[0]===lt.Static+lt.Segment?1:-1:0}function jo(e,t){let n=0;const a=e.score,s=t.score;for(;n0&&t[t.length-1]<0}const Id={strict:!1,end:!0,sensitive:!1};function Dd(e,t,n){const a=Td(Cd(e.path),n),s=xe(a,{record:e,parent:t,children:[],alias:[]});return t&&!s.record.aliasOf==!t.record.aliasOf&&t.children.push(s),s}function Pd(e,t){const n=[],a=new Map;t=jr(Id,t);function s(d){return a.get(d)}function r(d,f,h){const g=!h,b=Qr(d);b.aliasOf=h&&h.record;const m=jr(t,d),$=[b];if("alias"in d){const C=typeof d.alias=="string"?[d.alias]:d.alias;for(const L of C)$.push(Qr(xe({},b,{components:h?h.record.components:b.components,path:L,aliasOf:h?h.record:b})))}let y,S;for(const C of $){const{path:L}=C;if(f&&L[0]!=="/"){const P=f.record.path,T=P[P.length-1]==="/"?"":"/";C.path=f.record.path+(L&&T+L)}if(y=Dd(C,f,m),h?h.alias.push(y):(S=S||y,S!==y&&S.alias.push(y),g&&d.name&&!Xr(y)&&i(d.name)),Ho(y)&&l(y),b.children){const P=b.children;for(let T=0;T{i(S)}:Xn}function i(d){if(Uo(d)){const f=a.get(d);f&&(a.delete(d),n.splice(n.indexOf(f),1),f.children.forEach(i),f.alias.forEach(i))}else{const f=n.indexOf(d);f>-1&&(n.splice(f,1),d.record.name&&a.delete(d.record.name),d.children.forEach(i),d.alias.forEach(i))}}function o(){return n}function l(d){const f=Ld(d,n);n.splice(f,0,d),d.record.name&&!Xr(d)&&a.set(d.record.name,d)}function c(d,f){let h,g={},b,m;if("name"in d&&d.name){if(h=a.get(d.name),!h)throw Dn(Ge.MATCHER_NOT_FOUND,{location:d});m=h.record.name,g=xe(Zr(f.params,h.keys.filter(S=>!S.optional).concat(h.parent?h.parent.keys.filter(S=>S.optional):[]).map(S=>S.name)),d.params&&Zr(d.params,h.keys.map(S=>S.name))),b=h.stringify(g)}else if(d.path!=null)b=d.path,h=n.find(S=>S.re.test(b)),h&&(g=h.parse(b),m=h.record.name);else{if(h=f.name?a.get(f.name):n.find(S=>S.re.test(f.path)),!h)throw Dn(Ge.MATCHER_NOT_FOUND,{location:d,currentLocation:f});m=h.record.name,g=xe({},f.params,d.params),b=h.stringify(g)}const $=[];let y=h;for(;y;)$.unshift(y.record),y=y.parent;return{name:m,path:b,params:g,matched:$,meta:Fd($)}}e.forEach(d=>r(d));function u(){n.length=0,a.clear()}return{addRoute:r,resolve:c,removeRoute:i,clearRoutes:u,getRoutes:o,getRecordMatcher:s}}function Zr(e,t){const n={};for(const a of t)a in e&&(n[a]=e[a]);return n}function Qr(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:Od(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function Od(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const a in e.components)t[a]=typeof n=="object"?n[a]:n;return t}function Xr(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Fd(e){return e.reduce((t,n)=>xe(t,n.meta),{})}function Ld(e,t){let n=0,a=t.length;for(;n!==a;){const r=n+a>>1;jo(e,t[r])<0?a=r:n=r+1}const s=Nd(e);return s&&(a=t.lastIndexOf(s,a-1)),a}function Nd(e){let t=e;for(;t=t.parent;)if(Ho(t)&&jo(e,t)===0)return t}function Ho({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function ei(e){const t=mt(za),n=mt(Zs),a=Q(()=>{const l=v(e.to);return t.resolve(l)}),s=Q(()=>{const{matched:l}=a.value,{length:c}=l,u=l[c-1],d=n.matched;if(!u||!d.length)return-1;const f=d.findIndex(In.bind(null,u));if(f>-1)return f;const h=ti(l[c-2]);return c>1&&ti(u)===h&&d[d.length-1].path!==h?d.findIndex(In.bind(null,l[c-2])):f}),r=Q(()=>s.value>-1&&jd(n.params,a.value.params)),i=Q(()=>s.value>-1&&s.value===n.matched.length-1&&Mo(n.params,a.value.params));function o(l={}){if(Vd(l)){const c=t[v(e.replace)?"replace":"push"](v(e.to)).catch(Xn);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>c),c}return Promise.resolve()}return{route:a,href:Q(()=>a.value.href),isActive:r,isExactActive:i,navigate:o}}function Md(e){return e.length===1?e[0]:e}const Ud=qe({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:ei,setup(e,{slots:t}){const n=Yt(ei(e)),{options:a}=mt(za),s=Q(()=>({[ni(e.activeClass,a.linkActiveClass,"router-link-active")]:n.isActive,[ni(e.exactActiveClass,a.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const r=t.default&&Md(t.default(n));return e.custom?r:j("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:s.value},r)}}}),Bd=Ud;function Vd(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function jd(e,t){for(const n in t){const a=t[n],s=e[n];if(typeof a=="string"){if(a!==s)return!1}else if(!At(s)||s.length!==a.length||a.some((r,i)=>r.valueOf()!==s[i].valueOf()))return!1}return!0}function ti(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const ni=(e,t,n)=>e??t??n,Hd=qe({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const a=mt(Ts),s=Q(()=>e.route||a.value),r=mt(Kr,0),i=Q(()=>{let c=v(r);const{matched:u}=s.value;let d;for(;(d=u[c])&&!d.components;)c++;return c}),o=Q(()=>s.value.matched[i.value]);Wn(Kr,Q(()=>i.value+1)),Wn(md,o),Wn(Ts,s);const l=Y();return Ot(()=>[l.value,o.value,e.name],([c,u,d],[f,h,g])=>{u&&(u.instances[d]=c,h&&h!==u&&c&&c===f&&(u.leaveGuards.size||(u.leaveGuards=h.leaveGuards),u.updateGuards.size||(u.updateGuards=h.updateGuards))),c&&u&&(!h||!In(u,h)||!f)&&(u.enterCallbacks[d]||[]).forEach(b=>b(c))},{flush:"post"}),()=>{const c=s.value,u=e.name,d=o.value,f=d&&d.components[u];if(!f)return ai(n.default,{Component:f,route:c});const h=d.props[u],g=h?h===!0?c.params:typeof h=="function"?h(c):h:null,m=j(f,xe({},g,t,{onVnodeUnmounted:$=>{$.component.isUnmounted&&(d.instances[u]=null)},ref:l}));return ai(n.default,{Component:m,route:c})||m}}});function ai(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const Go=Hd;function Gd(e){const t=Pd(e.routes,e),n=e.parseQuery||gd,a=e.stringifyQuery||zr,s=e.history,r=Mn(),i=Mn(),o=Mn(),l=Nl(Qt);let c=Qt;Sn&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=is.bind(null,N=>""+N),d=is.bind(null,Qc),f=is.bind(null,ia);function h(N,ae){let R,A;return Uo(N)?(R=t.getRecordMatcher(N),A=ae):A=N,t.addRoute(A,R)}function g(N){const ae=t.getRecordMatcher(N);ae&&t.removeRoute(ae)}function b(){return t.getRoutes().map(N=>N.record)}function m(N){return!!t.getRecordMatcher(N)}function $(N,ae){if(ae=xe({},ae||l.value),typeof N=="string"){const x=os(n,N,ae.path),B=t.resolve({path:x.path},ae),G=s.createHref(x.fullPath);return xe(x,B,{params:f(B.params),hash:ia(x.hash),redirectedFrom:void 0,href:G})}let R;if(N.path!=null)R=xe({},N,{path:os(n,N.path,ae.path).path});else{const x=xe({},N.params);for(const B in x)x[B]==null&&delete x[B];R=xe({},N,{params:d(x)}),ae.params=d(ae.params)}const A=t.resolve(R,ae),X=N.hash||"";A.params=u(f(A.params));const p=td(a,xe({},N,{hash:Jc(X),path:A.path})),_=s.createHref(p);return xe({fullPath:p,hash:X,query:a===zr?hd(N.query):N.query||{}},A,{redirectedFrom:void 0,href:_})}function y(N){return typeof N=="string"?os(n,N,l.value.path):xe({},N)}function S(N,ae){if(c!==N)return Dn(Ge.NAVIGATION_CANCELLED,{from:ae,to:N})}function C(N){return T(N)}function L(N){return C(xe(y(N),{replace:!0}))}function P(N,ae){const R=N.matched[N.matched.length-1];if(R&&R.redirect){const{redirect:A}=R;let X=typeof A=="function"?A(N,ae):A;return typeof X=="string"&&(X=X.includes("?")||X.includes("#")?X=y(X):{path:X},X.params={}),xe({query:N.query,hash:N.hash,params:X.path!=null?{}:N.params},X)}}function T(N,ae){const R=c=$(N),A=l.value,X=N.state,p=N.force,_=N.replace===!0,x=P(R,A);if(x)return T(xe(y(x),{state:typeof x=="object"?xe({},X,x.state):X,force:p,replace:_}),ae||R);const B=R;B.redirectedFrom=ae;let G;return!p&&nd(a,A,R)&&(G=Dn(Ge.NAVIGATION_DUPLICATED,{to:B,from:A}),Ee(A,A,!0,!1)),(G?Promise.resolve(G):te(B,A)).catch(H=>Bt(H)?Bt(H,Ge.NAVIGATION_GUARD_REDIRECT)?H:Se(H):ee(H,B,A)).then(H=>{if(H){if(Bt(H,Ge.NAVIGATION_GUARD_REDIRECT))return T(xe({replace:_},y(H.to),{state:typeof H.to=="object"?xe({},X,H.to.state):X,force:p}),ae||B)}else H=ye(B,A,!0,_,X);return ue(B,A,H),H})}function E(N,ae){const R=S(N,ae);return R?Promise.reject(R):Promise.resolve()}function D(N){const ae=Ve.values().next().value;return ae&&typeof ae.runWithContext=="function"?ae.runWithContext(N):N()}function te(N,ae){let R;const[A,X,p]=yd(N,ae);R=us(A.reverse(),"beforeRouteLeave",N,ae);for(const x of A)x.leaveGuards.forEach(B=>{R.push(nn(B,N,ae))});const _=E.bind(null,N,ae);return R.push(_),$e(R).then(()=>{R=[];for(const x of r.list())R.push(nn(x,N,ae));return R.push(_),$e(R)}).then(()=>{R=us(X,"beforeRouteUpdate",N,ae);for(const x of X)x.updateGuards.forEach(B=>{R.push(nn(B,N,ae))});return R.push(_),$e(R)}).then(()=>{R=[];for(const x of p)if(x.beforeEnter)if(At(x.beforeEnter))for(const B of x.beforeEnter)R.push(nn(B,N,ae));else R.push(nn(x.beforeEnter,N,ae));return R.push(_),$e(R)}).then(()=>(N.matched.forEach(x=>x.enterCallbacks={}),R=us(p,"beforeRouteEnter",N,ae,D),R.push(_),$e(R))).then(()=>{R=[];for(const x of i.list())R.push(nn(x,N,ae));return R.push(_),$e(R)}).catch(x=>Bt(x,Ge.NAVIGATION_CANCELLED)?x:Promise.reject(x))}function ue(N,ae,R){o.list().forEach(A=>D(()=>A(N,ae,R)))}function ye(N,ae,R,A,X){const p=S(N,ae);if(p)return p;const _=ae===Qt,x=Sn?history.state:{};R&&(A||_?s.replace(N.fullPath,xe({scroll:_&&x&&x.scroll},X)):s.push(N.fullPath,X)),l.value=N,Ee(N,ae,R,_),Se()}let we;function V(){we||(we=s.listen((N,ae,R)=>{if(!je.listening)return;const A=$(N),X=P(A,je.currentRoute.value);if(X){T(xe(X,{replace:!0,force:!0}),A).catch(Xn);return}c=A;const p=l.value;Sn&&cd(qr(p.fullPath,R.delta),qa()),te(A,p).catch(_=>Bt(_,Ge.NAVIGATION_ABORTED|Ge.NAVIGATION_CANCELLED)?_:Bt(_,Ge.NAVIGATION_GUARD_REDIRECT)?(T(xe(y(_.to),{force:!0}),A).then(x=>{Bt(x,Ge.NAVIGATION_ABORTED|Ge.NAVIGATION_DUPLICATED)&&!R.delta&&R.type===Es.pop&&s.go(-1,!1)}).catch(Xn),Promise.reject()):(R.delta&&s.go(-R.delta,!1),ee(_,A,p))).then(_=>{_=_||ye(A,p,!1),_&&(R.delta&&!Bt(_,Ge.NAVIGATION_CANCELLED)?s.go(-R.delta,!1):R.type===Es.pop&&Bt(_,Ge.NAVIGATION_ABORTED|Ge.NAVIGATION_DUPLICATED)&&s.go(-1,!1)),ue(A,p,_)}).catch(Xn)}))}let W=Mn(),Z=Mn(),K;function ee(N,ae,R){Se(N);const A=Z.list();return A.length?A.forEach(X=>X(N,ae,R)):console.error(N),Promise.reject(N)}function fe(){return K&&l.value!==Qt?Promise.resolve():new Promise((N,ae)=>{W.add([N,ae])})}function Se(N){return K||(K=!N,V(),W.list().forEach(([ae,R])=>N?R(N):ae()),W.reset()),N}function Ee(N,ae,R,A){const{scrollBehavior:X}=e;if(!Sn||!X)return Promise.resolve();const p=!R&&dd(qr(N.fullPath,0))||(A||!R)&&history.state&&history.state.scroll||null;return pn().then(()=>X(N,ae,p)).then(_=>_&&ud(_)).catch(_=>ee(_,N,ae))}const be=N=>s.go(N);let Me;const Ve=new Set,je={currentRoute:l,listening:!0,addRoute:h,removeRoute:g,clearRoutes:t.clearRoutes,hasRoute:m,getRoutes:b,resolve:$,options:e,push:C,replace:L,go:be,back:()=>be(-1),forward:()=>be(1),beforeEach:r.add,beforeResolve:i.add,afterEach:o.add,onError:Z.add,isReady:fe,install(N){N.component("RouterLink",Bd),N.component("RouterView",Go),N.config.globalProperties.$router=je,Object.defineProperty(N.config.globalProperties,"$route",{enumerable:!0,get:()=>v(l)}),Sn&&!Me&&l.value===Qt&&(Me=!0,C(s.location).catch(A=>{}));const ae={};for(const A in Qt)Object.defineProperty(ae,A,{get:()=>l.value[A],enumerable:!0});N.provide(za,je),N.provide(Zs,ji(ae)),N.provide(Ts,l);const R=N.unmount;Ve.add(N),N.unmount=function(){Ve.delete(N),Ve.size<1&&(c=Qt,we&&we(),we=null,l.value=Qt,Me=!1,K=!1),R()}}};function $e(N){return N.reduce((ae,R)=>ae.then(()=>D(R)),Promise.resolve())}return je}function hn(){return mt(za)}function Ka(e){return mt(Zs)}var qd={},zd=new Set(["primary","secondary","accent","success","warning","danger","error","info"]);function Fe(...e){return e.flatMap(t=>t?Array.isArray(t)?t:typeof t=="object"?Object.entries(t).filter(([,n])=>n).map(([n])=>n):[t]:[]).filter(Boolean).join(" ")}function On(e,t="primary"){return zd.has(e)?e:t}function Je(e,t=""){if(!e)return null;const n=e.includes("ph ")||e.startsWith("ph-");n||typeof process<"u"&&qd&&console.warn(`[gnexus-ui-kit] Icon "${e}" is missing the required "ph-" prefix. Use "ph-${e}" instead.`);const a=n?e:`ph-${e}`;return j("i",{class:Fe("ph",a,t),"aria-hidden":"true"})}function qo(e){const t=e.target;return t.type==="checkbox"?t.checked:t.value}var Kd=["a[href]","button:not([disabled])","input:not([disabled])","select:not([disabled])","textarea:not([disabled])","[tabindex]:not([tabindex='-1'])"].join(",");function Wd(e,t){if(e.key!=="Tab"||!t)return;const n=[...t.querySelectorAll(Kd)].filter(r=>!r.hasAttribute("disabled")&&r.offsetParent!==null);if(!n.length){e.preventDefault(),t.focus();return}const a=n[0],s=n[n.length-1];e.shiftKey&&document.activeElement===a?(e.preventDefault(),s.focus()):!e.shiftKey&&document.activeElement===s&&(e.preventDefault(),a.focus())}var Jd=qe({name:"GnActionCard",props:{kicker:{type:String,default:""},title:{type:String,required:!0},text:{type:String,default:""}},setup(e,{slots:t}){return()=>{var n,a,s;return j("article",{class:"card action-card"},[j("div",{class:"card-content"},[(e.kicker||t.kicker)&&j("span",{class:"action-card-kicker"},((n=t.kicker)==null?void 0:n.call(t))||e.kicker),j("h3",{class:"action-card-title"},((a=t.title)==null?void 0:a.call(t))||e.title),(e.text||t.default)&&j("p",{class:"action-card-text"},((s=t.default)==null?void 0:s.call(t))||e.text),t.actions&&j("div",{class:"action-card-actions"},t.actions())])])}}}),Qe=qe({name:"GnAlert",inheritAttrs:!1,props:{variant:{type:String,default:"primary"},role:{type:String,default:"status"}},setup(e,{attrs:t,slots:n}){return()=>{var a;const s=On(e.variant);return j("div",{...t,role:e.role,class:Fe("alert",`alert-${s}`,t.class)},(a=n.default)==null?void 0:a.call(n))}}}),Yd=qe({name:"GnAvatar",inheritAttrs:!1,props:{src:{type:String,default:""},alt:{type:String,default:""},initials:{type:String,default:""},icon:{type:String,default:""},size:{type:String,default:"md"},variant:{type:String,default:"primary"},outline:{type:Boolean,default:!1},status:{type:String,default:""}},setup(e,{attrs:t}){return()=>{const n=On(e.variant);return j("span",{...t,class:Fe("avatar",`avatar-${n}`,{"avatar-sm":e.size==="sm","avatar-lg":e.size==="lg","avatar-outline":e.outline,"is-online":e.status==="online","is-busy":e.status==="busy","is-offline":e.status==="offline"},t.class)},[e.src?j("img",{src:e.src,alt:e.alt}):Je(e.icon)||e.initials,e.status&&j("span",{class:"avatar-status","aria-hidden":"true"})])}}}),me=qe({name:"GnBadge",inheritAttrs:!1,props:{variant:{type:String,default:"primary"},outline:{type:Boolean,default:!1}},setup(e,{attrs:t,slots:n}){return()=>{var a;const s=On(e.variant);return j("span",{...t,class:Fe("badge",e.outline&&s==="primary"?"badge-primary-outline":`badge-${s}`,t.class)},(a=n.default)==null?void 0:a.call(n))}}}),pe=qe({name:"GnButton",inheritAttrs:!1,props:{variant:{type:String,default:"primary"},size:{type:String,default:"md"},icon:{type:String,default:""},loading:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},type:{type:String,default:"button"}},setup(e,{attrs:t,slots:n}){return()=>{var a;const s=!!(e.icon||e.loading),r=On(e.variant);return j("button",{...t,type:e.type,disabled:e.disabled||e.loading,class:Fe("btn",`btn-${r}`,{"btn-small":e.size==="sm","btn-large":e.size==="lg","with-icon":s,"loading-state":e.loading},t.class)},[e.loading?Je("ph-bold ph-spinner"):Je(e.icon),(a=n.default)==null?void 0:a.call(n)])}}}),si=qe({name:"GnChip",inheritAttrs:!1,props:{variant:{type:String,default:""},icon:{type:String,default:""},selected:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},removable:{type:Boolean,default:!1},clickable:{type:Boolean,default:!1}},emits:["remove"],setup(e,{attrs:t,emit:n,slots:a}){return()=>{var s,r,i,o;const l=e.clickable?"button":"span",c=e.variant?On(e.variant):"",u=(i=(r=(s=a.default)==null?void 0:s.call(a))==null?void 0:r[0])==null?void 0:i.children;return j(l,{...t,type:l==="button"?"button":void 0,disabled:l==="button"?e.disabled:void 0,"aria-pressed":l==="button"?String(e.selected):void 0,class:Fe("chip",c&&`chip-${c}`,{"chip-selected":e.selected,"chip-disabled":e.disabled},t.class)},[Je(e.icon),(o=a.default)==null?void 0:o.call(a),e.removable&&j("button",{class:"chip-remove",type:"button","aria-label":u?`Remove ${u}`:"Remove",onClick:d=>{d.stopPropagation(),n("remove")}},[Je("ph-x")])])}}}),Zd=0,ut=qe({name:"GnModal",props:{open:{type:Boolean,default:!1},title:{type:String,default:""},closeOnBackdrop:{type:Boolean,default:!0}},emits:["update:open","close"],setup(e,{emit:t,slots:n}){const a=`gn-modal-title-${++Zd}`,s=Y(null),r=Y(!1),i=Y(!1);let o=null,l=null;const c=()=>{t("update:open",!1),t("close")},u=f=>{f.key==="Escape"?(f.preventDefault(),c()):Wd(f,s.value)},d=()=>{pn(()=>{var f;(f=s.value)==null||f.focus()})};return Ot(()=>e.open,f=>{var h;f?(i.value=!0,r.value=!0,pn(()=>{requestAnimationFrame(()=>{i.value=!1})}),o=document.activeElement,document.addEventListener("keydown",u),d()):(i.value=!0,document.removeEventListener("keydown",u),(h=o==null?void 0:o.focus)==null||h.call(o),o=null,l=window.setTimeout(()=>{r.value=!1,i.value=!1},300))},{flush:"post"}),Ma(()=>{document.removeEventListener("keydown",u),window.clearTimeout(l)}),()=>{var f,h,g;return r.value?j(su,{to:"body"},[j("div",{class:Fe("modal",i.value?"a-hide":"a-show"),"aria-hidden":"false"},[j("div",{class:"modal-backdrop",onClick:()=>e.closeOnBackdrop&&c()}),j("div",{ref:s,class:"modal-dialog",role:"dialog","aria-modal":"true","aria-labelledby":a,tabindex:"-1"},[j("header",{class:"modal-header"},[j("h4",{class:"modal-title",id:a},((f=n.title)==null?void 0:f.call(n))||e.title),j("button",{class:"btn-icon modal-close",type:"button","aria-label":"Close",onClick:c},[Je("ph-x")])]),j("div",{class:"modal-panel"},[j("div",{class:"modal-body"},(h=n.default)==null?void 0:h.call(n)),(n.footer||n.actions)&&j("footer",{class:"modal-footer"},[(g=n.footer)==null?void 0:g.call(n),n.actions&&j("div",{class:"actions"},n.actions({close:c}))])])])])]):null}}}),Qd=qe({name:"GnCopyButton",props:{text:{type:String,required:!0},icon:{type:String,default:"ph-copy"},successIcon:{type:String,default:"ph-check"},duration:{type:Number,default:3e3},label:{type:String,default:"Copy"},size:{type:String,default:null}},emits:["copy"],setup(e,{emit:t}){const n=Y(!1);let a=null;const s=async()=>{try{await navigator.clipboard.writeText(e.text)}catch{const i=document.createElement("textarea");i.value=e.text,i.style.position="fixed",i.style.opacity="0",document.body.appendChild(i),i.select(),document.execCommand("copy"),document.body.removeChild(i)}n.value=!0,window.clearTimeout(a),a=window.setTimeout(()=>{n.value=!1},e.duration),t("copy",e.text)};return()=>j("button",{class:Fe("btn-icon",{"btn-icon-sm":e.size==="sm"}),type:"button","aria-label":e.label,onClick:s},[Je(n.value?e.successIcon:e.icon)])}}),Xd=qe({name:"GnDropdown",props:{label:{type:String,default:"Actions"},icon:{type:String,default:"ph-dots-three-outline"},variant:{type:String,default:"secondary"},items:{type:Array,default:()=>[]}},emits:["select"],setup(e,{emit:t,slots:n}){const a=Y(!1),s=Y(null),r=()=>{a.value=!1,document.removeEventListener("click",i),document.removeEventListener("keydown",o)},i=u=>{s.value&&!s.value.contains(u.target)&&r()},o=u=>{u.key==="Escape"&&(u.preventDefault(),r())},l=()=>{a.value=!a.value,a.value?(setTimeout(()=>document.addEventListener("click",i),0),document.addEventListener("keydown",o)):r()},c=u=>{var d;u.disabled||((d=u.onSelect)==null||d.call(u,u),t("select",u),r())};return Ma(r),()=>{var u,d;return j("div",{ref:s,class:Fe("dropdown",{"is-open":a.value})},[((u=n.trigger)==null?void 0:u.call(n,{open:a.value,toggle:l}))||j(pe,{variant:e.variant,icon:e.icon,"aria-expanded":a.value?"true":"false",onClick:l},()=>e.label),j("div",{class:"dropdown-menu",role:"menu"},((d=n.default)==null?void 0:d.call(n,{close:r}))||e.items.map(f=>j("button",{class:Fe("dropdown-item",f.danger&&"dropdown-item-danger"),type:"button",role:"menuitem",disabled:f.disabled,onClick:()=>c(f)},[Je(f.icon),f.label])))])}}}),ef=qe({name:"GnEmptyState",inheritAttrs:!1,props:{title:{type:String,required:!0},text:{type:String,default:""},icon:{type:String,default:"ph-package"},variant:{type:String,default:""}},setup(e,{attrs:t,slots:n}){return()=>{var a,s;return j("div",{...t,class:Fe("empty-state",e.variant&&`empty-state-${e.variant}`,t.class)},[j("div",{class:"empty-state-icon"},[Je(e.icon)]),j("h3",{class:"empty-state-title"},((a=n.title)==null?void 0:a.call(n))||e.title),(e.text||n.default)&&j("p",{class:"empty-state-text"},((s=n.default)==null?void 0:s.call(n))||e.text),n.actions&&j("div",{class:"empty-state-actions"},n.actions())])}}}),Ft=qe({name:"GnInput",inheritAttrs:!1,props:{modelValue:{type:[String,Number],default:""},label:{type:String,default:""},type:{type:String,default:"text"},icon:{type:String,default:""},state:{type:String,default:""},help:{type:String,default:""},bare:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(e,{attrs:t,emit:n}){return()=>{const a=j("input",{...t,type:e.type,value:e.modelValue,class:Fe(e.bare?"":"input",t.class),onInput:s=>n("update:modelValue",qo(s))});return e.bare?a:j("div",{class:"form-group"},[j("label",{class:Fe("label",e.state)},[e.label,Je(e.icon),a]),e.help&&j("div",{class:Fe("input-info",e.state==="error"&&"error")},e.help)])}}}),zo=qe({name:"GnLoader",inheritAttrs:!1,props:{circle:{type:Boolean,default:!1},label:{type:String,default:"Loading"}},setup(e,{attrs:t}){return()=>e.circle?j("div",{...t,class:Fe("circle-loader",t.class)},[Je("ph-bold ph-spinner normalize"),e.label]):j("div",{...t,class:Fe("loader",t.class),role:"status","aria-label":e.label})}});function tf(){var e;const t=ja();return((e=t==null?void 0:t.proxy)==null?void 0:e.$router)||null}function nf(){var e;const t=ja();return((e=t==null?void 0:t.proxy)==null?void 0:e.$route)||null}function af(e,t,n="prefix"){if(!e)return!1;const a=e.value||e;return typeof t=="string"?n==="exact"?a.path===t:a.path===t||a.path.startsWith(t+"/"):t.path?n==="exact"?a.path===t.path:a.path===t.path||a.path.startsWith(t.path+"/"):t.name?a.name===t.name:!1}var sf=qe({name:"GnNavList",inheritAttrs:!1,props:{items:{type:Array,default:()=>[]},activeMatch:{type:String,default:"prefix"}},emits:["select"],setup(e,{attrs:t,emit:n,slots:a}){const s=tf(),r=nf(),i=!!(s&&r),o=c=>{if(c){if(typeof c=="string")return c;if(c.path)return c.path}},l=Q(()=>e.items.map(c=>{const u=!!c.to,d=u?i?s.resolve(c.to).href:o(c.to):c.href,f=u&&i?af(r,c.to,e.activeMatch):!!c.active;return{...c,resolvedHref:d,isActive:f,hasTo:u}}));return()=>j("ul",{...t,class:Fe("list list-nav",t.class)},l.value.map(c=>{var u,d;return j("li",{class:Fe("list-item",{"list-item-active":c.isActive})},[j(c.resolvedHref?"a":"button",{class:"list-action",href:c.resolvedHref,type:c.resolvedHref?void 0:"button",onClick:f=>{var h;c.hasTo&&i&&(f.preventDefault(),s.push(c.to)),(h=c.onSelect)==null||h.call(c,c,f),n("select",c)}},[j("span",{class:"list-label"},[Je(c.icon),((u=a.label)==null?void 0:u.call(a,{item:c}))||c.label]),(c.meta||a.meta)&&j("span",{class:"list-meta"},((d=a.meta)==null?void 0:d.call(a,{item:c}))||c.meta)])])}))}}),rf=0,of=qe({name:"GnNavigationShell",props:{brand:{type:String,default:"GNexus UI Kit"},logoSrc:{type:String,default:"/assets/imgs/gnexus-mark.svg"},current:{type:String,default:""},title:{type:String,default:"Sections"},subtitle:{type:String,default:"Navigation"},footerLeft:{type:String,default:""},footerRight:{type:String,default:""},items:{type:Array,default:()=>[]},activeMatch:{type:String,default:"prefix"}},emits:["select"],setup(e,{emit:t,slots:n}){const a=Y(!1),s=`gn-nav-drawer-${++rf}`,r=Y(null);let i=null;const o=()=>{a.value=!1},l=()=>{a.value=!a.value},c=u=>{u.key==="Escape"&&(u.preventDefault(),o())};return Ot(a,u=>{var d;u?(i=document.activeElement,document.body.classList.add("nav-drawer-open"),document.addEventListener("keydown",c),pn(()=>{var f;return(f=r.value)==null?void 0:f.focus()})):(document.body.classList.remove("nav-drawer-open"),document.removeEventListener("keydown",c),(d=i==null?void 0:i.focus)==null||d.call(i),i=null)}),Ma(()=>{document.body.classList.remove("nav-drawer-open"),document.removeEventListener("keydown",c)}),()=>{var u,d,f,h,g,b,m;return[j("header",{class:"nav-topbar"},[j("button",{class:"nav-topbar-toggle",type:"button","aria-controls":s,"aria-expanded":a.value?"true":"false",onClick:l},[Je("ph-sidebar-simple"),j("span",{},"Menu")]),j("div",{class:"nav-topbar-brand"},[e.logoSrc&&j("img",{src:e.logoSrc,alt:"","aria-hidden":"true"}),j("span",{},((u=n.brand)==null?void 0:u.call(n))||e.brand)]),j("div",{class:"nav-topbar-current"},((d=n.current)==null?void 0:d.call(n))||e.current)]),j("div",{class:"nav-drawer-backdrop",onClick:o}),j("aside",{ref:r,class:["nav-drawer",{"is-open":a.value}],id:s,"aria-label":"Navigation","aria-hidden":a.value?"false":"true",tabindex:"-1"},[j("header",{class:"nav-drawer-header"},[j("div",{},[j("div",{class:"nav-drawer-title"},((f=n.title)==null?void 0:f.call(n))||e.title),j("div",{class:"nav-drawer-subtitle"},((h=n.subtitle)==null?void 0:h.call(n))||e.subtitle)]),j("button",{class:"nav-drawer-close",type:"button","aria-label":"Close navigation",onClick:o},[Je("ph-x")])]),j("nav",{class:"nav-drawer-body"},[((g=n.default)==null?void 0:g.call(n,{close:o}))||j(sf,{items:e.items,activeMatch:e.activeMatch,onSelect:$=>{t("select",$),o()}})]),(n.footer||e.footerLeft||e.footerRight)&&j("footer",{class:"nav-drawer-footer"},((b=n.footer)==null?void 0:b.call(n))||[j("span",{},e.footerLeft),j("span",{},e.footerRight)])]),(m=n.content)==null?void 0:m.call(n)]}}}),xt=qe({name:"GnPageHeader",inheritAttrs:!1,props:{title:{type:String,required:!0},subtitle:{type:String,default:""},kicker:{type:String,default:""},compact:{type:Boolean,default:!1},accent:{type:Boolean,default:!1}},setup(e,{attrs:t,slots:n}){return()=>{var a,s,r;return j("header",{...t,class:Fe("page-header",{"page-header-compact":e.compact,"page-header-accent":e.accent},t.class)},[j("div",{class:"page-header-content"},[(e.kicker||n.kicker)&&j("div",{class:"page-header-kicker"},((a=n.kicker)==null?void 0:a.call(n))||e.kicker),j("h1",{class:"page-header-title"},((s=n.title)==null?void 0:s.call(n))||e.title),(e.subtitle||n.subtitle)&&j("p",{class:"page-header-subtitle"},((r=n.subtitle)==null?void 0:r.call(n))||e.subtitle),n.meta&&j("div",{class:"page-header-meta"},n.meta())]),n.actions&&j("div",{class:"page-header-actions"},n.actions())])}}}),Qs=qe({name:"GnSelect",inheritAttrs:!1,props:{modelValue:{type:[String,Number],default:""},label:{type:String,default:""},icon:{type:String,default:""},state:{type:String,default:""},help:{type:String,default:""},options:{type:Array,default:()=>[]}},emits:["update:modelValue"],setup(e,{attrs:t,emit:n,slots:a}){const s=()=>e.options.map(r=>{const i=typeof r=="object"?r.value:r,o=typeof r=="object"?r.label:r;return j("option",{value:i},o)});return()=>{var r;return j("div",{class:"form-group"},[j("label",{class:Fe("label",e.state)},[e.label,Je(e.icon),j("div",{class:"select-wrap"},[j("select",{...t,value:e.modelValue,class:Fe("input select",t.class),onChange:i=>n("update:modelValue",qo(i))},((r=a.default)==null?void 0:r.call(a))||s())])]),e.help&&j("div",{class:Fe("input-info",e.state==="error"&&"error")},e.help)])}}}),lf=qe({name:"GnSwitch",inheritAttrs:!1,props:{modelValue:{type:Boolean,default:!1},label:{type:String,default:""},disabled:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(e,{attrs:t,emit:n,slots:a}){return()=>{var s;return j("label",{class:Fe("switch",t.class)},[j("input",{...t,type:"checkbox",checked:e.modelValue,disabled:e.disabled,onChange:r=>n("update:modelValue",r.target.checked)}),j("span",{class:"switch-control","aria-hidden":"true"}),j("span",{class:"switch-label"},((s=a.default)==null?void 0:s.call(a))||e.label)])}}}),Pn=qe({name:"GnTable",props:{columns:{type:Array,required:!0},rows:{type:Array,default:()=>[]},caption:{type:String,default:""},emptyText:{type:String,default:"Empty"}},setup(e,{attrs:t,slots:n}){return()=>{var a;return j("div",{class:"table-wrapper"},[j("table",{class:Fe("table data-list",{"table-empty":!e.rows.length},t.class)},[e.caption&&j("caption",{class:"table-caption"},e.caption),j("thead",{class:"table-head"},[j("tr",{class:"table-row"},e.columns.map(s=>j("th",{scope:"col"},s.label)))]),j("tbody",{class:"table-body"},e.rows.length?e.rows.map(s=>j("tr",{class:"table-row"},e.columns.map(r=>{var i;const o=`cell-${r.key}`;return j("td",{},((i=n[o])==null?void 0:i.call(n,{row:s,column:r,value:s[r.key]}))||s[r.key])}))):j("tr",{},[j("td",{class:"is-empty",colspan:e.columns.length},((a=n.empty)==null?void 0:a.call(n))||e.emptyText)]))])])}}}),Ko=Symbol("gnexus-ui-kit-toast"),ri={info:"ph-info",success:"ph-check-circle",warning:"ph-warning",danger:"ph-warning-octagon",error:"ph-warning-octagon",primary:"ph-info",secondary:"ph-info"},uf=qe({name:"GnToastProvider",props:{lifetime:{type:Number,default:4e3}},setup(e,{slots:t,expose:n}){const a=Y(null),s=Y(!1),r=Y(!1);let i=null,o=null,l=null;const c=Y(100),u=()=>{window.clearTimeout(o),window.clearInterval(l),s.value=!0,r.value=!1,o=window.setTimeout(()=>{a.value=null,s.value=!1,c.value=100,window.clearTimeout(i),i=null},300)},d=()=>{window.clearTimeout(o),window.clearTimeout(i),window.clearInterval(l),s.value=!1,r.value=!1,c.value=100,a.value=null},f=b=>{window.clearTimeout(o),window.clearInterval(l),s.value=!1,r.value=!1,c.value=100;const m=On(b.variant||b.type||"info","info"),$=b.lifetime!==void 0?b.lifetime:e.lifetime;if(a.value={id:Date.now(),variant:m==="error"?"danger":m,title:b.title||"",text:b.text||b.message||"",icon:b.icon||ri[m]||ri.info,lifetime:$},window.clearTimeout(i),$!==0){const S=$/100;c.value=100,l=window.setInterval(()=>{c.value-=100/S,c.value<=0&&window.clearInterval(l)},100),i=window.setTimeout(u,$)}pn(()=>{requestAnimationFrame(()=>{r.value=!0})})},h={show:f,close:d,info:b=>f({...b,variant:"info"}),success:b=>f({...b,variant:"success"}),warning:b=>f({...b,variant:"warning"}),danger:b=>f({...b,variant:"danger"}),error:b=>f({...b,variant:"danger"})};Wn(Ko,h),n(h);const g=()=>s.value?"a-hide":r.value?"a-show":"";return()=>{var b;return[(b=t.default)==null?void 0:b.call(t),a.value&&j("div",{class:Fe("toast",g(),`toast-${a.value.variant}`),role:"alert"},[j("div",{class:"toast-content"},[j("div",{class:"toast-header"},[Je(a.value.icon),a.value.title]),a.value.text&&j("p",{class:"toast-text"},a.value.text)]),j("button",{class:"btn-icon toast-close",type:"button","aria-label":"Close",onClick:u},[Je("ph-x")]),a.value.lifetime!==0&&j("div",{class:"toast-progress"},[j("div",{class:"toast-progress-bar",style:{transform:`scaleX(${Math.max(0,c.value/100)})`}})])])]}}}),cf=qe({name:"GnUserCard",props:{name:{type:String,required:!0},email:{type:String,default:""},role:{type:String,default:""},avatar:{type:Object,default:()=>({})},href:{type:String,default:""},compact:{type:Boolean,default:!1},actions:{type:Array,default:()=>[]}},setup(e,{slots:t}){const n=()=>{var r;return((r=t.avatar)==null?void 0:r.call(t))||j(Yd,{...e.avatar,size:e.compact?"sm":"md"})},a=()=>j("span",{class:"identity"},[n(),j("span",{class:"identity-content"},[j("span",{class:"identity-title"},e.name),e.email&&j("span",{class:"identity-meta"},e.email)])]),s=()=>t.actions?t.actions():e.actions.length?j("div",{class:"user-card-actions"},e.actions.map(r=>{if(e.compact)return j("button",{class:"btn-icon",type:"button","aria-label":r.label,onClick:r.onClick},[Je(r.icon)]);const i=!!r.icon,o=Fe("btn","btn-small",{[`btn-${r.variant}`]:r.variant,"btn-secondary":!r.variant,"with-icon":i});return j("button",{class:o,type:"button",onClick:r.onClick},[i&&Je(r.icon),r.label])})):null;return()=>{const r=Fe("card","user-card",{"user-card-compact":e.compact}),i=[];e.href?i.push(j("a",{class:"profile-identity",href:e.href,target:"_blank",rel:"noopener noreferrer"},[a()])):i.push(a()),!e.compact&&e.role&&i.push(j("span",{class:"user-card-role"},e.role)),t.default&&!e.compact&&i.push(j("div",{class:"user-card-extra"},t.default()));const o=s();return o&&i.push(o),j("article",{class:r},[j("div",{class:"user-card-body"},i)])}}});function mn(){const e=mt(Ko,null);if(e)return e;const t=()=>{throw new Error("GNexus UI Kit: useToast() requires near the app root.")};return{show:t,info:t,success:t,warning:t,danger:t,error:t,close:t}}const Ca="shserv_access_token",Ea="shserv_expires_at";let Rn=null;function Wo(e,t=null){Rn=e||null;try{if(Rn){if(localStorage.setItem(Ca,Rn),t!=null&&t>0){const n=Date.now()+t*1e3;localStorage.setItem(Ea,String(n))}}else localStorage.removeItem(Ca),localStorage.removeItem(Ea)}catch{}}function Jo(){if(Rn)return Rn;try{return localStorage.getItem(Ca)||null}catch{return null}}function df(){try{const e=localStorage.getItem(Ea);return e?Number(e):null}catch{return null}}function kn(){Rn=null;try{localStorage.removeItem(Ca),localStorage.removeItem(Ea)}catch{}}const ff=1e4;function pf(e){const t=new URLSearchParams;for(const[a,s]of Object.entries(e||{}))s!=null&&t.append(a,String(s));const n=t.toString();return n?`?${n}`:""}function vf(e,t){const n="".replace(/\/+$/,""),a=String(t||"").replace(/^\/+/,"");return n?`${n}/${a}`:`/${a}`}function gf(e,t){return`${e}${pf(t)}`}async function ii(e,t,n,a={}){const s=Number(a.timeoutMs||ff),r=new AbortController,i=setTimeout(()=>r.abort(),s),l=vf("",gf(t,a.query)),c={Accept:"application/json",...a.headers||{}},u=Jo();u&&(c.Authorization=`Bearer ${u}`);const d={method:e,headers:c,signal:r.signal,credentials:"include"};a.signal&&a.signal.addEventListener("abort",()=>r.abort(),{once:!0}),n!=null&&(c["Content-Type"]="application/json",d.body=JSON.stringify(n));try{const f=await fetch(l,d),h=await f.text();let g=h;if(h)try{g=JSON.parse(h)}catch{g=h}return{response:f,data:g,meta:{url:l,method:e,statusCode:f.status,headers:f.headers}}}finally{clearTimeout(i)}}let cs=!1,$s=[];function hf(e){$s.push(e)}function oi(e){$s.forEach(t=>t(e)),$s=[]}function Un(e,t,n={}){return{type:e,message:t,...n}}async function Xs(e,t,n,a={}){var s,r;try{const{response:i,data:o,meta:l}=await ii(e,t,n,a);if(!i.ok){if(i.status===401&&!a._retryOnce){if(cs)await new Promise(u=>{hf(d=>u(d))});else{cs=!0;try{const u=await ii("POST","/auth/refresh",null);if(u.response.ok){const d=(r=(s=u.data)==null?void 0:s.data)==null?void 0:r.access_token;if(d)Wo(d),oi(d);else throw new Error("No token in refresh response")}else throw new Error("Refresh failed")}catch{return oi(null),kn(),window.location.hash.includes("/login")||(window.location.href=`/auth/login?return_to=${encodeURIComponent(window.location.href)}`),{ok:!1,error:Un("http_error","HTTP 401",{statusCode:401,raw:o}),meta:l}}finally{cs=!1}}return Jo()?Xs(e,t,n,{...a,_retryOnce:!0}):{ok:!1,error:Un("http_error","HTTP 401",{statusCode:401,raw:o}),meta:l}}return{ok:!1,error:Un("http_error",`HTTP ${i.status}`,{statusCode:i.status,raw:o}),meta:l}}return o&&typeof o=="object"&&(o.status===!1||o.status==="error")?{ok:!1,error:Un("api_error",o.msg||o.message||"API error",{errorAlias:o.error_alias,failedFields:o.failed_fields||[],raw:o}),meta:l}:{ok:!0,data:o,meta:l}}catch(i){const o=(i==null?void 0:i.name)==="AbortError";return{ok:!1,error:Un(o?"timeout":"network_error",(i==null?void 0:i.message)||"Network error",{details:i}),meta:{url:t,method:e,statusCode:0,headers:null}}}}function Oe(e,t){return Xs("GET",e,null,t)}function Xe(e,t,n){return Xs("POST",e,t,n)}const da=gn("auth",()=>{const e=Y(null),t=Y([]),n=Y(!1),a=Y(null),s=Q(()=>!!e.value),r=Q(()=>new Set(t.value));function i(b){return r.value.has(b)}function o(b){return Array.isArray(b)?b.some(m=>r.value.has(m)):!1}function l(){a.value&&(clearTimeout(a.value),a.value=null);const b=df();if(!b)return;const m=b-Date.now()-6e4;m>0?a.value=setTimeout(()=>{f().then(()=>{l()})},m):f().then(()=>{l()})}function c(){a.value&&(clearTimeout(a.value),a.value=null)}let u=null;async function d(){return u||(n.value=!0,u=Oe("/auth/me").then(async b=>{var m,$,y;if(b.ok){const S=((m=b.data)==null?void 0:m.data)||{};e.value=S.user||null,t.value=S.permissions||[],l()}else if((($=b.error)==null?void 0:$.statusCode)===401){await f();const S=await Oe("/auth/me");if(S.ok){const C=((y=S.data)==null?void 0:y.data)||{};e.value=C.user||null,t.value=C.permissions||[],l()}else e.value=null,t.value=[],kn(),c()}else e.value=null,t.value=[],kn(),c()}).catch(()=>{e.value=null,t.value=[],kn(),c()}).finally(()=>{n.value=!1}),u)}async function f(){var m,$,y,S;const b=await Xe("/auth/refresh");if(b.ok){const C=(($=(m=b.data)==null?void 0:m.data)==null?void 0:$.access_token)||null,L=((S=(y=b.data)==null?void 0:y.data)==null?void 0:S.expires_in)||null;Wo(C,L),l()}else kn(),c()}async function h(){try{await Xe("/auth/logout")}catch{}e.value=null,t.value=[],kn(),c(),window.location.href="/#/login"}function g(){const b=window.location.href;window.location.href=`/auth/login?return_to=${encodeURIComponent(b)}`}return{user:e,permissions:t,isLoading:n,isAuthenticated:s,hasPermission:i,hasAnyPermission:o,init:d,refreshToken:f,logout:h,redirectToLogin:g}}),mf={__name:"AppShell",setup(e){const t=Ka(),n=da(),a={login:"Login","areas-favorites":"Favorites","areas-tree":"Areas","area-detail":"Area",devices:"Devices","device-detail":"Device","devices-scanning":"Scanning","scripts-actions":"Actions","scripts-regular":"Regular","scripts-scopes":"Scopes","script-detail":"Script",firmwares:"Firmwares"},s=Q(()=>{const f=t==null?void 0:t.name;return f&&a[f]?a[f]:""}),r=[{label:"Favorites",to:"/areas/favorites",icon:"ph-bookmarks",permission:"areas.view"},{label:"Areas",to:"/areas/tree",icon:"ph-map-trifold",permission:"areas.view"},{label:"Devices",to:"/devices",icon:"ph-cpu",permission:"devices.view"},{label:"Scanning",to:"/devices/scanning",icon:"ph-magnifying-glass",permission:"devices.scan"},{label:"Actions",to:"/scripts/actions",icon:"ph-play",permission:"scripts.run"},{label:"Regular",to:"/scripts/regular",icon:"ph-clock",permission:"scripts.view"},{label:"Scopes",to:"/scripts/scopes",icon:"ph-brackets-curly",permission:"scripts.view"},{label:"Firmwares",to:"/firmwares",icon:"ph-cloud-arrow-down",permission:"firmware.view"}],i=Q(()=>r.filter(f=>f.permission?n.hasPermission(f.permission):!0));function o(f){return f?f.split(/\s+/).slice(0,2).map(h=>{var g;return(g=h[0])==null?void 0:g.toUpperCase()}).join(""):""}function l(f){return f?f.charAt(0).toUpperCase()+f.slice(1):""}function c(){const f=window.location.href;window.location.href=`/auth/login?return_to=${encodeURIComponent(f)}`}function u(){const f=document.querySelector(".nav-drawer-backdrop");f&&f.click()}function d(){u(),n.logout()}return(f,h)=>(w(),z(v(of),{brand:"SHSERV WEB CLIENT","logo-src":"",title:"Navigation",subtitle:"Smart Home",items:i.value,"active-match":"prefix",current:s.value},{content:k(()=>[Ua(f.$slots,"default")]),footer:k(()=>{var g,b,m,$,y,S;return[v(n).isAuthenticated?(w(),z(v(cf),{key:0,name:((g=v(n).user)==null?void 0:g.display_name)||"User",email:((b=v(n).user)==null?void 0:b.email)||"",role:l((m=v(n).user)==null?void 0:m.system_role),avatar:{src:(($=v(n).user)==null?void 0:$.avatar_url)||"",initials:o((y=v(n).user)==null?void 0:y.display_name),size:"sm"},href:((S=v(n).user)==null?void 0:S.gauth_profile_url)||"",compact:"",actions:[{label:"Logout",icon:"ph-sign-out",variant:"ghost",onClick:d}]},null,8,["name","email","role","avatar","href","actions"])):(w(),z(v(pe),{key:1,variant:"primary",size:"sm",onClick:c},{icon:k(()=>[...h[0]||(h[0]=[O("i",{class:"ph ph-sign-in"},null,-1)])]),default:k(()=>[h[1]||(h[1]=U(" Sign in ",-1))]),_:1}))]}),_:3},8,["items","current"]))}},Ye=(e,t)=>{const n=e.__vccOpts||e;for(const[a,s]of t)n[a]=s;return n},yf={key:0},_f={key:1,class:"error-meta"},bf={class:"error-actions"},wf={__name:"AppErrorState",props:{title:{type:String,default:"Request failed"},message:{type:String,default:""},retry:{type:Function,default:null},error:{type:Object,default:null}},setup(e){const t=e,n=Q(()=>{var s;return t.message||((s=t.error)==null?void 0:s.message)||""}),a=Q(()=>{if(!t.error)return"";try{return JSON.stringify(t.error,null,2)}catch{return String(t.error)}});return(s,r)=>(w(),z(v(Qe),{variant:"danger",role:"alert"},{default:k(()=>[O("strong",null,M(e.title),1),n.value?(w(),q("p",yf,M(n.value),1)):se("",!0),e.error?(w(),q("div",_f,[e.error.type?(w(),z(v(me),{key:0,variant:"secondary"},{default:k(()=>[U(M(e.error.type),1)]),_:1})):se("",!0),e.error.statusCode?(w(),z(v(me),{key:1,variant:"secondary"},{default:k(()=>[U("HTTP "+M(e.error.statusCode),1)]),_:1})):se("",!0),e.error.errorAlias?(w(),z(v(me),{key:2,variant:"warning"},{default:k(()=>[U(M(e.error.errorAlias),1)]),_:1})):se("",!0)])):se("",!0),O("div",bf,[e.error?(w(),z(v(Qd),{key:0,text:a.value,label:"Copy error details",size:"sm"},null,8,["text"])):se("",!0),e.retry?(w(),z(v(pe),{key:1,variant:"danger",onClick:e.retry},{default:k(()=>[...r[0]||(r[0]=[U("Retry",-1)])]),_:1},8,["onClick"])):se("",!0)])]),_:1}))}},pt=Ye(wf,[["__scopeId","data-v-f1e6bcb8"]]),Sf={key:0,class:"error-boundary",role:"alert"},kf={__name:"AppErrorBoundary",setup(e){const t=Y(!1),n=Y("");no((s,r,i)=>{const o=(s==null?void 0:s.message)||String(s);return console.error("[AppErrorBoundary] Caught Vue error:",o,"| info:",i,s),t.value=!0,n.value=o,!1});function a(){t.value=!1,n.value=""}return(s,r)=>t.value?(w(),q("div",Sf,[I(pt,{title:"Something went wrong",message:n.value,retry:a},null,8,["message"])])):Ua(s.$slots,"default",{key:1},void 0,!0)}},Af=Ye(kf,[["__scopeId","data-v-1e10ea7f"]]),xf={__name:"App",setup(e){return(t,n)=>(w(),z(mf,null,{default:k(()=>[I(v(uf),null,{default:k(()=>[I(Af,null,{default:k(()=>[I(v(Go))]),_:1})]),_:1})]),_:1}))}},Cf="modulepreload",Ef=function(e){return"/"+e},li={},Rf=function(t,n,a){let s=Promise.resolve();if(n&&n.length>0){let i=function(c){return Promise.all(c.map(u=>Promise.resolve(u).then(d=>({status:"fulfilled",value:d}),d=>({status:"rejected",reason:d}))))};document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),l=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));s=i(n.map(c=>{if(c=Ef(c),c in li)return;li[c]=!0;const u=c.endsWith(".css"),d=u?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${d}`))return;const f=document.createElement("link");if(f.rel=u?"stylesheet":Cf,u||(f.as="script"),f.crossOrigin="",f.href=c,l&&f.setAttribute("nonce",l),document.head.appendChild(f),u)return new Promise((h,g)=>{f.addEventListener("load",h),f.addEventListener("error",()=>g(new Error(`Unable to preload CSS for ${c}`)))})}))}function r(i){const o=new Event("vite:preloadError",{cancelable:!0});if(o.payload=i,window.dispatchEvent(o),!o.defaultPrevented)throw i}return s.then(i=>{for(const o of i||[])o.status==="rejected"&&r(o.reason);return t().catch(r)})},Et={list(e){return Oe("/api/v1/areas/list",e)},innerList(e,t){return Oe(`/api/v1/areas/id/${encodeURIComponent(String(e))}/list`,t)},newArea(e){return Xe("/api/v1/areas/new-area",e)},remove(e){return Oe(`/api/v1/areas/id/${encodeURIComponent(String(e))}/remove`)},devices(e,t){return Oe(`/api/v1/areas/id/${encodeURIComponent(String(e))}/devices`,t)},scripts(e,t){return Oe(`/api/v1/areas/id/${encodeURIComponent(String(e))}/scripts`,t)},updateDisplayName(e){return Xe("/api/v1/areas/update-display-name",e)},updateAlias(e){return Xe("/api/v1/areas/update-alias",e)},placeInArea(e){return Xe("/api/v1/areas/place-in-area",e)},unassign(e){return Oe(`/api/v1/areas/id/${encodeURIComponent(String(e))}/unassign-from-area`)}};function gt(e={}){const t=Y(null),n=Y(!1),a=Y(null);async function s(o){var c,u;(c=t.value)==null||c.abort();const l=new AbortController;t.value=l,n.value=!0,a.value=null;try{const d=await o(l.signal);return t.value=null,n.value=!1,d.ok||e.ignoreTimeout!==!1&&((u=d.error)==null?void 0:u.type)==="timeout"||(a.value=d.error),d}catch(d){return t.value=null,n.value=!1,a.value={type:"network_error",message:(d==null?void 0:d.message)||"Network error"},{ok:!1,error:a.value}}}function r(){var o;(o=t.value)==null||o.abort(),t.value=null}function i(){a.value=null,r()}return{abortController:t,isLoading:n,error:a,execute:s,abort:r,clear:i}}const Yo="sh:areas:expandedNodes";function Tf(){try{const e=localStorage.getItem(Yo);if(e){const t=JSON.parse(e);if(Array.isArray(t))return new Set(t)}}catch{}return new Set}function $f(e){try{localStorage.setItem(Yo,JSON.stringify([...e]))}catch{}}function If(e){const t={},n=[];for(const a of e)t[a.id]={...a,children:[]};for(const a of e){const s=t[a.id],r=a.parent_id&&a.parent_id==a.id,i=a.parent_id&&t[a.parent_id];!r&&i?t[a.parent_id].children.push(s):n.push(s)}return n.length===0&&e.length>0?Object.values(t):n}const wt=gn("areas",()=>{const e=Y([]),t=Y(null),n=Y([]),a=Y([]),s=gt(),r=gt(),i=Q(()=>Object.fromEntries(e.value.map(P=>[String(P.id),P]))),o=Q(()=>If(e.value)),l=Y(Tf());Ot(l,P=>{$f(P)},{deep:!0});function c(P){const T=new Set(l.value);T.has(P)?T.delete(P):T.add(P),l.value=T}function u(P){return l.value.has(P)}async function d(){return s.execute(async P=>{var E,D;const T=await Et.list({signal:P});return T.ok&&(e.value=((D=(E=T.data)==null?void 0:E.data)==null?void 0:D.areas)||[]),T})}async function f(P){var E,D,te,ue,ye,we;r.abort();const T=new AbortController;r.abortController.value=T,r.isLoading.value=!0,r.error.value=null,t.value=i.value[String(P)]||null,n.value=[],a.value=[];try{const[V,W]=await Promise.all([Et.devices(P,{signal:T.signal}),Et.scripts(P,{signal:T.signal})]);return r.abortController.value=null,r.isLoading.value=!1,V.ok?W.ok?(n.value=((ue=(te=V.data)==null?void 0:te.data)==null?void 0:ue.devices)||[],a.value=((we=(ye=W.data)==null?void 0:ye.data)==null?void 0:we.scripts)||[],{ok:!0}):(((D=W.error)==null?void 0:D.type)!=="timeout"&&(r.error.value=W.error),{ok:!1,error:r.error.value}):(((E=V.error)==null?void 0:E.type)!=="timeout"&&(r.error.value=V.error),{ok:!1,error:r.error.value})}catch(V){return r.abortController.value=null,r.isLoading.value=!1,r.error.value={type:"network_error",message:(V==null?void 0:V.message)||"Network error"},{ok:!1,error:r.error.value}}}function h(){t.value=null,n.value=[],a.value=[],r.clear()}async function g(P){var E,D;const T=await Et.devices(P);return T.ok&&(n.value=((D=(E=T.data)==null?void 0:E.data)==null?void 0:D.devices)||[]),T}async function b(P){var E,D;const T=await Et.scripts(P);return T.ok&&(a.value=((D=(E=T.data)==null?void 0:E.data)==null?void 0:D.scripts)||[]),T}async function m(P){var E,D;const T=await Et.newArea(P);if(T.ok){const te=(D=(E=T.data)==null?void 0:E.data)==null?void 0:D.area;te&&e.value.push(te)}return T}async function $(P,T){const E=await Et.updateDisplayName({area_id:P,display_name:T});if(E.ok){const D=e.value.findIndex(te=>te.id===P);D!==-1&&(e.value[D]={...e.value[D],display_name:T})}return E}async function y(P){const T=await Et.remove(P);return T.ok&&(e.value=e.value.filter(E=>E.id!==P)),T}function S(P){return!(P!=null&&P.parent_id)||P.parent_id<=0}async function C(P,T){const E=e.value.find(ue=>ue.id===P),D=e.value.filter(S).length;if(E&&S(E)&&D===1)return{ok:!1,error:{message:"Cannot assign the last root area as a child."}};const te=await Et.placeInArea({target_id:P,place_in_area_id:T});if(te.ok){const ue=e.value.findIndex(ye=>ye.id===P);ue!==-1&&e.value.splice(ue,1,{...e.value[ue],parent_id:Number(T)})}return te}async function L(P){const T=await Et.unassign(P);if(T.ok){const E=e.value.findIndex(D=>D.id===P);E!==-1&&e.value.splice(E,1,{...e.value[E],parent_id:0})}return T}return{areas:e,isLoading:s.isLoading,error:s.error,currentArea:t,currentAreaDevices:n,currentAreaScripts:a,isLoadingAreaDetail:r.isLoading,errorAreaDetail:r.error,areasById:i,areaTree:o,expandedNodeIds:l,toggleNode:c,isNodeExpanded:u,loadAreas:d,loadAreaDetail:f,clearAreaDetail:h,loadAreaDevices:g,loadAreaScripts:b,createArea:m,renameArea:$,removeArea:y,assignToArea:C,unassignArea:L}}),Zo="sh_fav_areas";function Df(){try{return JSON.parse(localStorage.getItem(Zo)||"[]").map(String)}catch{return[]}}function ui(e){localStorage.setItem(Zo,JSON.stringify(e.map(String)))}const er=gn("favorites",()=>{const e=Y(Df());function t(r){return e.value.includes(String(r))}function n(r){const i=String(r);e.value.includes(i)||(e.value.push(i),ui(e.value))}function a(r){e.value=e.value.filter(i=>i!==String(r)),ui(e.value)}function s(r){return t(r)?(a(r),!1):(n(r),!0)}return{ids:e,has:t,add:n,remove:a,toggle:s}}),Pf=["aria-label"],Qo={__name:"AreaFavoriteButton",props:{areaId:{type:[String,Number],required:!0}},setup(e){const t=e,n=er(),a=Q(()=>n.has(t.areaId));return(s,r)=>(w(),q("button",{class:Lt(["btn-icon area-favorite-btn",{"is-active":a.value,"text-muted":!a.value,"text-warning":a.value}]),type:"button","aria-label":a.value?"Remove bookmark":"Bookmark",onClick:r[0]||(r[0]=Ha(i=>v(n).toggle(e.areaId),["stop"]))},[O("i",{class:Lt(["ph",a.value?"ph-fill ph-bookmark-simple":"ph-bookmark-simple"])},null,2)],10,Pf))}},_t={__name:"AppLoadingState",props:{text:{type:String,default:"Loading"}},setup(e){return(t,n)=>(w(),z(v(zo),{circle:"",label:e.text},null,8,["label"]))}},rt={__name:"AppEmptyState",props:{title:{type:String,default:"Nothing here"},message:{type:String,default:""}},setup(e){return(t,n)=>(w(),z(v(ef),{title:e.title,text:e.message,icon:"ph-package"},{actions:k(()=>[Ua(t.$slots,"action")]),_:3},8,["title","text"]))}},Of={class:"page"},Ff={key:3,class:"area-favorites-list"},Lf=["onClick"],Nf={class:"area-favorite-info"},Mf={class:"area-favorite-title"},Uf={class:"area-favorite-meta"},Bf={key:0,class:"area-favorite-parent"},Vf={class:"area-favorite-actions"},jf={__name:"AreaFavoritesPage",setup(e){const t=wt(),n=er(),a=hn(),s=Q(()=>{const o=new Set(n.ids.map(String));return t.areas.filter(l=>o.has(String(l.id)))});function r(o){if(!o.parent_id)return null;const l=t.areasById[String(o.parent_id)];return(l==null?void 0:l.display_name)||null}function i(o){a.push({name:"area-detail",params:{id:String(o.id)}})}return bt(()=>{t.areas.length===0&&t.loadAreas()}),(o,l)=>{const c=sn("router-link");return w(),q("section",Of,[I(v(xt),{title:"Favorites",kicker:"Areas"},{actions:k(()=>[I(v(me),{variant:"primary"},{default:k(()=>[U(M(s.value.length)+" favorite areas",1)]),_:1})]),_:1}),v(t).isLoading?(w(),z(_t,{key:0,text:"Loading areas"})):v(t).error?(w(),z(pt,{key:1,title:"Areas loading failed",error:v(t).error,retry:v(t).loadAreas},null,8,["error","retry"])):s.value.length===0?(w(),z(rt,{key:2,title:"No favorite areas",message:"Favorite areas from the current client are preserved through localStorage."})):(w(),q("ul",Ff,[(w(!0),q(Pe,null,Wt(s.value,u=>(w(),q("li",{key:u.id,class:"area-favorite-item"},[O("article",{class:"area-favorite-card",onClick:d=>i(u)},[l[2]||(l[2]=O("div",{class:"area-favorite-icon"},[O("i",{class:"ph ph-fill ph-bookmark-simple"})],-1)),O("div",Nf,[O("h2",Mf,M(u.display_name),1),O("p",Uf,[I(v(me),{variant:"secondary"},{default:k(()=>[U(M(u.type),1)]),_:2},1024),O("code",null,M(u.alias),1),r(u)?(w(),q("span",Bf,[l[1]||(l[1]=U(" in ",-1)),I(c,{to:{name:"area-detail",params:{id:String(u.parent_id)}},class:"parent-link",onClick:l[0]||(l[0]=Ha(()=>{},["stop"]))},{default:k(()=>[U(M(r(u)),1)]),_:2},1032,["to"])])):se("",!0)])]),O("div",Vf,[I(Qo,{"area-id":u.id},null,8,["area-id"])])],8,Lf)]))),128))]))])}}},Hf=Ye(jf,[["__scopeId","data-v-f8795944"]]);function Mt(){const e=da();return{has:t=>e.hasPermission(t),hasAny:t=>e.hasAnyPermission(t),permissions:e.permissions}}const Gf=["disabled","aria-expanded"],qf={class:"area-tree-info"},zf={class:"text-muted"},Kf={class:"area-tree-actions"},Wf={key:0,class:"area-tree-children"},Jf={key:1,class:"area-tree-node"},Yf={class:"area-tree-card area-tree-cycle text-danger"},Zf={__name:"AreaTreeNode",props:{area:{type:Object,required:!0},ancestors:{type:Array,default:()=>[]}},setup(e){const t=e,n=hn(),a=wt(),s=Q(()=>a.isNodeExpanded(t.area.id)),r=Q(()=>{var u;return!((u=t.area.children)!=null&&u.length)}),i=Q(()=>t.ancestors.includes(String(t.area.id))),o=Q(()=>[...t.ancestors,String(t.area.id)]);function l(){a.toggleNode(t.area.id)}function c(){n.push({name:"area-detail",params:{id:String(t.area.id)}})}return(u,d)=>{var h;const f=sn("AreaTreeNode",!0);return i.value?(w(),q("li",Jf,[O("article",Yf," Cycle skipped for area ID "+M(e.area.id),1)])):(w(),q("li",{key:0,class:Lt(["area-tree-node",{"is-open":s.value,"is-leaf":r.value}])},[O("article",{class:"area-tree-card",onClick:c},[O("button",{class:Lt(["tree-toggle",{"text-primary":!r.value,"text-muted":r.value}]),type:"button",disabled:r.value,"aria-expanded":s.value,onClick:Ha(l,["stop"])},M(r.value?"·":s.value?"−":"+"),11,Gf),O("div",qf,[O("h2",null,M(e.area.display_name),1),O("p",zf,[I(v(me),{variant:"secondary"},{default:k(()=>[U(M(e.area.type),1)]),_:1}),O("code",null,M(e.area.alias),1)])]),O("div",Kf,[I(Qo,{"area-id":e.area.id},null,8,["area-id"])])]),(h=e.area.children)!=null&&h.length&&s.value?(w(),q("ul",Wf,[(w(!0),q(Pe,null,Wt(e.area.children,g=>(w(),z(f,{key:g.id,area:g,ancestors:o.value},null,8,["area","ancestors"]))),128))])):se("",!0)],2))}}},Qf={class:"page"},Xf={key:3,class:"area-tree"},ep={class:"form-group"},tp={class:"form-group"},np={class:"form-group"},ap={key:0,class:"form-group"},sp={__name:"AreaTreePage",setup(e){const t=wt(),n=mn(),a=Mt(),s=Y(!1),r=Y(!1),i=Y(""),o=Yt({type:"",alias:"",display_name:""});function l(){o.type="",o.alias="",o.display_name="",i.value="",s.value=!0}async function c(){var d;r.value=!0,i.value="";const u=await t.createArea({...o});if(r.value=!1,!u.ok){i.value=((d=u.error)==null?void 0:d.message)||"Failed to create area";return}s.value=!1,n.success({title:"Created",text:"Area created successfully"})}return bt(()=>{t.loadAreas()}),(u,d)=>(w(),q("section",Qf,[I(v(xt),{title:"Tree",kicker:"Areas"},{actions:k(()=>[v(a).has("areas.manage")?(w(),z(v(pe),{key:0,variant:"primary",icon:"ph-plus",onClick:l},{default:k(()=>[...d[5]||(d[5]=[U("Create area",-1)])]),_:1})):se("",!0)]),_:1}),v(t).isLoading?(w(),z(_t,{key:0,text:"Loading areas tree"})):v(t).error?(w(),z(pt,{key:1,title:"Areas loading failed",error:v(t).error,retry:v(t).loadAreas},null,8,["error","retry"])):v(t).areaTree.length===0?(w(),z(rt,{key:2,title:"No areas",message:"No areas found. Create one to get started."})):(w(),q("ul",Xf,[(w(!0),q(Pe,null,Wt(v(t).areaTree,f=>(w(),z(Zf,{key:f.id,area:f},null,8,["area"]))),128))])),I(v(ut),{open:s.value,title:"Create area","onUpdate:open":d[4]||(d[4]=f=>s.value=f)},{footer:k(()=>[I(v(pe),{variant:"secondary",onClick:d[3]||(d[3]=f=>s.value=!1)},{default:k(()=>[...d[6]||(d[6]=[U("Cancel",-1)])]),_:1}),I(v(pe),{variant:"primary",icon:"ph-plus",loading:r.value,onClick:c},{default:k(()=>[...d[7]||(d[7]=[U("Create",-1)])]),_:1},8,["loading"])]),default:k(()=>[O("div",ep,[I(v(Ft),{modelValue:o.type,"onUpdate:modelValue":d[0]||(d[0]=f=>o.type=f),label:"Type",placeholder:"room"},null,8,["modelValue"])]),O("div",tp,[I(v(Ft),{modelValue:o.alias,"onUpdate:modelValue":d[1]||(d[1]=f=>o.alias=f),label:"Alias",placeholder:"kitchen"},null,8,["modelValue"])]),O("div",np,[I(v(Ft),{modelValue:o.display_name,"onUpdate:modelValue":d[2]||(d[2]=f=>o.display_name=f),label:"Display name",placeholder:"Kitchen"},null,8,["modelValue"])]),i.value?(w(),q("div",ap,[I(v(Qe),{variant:"danger"},{default:k(()=>[U(M(i.value),1)]),_:1})])):se("",!0)]),_:1},8,["open"])]))}},rp=Ye(sp,[["__scopeId","data-v-5f02f384"]]),ip={device_name:"name",device_hard_id:"device_id",device_ip:"ip",ip_address:"ip",mac_address:"mac",device_mac:"mac",core_version:"firmware_core_version",type:"device_type"};function op(e){const t={};for(const[n,a]of Object.entries(e||{}))t[ip[n]||n]=a;return t}function Bn(e){return encodeURIComponent(String(e))}function lp(e){var n,a,s;if(!e.ok)return e;const t=((a=(n=e.data)==null?void 0:n.data)==null?void 0:a.devices)||[];return{...e,data:{...e.data,data:{...(s=e.data)==null?void 0:s.data,devices:t.map(op)}}}}const nt={async list(){return lp(await Oe("/api/v1/devices/list"))},status(e,t){return Oe(`/api/v1/devices/id/${Bn(e)}/status`,t)},reboot(e){return Oe(`/api/v1/devices/id/${Bn(e)}/reboot`)},action(e){return Xe("/api/v1/devices/action",e)},scanningSetup(e){return Oe("/api/v1/devices/scanning/setup",{timeoutMs:12e4,...e})},scanningAll(e){return Oe("/api/v1/devices/scanning/all",{timeoutMs:12e4,...e})},setupNewDevice(e){return Xe("/api/v1/devices/setup/new-device",e)},detail(e,t){return Oe(`/api/v1/devices/id/${Bn(e)}`,t)},updateName(e,t){return Xe("/api/v1/devices/update-name",{device_id:e,name:t})},updateDescription(e,t){return Xe("/api/v1/devices/update-description",{device_id:e,description:t})},updateAlias(e,t){return Xe("/api/v1/devices/update-alias",{device_id:e,new_alias:t})},remove(e){return Oe(`/api/v1/devices/id/${Bn(e)}/remove`)},resetup(e){return Xe("/api/v1/devices/resetup",{device_id:e})},reset(e){return Xe("/api/v1/devices/reset",{device_id:e})},unassign(e){return Oe(`/api/v1/devices/id/${Bn(e)}/unassign-from-area`)},placeInArea(e){return Xe("/api/v1/devices/place-in-area",e)}},up=4;function Is(e){return String((e==null?void 0:e.id)||"")}function tr(e,t){return{deviceId:Is(e),status:"idle",message:"",response:null,connectionStatus:(e==null?void 0:e.connection_status)||"unknown",updatedAt:null,...t}}function cp(e,t){var s,r;const a=(((r=(s=t.data)==null?void 0:s.data)==null?void 0:r.device)||{}).device_response||{};return tr(e,{status:"ready",message:a.status||"ok",response:a,connectionStatus:"active",updatedAt:new Date().toISOString()})}function dp(e,t){var s,r,i;const n=((s=t.error)==null?void 0:s.raw)||{},a=((r=n==null?void 0:n.data)==null?void 0:r.connection_status)||(e==null?void 0:e.connection_status)||"unknown";return tr(e,{status:"error",message:((i=t.error)==null?void 0:i.message)||"Device state is unavailable",response:n,connectionStatus:a,updatedAt:new Date().toISOString()})}async function fp(e,t,n){let a=0;const s=Math.max(1,Math.min(t,e.length));async function r(){for(;a{const e=Y([]),t=Y({}),n=Y(0),a=Y(new Set),s=Y(null),r=Y(null),i=Y(null),o=Y(!1),l=Y(null),c=gt(),u=gt(),d=Q(()=>e.value.length),f=Q(()=>V=>a.value.has(String(V)));async function h(){return c.execute(async V=>{var Z,K;const W=await nt.list({signal:V});return W.ok&&(e.value=((K=(Z=W.data)==null?void 0:Z.data)==null?void 0:K.devices)||[],i.value=new Date().toISOString()),W})}function g(V,W){const Z=Is(V);Z&&(t.value={...t.value,[Z]:tr(V,W)})}async function b(V,W,Z){const K=n.value+1;n.value=K,o.value=!0,l.value=null,Z&&(t.value={});const ee=[];for(const fe of V)fe.connection_status==="lost"?g(fe,{status:"skipped",message:"Connection lost",connectionStatus:"lost"}):(g(fe,{status:"loading",message:"Loading"}),ee.push(fe));try{await fp(ee,W.concurrency||up,async fe=>{const Se=await nt.status(fe.id);n.value===K&&(t.value={...t.value,[Is(fe)]:Se.ok?cp(fe,Se):dp(fe,Se)})})}catch(fe){n.value===K&&(l.value={type:"state_loader_error",message:(fe==null?void 0:fe.message)||"Device states loader failed"})}finally{n.value===K&&(o.value=!1)}}async function m(V,W={}){return b(V,W,!1)}async function $(V={}){return b(e.value,V,!0)}async function y(V){const W=String(V);a.value=new Set(a.value).add(W);const Z=await nt.reboot(V),K=new Set(a.value);return K.delete(W),a.value=K,Z}async function S(V){return u.execute(async W=>{var K,ee;const Z=await nt.detail(V,{signal:W});return Z.ok&&(s.value=((ee=(K=Z.data)==null?void 0:K.data)==null?void 0:ee.device)||null),Z})}async function C(V){var ee,fe;const W=await nt.status(V);if(!W.ok)return r.value={ok:!1,error:W.error,channels:[]},W;const K=(((fe=(ee=W.data)==null?void 0:ee.data)==null?void 0:fe.device)||{}).device_response||{};return r.value={ok:!0,channels:K.channels||[],raw:K},W}async function L(V,W){const Z=await nt.updateName(V,W);return Z.ok&&s.value&&(s.value={...s.value,name:W}),Z}async function P(V,W){const Z=await nt.updateDescription(V,W);return Z.ok&&s.value&&(s.value={...s.value,description:W}),Z}async function T(V,W){const Z=await nt.updateAlias(V,W);return Z.ok&&s.value&&(s.value={...s.value,alias:W}),Z}async function E(V){return nt.remove(V)}async function D(V){return nt.resetup(V)}async function te(V){return nt.reset(V)}async function ue(V){const W=await nt.unassign(V);return W.ok&&s.value&&(s.value={...s.value,area_id:null}),W}async function ye(V,W){const Z=await nt.placeInArea({target_id:V,place_in_area_id:W});return Z.ok&&s.value&&(s.value={...s.value,area_id:W}),Z}function we(){s.value=null,r.value=null,u.clear()}return{devices:e,isLoading:c.isLoading,error:c.error,isLoadingStates:o,stateError:l,stateByDeviceId:t,stateRunId:n,rebootingIds:a,lastLoadedAt:i,currentDevice:s,currentDeviceStatus:r,isLoadingDetail:u.isLoading,errorDetail:u.error,total:d,isRebooting:f,loadDevices:h,setDeviceState:g,loadDeviceStates:$,loadStatesFor:m,rebootDevice:y,loadDeviceDetail:S,loadDeviceStatus:C,updateDeviceName:L,updateDeviceDescription:P,updateDeviceAlias:T,removeDevice:E,unassignDevice:ue,assignToArea:ye,resetupDevice:D,resetDevice:te,clearDeviceDetail:we}}),Rt={actionsList(e){return Oe("/api/v1/scripts/actions/list",e)},regularList(e){return Oe("/api/v1/scripts/regular/list",e)},scopesList(e){return Oe("/api/v1/scripts/scopes/list",e)},runAction(e,t={}){return Xe("/api/v1/scripts/actions/run",{alias:e,params:t})},setActionState(e,t){return Oe(`/api/v1/scripts/actions/alias/${encodeURIComponent(e)}/${t?"enable":"disable"}`)},setRegularState(e,t){return Oe(`/api/v1/scripts/regular/alias/${encodeURIComponent(e)}/${t?"enable":"disable"}`)},setScopeState(e,t){return Oe(`/api/v1/scripts/scopes/name/${encodeURIComponent(e)}/${t?"enable":"disable"}`)},scopeCode(e,t){return Oe(`/api/v1/scripts/scopes/name/${encodeURIComponent(e)}`,t)},placeInArea(e){return Xe("/api/v1/scripts/place-in-area",e)},unassign(e){return Oe(`/api/v1/scripts/id/${encodeURIComponent(String(e))}/unassign-from-area`)}},yn=gn("scripts",()=>{const e=Y([]),t=Y([]),n=Y([]),a=Y(new Set),s=Y(null),r=Y(""),i=gt(),o=gt(),l=gt(),c=gt(),u=Q(()=>e.value.length),d=Q(()=>t.value.length),f=Q(()=>n.value.length),h=Q(()=>V=>a.value.has(V)),g=Q(()=>V=>e.value.find(W=>W.alias===V)||null),b=Q(()=>V=>t.value.find(W=>W.alias===V)||null),m=Q(()=>V=>n.value.find(W=>W.name===V)||null),$=Q(()=>V=>e.value.filter(W=>W.scope===V)),y=Q(()=>V=>t.value.filter(W=>W.scope===V));async function S(){return i.execute(async V=>{var Z,K;const W=await Rt.actionsList({signal:V});return W.ok&&(e.value=((K=(Z=W.data)==null?void 0:Z.data)==null?void 0:K.scripts)||[]),W})}async function C(){return o.execute(async V=>{var Z,K;const W=await Rt.regularList({signal:V});return W.ok&&(t.value=((K=(Z=W.data)==null?void 0:Z.data)==null?void 0:K.scripts)||[]),W})}async function L(){return l.execute(async V=>{var Z,K;const W=await Rt.scopesList({signal:V});return W.ok&&(n.value=((K=(Z=W.data)==null?void 0:Z.data)==null?void 0:K.scopes)||[]),W})}async function P(V,W={}){var ee,fe,Se,Ee,be,Me;a.value=new Set(a.value).add(V),s.value=null;const Z=await Rt.runAction(V,W),K=new Set(a.value);return K.delete(V),a.value=K,Z.ok?(s.value={alias:V,ok:!0,data:(Se=(fe=(ee=Z.data)==null?void 0:ee.data)==null?void 0:fe.return)==null?void 0:Se.result,execTime:(Me=(be=(Ee=Z.data)==null?void 0:Ee.data)==null?void 0:be.return)==null?void 0:Me.exec_time},Z):(s.value={alias:V,ok:!1,error:Z.error},Z)}async function T(V,W){const Z=await Rt.setActionState(V,W);if(Z.ok){const K=e.value.findIndex(ee=>ee.alias===V);K!==-1&&(e.value[K]={...e.value[K],state:W?"enabled":"disabled"})}return Z}async function E(V,W){const Z=await Rt.setRegularState(V,W);if(Z.ok){const K=t.value.findIndex(ee=>ee.alias===V);K!==-1&&(t.value[K]={...t.value[K],state:W?"enabled":"disabled"})}return Z}async function D(V,W){const Z=await Rt.setScopeState(V,W);if(Z.ok){const K=n.value.findIndex(ee=>ee.name===V);K!==-1&&(n.value[K]={...n.value[K],state:W?"enabled":"disabled"})}return Z}async function te(V,W){const Z=await Rt.placeInArea({target_id:V,place_in_area_id:W});if(Z.ok){const K=e.value.findIndex(fe=>fe.id===V);K!==-1&&e.value.splice(K,1,{...e.value[K],area_id:W});const ee=t.value.findIndex(fe=>fe.id===V);ee!==-1&&t.value.splice(ee,1,{...t.value[ee],area_id:W})}return Z}async function ue(V){const W=await Rt.unassign(V);if(W.ok){const Z=e.value.findIndex(ee=>ee.id===V);Z!==-1&&e.value.splice(Z,1,{...e.value[Z],area_id:null});const K=t.value.findIndex(ee=>ee.id===V);K!==-1&&t.value.splice(K,1,{...t.value[K],area_id:null})}return W}async function ye(V){return c.execute(async W=>{const Z=await Rt.scopeCode(V,{signal:W});return Z.ok&&(r.value=typeof Z.data=="string"?Z.data:""),Z})}function we(){r.value="",c.clear()}return{actions:e,regular:t,scopes:n,isLoadingActions:i.isLoading,isLoadingRegular:o.isLoading,isLoadingScopes:l.isLoading,errorActions:i.error,errorRegular:o.error,errorScopes:l.error,runningAliases:a,lastRunResult:s,currentScopeCode:r,isLoadingScopeCode:c.isLoading,errorScopeCode:c.error,totalActions:u,totalRegular:d,totalScopes:f,isRunning:h,actionByAlias:g,regularByAlias:b,scopeByName:m,actionsByScope:$,regularByScope:y,loadActions:S,loadRegular:C,loadScopes:L,runScript:P,setActionState:T,setRegularState:E,setScopeState:D,assignToArea:te,unassignFromArea:ue,loadScopeCode:ye,clearScopeCode:we}});function nr(){const e=wt(),t=Y(""),n=Q(()=>e.areas.filter(c=>String(c.id)!==String(t.value)).map(c=>({value:String(c.id),label:`${c.display_name} (${c.type})`}))),a=Y(!1),s=Y(""),r=Y(!1),i=Y("");function o(c){s.value=c?String(c):"",t.value=c?String(c):"",i.value="",a.value=!0}async function l(c,u){var f;if(!c||!u)return;r.value=!0,i.value="";const d=await u(c,s.value);return r.value=!1,d.ok?(a.value=!1,d):(i.value=((f=d.error)==null?void 0:f.message)||"Failed to assign area",d)}return{areaOptions:n,showAssignModal:a,selectedAreaId:s,assignLoading:r,assignError:i,openAssign:o,submitAssignCore:l}}const pp={key:1,class:"text-muted",style:{"font-size":"13px"}},vp={__name:"AreaBadgeLink",props:{area:{type:Object,default:null},areaId:{type:[Number,String],default:null}},setup(e){return(t,n)=>{const a=sn("router-link");return e.area?(w(),z(a,{key:0,to:{name:"area-detail",params:{id:e.area.id}},class:"area-link"},{default:k(()=>[I(v(me),{variant:"info"},{default:k(()=>[U(M(e.area.display_name),1)]),_:1})]),_:1},8,["to"])):e.areaId?(w(),q("span",pp,"Area ID: "+M(e.areaId),1)):se("",!0)}}},ar=Ye(vp,[["__scopeId","data-v-91230b95"]]),gp={class:"devices-panel"},hp={class:"block-title"},mp={key:0,class:"area-assigned"},yp={class:"area-card-info"},_p={class:"text-muted"},bp={__name:"AreaAssignSection",props:{item:{type:Object,default:null},areaId:{type:[Number,String],default:null},title:{type:String,default:"Area"},emptyMessage:{type:String,default:"This item is not assigned to any area."}},emits:["assign"],setup(e,{emit:t}){const n=e,a=t,s=wt(),r=Q(()=>{var o;const i=n.areaId!=null?n.areaId:(o=n.item)==null?void 0:o.area_id;return i&&s.areasById[String(i)]||null});return(i,o)=>{const l=sn("router-link");return w(),q("div",gp,[O("div",hp,M(e.title),1),r.value?(w(),q("div",mp,[I(l,{to:{name:"area-detail",params:{id:r.value.id}},class:"area-card"},{default:k(()=>[o[1]||(o[1]=O("div",{class:"area-card-icon text-primary"},[O("i",{class:"ph ph-map-trifold"})],-1)),O("div",yp,[O("strong",null,M(r.value.display_name),1),O("small",_p,M(r.value.type)+" — "+M(r.value.alias),1)])]),_:1},8,["to"])])):(w(),z(rt,{key:1,title:"Not assigned",message:e.emptyMessage},{action:k(()=>[Ua(i.$slots,"action",{},()=>[I(v(pe),{variant:"primary",icon:"ph-map-pin",onClick:o[0]||(o[0]=c=>a("assign"))},{default:k(()=>[...o[2]||(o[2]=[U("Assign to area",-1)])]),_:1})],!0)]),_:3},8,["message"]))])}}},sr=Ye(bp,[["__scopeId","data-v-92cae82c"]]),wp={class:"device-channels-state"},Sp={key:3,class:"channels-grid"},kp={key:0,class:"ph ph-caret-up"},Ap={key:1,class:"ph ph-caret-down"},xp={key:0,class:"ph ph-caret-up"},Cp={key:1,class:"ph ph-caret-down"},Ep={key:0,class:"ph ph-caret-up"},Rp={key:1,class:"ph ph-caret-down"},Tp={key:0,class:"ph ph-caret-up"},$p={key:1,class:"ph ph-caret-down"},Ip={key:0,class:"ph ph-caret-up"},Dp={key:1,class:"ph ph-caret-down"},Pp={key:0,class:"raw-json text-muted"},Op={__name:"DeviceChannelsState",props:{deviceType:{type:String,default:""},response:{type:Object,default:null},loading:{type:Boolean,default:!1},error:{type:[String,Object],default:null},connectionStatus:{type:String,default:"unknown"}},setup(e){const t=e,n=Q(()=>t.connectionStatus==="lost"),a=Q(()=>{var g;return((g=t.response)==null?void 0:g.channels)||[]}),s=Q(()=>{var g;return((g=t.response)==null?void 0:g.sensors)||{}}),r=Q(()=>{var g,b;return((b=(g=t.response)==null?void 0:g.hatch)==null?void 0:b.state)||"—"}),i=Q(()=>{var g,b;return((b=(g=t.response)==null?void 0:g.hatch)==null?void 0:b.position_pct)??"—"}),o=Q(()=>String(r.value).includes("open")?"warning":"primary"),l=Q(()=>String(r.value).includes("open")),c=Q(()=>{var g;return((g=t.response)==null?void 0:g.status)==="ok"}),u=Q(()=>{if(!t.response)return"";try{return JSON.stringify(t.response).slice(0,200)}catch{return""}}),d=Q(()=>{var g;return c.value?t.deviceType==="relay"||t.deviceType==="button"?a.value.length>0:t.deviceType==="sensor"?Object.keys(s.value).length>0:t.deviceType==="hatch"?!!((g=t.response)!=null&&g.hatch):!1:!1});function f(g){return g.id??g.channel}function h(g){return{enabled:"success",disabled:"secondary",mute:"primary",waiting:"warning",error:"danger"}[g]||"secondary"}return(g,b)=>(w(),q("div",wp,[e.loading?(w(),z(v(zo),{key:0,circle:"",size:"sm",label:"Loading state"})):n.value?(w(),z(v(me),{key:1,variant:"danger",size:"sm"},{default:k(()=>[...b[0]||(b[0]=[O("i",{class:"ph ph-wifi-slash"},null,-1),U(" Offline ",-1)])]),_:1})):e.error||!c.value?(w(),z(v(me),{key:2,variant:"danger",size:"sm"},{default:k(()=>[b[1]||(b[1]=O("i",{class:"ph ph-warning-octagon"},null,-1)),typeof e.error=="string"?(w(),q(Pe,{key:0},[U(M(e.error),1)],64)):(w(),q(Pe,{key:1},[U("Error")],64))]),_:1})):d.value?(w(),q("div",Sp,[e.deviceType==="relay"?(w(!0),q(Pe,{key:0},Wt(a.value,m=>(w(),z(v(me),{key:f(m),variant:m.state==="on"||m.state===!0?"success":"secondary",size:"sm"},{default:k(()=>[a.value.length>1?(w(),q(Pe,{key:0},[U(M(f(m))+": ",1)],64)):se("",!0),O("b",null,M(m.state=="off"?"OFF":"ON"),1)]),_:2},1032,["variant"]))),128)):e.deviceType==="button"?(w(!0),q(Pe,{key:1},Wt(a.value,m=>(w(),z(v(me),{key:f(m),variant:h(m.indicator),size:"sm"},{default:k(()=>[U(M(f(m))+": ",1),O("b",null,M(m.indicator),1)]),_:2},1032,["variant"]))),128)):e.deviceType==="sensor"?(w(),q(Pe,{key:2},[s.value.radar?(w(),z(v(me),{key:0,variant:"primary",size:"sm"},{default:k(()=>[O("i",{class:Lt(["ph",s.value.radar.presence?"ph-user-square":"ph-square"])},null,2),s.value.radar.presence?(w(),q(Pe,{key:0},[U(M(s.value.radar.activity_score)+" ",1),s.value.radar.activity_score_dynamics==="increasing"?(w(),q("i",kp)):s.value.radar.activity_score_dynamics==="decreasing"?(w(),q("i",Ap)):se("",!0)],64)):se("",!0)]),_:1})):se("",!0),s.value.temperature?(w(),z(v(me),{key:1,variant:"primary",size:"sm"},{default:k(()=>[b[2]||(b[2]=O("i",{class:"ph ph-thermometer"},null,-1)),U(" "+M(s.value.temperature.current)+"°C ",1),s.value.temperature.dynamics==="increasing"?(w(),q("i",xp)):s.value.temperature.dynamics==="decreasing"?(w(),q("i",Cp)):se("",!0)]),_:1})):se("",!0),s.value.humidity?(w(),z(v(me),{key:2,variant:"primary",size:"sm"},{default:k(()=>[b[3]||(b[3]=O("i",{class:"ph ph-drop-half-bottom"},null,-1)),U(" "+M(s.value.humidity.current)+"% ",1),s.value.humidity.dynamics==="increasing"?(w(),q("i",Ep)):s.value.humidity.dynamics==="decreasing"?(w(),q("i",Rp)):se("",!0)]),_:1})):se("",!0),s.value.pressure?(w(),z(v(me),{key:3,variant:"primary",size:"sm"},{default:k(()=>[U(M(s.value.pressure.current)+"hpa ",1),s.value.pressure.dynamics==="increasing"?(w(),q("i",Tp)):s.value.pressure.dynamics==="decreasing"?(w(),q("i",$p)):se("",!0)]),_:1})):se("",!0),s.value.light?(w(),z(v(me),{key:4,variant:"primary",size:"sm"},{default:k(()=>[b[4]||(b[4]=O("i",{class:"ph ph-lightbulb"},null,-1)),U(" "+M(s.value.light.percent)+"% ",1)]),_:1})):se("",!0),s.value.microphone?(w(),z(v(me),{key:5,variant:"primary",size:"sm"},{default:k(()=>[b[5]||(b[5]=O("i",{class:"ph ph-ear"},null,-1)),U(" "+M(s.value.microphone.current_noise)+"dBi ",1),s.value.microphone.noise_dynamics==="increasing"?(w(),q("i",Ip)):s.value.microphone.noise_dynamics==="decreasing"?(w(),q("i",Dp)):se("",!0)]),_:1})):se("",!0)],64)):e.deviceType==="hatch"?(w(),z(v(me),{key:3,variant:o.value,size:"sm"},{default:k(()=>[U(M(r.value)+" ",1),l.value?(w(),q(Pe,{key:0},[U(" - "+M(i.value)+"%",1)],64)):se("",!0)]),_:1},8,["variant"])):(w(),q(Pe,{key:4},[b[6]||(b[6]=O("span",{class:"unknown-type text-muted"},"Unknown type",-1)),u.value?(w(),q("pre",Pp,M(u.value),1)):se("",!0)],64))])):(w(),z(v(me),{key:4,variant:"secondary",size:"sm"},{default:k(()=>[...b[7]||(b[7]=[U("No data",-1)])]),_:1}))]))}},Xo=Ye(Op,[["__scopeId","data-v-08541c71"]]),Fp={class:"device-cell"},Lp=["innerHTML"],Np={class:"device-info"},Mp={class:"device-name-row"},Up=["title"],Bp={class:"text-muted"},Vp={__name:"DeviceTable",props:{devices:{type:Array,required:!0},showActions:{type:Boolean,default:!0},caption:{type:String,default:"Devices"}},setup(e){const t=e,n=Wa(),a=mn(),s=Mt(),r={relay:'',button:'',sensor:''},i=Q(()=>{const d=[{key:"device",label:"Device"},{key:"state",label:"State"}];return t.showActions&&d.push({key:"actions",label:"Actions"}),d});function o(d){return r[d]||r.relay}function l(d){return{active:"success",removed:"danger",freezed:"warning",setup:"primary"}[d]||"secondary"}function c(d){return n.stateByDeviceId[String(d.id)]||{status:"idle",message:"Not loaded",connectionStatus:d.connection_status||"unknown"}}async function u(d){var g;const f=t.devices.find(b=>String(b.id)===String(d)),h=await n.rebootDevice(d);h.ok?a.success({title:"Rebooting",text:`Device ${(f==null?void 0:f.name)||(f==null?void 0:f.alias)||"#"+d} is rebooting`}):a.error({title:"Reboot failed",text:((g=h.error)==null?void 0:g.message)||"Failed to reboot device"})}return(d,f)=>{const h=sn("router-link");return w(),z(v(Pn),{columns:i.value,rows:e.devices,caption:e.caption},ao({"cell-device":k(({row:g})=>[I(h,{to:{name:"device-detail",params:{id:String(g.id)}},class:"device-link"},{default:k(()=>[O("div",Fp,[O("div",{class:"device-icon text-primary",innerHTML:o(g.device_type)},null,8,Lp),O("div",Np,[O("div",Mp,[O("strong",null,M(g.name||g.alias||`Device #${g.id}`),1),g.status&&g.status!=="active"?(w(),z(v(me),{key:0,variant:l(g.status),size:"sm"},{default:k(()=>[U(M(g.status),1)]),_:2},1032,["variant"])):se("",!0),O("span",{class:Lt(["status-dot",{"text-success":g.connection_status==="active","text-danger":g.connection_status!=="active"}]),"aria-hidden":"true",title:g.connection_status==="active"?"Online":"Offline"},null,10,Up)]),O("small",Bp,M(g.alias)+" — "+M(g.device_ip||"—"),1)])])]),_:2},1032,["to"])]),"cell-state":k(({row:g})=>[I(Xo,{"device-type":g.device_type,response:c(g).response,loading:c(g).status==="loading",error:c(g).status==="error"?c(g).message:null,"connection-status":g.connection_status||"unknown"},null,8,["device-type","response","loading","error","connection-status"])]),_:2},[e.showActions&&v(s).has("devices.control")?{name:"cell-actions",fn:k(({row:g})=>[I(v(pe),{variant:"warning",icon:"ph-arrow-clockwise",size:"sm",loading:v(n).isRebooting(g.id),onClick:b=>u(g.id)},{default:k(()=>[...f[0]||(f[0]=[U(" Reboot ",-1)])]),_:1},8,["loading","onClick"])]),key:"0"}:void 0]),1032,["columns","rows","caption"])}}},el=Ye(Vp,[["__scopeId","data-v-e9714d75"]]),jp={class:"scope-name"},Hp={key:1,class:"muted"},Gp={key:1,class:"muted"},qp={__name:"ScriptTable",props:{scripts:{type:Array,required:!0},scriptType:{type:String,default:"regular"},showArea:{type:Boolean,default:!1},showScope:{type:Boolean,default:!0},showFilename:{type:Boolean,default:!0},showActions:{type:Boolean,default:!0},caption:{type:String,default:"Scripts"}},setup(e){const t=e,n=yn(),a=wt(),s=Mt(),r=Q(()=>{const u={};for(const d of a.areas)u[d.id]=d;return u});function i(u){var d;return u.area_id?((d=r.value[u.area_id])==null?void 0:d.display_name)||`Area ${u.area_id}`:null}function o(u){const d=u.type||t.scriptType;return d==="action"?"actions":d==="scope"?"scopes":d}const l=Q(()=>{const u=[{key:"alias",label:"Alias"},{key:"name",label:"Name"}];return t.showScope&&u.push({key:"scope",label:"Scope"}),t.showArea&&u.push({key:"area",label:"Area"}),u.push({key:"state",label:"State"}),t.showFilename&&u.push({key:"filename",label:"File"}),t.showActions&&u.push({key:"actions",label:"Actions"}),u});function c(u,d,f){const h=f.type||t.scriptType;h==="action"?n.setActionState(u,d):h==="regular"&&n.setRegularState(u,d)}return(u,d)=>{const f=sn("router-link");return w(),z(v(Pn),{columns:l.value,rows:e.scripts,caption:e.caption},ao({"cell-alias":k(({row:h})=>[I(f,{to:{name:"script-detail",params:{type:o(h),id:h.alias}},class:"script-link"},{default:k(()=>[U(M(h.alias),1)]),_:2},1032,["to"])]),"cell-scope":k(({row:h})=>[h.scope?(w(),z(f,{key:0,to:{name:"script-detail",params:{type:"scopes",id:h.scope}},class:"scope-link"},{default:k(()=>[d[0]||(d[0]=O("span",{class:"scope-label"},"Scope",-1)),O("span",jp,M(h.scope),1),d[1]||(d[1]=O("i",{class:"ph ph-arrow-right"},null,-1))]),_:2},1032,["to"])):(w(),q("span",Hp,"—"))]),"cell-area":k(({row:h})=>[h.area_id?(w(),z(v(me),{key:0,variant:"primary"},{default:k(()=>[U(M(i(h)),1)]),_:2},1024)):(w(),q("span",Gp,"—"))]),"cell-state":k(({row:h})=>[I(v(me),{variant:h.state==="enabled"?"success":"secondary"},{default:k(()=>[U(M(h.state),1)]),_:2},1032,["variant"])]),_:2},[e.showActions&&v(s).has("scripts.edit")?{name:"cell-actions",fn:k(({row:h})=>[h.state==="enabled"?(w(),z(v(pe),{key:0,variant:"secondary",icon:"ph-pause",onClick:g=>c(h.alias,!1,h)},{default:k(()=>[...d[2]||(d[2]=[U(" Disable ",-1)])]),_:1},8,["onClick"])):(w(),z(v(pe),{key:1,variant:"primary",icon:"ph-play",onClick:g=>c(h.alias,!0,h)},{default:k(()=>[...d[3]||(d[3]=[U(" Enable ",-1)])]),_:1},8,["onClick"]))]),key:"0"}:void 0]),1032,["columns","rows","caption"])}}},tl=Ye(qp,[["__scopeId","data-v-1ead75a7"]]),zp={class:"page-actions-dropdown"},Kp=["aria-expanded","onClick"],rr={__name:"PageActionsDropdown",props:{items:{type:Array,required:!0}},setup(e){return(t,n)=>(w(),q("div",zp,[I(v(Xd),Ao({items:e.items},t.$attrs),{trigger:k(({toggle:a,open:s})=>[O("button",{class:"btn-icon",type:"button","aria-label":"Actions","aria-expanded":s?"true":"false",onClick:a},[...n[0]||(n[0]=[O("i",{class:"ph ph-dots-three-vertical"},null,-1)])],8,Kp)]),_:1},16,["items"])]))}},Wp={class:"area-grid"},Jp=["innerHTML"],Yp={key:1},Zp={class:"script-meta"},Qp={key:2},Xp={__name:"ActionScriptsGrid",props:{scripts:{type:Array,required:!0},showAreaBadge:{type:Boolean,default:!1}},emits:["run-success"],setup(e,{emit:t}){const n=e,a=t,s=hn(),r=yn(),i=wt(),o=mn(),l=Mt();function c(f){return!f.area_id||!n.showAreaBadge?null:i.areas.find(h=>h.id===f.area_id)||null}async function u(f){var g,b;const h=await r.runScript(f);h!=null&&h.ok?(o.success({title:`Ran ${f}`,text:(g=r.lastRunResult)!=null&&g.execTime?`Exec time: ${r.lastRunResult.execTime}`:void 0}),a("run-success",{alias:f})):o.error({title:`Failed ${f}`,text:((b=h==null?void 0:h.error)==null?void 0:b.message)||"Unknown error"})}function d(f){s.push({name:"script-detail",params:{type:"actions",id:f}})}return(f,h)=>(w(),q("div",Wp,[(w(!0),q(Pe,null,Wt(e.scripts,g=>(w(),z(v(Jd),{key:g.alias,title:g.name,onClick:b=>d(g.alias)},{default:k(()=>[g.icon?(w(),q("div",{key:0,innerHTML:g.icon,class:"script-icon"},null,8,Jp)):se("",!0),g.description?(w(),q("p",Yp,M(g.description),1)):se("",!0),O("div",Zp,[I(v(me),{variant:g.state==="enabled"?"success":"secondary"},{default:k(()=>[U(M(g.state),1)]),_:2},1032,["variant"]),g.scope?(w(),z(v(me),{key:0,variant:"primary"},{default:k(()=>[U(M(g.scope),1)]),_:2},1024)):se("",!0),e.showAreaBadge&&c(g)?(w(),z(v(me),{key:1,variant:"primary"},{default:k(()=>[U(M(c(g).display_name),1)]),_:2},1024)):se("",!0)]),g.created_by||g.author?(w(),q("small",Qp,M(g.created_by||g.author),1)):se("",!0)]),actions:k(()=>[v(l).has("scripts.run")?(w(),z(v(pe),{key:0,variant:"primary",icon:"ph-play",loading:v(r).isRunning(g.alias),disabled:g.state!=="enabled",onClick:Ha(b=>u(g.alias),["stop"])},{default:k(()=>[...h[0]||(h[0]=[U(" Run ",-1)])]),_:1},8,["loading","disabled","onClick"])):se("",!0)]),_:2},1032,["title","onClick"]))),128))]))}},nl=Ye(Xp,[["__scopeId","data-v-aeab265d"]]),ev={class:"page"},tv={key:3},nv={class:"area-meta"},av={class:"actions-panel"},sv={class:"block-title"},rv={class:"devices-panel"},iv={class:"block-title"},ov={class:"scripts-panel"},lv={class:"block-title"},uv={class:"form-group"},cv={key:0,class:"form-group"},dv={key:1,class:"form-group"},fv={key:2,class:"form-group"},pv={key:0,class:"form-group"},vv={key:0,class:"form-group"},gv={__name:"AreaDetailPage",setup(e){const t=Ka(),n=hn(),a=wt(),s=Wa(),r=er();yn();const i=mn(),o=Mt(),{showAssignModal:l,selectedAreaId:c,assignLoading:u,assignError:d,openAssign:f,submitAssignCore:h}=nr(),g=Q(()=>a.areasById[String(t.params.id)]||null),b=Q(()=>g.value?r.has(g.value.id):!1),m=Q(()=>{var A;const R=[];return o.has("areas.manage")&&(R.push({label:"Rename",icon:"ph-pencil",onSelect:fe}),((A=g.value)==null?void 0:A.parent_id)>0?R.push({label:"Change parent area",icon:"ph-map-pin",onSelect:Me},{label:"Unassign from parent",icon:"ph-x-circle",onSelect:je}):R.push({label:"Assign to area",icon:"ph-map-pin",onSelect:Me})),R.push({label:b.value?"Remove bookmark":"Bookmark",icon:b.value?"ph-fill ph-bookmark-simple":"ph-bookmark-simple",onSelect:()=>{var X;return r.toggle((X=g.value)==null?void 0:X.id)}}),o.has("areas.manage")&&R.push({label:"Remove",icon:"ph-trash",danger:!0,onSelect:Ee}),R}),$=Q(()=>!g.value||g.value.parent_id<=0?null:a.areasById[String(g.value.parent_id)]||null),y=Q(()=>a.currentAreaScripts.filter(R=>R.type==="action")),S=Q(()=>a.currentAreaScripts.filter(R=>R.type!=="action")),C=Q(()=>{if(!g.value)return!1;const R=!g.value.parent_id||g.value.parent_id<=0,A=a.areas.filter(X=>!X.parent_id||X.parent_id<=0).length;return R&&A===1});function L(R){const A=new Set,X=[R];for(;X.length;){const p=X.shift(),_=a.areas.filter(x=>x.parent_id===p);for(const x of _)A.add(x.id),X.push(x.id)}return A}const P=Q(()=>{if(!g.value)return[];const R=new Set([g.value.id,...L(g.value.id)]);return a.areas.filter(A=>!R.has(A.id)).map(A=>({value:String(A.id),label:`${A.display_name} (${A.type})`}))}),T=Y(!1),E=Y(!1),D=Y(""),te=Yt({areaId:null,display_name:""}),ue=Y(!1),ye=Y(""),we=Y(!1),V=Y(""),W=Y(!1),Z=Y(""),K=Y(!1),ee=Y("");function fe(){g.value&&(te.areaId=g.value.id,te.display_name=g.value.display_name,D.value="",T.value=!0)}async function Se(){var A;E.value=!0,D.value="";const R=await a.renameArea(te.areaId,te.display_name);if(E.value=!1,!R.ok){D.value=((A=R.error)==null?void 0:A.message)||"Failed to rename area";return}T.value=!1,i.success({title:"Renamed",text:"Area renamed successfully"})}function Ee(){g.value&&(ye.value=`Are you sure you want to remove area "${g.value.display_name}"?`,V.value="",ue.value=!0)}async function be(){var A;if(!g.value)return;we.value=!0,V.value="";const R=await a.removeArea(g.value.id);if(we.value=!1,!R.ok){V.value=((A=R.error)==null?void 0:A.message)||"Failed to remove area";return}ue.value=!1,i.success({title:"Removed",text:"Area removed successfully"}),n.push({name:"areas-tree"})}function Me(){var R;f(((R=g.value)==null?void 0:R.parent_id)>0?g.value.parent_id:"")}async function Ve(){var X;const R=(X=g.value)==null?void 0:X.id,A=await h(R,(p,_)=>a.assignToArea(p,_));A!=null&&A.ok&&i.success({title:"Assigned",text:"Area assigned successfully"})}function je(){g.value&&(Z.value=`Are you sure you want to unassign area "${g.value.display_name}" from its parent?`,ee.value="",W.value=!0)}async function $e(){var A;if(!g.value)return;K.value=!0,ee.value="";const R=await a.unassignArea(g.value.id);if(K.value=!1,!R.ok){ee.value=((A=R.error)==null?void 0:A.message)||"Failed to unassign area";return}W.value=!1,i.success({title:"Unassigned",text:"Area unassigned from parent successfully"})}async function N(){a.currentAreaDevices.length>0&&await s.loadStatesFor(a.currentAreaDevices)}async function ae(){const R=t.params.id;R&&(a.areas.length===0&&await a.loadAreas(),a.areasById[String(R)]&&(await a.loadAreaDetail(R),await N()))}return bt(()=>{ae()}),ua(()=>{a.clearAreaDetail()}),(R,A)=>(w(),q("section",ev,[v(a).isLoading||v(a).isLoadingAreaDetail?(w(),z(_t,{key:0,text:"Loading area"})):v(a).error&&!v(a).areas.length?(w(),z(pt,{key:1,title:"Areas loading failed",error:v(a).error,retry:ae},null,8,["error"])):v(a).errorAreaDetail?(w(),z(pt,{key:2,title:"Area loading failed",error:v(a).errorAreaDetail,retry:ae},null,8,["error"])):g.value?(w(),q("div",tv,[I(v(xt),{title:g.value.display_name,kicker:"Area"},{actions:k(()=>[I(rr,{items:m.value},null,8,["items"])]),_:1},8,["title"]),O("div",nv,[I(v(me),{variant:"secondary"},{default:k(()=>[U(M(g.value.type),1)]),_:1}),O("code",null,M(g.value.alias),1),I(ar,{area:$.value,areaId:g.value.parent_id},null,8,["area","areaId"])]),O("div",av,[O("div",sv,"Actions ("+M(y.value.length)+")",1),y.value.length===0?(w(),z(rt,{key:0,title:"No actions",message:"No action scripts assigned to this area."})):(w(),z(nl,{key:1,scripts:y.value,onRunSuccess:N},null,8,["scripts"]))]),O("div",rv,[O("div",iv,"Devices ("+M(v(a).currentAreaDevices.length)+")",1),v(a).currentAreaDevices.length===0?(w(),z(rt,{key:0,title:"No devices",message:"No devices assigned to this area."})):(w(),z(el,{key:1,devices:v(a).currentAreaDevices,caption:"Area devices"},null,8,["devices"]))]),I(sr,{areaId:g.value.parent_id>0?g.value.parent_id:null,title:"Parent area",emptyMessage:"This area is not assigned to any parent area.",onAssign:Me},{action:k(()=>[v(o).has("areas.manage")?(w(),z(v(pe),{key:0,variant:"primary",icon:"ph-map-pin",onClick:Me},{default:k(()=>[U(M(g.value.parent_id>0?"Change parent area":"Assign to area"),1)]),_:1})):se("",!0)]),_:1},8,["areaId"]),O("div",ov,[O("div",lv,"Regular scripts ("+M(S.value.length)+")",1),S.value.length===0?(w(),z(rt,{key:0,title:"No regular scripts",message:"No regular scripts assigned to this area."})):(w(),z(tl,{key:1,scripts:S.value,scriptType:"regular",showArea:!1,showActions:!1,showFilename:!1,caption:"Area regular scripts"},null,8,["scripts"]))])])):(w(),z(rt,{key:4,title:"Area not found",message:"The requested area does not exist."})),I(v(ut),{open:T.value,title:"Rename area","onUpdate:open":A[2]||(A[2]=X=>T.value=X)},{footer:k(()=>[I(v(pe),{variant:"secondary",onClick:A[1]||(A[1]=X=>T.value=!1)},{default:k(()=>[...A[10]||(A[10]=[U("Cancel",-1)])]),_:1}),I(v(pe),{variant:"primary",icon:"ph-check",loading:E.value,onClick:Se},{default:k(()=>[...A[11]||(A[11]=[U("Rename",-1)])]),_:1},8,["loading"])]),default:k(()=>[O("div",uv,[I(v(Ft),{modelValue:te.display_name,"onUpdate:modelValue":A[0]||(A[0]=X=>te.display_name=X),label:"Display name"},null,8,["modelValue"])]),D.value?(w(),q("div",cv,[I(v(Qe),{variant:"danger"},{default:k(()=>[U(M(D.value),1)]),_:1})])):se("",!0)]),_:1},8,["open"]),I(v(ut),{open:v(l),title:"Assign to parent area","onUpdate:open":A[5]||(A[5]=X=>l.value=X)},{footer:k(()=>[I(v(pe),{variant:"secondary",onClick:A[4]||(A[4]=X=>l.value=!1)},{default:k(()=>[...A[13]||(A[13]=[U("Cancel",-1)])]),_:1}),C.value?se("",!0):(w(),z(v(pe),{key:0,variant:"primary",icon:"ph-check",loading:v(u),onClick:Ve},{default:k(()=>[...A[14]||(A[14]=[U(" Assign ",-1)])]),_:1},8,["loading"]))]),default:k(()=>[C.value?se("",!0):(w(),z(v(Qs),{key:0,modelValue:v(c),"onUpdate:modelValue":A[3]||(A[3]=X=>Ue(c)?c.value=X:null),label:"Parent area",options:P.value,icon:"ph-map-trifold"},null,8,["modelValue","options"])),C.value?(w(),q("div",dv,[I(v(Qe),{variant:"warning"},{default:k(()=>[...A[12]||(A[12]=[U(" This is the last root area and cannot be assigned as a child. At least one root area must remain. ",-1)])]),_:1})])):se("",!0),v(d)?(w(),q("div",fv,[I(v(Qe),{variant:"danger"},{default:k(()=>[U(M(v(d)),1)]),_:1})])):se("",!0)]),_:1},8,["open"]),I(v(ut),{open:W.value,title:"Unassign from parent","onUpdate:open":A[7]||(A[7]=X=>W.value=X)},{footer:k(()=>[I(v(pe),{variant:"secondary",onClick:A[6]||(A[6]=X=>W.value=!1)},{default:k(()=>[...A[15]||(A[15]=[U("Cancel",-1)])]),_:1}),I(v(pe),{variant:"warning",icon:"ph-x-circle",loading:K.value,onClick:$e},{default:k(()=>[...A[16]||(A[16]=[U(" Unassign ",-1)])]),_:1},8,["loading"])]),default:k(()=>[O("p",null,M(Z.value),1),ee.value?(w(),q("div",pv,[I(v(Qe),{variant:"danger"},{default:k(()=>[U(M(ee.value),1)]),_:1})])):se("",!0)]),_:1},8,["open"]),I(v(ut),{open:ue.value,title:"Remove area","onUpdate:open":A[9]||(A[9]=X=>ue.value=X)},{footer:k(()=>[I(v(pe),{variant:"secondary",onClick:A[8]||(A[8]=X=>ue.value=!1)},{default:k(()=>[...A[17]||(A[17]=[U("Cancel",-1)])]),_:1}),I(v(pe),{variant:"danger",icon:"ph-trash",loading:we.value,onClick:be},{default:k(()=>[...A[18]||(A[18]=[U(" Remove ",-1)])]),_:1},8,["loading"])]),default:k(()=>[O("p",null,M(ye.value),1),V.value?(w(),q("div",vv,[I(v(Qe),{variant:"danger"},{default:k(()=>[U(M(V.value),1)]),_:1})])):se("",!0)]),_:1},8,["open"])]))}},hv=Ye(gv,[["__scopeId","data-v-a72edcc6"]]),mv={class:"page"},yv={key:3,class:"devices-panel"},_v={class:"devices-summary"},bv=300*1e3,wv={__name:"DevicesListPage",setup(e){const t=Wa(),n=Q(()=>{if(!t.lastLoadedAt)return!1;const s=new Date(t.lastLoadedAt).getTime();return Date.now()-s>bv});async function a(){(await t.loadDevices()).ok&&await t.loadDeviceStates()}return bt(a),(s,r)=>(w(),q("section",mv,[I(v(xt),{title:"Device Matrix",kicker:"Devices"},{actions:k(()=>[I(v(pe),{loading:v(t).isLoading||v(t).isLoadingStates,icon:"ph-arrow-clockwise",onClick:a},{default:k(()=>[...r[0]||(r[0]=[U(" Refresh ",-1)])]),_:1},8,["loading"])]),_:1}),v(t).isLoading?(w(),z(_t,{key:0,text:"Loading devices"})):v(t).error?(w(),z(pt,{key:1,title:"Devices loading failed",error:v(t).error,retry:a},null,8,["error"])):v(t).devices.length===0?(w(),z(rt,{key:2,title:"No active devices",message:"No active devices found."})):(w(),q("div",yv,[O("div",_v,[I(v(me),{variant:"primary"},{default:k(()=>[U("Total: "+M(v(t).total),1)]),_:1}),v(t).isLoadingStates?(w(),z(v(me),{key:0,variant:"secondary"},{default:k(()=>[...r[1]||(r[1]=[U("States loading",-1)])]),_:1})):(w(),z(v(me),{key:1,variant:"success"},{default:k(()=>[...r[2]||(r[2]=[U("States settled",-1)])]),_:1})),n.value?(w(),z(v(me),{key:2,variant:"warning"},{default:k(()=>[...r[3]||(r[3]=[U("Stale data",-1)])]),_:1})):se("",!0)]),v(t).stateError?(w(),z(pt,{key:0,title:"Device states loading failed",error:v(t).stateError},null,8,["error"])):se("",!0),I(el,{devices:v(t).devices,caption:"Registered devices"},null,8,["devices"])]))]))}},Sv=Ye(wv,[["__scopeId","data-v-635f3900"]]),kv=gn("scanning",()=>{const e=Y("setup"),t=Y([]),n=gt(),a=Q(()=>t.value.length);async function s(){return n.execute(async o=>{var c,u;const l=e.value==="setup"?await nt.scanningSetup({signal:o}):await nt.scanningAll({signal:o});return l.ok&&(t.value=((u=(c=l.data)==null?void 0:c.data)==null?void 0:u.devices)||[]),l})}function r(o){e.value=o,t.value=[],n.clear()}async function i(o){return nt.setupNewDevice(o)}return{mode:e,devices:t,isLoading:n.isLoading,error:n.error,total:a,scan:s,setMode:r,setupDevice:i}}),Av={class:"page"},xv={class:"scan-filters"},Cv={key:3,class:"devices-panel"},Ev={class:"devices-summary"},Rv={class:"device-cell"},Tv=["innerHTML"],$v={class:"device-info"},Iv={class:"firmware"},Dv={key:1,class:"muted"},Pv={class:"form-group"},Ov={class:"form-group"},Fv={class:"form-group"},Lv={key:0,class:"form-group"},Nv={__name:"DevicesScanningPage",setup(e){const t=kv(),n=mn(),a=Mt(),s=Y(!1),r=Y(!1),i=Y(""),o=Yt({device_ip:"",alias:"",name:"",description:""}),l={relay:'',button:'',sensor:''},c=[{key:"device",label:"Device"},{key:"status",label:"Status"},{key:"firmware",label:"Firmware"},{key:"actions",label:"Actions"}];function u(b){return l[b]||l.relay}function d(b){t.setMode(b)}function f(){t.scan()}function h(b){o.device_ip=b.ip_address,o.alias="",o.name="",o.description="",i.value="",s.value=!0}async function g(){var m;r.value=!0,i.value="";const b=await t.setupDevice({...o});if(r.value=!1,!b.ok){i.value=((m=b.error)==null?void 0:m.message)||"Failed to setup device";return}s.value=!1,n.success({title:"Device added",text:`Device ${o.alias||o.name||""} added successfully`})}return(b,m)=>(w(),q("section",Av,[I(v(xt),{title:"Scanning",kicker:"Devices"},{actions:k(()=>[I(v(pe),{loading:v(t).isLoading,icon:"ph-magnifying-glass",onClick:f},{default:k(()=>[...m[7]||(m[7]=[U(" Scan ",-1)])]),_:1},8,["loading"])]),_:1}),O("div",xv,[m[10]||(m[10]=O("span",{class:"filter-label text-muted"},"Mode:",-1)),I(v(si),{selected:v(t).mode==="setup",clickable:"",icon:"ph-plug",onClick:m[0]||(m[0]=$=>d("setup"))},{default:k(()=>[...m[8]||(m[8]=[U(" Setup ",-1)])]),_:1},8,["selected"]),I(v(si),{selected:v(t).mode==="all",clickable:"",icon:"ph-scan",onClick:m[1]||(m[1]=$=>d("all"))},{default:k(()=>[...m[9]||(m[9]=[U(" All ",-1)])]),_:1},8,["selected"])]),v(t).isLoading?(w(),z(_t,{key:0,text:"Scanning network"})):v(t).error?(w(),z(pt,{key:1,title:"Scan failed",error:v(t).error,retry:f},null,8,["error"])):v(t).devices.length===0?(w(),z(rt,{key:2,title:"No devices found",message:"Choose scan mode and click Scan to discover devices."})):(w(),q("div",Cv,[O("div",Ev,[I(v(me),{variant:"primary"},{default:k(()=>[U(M(v(t).total)+" found",1)]),_:1})]),I(v(Pn),{columns:c,rows:v(t).devices,caption:"Discovered devices"},{"cell-device":k(({row:$})=>[O("div",Rv,[O("div",{class:"device-icon",innerHTML:u($.device_type)},null,8,Tv),O("div",$v,[O("strong",null,M($.device_name||"Unknown"),1),O("small",null,M($.device_type||"unknown")+" — "+M($.ip_address||"—"),1)])])]),"cell-status":k(({row:$})=>[I(v(me),{variant:$.status==="setup"?"warning":"success"},{default:k(()=>[U(M($.status||"unknown"),1)]),_:2},1032,["variant"])]),"cell-firmware":k(({row:$})=>[O("span",Iv,M($.firmware_version||"—"),1)]),"cell-actions":k(({row:$})=>[$.status==="setup"&&v(a).has("devices.setup")?(w(),z(v(pe),{key:0,variant:"primary",icon:"ph-plus",size:"sm",onClick:y=>h($)},{default:k(()=>[...m[11]||(m[11]=[U(" Add ",-1)])]),_:1},8,["onClick"])):(w(),q("span",Dv,"—"))]),_:1},8,["rows"])])),I(v(ut),{open:s.value,title:"Setup new device","onUpdate:open":m[6]||(m[6]=$=>s.value=$)},{footer:k(()=>[I(v(pe),{variant:"secondary",onClick:m[5]||(m[5]=$=>s.value=!1)},{default:k(()=>[...m[12]||(m[12]=[U("Cancel",-1)])]),_:1}),I(v(pe),{variant:"primary",icon:"ph-plus",loading:r.value,onClick:g},{default:k(()=>[...m[13]||(m[13]=[U(" Add device ",-1)])]),_:1},8,["loading"])]),default:k(()=>[O("div",Pv,[I(v(Ft),{modelValue:o.alias,"onUpdate:modelValue":m[2]||(m[2]=$=>o.alias=$),label:"Alias",placeholder:"kitchen_relay"},null,8,["modelValue"])]),O("div",Ov,[I(v(Ft),{modelValue:o.name,"onUpdate:modelValue":m[3]||(m[3]=$=>o.name=$),label:"Name",placeholder:"Kitchen Relay"},null,8,["modelValue"])]),O("div",Fv,[I(v(Ft),{modelValue:o.description,"onUpdate:modelValue":m[4]||(m[4]=$=>o.description=$),label:"Description"},null,8,["modelValue"])]),i.value?(w(),q("div",Lv,[I(v(Qe),{variant:"danger"},{default:k(()=>[U(M(i.value),1)]),_:1})])):se("",!0)]),_:1},8,["open"])]))}},Mv=Ye(Nv,[["__scopeId","data-v-1a01bb19"]]);function ci(e){return encodeURIComponent(String(e))}const Vn={async list(){return Oe("/api/v1/firmwares")},async detail(e){return Oe(`/api/v1/firmwares/id/${ci(e)}`)},async refresh(){return Xe("/api/v1/firmwares/refresh")},async deviceCompatibility(e){return Oe(`/api/v1/devices/id/${ci(e)}/firmware-compatibility`)},async updateDeviceFirmware(e,t){return Xe("/api/v1/devices/update-firmware",{device_id:e,firmware_id:t})}},al=gn("firmwares",()=>{const e=Y([]),t=Y(null),n=Y(null),a=gt(),s=gt(),r=gt(),i=gt(),o=Q(()=>a.isLoading.value),l=Q(()=>s.isLoading.value),c=Q(()=>r.isLoading.value),u=Q(()=>i.isLoading.value);async function d(){return a.execute(async $=>{var S,C;const y=await Vn.list({signal:$});return y.ok&&(e.value=((C=(S=y.data)==null?void 0:S.data)==null?void 0:C.firmwares)||[]),y})}async function f(){return r.execute(async()=>{const $=await Vn.refresh();return $.ok&&await d(),$})}async function h($){return s.execute(async y=>{var C,L;const S=await Vn.detail($,{signal:y});return S.ok&&(t.value=((L=(C=S.data)==null?void 0:C.data)==null?void 0:L.firmware)||null),S})}async function g($){return i.execute(async y=>{var C,L,P,T;const S=await Vn.deviceCompatibility($,{signal:y});return S.ok&&(n.value={compatible:((L=(C=S.data)==null?void 0:C.data)==null?void 0:L.compatible)||[],currentVersion:((T=(P=S.data)==null?void 0:P.data)==null?void 0:T.current_version)||"unknown"}),S})}async function b($,y){return r.execute(async()=>Vn.updateDeviceFirmware($,y))}function m(){n.value=null}return{firmwares:e,current:t,compatibility:n,isLoadingList:o,isLoadingDetail:l,isUpdating:c,isLoadingCompatibility:u,loadFirmwares:d,refreshFirmwares:f,loadFirmwareDetail:h,loadDeviceCompatibility:g,updateDeviceFirmware:b,clearCompatibility:m}}),Uv={class:"page"},Bv={key:2},Vv={class:"device-meta"},jv={class:"script-info-panel"},Hv={class:"info-row"},Gv={class:"info-value"},qv={class:"info-row"},zv={class:"info-value"},Kv={class:"info-row"},Wv={class:"info-value"},Jv={class:"info-row"},Yv={class:"info-value"},Zv={class:"info-row"},Qv={class:"info-value"},Xv={class:"info-row"},eg={class:"info-value"},tg={class:"info-row"},ng={class:"info-value"},ag={key:0,class:"info-row"},sg={class:"info-value"},rg={key:1,class:"info-row"},ig={class:"info-value"},og={key:0,class:"devices-panel"},lg={key:1,class:"devices-panel"},ug={class:"form-group"},cg={class:"form-group"},dg={class:"form-group"},fg={key:0,class:"form-group"},pg={key:0,class:"form-group"},vg={key:0,class:"form-group"},gg={key:0,class:"form-group"},hg={key:0,class:"form-group"},mg={key:0,class:"form-group"},yg={class:"firmware-options"},_g=["onClick"],bg={class:"fw-version"},wg={key:0,class:"fw-desc"},Sg={key:0,class:"form-group"},kg={__name:"DeviceDetailPage",setup(e){const t=Ka(),n=hn(),a=Wa(),s=wt(),r=al(),i=mn(),o=Mt(),{areaOptions:l,showAssignModal:c,selectedAreaId:u,assignLoading:d,assignError:f,openAssign:h,submitAssignCore:g}=nr(),b=Q(()=>t.params.id),m=Q(()=>a.currentDevice),$=Q(()=>a.isLoadingDetail),y=Q(()=>a.errorDetail),S=Y(!1),C=Y(null),L=Q(()=>{var F;const ie=(F=m.value)==null?void 0:F.area_id;return ie&&s.areasById[String(ie)]||null}),P=Y(!1),T=Y(!1),E=Y(""),D=Yt({name:"",description:"",alias:""}),te=Y(!1),ue=Y(""),ye=Y(!1),we=Y(""),V=Y(!1),W=Y(""),Z=Y(!1),K=Y(""),ee=Y(!1),fe=Y(""),Se=Y(!1),Ee=Y(""),be=Y(!1),Me=Y(""),Ve=Y(!1),je=Y(""),$e=Y(!1),N=Y(null),ae=Y(""),R=Q(()=>{var ie,F;return(((F=(ie=r.compatibility)==null?void 0:ie.compatible)==null?void 0:F.length)||0)>0}),A=Q(()=>{var ie;return((ie=r.compatibility)==null?void 0:ie.compatible)||[]}),X=Q(()=>{var F,De;const ie=[];return o.has("devices.edit")&&(ie.push({label:"Edit",icon:"ph-pencil",onSelect:p}),(F=m.value)!=null&&F.area_id?ie.push({label:"Change area",icon:"ph-map-pin",onSelect:x},{label:"Unassign from area",icon:"ph-x-circle",onSelect:G}):ie.push({label:"Assign to area",icon:"ph-map-pin",onSelect:x})),o.has("devices.setup")&&ie.push({label:"ReSetup",icon:"ph-gear",onSelect:J}),o.has("devices.control")&&ie.push({label:"Reboot",icon:"ph-arrow-clockwise",disabled:a.isRebooting((De=m.value)==null?void 0:De.id),onSelect:ne}),o.has("devices.edit")&&ie.push({label:"Reset",icon:"ph-x",danger:!0,onSelect:le}),o.has("devices.delete")&&ie.push({label:"Remove",icon:"ph-trash",danger:!0,onSelect:oe}),ie});function p(){m.value&&(D.name=m.value.name||"",D.description=m.value.description||"",D.alias=m.value.alias||"",E.value="",P.value=!0)}async function _(){var et,ve,Ke,ze;T.value=!0,E.value="";const ie=b.value,F=await Promise.all([D.name!==((et=m.value)==null?void 0:et.name)?a.updateDeviceName(ie,D.name):{ok:!0},D.description!==((ve=m.value)==null?void 0:ve.description)?a.updateDeviceDescription(ie,D.description):{ok:!0},D.alias!==((Ke=m.value)==null?void 0:Ke.alias)?a.updateDeviceAlias(ie,D.alias):{ok:!0}]);T.value=!1;const De=F.find(Fn=>!Fn.ok);if(De){E.value=((ze=De.error)==null?void 0:ze.message)||"Failed to update device";return}P.value=!1,i.success({title:"Updated",text:"Device updated successfully"})}function x(){var ie;h((ie=m.value)==null?void 0:ie.area_id)}async function B(){const ie=await g(b.value,a.assignToArea.bind(a));ie!=null&&ie.ok&&i.success({title:"Assigned",text:"Device assigned to area successfully"})}function G(){m.value&&(W.value=`Are you sure you want to unassign device "${m.value.name||m.value.alias}" from its area?`,K.value="",V.value=!0)}async function H(){var F;if(!m.value)return;Z.value=!0,K.value="";const ie=await a.unassignDevice(b.value);if(Z.value=!1,!ie.ok){K.value=((F=ie.error)==null?void 0:F.message)||"Failed to unassign device";return}V.value=!1,i.success({title:"Unassigned",text:"Device unassigned from area successfully"})}function oe(){m.value&&(ue.value=`Are you sure you want to remove device "${m.value.name||m.value.alias}"?`,we.value="",te.value=!0)}async function re(){var De;const ie=b.value;ye.value=!0,we.value="";const F=await a.removeDevice(ie);if(ye.value=!1,!F.ok){we.value=((De=F.error)==null?void 0:De.message)||"Failed to remove device";return}te.value=!1,i.success({title:"Removed",text:"Device removed successfully"}),n.push({name:"devices"})}async function ne(){var F;if(!m.value)return;const ie=await a.rebootDevice(m.value.id);ie.ok?i.success({title:"Rebooting",text:`Device ${m.value.name||m.value.alias||"#"+m.value.id} is rebooting`}):i.error({title:"Reboot failed",text:((F=ie.error)==null?void 0:F.message)||"Failed to reboot device"})}function J(){m.value&&(fe.value=`Are you sure you want to repeat setup for device "${m.value.name||m.value.alias}"?`,Ee.value="",ee.value=!0)}async function de(){var De,et,ve;const ie=b.value;Se.value=!0,Ee.value="";const F=await a.resetupDevice(ie);if(Se.value=!1,!F.ok){Ee.value=((De=F.error)==null?void 0:De.message)||"Failed to repeat device setup";return}ee.value=!1,i.success({title:"Success",text:`Device ${((et=m.value)==null?void 0:et.name)||((ve=m.value)==null?void 0:ve.alias)||"#"+ie} setup repeated`}),n.push({name:"devices"})}function le(){m.value&&(Me.value=`Are you sure you want to reset device "${m.value.name||m.value.alias}"?`,je.value="",be.value=!0)}async function ce(){var De,et,ve;const ie=b.value;Ve.value=!0,je.value="";const F=await a.resetDevice(ie);if(Ve.value=!1,!F.ok){je.value=((De=F.error)==null?void 0:De.message)||"Failed to reset device";return}be.value=!1,i.success({title:"Success",text:`Device ${((et=m.value)==null?void 0:et.name)||((ve=m.value)==null?void 0:ve.alias)||"#"+ie} reset`}),n.push({name:"devices"})}function ge(){var ie;N.value=((ie=A.value[0])==null?void 0:ie.id)||null,ae.value="",$e.value=!0}async function ke(){var F;if(!N.value||!m.value)return;const ie=await r.updateDeviceFirmware(m.value.id,N.value);if(!ie.ok){ae.value=((F=ie.error)==null?void 0:F.message)||"Firmware update failed";return}$e.value=!1,i.success({title:"Updated",text:"Firmware update pushed successfully"}),await a.loadDeviceDetail(b.value)}function Re(ie){return{active:"success",removed:"danger",freezed:"warning",setup:"primary"}[ie]||"secondary"}async function Ie(){const ie=b.value;if(!ie||!m.value||m.value.connection_status!=="active")return;S.value=!0,C.value=null;const F=await a.loadDeviceStatus(ie);S.value=!1,F.ok||(C.value=F.error)}async function Be(){var F;const ie=b.value;ie&&(s.areas.length===0&&await s.loadAreas(),await a.loadDeviceDetail(ie),((F=m.value)==null?void 0:F.connection_status)==="active"&&(await Ie(),await r.loadDeviceCompatibility(ie)))}return bt(()=>{Be()}),ua(()=>{a.clearDeviceDetail(),r.clearCompatibility()}),Ot(()=>t.params.id,(ie,F)=>{ie!==F&&(a.clearDeviceDetail(),Be())}),(ie,F)=>{var De,et;return w(),q("section",Uv,[$.value?(w(),z(_t,{key:0,text:"Loading device details"})):y.value?(w(),z(pt,{key:1,title:"Device loading failed",error:y.value,retry:Be},null,8,["error"])):m.value?(w(),q("div",Bv,[I(v(xt),{title:m.value.name||m.value.alias||`Device #${m.value.id}`,kicker:"Device"},{actions:k(()=>[I(rr,{items:X.value},null,8,["items"])]),_:1},8,["title"]),O("div",Vv,[I(v(me),{variant:m.value.connection_status==="active"?"success":"danger"},{default:k(()=>[U(M(m.value.connection_status==="active"?"Online":"Offline"),1)]),_:1},8,["variant"]),O("code",null,M(m.value.alias),1),I(ar,{area:L.value,areaId:m.value.area_id},null,8,["area","areaId"])]),O("div",jv,[O("div",Hv,[F[18]||(F[18]=O("span",{class:"info-label text-muted"},"System status:",-1)),O("span",Gv,[I(v(me),{variant:Re(m.value.status)},{default:k(()=>[U(M(m.value.status),1)]),_:1},8,["variant"])])]),O("div",qv,[F[19]||(F[19]=O("span",{class:"info-label text-muted"},"Type:",-1)),O("span",zv,M(m.value.device_type),1)]),O("div",Kv,[F[20]||(F[20]=O("span",{class:"info-label text-muted"},"State:",-1)),O("span",Wv,[I(Xo,{"device-type":m.value.device_type,response:(De=v(a).currentDeviceStatus)==null?void 0:De.raw,loading:S.value,error:(et=C.value)==null?void 0:et.message,"connection-status":m.value.connection_status},null,8,["device-type","response","loading","error","connection-status"])])]),O("div",Jv,[F[21]||(F[21]=O("span",{class:"info-label text-muted"},"IP:",-1)),O("span",Yv,M(m.value.device_ip),1)]),O("div",Zv,[F[22]||(F[22]=O("span",{class:"info-label text-muted"},"MAC:",-1)),O("span",Qv,M(m.value.device_mac),1)]),O("div",Xv,[F[23]||(F[23]=O("span",{class:"info-label text-muted"},"Hard ID:",-1)),O("span",eg,M(m.value.device_hard_id),1)]),O("div",tg,[F[24]||(F[24]=O("span",{class:"info-label text-muted"},"Firmware:",-1)),O("span",ng,M(m.value.firmware_version),1)]),m.value.last_contact?(w(),q("div",ag,[F[25]||(F[25]=O("span",{class:"info-label text-muted"},"Last contact:",-1)),O("span",sg,M(m.value.last_contact),1)])):se("",!0),m.value.create_at?(w(),q("div",rg,[F[26]||(F[26]=O("span",{class:"info-label text-muted"},"Created:",-1)),O("span",ig,M(m.value.create_at),1)])):se("",!0)]),I(sr,{item:m.value,emptyMessage:"This device is not assigned to any area.",onAssign:x},{action:k(()=>[v(o).has("devices.edit")?(w(),z(v(pe),{key:0,variant:"primary",icon:"ph-map-pin",onClick:x},{default:k(()=>{var ve;return[U(M((ve=m.value)!=null&&ve.area_id?"Change area":"Assign to area"),1)]}),_:1})):se("",!0)]),_:1},8,["item"]),R.value&&v(o).has("firmware.upload")?(w(),q("div",og,[F[29]||(F[29]=O("div",{class:"block-title"},"Firmware Update",-1)),I(v(Qe),{variant:"info"},{default:k(()=>[F[27]||(F[27]=U(" New firmware available: ",-1)),(w(!0),q(Pe,null,Wt(A.value,ve=>(w(),z(v(me),{key:ve.id,variant:"success"},{default:k(()=>[U(M(ve.version),1)]),_:2},1024))),128))]),_:1}),I(v(pe),{variant:"primary",icon:"ph-cloud-arrow-down",onClick:ge},{default:k(()=>[...F[28]||(F[28]=[U(" Update Firmware ",-1)])]),_:1})])):se("",!0),m.value.description?(w(),q("div",lg,[F[30]||(F[30]=O("div",{class:"block-title"},"Description",-1)),O("p",null,M(m.value.description),1)])):se("",!0)])):(w(),z(rt,{key:3,title:"Device not found",message:"The requested device does not exist."})),I(v(ut),{open:P.value,title:"Edit device","onUpdate:open":F[4]||(F[4]=ve=>P.value=ve)},{footer:k(()=>[I(v(pe),{variant:"secondary",onClick:F[3]||(F[3]=ve=>P.value=!1)},{default:k(()=>[...F[31]||(F[31]=[U("Cancel",-1)])]),_:1}),I(v(pe),{variant:"primary",icon:"ph-check",loading:T.value,onClick:_},{default:k(()=>[...F[32]||(F[32]=[U(" Save ",-1)])]),_:1},8,["loading"])]),default:k(()=>[O("div",ug,[I(v(Ft),{modelValue:D.name,"onUpdate:modelValue":F[0]||(F[0]=ve=>D.name=ve),label:"Name"},null,8,["modelValue"])]),O("div",cg,[I(v(Ft),{modelValue:D.description,"onUpdate:modelValue":F[1]||(F[1]=ve=>D.description=ve),label:"Description"},null,8,["modelValue"])]),O("div",dg,[I(v(Ft),{modelValue:D.alias,"onUpdate:modelValue":F[2]||(F[2]=ve=>D.alias=ve),label:"Alias"},null,8,["modelValue"])]),E.value?(w(),q("div",fg,[I(v(Qe),{variant:"danger"},{default:k(()=>[U(M(E.value),1)]),_:1})])):se("",!0)]),_:1},8,["open"]),I(v(ut),{open:v(c),title:"Assign to area","onUpdate:open":F[7]||(F[7]=ve=>c.value=ve)},{footer:k(()=>[I(v(pe),{variant:"secondary",onClick:F[6]||(F[6]=ve=>c.value=!1)},{default:k(()=>[...F[33]||(F[33]=[U("Cancel",-1)])]),_:1}),I(v(pe),{variant:"primary",icon:"ph-check",loading:v(d),onClick:B},{default:k(()=>[...F[34]||(F[34]=[U(" Assign ",-1)])]),_:1},8,["loading"])]),default:k(()=>[I(v(Qs),{modelValue:v(u),"onUpdate:modelValue":F[5]||(F[5]=ve=>Ue(u)?u.value=ve:null),label:"Area",options:v(l),icon:"ph-map-trifold"},null,8,["modelValue","options"]),v(f)?(w(),q("div",pg,[I(v(Qe),{variant:"danger"},{default:k(()=>[U(M(v(f)),1)]),_:1})])):se("",!0)]),_:1},8,["open"]),I(v(ut),{open:V.value,title:"Unassign from area","onUpdate:open":F[9]||(F[9]=ve=>V.value=ve)},{footer:k(()=>[I(v(pe),{variant:"secondary",onClick:F[8]||(F[8]=ve=>V.value=!1)},{default:k(()=>[...F[35]||(F[35]=[U("Cancel",-1)])]),_:1}),I(v(pe),{variant:"warning",icon:"ph-x-circle",loading:Z.value,onClick:H},{default:k(()=>[...F[36]||(F[36]=[U(" Unassign ",-1)])]),_:1},8,["loading"])]),default:k(()=>[O("p",null,M(W.value),1),K.value?(w(),q("div",vg,[I(v(Qe),{variant:"danger"},{default:k(()=>[U(M(K.value),1)]),_:1})])):se("",!0)]),_:1},8,["open"]),I(v(ut),{open:te.value,title:"Remove device","onUpdate:open":F[11]||(F[11]=ve=>te.value=ve)},{footer:k(()=>[I(v(pe),{variant:"secondary",onClick:F[10]||(F[10]=ve=>te.value=!1)},{default:k(()=>[...F[37]||(F[37]=[U("Cancel",-1)])]),_:1}),I(v(pe),{variant:"danger",icon:"ph-trash",loading:ye.value,onClick:re},{default:k(()=>[...F[38]||(F[38]=[U(" Remove ",-1)])]),_:1},8,["loading"])]),default:k(()=>[O("p",null,M(ue.value),1),we.value?(w(),q("div",gg,[I(v(Qe),{variant:"danger"},{default:k(()=>[U(M(we.value),1)]),_:1})])):se("",!0)]),_:1},8,["open"]),I(v(ut),{open:ee.value,title:"Repeat device setup","onUpdate:open":F[13]||(F[13]=ve=>ee.value=ve)},{footer:k(()=>[I(v(pe),{variant:"secondary",onClick:F[12]||(F[12]=ve=>ee.value=!1)},{default:k(()=>[...F[39]||(F[39]=[U("Cancel",-1)])]),_:1}),I(v(pe),{variant:"primary",icon:"ph-gear",loading:Se.value,onClick:de},{default:k(()=>[...F[40]||(F[40]=[U(" ReSetup ",-1)])]),_:1},8,["loading"])]),default:k(()=>[O("p",null,M(fe.value),1),Ee.value?(w(),q("div",hg,[I(v(Qe),{variant:"danger"},{default:k(()=>[U(M(Ee.value),1)]),_:1})])):se("",!0)]),_:1},8,["open"]),I(v(ut),{open:be.value,title:"Reset device","onUpdate:open":F[15]||(F[15]=ve=>be.value=ve)},{footer:k(()=>[I(v(pe),{variant:"secondary",onClick:F[14]||(F[14]=ve=>be.value=!1)},{default:k(()=>[...F[41]||(F[41]=[U("Cancel",-1)])]),_:1}),I(v(pe),{variant:"danger",icon:"ph-x",loading:Ve.value,onClick:ce},{default:k(()=>[...F[42]||(F[42]=[U(" Reset ",-1)])]),_:1},8,["loading"])]),default:k(()=>[O("p",null,M(Me.value),1),je.value?(w(),q("div",mg,[I(v(Qe),{variant:"danger"},{default:k(()=>[U(M(je.value),1)]),_:1})])):se("",!0)]),_:1},8,["open"]),I(v(ut),{open:$e.value,title:"Update Firmware","onUpdate:open":F[17]||(F[17]=ve=>$e.value=ve)},{footer:k(()=>[I(v(pe),{variant:"secondary",onClick:F[16]||(F[16]=ve=>$e.value=!1)},{default:k(()=>[...F[45]||(F[45]=[U("Cancel",-1)])]),_:1}),I(v(pe),{variant:"primary",icon:"ph-check",loading:v(r).isUpdating,disabled:!N.value,onClick:ke},{default:k(()=>[...F[46]||(F[46]=[U(" Update ",-1)])]),_:1},8,["loading","disabled"])]),default:k(()=>{var ve,Ke;return[O("p",null,[F[43]||(F[43]=U("Select firmware to install on ",-1)),O("strong",null,M(((ve=m.value)==null?void 0:ve.name)||((Ke=m.value)==null?void 0:Ke.alias)),1),F[44]||(F[44]=U(":",-1))]),O("div",yg,[(w(!0),q(Pe,null,Wt(A.value,ze=>(w(),q("div",{key:ze.id,class:Lt(["firmware-option",{active:N.value===ze.id}]),onClick:Fn=>N.value=ze.id},[O("div",bg,M(ze.version),1),ze.description?(w(),q("div",wg,M(ze.description),1)):se("",!0)],10,_g))),128))]),ae.value?(w(),q("div",Sg,[I(v(Qe),{variant:"danger"},{default:k(()=>[U(M(ae.value),1)]),_:1})])):se("",!0)]}),_:1},8,["open"])])}}},Ag=Ye(kg,[["__scopeId","data-v-2e1b45fd"]]),xg={class:"page"},Cg={__name:"ScriptsActionsPage",setup(e){const t=yn(),n=wt();return bt(()=>{t.loadActions(),n.areas.length===0&&n.loadAreas()}),(a,s)=>(w(),q("section",xg,[I(v(xt),{title:"Actions",kicker:"Scripts"},{actions:k(()=>[I(v(me),{variant:"primary"},{default:k(()=>[U(M(v(t).totalActions)+" scripts",1)]),_:1})]),_:1}),v(t).isLoadingActions?(w(),z(_t,{key:0,text:"Loading actions"})):v(t).errorActions?(w(),z(pt,{key:1,title:"Actions loading failed",error:v(t).errorActions,retry:v(t).loadActions},null,8,["error","retry"])):v(t).actions.length===0?(w(),z(rt,{key:2,title:"No action scripts",message:"No action scripts registered."})):(w(),z(nl,{key:3,scripts:v(t).actions,"show-area-badge":""},null,8,["scripts"]))]))}},Eg=Ye(Cg,[["__scopeId","data-v-f336617a"]]),Rg={class:"page"},Tg={key:3,class:"devices-panel"},$g={__name:"ScriptsRegularPage",setup(e){const t=yn(),n=wt();return bt(()=>{t.loadRegular(),n.areas.length===0&&n.loadAreas()}),(a,s)=>(w(),q("section",Rg,[I(v(xt),{title:"Regular",kicker:"Scripts"},{actions:k(()=>[I(v(me),{variant:"primary"},{default:k(()=>[U(M(v(t).totalRegular)+" scripts",1)]),_:1})]),_:1}),v(t).isLoadingRegular?(w(),z(_t,{key:0,text:"Loading regular scripts"})):v(t).errorRegular?(w(),z(pt,{key:1,title:"Regular scripts loading failed",error:v(t).errorRegular,retry:v(t).loadRegular},null,8,["error","retry"])):v(t).regular.length===0?(w(),z(rt,{key:2,title:"No regular scripts",message:"No regular scripts registered."})):(w(),q("div",Tg,[I(tl,{scripts:v(t).regular,scriptType:"regular",showArea:!0,showScope:!0,showFilename:!0,showActions:!0,caption:"Regular scripts"},null,8,["scripts"])]))]))}},Ig={class:"page"},Dg={key:3,class:"devices-panel"},Pg={__name:"ScriptsScopesPage",setup(e){hn();const t=yn(),n=Mt(),a=[{key:"name",label:"Name"},{key:"filename",label:"File"},{key:"state",label:"State"},{key:"path",label:"Path"},{key:"actions",label:"Actions"}];function s(r,i){t.setScopeState(r,i)}return bt(()=>{t.loadScopes()}),(r,i)=>{const o=sn("router-link");return w(),q("section",Ig,[I(v(xt),{title:"Scopes",kicker:"Scripts"},{actions:k(()=>[I(v(me),{variant:"primary"},{default:k(()=>[U(M(v(t).totalScopes)+" scopes",1)]),_:1})]),_:1}),v(t).isLoadingScopes?(w(),z(_t,{key:0,text:"Loading scopes"})):v(t).errorScopes?(w(),z(pt,{key:1,title:"Scopes loading failed",error:v(t).errorScopes,retry:v(t).loadScopes},null,8,["error","retry"])):v(t).scopes.length===0?(w(),z(rt,{key:2,title:"No scopes",message:"No script scopes registered."})):(w(),q("div",Dg,[I(v(Pn),{columns:a,rows:v(t).scopes,caption:"Script scopes"},{"cell-name":k(({row:l})=>[I(o,{to:{name:"script-detail",params:{type:"scopes",id:l.name}},class:"script-link"},{default:k(()=>[U(M(l.name),1)]),_:2},1032,["to"])]),"cell-state":k(({row:l})=>[I(v(me),{variant:l.state==="enabled"?"success":"secondary"},{default:k(()=>[U(M(l.state),1)]),_:2},1032,["variant"])]),"cell-actions":k(({row:l})=>[l.state==="enabled"&&v(n).has("scripts.edit")?(w(),z(v(pe),{key:0,variant:"secondary",icon:"ph-pause",onClick:c=>s(l.name,!1)},{default:k(()=>[...i[0]||(i[0]=[U(" Disable ",-1)])]),_:1},8,["onClick"])):v(n).has("scripts.edit")?(w(),z(v(pe),{key:1,variant:"primary",icon:"ph-play",onClick:c=>s(l.name,!0)},{default:k(()=>[...i[1]||(i[1]=[U(" Enable ",-1)])]),_:1},8,["onClick"])):se("",!0)]),_:1},8,["rows"])]))])}}},Og=Ye(Pg,[["__scopeId","data-v-c8486788"]]);var di=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Fg(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var ds={exports:{}},fi;function Lg(){return fi||(fi=1,(function(e){var t=typeof window<"u"?window:typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope?self:{};/** + * Prism: Lightweight, robust, elegant syntax highlighting + * + * @license MIT + * @author Lea Verou + * @namespace + * @public + */var n=(function(a){var s=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,r=0,i={},o={manual:a.Prism&&a.Prism.manual,disableWorkerMessageHandler:a.Prism&&a.Prism.disableWorkerMessageHandler,util:{encode:function y(S){return S instanceof l?new l(S.type,y(S.content),S.alias):Array.isArray(S)?S.map(y):S.replace(/&/g,"&").replace(/"u")return null;if(document.currentScript&&document.currentScript.tagName==="SCRIPT")return document.currentScript;try{throw new Error}catch(L){var y=(/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(L.stack)||[])[1];if(y){var S=document.getElementsByTagName("script");for(var C in S)if(S[C].src==y)return S[C]}return null}},isActive:function(y,S,C){for(var L="no-"+S;y;){var P=y.classList;if(P.contains(S))return!0;if(P.contains(L))return!1;y=y.parentElement}return!!C}},languages:{plain:i,plaintext:i,text:i,txt:i,extend:function(y,S){var C=o.util.clone(o.languages[y]);for(var L in S)C[L]=S[L];return C},insertBefore:function(y,S,C,L){L=L||o.languages;var P=L[y],T={};for(var E in P)if(P.hasOwnProperty(E)){if(E==S)for(var D in C)C.hasOwnProperty(D)&&(T[D]=C[D]);C.hasOwnProperty(E)||(T[E]=P[E])}var te=L[y];return L[y]=T,o.languages.DFS(o.languages,function(ue,ye){ye===te&&ue!=y&&(this[ue]=T)}),T},DFS:function y(S,C,L,P){P=P||{};var T=o.util.objId;for(var E in S)if(S.hasOwnProperty(E)){C.call(S,E,S[E],L||E);var D=S[E],te=o.util.type(D);te==="Object"&&!P[T(D)]?(P[T(D)]=!0,y(D,C,null,P)):te==="Array"&&!P[T(D)]&&(P[T(D)]=!0,y(D,C,E,P))}}},plugins:{},highlightAll:function(y,S){o.highlightAllUnder(document,y,S)},highlightAllUnder:function(y,S,C){var L={callback:C,container:y,selector:'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'};o.hooks.run("before-highlightall",L),L.elements=Array.prototype.slice.apply(L.container.querySelectorAll(L.selector)),o.hooks.run("before-all-elements-highlight",L);for(var P=0,T;T=L.elements[P++];)o.highlightElement(T,S===!0,L.callback)},highlightElement:function(y,S,C){var L=o.util.getLanguage(y),P=o.languages[L];o.util.setLanguage(y,L);var T=y.parentElement;T&&T.nodeName.toLowerCase()==="pre"&&o.util.setLanguage(T,L);var E=y.textContent,D={element:y,language:L,grammar:P,code:E};function te(ye){D.highlightedCode=ye,o.hooks.run("before-insert",D),D.element.innerHTML=D.highlightedCode,o.hooks.run("after-highlight",D),o.hooks.run("complete",D),C&&C.call(D.element)}if(o.hooks.run("before-sanity-check",D),T=D.element.parentElement,T&&T.nodeName.toLowerCase()==="pre"&&!T.hasAttribute("tabindex")&&T.setAttribute("tabindex","0"),!D.code){o.hooks.run("complete",D),C&&C.call(D.element);return}if(o.hooks.run("before-highlight",D),!D.grammar){te(o.util.encode(D.code));return}if(S&&a.Worker){var ue=new Worker(o.filename);ue.onmessage=function(ye){te(ye.data)},ue.postMessage(JSON.stringify({language:D.language,code:D.code,immediateClose:!0}))}else te(o.highlight(D.code,D.grammar,D.language))},highlight:function(y,S,C){var L={code:y,grammar:S,language:C};if(o.hooks.run("before-tokenize",L),!L.grammar)throw new Error('The language "'+L.language+'" has no grammar.');return L.tokens=o.tokenize(L.code,L.grammar),o.hooks.run("after-tokenize",L),l.stringify(o.util.encode(L.tokens),L.language)},tokenize:function(y,S){var C=S.rest;if(C){for(var L in C)S[L]=C[L];delete S.rest}var P=new d;return f(P,P.head,y),u(y,P,S,P.head,0),g(P)},hooks:{all:{},add:function(y,S){var C=o.hooks.all;C[y]=C[y]||[],C[y].push(S)},run:function(y,S){var C=o.hooks.all[y];if(!(!C||!C.length))for(var L=0,P;P=C[L++];)P(S)}},Token:l};a.Prism=o;function l(y,S,C,L){this.type=y,this.content=S,this.alias=C,this.length=(L||"").length|0}l.stringify=function y(S,C){if(typeof S=="string")return S;if(Array.isArray(S)){var L="";return S.forEach(function(te){L+=y(te,C)}),L}var P={type:S.type,content:y(S.content,C),tag:"span",classes:["token",S.type],attributes:{},language:C},T=S.alias;T&&(Array.isArray(T)?Array.prototype.push.apply(P.classes,T):P.classes.push(T)),o.hooks.run("wrap",P);var E="";for(var D in P.attributes)E+=" "+D+'="'+(P.attributes[D]||"").replace(/"/g,""")+'"';return"<"+P.tag+' class="'+P.classes.join(" ")+'"'+E+">"+P.content+""};function c(y,S,C,L){y.lastIndex=S;var P=y.exec(C);if(P&&L&&P[1]){var T=P[1].length;P.index+=T,P[0]=P[0].slice(T)}return P}function u(y,S,C,L,P,T){for(var E in C)if(!(!C.hasOwnProperty(E)||!C[E])){var D=C[E];D=Array.isArray(D)?D:[D];for(var te=0;te=T.reach);fe+=ee.value.length,ee=ee.next){var Se=ee.value;if(S.length>y.length)return;if(!(Se instanceof l)){var Ee=1,be;if(V){if(be=c(K,fe,y,we),!be||be.index>=y.length)break;var $e=be.index,Me=be.index+be[0].length,Ve=fe;for(Ve+=ee.value.length;$e>=Ve;)ee=ee.next,Ve+=ee.value.length;if(Ve-=ee.value.length,fe=Ve,ee.value instanceof l)continue;for(var je=ee;je!==S.tail&&(VeT.reach&&(T.reach=A);var X=ee.prev;ae&&(X=f(S,X,ae),fe+=ae.length),h(S,X,Ee);var p=new l(E,ye?o.tokenize(N,ye):N,W,N);if(ee=f(S,X,p),R&&f(S,ee,R),Ee>1){var _={cause:E+","+te,reach:A};u(y,S,C,ee.prev,fe,_),T&&_.reach>T.reach&&(T.reach=_.reach)}}}}}}function d(){var y={value:null,prev:null,next:null},S={value:null,prev:y,next:null};y.next=S,this.head=y,this.tail=S,this.length=0}function f(y,S,C){var L=S.next,P={value:C,prev:S,next:L};return S.next=P,L.prev=P,y.length++,P}function h(y,S,C){for(var L=S.next,P=0;P/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},n.languages.markup.tag.inside["attr-value"].inside.entity=n.languages.markup.entity,n.languages.markup.doctype.inside["internal-subset"].inside=n.languages.markup,n.hooks.add("wrap",function(a){a.type==="entity"&&(a.attributes.title=a.content.replace(/&/,"&"))}),Object.defineProperty(n.languages.markup.tag,"addInlined",{value:function(s,r){var i={};i["language-"+r]={pattern:/(^$)/i,lookbehind:!0,inside:n.languages[r]},i.cdata=/^$/i;var o={"included-cdata":{pattern://i,inside:i}};o["language-"+r]={pattern:/[\s\S]+/,inside:n.languages[r]};var l={};l[s]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,function(){return s}),"i"),lookbehind:!0,greedy:!0,inside:o},n.languages.insertBefore("markup","cdata",l)}}),Object.defineProperty(n.languages.markup.tag,"addAttribute",{value:function(a,s){n.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+a+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[s,"language-"+s],inside:n.languages[s]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),n.languages.html=n.languages.markup,n.languages.mathml=n.languages.markup,n.languages.svg=n.languages.markup,n.languages.xml=n.languages.extend("markup",{}),n.languages.ssml=n.languages.xml,n.languages.atom=n.languages.xml,n.languages.rss=n.languages.xml,(function(a){var s=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;a.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+s.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+s.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+s.source+"$"),alias:"url"}}},selector:{pattern:RegExp(`(^|[{}\\s])[^{}\\s](?:[^{};"'\\s]|\\s+(?![\\s{])|`+s.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:s,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},a.languages.css.atrule.inside.rest=a.languages.css;var r=a.languages.markup;r&&(r.tag.addInlined("style","css"),r.tag.addAttribute("style","css"))})(n),n.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},n.languages.javascript=n.languages.extend("clike",{"class-name":[n.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+(/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source)+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),n.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,n.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:n.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:n.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:n.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:n.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:n.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),n.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:n.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),n.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),n.languages.markup&&(n.languages.markup.tag.addInlined("script","javascript"),n.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),n.languages.js=n.languages.javascript,(function(){if(typeof n>"u"||typeof document>"u")return;Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector);var a="Loading…",s=function(b,m){return"✖ Error "+b+" while fetching file: "+m},r="✖ Error: File does not exist or is empty",i={js:"javascript",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell",sh:"bash",bat:"batch",h:"c",tex:"latex"},o="data-src-status",l="loading",c="loaded",u="failed",d="pre[data-src]:not(["+o+'="'+c+'"]):not(['+o+'="'+l+'"])';function f(b,m,$){var y=new XMLHttpRequest;y.open("GET",b,!0),y.onreadystatechange=function(){y.readyState==4&&(y.status<400&&y.responseText?m(y.responseText):y.status>=400?$(s(y.status,y.statusText)):$(r))},y.send(null)}function h(b){var m=/^\s*(\d+)\s*(?:(,)\s*(?:(\d+)\s*)?)?$/.exec(b||"");if(m){var $=Number(m[1]),y=m[2],S=m[3];return y?S?[$,Number(S)]:[$,void 0]:[$,$]}}n.hooks.add("before-highlightall",function(b){b.selector+=", "+d}),n.hooks.add("before-sanity-check",function(b){var m=b.element;if(m.matches(d)){b.code="",m.setAttribute(o,l);var $=m.appendChild(document.createElement("CODE"));$.textContent=a;var y=m.getAttribute("data-src"),S=b.language;if(S==="none"){var C=(/\.(\w+)$/.exec(y)||[,"none"])[1];S=i[C]||C}n.util.setLanguage($,S),n.util.setLanguage(m,S);var L=n.plugins.autoloader;L&&L.loadLanguages(S),f(y,function(P){m.setAttribute(o,c);var T=h(m.getAttribute("data-range"));if(T){var E=P.split(/\r\n?|\n/g),D=T[0],te=T[1]==null?E.length:T[1];D<0&&(D+=E.length),D=Math.max(0,Math.min(D-1,E.length)),te<0&&(te+=E.length),te=Math.max(0,Math.min(te,E.length)),P=E.slice(D,te).join(` +`),m.hasAttribute("data-start")||m.setAttribute("data-start",String(D+1))}$.textContent=P,n.highlightElement($)},function(P){m.setAttribute(o,u),$.textContent=P})}}),n.plugins.fileHighlight={highlight:function(m){for(var $=(m||document).querySelectorAll(d),y=0,S;S=$[y++];)n.highlightElement(S)}};var g=!1;n.fileHighlight=function(){g||(console.warn("Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead."),g=!0),n.plugins.fileHighlight.highlight.apply(this,arguments)}})()})(ds)),ds.exports}var Ng=Lg();const pi=Fg(Ng);(function(e){function t(n,a){return"___"+n.toUpperCase()+a+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,a,s,r){if(n.language===a){var i=n.tokenStack=[];n.code=n.code.replace(s,function(o){if(typeof r=="function"&&!r(o))return o;for(var l=i.length,c;n.code.indexOf(c=t(a,l))!==-1;)++l;return i[l]=o,c}),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,a){if(n.language!==a||!n.tokenStack)return;n.grammar=e.languages[a];var s=0,r=Object.keys(n.tokenStack);function i(o){for(var l=0;l=r.length);l++){var c=o[l];if(typeof c=="string"||c.content&&typeof c.content=="string"){var u=r[s],d=n.tokenStack[u],f=typeof c=="string"?c:c.content,h=t(a,u),g=f.indexOf(h);if(g>-1){++s;var b=f.substring(0,g),m=new e.Token(a,e.tokenize(d,n.grammar),"language-"+a,d),$=f.substring(g+h.length),y=[];b&&y.push.apply(y,i([b])),y.push(m),$&&y.push.apply(y,i([$])),typeof c=="string"?o.splice.apply(o,[l,1].concat(y)):c.content=y}}else c.content&&i(c.content)}return o}i(n.tokens)}}})})(Prism);var vi={},gi;function Mg(){return gi||(gi=1,(function(e){var t=/\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/,n=[{pattern:/\b(?:false|true)\b/i,alias:"boolean"},{pattern:/(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,greedy:!0,lookbehind:!0},{pattern:/(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,greedy:!0,lookbehind:!0},/\b(?:null)\b/i,/\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/],a=/\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i,s=/|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,r=/[{}\[\](),:;]/;e.languages.php={delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"},comment:t,variable:/\$+(?:\w+\b|(?=\{))/,package:{pattern:/(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,lookbehind:!0,inside:{punctuation:/\\/}},"class-name-definition":{pattern:/(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,lookbehind:!0,alias:"class-name"},"function-definition":{pattern:/(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,lookbehind:!0,alias:"function"},keyword:[{pattern:/(\(\s*)\b(?:array|bool|boolean|float|int|integer|object|string)\b(?=\s*\))/i,alias:"type-casting",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string)\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|never|object|self|static|string|void)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/\b(?:array(?!\s*\()|bool|float|int|iterable|mixed|object|string|void)\b/i,alias:"type-declaration",greedy:!0},{pattern:/(\|\s*)(?:false|null)\b|\b(?:false|null)(?=\s*\|)/i,alias:"type-declaration",greedy:!0,lookbehind:!0},{pattern:/\b(?:parent|self|static)(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(\byield\s+)from\b/i,lookbehind:!0},/\bclass\b/i,{pattern:/((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|never|new|or|parent|print|private|protected|public|readonly|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i,lookbehind:!0}],"argument-name":{pattern:/([(,]\s*)\b[a-z_]\w*(?=\s*:(?!:))/i,lookbehind:!0},"class-name":[{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/(\|\s*)\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,greedy:!0},{pattern:/(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,alias:"class-name-fully-qualified",greedy:!0,inside:{punctuation:/\\/}},{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*\$)/i,alias:"type-declaration",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-declaration"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,alias:["class-name-fully-qualified","static-context"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-hint"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:["class-name-fully-qualified","return-type"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,function:{pattern:/(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,lookbehind:!0,inside:{punctuation:/\\/}},property:{pattern:/(->\s*)\w+/,lookbehind:!0},number:a,operator:s,punctuation:r};var i={pattern:/\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,lookbehind:!0,inside:e.languages.php},o=[{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,alias:"nowdoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:i}},{pattern:/`(?:\\[\s\S]|[^\\`])*`/,alias:"backtick-quoted-string",greedy:!0},{pattern:/'(?:\\[\s\S]|[^\\'])*'/,alias:"single-quoted-string",greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,alias:"double-quoted-string",greedy:!0,inside:{interpolation:i}}];e.languages.insertBefore("php","variable",{string:o,attribute:{pattern:/#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,greedy:!0,inside:{"attribute-content":{pattern:/^(#\[)[\s\S]+(?=\]$)/,lookbehind:!0,inside:{comment:t,string:o,"attribute-class-name":[{pattern:/([^:]|^)\b[a-z_]\w*(?!\\)\b/i,alias:"class-name",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\?\b[a-z_]\w*)+/i,alias:["class-name","class-name-fully-qualified"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,number:a,operator:s,punctuation:r}},delimiter:{pattern:/^#\[|\]$/,alias:"punctuation"}}}}),e.hooks.add("before-tokenize",function(l){if(/<\?/.test(l.code)){var c=/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/g;e.languages["markup-templating"].buildPlaceholders(l,"php",c)}}),e.hooks.add("after-tokenize",function(l){e.languages["markup-templating"].tokenizePlaceholders(l,"php")})})(Prism)),vi}Mg();const Ug={class:"page"},Bg={key:2},Vg={class:"script-detail-meta"},jg=["innerHTML"],Hg={key:1},Gg={class:"script-meta"},qg={key:0},zg={class:"scope-name"},Kg={class:"script-info-panel"},Wg={key:0,class:"info-row"},Jg={class:"info-value"},Yg={key:1,class:"info-row"},Zg={class:"info-value"},Qg={key:2,class:"info-row"},Xg={class:"info-value"},eh={key:1,class:"devices-panel"},th={class:"block-title"},nh={key:2,class:"devices-panel"},ah={class:"block-title"},sh={key:3,class:"devices-panel"},rh={key:2,class:"code-block"},ih=["innerHTML"],oh={key:0,class:"form-group"},lh={key:0,class:"form-group"},uh={__name:"ScriptDetailPage",setup(e){const t=Ka(),n=yn(),a=wt(),s=mn(),r=Mt(),{areaOptions:i,showAssignModal:o,selectedAreaId:l,assignLoading:c,assignError:u,openAssign:d,submitAssignCore:f}=nr(),h=Q(()=>t.params.type),g=Q(()=>t.params.id),b=Q(()=>h.value==="actions"),m=Q(()=>h.value==="regular"),$=Q(()=>h.value==="scopes"),y=Q(()=>{var A,X,p;const R=[];return!$.value&&r.has("scripts.edit")&&((A=E.value)!=null&&A.area_id?R.push({label:"Change area",icon:"ph-map-pin",onSelect:ee},{label:"Unassign from area",icon:"ph-x-circle",onSelect:Ve}):R.push({label:"Assign to area",icon:"ph-map-pin",onSelect:ee})),b.value&&r.has("scripts.run")&&R.push({label:"Run",icon:"ph-play",disabled:((X=E.value)==null?void 0:X.state)!=="enabled"||n.isRunning((p=E.value)==null?void 0:p.alias),onSelect:Z}),R}),S=Q(()=>b.value?"Actions":m.value?"Regular":$.value?"Scope":"Script"),C=Q(()=>`Loading ${S.value.toLowerCase()} details`),L=Q(()=>b.value?n.isLoadingActions:m.value?n.isLoadingRegular:$.value?n.isLoadingScopes||n.isLoadingActions||n.isLoadingRegular:!1),P=Q(()=>b.value?n.errorActions:m.value?n.errorRegular:$.value?n.errorScopes:null),T=Q(()=>b.value?n.actions.length>0:m.value?n.regular.length>0:$.value?n.scopes.length>0:!1),E=Q(()=>{const R=g.value;return R?b.value?n.actionByAlias(R):m.value?n.regularByAlias(R):$.value?n.scopeByName(R):null:null}),D=Q(()=>{const R=g.value;return!R||!$.value?[]:n.actionsByScope(R)}),te=Q(()=>{const R=g.value;return!R||!$.value?[]:n.regularByScope(R)}),ue=Q(()=>{var A;const R=(A=E.value)==null?void 0:A.area_id;return R&&a.areasById[String(R)]||null}),ye=Q(()=>$.value?n.isLoadingScopeCode:!1),we=Q(()=>$.value?n.errorScopeCode:null),V=Q(()=>{var R;return b.value||m.value?((R=E.value)==null?void 0:R.code)||"":$.value?n.currentScopeCode:""}),W=Q(()=>{const R=V.value;return R?pi.highlight(R,pi.languages.php,"php"):""});async function Z(){var A,X,p;if(!((A=E.value)!=null&&A.alias))return;const R=await n.runScript(E.value.alias);R!=null&&R.ok?s.success({title:`Ran ${E.value.alias}`,text:(X=n.lastRunResult)!=null&&X.execTime?`Exec time: ${n.lastRunResult.execTime}`:void 0}):s.error({title:`Failed ${E.value.alias}`,text:((p=R==null?void 0:R.error)==null?void 0:p.message)||"Unknown error"})}async function K(R){var _,x;const A=g.value;if(!A)return;let X;b.value?X=await n.setActionState(A,R):m.value?X=await n.setRegularState(A,R):$.value&&(X=await n.setScopeState(A,R));const p=((_=E.value)==null?void 0:_.alias)||A;X&&!X.ok?s.error({title:`Failed to ${R?"enable":"disable"} ${p}`,text:((x=X.error)==null?void 0:x.message)||"Unknown error"}):X&&s.success({title:`${R?"Enabled":"Disabled"} ${p}`})}function ee(){var R;d((R=E.value)==null?void 0:R.area_id)}async function fe(){var X;const R=(X=E.value)==null?void 0:X.id,A=await f(R,n.assignToArea.bind(n));A!=null&&A.ok&&s.success({title:"Assigned",text:"Script assigned to area successfully"})}const Se=Y(!1),Ee=Y(""),be=Y(!1),Me=Y("");function Ve(){E.value&&(Ee.value=`Are you sure you want to unassign script "${E.value.name||E.value.alias}" from its area?`,Me.value="",Se.value=!0)}async function je(){var A;if(!E.value)return;be.value=!0,Me.value="";const R=await n.unassignFromArea(E.value.id);if(be.value=!1,!R.ok){Me.value=((A=R.error)==null?void 0:A.message)||"Failed to unassign script";return}Se.value=!1,s.success({title:"Unassigned",text:"Script unassigned from area successfully"})}async function $e(){const R=g.value;!R||!$.value||await n.loadScopeCode(R)}async function N(){g.value&&(b.value&&n.actions.length===0?await n.loadActions():m.value&&n.regular.length===0?await n.loadRegular():$.value&&n.scopes.length===0&&await n.loadScopes(),$.value&&(n.actions.length===0&&await n.loadActions(),n.regular.length===0&&await n.loadRegular(),await $e()),a.areas.length===0&&await a.loadAreas())}const ae=[{key:"alias",label:"Alias"},{key:"name",label:"Name"},{key:"state",label:"State"}];return bt(()=>{N()}),ua(()=>{n.clearScopeCode()}),Ot(()=>[t.params.type,t.params.id],([R,A],[X,p])=>{(R!==X||A!==p)&&(n.clearScopeCode(),N())}),(R,A)=>{const X=sn("router-link");return w(),q("section",Ug,[L.value?(w(),z(_t,{key:0,text:C.value},null,8,["text"])):P.value&&!T.value?(w(),z(pt,{key:1,title:`${S.value} loading failed`,error:P.value,retry:N},null,8,["title","error"])):E.value?(w(),q("div",Bg,[I(v(xt),{title:E.value.name||E.value.alias||E.value.name,kicker:S.value},{actions:k(()=>[v(r).has("scripts.edit")?(w(),z(v(lf),{key:0,"model-value":E.value.state==="enabled",label:"Enabled","onUpdate:modelValue":A[0]||(A[0]=p=>K(p))},null,8,["model-value"])):se("",!0),I(rr,{items:y.value},null,8,["items"])]),_:1},8,["title","kicker"]),O("div",Vg,[E.value.icon?(w(),q("div",{key:0,innerHTML:E.value.icon,class:"script-icon"},null,8,jg)):se("",!0),E.value.description?(w(),q("p",Hg,M(E.value.description),1)):se("",!0),O("div",Gg,[I(v(me),{variant:E.value.state==="enabled"?"success":"secondary"},{default:k(()=>[U(M(E.value.state),1)]),_:1},8,["variant"]),O("code",null,M(E.value.alias||E.value.name),1),E.value.author?(w(),q("small",qg,M(E.value.author),1)):se("",!0),I(ar,{area:ue.value,areaId:E.value.area_id},null,8,["area","areaId"]),E.value.scope?(w(),z(X,{key:1,to:{name:"script-detail",params:{type:"scopes",id:E.value.scope}},class:"scope-link"},{default:k(()=>[A[6]||(A[6]=O("span",{class:"scope-label"},"Scope",-1)),O("span",zg,M(E.value.scope),1),A[7]||(A[7]=O("i",{class:"ph ph-arrow-right"},null,-1))]),_:1},8,["to"])):se("",!0)]),O("div",Kg,[E.value.filename?(w(),q("div",Wg,[A[8]||(A[8]=O("span",{class:"info-label text-muted"},"File:",-1)),O("span",Jg,M(E.value.filename),1)])):se("",!0),E.value.path?(w(),q("div",Yg,[A[9]||(A[9]=O("span",{class:"info-label text-muted"},"Path:",-1)),O("span",Zg,M(E.value.path),1)])):se("",!0),E.value.created_by?(w(),q("div",Qg,[A[10]||(A[10]=O("span",{class:"info-label text-muted"},"Author:",-1)),O("span",Xg,M(E.value.created_by),1)])):se("",!0)])]),$.value?se("",!0):(w(),z(sr,{key:0,item:E.value,emptyMessage:"This script is not assigned to any area.",onAssign:ee},{action:k(()=>[v(r).has("scripts.edit")?(w(),z(v(pe),{key:0,variant:"primary",icon:"ph-map-pin",onClick:ee},{default:k(()=>{var p;return[U(M((p=E.value)!=null&&p.area_id?"Change area":"Assign to area"),1)]}),_:1})):se("",!0)]),_:1},8,["item"])),$.value&&D.value.length>0?(w(),q("div",eh,[O("div",th,"Action scripts ("+M(D.value.length)+")",1),I(v(Pn),{rows:D.value,columns:ae},{"cell-state":k(({row:p})=>[I(v(me),{variant:p.state==="enabled"?"success":"secondary"},{default:k(()=>[U(M(p.state),1)]),_:2},1032,["variant"])]),"cell-alias":k(({row:p})=>[I(X,{to:{name:"script-detail",params:{type:"actions",id:p.alias}},class:"script-link"},{default:k(()=>[U(M(p.alias),1)]),_:2},1032,["to"])]),_:1},8,["rows"])])):se("",!0),$.value&&te.value.length>0?(w(),q("div",nh,[O("div",ah,"Regular scripts ("+M(te.value.length)+")",1),I(v(Pn),{rows:te.value,columns:ae},{"cell-state":k(({row:p})=>[I(v(me),{variant:p.state==="enabled"?"success":"secondary"},{default:k(()=>[U(M(p.state),1)]),_:2},1032,["variant"])]),"cell-alias":k(({row:p})=>[I(X,{to:{name:"script-detail",params:{type:"regular",id:p.alias}},class:"script-link"},{default:k(()=>[U(M(p.alias),1)]),_:2},1032,["to"])]),_:1},8,["rows"])])):se("",!0),E.value.code||$.value?(w(),q("div",sh,[A[11]||(A[11]=O("div",{class:"block-title"},"Source code",-1)),ye.value?(w(),z(_t,{key:0,text:"Loading source code"})):we.value?(w(),z(pt,{key:1,title:"Code loading failed",error:we.value,retry:$e},null,8,["error"])):V.value?(w(),q("pre",rh,[O("code",{class:"language-php",innerHTML:W.value},null,8,ih)])):(w(),z(rt,{key:3,title:"No code",message:"Source code is not available."}))])):se("",!0)])):(w(),z(rt,{key:3,title:"Not found",message:"The requested script does not exist."})),I(v(ut),{open:v(o),title:"Assign to area","onUpdate:open":A[3]||(A[3]=p=>o.value=p)},{footer:k(()=>[I(v(pe),{variant:"secondary",onClick:A[2]||(A[2]=p=>o.value=!1)},{default:k(()=>[...A[12]||(A[12]=[U("Cancel",-1)])]),_:1}),I(v(pe),{variant:"primary",icon:"ph-check",loading:v(c),onClick:fe},{default:k(()=>[...A[13]||(A[13]=[U(" Assign ",-1)])]),_:1},8,["loading"])]),default:k(()=>[I(v(Qs),{modelValue:v(l),"onUpdate:modelValue":A[1]||(A[1]=p=>Ue(l)?l.value=p:null),label:"Area",options:v(i),icon:"ph-map-trifold"},null,8,["modelValue","options"]),v(u)?(w(),q("div",oh,[I(v(Qe),{variant:"danger"},{default:k(()=>[U(M(v(u)),1)]),_:1})])):se("",!0)]),_:1},8,["open"]),I(v(ut),{open:Se.value,title:"Unassign from area","onUpdate:open":A[5]||(A[5]=p=>Se.value=p)},{footer:k(()=>[I(v(pe),{variant:"secondary",onClick:A[4]||(A[4]=p=>Se.value=!1)},{default:k(()=>[...A[14]||(A[14]=[U("Cancel",-1)])]),_:1}),I(v(pe),{variant:"warning",icon:"ph-x-circle",loading:be.value,onClick:je},{default:k(()=>[...A[15]||(A[15]=[U(" Unassign ",-1)])]),_:1},8,["loading"])]),default:k(()=>[O("p",null,M(Ee.value),1),Me.value?(w(),q("div",lh,[I(v(Qe),{variant:"danger"},{default:k(()=>[U(M(Me.value),1)]),_:1})])):se("",!0)]),_:1},8,["open"])])}}},ch=Ye(uh,[["__scopeId","data-v-31cd836e"]]),dh={class:"page"},fh={key:3,class:"firmwares-panel"},ph={class:"firmwares-summary"},vh={class:"firmwares-list"},gh={class:"firmware-header"},hh={class:"firmware-id"},mh={class:"firmware-meta"},yh={key:0,class:"firmware-desc"},_h={key:1,class:"firmware-changelog"},bh={__name:"FirmwaresListPage",setup(e){const t=al(),n=Mt(),a=Y(null);async function s(){var o;a.value=null;const i=await t.loadFirmwares();i.ok||(a.value=((o=i.error)==null?void 0:o.message)||"Failed to load catalog")}async function r(){var o;a.value=null;const i=await t.refreshFirmwares();i.ok||(a.value=((o=i.error)==null?void 0:o.message)||"Failed to refresh catalog")}return bt(s),(i,o)=>(w(),q("section",dh,[I(v(xt),{title:"Firmware Catalog",kicker:"Firmwares"},{actions:k(()=>[v(n).has("firmware.upload")?(w(),z(v(pe),{key:0,loading:v(t).isUpdating,icon:"ph-arrow-clockwise",onClick:r},{default:k(()=>[...o[0]||(o[0]=[U(" Refresh Catalog ",-1)])]),_:1},8,["loading"])):se("",!0)]),_:1}),v(t).isLoadingList?(w(),z(_t,{key:0,text:"Loading firmware catalog"})):a.value?(w(),z(pt,{key:1,title:"Catalog loading failed",error:a.value,retry:s},null,8,["error"])):v(t).firmwares.length===0?(w(),z(rt,{key:2,title:"No firmwares found",message:"No firmware packages detected in the firmwares directory."})):(w(),q("div",fh,[O("div",ph,[I(v(me),{variant:"primary"},{default:k(()=>[U("Total: "+M(v(t).firmwares.length),1)]),_:1})]),O("div",vh,[(w(!0),q(Pe,null,Wt(v(t).firmwares,l=>(w(),q("div",{key:l.id,class:"firmware-card"},[O("div",gh,[O("span",hh,M(l.id),1),I(v(me),{variant:"success"},{default:k(()=>[U(M(l.version),1)]),_:2},1024)]),O("div",mh,[I(v(me),{variant:"secondary"},{default:k(()=>[U(M(l.device_type),1)]),_:2},1024),l.platform?(w(),z(v(me),{key:0,variant:"info"},{default:k(()=>[U(M(l.platform),1)]),_:2},1024)):se("",!0),l.channels?(w(),z(v(me),{key:1,variant:"warning"},{default:k(()=>[U(M(l.channels)+" ch",1)]),_:2},1024)):se("",!0)]),l.description?(w(),q("p",yh,M(l.description),1)):se("",!0),l.changelog?(w(),q("pre",_h,M(l.changelog),1)):se("",!0)]))),128))])]))]))}},wh=Ye(bh,[["__scopeId","data-v-c0c73f70"]]),Sh={class:"login-page"},kh={class:"login-card"},Ah={key:0,class:"login-loading text-muted"},xh={__name:"LoginPage",setup(e){const t=hn(),n=da();bt(()=>{n.isAuthenticated&&t.replace({name:"areas-favorites"})});function a(){const s=window.location.href;window.location.href=`/auth/login?return_to=${encodeURIComponent(s)}`}return(s,r)=>(w(),q("div",Sh,[O("div",kh,[r[3]||(r[3]=Ku('',3)),I(v(pe),{variant:"primary",size:"lg",class:"login-btn",onClick:a},{icon:k(()=>[...r[0]||(r[0]=[O("i",{class:"ph ph-sign-in"},null,-1)])]),default:k(()=>[r[1]||(r[1]=U(" Sign in with gnexus-auth ",-1))]),_:1}),v(n).isLoading?(w(),q("p",Ah,[...r[2]||(r[2]=[O("i",{class:"ph ph-spinner ph-spin"},null,-1),U(" Checking session… ",-1)])])):se("",!0)])]))}},Ch=Ye(xh,[["__scopeId","data-v-db9de624"]]),Eh=[{path:"/",redirect:"/areas/favorites"},{path:"/login",name:"login",component:Ch,meta:{public:!0}},{path:"/areas/favorites",name:"areas-favorites",component:Hf,meta:{permission:"areas.view"}},{path:"/areas/tree",name:"areas-tree",component:rp,meta:{permission:"areas.view"}},{path:"/areas/:id",name:"area-detail",component:hv,meta:{permission:"areas.view"}},{path:"/devices",name:"devices",component:Sv,meta:{permission:"devices.view"}},{path:"/devices/scanning",name:"devices-scanning",component:Mv,meta:{permission:"devices.scan"}},{path:"/devices/:id",name:"device-detail",component:Ag,meta:{permission:"devices.view"}},{path:"/scripts/actions",name:"scripts-actions",component:Eg,meta:{permission:"scripts.run"}},{path:"/scripts/regular",name:"scripts-regular",component:$g,meta:{permission:"scripts.view"}},{path:"/scripts/scopes",name:"scripts-scopes",component:Og,meta:{permission:"scripts.view"}},{path:"/scripts/:type(actions|regular|scopes)/:id",name:"script-detail",component:ch,meta:{permission:"scripts.view"}},{path:"/firmwares",name:"firmwares",component:wh,meta:{permission:"firmware.view"}},{path:"/:pathMatch(.*)*",name:"not-found",component:()=>Rf(()=>import("./NotFoundPage-Bg6TwA7b.js"),[])}],sl=Gd({history:kd(),routes:Eh});sl.beforeEach(async(e,t,n)=>{var r,i;const a=da();if(await a.init(),(r=e.meta)!=null&&r.public){if(e.name==="login"&&a.isAuthenticated){n({name:"areas-favorites"});return}n();return}if(!a.isAuthenticated){n({name:"login"});return}const s=(i=e.meta)==null?void 0:i.permission;if(s&&!a.hasPermission(s)){n({name:"areas-favorites"});return}n()});function Rh(e){e.config.errorHandler=(t,n,a)=>{const s=(t==null?void 0:t.message)||String(t);console.error(`[Vue errorHandler] ${a}`,s,t)},window.addEventListener("unhandledrejection",t=>{var s;const n=t.reason,a=(n==null?void 0:n.message)||((s=n==null?void 0:n.error)==null?void 0:s.message)||String(n);console.error("[Unhandled rejection]",a,n),t.preventDefault()}),window.addEventListener("error",t=>{const n=t.error,a=(n==null?void 0:n.message)||t.message||"Unknown error";console.error(`[Global error] ${a}`,"at",t.filename,t.lineno,t.colno,n)})}const ir=$c(xf);Rh(ir);const Th=Pc();ir.use(Th).use(sl);const $h=da();$h.init().finally(()=>{ir.mount("#app")});export{ef as G,I as a,q as c,w as o,v as u}; diff --git a/server/dist/index.html b/server/dist/index.html index 96e3b4f..d19d2c6 100644 --- a/server/dist/index.html +++ b/server/dist/index.html @@ -4,7 +4,7 @@ SHServ Vue Client - + diff --git a/webclient/src/api/auth.js b/webclient/src/api/auth.js index 9877afa..42215a6 100644 --- a/webclient/src/api/auth.js +++ b/webclient/src/api/auth.js @@ -1,4 +1,5 @@ const STORAGE_KEY = "shserv_access_token"; +const STORAGE_KEY_EXPIRES = "shserv_expires_at"; let _accessToken = null; @@ -6,14 +7,20 @@ * Set the current OAuth access token for Bearer authentication. * Persists to localStorage so the token survives page reloads. * @param {string|null} token + * @param {number|null} expiresInSeconds — optional lifetime for proactive refresh */ -export function setAccessToken(token) { +export function setAccessToken(token, expiresInSeconds = null) { _accessToken = token || null; try { if (_accessToken) { localStorage.setItem(STORAGE_KEY, _accessToken); + if (expiresInSeconds != null && expiresInSeconds > 0) { + const expiresAt = Date.now() + expiresInSeconds * 1000; + localStorage.setItem(STORAGE_KEY_EXPIRES, String(expiresAt)); + } } else { localStorage.removeItem(STORAGE_KEY); + localStorage.removeItem(STORAGE_KEY_EXPIRES); } } catch { // localStorage may be unavailable (private mode, etc.) @@ -37,12 +44,26 @@ } /** + * Get the stored token expiration timestamp (ms since epoch). + * @returns {number|null} + */ +export function getExpiresAt() { + try { + const raw = localStorage.getItem(STORAGE_KEY_EXPIRES); + return raw ? Number(raw) : null; + } catch { + return null; + } +} + +/** * Clear the stored access token (memory + localStorage). */ export function clearAccessToken() { _accessToken = null; try { localStorage.removeItem(STORAGE_KEY); + localStorage.removeItem(STORAGE_KEY_EXPIRES); } catch { // ignore } diff --git a/webclient/src/api/client.js b/webclient/src/api/client.js index 5ddd4fe..797fab6 100644 --- a/webclient/src/api/client.js +++ b/webclient/src/api/client.js @@ -1,5 +1,17 @@ import { requestHttp } from "./http"; -import { clearAccessToken } from "./auth"; +import { getAccessToken, setAccessToken, clearAccessToken } from "./auth"; + +let isRefreshing = false; +let refreshSubscribers = []; + +function subscribeTokenRefresh(callback) { + refreshSubscribers.push(callback); +} + +function onTokenRefreshed(token) { + refreshSubscribers.forEach((cb) => cb(token)); + refreshSubscribers = []; +} function makeError(type, message, extra = {}) { return { @@ -14,12 +26,60 @@ const { response, data, meta } = await requestHttp(method, path, body, options); if (!response.ok) { - if (response.status === 401) { - clearAccessToken(); - const isLoginPage = window.location.hash.includes("/login"); - if (!isLoginPage) { - window.location.href = `/auth/login?return_to=${encodeURIComponent(window.location.href)}`; + if (response.status === 401 && !options?._retryOnce) { + if (!isRefreshing) { + isRefreshing = true; + try { + const refreshResult = await requestHttp("POST", "/auth/refresh", null); + if (refreshResult.response.ok) { + const newToken = refreshResult.data?.data?.access_token; + if (newToken) { + setAccessToken(newToken); + onTokenRefreshed(newToken); + } else { + throw new Error("No token in refresh response"); + } + } else { + throw new Error("Refresh failed"); + } + } catch (refreshErr) { + onTokenRefreshed(null); + clearAccessToken(); + const isLoginPage = window.location.hash.includes("/login"); + if (!isLoginPage) { + window.location.href = `/auth/login?return_to=${encodeURIComponent(window.location.href)}`; + } + return { + ok: false, + error: makeError("http_error", `HTTP 401`, { + statusCode: 401, + raw: data, + }), + meta, + }; + } finally { + isRefreshing = false; + } + } else { + // Wait for refresh to complete + await new Promise((resolve) => { + subscribeTokenRefresh((token) => resolve(token)); + }); } + + const currentToken = getAccessToken(); + if (currentToken) { + return apiRequest(method, path, body, { ...options, _retryOnce: true }); + } + + return { + ok: false, + error: makeError("http_error", `HTTP 401`, { + statusCode: 401, + raw: data, + }), + meta, + }; } return { diff --git a/webclient/src/stores/auth.js b/webclient/src/stores/auth.js index 025e8bd..fc098ec 100644 --- a/webclient/src/stores/auth.js +++ b/webclient/src/stores/auth.js @@ -1,12 +1,13 @@ import { ref, computed } from "vue"; import { defineStore } from "pinia"; import { apiGet, apiPost } from "../api/client"; -import { setAccessToken, clearAccessToken } from "../api/auth"; +import { setAccessToken, clearAccessToken, getExpiresAt } from "../api/auth"; export const useAuthStore = defineStore("auth", () => { const user = ref(null); const permissions = ref([]); const isLoading = ref(false); + const refreshTimer = ref(null); const isAuthenticated = computed(() => !!user.value); const permissionSet = computed(() => new Set(permissions.value)); @@ -22,6 +23,37 @@ return slugs.some((s) => permissionSet.value.has(s)); } + function scheduleProactiveRefresh() { + if (refreshTimer.value) { + clearTimeout(refreshTimer.value); + refreshTimer.value = null; + } + const expiresAt = getExpiresAt(); + if (!expiresAt) { + return; + } + const delay = expiresAt - Date.now() - 60_000; // refresh 60s before expiry + if (delay > 0) { + refreshTimer.value = setTimeout(() => { + refreshToken().then(() => { + scheduleProactiveRefresh(); + }); + }, delay); + } else { + // Already within 60s of expiry — refresh now + refreshToken().then(() => { + scheduleProactiveRefresh(); + }); + } + } + + function cancelProactiveRefresh() { + if (refreshTimer.value) { + clearTimeout(refreshTimer.value); + refreshTimer.value = null; + } + } + let initPromise = null; async function init() { @@ -31,21 +63,38 @@ isLoading.value = true; initPromise = apiGet("/auth/me") - .then((result) => { + .then(async (result) => { if (result.ok) { const payload = result.data?.data || {}; user.value = payload.user || null; permissions.value = payload.permissions || []; + scheduleProactiveRefresh(); + } else if (result.error?.statusCode === 401) { + await refreshToken(); + const retry = await apiGet("/auth/me"); + if (retry.ok) { + const payload = retry.data?.data || {}; + user.value = payload.user || null; + permissions.value = payload.permissions || []; + scheduleProactiveRefresh(); + } else { + user.value = null; + permissions.value = []; + clearAccessToken(); + cancelProactiveRefresh(); + } } else { user.value = null; permissions.value = []; clearAccessToken(); + cancelProactiveRefresh(); } }) .catch(() => { user.value = null; permissions.value = []; clearAccessToken(); + cancelProactiveRefresh(); }) .finally(() => { isLoading.value = false; @@ -57,9 +106,13 @@ async function refreshToken() { const result = await apiPost("/auth/refresh"); if (result.ok) { - setAccessToken(result.data?.data?.access_token || null); + const token = result.data?.data?.access_token || null; + const expiresIn = result.data?.data?.expires_in || null; + setAccessToken(token, expiresIn); + scheduleProactiveRefresh(); } else { clearAccessToken(); + cancelProactiveRefresh(); } } @@ -72,6 +125,7 @@ user.value = null; permissions.value = []; clearAccessToken(); + cancelProactiveRefresh(); window.location.href = "/#/login"; }